10
FLIP reorder — the JS↔CSS bridge
element.animate() accepts linear() easing strings, so the bridge reads the spring tokens off getComputedStyle(:root) — cached, pinned fallback, reduced-motion guarded — and a JS FLIP rides the EXACT curve the CSS uses. One physics, two runtimes.
readMotionToken()springAnimate()flipFrom()Tier semantics in the reorder: the item you ACTED on is the event — it lands on the bounce tier (ζ.34, 620ms). Displaced neighbors are consequences — they ride the calmer spring (ζ.48, 500ms). Cause and effect get different physics.
Task queue
promote a row — or restack the lot
- 1rotate edge certificatesP2
- 2drain relay-02 trafficP1
- 3compact event storeP3
- 4rebuild search indexP4
- 5verify cold snapshotsP5
The bridge
same tokens, read once, fed to WAAPI
const easing = getComputedStyle(document.documentElement)
.getPropertyValue("--ease-spring"); // "linear(0 0%, 0.1455 4.2%, …)"
el.animate(
[{ transform: `translate(${dx}px, ${dy}px)` }, { transform: "none" }],
{ duration: motionMs("--motion-spring"), easing }, // WAAPI takes linear()
);
// cached per token · pinned cubic-bezier fallback · no-op under reduced motion