/* ══════════════════════════════════════════════════════════════════
   BADALYTICS ANIMATION SYSTEM — v1.0
   Performance: transforms + opacity only. No layout properties.
   GPU-accelerated. IntersectionObserver-driven. Reduced-motion safe.
   ══════════════════════════════════════════════════════════════════ */

/* ── Global Timing Tokens ─────────────────────────────────────── */
:root {
  --anim-duration-fast:   300ms;
  --anim-duration-base:   600ms;
  --anim-duration-slow:  1000ms;
  --anim-easing-out:     cubic-bezier(0.16, 1, 0.3, 1);
  --anim-easing-spring:  cubic-bezier(0.34, 1.56, 0.64, 1);
}

/* ══════════════════════════════════════════════════════════════════
   AMBIENT BACKGROUND ORBS
   Injected by animations.js. Fixed behind all content.
   ══════════════════════════════════════════════════════════════════ */
.bg-orbs {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: -1;
  overflow: hidden;
}
.bg-orb {
  position: absolute;
  border-radius: 50%;
  filter: blur(90px);
}
.bg-orb-1 {
  width: 700px; height: 700px;
  background: radial-gradient(circle, rgba(99,102,241,0.18), transparent 70%);
  top: -200px; left: -150px;
  animation: orb-drift-1 14s ease-in-out infinite alternate;
}
.bg-orb-2 {
  width: 550px; height: 550px;
  background: radial-gradient(circle, rgba(139,92,246,0.12), transparent 70%);
  top: 35%; right: -180px;
  animation: orb-drift-2 11s ease-in-out infinite alternate;
}
.bg-orb-3 {
  width: 500px; height: 500px;
  background: radial-gradient(circle, rgba(6,182,212,0.08), transparent 70%);
  bottom: 5%; left: 25%;
  animation: orb-drift-3 16s ease-in-out infinite alternate;
}
@keyframes orb-drift-1 {
  from { transform: translate(0, 0) scale(1); }
  to   { transform: translate(50px, 60px) scale(1.05); }
}
@keyframes orb-drift-2 {
  from { transform: translate(0, 0) scale(1); }
  to   { transform: translate(-40px, 50px) scale(1.08); }
}
@keyframes orb-drift-3 {
  from { transform: translate(0, 0) scale(1); }
  to   { transform: translate(35px, -55px) scale(0.96); }
}

/* ══════════════════════════════════════════════════════════════════
   HERO SEQUENCE
   JS splits hero-h1 words, applies delays, then adds .hero-animate.
   ══════════════════════════════════════════════════════════════════ */

/* Word container: clips the sliding inner span */
.hero-word {
  display: inline-block;
  overflow: hidden;
  vertical-align: bottom;
  line-height: inherit;
}
/* Inner word starts below clip boundary */
.hero-word-inner {
  display: inline-block;
  transform: translateY(105%);
  opacity: 0;
  transition:
    transform 700ms var(--anim-easing-out),
    opacity   450ms ease;
  line-height: inherit;
}
/* Triggered by JS: all word-inners animate in (individual delays set inline) */
.hero-animate .hero-word-inner {
  transform: translateY(0);
  opacity: 1;
}

/* Hero pill badge */
.hero-pill-anim {
  opacity: 0;
  transform: translateY(14px) scale(0.95);
  transition:
    opacity   500ms ease,
    transform 500ms var(--anim-easing-out);
}
.hero-pill-anim.anim-in {
  opacity: 1;
  transform: none;
}

/* Hero subheadline */
.hero-sub-anim {
  opacity: 0;
  transform: translateY(22px);
  transition:
    opacity   600ms ease,
    transform 600ms var(--anim-easing-out);
}
.hero-sub-anim.anim-in {
  opacity: 1;
  transform: none;
}

/* Hero CTAs */
.hero-cta-anim {
  opacity: 0;
  transform: translateY(16px) scale(0.97);
  transition:
    opacity   500ms ease,
    transform 500ms var(--anim-easing-spring);
}
.hero-cta-anim.anim-in {
  opacity: 1;
  transform: none;
}

/* Hero stats bar */
.hero-stats-anim {
  opacity: 0;
  transform: translateY(20px);
  transition:
    opacity   600ms ease,
    transform 600ms var(--anim-easing-out);
}
.hero-stats-anim.anim-in {
  opacity: 1;
  transform: none;
}

