/* ═══════════════════════════════════════════
   KEYFRAME ANIMATIONS
   ═══════════════════════════════════════════ */

@keyframes shimmer {
  0%   { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

@keyframes pulse-green {
  0%, 100% { opacity: 1; }
  50%       { opacity: 0.45; }
}

@keyframes pulse-red {
  0%, 100% { opacity: 1; }
  50%       { opacity: 0.4; }
}

@keyframes ticker-scroll {
  0%   { transform: translateX(0); }
  100% { transform: translateX(-50%); }
}

@keyframes flash {
  0%, 100% { opacity: 1; }
  50%       { opacity: 0.35; }
}

@keyframes fade-in-up {
  from { opacity: 0; transform: translateY(12px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* ── Utility helpers ── */
.animate-fade-in-up { animation: fade-in-up 0.4s ease both; }
.num-flash          { animation: flash 0.4s ease; }

.refresh-btn.spinning svg {
  animation: spin 0.6s linear;
}
