<aside> 💡 ~30% of users enable prefers-reduced-motion at the OS level (macOS, iOS, Windows, Android all support it). This includes people with vestibular disorders, motion sickness, attention difficulties, and those who simply find animation distracting.
</aside>
prefers-reduced-motion: reduce does NOT mean "no motion" — it means less motion. The user wants to reduce large movements, parallax, auto-playing animations, and unexpected transitions. Small, subtle animations (a 100ms opacity fade) are generally fine.
| Animation type | Normal mode | Reduced motion |
|---|---|---|
| Page transitions (slide, zoom) | Full animation | Instant cut or subtle crossfade (≤200ms opacity) |
| Parallax scrolling | Parallax active | Remove entirely — static positioning |
| Auto-playing video/animation | Plays automatically | Pause by default; show first frame |
| Loading spinners | Rotating animation | Keep (essential for feedback) but reduce rotation speed |
| Hover micro-interactions | Scale/bounce on hover | Reduce to opacity or remove |
| Skeleton loaders | Shimmer animation | Static grey blocks (no shimmer) |
| Scroll-linked animations | Elements animate on scroll | Elements appear in final state immediately |
| Carousel auto-rotation | Auto-rotates | Pause; manual only |
| Error shake | Input shakes left-right | Remove — use colour + text only |
| Toast slide-in | Slides from edge | Appears instantly (opacity 0→1, ≤200ms) |