/**
 * Animations
 * Keyframes and transition utilities
 */

@keyframes spin {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

@keyframes luma-reveal {
  from {
    opacity: 0;
    transform: translateY(40px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes luma-scale-in {
  from {
    opacity: 0;
    transform: translateY(20px) scale(0.95);
  }
  to {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}
.animate-spin {
  animation: spin 1s linear infinite;
}
.fade-in {
  animation: fade-in var(--animation-duration-normal, 0.3s) ease-out;
}
.luma-reveal {
  animation: luma-reveal 0.6s cubic-bezier(0.4, 0, 0.2, 1) both;
}
.luma-scale-in {
  animation: luma-scale-in 0.5s cubic-bezier(0.4, 0, 0.2, 1) both;
}
.luma-delay-1 { animation-delay: 0.1s; }
.luma-delay-2 { animation-delay: 0.2s; }
.luma-delay-3 { animation-delay: 0.3s; }
.luma-delay-4 { animation-delay: 0.4s; }
.luma-delay-5 { animation-delay: 0.5s; }
.luma-delay-6 { animation-delay: 0.6s; }

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}
.animate-spin,
.fade-in,
.luma-reveal,
.luma-scale-in {
  will-change: transform, opacity;
  transform: translateZ(0);
  backface-visibility: hidden;
  perspective: 1000px;
}
