/* ─── Glow Blob Pulse ─── */
@keyframes blobFloat {
  0%, 100% { transform: translate(0, 0) scale(1); opacity: 0.55; }
  33% { transform: translate(15px, -20px) scale(1.08); opacity: 0.7; }
  66% { transform: translate(-10px, 10px) scale(0.95); opacity: 0.5; }
}

/* ─── Shimmer Sweep ─── */
@keyframes shimmer {
  0% { background-position: -200% center; }
  100% { background-position: 200% center; }
}

/* ─── Sparkle Float ─── */
@keyframes sparkleFloat {
  0% { transform: translateY(0) rotate(0deg); opacity: 1; }
  100% { transform: translateY(-60px) rotate(360deg); opacity: 0; }
}

/* ─── Pulse Ring ─── */
@keyframes pulseRing {
  0% { transform: scale(1); opacity: 0.7; }
  70% { transform: scale(1.15); opacity: 0; }
  100% { transform: scale(1.15); opacity: 0; }
}

/* ─── Fade In Up ─── */
@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(16px); }
  to { opacity: 1; transform: translateY(0); }
}

/* ─── Scale In ─── */
@keyframes scaleIn {
  from { opacity: 0; transform: scale(0.92); }
  to { opacity: 1; transform: scale(1); }
}

/* ─── Marquee ─── */
@keyframes marquee {
  0% { transform: translateX(0); }
  100% { transform: translateX(-50%); }
}

/* ─── Glow Pulse ─── */
@keyframes glowPulse {
  0%, 100% { box-shadow: 0 0 12px rgba(0, 229, 212, 0.3), 0 0 0 1px rgba(0, 229, 212, 0.2); }
  50% { box-shadow: 0 0 24px rgba(0, 229, 212, 0.55), 0 0 0 1px rgba(0, 229, 212, 0.4); }
}

/* ─── Violet Glow Pulse ─── */
@keyframes violetPulse {
  0%, 100% { box-shadow: 0 0 12px rgba(123, 94, 248, 0.3), 0 0 0 1px rgba(123, 94, 248, 0.2); }
  50% { box-shadow: 0 0 28px rgba(123, 94, 248, 0.6), 0 0 0 1px rgba(123, 94, 248, 0.45); }
}

/* ─── Ticker Number Roll ─── */
@keyframes countUp {
  from { transform: translateY(8px); opacity: 0; }
  to { transform: translateY(0); opacity: 1; }
}

/* ─── Confetti Pieces ─── */
@keyframes confetti1 {
  0% { transform: translate(0, 0) rotate(0deg); opacity: 1; }
  100% { transform: translate(-30px, -80px) rotate(-180deg); opacity: 0; }
}
@keyframes confetti2 {
  0% { transform: translate(0, 0) rotate(0deg); opacity: 1; }
  100% { transform: translate(40px, -70px) rotate(220deg); opacity: 0; }
}
@keyframes confetti3 {
  0% { transform: translate(0, 0) rotate(0deg); opacity: 1; }
  100% { transform: translate(10px, -90px) rotate(90deg); opacity: 0; }
}
@keyframes confetti4 {
  0% { transform: translate(0, 0) rotate(0deg); opacity: 1; }
  100% { transform: translate(-20px, -75px) rotate(-120deg); opacity: 0; }
}

/* ─── Dot Pulse ─── */
@keyframes dotPulse {
  0%, 100% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.4); opacity: 0.6; }
}

/* ─── Noise Static ─── */
@keyframes noise {
  0%, 100% { background-position: 0 0; }
  10% { background-position: -5% -10%; }
  30% { background-position: 3% 5%; }
  50% { background-position: -10% 0; }
  70% { background-position: 5% -5%; }
  90% { background-position: -2% 8%; }
}

/* ─── Tab Switch ─── */
@keyframes tabPop {
  0% { transform: scale(0.85); }
  60% { transform: scale(1.05); }
  100% { transform: scale(1); }
}

/* ─── Bar Fill ─── */
@keyframes barFill {
  from { width: 0%; }
}
