Serves the same "still working" purpose as a ring spinner, but independent dots circling an orbit read as more organic and eye-catching than a single spinning border. It suits a splash screen where brand personality matters; it's too much for a small spot like a button.
A wrapper rotates around its own center while each dot is pushed out from that center with transform: translateY(-radius), placing it on the orbit. With more than one dot, giving each a different rotation duration or an opposite direction staggers them apart, and a faint trailing shadow per dot adds a sense of speed.
Prefer a skeleton for a long wait covering the whole screen, and consider skipping it under 200ms. Give the wrapper role="status" and aria-live="polite", and hide the dots with aria-hidden="true" since they're decorative. Under prefers-reduced-motion, slow the rotation or replace the dots with a static image at a fixed position.