/* ==========================================================================
   Animations — GSAP friendly utility classes
   ========================================================================== */

/* Initial state for elements with [data-fade-up] etc. */
[data-fade-up] { opacity: 0; transform: translateY(60px); will-change: transform, opacity; }
[data-fade-in] { opacity: 0; will-change: opacity; }
[data-fade-left] { opacity: 0; transform: translateX(-60px); will-change: transform, opacity; }
[data-fade-right] { opacity: 0; transform: translateX(60px); will-change: transform, opacity; }
[data-scale-in] { opacity: 0; transform: scale(0.94); will-change: transform, opacity; }

[data-stagger-child] { opacity: 0; transform: translateY(40px); will-change: transform, opacity; }
[data-parallax] { will-change: transform; }

/* Reveal helper */
.reveal { opacity: 0; transform: translateY(30px); transition: opacity .8s, transform .8s; }
.reveal.is-visible { opacity: 1; transform: translateY(0); }

/* Word splitting (used in hero) */
.split-word { display: inline-block; overflow: hidden; }
.split-word > span { display: inline-block; transform: translateY(110%); will-change: transform; }
.split-word.is-revealed > span { transform: translateY(0); transition: transform .9s cubic-bezier(.22,1,.36,1); }

/* Image zoom in cards */
.zoom-img { overflow: hidden; }
.zoom-img img, .zoom-img picture > img { transition: transform 1s cubic-bezier(.22,1,.36,1); }
.zoom-img:hover img, a:hover .zoom-img img { transform: scale(1.06); }

/* Underline link animation */
.link-underline {
  position: relative; display: inline-flex; align-items: center; gap: 8px;
  padding-bottom: 4px; font-weight: 600;
}
.link-underline::after {
  content: ""; position: absolute; left: 0; bottom: 0; height: 1px; width: 100%;
  background: currentColor; transform-origin: right; transform: scaleX(1);
  transition: transform .5s cubic-bezier(.22,1,.36,1);
}
.link-underline:hover::after { transform-origin: left; transform: scaleX(0); }
.link-underline svg { transition: transform .35s ease; }
.link-underline:hover svg { transform: translateX(4px); }

/* Marquee */
.marquee { overflow: hidden; display: flex; }
.marquee__track {
  display: inline-flex; gap: 48px;
  animation: marquee-scroll 40s linear infinite;
  white-space: nowrap;
}
@keyframes marquee-scroll {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: 0.001ms !important; transition-duration: 0.001ms !important; }
  [data-fade-up], [data-fade-in], [data-fade-left], [data-fade-right], [data-scale-in], [data-stagger-child] {
    opacity: 1 !important; transform: none !important;
  }
}
