/* ── ANIMATION BASE STATES ──────────────────────────────────────── */

/* Elements that will be animated in — start invisible */
.anim-fade-up {
  opacity: 0;
  transform: translateY(40px);
}

/* Hero word split — each word starts invisible */
.hero-word {
  display: inline-block;
  opacity: 0;
  transform: translateY(30px);
  will-change: transform, opacity;
}

/* Ambient orbs */
.orb {
  position: fixed;
  border-radius: 50%;
  filter: blur(120px);
  pointer-events: none;
  z-index: 0;
  will-change: transform;
}
.orb-purple {
  width: 600px;
  height: 600px;
  background: radial-gradient(circle, rgba(124,111,255,0.18) 0%, transparent 70%);
  top: -100px;
  left: -150px;
}
.orb-green {
  width: 500px;
  height: 500px;
  background: radial-gradient(circle, rgba(48,209,88,0.12) 0%, transparent 70%);
  bottom: 10%;
  right: -100px;
}

/* Ensure orbs sit behind content */
body > .orb { z-index: 0; }
section, .ticker-bar, .stats-bar, .hero { position: relative; z-index: 1; }

/* 3D card tilt — enable perspective on card parents */
.learn-grid,
.journey-steps {
  perspective: 1200px;
}

/* Magnetic button wrapper */
.btn-primary,
.btn-secondary {
  display: inline-block;
  will-change: transform;
}

/* Nav active link indicator */
.nav-links a {
  position: relative;
}
.nav-links a.nav-active::after {
  content: '';
  position: absolute;
  bottom: -4px;
  left: 0;
  right: 0;
  height: 2px;
  background: var(--accent);
  border-radius: 2px;
  animation: nav-indicator-in 0.25s ease forwards;
}
@keyframes nav-indicator-in {
  from { transform: scaleX(0); opacity: 0; }
  to   { transform: scaleX(1); opacity: 1; }
}

/* Nav blur intensify on scroll */
nav.scrolled {
  background: rgba(0,0,0,0.95) !important;
  backdrop-filter: saturate(200%) blur(40px) !important;
  -webkit-backdrop-filter: saturate(200%) blur(40px) !important;
}

/* Card hover glow */
.learn-card,
.journey-step {
  transition: box-shadow 0.3s ease;
}
.learn-card:hover,
.journey-step:hover {
  box-shadow: 0 0 0 1px rgba(124,111,255,0.4),
              0 20px 60px rgba(124,111,255,0.15),
              0 0 80px rgba(124,111,255,0.08);
}

/* Stat pop — start state handled by GSAP .from(), no CSS needed */
.stat-pop { will-change: transform, opacity; }
