:root{
/* Everything eases out. No bounce, no spring, no overshoot. */
--ease-out:cubic-bezier(.22,.61,.36,1); /* @kind other */
--ease-in-out:cubic-bezier(.45,.05,.55,.95); /* @kind other */
--ease-drift:cubic-bezier(.33,0,.2,1); /* @kind other */
--dur-instant:90ms; /* @kind other */
--dur-fast:160ms; /* @kind other */
--dur-base:240ms; /* @kind other */
--dur-slow:420ms; /* @kind other */
--dur-drift:900ms; /* @kind other */
--transition-control:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-out); /* @kind other */
--press-scale:0.985; /* @kind other */
--lift-y:-2px; /* @kind spacing */

/* ---- Scroll choreography ----
   Reference: ommetoer.be — one continuous scroll story rather than a page of
   independent animations. Long expo-out glides, generous stagger, content that
   arrives from below a hard mask edge. Still no bounce and no overshoot. */
--ease-reveal:cubic-bezier(.16,1,.3,1); /* @kind other */
--ease-pin:cubic-bezier(.4,0,.2,1); /* @kind other */
--dur-reveal:720ms; /* @kind other */
--dur-reveal-lg:960ms; /* @kind other */
--dur-count:1600ms; /* @kind other */
--dur-meter:1100ms; /* @kind other */
--dur-crossfade:520ms; /* @kind other */
--reveal-y:28px; /* @kind spacing */
--reveal-y-lg:56px; /* @kind spacing */
--reveal-scale:1.04; /* @kind other */
--stagger-step:90ms; /* @kind other */
--stagger-step-tight:55ms; /* @kind other */
--reveal-threshold:0.22; /* @kind other */
--pin-length:300vh; /* @kind spacing */
--parallax-shift:8%; /* @kind other */
--cue-travel:6px; /* @kind spacing */
--dur-cue:1800ms; /* @kind other */
}
@keyframes sm-rise{from{opacity:0;transform:translateY(var(--reveal-y))}to{opacity:1;transform:none}}
@keyframes sm-rise-mask{from{transform:translateY(110%)}to{transform:translateY(0)}}
@keyframes sm-fade{from{opacity:0}to{opacity:1}}
@keyframes sm-cue{0%{transform:translateY(0);opacity:1}55%{transform:translateY(var(--cue-travel));opacity:.55}100%{transform:translateY(0);opacity:1}}
@keyframes sm-drift-slow{0%{transform:translateY(0)}50%{transform:translateY(-10px)}100%{transform:translateY(0)}}
@media (prefers-reduced-motion:reduce){:root{
--dur-fast:0ms; /* @kind other */
--dur-base:0ms; /* @kind other */
--dur-slow:0ms; /* @kind other */
--dur-drift:0ms; /* @kind other */
--dur-reveal:0ms; /* @kind other */
--dur-reveal-lg:0ms; /* @kind other */
--dur-count:0ms; /* @kind other */
--dur-meter:0ms; /* @kind other */
--dur-crossfade:0ms; /* @kind other */
--press-scale:1; /* @kind other */
--lift-y:0; /* @kind spacing */
--reveal-y:0px; /* @kind spacing */
--reveal-y-lg:0px; /* @kind spacing */
--reveal-scale:1; /* @kind other */
--stagger-step:0ms; /* @kind other */
--stagger-step-tight:0ms; /* @kind other */
--parallax-shift:0%; /* @kind other */
--cue-travel:0px; /* @kind spacing */
}}
