/* ==========================================================================
   ANIMATIONS.CSS — base classes toggled by GSAP/ScrollTrigger via JS
   ========================================================================== */

.reveal-up, .reveal-left, .reveal-right, .reveal-scale {
  opacity: 0;
}
.reveal-up { transform: translateY(50px); }
.reveal-left { transform: translateX(-50px); }
.reveal-right { transform: translateX(50px); }
.reveal-scale { transform: scale(0.9); }

.reveal-up.is-visible,
.reveal-left.is-visible,
.reveal-right.is-visible,
.reveal-scale.is-visible {
  opacity: 1;
  transform: none;
  transition: opacity 1s var(--ease), transform 1s var(--ease);
}

/* Text reveal mask */
.text-reveal { overflow: hidden; display: inline-block; }
.text-reveal span { display: inline-block; transform: translateY(110%); transition: transform .9s var(--ease); }
.text-reveal.is-visible span { transform: translateY(0); }

/* Stagger children helper (JS assigns transition-delay inline) */
.stagger-item { opacity: 0; transform: translateY(30px); transition: opacity .8s var(--ease), transform .8s var(--ease); }
.stagger-item.is-visible { opacity: 1; transform: none; }

/* Loading screen bar handled in style.css; keep spin/pulse utilities here */
.spin-slow { animation: spin 20s linear infinite; }

/* Respect reduced motion */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
  .reveal-up, .reveal-left, .reveal-right, .reveal-scale, .text-reveal span, .stagger-item {
    opacity: 1 !important;
    transform: none !important;
  }
}
