/* ============================================================================
 * sca-reduced-motion.css
 *
 * prefers-reduced-motion: reduce — AMPLITUDE REDUCTION, NEVER A KILL SWITCH.
 *
 * Every fade still plays: opacity communicates state without spatial
 * displacement. Only displacement and blur are removed, and the continuous
 * loops stop.
 *
 * WHY THIS IS ITS OWN FILE, LOADED LAST — do not merge it back into
 * sca-motion.css.
 *
 * These rules and the base rules they override have the SAME specificity: a
 * media query adds none. At equal specificity the later declaration wins, so
 * the winner is decided purely by stylesheet order. While this block lived at
 * the end of sca-motion.css, every sheet loaded after it — sca-components.css
 * and every sca-sections-N.css — silently beat it for any selector they also
 * styled. `.sca-marquee__track` and `.sca-cta--intro` were already losing.
 *
 * FAILURE MODE, BEFORE THE REMEDY: nothing throws, no rule is greyed out in
 * DevTools, and the file is plainly present in the network tab. The page
 * simply keeps moving for a user who asked it not to — and it is invisible to
 * anyone testing without the OS setting enabled.
 *
 * This file must stay the LAST sca-*.css <link> in index.html. Any new section
 * sheet goes ABOVE it, never below.
 *
 * The JS half of this contract lives in the behaviour modules and is read
 * BEFORE mounting, not after:
 *   const REDUCED = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
 * sca-particles.js returns immediately and never creates the 140 spans.
 * sca-counter.js writes the final value directly and never starts a rAF loop.
 * A loop that is never mounted costs zero; a loop that mounts and is then
 * neutralised by CSS still burns the same main-thread budget every frame.
 * ==========================================================================*/

@media (prefers-reduced-motion: reduce) {
  /* keep every fade — opacity communicates state without spatial displacement */
  [data-reveal="fade"],
  [data-reveal="blurIn"],
  [data-reveal="photoIn"]      { transform: translateY(4px); filter: none; }
  [data-reveal="fade"].is-in,
  [data-reveal="blurIn"].is-in,
  [data-reveal="photoIn"].is-in { transform: none; filter: none; }

  [data-reveal="maskedImage"]      { clip-path: none; }
  [data-reveal="maskedImage"].is-in { clip-path: none; }

  [data-reveal="wordRise"] .sca-word__in,
  [data-reveal="curtain"]  .sca-word__in { transform: translateY(4px); }
  [data-reveal="wordRise"].is-in .sca-word__in,
  [data-reveal="curtain"].is-in  .sca-word__in { transform: none; }

  /* SVG stroke draw: show the finished path, skip the drawing */
  [data-reveal="draw"],
  [data-reveal="draw"].is-in { stroke-dashoffset: 0; }

  /* stop every continuous loop */
  .sca-marquee__track { animation: none; transform: none; }
  .sca-flow__dot      { display: none; }   /* all three; the diagram reads identically without them */
  .sca-flow__you-orb  { animation: none; opacity: 1; }
  .sca-beam           { animation: none; offset-distance: 0%; }
  .sca-magicborder    { animation: none; }

  /* fold 9 — the conic ring spins for as long as the pointer rests on a module
     card. Hover-gated, but still a continuous loop while it runs. The ring
     stays visible at its resting angle: it is the hover affordance, so killing
     the element would remove the feedback, not just the motion. */
  .sca-module:hover::after { animation: none; }

  /* fold 7 — the dotted-frame dots are a one-shot pop, not a loop. Amplitude
     reduced rather than removed, matching the rule for every other entrance. */
  .sca-dottedframe__dot { animation: none; opacity: 0.36; transform: none; }

  /* Backdrops (folds 1 and 5) are now <video>. The real guard lives in JS —
     sca-backdrop-video.js never plays and never even fetches the clip under
     this setting, so the poster JPG stays frozen and the still frames carry
     the alive-vs-decaying contrast on their own. These rules stay as a cheap
     belt-and-suspenders: kill the pointer parallax on the wrapper, and neuter
     any stray transform/filter/animation on the element itself. */
  .sca-hero__backdrop-img   { animation: none; transform: none; }
  .sca-hero__backdrop       { transform: none; }
  .sca-twelve__backdrop-img { animation: none; opacity: 0.85; filter: none; }

  /* the fold-1 CTA two-stage pop collapses to its resting state */
  .sca-cta--intro {
    animation: none;
    width: auto;
    padding-inline: 28px;
    transform: none;
  }
  .sca-cta__letter { animation: none; opacity: 1; transform: none; }
}
