DF4 Labs · System · Motion v1.0 · Effective immediately

Motion clarifies. It never decorates.

The third hard rule of the DF4 system, made operational. One curve, four timing tokens, four primitives, three sanctioned ambient surfaces. Every animation across the family — parent site, every product company, every product app — composes from this and only this.

01

The tokens

There is one curve. There is one reveal distance. The timing family has five members, picked by what is animating — never by taste.

--ease
cubic-bezier(0.2, 0, 0, 1)
The single sanctioned curve. Soft, asymmetric ease-out. No bounce, no spring.
--reveal
8px
The single reveal-translate distance. Hierarchy is conveyed by timing, never by distance.
--t-instant
120ms
State flip — checkbox toggle, hover colour, status pill switch.
--t-quick
240ms
Small reveal — dropdown, toast, route fade-out.
--t-base
360ms
Element reveal — card, row, pane entering the page.
--t-slow
560ms
Hero reveal — route headline, ledger fill, full-page entrance.
--t-march
1600ms
Sanctioned ambient — telemetry pulse, ticker step, logomark nudge.
02

The four primitives

Every animation in the system is one of these four. If you reach for a fifth, the answer is to compose two of these — not invent.

01 · reveal

An entry, revealed.

Fade up 8px over --t-base.

Element entering on page load or scroll. Default --t-base; --t-slow for hero, --t-quick for toast.
01b · reveal + stagger
01foxlitx-api99.99%
02foxlitx-runner99.94%
03repolize-api99.98%
04repolize-graph99.81%
05houseai-edge100.00%
List reveal — increment animation-delay by 40ms per child, capped at 8.
02 · flip
events/min 23.4
repolize-graph OK
Value changed in place. Always --t-instant (120ms). Opacity-only — no translate.
03a · tick · status pulse SANCTIONED
LIVE · 23.4 ev/min
Telemetry · streaming
repolize-graph · degraded
Status dot pulses opacity 1 → 0.4 → 1 over --t-march. Linear, infinite. The signal is "this surface is live" — ownership.
03b · tick · ticker marquee SANCTIONED
All systems operational Latest · Repolize 0.4 ships ownership maps London · 14:32 UTC Issue 003 of Field Notes → All systems operational Latest · Repolize 0.4 ships ownership maps London · 14:32 UTC Issue 003 of Field Notes →
Horizontal marquee at fixed pixel rate. Pauses on hover. The signal is "operational state" — what is true right now.
03c · tick · logomark nudge SANCTIONED
Orange arrow translates +2px / −2px over --t-march. The signal is ownership — this is a DF4 surface.
03

Reduced motion · the same information, no movement

When a user opts out, animations don't simply shorten — they rebuild themselves so the user learns the same thing without translation. Slide becomes fade. Stagger collapses. Ambient surfaces freeze on the most recent state.

How to test In macOS / iOS: System Settings → Accessibility → Display → Reduce Motion. In dev tools: Rendering panel → "Emulate CSS prefers-reduced-motion: reduce". Or use the toggle below to see the page rebuild itself live.
04

What is forbidden

The explicit list. If a design proposal uses anything below, it is rejected — not refined. The doctrine wins.

transform: scale(1.02) on hover
Cards and buttons should not grow. The hover signal is colour or border, never size.
Bouncy springs, overshoot easings
Reads as toy / consumer-friendly. DF4 is editorial.
Parallax on scroll
Reads as 2017 startup landing page. Hierarchy is set, not earned by scroll position.
Background gradient breathing / hue shift
The system uses paper, not gradient atmosphere.
Floating orbs, blobs, particle fields
Nothing in the system exists to make particles of.
Carousel auto-advance
We do not show people content they did not ask to see.
Slide-in > 16px, horizontal slides
Horizontal motion implies "next slide", not "this is the page".
Counting-up numbers on scroll
The number is the same number whether it counted or not.
Letter-by-letter heading reveals
A headline is a sentence, not a typewriter demo.
animation: ... infinite outside the three sanctioned ambients
Decorative loops are forbidden. Telemetry, ticker, logomark — those are it.
Different easings on the same page
One curve. One system.
Loaders longer than --t-slow that are not real progress
If we are waiting on something, we say so. We do not perform waiting.
05

Implementation checklist

Before any DF4 surface ships with motion, every box below is checked. If one is unchecked, the surface ships static and the motion lands in a follow-up.