/* ── Scroll reveal (js/scroll-reveal.js) ─────────────────────────────────────────────────────
   Focus pull: a block rises from slightly behind the page and sharpens into focus, the same
   depth language as the stereo headings. Blocks start hidden only when a script can reveal them
   and motion is welcome; without JavaScript, in print, with reduced motion or in 3D mode (whose
   stage band already handles arrival) every block is readable from the start. */
@media screen and (scripting: enabled) and (prefers-reduced-motion: no-preference) {
  html:not(.spatial-active) [data-reveal]:not(.animate-in) {
    opacity: 0;
    /* Individual translate/scale, not transform: blocks keep their own transform-based hover
       lifts, and only the reveal's temporary class animates these. */
    translate: 0 1.75rem;
    scale: .965;
    filter: blur(10px) saturate(.6);
  }
  html:not(.spatial-active) [data-reveal].is-revealing {
    transition:
      opacity .7s cubic-bezier(.2, .7, .2, 1),
      translate .95s cubic-bezier(.16, 1, .3, 1),
      scale .95s cubic-bezier(.16, 1, .3, 1),
      filter .8s cubic-bezier(.2, .7, .2, 1);
    transition-delay: calc(var(--reveal-order, 0) * 90ms);
  }
}
