/**
 * Reveal on scroll (assets/js/reveal.js). Elements are hidden only after the
 * script adds .nscb-reveal-ready, so content stays visible without JavaScript.
 * Only opacity and transform are animated.
 */

.nscb-reveal-ready [data-reveal] {
	opacity: 0;
	transform: translateY(1.75rem);
	transition:
		opacity var(--nscb-duration-slow) var(--nscb-ease-out),
		transform var(--nscb-duration-cinematic) var(--nscb-ease-out);
	transition-delay: var(--nscb-reveal-delay, 0ms);
}

.nscb-reveal-ready [data-reveal="zoom"] {
	transform: scale(0.96);
}

.nscb-reveal-ready [data-reveal].is-visible {
	opacity: 1;
	transform: none;
}

/* Rails reveal as one group: the track stays put, and its first cards rise in
   sequence (--i is the card's position). Cards beyond the first few, which
   start off-screen to the side, need no delay. */
.nscb-reveal-ready [data-reveal="rail"] {
	opacity: 1;
	transform: none;
}

.nscb-reveal-ready [data-reveal="rail"] .nscb-rail__item {
	opacity: 0;
	transform: translateY(1.25rem);
	transition:
		opacity var(--nscb-duration-slow) var(--nscb-ease-out),
		transform var(--nscb-duration-cinematic) var(--nscb-ease-out);
	transition-delay: calc(min(var(--i, 0), 4) * 80ms);
}

.nscb-reveal-ready [data-reveal="rail"].is-visible .nscb-rail__item {
	opacity: 1;
	transform: none;
}

/* The hidden attribute always wins over any reveal state. */
[data-reveal][hidden] {
	display: none !important;
}

@media (prefers-reduced-motion: reduce) {
	.nscb-reveal-ready [data-reveal],
	.nscb-reveal-ready [data-reveal="rail"] .nscb-rail__item {
		opacity: 1;
		transform: none;
		transition: none;
	}
}

@media print {
	.nscb-reveal-ready [data-reveal],
	.nscb-reveal-ready [data-reveal="rail"] .nscb-rail__item {
		opacity: 1 !important;
		transform: none !important;
	}
}
