/* ============================================================
   SWARM scroll-reveal
   Smooth fade+slide reveals for static section content.
   Paired with js/scroll-reveal.js (IntersectionObserver).
   ============================================================ */

.reveal-ready {
  opacity: 0;
  transform: translateY(20px);
  will-change: opacity, transform;
  transition:
    opacity 800ms cubic-bezier(0.2, 0.9, 0.3, 1),
    transform 800ms cubic-bezier(0.2, 0.9, 0.3, 1);
}

.reveal-ready.is-revealed {
  opacity: 1;
  transform: translateY(0);
}

/* Per-card stagger driven by JS (capped at 6 * 60ms). */
.card.reveal-ready,
.feature.reveal-ready,
.feature-card.reveal-ready,
.stat-block.reveal-ready,
.stat-card.reveal-ready {
  transition-delay: var(--reveal-delay, 0ms);
}

/* Headings get a slightly tighter slide for a more deliberate feel. */
section > h2.reveal-ready,
section > .container > h2.reveal-ready,
section > h3.reveal-ready,
section > .container > h3.reveal-ready {
  transform: translateY(14px);
}
section > h2.reveal-ready.is-revealed,
section > .container > h2.reveal-ready.is-revealed,
section > h3.reveal-ready.is-revealed,
section > .container > h3.reveal-ready.is-revealed {
  transform: translateY(0);
}

/* ============================================================
   Section bridges removed 2026-05-20 — looked washed-out / hazy
   between sections. Clean hard cuts on deep #0B0E14 bg look more
   premium than a faint cyan veil.
   ============================================================ */

/* ============================================================
   Reduced motion — disable EVERYTHING.
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
  .reveal-ready,
  .reveal-ready.is-revealed {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
}
