Motion & Timing · the vocabulary behind every animation
Motion
01
The four speeds
Every animation snaps to one of four durations. Not a spectrum — four buckets. This is what keeps motion feeling like one system instead of many one-off timings. Hit rerun to feel the difference in length.
instant
.14s
quick
.3s
signature
2.2s
ambient
5s
Duration scale
Four buckets
Snap every animation to one of four. The number in the token, never a magic value in the rule.
Two curves carry almost everything. Snap for interface motion, draw for the hand-drawn reveals. Watch the two balls: snap is decisive at both ends, draw eases the landing so a drawn line settles.
snap · UI
draw · reveals
Easing curves
Snap & draw
Two named curves. Snap for interface, draw for the signature reveals.
snap — decisive both ends, most UI
draw — eases the finish so a line lands
Linear only for ambient loops and true progress. Never browser-default ease.
The .14s layer: the interface answering the instant you touch it. Hover and press the button, open the reveal. Fast enough to feel like cause-and-effect, not animation.
A quick reveal +
The marker rotates over .3s (quick), the press was .14s (instant). Different jobs, different buckets.
Instant · .14s
Cause and effect
Confirms the interaction as it happens. Hover lift, active press, tab underline.
Only transform & opacity at this speed — they're GPU-cheap. Never animate layout here.
The 2.2s layer is the brand's soul: the pencil draws, the cursive writes, the underline reveals under a moving tip. This is motion as character. One per view — more than one and none of them is special.
Signature · 2.2s
Motion as character
The hand-drawn reveals. Pencil, cursive, underline. Draw easing, always.
One per view. Three things drawing themselves = noise, not signature.
Reduced-motion → completed state shown instantly, sprite hidden.
The 4–6s layer: gentle idle life. A card floats, chips bob, figures sway. Subtle enough to feel alive without being noticed. The moment you consciously see it, it's too much.
float
Ambient · 4–6s
Idle life
Decorative loops that make a page feel alive, not static.
Amplitude 8–14px, ease-in-out, infinite. Never competes with content.
First to be cut under reduced-motion. Meaning never depends on it.
Every animation has a still answer. The rule: if you freeze it, no information is lost. Motion may add delight, but it can never be the only carrier of meaning. This is a hard accessibility line, not a nice-to-have.
Motion
Frozen state (reduced-motion)
Pencil draws line
Line shown complete, pencil hidden
Cursive writes itself
Word shown complete
Stickman walks trail
Figure stands at current stop
Number counts up
Final number shown
Card floats / chips bob
Still, at rest position
Stickmen tug-of-war
Static mid-pose (tension still reads)
Reduced-motion
The hard line
One media query kills all animation. Every motion must have a still answer that loses nothing.
If freezing loses information, the design is wrong — put the info in the static state.