Signature — clipped slide-up

Each glyph slides 100% of its own height inside an overflow:hidden box. Stagger 30ms per character. Easing: cubic-bezier(0.16, 1, 0.3, 1). 600ms total.

BUILT FOR GROWTH
Replay heading
Per-character slide-up · 600ms · 30ms stagger
Count-up numerics

Numbers animate from 0 to target on first render and on slide change. 700ms ease-out cubic. Tabular figures throughout.

$ 2,400,000
Daily limit
Replay count-up
0 → target · 700ms ease-out
Press feedback

Every button — and only buttons — press to scale(0.97). 100ms. Small, snappy.

Tap or click to feel it.

Easing curves
easing-out
cubic-bezier(0.16, 1, 0.3, 1)

Default for entries — slow ease-out, signature feel

easing-in
cubic-bezier(0.4, 0, 1, 1)

Exits — fast accelerating

easing-default
cubic-bezier(0.4, 0, 0.2, 1)

Most things — symmetric ease-in-out

Duration scale
TokenValueRole
--dur-instant50msHover state changes, micro-interactions
--dur-fast150msStandard — buttons, links, focus rings
--dur-normal300msSheets, dialogs, route transitions
--dur-slow500msReserved — only when 300ms feels rushed
Do · Don't
Do

Use the per-character clipped slide-up for hero headings — it is the brand's signature motion.

Do

Animate numerics with count-up (700ms ease-out cubic) on first render and on slide change.

Do

Use scale(0.97) on every button press. Small, snappy, 100ms.

Don't

Don't use spring or bouncy easing anywhere. The brand is precise — never wobbly.

Don't

Don't animate individual letters with rotation, scale, or color. Slide-up only.

Don't

Don't exceed 500ms unless it's a deliberate gradient drift on a marketing surface.

Recipes — v1.1 facelift

Named interaction recipes added across the portal chrome and landing page. Same three easings, same four durations — no new motion primitives.

RecipeDurationEasingRole
reveal-on-scroll300ms (--dur-normal)--easing-outFade + 8px rise, once, on first viewport entry. `.db-reveal` + `use:reveal` action.
view transition90ms out · 150ms in--easing-in / --easing-outCross-fade + 4px rise between routes via `document.startViewTransition`.
copy-confirm150ms (--dur-fast)--easing-outIcon swaps to a check with a fade, label flips to "copied", reverts after ~1.2s.
hover lift150ms (--dur-fast)--easing-defaultCard/tile border + shadow-md on hover — no transform, just weight.
nav indicator150ms (--dur-fast)--easing-outUnderline or left-rail mark scales in from 0 on the active item.
Reveal on scroll

Sections fade in + rise 8px once, the first time they cross 15% of the viewport. Reduced motion: sections render fully visible, no animation.

Section content
Replay reveal
fade + 8px rise · 300ms · easing-out
Copy confirm

Copy actions swap their icon to a check with a short fade and add a 'copied' label, then revert after ~1.2s.

Replay copy
icon fade · 150ms · reverts after 1.2s