/* ==========================================================================
   LETSPACT — animations.css
   Scroll reveal utilities, entrance motion, reduced-motion safety
   ========================================================================== */

/* Base reveal state — JS adds .is-visible when in viewport */
[data-reveal] {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.8s var(--ease), transform 0.8s var(--ease);
  will-change: opacity, transform;
}
[data-reveal].is-visible {
  opacity: 1;
  transform: none;
}

/* Reveal variants */
[data-reveal="fade"] { transform: none; }
[data-reveal="left"] { transform: translateX(-40px); }
[data-reveal="right"] { transform: translateX(40px); }
[dir="rtl"] [data-reveal="left"] { transform: translateX(40px); }
[dir="rtl"] [data-reveal="right"] { transform: translateX(-40px); }
[data-reveal="scale"] { transform: scale(0.94); }

/* Staggered children */
[data-reveal-stagger] > * {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);
}
[data-reveal-stagger].is-visible > * {
  opacity: 1;
  transform: none;
}
[data-reveal-stagger].is-visible > *:nth-child(1) { transition-delay: 0.05s; }
[data-reveal-stagger].is-visible > *:nth-child(2) { transition-delay: 0.12s; }
[data-reveal-stagger].is-visible > *:nth-child(3) { transition-delay: 0.19s; }
[data-reveal-stagger].is-visible > *:nth-child(4) { transition-delay: 0.26s; }
[data-reveal-stagger].is-visible > *:nth-child(5) { transition-delay: 0.33s; }
[data-reveal-stagger].is-visible > *:nth-child(6) { transition-delay: 0.40s; }
[data-reveal-stagger].is-visible > *:nth-child(7) { transition-delay: 0.47s; }
[data-reveal-stagger].is-visible > *:nth-child(8) { transition-delay: 0.54s; }

/* Line-by-line text reveal */
.reveal-lines .line {
  display: block;
  overflow: hidden;
}
.reveal-lines .line > span {
  display: block;
  transform: translateY(110%);
  transition: transform 0.9s var(--ease);
}
.reveal-lines.is-visible .line > span { transform: translateY(0); }
.reveal-lines.is-visible .line:nth-child(2) > span { transition-delay: 0.08s; }
.reveal-lines.is-visible .line:nth-child(3) > span { transition-delay: 0.16s; }
.reveal-lines.is-visible .line:nth-child(4) > span { transition-delay: 0.24s; }

/* Clip-path image reveal */
.clip-reveal {
  clip-path: inset(0 0 100% 0);
  transition: clip-path 1.1s var(--ease);
}
.clip-reveal.is-visible { clip-path: inset(0 0 0 0); }

/* Hero entrance */
.hero-in {
  opacity: 0;
  transform: translateY(30px);
  animation: heroIn 1s var(--ease) forwards;
}
.hero-in.d1 { animation-delay: 0.15s; }
.hero-in.d2 { animation-delay: 0.3s; }
.hero-in.d3 { animation-delay: 0.45s; }
.hero-in.d4 { animation-delay: 0.6s; }
@keyframes heroIn {
  to { opacity: 1; transform: none; }
}

/* Floating device */
@keyframes floatY {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-18px); }
}
.float { animation: floatY 8s ease-in-out infinite; }

/* Parallax elements set via JS transform */
[data-parallax] { will-change: transform; }

/* ---------------------------------------------------------------- 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;
  }
  [data-reveal],
  [data-reveal-stagger] > *,
  .reveal-lines .line > span,
  .hero-in {
    opacity: 1 !important;
    transform: none !important;
    clip-path: none !important;
  }
  .clip-reveal { clip-path: none !important; }
  .marquee__track { animation: none !important; }
  .float { animation: none !important; }
  .editorial-divider::after { display: none; }
}
