/* ============================================================
   Animations · keyframes + reveal classes
   ============================================================ */

/* --- Reveal on scroll ------------------------------------ */
.reveal {
  opacity: 0;
  transform: translateY(18px);
  transition:
    opacity var(--dur-slower) var(--ease-out),
    transform var(--dur-slower) var(--ease-out);
  transition-delay: var(--delay, 0ms);
  will-change: opacity, transform;
}

.reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
}

.reveal-fade {
  opacity: 0;
  transition: opacity var(--dur-slower) var(--ease-out);
  transition-delay: var(--delay, 0ms);
}

.reveal-fade.is-visible {
  opacity: 1;
}

/* --- Keyframes ------------------------------------------- */
@keyframes amberPulse {
  0%, 100% { opacity: 0.6; transform: scale(1); }
  50%      { opacity: 1;   transform: scale(1.08); }
}

@keyframes playheadSlide {
  0%   { left: 8%;  opacity: 0; }
  6%   { opacity: 1; }
  94%  { opacity: 1; }
  100% { left: 92%; opacity: 0; }
}

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

@keyframes blinkCaret {
  0%, 50%   { opacity: 1; }
  51%, 100% { opacity: 0; }
}

@keyframes shimmer {
  0%   { transform: translateX(-100%); }
  100% { transform: translateX(100%); }
}

@keyframes gridPan {
  0%   { background-position: 0 0; }
  100% { background-position: 80px 80px; }
}

@keyframes orbitFloat {
  0%, 100% { transform: translate3d(0, 0, 0); }
  50%      { transform: translate3d(0, -10px, 0); }
}

@keyframes glowBreathe {
  0%, 100% { opacity: 0.45; }
  50%      { opacity: 0.8; }
}

/* --- Reduced motion: collapse all reveals --------------- */
@media (prefers-reduced-motion: reduce) {
  .reveal,
  .reveal-fade {
    opacity: 1;
    transform: none;
    transition: none;
  }

  *,
  *::before,
  *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
}
