Slow. Exponential.
Never bouncy.
Headlines arrive by word-stagger. Letters typewrite. Cards lift on hairlines, not transforms. The brand does not wink. Hover over the cards below to feel each easing curve.
Three curves. Hover to feel them.
Silk · default editorial
cubic-bezier(0.22, 1, 0.36, 1) · the canonical curve, used for ~90% of UI motion.
Velvet · slow exponential
cubic-bezier(0.16, 1, 0.30, 1) · for headlines, hero pinning, the manifesto reveal.
Breath · pulse
cubic-bezier(0.40, 0, 0.20, 1) · slow in-out for the caret and ambient pulses.
No bounce. No spring overshoot. No easeInOutBack. The brand does not wink. Linear curves are reserved for the marquee.
Long for content. Short for state.
Words arrive. The brand never bounces.
Each word inside a clipped mask. Translates from translateY(105%) → 0 on velvet, 80ms stagger.
handsome@goodthings.co
Caret pulses on the breath curve. The input is a sentence, not a form value.
Hover this customer language to draw a left-to-right clay underline.
scale-x: 0 → 1 · 700ms silk · transform-origin left. Never a static underline on hover.
Twenty years.
The opener blurs out as the year blurs in. 1800ms velvet.
A drenched peacock band, set in motion.
60-second linear loop. Diamond fleurons between phrases. The marquee is one of the brand's two uses of motion-as-rhythm; the other is the citation counter.
Colour and border do the work. Never scale, never glow.
Hover: ink fill, paper text, arrow +4px. 400ms silk. Mirrored on ink.
Card → Lift shadow. Just perceptible. Never a transform on hover.
Vestibular triggers stop. The rest stays.
Honoured under prefers-reduced-motion: reduce
- Marquee (loop)
- Caret blink
- Cursor-engaged ring scale
- Manifesto blur cycle
Kept for everyone
- Button hover transitions
- Underline-draw on links
- Card hairline brighten
- Page transitions (no parallax)
These are state changes, not vestibular-trigger loops. They communicate; they don't decorate.