/* IntersectionObserver-driven entrance */
/* .45s in plaats van .9s: bij .9s scrollde je op langere pagina's de fade
   voorbij en keek je tegen halfzichtbare tekst aan. Samen met de rootMargin
   in reveal.js (start vóór beeld) staat tekst nu op tijd scherp. */
.reveal { opacity: 0; transform: translateY(16px); transition: opacity .45s var(--ease-out), transform .45s var(--ease-out); }
.reveal.in { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1; transform: none; transition: none; }
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}
