@keyframes spin { to { transform: rotate(360deg); } }
@keyframes fadeUp {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}

.fade-up { animation: fadeUp 0.45s cubic-bezier(.22,.61,.36,1) forwards; }
.spinner { animation: spin 0.9s linear infinite; }

@keyframes pulseGlow {
  0% { box-shadow: 0 0 0 rgba(var(--accent-rgb), 0); }
  50% { box-shadow: 0 0 30px rgba(var(--accent-rgb), 0.25); }
  100% { box-shadow: 0 0 0 rgba(var(--accent-rgb), 0); }
}

@keyframes chartShimmer {
  0% { transform: translateX(-120%); }
  100% { transform: translateX(120%); }
}

@keyframes skeletonShimmer {
  0% { transform: translateX(-120%); }
  100% { transform: translateX(120%); }
}

.glow-hover:hover {
  box-shadow: var(--shadow-glow);
}

@media (prefers-reduced-motion: reduce) {
  .fade-up { animation: none; opacity: 1; transform: none; }
  .spinner { animation-duration: 1.4s; }
  .glow-hover:hover { box-shadow: none; }
}