/* ══════════════════════════════════════════════════════════════════
   SCROLL-TRIGGERED ANIMATIONS
   Initial hidden states must be in CSS to prevent flash (FOAC).
   JS adds .anim-in via IntersectionObserver; observer disconnects after.
   ══════════════════════════════════════════════════════════════════ */

/* Fade Up — default for most content blocks */
[data-anim="fade-up"] {
  opacity: 0;
  transform: translateY(40px);
  will-change: opacity, transform;
  transition:
    opacity   var(--anim-duration-base) var(--anim-easing-out),
    transform var(--anim-duration-base) var(--anim-easing-out);
}
[data-anim="fade-up"].anim-in {
  opacity: 1;
  transform: translateY(0);
}

/* Fade In — images, cards, full sections */
[data-anim="fade-in"] {
  opacity: 0;
  transform: scale(0.97);
  will-change: opacity, transform;
  transition:
    opacity   500ms var(--anim-easing-out),
    transform 500ms var(--anim-easing-out);
}
[data-anim="fade-in"].anim-in {
  opacity: 1;
  transform: scale(1);
}

/* Scale In — icons, badges */
[data-anim="scale-in"] {
  opacity: 0;
  transform: scale(0.8);
  will-change: opacity, transform;
  transition:
    opacity   300ms ease,
    transform 300ms var(--anim-easing-spring);
}
[data-anim="scale-in"].anim-in {
  opacity: 1;
  transform: scale(1);
}

/* Slide from left */
[data-anim="slide-left"] {
  opacity: 0;
  transform: translateX(-30px);
  will-change: opacity, transform;
  transition:
    opacity   var(--anim-duration-base) var(--anim-easing-out),
    transform var(--anim-duration-base) var(--anim-easing-out);
}
[data-anim="slide-left"].anim-in {
  opacity: 1;
  transform: translateX(0);
}

/* Slide from right */
[data-anim="slide-right"] {
  opacity: 0;
  transform: translateX(30px);
  will-change: opacity, transform;
  transition:
    opacity   var(--anim-duration-base) var(--anim-easing-out),
    transform var(--anim-duration-base) var(--anim-easing-out);
}
[data-anim="slide-right"].anim-in {
  opacity: 1;
  transform: translateX(0);
}

/* ── Staggered children ────────────────────────────────────────── */
/* Parent container triggers; children animate in sequence.
   Applied to: how-grid, ch-grid, res-grid, prod-grid, cards-grid */
[data-anim-stagger] > * {
  opacity: 0;
  transform: translateY(28px);
  will-change: opacity, transform;
  transition:
    opacity   var(--anim-duration-base) var(--anim-easing-out),
    transform var(--anim-duration-base) var(--anim-easing-out);
}
[data-anim-stagger].anim-in > * {
  opacity: 1;
  transform: translateY(0);
}
[data-anim-stagger].anim-in > *:nth-child(1)  { transition-delay: 0ms; }
[data-anim-stagger].anim-in > *:nth-child(2)  { transition-delay: 80ms; }
[data-anim-stagger].anim-in > *:nth-child(3)  { transition-delay: 160ms; }
[data-anim-stagger].anim-in > *:nth-child(4)  { transition-delay: 240ms; }
[data-anim-stagger].anim-in > *:nth-child(5)  { transition-delay: 320ms; }
[data-anim-stagger].anim-in > *:nth-child(6)  { transition-delay: 400ms; }
[data-anim-stagger].anim-in > *:nth-child(7)  { transition-delay: 480ms; }
[data-anim-stagger].anim-in > *:nth-child(8)  { transition-delay: 560ms; }
[data-anim-stagger].anim-in > *:nth-child(9)  { transition-delay: 640ms; }
[data-anim-stagger].anim-in > *:nth-child(10) { transition-delay: 720ms; }

/* Override: when parent .rv already handles fade, just stagger children */
.rv.in[data-anim-stagger] > *,
.rv2.in[data-anim-stagger] > * {
  opacity: 1;
  transform: translateY(0);
}

/* ══════════════════════════════════════════════════════════════════
   SECTION HEADING WORD REVEAL
   JS splits .h2 / .cta-h / .pricing-header h1 not inside .hero-c.
   Words slide up from below their overflow-hidden container.
   ══════════════════════════════════════════════════════════════════ */
