/* ==========================================================================
   Motion
   One reveal system. Hidden states are scoped to .js so the page stays
   fully readable when JavaScript never runs.
   ========================================================================== */

.js .reveal{
  opacity: 0;
  transform: translateY(18px);
  transition:
    opacity var(--slow) var(--ease-out),
    transform var(--slow) var(--ease-out);
}

.js .reveal.is-in{
  opacity: 1;
  transform: none;
}

/* Staggered children */
.js [data-stagger] > .reveal:nth-child(2){ transition-delay: .07s; }
.js [data-stagger] > .reveal:nth-child(3){ transition-delay: .14s; }
.js [data-stagger] > .reveal:nth-child(4){ transition-delay: .21s; }
.js [data-stagger] > .reveal:nth-child(5){ transition-delay: .28s; }
.js [data-stagger] > .reveal:nth-child(6){ transition-delay: .35s; }

/* --- Reduced motion ---------------------------------------------------- */

@media (prefers-reduced-motion: reduce){
  html{ scroll-behavior: auto; }

  *,*::before,*::after{
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    transition-delay: 0ms !important;
  }

  .js .reveal{
    opacity: 1;
    transform: none;
  }

  /* Kill the ambient background motion entirely */
  .fx-canvas,
  .fx-noise{ display: none; }

  .fx-orb{ animation: none; }

  .marquee-track{ animation: none; }

  .art-layer{ animation: none; }

  .hero-badge .dot{ animation: none; }
}
