/* SNURRA MOTION — entrances always ease-out; linear is reserved for infinite loops.
   Ambient motion is continuous and never blocks content. */
:root{
--ease-out:cubic-bezier(.16,1,.3,1); /* @kind other */
--ease-in-out:cubic-bezier(.45,0,.55,1); /* @kind other */
--ease-linear:linear; /* @kind other */

/* micro-interactions */
--dur-hover:200ms; /* @kind other */
/* standard scroll reveal */
--dur-reveal:500ms; /* @kind other */
/* feature scroll reveal */
--dur-reveal-feature:800ms; /* @kind other */
--stagger-step:100ms; /* @kind other */

/* brand mark: 360deg, linear, infinite */
--dur-mark-spin:10000ms; /* @kind other */
/* background drift: ease-in-out, alternate */
--dur-waves:5000ms; /* @kind other */

--rise-standard:24px;
--rise-feature:32px;
--lift-hover:-2px;

/* legacy aliases used by the locked hero */
--ease-motion:var(--ease-in-out); /* @kind other */
--dur-spin:var(--dur-mark-spin); /* @kind other */
--dur-nova:4.7s; /* @kind other */
--dur-spark:4.2s /* @kind other */}

/* ---------- ambient ---------- */
@keyframes sn-spin{to{transform:rotate(360deg)}}
@keyframes sn-drift{from{transform:translate3d(0,0,0) scale(1.02)}to{transform:translate3d(-2.2%,1.4%,0) scale(1.06)}}
.sn-ambient-spin{animation:sn-spin var(--dur-mark-spin) var(--ease-linear) infinite}
.sn-ambient-waves{animation:sn-drift var(--dur-waves) var(--ease-in-out) infinite alternate}

/* ---------- scroll reveals ----------
   Add .sn-reveal (or .sn-reveal--feature) and let an IntersectionObserver set data-revealed.
   Stagger grouped items with style="--i:0|1|2|3". */
.sn-reveal{opacity:0;transform:translateY(var(--rise-standard));transition:opacity var(--dur-reveal) var(--ease-out),transform var(--dur-reveal) var(--ease-out);transition-delay:calc(var(--i,0) * var(--stagger-step))}
.sn-reveal--feature{transform:translateY(var(--rise-feature));transition-duration:var(--dur-reveal-feature)}
.sn-reveal[data-revealed]{opacity:1;transform:none}

/* ---------- micro-interactions ---------- */
.sn-lift{transition:transform var(--dur-hover) var(--ease-out),border-color var(--dur-hover) var(--ease-out),background-color var(--dur-hover) var(--ease-out),box-shadow var(--dur-hover) var(--ease-out)}
.sn-lift:hover{transform:translateY(var(--lift-hover))}

@media (prefers-reduced-motion:reduce){
.sn-ambient-spin,.sn-ambient-waves{animation:none!important}
.sn-reveal{opacity:1!important;transform:none!important;transition:none!important}
.sn-lift:hover{transform:none}
*,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
