/* MayorFX — animations.css */

@keyframes pulse-dot {

  0%,
  100% {
    opacity: 1;
    transform: scale(1)
  }

  50% {
    opacity: .3;
    transform: scale(.8)
  }
}

@keyframes fadeUp {
  from {
    opacity: 0;
    transform: translateY(28px)
  }

  to {
    opacity: 1;
    transform: translateY(0)
  }
}

@keyframes fadeIn {
  from {
    opacity: 0
  }

  to {
    opacity: 1
  }
}

@keyframes shimmer {
  0% {
    background-position: -400px 0
  }

  100% {
    background-position: 400px 0
  }
}

@keyframes borderGlow {

  0%,
  100% {
    box-shadow: 0 0 20px var(--accent-glow)
  }

  50% {
    box-shadow: 0 0 50px var(--accent-border)
  }
}

@keyframes spin {
  from {
    transform: rotate(0deg)
  }

  to {
    transform: rotate(360deg)
  }
}

@keyframes slideRight {
  from {
    opacity: 0;
    transform: translateX(32px)
  }

  to {
    opacity: 1;
    transform: translateX(0)
  }
}

/* ── SCROLL REVEAL ──────────────────────────────────── */
.reveal {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity .65s ease, transform .65s ease
}

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

.reveal.delay-1 {
  transition-delay: .10s
}

.reveal.delay-2 {
  transition-delay: .20s
}

.reveal.delay-3 {
  transition-delay: .30s
}

.reveal.delay-4 {
  transition-delay: .40s
}

.reveal.delay-5 {
  transition-delay: .50s
}

/* ── TERMINAL ROW STAGGER ───────────────────────────── */
.t-row:nth-child(1) {
  animation-delay: .10s
}

.t-row:nth-child(2) {
  animation-delay: .22s
}

.t-row:nth-child(3) {
  animation-delay: .34s
}

.t-row:nth-child(4) {
  animation-delay: .46s
}

.t-row:nth-child(5) {
  animation-delay: .58s
}

/* ── TERMINAL GLOW PULSE ────────────────────────────── */
.results-terminal {
  animation: borderGlow 4s ease-in-out infinite
}

/* ── HERO INSTANT REVEALS ───────────────────────────── */
@media(prefers-reduced-motion:no-preference) {
  .hero-copy .reveal {
    animation: fadeUp .7s ease both
  }

  .hero-copy .reveal.delay-1 {
    animation-delay: .12s
  }

  .hero-copy .reveal.delay-2 {
    animation-delay: .22s
  }

  .hero-copy .reveal.delay-3 {
    animation-delay: .33s
  }

  .hero-copy .reveal.delay-4 {
    animation-delay: .44s
  }

  .hero-stats-right.reveal {
    animation: slideRight .75s ease .18s both
  }
}

/* ── PROGRAM FEATURED SPIN ──────────────────────────── */
.program-featured::after {
  content: '';
  position: absolute;
  top: -50%;
  left: -50%;
  width: 200%;
  height: 200%;
  background: conic-gradient(from 0deg, transparent 0%, var(--accent-glow) 30%, transparent 60%);
  animation: spin 14s linear infinite;
  pointer-events: none;
  z-index: 0;
}

.program-featured>* {
  position: relative;
  z-index: 1
}

/* ── LOADER BAR FILL ────────────────────────────────── */
.loader-bar-fill {
  animation: loaderFill 1s ease .1s forwards
}

@keyframes loaderFill {
  from {
    width: 0
  }

  to {
    width: 100%
  }
}

/* ── HOW IT WORKS CARD HOVER LINE ───────────────────── */
.hiw-card::before {
  transition: opacity .3s
}

/* ── REDUCED MOTION ─────────────────────────────────── */
@media(prefers-reduced-motion:reduce) {

  .reveal,
  .reveal.is-visible {
    opacity: 1;
    transform: none;
    transition: none;
    animation: none
  }

  .marquee-track {
    animation-play-state: paused
  }

  .results-terminal {
    animation: none
  }

  .t-status-dot {
    animation: none
  }

  .program-featured::after {
    animation: none
  }

  .scroll-arrow-anim {
    animation: none
  }
}