/* ═══════════════════════════════════════
   animations.css — Scroll Reveal System
   Not Visual
═══════════════════════════════════════ */

/* ── Base reveal state (hidden) ── */
.reveal {
  opacity: 0;
  transform: translateY(36px);
  transition:
    opacity 0.75s var(--nv-ease),
    transform 0.75s var(--nv-ease);
}

/* ── Visible state (triggered by JS) ── */
.reveal.visible {
  opacity: 1;
  transform: translateY(0);
}

/* ── Staggered delays ── */
.reveal-d1 { transition-delay: 0.08s; }
.reveal-d2 { transition-delay: 0.16s; }
.reveal-d3 { transition-delay: 0.24s; }
.reveal-d4 { transition-delay: 0.32s; }
.reveal-d5 { transition-delay: 0.40s; }

/* ── Slide from left variant ── */
.reveal-left {
  opacity: 0;
  transform: translateX(-30px);
  transition:
    opacity 0.75s var(--nv-ease),
    transform 0.75s var(--nv-ease);
}
.reveal-left.visible {
  opacity: 1;
  transform: translateX(0);
}

/* ── Scale in variant ── */
.reveal-scale {
  opacity: 0;
  transform: scale(0.95);
  transition:
    opacity 0.65s var(--nv-ease),
    transform 0.65s var(--nv-ease);
}
.reveal-scale.visible {
  opacity: 1;
  transform: scale(1);
}

/* ── Hero elements already handled in hero.css ──
   These classes are used for scroll-triggered
   sections only (not the hero boot animations) */

@media (prefers-reduced-motion: reduce) {
  .reveal,
  .reveal-left,
  .reveal-scale {
    opacity: 1;
    transform: none;
    transition: none;
  }
}
