/* Scroll reveal layer — cascading ease-in-out entrances.
   Hidden state only applies under html.reveal-armed, which reveal.js adds
   before first paint and removes on failure, so content is never lost. */

html.reveal-armed [data-reveal] {
	opacity: 0;
	transform: translate3d(0, 30px, 0);
	will-change: opacity, transform;
}

html.reveal-armed [data-reveal].is-revealed {
	opacity: 1;
	transform: translate3d(0, 0, 0);
	transition:
		opacity 0.85s cubic-bezier(0.45, 0.05, 0.15, 1),
		transform 0.85s cubic-bezier(0.45, 0.05, 0.15, 1);
	transition-delay: var(--reveal-delay, 0s);
	will-change: auto;
}

@media (prefers-reduced-motion: reduce) {
	html.reveal-armed [data-reveal],
	html.reveal-armed [data-reveal].is-revealed {
		opacity: 1;
		transform: none;
		transition: none;
	}
}

/* Lenis smooth-scroll support (trimmed from lenis.css — the stock
   iframe pointer-events rule is omitted so Vimeo popups stay clickable). */
html.lenis,
html.lenis body {
	height: auto;
}

.lenis:not(.lenis-autoToggle).lenis-stopped {
	overflow: clip;
}

.lenis [data-lenis-prevent],
.lenis [data-lenis-prevent-wheel],
.lenis [data-lenis-prevent-touch] {
	overscroll-behavior: contain;
}
