/* ─────────────────────────────────────────────────────────────────
   Radar V43 — Keyframes
   These keyframes are wired to elements in Phase 2 and beyond.
   Do not import this file into pages in Phase 1.

   Tokens referenced (--ease-out, --ease-in-out, --duration-*) are
   defined in /styles/tokens.css. Animation utility classes that
   apply these keyframes will live alongside their consuming
   components, gated by @media (prefers-reduced-motion: no-preference)
   per the design system reduced-motion policy.
   ───────────────────────────────────────────────────────────────── */

/* signal-pulse-ambient
   Hero ambient mode for the signal-pulse SVG. Three concentric rings
   expand from the center over 8s, fading from 5% to 0% opacity. The
   three rings are staggered so the pulse reads as continuous waves.
   Marketing pages only. Wrap in prefers-reduced-motion: no-preference. */
@keyframes signal-pulse-ambient {
  0% {
    transform: scale(0.6);
    opacity: 0;
  }
  20% {
    opacity: 0.05;
  }
  100% {
    transform: scale(1.6);
    opacity: 0;
  }
}

/* signal-pulse-transition
   Brief sweep on marketing page-to-page navigation. Single ring
   expansion, faster than the ambient loop, higher peak opacity. */
@keyframes signal-pulse-transition {
  0% {
    transform: scale(0.4);
    opacity: 0;
  }
  40% {
    opacity: 0.18;
  }
  100% {
    transform: scale(1.8);
    opacity: 0;
  }
}

/* count-up-reveal
   Used on stat blocks when they enter the viewport. Fade + 8px
   upward translate over 1.2s with --ease-out. */
@keyframes count-up-reveal {
  0% {
    opacity: 0;
    transform: translateY(8px);
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}

/* card-stagger-enter
   Phase 2 GSAP wires card grids to stagger this on viewport entry.
   Defined here as a CSS fallback for the no-JS / reduced-motion path. */
@keyframes card-stagger-enter {
  0% {
    opacity: 0;
    transform: translateY(16px);
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}

/* processing-badge-pulse
   Dashboard PROCESSING badge while AI diagnosis is generating.
   Opacity 0.6 to 1.0, 1.6s ease-in-out, infinite. */
@keyframes processing-badge-pulse {
  0%, 100% {
    opacity: 0.6;
  }
  50% {
    opacity: 1;
  }
}

/* progress-bar-fill
   Dashboard progress fills (e.g., diagnostic completion %). The
   custom property --progress-target is set inline per-instance to
   the target percentage; the keyframe animates from 0 to that value.
   Duration 800ms with --ease-out. */
@keyframes progress-bar-fill {
  0% {
    width: 0;
  }
  100% {
    width: var(--progress-target, 100%);
  }
}
