/* ============================================================
   Animation start states.

   CRITICAL: the hidden state is scoped to `html.js` and is undone under
   reduced-motion. If [data-gsap] were hidden unconditionally, a visitor
   without JavaScript — or one whose vendor bundle 404s — would see a
   permanently blank page below the fold. `html.js` is set by the one inline
   snippet in header.php, which the CSP allows via a sha256 hash.
   ============================================================ */

.js [data-gsap] {
  opacity: 0;
  will-change: transform, opacity;
}

.js [data-gsap="fade-up"] { transform: translateY(24px); }
.js [data-gsap="reveal"]  { transform: translateY(32px); }
.js [data-gsap="stagger"] > * { opacity: 0; transform: translateY(20px); }

/* Once revealed, drop the compositor hint. */
.js [data-gsap].is-revealed,
.js [data-gsap].is-revealed > * { will-change: auto; }

@media (prefers-reduced-motion: reduce) {
  .js [data-gsap],
  .js [data-gsap="stagger"] > * {
    opacity: 1 !important;
    transform: none !important;
  }
}
