Principles
- Functional, not decorative — every animation communicates something.
- Fast — most transitions finish in 150–200ms. A user should never wait on one.
- Consistent — the same kind of change animates the same way everywhere.
- Respectful —
prefers-reduced-motionis honoured, not worked around.
Timing
Easing
Enter and exit
Fade
For tooltips, popovers and content that appears in place:Slide
For sheets, drawers and sidebars entering from an edge:Scale
For dialogs — 95% to 100% with a simultaneous fade:Collapse
Radix handles the height animation for accordions and collapsibles internally. Do not reimplement it.Common patterns
Reduced motion
Users enableprefers-reduced-motion for medical reasons — vestibular disorders, seizure
conditions — as well as preference. Honour it.
motion-safe and motion-reduce variants:
const { motion } = useNyuchiHarness(…) — rather than each deciding for itself. That is what makes the behaviour
consistent instead of merely common.