.split-word {
  display: inline-block;
  overflow: hidden;
  vertical-align: bottom;
  line-height: inherit;
  /* Small gap between words */
  margin-right: 0.18em;
}
.split-word:last-child { margin-right: 0; }
.split-word-inner {
  display: inline-block;
  transform: translateY(105%);
  opacity: 0;
  transition:
    transform 600ms var(--anim-easing-out),
    opacity   400ms ease;
  line-height: inherit;
}
/* JS adds .anim-words-in to the heading element */
.anim-words-in .split-word-inner {
  transform: translateY(0);
  opacity: 1;
}

/* ══════════════════════════════════════════════════════════════════
   COMPARISON TABLE ROW ANIMATIONS
   ══════════════════════════════════════════════════════════════════ */
table.comparison tbody tr[data-anim-row] {
  opacity: 0;
  transform: translateY(8px);
  transition:
    opacity   400ms var(--anim-easing-out),
    transform 400ms var(--anim-easing-out);
}
table.comparison tbody tr[data-anim-row].anim-in {
  opacity: 1;
  transform: translateY(0);
}

/* Check icon pop — fires when row gets .anim-in */
table.comparison tbody tr[data-anim-row] .check svg,
table.comparison tbody tr[data-anim-row] .check i {
  transform: scale(0);
  opacity: 0;
  display: inline-block;
  transition:
    transform 220ms var(--anim-easing-spring) 80ms,
    opacity   150ms ease 80ms;
}
table.comparison tbody tr[data-anim-row].anim-in .check svg,
table.comparison tbody tr[data-anim-row].anim-in .check i {
  transform: scale(1);
  opacity: 1;
}
/* Cross icons — subtle fade, lower priority */
table.comparison tbody tr[data-anim-row] .cross svg,
table.comparison tbody tr[data-anim-row] .cross i {
  opacity: 0;
  transition: opacity 300ms ease 160ms;
}
table.comparison tbody tr[data-anim-row].anim-in .cross svg,
table.comparison tbody tr[data-anim-row].anim-in .cross i {
  opacity: 0.4;
}

/* ══════════════════════════════════════════════════════════════════
   BUTTON ENHANCEMENTS
   Shimmer sweep on hover. Active press scale. CTA breathing pulse.
   ══════════════════════════════════════════════════════════════════ */

/* Shimmer parent requires overflow hidden */
.btn-vi,
.btn-primary,
.cta-btn-primary,
.sn-btn-solid {
  position: relative;
  overflow: hidden;
  /* Ensure existing transitions still work */
}

/* Shimmer pseudo-element */
.btn-vi::before,
.btn-primary::before,
.cta-btn-primary::before,
.sn-btn-solid::before {
  content: '';
  position: absolute;
  top: 0;
  left: -100%;
  width: 55%;
  height: 100%;
  background: linear-gradient(
    105deg,
    transparent 0%,
    rgba(255, 255, 255, 0.14) 50%,
    transparent 100%
  );
  transform: skewX(-18deg);
  pointer-events: none;
  z-index: 1;
  transition: left 0ms; /* reset instantly when not hovering */
}
.btn-vi:hover::before,
.btn-primary:hover::before,
.cta-btn-primary:hover::before,
.sn-btn-solid:hover::before {
  left: 150%;
  transition: left 480ms ease;
}

/* Hover micro-scale */
.btn-vi:hover,
.btn-primary:hover,
.cta-btn-primary:hover {
  transform: translateY(-2px) scale(1.02) !important;
}

/* Active press — snap down */
.btn-vi:active,
.btn-primary:active,
.cta-btn-primary:active {
  transform: scale(0.97) !important;
  transition: transform 90ms ease !important;
}

/* CTA primary button: idle breathing animation to draw attention */
@keyframes cta-breathe {
  0%, 100% {
    box-shadow: 0 0 24px rgba(99,102,241,.35);
  }
  50% {
    box-shadow: 0 0 40px rgba(99,102,241,.6), 0 0 70px rgba(99,102,241,.2);
  }
}
.btn-vi {
  animation: cta-breathe 3s ease-in-out infinite;
}
/* Pause breathing on hover to avoid conflict */
.btn-vi:hover {
  animation-play-state: paused;
}

/* ══════════════════════════════════════════════════════════════════
   PRICING CARD ENHANCEMENTS
   ══════════════════════════════════════════════════════════════════ */

