Skip to main content
Motion here is purposeful and restrained. An animation communicates a state change or guides attention; it does not decorate.

Principles

  1. Functional, not decorative — every animation communicates something.
  2. Fast — most transitions finish in 150–200ms. A user should never wait on one.
  3. Consistent — the same kind of change animates the same way everywhere.
  4. Respectful — prefers-reduced-motion is 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 enable prefers-reduced-motion for medical reasons — vestibular disorders, seizure conditions — as well as preference. Honour it.
In Tailwind, use the motion-safe and motion-reduce variants:
N3 brand components read motion configuration from the harness — const { motion } = useNyuchiHarness(…) — rather than each deciding for itself. That is what makes the behaviour consistent instead of merely common.

What to keep, what to remove

Keep under reduced motion: opacity changes, colour changes, and the layout shift itself — just without animating it. Remove: translate, scale and rotate animations; sliding transitions; parallax; auto-playing carousels.