/**
 * animations.css
 * Keyframes and motion utility classes only. No layout, no color logic
 * beyond referencing tokens. Kept under ~300ms per the UX spec, except
 * the ambient neon-pulse which is intentionally slow/looping.
 *
 * Respects prefers-reduced-motion: all animated utilities collapse to
 * an instant, no-motion state for users who request it.
 */

@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes scaleIn {
  from { opacity: 0; transform: scale(0.96); }
  to { opacity: 1; transform: scale(1); }
}

@keyframes blurIn {
  from { opacity: 0; filter: blur(8px); }
  to { opacity: 1; filter: blur(0); }
}

@keyframes neonPulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.55; }
}

@keyframes elevateHover {
  from { transform: translateY(0); }
  to { transform: translateY(-4px); }
}

@keyframes pageTransition {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}

.anim-fade-in { animation: fadeIn var(--duration-base) var(--ease-standard) both; }
.anim-scale-in { animation: scaleIn var(--duration-base) var(--ease-standard) both; }
.anim-blur-in { animation: blurIn var(--duration-slow) var(--ease-standard) both; }
.anim-page { animation: pageTransition var(--duration-base) var(--ease-standard) both; }

.anim-neon-pulse {
  animation: neonPulse 2.4s ease-in-out infinite;
}

@media (prefers-reduced-motion: reduce) {
  .anim-fade-in,
  .anim-scale-in,
  .anim-blur-in,
  .anim-page,
  .anim-neon-pulse,
  .glass-card {
    animation: none !important;
    transition: none !important;
  }
}