/* Standard card hover lift with spring */
.cards-grid .card:not(.elite):hover {
  transform: translateY(-6px) !important;
  transition:
    transform 250ms var(--anim-easing-spring),
    box-shadow 250ms ease,
    border-color 250ms ease !important;
  box-shadow: 0 20px 60px rgba(0,0,0,.55) !important;
  border-color: rgba(255,255,255,.2) !important;
}

/* Elite card: continuous slow border glow pulse */
@keyframes elite-border-glow {
  0%, 100% {
    box-shadow:
      0 0 0 1px rgba(0,212,200,.38),
      0 0 35px rgba(0,212,200,.10),
      0 24px 64px rgba(0,0,0,.6);
  }
  50% {
    box-shadow:
      0 0 0 1px rgba(0,212,200,.7),
      0 0 55px rgba(0,212,200,.22),
      0 24px 64px rgba(0,0,0,.6);
  }
}
.card.elite {
  animation: elite-border-glow 3s ease-in-out infinite;
}
.card.elite:hover {
  animation-play-state: paused;
  transform: translateY(-6px) scale(1.02) !important;
  box-shadow:
    0 0 0 1px rgba(0,212,200,.75),
    0 0 65px rgba(0,212,200,.25),
    0 28px 72px rgba(0,0,0,.7) !important;
}

/* ══════════════════════════════════════════════════════════════════
   PRODUCT / HOW / CHANNEL CARDS — hover micro-lift
   Preserves the existing transition, adds subtle spring
   ══════════════════════════════════════════════════════════════════ */
.prod-card:hover {
  transition:
    border-color 250ms ease,
    transform 250ms var(--anim-easing-spring),
    box-shadow 250ms ease !important;
}
.how-card:hover {
  transition: background 200ms ease;
}
.how-card:hover .how-i {
  display: inline-block;
  transform: scale(1.18) rotate(-4deg);
  transition: transform 300ms var(--anim-easing-spring);
}
.how-i {
  display: inline-block;
  transition: transform 300ms ease;
}
.ch-card:hover {
  transition:
    border-color 200ms ease,
    transform 220ms var(--anim-easing-spring) !important;
}
.ch-i {
  display: inline-block;
  transition: transform 280ms var(--anim-easing-spring);
}
.ch-card:hover .ch-i {
  transform: scale(1.15);
}

/* ══════════════════════════════════════════════════════════════════
   NAV ENHANCEMENTS
   ══════════════════════════════════════════════════════════════════ */

/* Scroll state — transitions on nav itself */
.sitenav {
  transition:
    background 200ms ease,
    box-shadow  200ms ease;
}
.sitenav.nav-scrolled {
  background: rgba(7, 11, 25, 0.99) !important;
  box-shadow: 0 1px 0 rgba(255,255,255,.05), 0 4px 28px rgba(0,0,0,.45);
  backdrop-filter: blur(24px) !important;
  -webkit-backdrop-filter: blur(24px) !important;
}

/* Nav link underline draw */
.sn-link {
  position: relative;
}
.sn-link::after {
  content: '';
  position: absolute;
  bottom: 4px;
  left: 13px;
  width: 0;
  height: 1.5px;
  background: rgba(129, 140, 248, 0.65);
  border-radius: 2px;
  transition: width 200ms var(--anim-easing-out);
  pointer-events: none;
}
.sn-link:hover::after,
.sn-link.active::after {
  width: calc(100% - 26px);
}

/* Hamburger bars animation */
.sn-hamburger span {
  transition: transform 200ms ease, opacity 200ms ease;
}
.sn-hamburger.open span:nth-child(1) {
  transform: translateY(7px) rotate(45deg);
}
.sn-hamburger.open span:nth-child(2) {
  opacity: 0;
  transform: scaleX(0);
}
.sn-hamburger.open span:nth-child(3) {
  transform: translateY(-7px) rotate(-45deg);
}

