Spinner
Indeterminate loading indicator. Three sizes: small, medium, large. Use for waits of unknown duration under ~5 seconds. For longer waits, pair with a message or use Progress if determinate. Don't stack multiple spinners.
a11y (built in): every spinner is a named live region — role="status" plus aria-label — so the wait carries an accessible name instead of reading as an empty box; the ring itself is a pure CSS @keyframes rotation and holds no text of its own.
Usage: An empty <span> with the full combo — base plus size, e.g. lb-spinner lb-spinner--medium: all width, height, and ring thickness live on the size modifier, so the bare base renders collapsed. It spins from the moment it is in the DOM — there is no start/stop API, no init, and no events: mount it when the wait begins, remove it (or swap in the loaded content) when the wait ends. flex-shrink: 0 is built in, so it can sit in a flex row next to a message without being squeezed.