Labs

Motion

The site's motion system, on the surface it was worked out on — a duration scale, three easing curves, weight expressed as duration-plus-curve, ambient loops, and a few signature behaviors, all honoring a reduced-motion contract. Drag anything and the whole system responds live. Restraint is the default: nothing overshoots or bounces unless you ask it to.

Preview

Preview theme

Duration scale

Six named steps. Each swatch runs back and forth on its own step's duration, same neutral ease (ambient's curve) across all six, so the only variable your eye is reading is duration.

Easing library

Three named curves — enter, exit, ambient. Click any track to replay. Defaults are restrained: no bounce, elastic, or overshoot anywhere. Weight/importance is expressed by pairing these with a duration step (section 3), not by separate curve variants.

Weight / importance tuner

Three objects, same on-screen distance, each a live example of duration + curve composition — pick any duration step and any curve per tier on the right. "Heavy object entering" = slow + enter; "light object drifting" = fast + ambient. No bespoke per-tier curve or cushion — these three are worked examples, not an enum.

Enter / exit round trip

One card, the actual enter/exit curves from section 2 above at duration.base — arriving and leaving matched together, not a technique bake-off. Tune the curves in section 2; this just shows them working as a pair.

Ambient loop lab

Subtle, low-amplitude looping motion for a "living site, not a distracting one." The three pulsing dots share one desync control: at 0 they pulse in unison ("robotic"); higher values stagger their phase ("organic"). The crosshair only tracks the cursor inside this panel.

breathing glow

pulsing grid nodes (desync)

gradient drift

cursor-lag crosshair (this panel only)

move your cursor here

Choreography / stagger lab

A small hero mockup — eyebrow, headline, subhead, CTA, image — enters as one GSAP timeline. Order and interval are tunable on the right.

Signature behaviors

Three named, scoped behaviors — not global page effects.

Grid draw-on

Hand-drawn via stroke-dashoffset (no DrawSVGPlugin), wired to replay every time this section scrolls into view, not just once. Scroll this panel up and back down to see it re-trigger.

Crosshair track

Scoped to this card only — fades out the moment the cursor leaves its bounds. Not a page-wide effect.

Selected work

Hover to track — leave the card and the reticle fades.

1 · Duration scale

The shipped scale (tokens/motion.json), roughly-evenly spaced. Named by role, not by ms — reach for fast/base/slow in components, not raw numbers. Drag anything to explore; Reset returns to these values.

2 · Easing library

Four bezier control-point numbers per curve (x1 y1 x2 y2, same meaning as CSS cubic-bezier()). Defaults are restrained on purpose — nothing overshoots past 1.0 by default. Three curves only — settle/emphasis/two-phase linear-settle were cut after live tuning; weight is duration+curve composition (section 3), not more curves.

enter — entrances, ease-out

exit — exits, ease-in / accelerate

ambient — loops, sine-like ease-in-out

3 · Weight / importance tuner

Per semantic tier: a duration step + a curve name — freely combinable, not a bespoke per-tier curve. This is the composition itself, not a preview of hidden math.

primary

Duration

Primary duration

Curve

Primary curve

secondary

Duration

Secondary duration

Curve

Secondary curve

tertiary

Duration

Tertiary duration

Curve

Tertiary curve
4 · Enter / exit round trip

Nothing to tune here — this demo runs directly on the enter/exit curves from section 2 and duration.base from section 1. It's a worked example of the two curves paired together, not a separate control surface.

5 · Ambient loop lab

Amplitude defaults low — ambient motion should read as "alive," not "animated." Desync prevents multiple loops sharing a start time.

0 = all three dots pulse in unison ("robotic"). Higher = staggered phase ("organic").

6 · Choreography / stagger lab

Order the hero mockup's five elements enter in, and the delay between each.

Stagger order
7 · Signature behaviors

Grid draw-on runs on the enter curve. Theme-crossfade timing below; crosshair-track's lag constant is shared with the ambient crosshair (section 5).

Crossfade easing

Crossfade easing
8 · Reduced-motion preview

Ambient/looping motion fully disables under reduced motion (not dampened). Essential transitions collapse to fast/near-instant instead.

Simulate reduced motion