/* ──────────────────────────────────────────────────────────────────────
   Utilities : a11y helpers + reveal animations
   ────────────────────────────────────────────────────────────────────── */

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

.text-center { text-align: center; }
.text-secondary { color: var(--text-secondary); }
.text-tertiary { color: var(--text-tertiary); }

.demo-tag {
	display: inline-block;
	font-family: var(--font-display);
	font-size: var(--fs-micro);
	color: var(--text-tertiary);
	letter-spacing: 0.06em;
	text-transform: uppercase;
	background: var(--bg-surface);
	padding: 2px 6px;
	border-radius: 2px;
	margin-left: var(--s-2);
	vertical-align: middle;
}

/* Reveal animations : .anim devient .anim--visible via IntersectionObserver */
.anim {
	opacity: 0;
	transform: translateY(24px);
	transition: opacity var(--t-slow), transform var(--t-slow);
	will-change: opacity, transform;
}
.anim.anim--visible {
	opacity: 1;
	transform: none;
}

.anim[data-delay="1"] { transition-delay: .08s; }
.anim[data-delay="2"] { transition-delay: .16s; }
.anim[data-delay="3"] { transition-delay: .24s; }
.anim[data-delay="4"] { transition-delay: .32s; }
.anim[data-delay="5"] { transition-delay: .40s; }
.anim[data-delay="6"] { transition-delay: .48s; }
