/* Reveal-on-scroll (more restrained, academic feel) */
.reveal {
  opacity: 0;
  transform: translateY(22px);
  transition: opacity 1100ms var(--ease-out), transform 1100ms var(--ease-out);
  will-change: opacity, transform;
}
.reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
}

.reveal-stagger > * {
  opacity: 0;
  transform: translateY(14px);
  transition: opacity 800ms var(--ease-out), transform 800ms var(--ease-out);
}
.reveal-stagger.is-visible > *:nth-child(1)  { transition-delay:  60ms; }
.reveal-stagger.is-visible > *:nth-child(2)  { transition-delay: 120ms; }
.reveal-stagger.is-visible > *:nth-child(3)  { transition-delay: 180ms; }
.reveal-stagger.is-visible > *:nth-child(4)  { transition-delay: 240ms; }
.reveal-stagger.is-visible > *:nth-child(5)  { transition-delay: 300ms; }
.reveal-stagger.is-visible > *:nth-child(6)  { transition-delay: 360ms; }
.reveal-stagger.is-visible > *:nth-child(7)  { transition-delay: 420ms; }
.reveal-stagger.is-visible > *:nth-child(8)  { transition-delay: 480ms; }
.reveal-stagger.is-visible > *:nth-child(n+9){ transition-delay: 540ms; }
.reveal-stagger.is-visible > * {
  opacity: 1;
  transform: translateY(0);
}

/* Reduced motion */
@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;
  }
  .reveal, .reveal-stagger > * {
    opacity: 1 !important;
    transform: none !important;
  }
  .hero__canvas { display: none; }
  .hero__portrait::after { animation: none; }
}
