/**
 * ImmersiVenice Motion - Frontend Styles
 *
 * Stili di base per il corretto funzionamento degli effetti.
 * NON modificare a meno di sapere cosa stai facendo.
 */

/* ===================================================
   SETUP GLOBALE
   =================================================== */

/* Tutti gli elementi animati devono performare via GPU */
.immv-parallax,
.immv-parallax-down,
.immv-parallax-slow,
.immv-parallax-fast,
.immv-reveal,
.immv-reveal-left,
.immv-reveal-right,
.immv-reveal-scale,
.immv-zoom-in,
.immv-zoom-out,
.immv-ken-burns,
.immv-clip-reveal,
.immv-clip-reveal-h,
.immv-text-fade-up,
.immv-text-blur,
.immv-rotate {
	will-change: transform, opacity;
	backface-visibility: hidden;
	-webkit-backface-visibility: hidden;
}

/* ===================================================
   PARALLAX SETUP
   I parent dei parallax devono nascondere l'overflow
   per evitare scroll orizzontali o salti grafici.
   =================================================== */

/* Marker per genitori di elementi parallax - opzionale */
.immv-parallax-wrapper {
	position: relative;
	overflow: hidden;
}

/* Per immagini parallax, suggerisci size superiore al wrapper */
.immv-parallax img,
.immv-parallax-down img,
.immv-parallax-slow img,
.immv-parallax-fast img {
	will-change: transform;
}

/* ===================================================
   REVEAL - Stato iniziale fallback
   Se JS è disabilitato o GSAP non carica, mostra
   comunque il contenuto (no FOUC).
   =================================================== */

/* Le animazioni reveal iniziano da opacity 0 via GSAP */
/* Senza JS, garantiamo visibilità */
.no-js .immv-reveal,
.no-js .immv-reveal-left,
.no-js .immv-reveal-right,
.no-js .immv-reveal-scale,
.no-js .immv-zoom-in,
.no-js .immv-text-fade-up,
.no-js .immv-text-blur {
	opacity: 1 !important;
	transform: none !important;
	filter: none !important;
}

/* ===================================================
   KEN BURNS - Setup
   =================================================== */

.immv-ken-burns {
	transform-origin: center center;
}

/* ===================================================
   CLIP REVEAL - Setup
   =================================================== */

.immv-clip-reveal,
.immv-clip-reveal-h {
	overflow: hidden;
}

/* ===================================================
   PIN - Setup
   =================================================== */

.immv-pin {
	position: relative;
}

/* ===================================================
   ROTATE - Setup
   =================================================== */

.immv-rotate {
	transform-origin: center center;
}

/* ===================================================
   ACCESSIBILITY
   Rispetta prefers-reduced-motion in tutti i casi
   =================================================== */

@media (prefers-reduced-motion: reduce) {
	.immv-parallax,
	.immv-parallax-down,
	.immv-parallax-slow,
	.immv-parallax-fast,
	.immv-reveal,
	.immv-reveal-left,
	.immv-reveal-right,
	.immv-reveal-scale,
	.immv-zoom-in,
	.immv-zoom-out,
	.immv-ken-burns,
	.immv-clip-reveal,
	.immv-clip-reveal-h,
	.immv-text-fade-up,
	.immv-text-blur,
	.immv-rotate {
		transform: none !important;
		opacity: 1 !important;
		filter: none !important;
		animation: none !important;
		clip-path: none !important;
	}
}
