/* =====================================================
   Premium Reveal On Scroll
   - Intersection Observer
   - Каскадные задержки
   - cubic-bezier easing
   - Одноразовая анимация (через .is-visible)
   ===================================================== */

:root {
  --reveal-distance: 36px;
  --reveal-duration: 1s;
  --reveal-ease: cubic-bezier(0.25, 1, 0.5, 1);
}

.reveal {
  opacity: 0;
  transform: translate3d(0, var(--reveal-distance), 0);
  filter: blur(6px);
  -webkit-filter: blur(6px);
  will-change: transform, opacity, filter;
  transition:
    opacity var(--reveal-duration) var(--reveal-ease),
    transform var(--reveal-duration) var(--reveal-ease),
    filter calc(var(--reveal-duration) * 0.9) var(--reveal-ease);
  transition-delay: var(--reveal-delay, 0ms);
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}

.reveal.is-visible {
  opacity: 1;
  transform: translate3d(0, 0, 0);
  filter: blur(0);
  -webkit-filter: blur(0);
}

/* Готовые классы каскадных задержек */
.reveal.d-1 { --reveal-delay: 100ms; }
.reveal.d-2 { --reveal-delay: 200ms; }
.reveal.d-3 { --reveal-delay: 300ms; }
.reveal.d-4 { --reveal-delay: 400ms; }
.reveal.d-5 { --reveal-delay: 500ms; }
.reveal.d-6 { --reveal-delay: 600ms; }
.reveal.d-7 { --reveal-delay: 700ms; }
.reveal.d-8 { --reveal-delay: 800ms; }

/* Авто-каскад: если родитель содержит сетку карточек/кнопок,
   каскадим появление по nth-child, чтобы не править каждый Blade.
   Срабатывает, только если у элемента НЕ задан явный --reveal-delay. */
.reveal:not([style*="--reveal-delay"]):nth-child(1)  { --reveal-delay: 0ms;   }
.reveal:not([style*="--reveal-delay"]):nth-child(2)  { --reveal-delay: 90ms;  }
.reveal:not([style*="--reveal-delay"]):nth-child(3)  { --reveal-delay: 180ms; }
.reveal:not([style*="--reveal-delay"]):nth-child(4)  { --reveal-delay: 270ms; }
.reveal:not([style*="--reveal-delay"]):nth-child(5)  { --reveal-delay: 360ms; }
.reveal:not([style*="--reveal-delay"]):nth-child(6)  { --reveal-delay: 450ms; }
.reveal:not([style*="--reveal-delay"]):nth-child(7)  { --reveal-delay: 540ms; }
.reveal:not([style*="--reveal-delay"]):nth-child(8)  { --reveal-delay: 630ms; }
.reveal:not([style*="--reveal-delay"]):nth-child(9)  { --reveal-delay: 720ms; }
.reveal:not([style*="--reveal-delay"]):nth-child(10) { --reveal-delay: 810ms; }
.reveal:not([style*="--reveal-delay"]):nth-child(n+11) { --reveal-delay: 900ms; }

/* Уважение к пользовательской настройке "уменьшить движение" */
@media (prefers-reduced-motion: reduce) {
  .reveal {
    opacity: 1;
    transform: none;
    filter: none;
    -webkit-filter: none;
    transition: none;
  }
}
