Motion Lab · seven primitives

running pace: candlelit · values below are read live fromsrc/core/motion/config.ts

Every concept names one of these four registers and gets all seven primitives in it. Switch the pace above and scroll: the markup is identical, only the register changes. Add ?reduced=1 to any concept URL to check reduced-motion parity.

01 · line reveal

Lines rise out of a maskone after another,then the rest follows.

Anything marked [data-after] in this scope arrives behind the last line.

02 · masked parallax

The image drifts slower than the page inside its frame. Overscan is derived from the same drift value, so the edge can never show.

parallax demo

03 · word reveal

Honest quote, done on time, and the finish speaks for itself.

04 · count up

4.9out of five
across 327 reviews

static HTML holds the real value — only below-fold counters reset

05 · draw in

01

Call or book online

02

We survey the job

03

The work gets done

04

You approve it

06 · scrub wipe

A · scroll-driven

after
before

B · drag-driven, with release momentum

after
before

07 · settle

A · stamp

Licensed & insured

B · flicker

4.9

C · float (soft only)

tilt −2
tilt 3

08 · scenes

Pinned full-viewport theatre. The stage is held by CSS position: sticky, so scrolling stays at native speed — this primitive only reads progress. Below 1024px, and under reduced motion, it renders as a plain stacked composition with the panels as a swipeable row.

01 / 3

Express

Maintenance done right — in and out the same morning.

See the work

02 / 3

Full Detail

Inside and out, restored to something you want to sit in.

See the work

03 / 3

Ceramic Elite

Multi-year protection, applied over corrected paint.

See the work