/**
 * bsc-reveal companion CSS — see assets/js/bsc-reveal.js for the trigger.
 *
 * Usage (WPBakery "Extra Class" field on any element):
 *   bsc-reveal bsc-reveal--up bsc-reveal--delay-3
 *
 * Direction (pick exactly one): --up | --left | --right | --scale
 * Speed (optional, default 0.5s): --fast (0.45s) | --slow (0.7s)
 * Stagger (optional, ~100ms steps): --delay-1 .. --delay-9
 *
 * The hidden starting state applies the moment this stylesheet loads —
 * unconditionally, not gated behind a JS-added class. That's deliberate: it's
 * what guarantees the hidden state is the very first thing painted, so the
 * transition always has somewhere to animate from. The trade-off is a
 * <noscript> fallback is required (added site-wide via functions.php) so
 * content stays visible if JS never runs.
 */
.bsc-reveal {
	opacity: 0;
	transition-property: opacity, transform;
	transition-duration: 0.5s;
	transition-timing-function: cubic-bezier(.215, .61, .355, 1);
	will-change: opacity, transform;
}

.bsc-reveal--up    { transform: translateY(32px); }
.bsc-reveal--left  { transform: translateX(-32px); }
.bsc-reveal--right { transform: translateX(32px); }
.bsc-reveal--scale { transform: scale(0.96); }

.bsc-reveal--fast { transition-duration: 0.45s; }
.bsc-reveal--slow { transition-duration: 0.7s; }

.bsc-reveal--delay-1 { transition-delay: 0.1s; }
.bsc-reveal--delay-2 { transition-delay: 0.2s; }
.bsc-reveal--delay-3 { transition-delay: 0.3s; }
.bsc-reveal--delay-4 { transition-delay: 0.4s; }
.bsc-reveal--delay-5 { transition-delay: 0.5s; }
.bsc-reveal--delay-6 { transition-delay: 0.6s; }
.bsc-reveal--delay-7 { transition-delay: 0.7s; }
.bsc-reveal--delay-8 { transition-delay: 0.8s; }
.bsc-reveal--delay-9 { transition-delay: 0.9s; }

.bsc-reveal.bsc-reveal-visible {
	opacity: 1 !important;
	transform: none !important;
}

@media (prefers-reduced-motion: reduce) {
	.bsc-reveal {
		opacity: 1;
		transform: none;
		transition: none;
		/* Client-reported bug (2026-07-23): will-change:transform (below)
		   establishes a containing block for any position:fixed descendant
		   regardless of the actual transform value — broke the mobile
		   Finder's fixed-position filter drawer, sizing it against this
		   wrapper's full height instead of the viewport. bsc-reveal.js
		   clears will-change once the reveal transition ends, but with
		   transition:none here that event never fires, so this is the
		   CSS-only equivalent for the reduced-motion path specifically. */
		will-change: auto;
	}
}
