Large motion — parallax, zoom, shake — can trigger dizziness or nausea in users with vestibular disorders. macOS, iOS, Windows, and Android all expose a system-level "reduce motion" setting, and `@media (prefers-reduced-motion: reduce)` reads it in CSS.
Rather than deleting animation entirely, it's usually better to **shrink distance and scale** — a fade instead of a slide, an instant swap instead of a big zoom. Motion that's functionally load-bearing, like a spinner communicating progress, shouldn't just vanish — that removes information, so it needs a lighter substitute, not nothing.
Left is the default animation — a big bounce and spin. Right is the same state change detected via `prefers-reduced-motion: reduce`, replaced with a short, in-place fade.
When to use
Wire the media query once into your shared transition utility and it covers every component — solve it at the token/utility level, not component by component.