/*
 * ASR Quiz Patente – Ambient v3 "Night Drive" (docs/DESIGN-V3.md §1, §8; API in docs/v3-motion.md).
 * Sfumature, luce, grana e motivo strada. Solo decorazione: mai unico portatore di informazione.
 *
 * - Token sulle tre radici (.asr-site, .asr-scope, .asr-trial), mai su :root.
 * - Strati solo CSS (background multipli e pseudo-elementi con pointer-events: none): nessuna immagine raster.
 * - Tetti di luminanza dietro al testo (verificati in docs/v3-motion.md §Contrasto):
 *     hero zona testo ≤ #172F37 · sezione ≤ #122025 · sezione alternata ≤ #1A292F · card ≤ #1E262A
 *     shell ≤ #07191F · quiz ≤ #081216 · scena 3D con scrim ≤ #303030.
 * - Nomi: classi brevi di DESIGN-V3 (.asr-amb--*) con alias lunghi (.asr-ambient--*): stesse regole.
 * Dipende solo dai token v2 (--asr-color-bg, --asr-color-surface, --asr-hero-bg, --asr-pattern-diagonal), con fallback.
 */

/* ------------------------------------------------------------------ */
/* 1. Token                                                            */
/* ------------------------------------------------------------------ */
.asr-site,
.asr-scope,
.asr-trial {
	/* Canali (per comporre rgb(… / alpha) senza ripetere i colori) */
	--asr-amb-petrol: 1 67 89;            /* #014359 */
	--asr-amb-line: 58 139 166;           /* #3A8BA6 */
	--asr-amb-light: 255 255 255;

	/* 1. Cielo petrolio (alto-destra), glow principale */
	--asr-amb-sky: radial-gradient(60% 55% at 82% 12%,
		rgb(var(--asr-amb-petrol) / 0.55) 0%, rgb(var(--asr-amb-petrol) / 0.20) 42%, transparent 72%);
	/* 1b. Cielo attenuato per l'hero compatto: il testo può stare ovunque (anche in alto a destra su mobile) */
	--asr-amb-sky-soft: radial-gradient(60% 55% at 82% 12%,
		rgb(var(--asr-amb-petrol) / 0.40) 0%, rgb(var(--asr-amb-petrol) / 0.16) 42%, transparent 72%);
	/* 2. Riflesso sull'asfalto (basso-sinistra) */
	--asr-amb-floor: radial-gradient(70% 45% at 12% 108%,
		rgb(var(--asr-amb-petrol) / 0.32) 0%, transparent 70%);
	/* 3. Orizzonte: banda fredda sottile al 58% dell'altezza (solo hero) */
	--asr-amb-horizon: linear-gradient(180deg,
		transparent 50%, rgb(var(--asr-amb-line) / 0.10) 58%, transparent 66%);
	/* 4. Fascio di faro: lama dal bordo sinistro, apertura 18°, picco .06 */
	--asr-amb-beam: conic-gradient(from 97deg at -4% 42%,
		transparent 0deg, rgb(var(--asr-amb-light) / 0.035) 6deg, rgb(var(--asr-amb-light) / 0.06) 9deg,
		rgb(var(--asr-amb-light) / 0.035) 12deg, transparent 18deg, transparent 360deg);
	/* 4b. Maschera di fascio e orizzonte nell'hero: visibili solo fuori dalla colonna del testo */
	--asr-amb-hero-mask: linear-gradient(180deg, #000 0 20%, transparent 32%);
	/* 5. Vignettatura "parabrezza" */
	--asr-amb-vignette: radial-gradient(125% 95% at 50% 38%, transparent 58%, rgb(0 0 0 / 0.55) 100%);
	/* 6. Glow di sezione (normali e alternate: alternano il lato) */
	--asr-amb-section: radial-gradient(50% 60% at 100% 0%, rgb(var(--asr-amb-petrol) / 0.22), transparent 70%);
	--asr-amb-section-alt: radial-gradient(45% 55% at 0% 100%, rgb(var(--asr-amb-petrol) / 0.18), transparent 70%);
	/* 7. Lucentezza card (alto-destra, carrozzeria sotto un lampione) */
	--asr-amb-card: radial-gradient(120% 80% at 100% 0%, rgb(var(--asr-amb-line) / 0.08), transparent 60%);
	--asr-amb-card-alt: radial-gradient(120% 80% at 0% 100%, rgb(var(--asr-amb-line) / 0.07), transparent 60%);
	/* 8. App shell e quiz: un solo glow alto e calmo */
	--asr-amb-shell: radial-gradient(80% 50% at 50% -10%, rgb(var(--asr-amb-petrol) / 0.28), transparent 70%);
	--asr-amb-quiz: radial-gradient(60% 40% at 50% 0%, rgb(var(--asr-amb-petrol) / 0.16), transparent 70%);
	/* 8b. Footer: riflesso dall'alto a sinistra */
	--asr-amb-footer: radial-gradient(70% 60% at 10% -10%, rgb(var(--asr-amb-petrol) / 0.18), transparent 70%);
	/* 9. Grana: feTurbulence in SVG inline, tessera 160 px, rasterizzata una volta (mai animata) */
	--asr-amb-noise: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 .55 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
	--asr-amb-noise-size: 160px;
	--asr-amb-noise-opacity: 0.04;        /* card: 0; sezioni .04; hero .045 */
	/* 10. Linea di mezzeria (separatore e motivo) */
	--asr-lane-dash: 24px;
	--asr-lane-gap: 24px;
	--asr-lane-w: 2px;
	--asr-lane-color: rgb(var(--asr-amb-light) / 0.14);
	--asr-amb-lane: repeating-linear-gradient(90deg,
		var(--asr-lane-color) 0 var(--asr-lane-dash), transparent var(--asr-lane-dash) calc(var(--asr-lane-dash) + var(--asr-lane-gap)));
	--asr-amb-lane-v: repeating-linear-gradient(180deg,
		var(--asr-lane-color) 0 var(--asr-lane-dash), transparent var(--asr-lane-dash) calc(var(--asr-lane-dash) + var(--asr-lane-gap)));
	/* 11. Linea continua di bordo carreggiata */
	--asr-edge-color: rgb(var(--asr-amb-light) / 0.10);
	--asr-edge-line: linear-gradient(var(--asr-edge-color), var(--asr-edge-color));
	/* 12. Catarifrangenti: puntini 3×3 #6FB0C6 ogni 96 px */
	--asr-reflector-color: rgb(111 176 198 / 0.5);
	--asr-reflector-lit: rgb(111 176 198 / 1);
	--asr-reflector-step: 96px;
	/* 13. Scrim della scena 3D (§5.2) */
	--asr-scene-scrim: linear-gradient(to top, rgb(8 8 8 / 0.9) 0%, rgb(8 8 8 / 0.55) 55%, rgb(8 8 8 / 0) 80%);
	--asr-scene-scrim-lg: linear-gradient(90deg, rgb(8 8 8 / 0.86) 0%, rgb(8 8 8 / 0.6) 40%, rgb(8 8 8 / 0) 70%);
}

/* Sotto i 1024 px il testo dell'hero sta in basso: orizzonte e fascio salgono nel terzo superiore
   (dove la scena 3D mette il punto di fuga) e la maschera li spegne sotto il 32%. */
@media (min-width: 1024px) {
	.asr-site, .asr-scope, .asr-trial {
		--asr-amb-hero-mask: linear-gradient(90deg, transparent 0 50%, #000 74%);
	}
}
@media (max-width: 1023.98px) {
	.asr-site, .asr-scope, .asr-trial {
		--asr-amb-horizon: linear-gradient(180deg, transparent 16%, rgb(var(--asr-amb-line) / 0.10) 24%, transparent 32%);
		--asr-amb-beam: conic-gradient(from 97deg at -4% 14%,
			transparent 0deg, rgb(var(--asr-amb-light) / 0.035) 6deg, rgb(var(--asr-amb-light) / 0.06) 9deg,
			rgb(var(--asr-amb-light) / 0.035) 12deg, transparent 18deg, transparent 360deg);
	}
}

/* Tema chiaro dell'area allievi: solo un velo petrolio, niente grana, vignettatura né fascio. */
.asr-scope[data-asr-theme="light"] {
	--asr-amb-sky: radial-gradient(60% 55% at 82% 12%, rgb(var(--asr-amb-petrol) / 0.07), transparent 72%);
	--asr-amb-sky-soft: var(--asr-amb-sky);
	--asr-amb-floor: none;
	--asr-amb-beam: none;
	--asr-amb-vignette: none;
	--asr-amb-horizon: none;
	--asr-amb-section: radial-gradient(50% 60% at 100% 0%, rgb(var(--asr-amb-petrol) / 0.06), transparent 70%);
	--asr-amb-section-alt: none;
	--asr-amb-card: none;
	--asr-amb-card-alt: none;
	--asr-amb-shell: radial-gradient(80% 50% at 50% -10%, rgb(var(--asr-amb-petrol) / 0.06), transparent 70%);
	--asr-amb-quiz: none;
	--asr-amb-footer: none;
	--asr-amb-noise-opacity: 0;
	--asr-lane-color: rgb(8 8 8 / 0.14);
	--asr-edge-color: rgb(8 8 8 / 0.12);
	--asr-reflector-color: rgb(1 67 89 / 0.45);
	--asr-reflector-lit: rgb(1 67 89 / 1);
}
@media (prefers-color-scheme: light) {
	.asr-scope[data-asr-theme="auto"] {
		--asr-amb-sky: radial-gradient(60% 55% at 82% 12%, rgb(var(--asr-amb-petrol) / 0.07), transparent 72%);
		--asr-amb-sky-soft: radial-gradient(60% 55% at 82% 12%, rgb(var(--asr-amb-petrol) / 0.07), transparent 72%);
	--asr-amb-sky-soft: var(--asr-amb-sky);
		--asr-amb-floor: none;
		--asr-amb-beam: none;
		--asr-amb-vignette: none;
		--asr-amb-horizon: none;
		--asr-amb-section: radial-gradient(50% 60% at 100% 0%, rgb(var(--asr-amb-petrol) / 0.06), transparent 70%);
		--asr-amb-section-alt: none;
		--asr-amb-card: none;
		--asr-amb-card-alt: none;
		--asr-amb-shell: radial-gradient(80% 50% at 50% -10%, rgb(var(--asr-amb-petrol) / 0.06), transparent 70%);
		--asr-amb-quiz: none;
		--asr-amb-footer: none;
		--asr-amb-noise-opacity: 0;
		--asr-lane-color: rgb(8 8 8 / 0.14);
		--asr-edge-color: rgb(8 8 8 / 0.12);
		--asr-reflector-color: rgb(1 67 89 / 0.45);
		--asr-reflector-lit: rgb(1 67 89 / 1);
	}
}

/* ------------------------------------------------------------------ */
/* 2. Classi di composizione                                           */
/* ------------------------------------------------------------------ */
/* Contenitore che riceve l'ambient: crea il contesto e ospita la grana (sotto il contenuto). */
:is(.asr-site, .asr-scope, .asr-trial) :is(.asr-amb, .asr-ambient),
:is(.asr-site, .asr-scope, .asr-trial):is(.asr-amb, .asr-ambient) {
	position: relative;
	isolation: isolate;
}
:is(.asr-site, .asr-scope, .asr-trial) :is(.asr-amb, .asr-ambient)::after,
:is(.asr-site, .asr-scope, .asr-trial):is(.asr-amb, .asr-ambient)::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	pointer-events: none;
	background: var(--asr-amb-noise) repeat;
	background-size: var(--asr-amb-noise-size) var(--asr-amb-noise-size);
	opacity: var(--asr-amb-noise-opacity);
}

/* Hero (home): cielo + riflesso + vignetta nel fondo; fascio e orizzonte in ::before con una MASCHERA che li tiene
   fuori dalla colonna del testo (sinistra 0–55% da 1024 px, basso su mobile e tablet): così il composito
   dietro al testo resta sotto il tetto #172F37 (verifica numerica in docs/v3-motion.md). Usa ::before e ::after. */
:is(.asr-site, .asr-scope, .asr-trial) :is(.asr-amb--hero, .asr-ambient--hero),
:is(.asr-site, .asr-scope, .asr-trial):is(.asr-amb--hero, .asr-ambient--hero) {
	--asr-amb-noise-opacity: 0.045;
	position: relative;
	isolation: isolate;
	background:
		var(--asr-amb-vignette),
		var(--asr-amb-sky),
		var(--asr-amb-floor),
		var(--asr-hero-bg, #141618);
}
:is(.asr-site, .asr-scope, .asr-trial) :is(.asr-amb--hero, .asr-ambient--hero)::before,
:is(.asr-site, .asr-scope, .asr-trial):is(.asr-amb--hero, .asr-ambient--hero)::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	pointer-events: none;
	background: var(--asr-amb-beam), var(--asr-amb-horizon);
	-webkit-mask-image: var(--asr-amb-hero-mask);
	mask-image: var(--asr-amb-hero-mask);
}
/* Hero compatto (pagine interne, login): niente fascio né orizzonte (pagine di lettura). */
:is(.asr-site, .asr-scope, .asr-trial) :is(.asr-amb--hero-compact, .asr-ambient--hero-compact),
:is(.asr-site, .asr-scope, .asr-trial):is(.asr-amb--hero-compact, .asr-ambient--hero-compact) {
	--asr-amb-noise-opacity: 0.04;
	background:
		var(--asr-amb-vignette),
		var(--asr-amb-sky-soft),
		var(--asr-amb-floor),
		var(--asr-hero-bg, #141618);
}
/* Sezione normale (#090909): glow alto-destra */
:is(.asr-site, .asr-scope, .asr-trial) :is(.asr-amb--section, .asr-ambient--section),
:is(.asr-site, .asr-scope, .asr-trial):is(.asr-amb--section, .asr-ambient--section) {
	background: var(--asr-amb-section), var(--asr-color-bg, #090909);
}
/* Sezione alternata (#141618): glow basso-sinistra */
:is(.asr-site, .asr-scope, .asr-trial) :is(.asr-amb--alt, .asr-ambient--alt),
:is(.asr-site, .asr-scope, .asr-trial):is(.asr-amb--alt, .asr-ambient--alt) {
	background: var(--asr-amb-section-alt), var(--asr-color-surface, #141618);
}
/* Banda CTA petrolio: si scrive solo in bianco (≥ 10.78:1) */
:is(.asr-site, .asr-scope, .asr-trial) :is(.asr-amb--band, .asr-ambient--band),
:is(.asr-site, .asr-scope, .asr-trial):is(.asr-amb--band, .asr-ambient--band) {
	--asr-amb-noise-opacity: 0;
	background:
		var(--asr-pattern-diagonal, none),
		linear-gradient(105deg, #014359 0%, #01384A 55%, #012C3A 100%);
	color: #FFFFFF;
}
/* App shell (area allievi): un glow alto e calmo; fixed solo da 1024 px (iOS lo ignora) */
:is(.asr-site, .asr-scope, .asr-trial) :is(.asr-amb--shell, .asr-ambient--shell),
:is(.asr-site, .asr-scope, .asr-trial):is(.asr-amb--shell, .asr-ambient--shell) {
	--asr-amb-noise-opacity: 0;
	background: var(--asr-amb-shell), var(--asr-color-bg, #090909);
	background-attachment: scroll, scroll;
}
@media (min-width: 1024px) {
	:is(.asr-site, .asr-scope, .asr-trial) :is(.asr-amb--shell, .asr-ambient--shell),
	:is(.asr-site, .asr-scope, .asr-trial):is(.asr-amb--shell, .asr-ambient--shell) { background-attachment: fixed, scroll; }
}
/* Quiz (prova, simulazione): solo sopra barra e domanda; figura e opzioni restano su superficie piena */
:is(.asr-site, .asr-scope, .asr-trial) :is(.asr-amb--quiz, .asr-ambient--quiz),
:is(.asr-site, .asr-scope, .asr-trial):is(.asr-amb--quiz, .asr-ambient--quiz) {
	--asr-amb-noise-opacity: 0;
	background: var(--asr-amb-quiz), var(--asr-color-bg, #090909);
}
/* Footer: riflesso dall'alto a sinistra + mezzeria sopra (usare .asr-lane-divider prima del footer) */
:is(.asr-site, .asr-scope, .asr-trial) :is(.asr-amb--footer, .asr-ambient--footer),
:is(.asr-site, .asr-scope, .asr-trial):is(.asr-amb--footer, .asr-ambient--footer) {
	background: var(--asr-amb-footer), var(--asr-color-bg-deep, #080808);
}
/* Card: lucentezza sopra la superficie, MAI grana (sulle superfici piccole sembra sporco) */
:is(.asr-site, .asr-scope, .asr-trial) :is(.asr-amb-card, .asr-ambient-card) {
	background-image: var(--asr-amb-card);
	background-color: var(--asr-color-surface, #141618);
}
/* Nelle sezioni con glow alto-destra la card prende la lucentezza sul lato opposto (§1.4) */
:is(.asr-site, .asr-scope, .asr-trial) :is(.asr-amb--section, .asr-ambient--section) :is(.asr-amb-card, .asr-ambient-card) {
	background-image: var(--asr-amb-card-alt);
}
/* Prosa: mai sfumature dietro al testo lungo (§1.4): superficie piena */
:is(.asr-site, .asr-scope, .asr-trial) :is(.asr-amb-solid, .asr-ambient-solid) {
	background: var(--asr-color-bg, #090909);
}

/* ------------------------------------------------------------------ */
/* 3. Motivo strada (§1.5)                                             */
/* ------------------------------------------------------------------ */
/* 3.1 Mezzeria tra sezioni: 2 px tratteggiati. <hr class="asr-lane-divider" aria-hidden="true"> */
:is(.asr-site, .asr-scope, .asr-trial) .asr-lane-divider {
	display: block;
	width: 100%;
	height: var(--asr-lane-w);
	margin: 0;
	padding: 0;
	border: 0;
	background: var(--asr-amb-lane);
	background-size: calc(var(--asr-lane-dash) + var(--asr-lane-gap)) 100%;
	background-position: center;
	opacity: 1;
}
:is(.asr-site, .asr-scope, .asr-trial) .asr-lane-divider--contained {
	width: min(100% - 2 * var(--asr-gutter, 16px), var(--asr-container-wide, 1280px));
	margin-inline: auto;
}

/* 3.2 Linea continua di bordo (timeline, elenco capitoli, passi d'esame) con catarifrangenti.
   <ol class="asr-edgeline" data-asr-reflectors> … </ol>  – il filetto sta a sinistra (--asr-edge-x). */
:is(.asr-site, .asr-scope, .asr-trial) .asr-edgeline {
	--asr-edge-x: 0px;
	position: relative;
	isolation: isolate;
}
:is(.asr-site, .asr-scope, .asr-trial) .asr-edgeline::before,
:is(.asr-site, .asr-scope, .asr-trial) .asr-edgeline::after {
	content: "";
	position: absolute;
	top: 0;
	bottom: 0;
	left: var(--asr-edge-x);
	width: 3px;
	z-index: -1;
	pointer-events: none;
}
/* filetto 2 px + catarifrangenti spenti */
:is(.asr-site, .asr-scope, .asr-trial) .asr-edgeline::before {
	background:
		radial-gradient(circle at 1.5px 1.5px, var(--asr-reflector-color) 1.5px, transparent 1.6px) 0 48px / 3px var(--asr-reflector-step) repeat-y,
		linear-gradient(var(--asr-edge-color), var(--asr-edge-color)) 0.5px 0 / 2px 100% no-repeat;
}
/* catarifrangenti accesi: stessa trama, rivelata dall'alto in basso con scaleY (solo transform, M14) */
:is(.asr-site, .asr-scope, .asr-trial) .asr-edgeline::after {
	background: radial-gradient(circle at 1.5px 1.5px, var(--asr-reflector-lit) 1.5px, transparent 1.6px) 0 48px / 3px var(--asr-reflector-step) repeat-y;
	transform-origin: 50% 0;
	transform: scaleY(1);
}
/* Variante orizzontale (passi su desktop): <div class="asr-edgeline asr-edgeline--h"> */
:is(.asr-site, .asr-scope, .asr-trial) .asr-edgeline--h::before,
:is(.asr-site, .asr-scope, .asr-trial) .asr-edgeline--h::after {
	top: var(--asr-edge-y, 0px);
	bottom: auto;
	left: 0;
	right: 0;
	width: auto;
	height: 3px;
}
:is(.asr-site, .asr-scope, .asr-trial) .asr-edgeline--h::before {
	background:
		radial-gradient(circle at 1.5px 1.5px, var(--asr-reflector-color) 1.5px, transparent 1.6px) 48px 0 / var(--asr-reflector-step) 3px repeat-x,
		linear-gradient(var(--asr-edge-color), var(--asr-edge-color)) 0 0.5px / 100% 2px no-repeat;
}
:is(.asr-site, .asr-scope, .asr-trial) .asr-edgeline--h::after {
	background: radial-gradient(circle at 1.5px 1.5px, var(--asr-reflector-lit) 1.5px, transparent 1.6px) 48px 0 / var(--asr-reflector-step) 3px repeat-x;
	transform-origin: 0 50%;
	transform: scaleX(1);
}

/* 3.3 Strada in prospettiva puramente CSS: poster della scena 3D quando mancano WebGL, JS o movimento
   (e fondo per l'hero compatto se non c'è l'illustrazione I6). Piano 3D vero (perspective), nessuna immagine.
   <div class="asr-roadscape" aria-hidden="true">
     <div class="asr-roadscape__road"><span class="asr-roadscape__lane"></span></div>
   </div>
   Punto di fuga a --asr-vp-x / --asr-vp-y (default 68% / 38%, come la scena 3D; 50% / 24% sotto i 768 px). */
:is(.asr-site, .asr-scope, .asr-trial) .asr-roadscape {
	--asr-vp-x: 68%;
	--asr-vp-y: 38%;
	position: absolute;
	inset: 0;
	overflow: hidden;
	pointer-events: none;
	z-index: 0;
	perspective: 420px;
	perspective-origin: var(--asr-vp-x) var(--asr-vp-y);
	background:
		/* lampione lontano: alone */
		radial-gradient(10% 16% at calc(var(--asr-vp-x) + 9%) calc(var(--asr-vp-y) - 12%), rgb(255 255 255 / 0.10), transparent 70%),
		/* orizzonte */
		linear-gradient(180deg, transparent calc(var(--asr-vp-y) - 3%), rgb(var(--asr-amb-line) / 0.14) var(--asr-vp-y), transparent calc(var(--asr-vp-y) + 4%)),
		/* cielo petrolio */
		radial-gradient(70% 60% at 82% 0%, rgb(var(--asr-amb-petrol) / 0.5), transparent 70%),
		/* terreno sotto l'orizzonte, cielo sopra */
		linear-gradient(180deg, #052935 0%, #141618 var(--asr-vp-y), #0B0D0F var(--asr-vp-y), #08090A 100%);
}
:is(.asr-site, .asr-scope, .asr-trial) .asr-roadscape__road {
	position: absolute;
	left: calc(var(--asr-vp-x) - 22%);
	width: 44%;
	bottom: -2%;
	height: 260%;
	transform-origin: 50% 100%;
	transform: rotateX(84deg);
	background:
		/* linee di bordo continue */
		linear-gradient(90deg, transparent 2%, rgb(255 255 255 / 0.32) 2% 3%, transparent 3% 97%, rgb(255 255 255 / 0.32) 97% 98%, transparent 98%),
		/* pozza di luce del lampione sull'asfalto */
		radial-gradient(40% 8% at 70% 70%, rgb(255 255 255 / 0.06), transparent 70%),
		linear-gradient(90deg, transparent 0 1%, #111416 1% 99%, transparent 99%);
	-webkit-mask-image: linear-gradient(to top, #000 35%, transparent 92%);
	mask-image: linear-gradient(to top, #000 35%, transparent 92%);
}
/* mezzeria tratteggiata (4.5 / 7.5, come la segnaletica extraurbana): scorre con M2 (asr-motion.css) */
:is(.asr-site, .asr-scope, .asr-trial) .asr-roadscape__lane {
	position: absolute;
	left: 50%;
	top: 0;
	bottom: 0;
	width: 1.2%;
	margin-left: -0.6%;
	overflow: hidden;
}
:is(.asr-site, .asr-scope, .asr-trial) .asr-roadscape__lane::before {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	top: -120px;
	bottom: 0;
	background: repeating-linear-gradient(180deg, rgb(255 255 255 / 0.5) 0 45px, transparent 45px 120px);
}

/* ------------------------------------------------------------------ */
/* 4. Scena 3D dell'hero: contenitore, poster, scrim (§5)              */
/* ------------------------------------------------------------------ */
/* <div class="asr-scene" data-asr-scene="night-drive" aria-hidden="true">
     <div class="asr-scene__poster"> <img …> oppure <div class="asr-roadscape">…</div> </div>
     <div class="asr-scene__scrim"></div>
   </div> — primo figlio dell'hero (.asr-amb--hero, isolation: isolate). Il canvas lo aggiunge il JS; il poster resta sotto.
   Ordine di caricamento: asr-ambient.css e asr-motion.css DOPO asr-site.css / asr-trial.css / asr-app.css
   (dipendenze WordPress): a parità di specificità vincono le classi ambient. */
:is(.asr-site, .asr-scope, .asr-trial) .asr-scene {
	position: absolute;
	inset: 0;
	z-index: -1; /* sotto il contenuto; la grana (::after) e la scrim v2 restano sopra */
	overflow: hidden;
	pointer-events: none;
	background: var(--asr-hero-bg, #141618);
}
:is(.asr-site, .asr-scope, .asr-trial) .asr-scene__poster,
:is(.asr-site, .asr-scope, .asr-trial) .asr-scene__canvas {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	display: block;
}
:is(.asr-site, .asr-scope, .asr-trial) .asr-scene__poster > img,
:is(.asr-site, .asr-scope, .asr-trial) .asr-scene__poster > picture > img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: 70% 40%;
}
@media (max-width: 767.98px) {
	:is(.asr-site, .asr-scope, .asr-trial) .asr-scene__poster > img,
	:is(.asr-site, .asr-scope, .asr-trial) .asr-scene__poster > picture > img { object-position: 50% 20%; }
	:is(.asr-site, .asr-scope, .asr-trial) .asr-scene .asr-roadscape { --asr-vp-x: 50%; --asr-vp-y: 24%; }
}
:is(.asr-site, .asr-scope, .asr-trial) .asr-scene__canvas {
	opacity: 0;
	z-index: 1;
}
:is(.asr-site, .asr-scope, .asr-trial) .asr-scene.is-scene-ready .asr-scene__canvas { opacity: 1; }
:is(.asr-site, .asr-scope, .asr-trial) .asr-scene.is-scene-ready.is-poster-gone .asr-scene__poster { visibility: hidden; }
:is(.asr-site, .asr-scope, .asr-trial) .asr-scene__scrim {
	position: absolute;
	inset: 0;
	z-index: 2;
	/* scrim obbligatoria (§5.2), poi la trama diagonale v2 (tessera 4×4) */
	background: var(--asr-pattern-diagonal, none) 0 0 / 4px 4px repeat, var(--asr-scene-scrim);
}
@media (min-width: 1024px) {
	:is(.asr-site, .asr-scope, .asr-trial) .asr-scene__scrim { background: var(--asr-pattern-diagonal, none) 0 0 / 4px 4px repeat, var(--asr-scene-scrim-lg); }
}

/* ------------------------------------------------------------------ */
/* 5. Preferenze di sistema                                            */
/* ------------------------------------------------------------------ */
@media (prefers-reduced-transparency: reduce) {
	.asr-site, .asr-scope, .asr-trial { --asr-amb-noise-opacity: 0; --asr-amb-beam: none; }
}
@media (forced-colors: active) {
	.asr-site, .asr-scope, .asr-trial { --asr-amb-noise-opacity: 0; }
	:is(.asr-site, .asr-scope, .asr-trial) :is([class*="asr-amb--"], [class*="asr-ambient--"], .asr-amb-card, .asr-ambient-card),
	:is(.asr-site, .asr-scope, .asr-trial):is([class*="asr-amb--"], [class*="asr-ambient--"]) { background: Canvas !important; forced-color-adjust: auto; }
	:is(.asr-site, .asr-scope, .asr-trial) :is(.asr-amb, .asr-ambient)::after,
	:is(.asr-site, .asr-scope, .asr-trial):is(.asr-amb, .asr-ambient)::after,
	:is(.asr-site, .asr-scope, .asr-trial) .asr-roadscape,
	:is(.asr-site, .asr-scope, .asr-trial) .asr-scene { display: none; }
	:is(.asr-site, .asr-scope, .asr-trial) .asr-lane-divider { background: none; border-top: 1px dashed CanvasText; height: 0; }
	:is(.asr-site, .asr-scope, .asr-trial) .asr-edgeline::before { background: CanvasText; width: 1px; }
	:is(.asr-site, .asr-scope, .asr-trial) .asr-edgeline::after { display: none; }
}
@media print {
	:is(.asr-site, .asr-scope, .asr-trial) :is([class*="asr-amb--"], [class*="asr-ambient--"]) { background: none !important; }
	:is(.asr-site, .asr-scope, .asr-trial) :is(.asr-amb, .asr-ambient)::after,
	:is(.asr-site, .asr-scope, .asr-trial) .asr-scene,
	:is(.asr-site, .asr-scope, .asr-trial) .asr-roadscape { display: none !important; }
}
