/* ── Motion ──────────────────────────────────────────────────────────────────
   ONE easing curve for everything. Entrances are opacity plus a 4-14px
   translate. No scale-ups, no bounce on hover, no parallax.

   AMBIENT ANIMATION CONTRACT — every self-running system on a page must:
     1. stop when it is off screen (IntersectionObserver),
     2. stop when the tab is hidden (document.hidden),
     3. pause on hover and hold a user's explicit click,
     4. freeze in a FULLY DRAWN resting state under prefers-reduced-motion.
   A loop that would be caught mid-crawl in a screenshot or a PDF is a bug. */
:root {
  --ease:cubic-bezier(.22,1,.36,1); /* @kind other */

  --dur-hover:220ms; /* @kind other */
  --dur-state:320ms; /* @kind other */
  --dur-fade:460ms; /* @kind other */
  --dur-pulse:1700ms; /* @kind other */
  --dur-rise:1000ms; /* @kind other */
  --dur-rise-max:1560ms; /* @kind other */
  --stagger:60ms; /* @kind other */

  /* ambient cycles, as tuned on the site */
  --cycle-demo:4600ms; /* @kind other */
  --cycle-visuals:4400ms; /* @kind other */
  --cycle-verdict:6000ms; /* @kind other */
  --pipe-rail:5400ms; /* @kind other */
  --pipe-return:2700ms; /* @kind other */
  --pipe-hold:1600ms; /* @kind other */
  --hold-click-demo:20000ms; /* @kind other */
  --hold-click-visuals:14000ms; /* @kind other */

  --lift-cell:0px; /* @kind spacing */
  --lift-card:2px; /* @kind spacing */
  --plane-rise:9px; /* @kind spacing */
}

@media (prefers-reduced-motion: reduce) {
  :root {
    --dur-hover:1ms; /* @kind other */
    --dur-state:1ms; /* @kind other */
    --dur-fade:1ms; /* @kind other */
    --dur-pulse:1ms; /* @kind other */
    --dur-rise:1ms; /* @kind other */
    --dur-rise-max:1ms; /* @kind other */
    --stagger:0ms; /* @kind other */
    --lift-card:0px; /* @kind spacing */
    --plane-rise:0px; /* @kind spacing */
  }
  *,*::before,*::after {
    animation-duration:1ms !important;
    animation-iteration-count:1 !important;
    transition-duration:1ms !important;
  }
}
