/* Keyframes */
@keyframes fadeUp {
  from {
    opacity: 0;
    transform: translateY(12px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes slideInLeft {
  from {
    opacity: 0;
    transform: translateX(-16px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

@keyframes pulseBorder {
  0%, 100% {
    box-shadow: 0 0 0 0 var(--color-accent-dim);
  }
  50% {
    box-shadow: 0 0 0 8px transparent;
  }
}

/* Animation utility classes */
.anim-fade-up {
  animation: fadeUp 0.4s var(--transition-fast) forwards;
}

.anim-fade-in {
  animation: fadeIn 0.3s var(--transition-fast) forwards;
}

.anim-slide-left {
  animation: slideInLeft 0.3s var(--transition-fast) forwards;
}

/* Stagger delays */
.delay-0 { animation-delay: 0ms; }
.delay-1 { animation-delay: 60ms; }
.delay-2 { animation-delay: 120ms; }
.delay-3 { animation-delay: 180ms; }
.delay-4 { animation-delay: 240ms; }
.delay-5 { animation-delay: 300ms; }

/* Shimmer loader */
.skeleton {
  animation: shimmer 1.4s ease-in-out infinite;
  background: linear-gradient(90deg, var(--color-bg-card) 0%, var(--color-bg-hover) 50%, var(--color-bg-card) 100%);
  background-size: 200% 100%;
}

/* Spinner */
.spinner {
  animation: spin 0.8s linear infinite;
}

/* Pulse border for active states */
.pulse-border {
  animation: pulseBorder 2s ease-in-out infinite;
}