/* NovaResolve — Global Animation System */

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

@keyframes detail-enter {
  from {
    opacity: 0.3;
    transform: translateY(4px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes dialog-enter {
  from {
    opacity: 0;
    transform: translateY(10px) scale(0.98);
  }
  to {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}

@keyframes toast-enter {
  from {
    opacity: 0;
    transform: translate(-50%, 10px);
  }
  to {
    opacity: 1;
    transform: translate(-50%, 0);
  }
}

@keyframes route-travel {
  0% { transform: translateX(0); opacity: 0; }
  15%, 80% { opacity: 1; }
  100% { transform: translateX(45px); opacity: 0; }
}

@keyframes signal {
  0%, 100% { transform: scaleY(0.4); opacity: 0.5; }
  50% { transform: scaleY(1); opacity: 1; }
}

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

@keyframes spotlight-pulse {
  0% { box-shadow: var(--shadow); }
  15% { box-shadow: 0 12px 35px rgba(0, 0, 0, 0.3), 0 0 0 2px var(--accent), 0 0 24px var(--accent-glow); }
  75% { box-shadow: 0 10px 30px rgba(0, 0, 0, 0.25), 0 0 0 2px var(--accent), 0 0 18px var(--accent-glow); }
  100% { box-shadow: var(--shadow); }
}

.page-enter {
  animation: page-enter 0.32s var(--ease) both;
}

.tab-enter {
  animation: detail-enter 0.22s var(--ease);
}

.spinning {
  animation: spin 2s linear infinite;
}

.spotlight-burst {
  animation: spotlight-pulse 3.2s cubic-bezier(0.16, 1, 0.3, 1) forwards !important;
  z-index: 50 !important;
}

/* Reduced Motion preferences */
@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;
  }
}
