@keyframes loaderSweep {
  from { background-position: -280px 0, 0 0; }
  to { background-position: 280px 0, 0 28px; }
}

@keyframes auroraDrift {
  0% { transform: translateX(-4%) rotate(-8deg); }
  50% { transform: translateX(5%) rotate(-5deg); }
  100% { transform: translateX(-4%) rotate(-8deg); }
}

@keyframes auroraDriftAlt {
  0% { transform: translateX(4%) rotate(7deg); }
  50% { transform: translateX(-5%) rotate(4deg); }
  100% { transform: translateX(4%) rotate(7deg); }
}

@keyframes rotateOrbit {
  to { transform: translate(-50%, -50%) rotateX(64deg) rotate(360deg); }
}

@keyframes scanChart {
  from { left: 0%; }
  to { left: 100%; }
}

@keyframes pulseNode {
  0%, 100% { opacity: 0.54; transform: scale(1); }
  50% { opacity: 1; transform: scale(1.18); }
}

@keyframes modelRise {
  0%, 100% { transform: scaleY(0.42); opacity: 0.55; }
  50% { transform: scaleY(1); opacity: 1; }
}

@keyframes commandTrace {
  0% { transform: translateX(-100%); opacity: 0; }
  15% { opacity: 1; }
  100% { transform: translateX(100%); opacity: 0; }
}

@keyframes riskBreathe {
  0%, 100% { filter: brightness(0.85); }
  50% { filter: brightness(1.35); }
}

.loader__field {
  animation: loaderSweep 1500ms linear infinite;
}

.ambient__band--one {
  animation: auroraDrift 14s ease-in-out infinite;
}

.ambient__band--two {
  animation: auroraDriftAlt 16s ease-in-out infinite;
}

.instrument__dial span {
  animation: pulseNode 3.4s ease-in-out infinite;
}

.instrument__dial span:nth-child(2) {
  animation-delay: 500ms;
}

.instrument__dial span:nth-child(3) {
  animation-delay: 900ms;
}

.module-visual--model span {
  animation: modelRise 3s ease-in-out infinite;
}

.module-visual--model span:nth-child(2) { animation-delay: 200ms; }
.module-visual--model span:nth-child(3) { animation-delay: 420ms; }
.module-visual--model span:nth-child(4) { animation-delay: 640ms; }

.module-visual--command span {
  animation: commandTrace 2.8s linear infinite;
}

.module-visual--command span:nth-child(2) { animation-delay: 580ms; }
.module-visual--command span:nth-child(3) { animation-delay: 1140ms; }

.risk-grid span {
  animation: riskBreathe 4.8s ease-in-out infinite;
  animation-delay: calc(var(--i, 0) * 28ms);
}

.chart-scan {
  animation: scanChart 4s linear infinite;
}

.corridor span {
  animation: pulseNode 2.8s ease-in-out infinite;
}

.corridor span:nth-child(2) {
  animation-delay: 320ms;
}

.corridor span:nth-child(3) {
  animation-delay: 640ms;
}

.orbit-ring--one {
  animation: rotateOrbit 16s linear infinite;
}

.orbit-ring--two {
  animation: rotateOrbit 24s linear infinite reverse;
}

.orbit-ring--three {
  animation: rotateOrbit 34s linear infinite;
}

.prediction-layer {
  transition: transform 420ms cubic-bezier(0.22, 1, 0.36, 1), border-color 240ms ease, background 240ms ease;
}

.prediction-layer:hover {
  border-color: rgba(125, 231, 255, 0.48);
  background: rgba(125, 231, 255, 0.08);
  transform: rotateY(-4deg) translateX(var(--offset, 0));
}

[data-tilt] {
  transition: transform 180ms ease, border-color 180ms ease;
  will-change: transform;
}

[data-tilt]:hover {
  border-color: rgba(125, 231, 255, 0.34);
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
    transition-duration: 0.01ms !important;
  }

  .reveal {
    opacity: 1;
    transform: none;
  }
}
