/* Reveal targets stay fully visible by default (fail-open: if reveal.js
   never runs — blocked script, error, slow network — content is never
   stuck invisible). reveal.js adds .motion-ready to <html> only once it
   has successfully attached its observers, and THAT'S what arms the
   hidden starting-state for the animation. */
[data-reveal],
[data-reveal="mask"] {
  opacity: 1;
  transform: none;
  clip-path: none;
}
.motion-ready[data-motion="on"] [data-reveal]:not([data-reveal="mask"]) {
  opacity: 0;
  transform: translateY(24px);
}
.motion-ready[data-motion="on"] [data-reveal="mask"] {
  clip-path: inset(0 0 100% 0);
}

.page-transition-overlay {
  position: fixed;
  inset: 0;
  background: var(--color-bg);
  z-index: 10001;
  opacity: 0;
  pointer-events: none;
}
