/* ================================================================
   Animation utility classes — paired with GSAP triggers in JS.
   Kept to transform/opacity for performance.
   ================================================================ */

[data-reveal] {
  opacity: 0;
  transform: translateY(40px);
}
[data-reveal].is-revealed {
  opacity: 1;
  transform: translateY(0);
  transition: opacity 0.9s cubic-bezier(0.22,1,0.36,1), transform 0.9s cubic-bezier(0.22,1,0.36,1);
}

[data-reveal="scale"] { transform: scale(0.92); }
[data-reveal="scale"].is-revealed { transform: scale(1); }

[data-reveal="mask"] {
  clip-path: inset(0 0 100% 0);
  opacity: 1;
  transform: none;
}
[data-reveal="mask"].is-revealed {
  clip-path: inset(0 0 0% 0);
  transition: clip-path 1s cubic-bezier(0.22,1,0.36,1);
}

.split-word {
  display: inline-block;
  overflow: hidden;
  vertical-align: top;
}
.split-word > span {
  display: inline-block;
  transform: translateY(110%);
  transition: transform 0.9s cubic-bezier(0.22,1,0.36,1);
}
.split-word.is-revealed > span { transform: translateY(0); }

@keyframes floatY {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-14px); }
}
.float { animation: floatY 6s ease-in-out infinite; }

@keyframes pulseGlow {
  0%, 100% { opacity: 0.55; }
  50% { opacity: 1; }
}

/* preloader fade-out helper (JS toggles this class) */
#preloader.is-hidden {
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.6s ease;
}
