/**
 * Site-wide scroll reveal: fade + slide (no blur — blur tanks paint cost).
 * Nodes with data-zs-no-reveal / .zs-st are owned by zs-scroll.js (ScrollTrigger).
 */
.zs-reveal {
	opacity: 0;
	transform: translate3d(0, 18px, 0);
	transition:
		opacity 0.55s cubic-bezier(0.22, 1, 0.36, 1),
		transform 0.55s cubic-bezier(0.22, 1, 0.36, 1);
	transition-delay: var(--zs-reveal-delay, 0ms);
}
.zs-reveal.is-in {
	opacity: 1;
	transform: translate3d(0, 0, 0);
}
.zs-reveal--left {
	transform: translate3d(-16px, 8px, 0);
}
.zs-reveal--left.is-in {
	transform: translate3d(0, 0, 0);
}
.zs-reveal--right {
	transform: translate3d(16px, 8px, 0);
}
.zs-reveal--right.is-in {
	transform: translate3d(0, 0, 0);
}
.zs-reveal--soft {
	transform: translate3d(0, 12px, 0);
}

/* ScrollTrigger-owned: initial hide via GSAP set; avoid CSS fight */
.zs-st {
	will-change: transform, opacity;
}

/* Lazy image soft fade (opacity only — no blur) */
.zs-img-soft {
	opacity: 0;
	transition: opacity 0.5s cubic-bezier(0.22, 1, 0.36, 1);
}
.zs-img-soft.is-in,
.zs-img-soft.is-loaded {
	opacity: 1;
}
img.zs-lazy-src:not(.is-loaded) {
	background: #eef1f5;
	min-height: 1px;
}

/* Keep chrome / sticky UI out of motion */
#leafs-navigation_006_P_193-17515216537300 .zs-reveal,
#leafs-effect_163_P_008-1787282076105 .zs-reveal,
.leafs-el-loop-41 .zs-reveal {
	opacity: 1 !important;
	filter: none !important;
	transform: none !important;
	transition: none !important;
}

@media (prefers-reduced-motion: reduce) {
	.zs-reveal,
	.zs-reveal.is-in,
	.zs-img-soft,
	.zs-img-soft.is-in,
	.zs-img-soft.is-loaded,
	.zs-st {
		opacity: 1 !important;
		filter: none !important;
		transform: none !important;
		transition: none !important;
	}
}
