/**
 * Global Scroll Reveal.
 *
 * Applied to any Elementor element that opts in via the Advanced tab
 * "One · Scroll Reveal" control. Direction, distance, duration, and delay
 * are driven by inline CSS custom properties set at render time.
 */

.one-reveal {
	opacity: 0;
	transition:
		opacity var(--one-reveal-duration, 1000ms) cubic-bezier(0.16, 1, 0.3, 1) var(--one-reveal-delay, 0ms),
		transform var(--one-reveal-duration, 1000ms) cubic-bezier(0.16, 1, 0.3, 1) var(--one-reveal-delay, 0ms);
	will-change: opacity, transform;
}

/* Starting transforms per direction */
.one-reveal--up {
	transform: translateY(var(--one-reveal-distance, 40px));
}

.one-reveal--down {
	transform: translateY(calc(var(--one-reveal-distance, 40px) * -1));
}

.one-reveal--left {
	transform: translateX(calc(var(--one-reveal-distance, 40px) * -1));
}

.one-reveal--right {
	transform: translateX(var(--one-reveal-distance, 40px));
}

.one-reveal--scale {
	transform: scale(0.85);
}

.one-reveal--fade {
	transform: none;
}

/* Revealed state — added by JS on scroll */
.one-reveal.is-visible {
	opacity: 1;
	transform: none;
}

/* In the Elementor editor, always show elements so authors can work. */
.elementor-editor-active .one-reveal,
.elementor-editor-preview .one-reveal {
	opacity: 1;
	transform: none;
	transition: none;
}

/* Respect reduced-motion preferences. */
@media (prefers-reduced-motion: reduce) {
	.one-reveal {
		opacity: 1 !important;
		transform: none !important;
		transition: none !important;
	}
}