/* ── Mobile slide-down menu ────────────────────────────────────── */
.sn-mobile-menu {
  display: none;
  position: fixed;
  top: 64px; left: 0; right: 0;
  background: rgba(7, 11, 25, 0.98);
  backdrop-filter: blur(24px);
  -webkit-backdrop-filter: blur(24px);
  border-bottom: 1px solid rgba(255,255,255,.08);
  padding: 8px 24px 20px;
  z-index: 9998;
  transform: translateY(-6px);
  opacity: 0;
  pointer-events: none;
  transition:
    opacity   220ms ease,
    transform 220ms var(--anim-easing-out);
}
.sn-mobile-menu.open {
  display: block;
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}
.sn-mobile-menu a {
  display: block;
  padding: 11px 0;
  font-size: .88rem;
  font-weight: 500;
  color: #94a3b8;
  text-decoration: none;
  border-bottom: 1px solid rgba(255,255,255,.055);
  opacity: 0;
  transform: translateY(7px);
  transition:
    opacity   200ms ease,
    transform 200ms var(--anim-easing-out),
    color     150ms ease;
}
.sn-mobile-menu a:last-of-type { border-bottom: none; }
.sn-mobile-menu a:hover { color: #fff; }
/* Stagger link reveal when menu opens */
.sn-mobile-menu.open a:nth-child(1)  { opacity:1; transform:none; transition-delay: 30ms; }
.sn-mobile-menu.open a:nth-child(2)  { opacity:1; transform:none; transition-delay: 75ms; }
.sn-mobile-menu.open a:nth-child(3)  { opacity:1; transform:none; transition-delay: 120ms; }
.sn-mobile-menu.open a:nth-child(4)  { opacity:1; transform:none; transition-delay: 165ms; }
.sn-mobile-menu.open a:nth-child(5)  { opacity:1; transform:none; transition-delay: 210ms; }
.sn-mobile-menu.open a:nth-child(6)  { opacity:1; transform:none; transition-delay: 255ms; }
.sn-mobile-menu.open a:nth-child(7)  { opacity:1; transform:none; transition-delay: 300ms; }
.sn-mobile-menu .mob-btn-row {
  display: flex;
  gap: 10px;
  margin-top: 14px;
  opacity: 0;
  transform: translateY(7px);
  transition: opacity 200ms ease 340ms, transform 200ms ease 340ms;
}
.sn-mobile-menu.open .mob-btn-row {
  opacity: 1;
  transform: none;
}
.sn-mobile-menu .mob-btn-row a {
  flex: 1;
  text-align: center;
  padding: 10px 16px;
  border-radius: 8px;
  border: 1px solid rgba(255,255,255,.1);
  font-size: .85rem;
  font-weight: 600;
  color: #94a3b8;
  border-bottom: 1px solid rgba(255,255,255,.1);
  opacity: 1;
  transform: none;
  transition: background 150ms, color 150ms, border-color 150ms;
}
.sn-mobile-menu .mob-btn-row a:hover { color: #fff; border-color: rgba(255,255,255,.25); }
.sn-mobile-menu .mob-btn-row a.mob-cta {
  background: #4f46e5;
  border-color: transparent;
  color: #fff;
}
.sn-mobile-menu .mob-btn-row a.mob-cta:hover { background: #6366f1; }

/* ══════════════════════════════════════════════════════════════════
   EYEBROW / PILL TAG ANIMATIONS
   .ey labels get subtle fade-up when parent comes into view
   ══════════════════════════════════════════════════════════════════ */
[data-anim="fade-up"] .ey,
[data-anim-stagger].anim-in .ey {
  /* Eyebrows inherit parent animation */
  transition-delay: 0ms;
}

/* ══════════════════════════════════════════════════════════════════
   HERO BG VARIANT (product pages use .hero-bg div)
   ══════════════════════════════════════════════════════════════════ */
.hero-bg {
  position: absolute;
  inset: 0;
  background:
    radial-gradient(ellipse 70% 60% at 50% -10%, rgba(99,102,241,.18) 0%, transparent 65%),
    radial-gradient(ellipse 50% 40% at 90% 60%, rgba(139,92,246,.08) 0%, transparent 60%);
  animation: hero-bg-shift 8s ease-in-out infinite alternate;
}
@keyframes hero-bg-shift {
  from { opacity: 0.8; }
  to   { opacity: 1; }
}

/* ══════════════════════════════════════════════════════════════════
   TESTIMONIAL CARD — subtle glow on hover
   ══════════════════════════════════════════════════════════════════ */
.test-card {
  transition: box-shadow 300ms ease, border-color 300ms ease !important;
}
.test-card:hover {
  border-color: rgba(99,102,241,.3) !important;
  box-shadow: 0 20px 48px rgba(0,0,0,.5), 0 0 40px rgba(99,102,241,.06) !important;
}

/* ══════════════════════════════════════════════════════════════════
   PILL / BADGE ENTRANCE
   ══════════════════════════════════════════════════════════════════ */
.badge {
  transition: transform 200ms var(--anim-easing-spring), box-shadow 200ms ease;
}
.badge:hover {
  transform: scale(1.04);
}

/* ══════════════════════════════════════════════════════════════════
   FOOTER LINKS
   ══════════════════════════════════════════════════════════════════ */
.ft-links a {
  display: inline-block;
  transition: color .15s ease, transform 150ms ease !important;
}
.ft-links a:hover {
  transform: translateX(3px);
}

/* ══════════════════════════════════════════════════════════════════
   REDUCED MOTION OVERRIDE
   All animations resolve to final state instantly. Still polished.
   ══════════════════════════════════════════════════════════════════ */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration:       0.001ms !important;
    animation-iteration-count: 1      !important;
    transition-duration:      0.001ms !important;
    transition-delay:         0ms     !important;
  }

  /* Show all animated elements immediately in their final state */
  [data-anim],
  [data-anim-stagger] > *,
  .hero-word-inner,
  .split-word-inner,
  .hero-pill-anim,
  .hero-sub-anim,
  .hero-cta-anim,
  .hero-stats-anim,
  table.comparison tbody tr[data-anim-row],
  table.comparison tbody tr[data-anim-row] .check svg,
  table.comparison tbody tr[data-anim-row] .cross svg {
    opacity: 1 !important;
    transform: none !important;
  }

  .bg-orb { display: none; }

  /* Keep hover states instant but functional */
  .btn-vi { animation: none; }
  .card.elite { animation: none; }
}

/* ══════════════════════════════════════════════════════════════════
   STAT COUNTER ANIMATION SYSTEM
   Premium count-up with gradient desaturation → vivid snap.
   All initial states set here to prevent flash of unanimated content.
   .sc-ready on body gates label/subtext hiding (JS fallback = always visible).
   ══════════════════════════════════════════════════════════════════ */

/* ── Stat figure (the big gradient number) ───────────────────────
   Starts desaturated + dim. On count complete, snaps to full brand gradient.
   filter works on gradient-clipped text in all modern browsers. */
.stat-figure {
  display: inline-block;
  filter: saturate(0.12) brightness(0.62);
  transition: filter 600ms ease;
}
.stat-figure.sf-vivid {
  filter: saturate(1) brightness(1);
}

/* ── Stat card entry ─────────────────────────────────────────────
   Individual card fades up before count begins. */
.stat-card {
  opacity: 0;
  transform: translateY(20px);
  will-change: opacity, transform;
}
.stat-card.sc-in {
  opacity: 1;
  transform: none;
  transition:
    opacity   400ms cubic-bezier(0.16, 1, 0.3, 1),
    transform 400ms cubic-bezier(0.16, 1, 0.3, 1);
}
/* Stagger delays — applied via class so all cards get .sc-in simultaneously
   and CSS handles the visual offset left-to-right */
.stat-card.sc-delay-1.sc-in { transition-delay: 120ms; }
.stat-card.sc-delay-2.sc-in { transition-delay: 240ms; }
.stat-card.sc-delay-3.sc-in { transition-delay: 360ms; }

/* ── Label (bold) + Subtext (small) ──────────────────────────────
   Hidden only when JS has initialised (.sc-ready on body).
   If JS fails or is disabled, labels stay visible as fallback. */
.sc-ready .stat-label-anim {
  opacity: 0;
  transition: opacity 300ms ease;
}
.sc-ready .stat-label-anim.sl-in {
  opacity: 1;
}
.sc-ready .stat-sub-anim {
  opacity: 0;
  transition: opacity 300ms ease;
}
.sc-ready .stat-sub-anim.ss-in {
  opacity: 1;
}

/* ── Cancel .rv block-fade on stat row containers ────────────────
   When initStatCounters takes ownership, individual cards animate instead
   of the whole row fading as a unit. */
.rv.sc-parent,
.rv2.sc-parent {
  opacity: 1 !important;
  transform: none !important;
  transition: none !important;
}

/* ── Reduced motion: everything resolves to final state instantly ─ */
@media (prefers-reduced-motion: reduce) {
  .stat-card {
    opacity: 1 !important;
    transform: none !important;
  }
  .stat-figure {
    filter: none !important;
    transition: none !important;
  }
  .sc-ready .stat-label-anim,
  .sc-ready .stat-sub-anim {
    opacity: 1 !important;
    transition: none !important;
  }
}
