/* Barbary Plante — shared reveal-on-scroll animation.
 *
 * Reused by every content widget so the page entrance language
 * stays consistent (same easing, same duration, same stagger
 * pattern as the existing hero rise animation).
 *
 * The IntersectionObserver in `bp-reveal.js` adds `.is-revealed`
 * to each `[data-bp-reveal]` element the first time it enters
 * the viewport. `[data-bp-stagger="N"]` is honored for delayed
 * children (80ms per step). `prefers-reduced-motion: reduce`
 * skips the animation entirely and reveals the content as-is.
 */
[data-bp-reveal] {
	opacity: 0;
	transform: translateY(12px);
	transition: opacity 600ms ease, transform 600ms ease;
	will-change: opacity, transform;
}

[data-bp-reveal].is-revealed {
	opacity: 1;
	transform: none;
}

[data-bp-reveal][data-bp-stagger="1"] { transition-delay: 80ms; }
[data-bp-reveal][data-bp-stagger="2"] { transition-delay: 160ms; }
[data-bp-reveal][data-bp-stagger="3"] { transition-delay: 240ms; }
[data-bp-reveal][data-bp-stagger="4"] { transition-delay: 320ms; }
[data-bp-reveal][data-bp-stagger="5"] { transition-delay: 400ms; }
[data-bp-reveal][data-bp-stagger="6"] { transition-delay: 480ms; }
[data-bp-reveal][data-bp-stagger="7"] { transition-delay: 560ms; }
[data-bp-reveal][data-bp-stagger="8"] { transition-delay: 640ms; }

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