/* ==========================================================================
   Arena of Stars — animations.css
   Reveal-состояния. БЕЗ защитного класса (.js) всё видно (ТЗ §19).
   Анимируется только transform/opacity (ТЗ §10.3).
   ========================================================================== */

/* ── Reveal по умолчанию: видим ───────────────────────────────────── */
.aos-reveal,
.aos-reveal-line,
.aos-reveal-up,
.aos-reveal-fade {
  opacity: 1;
  transform: none;
}

/* ── С защитным классом .js: скрываем до анимации ─────────────────── */
.js .aos-reveal {
  opacity: 0;
  transform: translateY(40px);
  transition: opacity var(--dur-slow) var(--ease-out-expo),
    transform var(--dur-slow) var(--ease-out-expo);
}

.js .aos-reveal-up {
  opacity: 0;
  transform: translateY(60px);
  transition: opacity var(--dur-slow) var(--ease-out-expo),
    transform var(--dur-slow) var(--ease-out-expo);
}

.js .aos-reveal-fade {
  opacity: 0;
  transition: opacity var(--dur-slow) var(--ease-out-expo);
}

/* Строки заголовков в маске */
.js .aos-reveal-line {
  transform: translateY(110%);
  transition: transform var(--dur-slow) var(--ease-out-expo);
}

/* Когда анимация отработала — показываем (GSAP добавит класс вручную,
   но это страховка на случай IntersectionObserver-режима) */
.js .aos-reveal.is-in,
.js .aos-reveal-up.is-in,
.js .aos-reveal-fade.is-in {
  opacity: 1;
  transform: none;
}

.js .aos-reveal-line.is-in {
  transform: translateY(0);
}

/* Stagger-задержки для списков */
.js .aos-stagger > * {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity var(--dur-base) var(--ease-out-expo),
    transform var(--dur-base) var(--ease-out-expo);
}

.js .aos-stagger.is-in > * {
  opacity: 1;
  transform: none;
}

.js .aos-stagger.is-in > *:nth-child(1) { transition-delay: 0.04s; }
.js .aos-stagger.is-in > *:nth-child(2) { transition-delay: 0.10s; }
.js .aos-stagger.is-in > *:nth-child(3) { transition-delay: 0.16s; }
.js .aos-stagger.is-in > *:nth-child(4) { transition-delay: 0.22s; }
.js .aos-stagger.is-in > *:nth-child(5) { transition-delay: 0.28s; }
.js .aos-stagger.is-in > *:nth-child(6) { transition-delay: 0.34s; }
.js .aos-stagger.is-in > *:nth-child(7) { transition-delay: 0.40s; }
.js .aos-stagger.is-in > *:nth-child(8) { transition-delay: 0.46s; }
.js .aos-stagger.is-in > *:nth-child(9) { transition-delay: 0.52s; }
.js .aos-stagger.is-in > *:nth-child(10) { transition-delay: 0.58s; }
.js .aos-stagger.is-in > *:nth-child(11) { transition-delay: 0.64s; }
.js .aos-stagger.is-in > *:nth-child(12) { transition-delay: 0.70s; }

/* ── Reveal медиа через clip-path (ТЗ §10.1) ─────────────────────── */
.aos-clip-reveal {
  clip-path: none;
}

/* Внутреннее изображение начинает чуть увеличенным и подгоняется */
.js .aos-media[data-parallax] .aos-media__img {
  transform: scale(1.12);
  transition: transform 1.4s var(--ease-out-expo);
}

.js .aos-media[data-parallax].is-in .aos-media__img {
  transform: scale(1);
}

/* ── Preloader reveal ─────────────────────────────────────────────── */
.js .aos-preloader {
  opacity: 1;
}

.js .aos-preloader.is-hidden {
  opacity: 0;
  visibility: hidden;
  transition: opacity var(--dur-base) var(--ease-out-expo),
    visibility 0s linear var(--dur-base);
}

/* ── Reduced motion (ТЗ §10.4) ────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }

  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }

  /* В режиме сниженного движения всё показываем сразу */
  .js .aos-reveal,
  .js .aos-reveal-up,
  .js .aos-reveal-fade,
  .js .aos-reveal-line,
  .js .aos-stagger > *,
  .js .aos-clip-reveal,
  .js .aos-numbered-list--enhanced > *,
  .js .aos-section-number {
    opacity: 1 !important;
    transform: none !important;
    clip-path: none !important;
  }

  .aos-numbered-list__sweep {
    display: none !important;
  }

  .js .aos-preloader {
    display: none;
  }
}
