@keyframes ambient-drift {
  0%, 100% { transform: translate3d(0, 0, 0) scale(1); }
  50% { transform: translate3d(4vw, 3vh, 0) scale(1.08); }
}
@keyframes orbit-pulse {
  0%, 100% { opacity: .35; transform: scale(.98); }
  50% { opacity: .72; transform: scale(1.05); }
}
.ambient-background span { animation: ambient-drift 24s ease-in-out infinite; }
.ambient-background span:nth-child(2) { animation-delay: -8s; animation-duration: 30s; }
.ambient-background span:nth-child(3) { animation-delay: -14s; animation-duration: 35s; }
.node-orbit { animation: orbit-pulse 4s ease-in-out infinite; }
.reveal { opacity: 1; transform: none; transition: opacity .72s ease, transform .72s cubic-bezier(.2,.7,.2,1); }
html[data-motion="ready"] .reveal:not(.is-visible) { opacity: 0; transform: translateY(22px); }
.reveal-delay { transition-delay: .12s; }
.reveal.is-visible { opacity: 1; transform: translateY(0); }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; scroll-behavior: auto !important; transition-duration: .01ms !important; }
  html[data-motion="ready"] .reveal { opacity: 1; transform: none; }
  .portrait-frame img { filter: grayscale(.25); }
}
