/* Scroll World for Elementor */

.swe-track {
	position: relative;
	width: 100%;
}

.swe-pinned {
	position: -webkit-sticky;
	position: sticky !important;
	top: 0;
	overflow: hidden;
	width: 100%;
}

.e-con.swe-scrub,
.elementor-section.swe-scrub {
	position: relative;
}

/* layer media sotto tutto */
.swe-media {
	position: absolute;
	inset: 0;
	z-index: 0;
	overflow: hidden;
	pointer-events: none;
	contain: strict;
}

.swe-media video,
.swe-media img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center 42%;
}

.swe-media img {
	transition: opacity 0.25s;
}

/* il poster sparisce solo quando il video ha davvero dipinto un frame */
.swe-has-video .swe-media img {
	opacity: 0;
}

.swe-media video {
	z-index: 1;
	transform: translateZ(0);
}

/* canvas per la modalità frame-cache su mobile */
.swe-media canvas.swe-canvas {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	z-index: 1;
	transform: translateZ(0);
}

/* video usato solo per l'estrazione dei frame: deve restare "renderizzato"
   (display:none bloccherebbe il decoder su iOS) ma invisibile */
.swe-media video.swe-extract {
	width: 2px;
	height: 2px;
	inset: auto;
	left: 0;
	top: 0;
	opacity: 0.01;
	z-index: 0;
}

.swe-overlay {
	position: absolute;
	inset: 0;
	z-index: 2;
}

/* i widget interni stanno sopra il media layer */
.swe-scrub > .e-con-inner,
.swe-scrub > .elementor-container,
.swe-scrub > *:not(.swe-media) {
	position: relative;
	z-index: 1;
}

/* niente flash del contenuto prima del primo frame di scrub */
@media (prefers-reduced-motion: reduce) {
	.swe-media video {
		display: none;
	}
	.swe-has-video .swe-media img {
		opacity: 1;
	}
}
