/**
 * Comparsa allo scroll.
 *
 * Un elemento marcato `is-reveal` entra salendo di poco e schiarendosi, una
 * volta sola: quando è passato, resta. È l'effetto che nel riferimento porta
 * la classe `reveal`, con i suoi ritardi scalati per far entrare in fila gli
 * elementi vicini.
 *
 * `scripting: enabled` non è un vezzo: la classe che scopre l'elemento la mette
 * il JavaScript, quindi senza JavaScript l'elemento non deve mai essere
 * nascosto in partenza. Il riferimento questa guardia non ce l'ha, e con lo
 * script disattivato la pagina resta per metà vuota.
 */

@media ( scripting: enabled ) {
	.is-reveal {
		opacity: 0;
		transform: translateY( 24px );
		transition: opacity 0.8s ease,
			transform 0.8s cubic-bezier( 0.2, 0.7, 0.2, 1 );
	}

	.is-reveal.is-in {
		opacity: 1;
		transform: none;
	}

	/* I ritardi fanno entrare in successione elementi che stanno affiancati.
	   Sono sul contenuto, non sul contenitore, perché è la fila a scalare. */
	.is-reveal--2 {
		transition-delay: 0.08s;
	}

	.is-reveal--3 {
		transition-delay: 0.16s;
	}

	.is-reveal--4 {
		transition-delay: 0.24s;
	}
}

/* Chi ha chiesto meno animazioni vede la pagina già composta: nessuno
   spostamento, nessuna dissolvenza, nessuna attesa. */
@media ( prefers-reduced-motion: reduce ) {
	.is-reveal,
	.is-reveal.is-in {
		opacity: 1;
		transform: none;
		transition: none;
	}
}

/* --- Scorrimento ------------------------------------------------------- */

/* Lo scorrimento della pagina è addolcito da Lenis, come nel riferimento: la
   libreria sostituisce lo scroll del browser con uno proprio a inerzia, e ogni
   effetto legato alla posizione di scorrimento la eredita. Il modulo che la
   avvia è `assets/js/scorrimento.js`; la libreria è servita dal tema
   (`assets/js/vendor/lenis.js`, versione 1.1.13) e non da un CDN.
 *
 * Queste sono le regole che Lenis chiede, prese da `lenis.css`. La più
 * importante è la seconda: senza, lo scorrimento morbido nativo qui sotto
 * combatterebbe con quello della libreria e il risultato sarebbe addolcito due
 * volte.
 *
 * Lo scorrimento nativo resta come ripiego, e non è un di più: Lenis non parte
 * per chi ha chiesto meno animazioni, né senza JavaScript. */
html.lenis,
html.lenis body {
	height: auto;
}

.lenis.lenis-smooth {
	scroll-behavior: auto !important;
}

.lenis.lenis-smooth [data-lenis-prevent] {
	overscroll-behavior: contain;
}

.lenis.lenis-stopped {
	overflow: hidden;
}

.lenis.lenis-smooth iframe {
	pointer-events: none;
}

@media ( prefers-reduced-motion: no-preference ) {
	html {
		scroll-behavior: smooth;
	}
}

/* `scroll-padding-top` è il complemento: un'ancora nella pagina si ferma sotto
   all'header fisso invece che dietro. L'altezza la pubblica il modulo
   dell'header, quindi resta giusta anche quando l'header si rimpicciolisce. */
html {
	scroll-padding-top: calc( var(--cn-header-height, 88px) + 16px );
}
