/* motion.css — motion tokens. Everything animates transform / opacity only (plus a
 * <=3px blur on the script names), per the pukhraj-poorva motion contract. */
:root {
  /* text reveals (one-shot, IntersectionObserver) */
  --reveal-dur: 900ms;
  --reveal-ease: cubic-bezier(0.22, 1, 0.36, 1);
  --text-travel: 0.9cqw;          /* rise distance, scales with the column */
  --ln-step: 70ms;                /* per-line cascade inside a block */
  --stagger-step: 110ms;          /* between blocks that enter together */

  /* hero (on load, after the hero art decodes) */
  --hero-delay: 250ms;
  --hero-text-dur: 1400ms;
  --hero-march-dur: 2600ms;
  --hero-march-ease: cubic-bezier(0.25, 0.1, 0.25, 1);
  --name-blur: 3px;

  /* scroll-scrubbed art (view() timelines; the scroll IS the easing -> linear) */
  --flora-travel: 9%;             /* of the cutout's own width */
  --bird-travel: 22%;
  --couple-rise: 7%;

  /* IntersectionObserver fallback clock (browsers without view()) */
  --fx-dur: 1200ms;
  --fx-ease: cubic-bezier(0.33, 0, 0.2, 1);

  /* ambient loops */
  --sway-dur: 9s;
  --march-dur: 1.15s;
  --breathe-dur: 6.5s;
  --shine-dur: 7s;
  --pin-dur: 2.4s;
}

@media (prefers-reduced-motion: reduce) {
  :root {
    --reveal-dur: 0.001ms;
    --hero-text-dur: 0.001ms;
    --hero-march-dur: 0.001ms;
    --fx-dur: 0.001ms;
    --hero-delay: 0ms;
  }
}
