Search documentation
Search pages, components, blocks, styles and colours.
Three spring speeds, 90, 210 and 290ms, with quicker exits and one scale for all of them.
Installation
The easings and duration tokens ship with the foundations, which every Fabricator component installs:
Three speeds
Every transition picks one of three tiers. Small changes use fast, things that slide use moderate, and dialogs use slow. No component invents its own timing, so components that were never designed together still move at the same pace.
Use the tier names, not milliseconds: duration-fast, duration-moderate and duration-slow for entrances, duration-<tier>-exit for exits, and delay-<tier> to wait one tier. Each one reads a token, so the speed setting changes them all.
Slow in, faster out
An exit on the same spring as the entrance lingers: by the time it settles you have already moved on. Exits use a plain tween, about a quarter quicker than the entrance: 70, 160 and 220ms.
Easings
Springs are written as CSS linear() easings, sampled from a spring that settles exactly at the end of its duration. They are theme tokens, so they work with any Tailwind transition or animation utility.
<div className="transition-transform duration-moderate ease-spring" />Rules
- Animate
transformandopacity. Avoid animating layout. - Popups enter with a fade, a 0.97 zoom and a 4px slide from the trigger side, on the fast tier.
- Dialogs enter with a fade and a 0.97 zoom on the slow tier.
- Pressing a button changes its background, never its scale.
Speed
Every duration is a token. The foundations define the base values and one multiplier:
The duration-* and delay-* utilities multiply the tier by --motion-scale where they are used, so you can slow an app down, speed it up, or stop it, for the whole page or one part of it:
:root {
--motion-scale: 0.7; /* snappier */
}
.onboarding {
--motion-scale: 1.4; /* more relaxed, only here */
}0 turns animation off: every transition and enter/exit animation finishes instantly. This site's settings menu has the same control (Relaxed, Default, Snappy, Off).
Reduced motion
Reduced motion means fewer and gentler animations, not none. With prefers-reduced-motion: reduce, components keep their fades and drop their slides and zooms, and Fluid Hover jumps instead of gliding. The foundations do this globally, so components don't need their own motion-reduce: variants. It applies whatever --motion-scale is set to.