Taking up more room than a single dot or bar, this suits a spot that reads as "preparing several items at once" — a card list or a gallery. If the item count is knowable (5 of 12 loaded), showing that number as text or a progress-bar is more accurate than the sweep alone.
In a 3×3 grid, setting each cell's animation-delay proportional to its row plus column (delay = (row + col) × 0.1s) produces a diagonal wave that travels from top-left to bottom-right. Animating scale together with opacity per cell adds depth beyond a plain brightness change.
For a loading state that fills the screen for a while with many cells, a skeleton fits better; skip it for anything under 200ms. Give the wrapper role="status" and aria-live="polite", and hide the cells with aria-hidden="true" since they're decorative. Under prefers-reduced-motion, simplify the diagonal sweep to the whole grid pulsing faintly together.