/* Base hidden states for JS/GSAP-driven reveals.
   If JS fails to load, remove the "no-js-fallback" class server-side is not possible here,
   so we keep initial states subtle (opacity only, no layout-breaking transforms) and always
   reveal via a safety timeout in main.js. */

.reveal-up {
  opacity: 0;
  transform: translateY(36px);
}
.reveal-fade { opacity: 0; }
.reveal-clip {
  clip-path: inset(0 0 100% 0);
}
.reveal-scale {
  opacity: 0;
  transform: scale(1.15);
}

.js-ready .reveal-up,
.js-ready .reveal-fade,
.js-ready .reveal-clip,
.js-ready .reveal-scale {
  transition: opacity 1s var(--ease), transform 1s var(--ease), clip-path 1.1s var(--ease);
}

.no-js .reveal-up,
.no-js .reveal-fade,
.no-js .reveal-clip,
.no-js .reveal-scale {
  opacity: 1 !important;
  transform: none !important;
  clip-path: none !important;
}

@media (prefers-reduced-motion: reduce) {
  .reveal-up, .reveal-fade, .reveal-clip, .reveal-scale {
    opacity: 1 !important;
    transform: none !important;
    clip-path: none !important;
  }
}
