/**
 * Scroll-reveal micro-interactions. Uses IntersectionObserver (see reveal.js)
 * to toggle .is-visible — cheap opacity/transform only, GPU-composited.
 */

.mst-reveal {
	opacity: 0;
	transform: translateY(24px);
	transition: opacity var(--dur-slow) var(--ease-out), transform var(--dur-slow) var(--ease-out);
	will-change: opacity, transform;
}

.mst-reveal.is-visible {
	opacity: 1;
	transform: translateY(0);
}

.mst-reveal-stagger.is-visible > * {
	transition-delay: calc(var(--mst-i, 0) * 70ms);
}

@media (prefers-reduced-motion: reduce) {
	.mst-reveal {
		opacity: 1;
		transform: none;
		transition: none;
	}
}
