/**
 * Holds low-specificity helpers and JavaScript-enhanced reveal rules.
 *
 * Reveal hiding is scoped under .inv-js so every section remains fully visible
 * and usable when JavaScript is disabled or IntersectionObserver is absent.
 */

.visually-hidden {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

.inv-js .reveal {
	opacity: 0;
	transform: translateY(1.25rem);
	transition: opacity var(--inv-duration) var(--inv-ease) var(--rv-delay, 0ms), transform var(--inv-duration) var(--inv-ease) var(--rv-delay, 0ms);
}

.inv-js .reveal.is-in {
	opacity: 1;
	transform: translateY(0);
}

@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
		scroll-behavior: auto !important;
		transition-duration: 0.01ms !important;
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
	}

	.inv-js .reveal {
		opacity: 1;
		transform: none;
	}
}
