/* ==========================================================================
   La Vecchia Pesa — Cassino
   Foglio di stile principale

   I caratteri (Fraunces e Inter) non arrivano più da un @import scritto qui
   sopra: adesso ogni pagina aggancia assets/css/fonts.css con un <link>,
   subito PRIMA di questo foglio. Con l'@import il browser doveva scaricare e
   analizzare tutto style.css per scoprire solo alla fine che gli serviva
   anche fonts.css: due scaricamenti in fila invece che in parallelo, e la
   pagina restava bianca finché non finivano entrambi.
   ATTENZIONE: se una pagina perde quel <link>, resta senza caratteri.

   I caratteri restano scritti dentro fonts.css come data URI e non come file
   .woff2 agganciati da qui: su un documento aperto con doppio clic (file://)
   Chrome considera la pagina di origine "nulla" e rifiuta ogni carattere
   scaricato a parte, perché i font si chiedono sempre in modalità CORS. Con i
   .woff2 esterni la tipografia sparirebbe proprio nell'uso — la demo aperta
   dal disco — che il progetto deve garantire. I file veri stanno comunque in
   assets/fonts/ (identici byte per byte a quelli incorporati) e servono da
   sorgente se un giorno il sito girerà solo da server.
   ========================================================================== */

:root {
  /* ------------------------------------------------ carta e inchiostro -- */
  --carta:        #faf6ef;
  --carta-calda:  #f4ece0;
  --carta-scura:  #ebe0d1;
  --inchiostro:   #241811;
  --inchiostro-2: #3d2c22;
  --grigio:       #6f6154;
  --grigio-chiaro:#7d6e5f;   /* scurito: prima non passava il contrasto minimo */

  /* ------------------------------------------------ i colori del locale -- */
  --bosco:        #1d3b33;   /* il legno verde della struttura */
  --bosco-scuro:  #142822;
  /* Il petrolio è sceso di un soffio (era #1f7a72). Su carta calda — che è il
     fondo delle recensioni, della legenda allergeni e della striscia della
     mappa — si fermava a 4,39:1, e gli occhielli in corsivo che stanno proprio
     lì non arrivavano al minimo leggibile. Adesso fa 4,69:1 su carta calda e
     5,10:1 su carta, e anche il bianco sopra la pastiglia verde ci guadagna
     (da 5,14 a 5,49). A occhio è lo stesso verde di prima. */
  --petrolio:     #1e756e;   /* accento, dalle icone del menu */
  /* le tre componenti separate servono dove la tinta va velata — non si può
     ricavare un'opacità da un esadecimale */
  --petrolio-rgb: 30 117 110;
  --petrolio-alto:#2b9c92;   /* solo veli e sfumature: su carta fa 3,11:1, mai un testo */
  --terracotta:   #a94f22;   /* scurito: i prezzi ora superano il contrasto AA */
  /* la terracotta viva (#c4622d) vive soltanto come terna, perché serve sempre
     trasparente: rgb(var(--terracotta-vivo-rgb) / .08) */
  --terracotta-vivo-rgb: 196 98 45;
  /* l'ottone delle stelle era #b0873f e sul fondo delle recensioni si fermava a
     2,81:1, sotto il 3:1 che serve a un segno grafico che porta un'informazione */
  --ottone:       #a67c37;
  /* L'oro caldo delle parole accentate sulle campiture scure: la parola in
     corsivo dentro il titolo dell'apertura, quella dentro il richiamo finale,
     e l'orario sotto le quattro anime. Era scritto a mano in tre punti, più
     una quarta volta come terna per la sua velatura. Su --bosco-scuro fa
     10,9:1 e su --bosco 8,6:1: è un colore da testo, e va tenuto tale. */
  --oro-caldo:     #f0d9a8;
  --oro-caldo-rgb: 240 217 168;

  /* -------------------------------------------------- linee e ombre ----- */
  /* Due pesi soli, e uno per verso. Su fondo chiaro: --linea separa (bordi di
     schede, filetti fra le righe di una tabella), --linea-forte delimita un
     comando e deve arrivare a 3:1 sul fondo per potersi vedere.
     Su fondo scuro serve la coppia speculare: erano scritte a mano otto
     velature di carta diverse — .13, .16, .2, .22, .3, .35, .4, .45 — e otto
     valori per due mestieri vuol dire che nessuno dei due si riconosce.
     --linea-scura-forte su inchiostro fa 3,61:1, cioè passa il minimo che
     serve al bordo di un comando; --linea-scura resta sotto ed è giusto,
     perché non porta informazione: divide e basta.

     L'alfa di --linea-forte era .26, e la regola scritta qui sopra non la
     rispettava: .26 su carta fa 1,75:1, cioè un quinto della strada. Era
     l'unico contorno del bottone vuoto, del tasto della giostra, del campo di
     ricerca, delle pastiglie dei filtri e — caso peggiore — dei sei campi del
     modulo, che stanno su carta dentro un riquadro bianco e senza il loro
     bordo non si vede nemmeno dove cominciano. .47 è l'alfa minima che arriva
     a 3,00:1 su --carta e 3,04:1 su --carta-calda: non è un numero scelto a
     occhio, è quello che chiude il conto.
     Attenzione a non usarla per decorare: a .47 un filetto puntinato o un
     trattino separatore diventano un bordo vero e si mettono a gridare. Quei
     due usi sono passati a --linea, che è la variabile che «separa e basta». */
  --linea:        rgba(36, 24, 17, .14);
  --linea-forte:  rgba(36, 24, 17, .47);
  --linea-scura:       rgba(250, 246, 239, .16);  /* separa, sul fondo bosco o inchiostro */
  --linea-scura-forte: rgba(250, 246, 239, .4);   /* delimita un comando: 3,61:1 su inchiostro */

  /* Tre strati e non due: un'ombra di contatto stretta e appena scura, una
     media che stacca dal fondo, una larghissima e quasi invisibile che fa da
     alone. È il modo in cui cade la luce vera, e la differenza fra un elemento
     che sembra appoggiato e uno che sembra incollato sta tutta lì.
     Sono tutte del bruno dell'inchiostro e mai di un grigio neutro: su carta
     calda un'ombra grigia vira all'azzurro e sporca il fondo.
     Regola d'uso: --ombra-s per ciò che è appoggiato, --ombra-m per ciò che si
     solleva al passaggio, --ombra-l solo per le due foto grandi dell'apertura e
     per il riquadro del consenso mappa. Mai più di tre livelli d'ombra visibili
     nella stessa schermata. */
  --ombra-s: 0 1px 1px rgba(36,24,17,.05), 0 2px 6px rgba(36,24,17,.05);
  --ombra-m: 0 1px 2px rgba(36,24,17,.06), 0 6px 16px rgba(36,24,17,.07), 0 16px 40px rgba(36,24,17,.05);
  --ombra-l: 0 2px 4px rgba(36,24,17,.07), 0 12px 28px rgba(36,24,17,.09), 0 32px 72px rgba(36,24,17,.10);
  /* alone del fuoco sui campi: era scritto tre volte a mano, con tre opacità
     leggermente diverse, e bastava ritoccarne una perché non fossero più
     uguali. Da questa passata è una rifinitura e non il segnale: il contorno
     di fuoco vero è tornato a essere l'outline di :focus-visible, che è
     l'unica cosa che sopravvive alla modalità a contrasto forzato di Windows. */
  --ombra-fuoco: 0 0 0 3px rgb(var(--petrolio-rgb) / .14);

  /* Tre disegni ricorrenti che erano scritti a mano in più punti con alfe
     leggermente diverse fra loro: un centesimo di differenza che nessuno ha
     deciso e che nessuno vede, ma sono due o tre numeri da tenere allineati
     invece di uno.
     --ombra-barra stacca una barra appiccicata in cima (testata e barra del
     menù); --rilievo-bollo è il filo di luce più l'ombra di contatto che
     trasformano i tondi colorati degli allergeni da adesivi piatti in bolli
     stampati, e devono essere identici nei tre punti in cui compaiono;
     --filo-luce è lo spigolo illuminato sul bordo alto di una campitura
     scura. */
  --ombra-barra:   0 10px 30px rgba(36, 24, 17, .07);
  --rilievo-bollo: inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(36, 24, 17, .15);
  --filo-luce:     inset 0 1px 0 rgba(250, 246, 239, .08);

  /* ------------------------------------------------------------ raggi --- */
  /* Erano 3, 4, 5 e 6 pixel scelti uno per volta: quattro misure che nessuno
     saprebbe distinguere una per una, ma che messe vicine fanno sembrare il
     disegno tirato via. Quattro passi soli, e una regola per sceglierli: le
     fotografie grandi tengono il raggio più piccolo (su una foto un angolo
     molto tondo sembra il riquadro di un widget), le schede e i campi quello
     medio, i riquadri grandi quello largo, le pastiglie restano pastiglie. */
  --r-xs:   4px;
  --r-s:    8px;
  --r-m:    14px;
  --r-pill: 100px;

  /* ------------------------------------------------------------ icone --- */
  /* Erano quattordici misure scelte una per volta — 12, 14, 15, 16, 17, 18,
     19, 20, 21, 22, 24, 26, 30, 46 — e nove di quelle stavano dentro una
     fascia di dieci pixel. Nessuno le distingue guardandole una per una, ma
     messe in pagina fanno lo stesso effetto che le altre scale sono state
     introdotte per evitare: il riquadro d'avviso della legenda con l'icona a
     21 accanto alla nota del modulo con la sua a 18, lo stesso riquadro della
     mappa a 30 in una pagina e a 24 in un'altra, il telefono della testata a
     16 accanto al bottone che gli sta di fianco a 17.
     Sei passi, e nessuna misura fuori da qui. --i-xs è l'unico davvero più
     piccolo e riguarda un elemento solo: il pallino dell'allergene, che è un
     tondo da ventun pixel e non ne può contenere di più. */
  --i-xs:  12px;
  --i-s:   15px;
  --i-m:   18px;
  --i-l:   22px;
  --i-xl:  30px;
  --i-2xl: 46px;

  /* ------------------------------------------------------- tipografia --- */
  --serif: 'Fraunces', 'Iowan Old Style', Georgia, 'Times New Roman', serif;
  --sans:  'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;

  /* Una scala sola, fluida fra i 360 e i 1200 pixel di finestra: sotto resta
     al minimo, sopra al massimo. Prima ogni titolo aveva il suo clamp scritto a
     mano (4rem, 2,9, 2,6, 2,1, 1,95, 1,24…) e due titoli dello stesso livello
     su due pagine diverse non erano della stessa misura.

     Il rapporto fra un passo e l'altro è ~1,22 al minimo e ~1,30 al massimo:
     su uno schermo stretto la scala si comprime, su uno largo si apre, ed è
     giusto così — è la stessa cosa che fa un impaginatore quando passa dalla
     colonna di un quotidiano alla pagina di un libro d'arte.
     Tre passi erano fuori squadra e si vedeva: a 360px --f-3xl e --f-4xl
     stavano a 1,13 l'uno dall'altro, cioè un titolo di sezione e un titolo di
     blocco erano praticamente della stessa misura, e la gerarchia spariva
     proprio dove lo schermo è più stretto e serve di più.

     I quattro gradini più piccoli non appartengono alla scala del testo
     corrente: sono le etichettine in maiuscolo spaziato, che si leggono più
     grandi di quanto misurano e per questo vanno più piccole di quanto sembri.
     --f-5xl è il gradino da insegna, l'unico dichiaratamente fuori scala, e lo
     è solo da un lato: al minimo sta al passo precedente come 1,25, cioè
     dentro la scala, e al massimo si apre a 1,72. È voluto e riguarda un
     elemento solo in tutto il sito, il titolo dell'apertura, che occupa una
     schermata intera e quel salto se lo può permettere. Un corpo da insegna
     rompe sempre la progressione del testo: è il motivo per cui le fonderie
     disegnano un taglio "display" a parte. Va bene finché è uno solo, riguarda
     una riga sola, e sta scritto. */
  --f-3xs: .64rem;
  --f-2xs: .72rem;
  --f-xs:  .78rem;
  --f-s:   .86rem;
  --f-m:   .95rem;
  --f-l:   clamp(1.02rem, .96rem + .28vw,  1.16rem);
  --f-xl:  clamp(1.24rem, 1.12rem + .55vw, 1.5rem);
  --f-2xl: clamp(1.5rem,  1.28rem + 1vw,   1.95rem);
  --f-3xl: clamp(1.78rem, 1.47rem + 1.37vw, 2.5rem);
  --f-4xl: clamp(2.2rem,  1.75rem + 2vw,    3.25rem);
  --f-5xl: clamp(2.75rem, 1.53rem + 5.43vw, 5.6rem);

  /* L'interlinea non è un numero solo per tutto: cala mentre il corpo cresce.
     A novanta pixel due righe a 1,3 si allontanano e il titolo si sfalda; a
     diciassette righe a 1,06 si toccherebbero. Sei valori, uno per fascia di
     corpo, e nessuno più scritto a mano: nel foglio ce n'era una quindicina di
     diversi — 1,25 · 1,35 · 1,4 · 1,5 · 1,55 · 1,6 · 1,62 · 1,68 · 1,7 · 1,72 —
     per dire le stesse quattro cose.
     Regola della crenatura, che va di pari passo: negativa solo sopra i 24
     pixel (le lettere grandi lasciate alla spaziatura di serie sembrano
     sparpagliate), nulla sotto — stringere un testo piccolo si legge come un
     difetto di stampa, non come una scelta. */
  --lh-display:  .96;   /* --f-5xl */
  --lh-titolo:   1.06;  /* --f-4xl, --f-3xl */
  --lh-titolo-m: 1.15;  /* --f-2xl, --f-xl */
  --lh-titolo-s: 1.26;  /* titoli in corpo testo: --f-l e sotto */
  --lh-testo:    1.66;  /* testo che si legge per intero */
  --lh-fitto:    1.55;  /* note, didascalie, descrizioni brevi */

  /* ---------------------------------------------------- ritmo verticale -- */
  /* Gli spazi erano una cinquantina di numeri diversi decisi uno per volta, e
     si vedeva: due blocchi che dovevano stare alla stessa distanza non ci
     stavano mai. Otto passi, gli ultimi due fluidi perché sono quelli che
     separano le sezioni e devono stringersi sul telefono.
     Il rapporto fra un passo e l'altro sta fra 1,4 e 1,7. L'ultimo faceva
     eccezione: da 4,5 a 9rem è esattamente il doppio, e su uno schermo largo
     voleva dire centoquarantaquattro pixel di riempimento per ogni bordo di
     ogni sezione. È quello il numero che produceva i vuoti segnalati dal
     cliente: due sezioni di fila ne sommano due, e fra l'ultima riga di una e
     il primo titolo dell'altra si arrivava a duecentottantotto pixel di
     niente — mentre nessuno dei due valori, preso da solo, sembrava sbagliato.
     A 7rem il gradino rientra nella scala (1,56) e ogni coppia di sezioni
     recupera sessantaquattro pixel: la pagina resta ariosa e smette di avere
     buchi. */
  --sp-1: .35rem;
  --sp-2: .6rem;
  --sp-3: .9rem;
  --sp-4: 1.4rem;
  --sp-5: 2.2rem;
  --sp-6: 3.2rem;
  --sp-7: clamp(3rem, 6vw, 4.5rem);
  --sp-8: clamp(4.2rem, 8vw, 7rem);

  /* ---------------------------------------------------- misure di pagina - */
  --mx: clamp(1.15rem, 5vw, 4.5rem);   /* margine orizzontale pagina */
  --max: 1360px;

  /* L'altezza della testata la detta il logo, e nient'altro: tenerne qui la
     misura è l'unico modo perché --h-testata resti vera invece di essere un
     numero tondo scritto a mano (era 70px, ma la testata compatta ne misura da
     71 a 86 a seconda della larghezza dello schermo, e copriva la barra del
     menù che ci si incolla sotto).
     Da questa passata il logo compatto si rimpicciolisce con una scala e non
     più con la larghezza: la larghezza è una misura di impaginazione e
     animarla obbligava il browser a rifare i conti del layout a ogni
     fotogramma, per giunta proprio mentre si scorre. Una scala non tocca
     l'impaginazione — quindi la scatola del logo resta grande --logo-l anche
     nella testata compatta, ed è su --logo-l che va calcolata l'altezza. */
  --logo-l: clamp(126px, 14vw, 168px); /* misura del logo in pagina, sempre */
  --logo-scala-c: .81;                 /* di quanto rimpicciolisce da compatto */
  --h-testata: calc(var(--logo-l) * 0.4904 + 1.2rem);  /* 0,6rem × 2 di padding + logo × 409/834 */
  --h-barra-mob: 68px;                 /* barra fissa in fondo, sotto i 940px */

  /* Rete di sicurezza per i pallini degli allergeni: il colore lo scrive
     menu.js allergene per allergene, ma se per qualsiasi motivo non arrivasse,
     un'icona bianca su fondo trasparente sparirebbe. Con 113 piatti e 14
     allergeni è l'informazione più delicata del sito. */
  --ac: var(--grigio);

  /* Durate e curve stanno separate, e non più impastate in una variabile sola
     (era «--t-veloce: .22s cubic-bezier(…)»): impastate obbligavano a
     scegliere la curva scegliendo la durata, e infatti in giro per il foglio
     erano spuntate sette cubic-bezier scritte a mano, tutte leggermente
     diverse fra loro. Cinque durate e cinque curve: fuori di qui non se ne
     usano altre, così il sito si muove sempre allo stesso modo.

     Le tre durate del passo normale: --t-veloce per ciò che cambia colore,
     --t-medio per ciò che si sposta, --t-lento per le comparse e per le foto
     che si avvicinano.

     Le altre due sono casi dichiarati, non eccezioni dimenticate in giro per
     il foglio (dove infatti erano: un .62s scritto quattro volte a mano e un
     .18s). --t-apertura è il tempo del pannello a tutto schermo: un gesto che
     copre la finestra intera merita una durata sua, purché sia scritta una
     volta. --t-barra è il passo con cui si riempie il filo del tempo della
     giostra: deve stare sotto l'intervallo con cui sito.js lo riscrive, se no
     la barra insegue il valore invece di seguirlo. */
  --t-veloce:   .22s;
  --t-medio:    .45s;
  --t-lento:    .9s;
  --t-apertura: .62s;
  --t-barra:    .18s;

  /* Un solo passo per tutte le scalette del sito: gli elementi di un gruppo
     entrano uno dopo l'altro sempre alla stessa cadenza. Erano due — 60ms per
     le voci del menù a tutto schermo, 90ms per le comparse in scorrimento —
     più un terzo valore isolato di 400ms per il bottone «Chiama», cioè tre
     ritmi diversi per lo stesso identico gesto. */
  --passo-scaletta: .09s;

  /* Le cinque curve. La differenza fra un'animazione che sembra fatta bene e
     una che sembra un modello scaricato sta quasi tutta qui: niente parte e
     si ferma di colpo, e niente rimbalza. */
  --e-standard: cubic-bezier(.4, 0, .2, 1);     /* stati: colore, bordo, fondo */
  --e-morbida:  cubic-bezier(.22, .61, .36, 1); /* micro-movimenti al passaggio */
  --e-esce:     cubic-bezier(.16, 1, .3, 1);    /* comparse: parte decisa, si posa piano */
  --e-entra:    cubic-bezier(.32, 0, .67, 0);   /* uscite: parte piano, accelera e sparisce */
  --e-scatto:   cubic-bezier(.76, 0, .24, 1);   /* aperture a tutto schermo */
}

/* La zona sicura in cima entra dentro --h-testata e non solo nel riempimento
   della testata, ed è il punto: da --h-testata dipendono il `top` della barra
   sticky del menù e tutti gli scroll-margin delle ancore. Senza, il sito
   aggiunto alla schermata Home di un iPhone con la tacca (site.webmanifest
   dichiara "display": "standalone") si apre con marchio, hamburger e bordo
   alto della barra dei filtri nascosti sotto la barra di stato: lì
   env(safe-area-inset-top) vale da 47 a 59 pixel.
   In @supports e non scritta dentro :root perché una custom property che
   contiene un env() sconosciuto non diventa "quasi giusta": diventa invalida
   al momento del calcolo, e con lei sparirebbero l'aggancio della barra e
   tutti gli scroll-margin. Con la doppia dichiarazione i browser che
   conoscono env() usano la seconda, gli altri restano sulla prima. */
@supports (top: env(safe-area-inset-top)) {
  :root { --h-testata: calc(var(--logo-l) * 0.4904 + 1.2rem + env(safe-area-inset-top, 0px)); }
}

/* --------------------------------------------------------------- reset -- */
*, *::before, *::after { box-sizing: border-box; }
/* Senza queste due righe, girando il telefono in orizzontale Safari ingrandisce
   di sua iniziativa i blocchi di testo lunghi e manda fuori misura tutto il
   resto. La forma senza prefisso serve ai browser che hanno smesso di
   rispondere a quella -webkit-. */
html {
  -webkit-text-size-adjust: 100%;
          text-size-adjust: 100%;
  scroll-behavior: smooth;
}
/* ---------------------------------------------------------------------------
   NOTA — «prefers-reduced-motion» NON viene ascoltata, ed e' voluto.

   Qui c'erano tre blocchi @media che ascoltavano la preferenza di sistema
   «riduci movimento» e spegnevano l'avvicinamento della foto dell'hero, lo
   scorrimento morbido e tutte le comparse. Sono stati tolti su decisione dello
   studio: le animazioni di questo sito restano attive per tutti, anche per chi
   ha «Riduci movimento» acceso nelle impostazioni del sistema.
   Il motivo pratico: quella preferenza su Windows la tengono accesa in molti
   per abitudine o perche' l'ha messa qualcun altro, e il risultato era un sito
   completamente fermo — nessuna comparsa, nessun filo di avanzamento, la
   giostra delle recensioni immobile — su macchine dove tutto il resto funziona.
   Lo stesso interruttore e' stato neutralizzato anche lato JavaScript, in
   assets/js/sito.js (cercare «menoMovimento») e in assets/js/menu.js.
   Se un domani si volesse tornare a rispettarla, i punti da toccare sono
   quei due piu' questo commento: non ce ne sono altri.
   --------------------------------------------------------------------------- */

body {
  margin: 0;
  background: var(--carta);
  color: var(--inchiostro);
  font-family: var(--sans);
  font-size: 17px;
  line-height: var(--lh-testo);
  font-weight: 350;
  -webkit-font-smoothing: antialiased;
  /* non spostare su html: romperebbe la .menu-barra sticky, che si aggancia al
     viewport solo perché il body propaga il proprio overflow */
  overflow-x: hidden;
}

/* Blocco dello scorrimento con un solo padrone: lo accende e lo spegne
   sito.js tenendo un registro di chi lo sta chiedendo (menù e lightbox se lo
   contendevano, e chi chiudeva per ultimo sbloccava anche per l'altro). */
body.blocca-scroll { overflow: hidden; }

img, svg, video { display: block; max-width: 100%; }
img { height: auto; }
a { color: inherit; }
button, input, textarea, select { font: inherit; color: inherit; }

/* Su iOS un tocco lascia acceso l'ultimo :hover e disegna sopra il bersaglio
   un rettangolo grigio di sistema: meglio una velatura nostra, appena
   percettibile. touch-action: manipulation toglie l'attesa del doppio tocco
   per ingrandire, che su alcuni browser ritarda ancora il clic. */
button, a, summary {
  -webkit-tap-highlight-color: rgba(36, 24, 17, .07);
  touch-action: manipulation;
}
/* sui comandi la selezione del testo si attiva per sbaglio tenendo premuto */
button, .btn, .chip, .all-chip, .hamburger { -webkit-user-select: none; user-select: none; }

h1, h2, h3, h4 {
  font-family: var(--serif);
  font-weight: 500;
  line-height: var(--lh-titolo);
  letter-spacing: -.018em;
  margin: 0;
  /* Fraunces è un carattere variabile e in questo sito ha due assi veri: opsz
     (9→144) e wght. L'asse ottico non si tocca a mano: font-optical-sizing sta
     su "auto" per impostazione predefinita e il browser lo lega al corpo, che è
     esattamente quello che serve — un titolo da 54 pixel prende il disegno da
     titolo, con le grazie affilate, e un h3 da 17 quello da testo.
     ATTENZIONE: 'SOFT' e 'WONK' sono gli assi della Fraunces completa, ma il
     file incorporato in fonts.css non li contiene (dentro ci sono soltanto opsz
     e wght). Queste due righe oggi non fanno nulla: restano perché non costano
     niente e tornerebbero a funzionare da sole se un giorno arrivasse il file
     intero. Il carattere del sito, quello che si vede davvero, è l'asse
     ottico qui sopra. */
  font-optical-sizing: auto;
  font-variation-settings: 'SOFT' 0, 'WONK' 1;
  /* a 360px una parola lunga in corpo 46px è più larga della colonna:
     senza questa riga sfonderebbe il bordo destro */
  overflow-wrap: break-word;
  /* Su un telefono un titolo va a capo tre o quattro volte e l'ultima riga
     resta con una parola sola appesa. balance distribuisce le righe in modo
     che siano lunghe uguali; i browser che non lo conoscono ignorano la riga e
     vanno a capo come prima. */
  text-wrap: balance;
}
/* L'interlinea da titolo e la crenatura stretta sono giuste per un corpo da 40
   pixel in su, dove le righe sono lunghe e le lettere grandi. Su un h3 da 17
   due righe si toccherebbero e le lettere si impaccherebbero: i titoli piccoli
   vogliono aria. Qui la crenatura torna a zero — sotto i 24 pixel stringere le
   lettere si legge come un difetto di stampa, non come una scelta. */
h3, h4 { line-height: var(--lh-titolo-s); letter-spacing: 0; }

/* L'ultima riga di un paragrafo con una parola sola è la cosa che più fa
   sembrare "non impaginato" un testo. pretty la evita spostando indietro
   qualche parola; dove non è conosciuto, il testo va a capo come prima. */
p, li { text-wrap: pretty; }

/* Nota che vale per tutto il foglio, e che spiega i «margin-block: 0» sparsi
   nei blocchi di testo qui sotto. Il foglio dell'utente-agente dà a ogni
   paragrafo un margine di 1em sopra e sotto. Dentro i blocchi impaginati quel
   margine non si sommava ai valori scritti qui — si fondeva con loro per
   collasso — e vinceva il più grande dei due: metà delle distanze che si
   leggono nel foglio non erano quelle che si vedevano a schermo
   (`.cta h2 { margin-bottom: 1rem }` era già inerte, perché il paragrafo sotto
   ne portava 1,0625 di suo). Dove un blocco detta il proprio ritmo, il
   paragrafo rinuncia al margine e la distanza è scritta una volta sola. */

::selection { background: var(--petrolio); color: #fff; }

:focus-visible {
  outline: 2px solid var(--petrolio);
  outline-offset: 3px;
  border-radius: var(--r-xs);
}
/* Sulle campiture scure il petrolio non arriva al 3:1 che serve perché un
   contorno di fuoco si veda: su --inchiostro fa 3,15:1 (di misura, ma è il
   valore migliore: sulla sfumatura più chiara della fascia informazioni
   scende a 2,42:1) e sul verde --bosco 2,22:1. Lì passa al bianco caldo.
   La .fascia-info era l'unica campitura d'inchiostro esclusa dall'elenco, e
   contiene un collegamento telefonico su quattro pagine: lo stesso numero,
   nella stessa pagina, aveva due contorni di fuoco diversi a seconda che
   stesse nella fascia o nel piè di pagina. */
.cta :focus-visible,
.hero :focus-visible,
.pie :focus-visible,
.fascia-info :focus-visible,
.lightbox :focus-visible,
.testata--su-scuro:not(.compatta) :focus-visible { outline-color: var(--carta); }

/* texture carta appena percettibile */
body::before {
  content: '';
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  opacity: .5;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3CfeColorMatrix values='0 0 0 0 .18 0 0 0 0 .12 0 0 0 0 .07 0 0 0 .055 0'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)'/%3E%3C/svg%3E");
}
body > * { position: relative; z-index: 1; }

/* ------------------------------------------------------------ utility -- */
/* .wrap e .wrap-largo hanno la stessa specificità: prima vinceva il secondo
   solo perché scritto dopo. Con una variabile non c'è più nulla da vincere. */
.wrap { width: 100%; max-width: var(--larghezza, var(--max)); margin-inline: auto; padding-inline: var(--mx); }
.wrap-largo { --larghezza: 1620px; }

/* Sugli iPhone in orizzontale la tacca mangia un pezzo del bordo sinistro (o
   destro, secondo il verso in cui si tiene il telefono): il margine di pagina
   non scende mai sotto la zona sicura. In @supports perché sui browser che non
   conoscono env() la dichiarazione intera sarebbe da buttare, e resterebbero
   senza margine laterale. */
@supports (padding: max(0px)) {
  .wrap {
    padding-inline:
      max(var(--mx), env(safe-area-inset-left))
      max(var(--mx), env(safe-area-inset-right));
  }
}

/* La testata è fissa: senza questo, ogni ancora interna (#quattro-anime, il
   salto al contenuto, le sezioni del menù) atterra sotto la testata e la prima
   riga del titolo resta nascosta. Vale per qualunque elemento con un id:
   costa nulla e non se ne dimentica nessuno. */
[id] { scroll-margin-top: calc(var(--h-testata) + 1rem); }

.sezione { padding-block: var(--sp-8); }
/* Due sezioni di fila non devono mai sommare due riempimenti pieni: dove il
   contenuto è basso — la nota allergeni del menù, le quattro schede "come
   arrivare" — nascevano fasce da quasi trecento pixel di nulla fra un blocco e
   il successivo. È il vuoto sproporzionato segnalato dal cliente, e la cura è
   strutturale: la sezione bassa dichiara di esserlo. */
.sezione--stretta { padding-block: var(--sp-7); }

/* L'altra metà della stessa cura, e questa non ha bisogno che nessuno la
   dichiari in pagina. Le fasce con un fondo proprio — le recensioni e la
   legenda su carta calda, il richiamo finale sul verde bosco — arrivano sempre
   dopo una sezione che ha già speso tutto il suo riempimento inferiore: due
   riempimenti pieni di fila e in mezzo non c'è niente da guardare. Ma una
   fascia colorata non ha bisogno di spazio per staccarsi da ciò che sta sopra,
   perché a staccarla ci pensa il colore: le basta il passo corto, sopra e
   sotto, e sono altri ottanta pixel di nulla in meno per ogni fascia. Sommati
   al gradino rientrato nella scala, sulla home fanno più di cinquecento pixel
   di vuoto in meno fra l'apertura e il piè di pagina, senza che nessuna
   sezione diventi stretta: il riempimento pieno resta di centododici pixel per
   lato, che su uno schermo grande è tanto quanto basta.
   Il riempimento resta simmetrico perché il contenuto di queste fasce è
   centrato dentro una campitura piena, e lì un'asimmetria si vede subito. */
.sezione + .sezione.recensioni,
.sezione + .sezione.legenda,
.sezione + .sezione.cta { padding-block: var(--sp-7); }

/* E la stessa conclusione vale, identica, per due sezioni CHIARE di fila, che
   di stacco ne hanno ancora meno: lì non c'è nemmeno il cambio di fondo a
   giustificare il vuoto. Sommavano due --sp-8 pieni, cioè 153 pixel a 958 di
   finestra e 224 a 1440, mentre nella stessa home si leggevano 184 pixel
   verso le fasce colorate e 144 prima della striscia della mappa: una
   variazione del 56% sullo stesso ritmo, e i due valori più larghi proprio
   dove non succedeva niente. Con questa riga la pagina batte 184 ovunque.
   0-2-0: non tocca le tre regole qui sopra, che restano 0-3-0 e vincono. */
.sezione + .sezione { padding-top: var(--sp-7); }

/* Serve solo a chiudere il campo d'azione dello sticky della barra del menù,
   che altrimenti arriva fino a </main> e resta incollato anche sopra la
   legenda, le note e la mappa. Nessuno stile: è un recinto. */
.menu-zona { position: relative; }

.sr-only {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
/* il salto al contenuto deve diventare visibile quando riceve il fuoco,
   altrimenti resta un quadratino da un pixel e non serve a nessuno */
a.sr-only:focus {
  position: fixed; top: .8rem; left: .8rem; z-index: 300;
  /* con il telefono in orizzontale la tacca copre l'angolo in alto a sinistra,
     che è esattamente dove compare il salto al contenuto */
  top: max(.8rem, env(safe-area-inset-top));
  left: max(.8rem, env(safe-area-inset-left));
  width: auto; height: auto; margin: 0; clip: auto; overflow: visible;
  padding: .8rem 1.4rem; border-radius: var(--r-pill);
  background: var(--inchiostro); color: var(--carta);
  font-size: var(--f-m); font-weight: 550; text-decoration: none;
  box-shadow: var(--ombra-m);
}

/* Etichetta di sezione: corsivo con grazie invece del maiuscolo spaziato,
   che è ormai il segno di riconoscimento dei siti fatti col medesimo stampo. */
.occhiello {
  display: block;
  font-family: var(--serif); font-style: italic; font-weight: 400;
  font-size: var(--f-l); letter-spacing: 0; text-transform: none;
  color: var(--petrolio); margin: 0 0 var(--sp-2);
  font-variation-settings: 'SOFT' 40, 'WONK' 1;
}

.titolo-sez {
  font-size: var(--f-4xl);
  /* venti battute per riga: un titolo che va a capo due o tre volte si legge
     come un titolo, uno che ne fa una sola lunghissima si legge come una frase */
  max-width: 20ch;
  margin-bottom: var(--sp-4);
}
/* Sessantadue battute per riga, capoverso compreso: sotto le cinquanta l'occhio
   torna a capo troppo spesso, sopra le settantacinque perde il rigo. Sono
   diciotto pixel di corpo su una riga da circa 560, che è la misura di un buon
   libro. */
.testo-guida {
  font-size: var(--f-l);
  color: var(--grigio);
  max-width: 62ch;
  margin-block: 0;   /* la distanza la mette il blocco, non il paragrafo */
  /* un filo più larga dell'interlinea del corpo: questo testo è più grande e
     la riga è lunga, e a parità di interlinea l'occhio fatica a tornare */
  line-height: calc(var(--lh-testo) + .06);
}

.riga-pesa { display: flex; align-items: center; gap: 1rem; color: var(--linea-forte); }
/* I due filetti non partono pieni dal bordo della pagina: nascono dal nulla e
   si addensano avvicinandosi al marchio. È un dettaglio di mezzo secondo, ma è
   la differenza fra un separatore disegnato e due trattini messi lì — e nel
   verso giusto accompagna l'occhio verso il segno invece di incorniciarlo. */
.riga-pesa::before, .riga-pesa::after {
  content: ''; height: 1px; flex: 1;
  background: linear-gradient(90deg, transparent, currentColor);
}
.riga-pesa::after { background: linear-gradient(90deg, currentColor, transparent); }
/* dentro l'unica .riga-pesa del sito (ambiente.html) non c'è nessun <svg>, ma
   uno <span class="logo-img logo-mark">: la regola sugli svg era codice morto */
.riga-pesa .logo-mark { width: 74px; opacity: .55; flex: none; color: var(--bosco); }

/* -------------------------------------------------------------- bottoni -- */
.btn {
  --bg: var(--inchiostro); --fg: var(--carta);
  display: inline-flex; align-items: center; justify-content: center; gap: .65rem;
  padding: .95rem 1.75rem;
  background: var(--bg); color: var(--fg);
  border: 1px solid var(--bg); border-radius: var(--r-pill);
  font-size: var(--f-s); font-weight: 550; letter-spacing: .08em; text-transform: uppercase;
  /* Una riga sola quasi sempre, ma «Sfoglia il menù della pizzeria» sotto i
     620px va a capo dentro la pastiglia: senza un'interlinea dichiarata
     eredita quella del corpo (1,66) e le due righe si allontanano tanto che il
     bottone sembra due bottoni. */
  line-height: var(--lh-titolo-s);
  text-decoration: none; cursor: pointer;
  /* il movimento dura più del colore: è la regola di tutto il sito, e serve a
     far sembrare il sollevamento una cosa che pesa, non un interruttore */
  transition: transform var(--t-medio) var(--e-morbida),
              box-shadow var(--t-medio) var(--e-morbida),
              background var(--t-veloce) var(--e-standard),
              color var(--t-veloce) var(--e-standard),
              border-color var(--t-veloce) var(--e-standard);
  position: relative; overflow: hidden;
}
.btn svg { width: var(--i-m); height: var(--i-m); flex: none; transition: transform var(--t-medio) var(--e-morbida); }
@media (hover: hover) and (pointer: fine) {
  .btn:hover { transform: translateY(-3px); box-shadow: var(--ombra-m); }
  .btn:hover svg { transform: translateX(3px); }
}
/* Dopo il blocco :hover, altrimenti a parità di specificità la pressione non
   riuscirebbe più a riabbassare il bottone.
   Il bottone premuto torna giù e rientra appena su se stesso: è l'unico
   segnale che il dito ha davvero preso il bersaglio, e su un telefono — dove
   il :hover non esiste — è anche l'unico che si vede. Più svelto del
   sollevamento, perché una risposta al tocco in ritardo sembra un guasto. */
.btn:active { transform: translateY(0) scale(.985); transition-duration: var(--t-veloce); }

.btn--vuoto { --bg: transparent; --fg: var(--inchiostro); border-color: var(--linea-forte); }
.btn--chiaro { --bg: var(--carta); --fg: var(--inchiostro); }
/* --linea-scura-forte e non --linea-scura: qui il filetto non separa, delimita
   un bottone, e il bordo di un comando deve arrivare a 3:1 sul fondo */
.btn--fantasma-chiaro { --bg: transparent; --fg: var(--carta); border-color: var(--linea-scura-forte); }
.btn--verde { --bg: var(--petrolio); --fg: #fff; }
/* I due bottoni dell'apertura invertono del tutto i loro colori al passaggio:
   su iOS, dove il :hover resta appiccicato all'ultimo elemento toccato, dopo
   un tocco restavano invertiti finché non si toccava altrove. */
@media (hover: hover) and (pointer: fine) {
  .btn--vuoto:hover { background: var(--inchiostro); color: var(--carta); border-color: var(--inchiostro); }
  .btn--fantasma-chiaro:hover { background: var(--carta); color: var(--inchiostro); }
}

/* ------------------------------------------ indicatore di scorrimento --- */
/* Filo di due pixel appoggiato sul bordo alto della finestra: dice a che punto
   della pagina si è. Compare solo dopo i primi 400px (prima non c'è ancora
   niente da raccontare) e non è un'animazione ma un indicatore di stato: il
   riempimento lo scrive sito.js in una variabile, e la sola cosa che
   attraversa una transizione è la comparsa.
   Il markup <div class="barra-progresso"><i></i></div> è in tutte e cinque le
   pagine e sito.js lo pilota già: senza queste regole restava un elemento
   invisibile, alto zero, che non disegnava nulla. */
.barra-progresso {
  position: fixed; left: 0; right: 0; top: 0; height: 2px; z-index: 95;
  pointer-events: none; opacity: 0; transition: opacity var(--t-medio) var(--e-standard);
}
.barra-progresso.visibile { opacity: 1; }
.barra-progresso i {
  display: block; height: 100%; background: var(--petrolio);
  transform: scaleX(var(--avanzamento, 0)); transform-origin: left;
}
/* col menù a tutto schermo aperto la pagina sotto non si muove più: il filo
   racconterebbe un avanzamento che in quel momento non vuol dire niente, e su
   telefono passerebbe sopra il pannello */
body.blocca-scroll .barra-progresso { opacity: 0; }

/* ================================================================ HEADER == */
.testata {
  position: fixed; inset: 0 0 auto; z-index: 90;
  /* aggiunto alla schermata Home di un iPhone con la tacca, il sito parte a
     tutto schermo e senza questa riga marchio e hamburger finiscono sotto la
     barra di stato. Lo stesso valore è dentro --h-testata (vedi l'@supports
     in cima al foglio), così l'aggancio della barra del menù lo segue. */
  padding-top: env(safe-area-inset-top, 0px);
}
/* Lo sfondo sfocato sta su uno pseudo-elemento e non sulla .testata.
   Un backdrop-filter sull'elemento ne fa un blocco contenitore per tutti i
   discendenti in position:fixed, e la .nav mobile è figlia della testata:
   appena si scorreva (la testata prende .compatta) il menù a tutto schermo si
   apriva come una striscia alta quanto la testata. Era rotto su tutte e
   quattro le pagine, ed è l'interazione più usata del sito. */
.testata::before {
  content: ''; position: absolute; inset: 0; z-index: -1;
  opacity: 0; transition: opacity var(--t-medio) var(--e-standard);
  background: rgba(250, 246, 239, .9);
  -webkit-backdrop-filter: saturate(1.5) blur(14px);
          backdrop-filter: saturate(1.5) blur(14px);
  box-shadow: 0 1px 0 var(--linea), var(--ombra-barra);
}
.testata.compatta::before { opacity: 1; }
/* Il riempimento è impaginazione, e animarla obbliga il browser a rifare i
   conti del layout per tutta la durata della transizione — la stessa ragione
   per cui il logo è passato dalla larghezza a una scala, poche righe più
   sotto. Qui però resta, ed è una scelta e non una svista: il salto fra 1,5
   e 0,6rem sono ventinove pixel di testata che cambiano altezza di colpo,
   proprio mentre l'utente sta scorrendo, e si vede molto più di quanto costi.
   Il conto: riguarda il solo sottoalbero della testata (sei elementi) e
   scatta una volta per attraversamento della soglia, non a ogni fotogramma.
   Se un giorno la testata diventasse più ricca, la strada giusta è tenerne
   ferma l'altezza e muovere il contenuto con una traslazione. */
.testata__in {
  display: flex; align-items: center; justify-content: space-between; gap: 1.5rem;
  padding-block: clamp(.9rem, 2vw, 1.5rem);
  transition: padding var(--t-medio) var(--e-morbida);
}
.testata.compatta .testata__in { padding-block: .6rem; }

/* Sopra la foto dell'hero il marchio è chiaro, sulla testata compatta è
   scuro: senza questa riga il colore saltava da uno all'altro mentre lo
   sfondo sfocato ci metteva mezzo secondo a comparire, e il passaggio si
   vedeva in due tempi invece che in uno. */
.marchio {
  display: flex; align-items: center; gap: .8rem; text-decoration: none; color: var(--inchiostro);
  transition: color var(--t-medio) var(--e-standard);
}

/* il logo è una maschera: prende sempre il colore del testo intorno */
.logo-img {
  display: block; background: currentColor;
  -webkit-mask: var(--src) center/contain no-repeat;
          mask: var(--src) center/contain no-repeat;
  /* si rimpicciolisce dal suo bordo sinistro, che è il punto in cui il
     marchio resta agganciato al margine di pagina */
  transform-origin: left center;
  transition: transform var(--t-medio) var(--e-morbida);
}
.logo-full { --src: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjMuNjAgOTMuMDIgODM0LjI4IDQwOC43MCIgZmlsbD0iY3VycmVudENvbG9yIj4NCjxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDAsNTk1LjI3NTYpIiBkPSJNNTUuMTkyOCAxOTAuNjE5NEM1My45NjggMTkyLjYwNjUgNTMuMzU4OCAxOTUuMDE3MSA1My4zNTg4IDE5Ny44NTM0VjM2Mi44ODZINDEuMjM0N1YxOTcuNTY2QzQxLjIzNDcgMTkyLjA4NTIgNDIuNzM4IDE4Ny4wNzYxIDQ1Ljc0NjYgMTgyLjU0MDEgNDkuMzE2IDE3Ny44MTUxIDUzLjczNDQgMTc1LjQ1MTggNTguOTk4OSAxNzUuNDUxOEg3Ny4wNDM3VjE4Ny42NDMxSDU4Ljk5ODlDNTcuNjgzMyAxODcuNjQzMSA1Ni40MTI2IDE4OC42MzggNTUuMTkyOCAxOTAuNjE5NCIvPg0KPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsMCw1OTUuMjc1NikiIGQ9Ik0xMTMuNDE5IDM2Mi44ODZIOTUuMzcyOFYxNzUuNDUxOEgxMDcuNDk2NlYyMzYuOTg1NEgxMTkuMzM4OVYxNzUuNDUxOEgxMzEuMTgxN1YzNDAuNzY4OUMxMzEuMTgxNyAzNDYuODE4IDEyOS42NzQ4IDM1MS43MjkxIDEyNi42NzE1IDM1NS41MTM2IDEyMy4yODcyIDM2MC40MjY2IDExOC44NjgzIDM2Mi44ODYgMTEzLjQxOSAzNjIuODg2Wk0xMTkuMzM4OSAyNDkuNDYxNkgxMDcuNDk2NlYzNTAuOTc3QzEwOC44MDk5IDM1MC45NzcgMTA5Ljk4NjUgMzUwLjkyODMgMTExLjAyMTcgMzUwLjgzNDcgMTEyLjA1MTggMzUwLjczNzUgMTEyLjg1NDMgMzUwLjY5MzYgMTEzLjQxOSAzNTAuNjkzNiAxMTQuOTIxMSAzNTAuNjkzNiAxMTYuMjgxNCAzNDkuNzQ2IDExNy41MDcxIDM0Ny44NTY0IDExOC43Mjc0IDM0NS45Njc0IDExOS4zMzg5IDM0My41MDYgMTE5LjMzODkgMzQwLjQ4NzFaIi8+DQo8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSwwLDU5NS4yNzU2KSIgZD0iTTIxMC40MTA2IDMwMS4zNTM3VjE5Ny44NTM0QzIxMC40MTA2IDE5NS4wMTcxIDIwOS43NTA1IDE5Mi42MDY1IDIwOC40Mzg2IDE5MC42MTk0IDIwNy4xMjEgMTg4LjYzOCAyMDUuODAyOSAxODcuNjQzMSAyMDQuNDg5OSAxODcuNjQzMUgxOTguNTY4NlYzNjIuODg2SDE4Ni40NDQ2VjE3NS40NTE4SDIwNC40ODk5QzIwOS43NTA1IDE3NS40NTE4IDIxNC4xNjk3IDE3Ny44MTUxIDIxNy43NDE2IDE4Mi41NDAxIDIyMC43NDY2IDE4Ni42OTUxIDIyMi4yNTI3IDE5MS43MDkxIDIyMi4yNTI3IDE5Ny41NjZWMzYyLjg4NkgyMTAuNDEwNloiLz4NCjxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDAsNTk1LjI3NTYpIiBkPSJNMjU1LjUyMiAzMzYuMjMwOVYzNDAuNDg3MUMyNTUuNTIyIDM0My41MDYgMjU2LjEyOTggMzQ1Ljk2NzQgMjU3LjM1NTggMzQ3Ljg1NjQgMjU4LjU3NTUgMzQ5Ljc0NiAyNTkuOTM1NiAzNTAuNjkzNiAyNjEuNDQ0NSAzNTAuNjkzNkgyNzAuNzQ5MkMyNzMuMTkwMSAzNTAuNjkzNiAyNzYuMDA4MyAzNTAuNzg3NCAyNzkuMjA2MSAzNTAuOTc3VjM2Mi44ODZIMjYxLjQ0NDVDMjU2LjE3OTQgMzYyLjg4NiAyNTEuNzYwMiAzNjAuNTIwNyAyNDguMTg5NyAzNTUuNzk5MSAyNDUuMzcxNyAzNTEuODI2MyAyNDMuNzcxOSAzNDYuODE4IDI0My4zOTggMzQwLjc2ODlWMTk3LjU2NkMyNDMuNzcxOSAxOTEuNzA5MSAyNDUuMzcxNyAxODYuNjk1MSAyNDguMTg5NyAxODIuNTQwMSAyNTEuNzYwMiAxNzcuODE1MSAyNTYuMTc5NCAxNzUuNDUxOCAyNjEuNDQ0NSAxNzUuNDUxOEgyNzkuMjA2MVYxODcuNjQzMUgyNjEuNDQ0NUMyNTkuOTM1NiAxODcuNjQzMSAyNTguNTc1NSAxODguNjM4IDI1Ny4zNTU4IDE5MC42MTk0IDI1Ni4xMjk4IDE5Mi42MDY1IDI1NS41MjIgMTk1LjAxNzEgMjU1LjUyMiAxOTcuODUzNFYyMzYuOTg1NEgyNzkuNzcxNlYyNDkuNDYxNkgyNTUuNTIyWiIvPg0KPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsMCw1OTUuMjc1NikiIGQ9Ik0zMTAuOTI3MiAzNjEuMDQ1NEMzMDguNTczMyAzNTkuODEyOSAzMDYuNjQ5MSAzNTguMDY0MiAzMDUuMTQ1OSAzNTUuNzk5MSAzMDEuOTQ4MiAzNTEuNDQ1MyAzMDAuMzU0NSAzNDYuNDQwMiAzMDAuMzU0NSAzNDAuNzY4OVYxOTcuNTY2QzMwMC4zNTQ1IDE5Mi4yNzM0IDMwMS45NDgyIDE4Ny4yNjI2IDMwNS4xNDU5IDE4Mi41NDAxIDMwNi42NDkxIDE4MC4yNzQ0IDMwOC41NzMzIDE3OC41MjI5IDMxMC45MjcyIDE3Ny4yOTcyIDMxMy4yNzQzIDE3Ni4wNjMgMzE1Ljc2MzkgMTc1LjQ1MTggMzE4LjM5OTMgMTc1LjQ1MThIMzM2LjE2MDlWMTg3LjY0MzFIMzE4LjM5OTNDMzE2Ljg5MTYgMTg3LjY0MzEgMzE1LjUzMDEgMTg4LjYzOCAzMTQuMzExNyAxOTAuNjE5NCAzMTMuMDg1OCAxOTIuNjA2NSAzMTIuNDc4NiAxOTUuMDE3MSAzMTIuNDc4NiAxOTcuODUzNFYzNDAuNDg3MUMzMTIuNDc4NiAzNDMuNTA2IDMxMy4wODU4IDM0NS45Njc0IDMxNC4zMTE3IDM0Ny44NTY0IDMxNS41MzAxIDM0OS43NDYgMzE2Ljg5MTYgMzUwLjY5MzYgMzE4LjM5OTMgMzUwLjY5MzZIMzI3LjcwNEMzMzAuMTQ1MiAzNTAuNjkzNiAzMzIuOTYzMSAzNTAuNzg3NCAzMzYuMTYwOSAzNTAuOTc3VjM2Mi44ODZIMzE4LjM5OTNDMzE1Ljc2MzkgMzYyLjg4NiAzMTMuMjc0MyAzNjIuMjcwNiAzMTAuOTI3MiAzNjEuMDQ1NCIvPg0KPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsMCw1OTUuMjc1NikiIGQ9Ik0zNjcuODgxNyAzNjEuMDQ1NEMzNjUuNTI4MSAzNTkuODEyOSAzNjMuNjAyNiAzNTguMDY0MiAzNjIuMTAwOCAzNTUuNzk5MSAzNTguOTAxMyAzNTEuNDQ1MyAzNTcuMzA3OSAzNDYuNDQwMiAzNTcuMzA3OSAzNDAuNzY4OVYxOTcuNTY2QzM1Ny4zMDc5IDE5Mi4yNzM0IDM1OC45MDEzIDE4Ny4yNjI2IDM2Mi4xMDA4IDE4Mi41NDAxIDM2My42MDI2IDE4MC4yNzQ0IDM2NS41MjgxIDE3OC41MjI5IDM2Ny44ODE3IDE3Ny4yOTcyIDM3MC4yMjk3IDE3Ni4wNjMgMzcyLjcxODggMTc1LjQ1MTggMzc1LjM1NDQgMTc1LjQ1MThIMzkzLjExNlYxODcuNjQzMUgzNzUuMzU0NEMzNzMuODQ1IDE4Ny42NDMxIDM3Mi40ODQ5IDE4OC42MzggMzcxLjI2NTIgMTkwLjYxOTQgMzcwLjAzOTUgMTkyLjYwNjUgMzY5LjQzMDMgMTk1LjAxNzEgMzY5LjQzMDMgMTk3Ljg1MzRWMzQwLjQ4NzFDMzY5LjQzMDMgMzQzLjUwNiAzNzAuMDM5NSAzNDUuOTY3NCAzNzEuMjY1MiAzNDcuODU2NCAzNzIuNDg0OSAzNDkuNzQ2IDM3My44NDUgMzUwLjY5MzYgMzc1LjM1NDQgMzUwLjY5MzZIMzg0LjY1NzRDMzg3LjA5ODQgMzUwLjY5MzYgMzg5LjkxNzcgMzUwLjc4NzQgMzkzLjExNiAzNTAuOTc3VjM2Mi44ODZIMzc1LjM1NDRDMzcyLjcxODggMzYyLjg4NiAzNzAuMjI5NyAzNjIuMjcwNiAzNjcuODgxNyAzNjEuMDQ1NCIvPg0KPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsMCw1OTUuMjc1NikiIGQ9Ik00MzguMjI2OSAyNDkuNDYxNkg0MjYuMzg3MVYzNjIuODg2SDQxNC4yNjI1VjE3NS40NTIxSDQyNi4zODcxVjIzNi45ODU0SDQzOC4yMjY5VjE3NS40NTIxSDQ1MC4wNjk0VjM2Mi44ODZINDM4LjIyNjlaTTgxNy4wNDY0IDE1Ny4yNzI3SDUwMy44MjA2QzUwMy43NzM1IDE1Ny4yNjc4IDUwMy43MjU2IDE1Ny4yNjUgNTAzLjY3NzEgMTU3LjI2NUgyNC40NjA3QzIzLjU2NzggMTUzLjkzOTEgMjAuODEyMyAxNTEuNjk4IDE3LjIwMzcgMTUxLjY5OCAxMi43MjU2IDE1MS42OTggOS42MDA0IDE1NS4yNDE2IDkuNzIyOCAxNTkuNjM2OCA5LjcyMjggMTY0LjA1NiAxMi44MjkzIDE2Ny41NzY5IDE3LjMwOTUgMTY3LjU3NjkgMjAuOTI5IDE2Ny41NzY5IDIzLjU0MDYgMTY1LjMxNTEgMjQuNDM2MyAxNjIuMDEyNUg4MTcuMDE4OUM4MTcuOTA5MiAxNjUuMzM3OCA4MjAuNjY5IDE2Ny41NzY5IDgyNC4yNzQ3IDE2Ny41NzY5IDgyOC43NTU3IDE2Ny41NzY5IDgzMS44ODA2IDE2NC4wNDY5IDgzMS43NjMzIDE1OS42NDU4IDgzMS43NjMzIDE1NS4yMzU0IDgyOC42NDcxIDE1MS42OTggODI0LjE3NDkgMTUxLjY5OCA4MjAuNTUxNyAxNTEuNjk4IDgxNy45NDEzIDE1My45NjY2IDgxNy4wNDY0IDE1Ny4yNzI3Wk0yODAuMzc2MiAxMjMuMjkwNFYxMTcuODc3OUgyODUuOTUwM0MyODYuNzAyNiAxMTcuODc3OSAyODcuMzE1NyAxMTcuMjYxMSAyODcuMzE1NyAxMTYuNTA0NVYxMTMuOTM4NkMyODcuMzE1NyAxMTMuMTgxNyAyODYuNzAyNiAxMTIuNTY1MiAyODUuOTUwMyAxMTIuNTY1MkgyODAuMzc2MlYxMDEuMTU2QzI4MC4zNzYyIDEwMC4zOTk1IDI3OS43NjMxIDk5Ljc4MjkgMjc5LjAxMDUgOTkuNzgyOUgyNzYuNDIxNkMyNzUuNjY5MyA5OS43ODI5IDI3NS4wNTYyIDEwMC4zOTk1IDI3NS4wNTYyIDEwMS4xNTZWMTI3LjIyOTdDMjc1LjA1NjIgMTI3Ljk4NjUgMjc1LjY2OTMgMTI4LjYwMzEgMjc2LjQyMTYgMTI4LjYwMzFIMjkwLjcwNzdDMjkxLjQ2IDEyOC42MDMxIDI5Mi4wNzMxIDEyNy45ODY1IDI5Mi4wNzMxIDEyNy4yMjk3VjEyNC42NjM3QzI5Mi4wNzMxIDEyMy45MDcyIDI5MS40NiAxMjMuMjkwNCAyOTAuNzA3NyAxMjMuMjkwNFpNMzEwLjgwNzYgMTI5LjA2MDlDMzE0Ljk3ODUgMTI5LjA2MDkgMzE4LjYzNzQgMTI3LjY2OSAzMjEuNjA0MiAxMjQuNzA0OSAzMjQuNTQyOCAxMjEuNzY4MiAzMjUuOTY4NCAxMTguMTU0NiAzMjUuOTY4NCAxMTMuOTkzNiAzMjUuOTY4NCAxMDkuOTEgMzI0LjU2ODYgMTA2LjM3NjYgMzIxLjU3NjcgMTAzLjU5NjQgMzE4LjYxMTYgMTAwLjg0MTEgMzE1LjAzNzEgOTkuNTU1IDMxMS4wMTkzIDk5LjU1NSAzMDYuODczNCA5OS41NTUgMzAzLjI2MzcgMTAwLjk3OTEgMzAwLjMxODIgMTAzLjkyMDcgMjk3LjU3NzcgMTA2LjY1NjcgMjk1Ljk0NjYgMTA5Ljk1NjggMjk1Ljk0NjYgMTEzLjg3IDI5NS45NDY2IDExNi41ODEzIDI5Ni42MDEyIDExOS4xMzk5IDI5Ny45MjMyIDEyMS41MDI2IDI5OS4yMzM0IDEyMy44NDYgMzAxLjA0NTMgMTI1LjcwOTQgMzAzLjM1ODcgMTI3LjA1NTkgMzA1LjY1NjcgMTI4LjM5MzYgMzA4LjE1MjMgMTI5LjA2MDkgMzEwLjgwNzYgMTI5LjA2MDlaTTMxOS4zMDU4IDEwOS42MzMzQzMyMC4wNjI0IDExMC45NzQ0IDMyMC41NjIxIDExMi40MzkxIDMyMC41NjIxIDExMy45OTM2IDMyMC41NjIxIDExNS43NDMxIDMyMC4xNzU4IDExNy40IDMxOS4zMDkyIDExOC45MTkzIDMxOC40NTY2IDEyMC40MTU1IDMxNy4yNjE4IDEyMS41NjkyIDMxNS43NzQ3IDEyMi40MjY2IDMxNC4yNjY0IDEyMy4yOTYgMzEyLjY1MzIgMTIzLjc0NDUgMzEwLjkxNDcgMTIzLjc0NDUgMzA5LjIwOCAxMjMuNzQ0NSAzMDcuNjI4NSAxMjMuMjg5OCAzMDYuMTUxMSAxMjIuNDI5NSAzMDQuNjYyNiAxMjEuNTYyNCAzMDMuNDg5MSAxMjAuMzg4OCAzMDIuNjQ0MyAxMTguODgxNiAzMDEuNzc1MiAxMTcuMzMwNSAzMDEuMzg2OSAxMTUuNjQ4MiAzMDEuMzg2OSAxMTMuODcgMzAxLjM4NjkgMTExLjI4OTYgMzAyLjIwNjcgMTA5LjEwMTMgMzA0LjEyNiAxMDcuMzY1MyAzMDYuMDYwNCAxMDUuNjE2NiAzMDguMzI3OCAxMDQuODMxNyAzMTAuOTE0NyAxMDQuODMxNyAzMTIuNjYzNCAxMDQuODMxNyAzMTQuMjkzNiAxMDUuMjU2MSAzMTUuODExNiAxMDYuMTI5NCAzMTcuMjk1MiAxMDYuOTgyOSAzMTguNDYyOCAxMDguMTM3OCAzMTkuMzA1OCAxMDkuNjMzM1pNMzQ1LjAwMSAxMjkuMDYwOUMzNDkuMTcyOCAxMjkuMDYwOSAzNTIuODMwOSAxMjcuNjY5IDM1NS43OTc2IDEyNC43MDQ5IDM1OC43MzYgMTIxLjc2ODIgMzYwLjE2MSAxMTguMTUzNyAzNjAuMTYxIDExMy45OTM2IDM2MC4xNjEgMTA5LjkxMTQgMzU4Ljc2MzUgMTA2LjM3NzQgMzU1Ljc3MyAxMDMuNTk2NCAzNTIuODA4NSAxMDAuODQxMSAzNDkuMjMgOTkuNTU1IDM0NS4yMTI4IDk5LjU1NSAzNDEuMDY4MyA5OS41NTUgMzM3LjQ1NzggMTAwLjk3OTcgMzM0LjUxMzEgMTAzLjkyMDcgMzMxLjc3MjYgMTA2LjY1NjcgMzMwLjE0MDEgMTA5Ljk1NjggMzMwLjE0MDEgMTEzLjg3IDMzMC4xNDAxIDExNi41ODEzIDMzMC43OTM1IDExOS4xMzk5IDMzMi4xMTUzIDEyMS41MDI2IDMzMy40MjU1IDEyMy44NDY4IDMzNS4yMzg4IDEyNS43MDg5IDMzNy41NTIyIDEyNy4wNTU5IDMzOS44NDk2IDEyOC4zOTM2IDM0Mi4zNDY0IDEyOS4wNjA5IDM0NS4wMDEgMTI5LjA2MDlaTTM1My41MDAyIDEwOS42MzMzQzM1NC4yNTY0IDExMC45NzUgMzU0Ljc1NTYgMTEyLjQzOTEgMzU0Ljc1NTYgMTEzLjk5MzYgMzU0Ljc1NTYgMTE1Ljc0MjMgMzU0LjM2OTMgMTE3LjQgMzUzLjUwMjcgMTE4LjkxOTMgMzUyLjY1IDEyMC40MTQ5IDM1MS40NTc4IDEyMS41NjkyIDM0OS45NzAyIDEyMi40MjY2IDM0OC40NjEzIDEyMy4yOTY2IDM0Ni44NDU4IDEyMy43NDQ1IDM0NS4xMDY4IDEyMy43NDQ1IDM0My40MDA2IDEyMy43NDQ1IDM0MS44MjE0IDEyMy4yODkyIDM0MC4zNDQ2IDEyMi40Mjk1IDMzOC44NTQ3IDEyMS41NjI0IDMzNy42ODQgMTIwLjM4ODggMzM2LjgzNzggMTE4Ljg4MTEgMzM1Ljk2NzMgMTE3LjMzMDUgMzM1LjU4MDQgMTE1LjY0ODIgMzM1LjU4MDQgMTEzLjg3IDMzNS41ODA0IDExMS4yODk2IDMzNi4zOTg3IDEwOS4xMDEzIDMzOC4zMTgxIDEwNy4zNjUzIDM0MC4yNTI0IDEwNS42MTcyIDM0Mi41MTk5IDEwNC44MzE3IDM0NS4xMDY4IDEwNC44MzE3IDM0Ni44NTggMTA0LjgzMTcgMzQ4LjQ4NjUgMTA1LjI1NTUgMzUwLjAwNjUgMTA2LjEyOTQgMzUxLjQ5MDEgMTA2Ljk4MjkgMzUyLjY1NjMgMTA4LjEzODYgMzUzLjUwMDIgMTA5LjYzMzNaTTM4MS4wOTk0IDEyNy42NDc4QzM4My44NTQ0IDEyNi42Njk1IDM4Ni4wNzY4IDEyNC45Njk5IDM4Ny42NzI5IDEyMi41MDQ5IDM4OS4zNDIzIDExOS45MjczIDM5MC4wMTg5IDExNi45OTI2IDM5MC4wMTg5IDExMy45Mzg2IDM5MC4wMTg5IDExMS4yNzM3IDM4OS40NjY3IDEwOC42OTk2IDM4OC4xNTM3IDEwNi4zNjk4IDM4Ni45NzI1IDEwNC4yNzQxIDM4NS4zNjEzIDEwMi41NTM1IDM4My4yMzExIDEwMS40Mjg3IDM4MC44MjAyIDEwMC4xNTY1IDM3Ny43NTA2IDk5Ljg1NTggMzc1LjA2OTMgOTkuODU1OEgzNjYuODE3M0MzNjYuMDY1IDk5Ljg1NTggMzY1LjQ1MTkgMTAwLjQ3MjMgMzY1LjQ1MTkgMTAxLjIyODlWMTI3LjMwMDVDMzY1LjQ1MTkgMTI4LjA1NzEgMzY2LjA2NSAxMjguNjczNiAzNjYuODE3MyAxMjguNjczNkgzNzIuMTg1M0MzNzQuOTAyNiAxMjguNjczNiAzNzguNTE4NSAxMjguNTYzOSAzODEuMDk5NCAxMjcuNjQ3OFpNMzcwLjY2NjIgMTIzLjM5NDFWMTA1LjA3ODlIMzcyLjI4OUMzNzQuMjMxMyAxMDUuMDc4OSAzNzcuNDgyNyAxMDUuMDgyMyAzNzkuMzM2NSAxMDUuNjgxIDM4MC45NjgyIDEwNi4yMDg1IDM4Mi4yNTg4IDEwNy4xNTY3IDM4My4yMjE0IDEwOC41ODM0IDM4NC4yODY0IDExMC4xNjI4IDM4NC42NjQgMTEyLjAyMDcgMzg0LjY2NCAxMTMuOTA1NyAzODQuNjY0IDExNS45MzE5IDM4NC4yMzkzIDExNy44OTI5IDM4My4wOTMgMTE5LjU4NDYgMzgyLjAzIDEyMS4xNTQ1IDM4MC41Njc2IDEyMi4xNTA2IDM3OC43NjQyIDEyMi43MDA4IDM3Ni42MTMgMTIzLjM1NjQgMzczLjM3MzMgMTIzLjM5NDEgMzcxLjEzNTkgMTIzLjM5NDFaTTQyOC41MjA4IDEwNi42MTc1QzQyOS4wMzM1IDEwNi4wODc1IDQyOS41NTQzIDEwNS41NjQ1IDQzMC4wNzEzIDEwNS4wNDMyIDQzMC44OTUzIDEwNC4yMTM4IDQzMS43MDI0IDEwMy4zNTgzIDQzMi40NTQxIDEwMi40NjE0IDQzMi44MDQ1IDEwMi4wNDMzIDQzMi44NzczIDEwMS40OTM0IDQzMi42NDg2IDEwMC45OTc2IDQzMi40MTkyIDEwMC41MDE4IDQzMS45NTM1IDEwMC4yMDMgNDMxLjQxMDEgMTAwLjIwM0g0MjcuODA4N0M0MjcuNDIyOSAxMDAuMjAzIDQyNy4wOTA0IDEwMC4zNDUzIDQyNi44MjM0IDEwMC42MjU0TDQyNC4zMTg0IDEwMy4yNTExQzQyMi44NTY2IDEwMi4xNzc5IDQyMS4xOTQgMTAxLjA4MTIgNDE5LjYwMjQgMTAwLjQ1MTYgNDE4LjA3MTcgOTkuODQ2MSA0MTYuNDYzOSA5OS41NTUgNDE0LjgxODkgOTkuNTU1IDQxMi42Njk3IDk5LjU1NSA0MTAuNjU3NyAxMDAuMTUzNyA0MDkuMDcyOCAxMDEuNjYzNyA0MDcuNTc3IDEwMy4wODkgNDA2LjgzIDEwNC44ODkzIDQwNi44MyAxMDYuOTU5NyA0MDYuODMgMTA4LjY0MTIgNDA3LjM3NjMgMTEwLjIwMDUgNDA4LjI2MTggMTExLjYxMyA0MDkuMjM5NSAxMTMuMTcyNCA0MTAuOTM4OSAxMTQuNzQwNSA0MTIuNDkwOCAxMTYuMDI2IDQxMS43MjY2IDExNi45ODg3IDQxMC45Mzg5IDExOC4wNTg1IDQxMC40NTIyIDExOS4wNDE1IDQwOS45OTI3IDExOS45Njc5IDQwOS42OTYyIDEyMC45NjYyIDQwOS42OTYyIDEyMi4wMDggNDA5LjY5NjIgMTIzLjcxOSA0MTAuMzg3MiAxMjUuMTYzNSA0MTEuNjgwNCAxMjYuMjcwNCA0MTMuMTU1OCAxMjcuNTMzMyA0MTQuOTM5MSAxMjguMDc3OCA0MTYuODY1MyAxMjguMDc3OCA0MTguMTAxNyAxMjguMDc3OCA0MTkuMzA2NyAxMjcuODMzMiA0MjAuNDIzIDEyNy4yOTA5IDQyMS40ODI2IDEyNi43NzU4IDQyMi4zODI2IDEyNi4wMzU3IDQyMy4wMTg0IDEyNS4wMzMxIDQyMy42MTM3IDEyNC4wOTMxIDQyMy45MzEyIDEyMy4wNTIzIDQyMy45MzEyIDEyMS45MzcxIDQyMy45MzEyIDEyMC42NzggNDIzLjQ2NTQgMTE5LjQ5NDIgNDIyLjgxNDkgMTE4LjQzNjYgNDIyLjEzOTcgMTE3LjMzOTMgNDIxLjA2ODIgMTE2LjI0MjkgNDIwLjAyMzYgMTE1LjI4OTlMNDIyLjkzOTEgMTEyLjIwMDcgNDI0Ljc0OSAxMTAuMzY4MUM0MjUuNDcyOSAxMTAuOTgxMiA0MjYuMTkwNCAxMTEuNjA0IDQyNi44ODU0IDExMi4yNDUyIDQyNy40MzUxIDExMi43NTIgNDI4LjI5IDExMi43MjExIDQyOC44MDE0IDExMi4xNzZMNDMwLjU2ODIgMTEwLjI5MzJDNDMwLjgzMjQgMTEwLjAxMTcgNDMwLjk1NzQgMTA5LjY3MjQgNDMwLjkzOTggMTA5LjI4NTggNDMwLjkyMTEgMTA4Ljg5OTQgNDMwLjc2NTUgMTA4LjU3MzIgNDMwLjQ3NjEgMTA4LjMxODMgNDI5LjgyODEgMTA3Ljc0NjYgNDI5LjE3NjcgMTA3LjE3OTQgNDI4LjUyMDggMTA2LjYxNzVaTTQxNi42MTE4IDExOS4yNDQyQzQxNy4xODgxIDExOS43NyA0MTcuNzI4MSAxMjAuMzUyMyA0MTguMTQyNiAxMjAuOTc4NyA0MTguMzEyNiAxMjEuMjM0NyA0MTguNTc0OCAxMjEuNjg2IDQxOC41NzQ4IDEyMi4wMDggNDE4LjU3NDggMTIyLjIwNTUgNDE4LjM5MjYgMTIyLjM1OCA0MTguMjQ4NiAxMjIuNDY2NiA0MTcuODM3NSAxMjIuNzc2MiA0MTcuMjU4NCAxMjIuODUwNCA0MTYuNzU5NSAxMjIuODUwNCA0MTYuMjcyIDEyMi44NTA0IDQxNS43NTI0IDEyMi43Njc5IDQxNS4zNTY0IDEyMi40NjE4IDQxNS4xODQ5IDEyMi4zMjkxIDQxNS4wMTQyIDEyMi4xNjg0IDQxNS4wMTQyIDEyMS45MzcxIDQxNS4wMTQyIDEyMS43MDM4IDQxNS4wNzc3IDEyMS40OTE1IDQxNS4xNzY3IDEyMS4zMTIzIDQxNS41OTM0IDEyMC41OTM1IDQxNi4wODY5IDExOS45MDI3IDQxNi42MTE4IDExOS4yNDQyWk00MTUuOTQ0MyAxMTEuOTk3NEM0MTQuODQzIDExMS4xMzAzIDQxMy41Nzg1IDExMC4wNDggNDEyLjkyNzcgMTA5LjEwMzggNDEyLjU1OTEgMTA4LjU2NzggNDEyLjE0NTMgMTA3LjgyNTQgNDEyLjE0NTMgMTA3LjE1MTkgNDEyLjE0NTMgMTA2LjQ4MDMgNDEyLjQ2NzYgMTA1Ljk3MzUgNDEyLjk1NDMgMTA1LjUzMTMgNDEzLjU2NzQgMTA0Ljk3MzcgNDE0LjI3NjEgMTA0Ljc0MzMgNDE1LjA5OTYgMTA0Ljc0MzMgNDE1Ljg1MzMgMTA0Ljc0MzMgNDE2LjU3NzggMTA0LjkxIDQxNy4yNjg2IDEwNS4yMTA3IDQxOC40MDM2IDEwNS43MDM3IDQxOS41MzM1IDEwNi4zNzQ2IDQyMC42MDA4IDEwNy4wODM4TDQxNy41MTI0IDExMC4yOTM4QzQxNi45Nzc4IDExMC44NSA0MTYuNDU1NyAxMTEuNDE5MSA0MTUuOTQ0MyAxMTEuOTk3NFpNNDY1Ljg4IDEyNy42NDc4QzQ2OC42MzY0IDEyNi42NzAxIDQ3MC44NTYyIDEyNC45NzEzIDQ3Mi40NTI0IDEyMi41MDQ5IDQ3NC4xMjAzIDExOS45MjgyIDQ3NC43OTYzIDExNi45OTEyIDQ3NC43OTYzIDExMy45Mzg2IDQ3NC43OTYzIDExMS4yNzM3IDQ3NC4yNDY3IDEwOC42OTc2IDQ3Mi45MzA5IDEwNi4zNjg0IDQ3MS43NDc3IDEwNC4yNzM2IDQ3MC4xMzg1IDEwMi41NTQxIDQ2OC4wMDc3IDEwMS40Mjg3IDQ2NS41OTk2IDEwMC4xNTcxIDQ2Mi41Mjc3IDk5Ljg1NTggNDU5Ljg0ODcgOTkuODU1OEg0NTEuNTk1M0M0NTAuODQzIDk5Ljg1NTggNDUwLjIyOTkgMTAwLjQ3MjMgNDUwLjIyOTkgMTAxLjIyODlWMTI3LjMwMDVDNDUwLjIyOTkgMTI4LjA1NzEgNDUwLjg0MyAxMjguNjczNiA0NTEuNTk1MyAxMjguNjczNkg0NTYuOTYyNUM0NTkuNjgxMiAxMjguNjczNiA0NjMuMjk3OSAxMjguNTY0NSA0NjUuODggMTI3LjY0NzhaTTQ1NS40NDU0IDEyMy4zOTQxVjEwNS4wNzg5SDQ1Ny4wNjg1QzQ1OS4wMTE2IDEwNS4wNzg5IDQ2Mi4yNjAxIDEwNS4wODIzIDQ2NC4xMTM3IDEwNS42ODEgNDY1Ljc0NSAxMDYuMjA3NyA0NjcuMDM5MyAxMDcuMTU1MyA0NjggMTA4LjU4MjIgNDY5LjA2MzggMTEwLjE2MzQgNDY5LjQ0ODIgMTEyLjAxODcgNDY5LjQ0ODIgMTEzLjkwNTcgNDY5LjQ0ODIgMTE1LjkzMzkgNDY5LjAxNzQgMTE3Ljg5MTUgNDY3Ljg3MSAxMTkuNTg0NiA0NjYuODA3MiAxMjEuMTU1OSA0NjUuMzQ0MiAxMjIuMTUwNiA0NjMuNTQwMyAxMjIuNzAwOCA0NjEuMzg5NiAxMjMuMzU2NCA0NTguMTUxMyAxMjMuMzk0MSA0NTUuOTE1MSAxMjMuMzk0MVpNNDkyLjc4MzYgMTEyLjI3NjkgNDk5LjE1NzMgMTAxLjg3NjNDNDk5LjQyMzUgMTAxLjQ0MTggNDk5LjQzNDUgMTAwLjkzMjkgNDk5LjE4NjggMTAwLjQ4NjggNDk4LjkzODcgMTAwLjA0MDMgNDk4LjUwMjUgOTkuNzgyOSA0OTcuOTk0NSA5OS43ODI5SDQ5NC44MTE1QzQ5NC4zMjM5IDk5Ljc4MjkgNDkzLjkwNDcgMTAwLjAxODUgNDkzLjY0ODcgMTAwLjQzNTdMNDg2LjYxNDggMTExLjkxMzhINDg1LjM3MjRWMTAxLjE1NkM0ODUuMzcyNCAxMDAuMzk5NSA0ODQuNzU5MyA5OS43ODI5IDQ4NC4wMDY3IDk5Ljc4MjlINDgxLjQxNzhDNDgwLjY2NTIgOTkuNzgyOSA0ODAuMDUyMyAxMDAuMzk5NSA0ODAuMDUyMyAxMDEuMTU2VjEyNy4yMjk3QzQ4MC4wNTIzIDEyNy45ODY1IDQ4MC42NjUyIDEyOC42MDMxIDQ4MS40MTc4IDEyOC42MDMxSDQ4Ni41Nzc0QzQ4OC40MTExIDEyOC42MDMxIDQ5MC45NTE4IDEyOC42MjkxIDQ5Mi43Mzc0IDEyOC4yMjEyIDQ5NC41MzAzIDEyNy44MTE5IDQ5Ni4wNjM2IDEyNi45MDU3IDQ5Ny4yNDIyIDEyNS40ODAxIDQ5OC40NjcxIDEyMy45OTc2IDQ5OS4wMDk5IDEyMi4yMjQzIDQ5OS4wMDk5IDEyMC4zMDU4IDQ5OS4wMDk5IDExOC43MTQxIDQ5OC42NDczIDExNy4xODkxIDQ5Ny44MDQgMTE1LjgzMjQgNDk2Ljk2ODQgMTE0LjQ4ODUgNDk1Ljc3OSAxMTMuNTE1NyA0OTQuMzQzMiAxMTIuODY5NCA0OTMuODQ2IDExMi42NDYzIDQ5My4zMjE2IDExMi40Mzk2IDQ5Mi43ODM2IDExMi4yNzY5Wk00ODUuMzcyNCAxMTcuMTg0MyA0ODguNDc2MSAxMTcuMTU4MkM0ODkuNDUzNyAxMTcuMTUgNDkwLjg4MyAxMTcuMTkzMyA0OTEuODA1NCAxMTcuNTU1NiA0OTIuMzUwNyAxMTcuNzY5OSA0OTIuNzc2OCAxMTguMTAyNCA0OTMuMDkyMyAxMTguNTk4NyA0OTMuNDI0MiAxMTkuMTIxMiA0OTMuNTY5NiAxMTkuNjg1NSA0OTMuNTY5NiAxMjAuMzA1OCA0OTMuNTY5NiAxMjAuODk5NiA0OTMuNDExMiAxMjEuNDI0OSA0OTMuMDg0MSAxMjEuOTE5MiA0OTIuNzc0OCAxMjIuMzg4NCA0OTIuMzgzMSAxMjIuNzMyMiA0OTEuODY0NiAxMjIuOTQ1MSA0OTEuMDQxNCAxMjMuMjgzIDQ4OS40NDk4IDEyMy4zMDgyIDQ4OC41NzA1IDEyMy4zMDgySDQ4NS4zNzI0Wk01MDQuMjg0OSAxMDEuMTU2VjEyNy4yMjk3QzUwNC4yODQ5IDEyNy45ODY1IDUwNC44OTggMTI4LjYwMzEgNTA1LjY1MDMgMTI4LjYwMzFINTA4LjIzNjdDNTA4Ljk4OSAxMjguNjAzMSA1MDkuNjAyMSAxMjcuOTg2NSA1MDkuNjAyMSAxMjcuMjI5N1YxMDEuMTU2QzUwOS42MDIxIDEwMC4zOTk1IDUwOC45ODkgOTkuNzgyOSA1MDguMjM2NyA5OS43ODI5SDUwNS42NTAzQzUwNC44OTggOTkuNzgyOSA1MDQuMjg0OSAxMDAuMzk5NSA1MDQuMjg0OSAxMDEuMTU2Wk01MzMuNDU3NCAxMTAuOTQ4OVYxMjcuMjI5N0M1MzMuNDU3NCAxMjcuOTg2NSA1MzQuMDcwNSAxMjguNjAzMSA1MzQuODIyOCAxMjguNjAzMUg1MzcuMzc1N0M1MzguMTI4IDEyOC42MDMxIDUzOC43NDExIDEyNy45ODY1IDUzOC43NDExIDEyNy4yMjk3VjEwMS4xNTZDNTM4Ljc0MTEgMTAwLjM5OTUgNTM4LjEyOCA5OS43ODI5IDUzNy4zNzU3IDk5Ljc4MjlINTM2Ljc4MTVDNTM2LjM3MjggOTkuNzgyOSA1MzYuMDIwNCA5OS45NDQyIDUzNS43NTIgMTAwLjI1NDZMNTIxLjA4MDcgMTE3LjE5NzNWMTAxLjE1NkM1MjEuMDgwNyAxMDAuMzk5NSA1MjAuNDY3NiA5OS43ODI5IDUxOS43MTUzIDk5Ljc4MjlINTE3LjAyNjZDNTE2LjI3NDMgOTkuNzgyOSA1MTUuNjYxMiAxMDAuMzk5NSA1MTUuNjYxMiAxMDEuMTU2VjEyNy4yMjk3QzUxNS42NjEyIDEyNy45ODY1IDUxNi4yNzQzIDEyOC42MDMxIDUxNy4wMjY2IDEyOC42MDMxSDUxNy41ODMxQzUxNy45OTI3IDEyOC42MDMxIDUxOC4zNDUgMTI4LjQ0MTggNTE4LjYxNCAxMjguMTMwNVpNNTU2LjI2MTUgMTE4LjAyMjcgNTY2LjIyNSAxMDEuODA2M0M1NjYuNDkyOSAxMDEuMzcxNyA1NjYuNTA0MiAxMDAuODYyOSA1NjYuMjU2NSAxMDAuNDE1OSA1NjYuMDA4NyA5OS45Njg5IDU2NS41NzI1IDk5LjcxMTUgNTY1LjA2MzcgOTkuNzExNUg1NjEuNjU0MUM1NjEuMTc1NCA5OS43MTE1IDU2MC43NjM4IDk5LjkzNzQgNTYwLjUwNSAxMDAuMzQzMUw1NTEuNjc5NiAxMTQuMTcxOSA1NTAuMTU0MyAxMTIuODI0OVYxMDEuMDg0OUM1NTAuMTU0MyAxMDAuMzI4IDU0OS41NDExIDk5LjcxMTUgNTQ4Ljc4ODggOTkuNzExNUg1NDYuMTQ5OEM1NDUuMzk3NCA5OS43MTE1IDU0NC43ODQzIDEwMC4zMjggNTQ0Ljc4NDMgMTAxLjA4NDlWMTI3LjE2MTFDNTQ0Ljc4NDMgMTI3LjkxNzYgNTQ1LjM5NzQgMTI4LjUzNDUgNTQ2LjE0OTggMTI4LjUzNDVINTQ4Ljc4ODhDNTQ5LjU0MTEgMTI4LjUzNDUgNTUwLjE1NDMgMTI3LjkxNzYgNTUwLjE1NDMgMTI3LjE2MTFWMTIwLjEzNTRMNTU5LjI4NjEgMTI4LjE5MzJDNTU5LjU0NTcgMTI4LjQyMTYgNTU5Ljg0MiAxMjguNTM0NSA1NjAuMTg2NiAxMjguNTM0NUg1NjQuMTA0NEM1NjQuNjc3OSAxMjguNTM0NSA1NjUuMTY3NCAxMjguMTk4IDU2NS4zNzYzIDEyNy42NjA4IDU2NS41ODUyIDEyNy4xMjM0IDU2NS40NTE0IDEyNi41NDIzIDU2NS4wMzAyIDEyNi4xNTExWiIvPg0KPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsMCw1OTUuMjc1NikiIGQ9Ik00NzEuMjE2MiAxNzUuNDUxOEg0ODMuMzM5N1YzNjIuODg2NUg0NzEuMjE2MloiLz4NCjxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDAsNTk1LjI3NTYpIiBkPSJNNTIwLjU1OCAzNjIuODg2SDUwMi41MTQ0VjE3NS40NTE4SDUxNC42MzUzVjIzNi45ODU0SDUyNi40ODA0VjE3NS40NTE4SDUzOC4zMjQyVjM0MC43Njg5QzUzOC4zMjQyIDM0Ni44MTggNTM2LjgxNjQgMzUxLjcyOTEgNTMzLjgxIDM1NS41MTM2IDUzMC40MjYzIDM2MC40MjY2IDUyNi4wMTE2IDM2Mi44ODYgNTIwLjU1OCAzNjIuODg2Wk01MjYuNDgwNCAyNDkuNDYxNkg1MTQuNjM1M1YzNTAuOTc3QzUxNS45NDg5IDM1MC45NzcgNTE3LjEyNDcgMzUwLjkyODMgNTE4LjE2MDggMzUwLjgzNDcgNTE5LjE5MiAzNTAuNzM3NSA1MTkuOTk1NiAzNTAuNjkzNiA1MjAuNTU4IDM1MC42OTM2IDUyMi4wNTk4IDM1MC42OTM2IDUyMy40MTk5IDM0OS43NDYgNTI0LjY0ODcgMzQ3Ljg1NjQgNTI1Ljg2MzYgMzQ1Ljk2NzQgNTI2LjQ4MDQgMzQzLjUwNiA1MjYuNDgwNCAzNDAuNDg3MVoiLz4NCjxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDAsNTk1LjI3NTYpIiBkPSJNNjExLjM0MjkgMzYyLjg4Nkg1OTMuNTc5NlYxNzUuNDUxOEg2MDUuNzA2OFYyMzYuNzAzMUg2MTEuMzQyOUM2MTYuNjA1MiAyMzYuNzAzMSA2MjEuMTEzNCAyMzkuMTUzNyA2MjQuODgwMSAyNDQuMDcxOCA2MjcuODg0NSAyNDguNjEyIDYyOS4zODk0IDI1My42MTY5IDYyOS4zODk0IDI1OS4xMDE0VjM0MC43Njg5QzYyOS4zODk0IDM0Ni42Mjg0IDYyNy44ODQ1IDM1MS42MzY3IDYyNC44ODAxIDM1NS43OTkxIDYyMS4xMTM0IDM2MC41MjA3IDYxNi42MDUyIDM2Mi44ODYgNjExLjM0MjkgMzYyLjg4NlpNNjE3LjU0NzQgMzI2LjMwOFYyNTkuMTAxNEM2MTcuNTQ3NCAyNTYuMjY1OSA2MTYuODg1NSAyNTMuOTAxOCA2MTUuNTcyNSAyNTIuMDEyOCA2MTQuMjU3MiAyNTAuMTIzMiA2MTIuODQ3OCAyNDkuMTc4NCA2MTEuMzQyOSAyNDkuMTc4NCA2MTAuOTY1OSAyNDkuMTc4NCA2MTAuMjE1IDI0OS4xMjk5IDYwOS4wOTA1IDI0OS4wMzUyIDYwNy45NjI2IDI0OC45MzcyIDYwNi44MzQ3IDI0OC44OTQ0IDYwNS43MDY4IDI0OC44OTQ0VjM1MC45NzdINjExLjM0MjlDNjEyLjg0NzggMzUwLjk3NyA2MTQuMjU3MiAzNDkuOTg1MiA2MTUuNTcyNSAzNDguMDAwNCA2MTYuODg1NSAzNDYuMDE1NiA2MTcuNTQ3NCAzNDMuNjAzMyA2MTcuNTQ3NCAzNDAuNzY4OVoiLz4NCjxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDAsNTk1LjI3NTYpIiBkPSJNNjYyLjY1NzEgMzM2LjIzMDlWMzQwLjQ4NzFDNjYyLjY1NzEgMzQzLjUwNiA2NjMuMjYzMSAzNDUuOTY3NCA2NjQuNDkyIDM0Ny44NTY0IDY2NS43MTA2IDM0OS43NDYgNjY3LjA3NDkgMzUwLjY5MzYgNjY4LjU3OTggMzUwLjY5MzZINjc3Ljg4NkM2ODAuMzIzNyAzNTAuNjkzNiA2ODMuMTQ0OCAzNTAuNzg3NCA2ODYuMzQyOCAzNTAuOTc3VjM2Mi44ODZINjY4LjU3OThDNjYzLjMxNzYgMzYyLjg4NiA2NTguODk2OSAzNjAuNTIwNyA2NTUuMzI3NiAzNTUuNzk5MSA2NTIuNTA2OCAzNTEuODI2MyA2NTAuOTEgMzQ2LjgxOCA2NTAuNTMzIDM0MC43Njg5VjE5Ny41NjZDNjUwLjkxIDE5MS43MDkxIDY1Mi41MDY4IDE4Ni42OTUxIDY1NS4zMjc2IDE4Mi41NDAxIDY1OC44OTY5IDE3Ny44MTUxIDY2My4zMTc2IDE3NS40NTE4IDY2OC41Nzk4IDE3NS40NTE4SDY4Ni4zNDI4VjE4Ny42NDMxSDY2OC41Nzk4QzY2Ny4wNzQ5IDE4Ny42NDMxIDY2NS43MTA2IDE4OC42MzggNjY0LjQ5MiAxOTAuNjE5NCA2NjMuMjYzMSAxOTIuNjA2NSA2NjIuNjU3MSAxOTUuMDE3MSA2NjIuNjU3MSAxOTcuODUzNFYyMzYuOTg1NEg2ODYuOTA1NVYyNDkuNDYxNkg2NjIuNjU3MVoiLz4NCjxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDAsNTk1LjI3NTYpIiBkPSJNNzExLjk5OTUgMzU1Ljc5OTFDNzA4Ljk4OTcgMzUxLjI2MjIgNzA3LjQ4OTYgMzQ2LjI0OTEgNzA3LjQ4OTYgMzQwLjc2ODlWMjM2Ljk4NTRINzMxLjQ1MjVWMTk3Ljg1MzRDNzMxLjQ1MjUgMTk1LjAxNzEgNzMwLjc5MjMgMTkyLjYwNjUgNzI5LjQ3ODggMTkwLjYxOTQgNzI4LjE2NTUgMTg4LjYzOCA3MjYuNzU1OCAxODcuNjQzMSA3MjUuMjUxMiAxODcuNjQzMUg3MTkuNjEwNVYyMjQuNTA1Nkg3MDcuNDg5NlYxNzUuNDUxOEg3MjUuMjUxMkM3MzAuNzAxNiAxNzUuNDUxOCA3MzUuMjEzIDE3Ny44MTUxIDczOC43ODggMTgyLjU0MDEgNzQxLjc5MTYgMTg3LjQ1MzQgNzQzLjI5OTQgMTkyLjQ2NTkgNzQzLjI5OTQgMTk3LjU2NlYyNDkuMTc4NEg3MTkuNjEwNVYzNDAuNDg3MUM3MTkuNjEwNSAzNDMuNTA2IDcyMC4yMjA4IDM0NS45Njc0IDcyMS40NDU0IDM0Ny44NTY0IDcyMi42NjgzIDM0OS43NDYgNzIzLjkzNDggMzUwLjY5MzYgNzI1LjI1MTIgMzUwLjY5MzYgNzI1LjgxNjQgMzUwLjY5MzYgNzI2LjY2NCAzNTAuNzM3NSA3MjcuNzg4NSAzNTAuODM0NyA3MjguOTE5NSAzNTAuOTI4MyA3MzAuMDQ0MyAzNTAuOTc3IDczMS4xNzUzIDM1MC45NzdWMjYxLjY1NDVINzQzLjI5OTRWMzYyLjg4Nkg3MjUuMjUxMkM3MTkuOTg3NSAzNjIuODg2IDcxNS41NzExIDM2MC41MjA3IDcxMS45OTk1IDM1NS43OTkxIi8+DQo8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSwwLDU5NS4yNzU2KSIgZD0iTTc5NS43NCAzNTUuNTEzNkM3OTIuMzU2IDM2MC40MjY2IDc4Ny45Mzg1IDM2Mi44ODYgNzgyLjQ4NzggMzYyLjg4Nkg3NjQuNDQxM1YxNzUuNDUxOEg3NzYuNTY1NFYyMzYuOTg1NEg3ODguNDA2MlYxNzUuNDUxOEg4MDAuMjUxMVYzNDAuNzY4OUM4MDAuMjUxMSAzNDYuODE4IDc5OC43NDMzIDM1MS43MjkxIDc5NS43NCAzNTUuNTEzNlpNNzg4LjQwNjIgMjQ5LjQ2MTZINzc2LjU2NTRWMzUwLjk3N0M3NzcuODc4NiAzNTAuOTc3IDc3OS4wNTMzIDM1MC45MjgzIDc4MC4wOTA1IDM1MC44MzQ3IDc4MS4xMjAxIDM1MC43Mzc1IDc4MS45MjU0IDM1MC42OTM2IDc4Mi40ODc4IDM1MC42OTM2IDc4My45ODY3IDM1MC42OTM2IDc4NS4zNTI4IDM0OS43NDYgNzg2LjU3NTYgMzQ3Ljg1NjQgNzg3Ljc5NjUgMzQ1Ljk2NzQgNzg4LjQwNjIgMzQzLjUwNiA3ODguNDA2MiAzNDAuNDg3MVoiLz4NCjxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDAsNTk1LjI3NTYpIiBkPSJNNDIwLjc0MjggNDk1LjYxOTlDNDA4LjY0NzYgNDk2LjI1OTEgMzEzLjk2NjggNDkzLjMwMzIgMjQzLjE2NTUgNDU2LjUxMTdMMjY5LjA4MTMgMzkyLjU4ODJINTcyLjQwMjhMNTk4LjMyMDYgNDU2LjUxMTdDNTI3LjUxOTMgNDkzLjMwMzIgNDMyLjgzNzEgNDk2LjI1OTEgNDIwLjc0MjggNDk1LjYxOTlaTTU2Ny4xOTM5IDM5Ny43ODEzSDI3NS41ODMxTDI1Mi4yNzY0IDQ1NS4yNjQyQzMxNS45NDQ4IDQ4OC4zNTA1IDQxMy43Mzc1IDQ5MS4wMTExIDQyNC42MTMyIDQ5MC40MzIzIDQzNS40OTE3IDQ5MS4wMTExIDUyNi44MzAyIDQ4OC4zNTA1IDU5MC41MDIgNDU1LjI2NDJaTTI2MC4yNTI1IDQ1Mi40MTM0QzI2MC42NjQxIDQ1Mi45MDE1IDI2MS4yOTI4IDQ1My4yODk2IDI2MS44Nzg3IDQ1My41MTg5IDI2Mi40NTU2IDQ1My43NDQ5IDI2My4wMzY3IDQ1My44NTU0IDI2My42NTcyIDQ1My44MzYxIDI2My43MTA1IDQ1My44MzQ3IDI2My43NTU2IDQ1My44MzA1IDI2My44MDgzIDQ1My44MjMxIDI2NC4xNjI2IDQ1My43NzI5IDI2NC40Njg1IDQ1My42NTcgMjY0LjczMDcgNDUzLjM4MjMgMjY0Ljg1IDQ1My4yNTczIDI2NC45MzI4IDQ1My4xMzA5IDI2NS4wMDExIDQ1Mi45NzE2IDI2Ni4xOTQ1IDQ1MC4xNjUzIDI2Ny4yNzQ1IDQ0Ny4yMTY5IDI2OC40MDEzIDQ0NC4zNzIxIDI2OC40MzM5IDQ0NC4yOTA1IDI2OC40NTUxIDQ0NC4yMTg1IDI2OC40NzIxIDQ0NC4xMzIgMjY4LjY0ODQgNDQzLjI0NTMgMjY4Ljc4NDggNDQyLjIwNzMgMjY4Ljc4OSA0NDEuMzA1IDI2OC44MzYxIDQ0MC40ODM4IDI2OC43NjEgNDM5LjU2NTEgMjY4LjA5MTEgNDM4Ljk5NDUgMjY2Ljk1NSA0MzguMDI3NiAyNjUuNjkwNSA0MzguOTUwNiAyNjQuOTY4MiA0MzkuOTA4OSAyNjQuODU0MyA0NDAuMDE4OSAyNjQuNzQ3NyA0NDAuMTQ0NSAyNjQuNjU0MSA0NDAuMjg2OCAyNjQuNDczMyA0NDAuNTYwMSAyNjQuMjk5IDQ0MC44Mzg3IDI2NC4xMjcyIDQ0MS4xMTc2IDI2My44OTA4IDQ0MS40OTkyIDI2My42NiA0NDEuODc5IDI2My40Mjg0IDQ0Mi4yNjI4IDI2My4zODc2IDQ0Mi4zMyAyNjMuMzU5NiA0NDIuMzg3IDI2My4zMjk1IDQ0Mi40NTk4IDI2Mi4xOTE0IDQ0NS4yNjU2IDI2MS4xMTQgNDQ4LjA5OCAyNTkuOTc5MiA0NTAuOTA1NCAyNTkuOTY2MiA0NTAuOTM2MyAyNTkuOTU3NCA0NTAuOTYxMiAyNTkuOTQ3MiA0NTAuOTkzMyAyNTkuNzc3MSA0NTEuNTA0OSAyNTkuOTAyNyA0NTIuMDE3MSAyNjAuMjUyNSA0NTIuNDEzNFpNMjkxLjQzNjIgNDYyLjc5MTFDMjkxLjg0NjYgNDYzLjI4NDkgMjkyLjQ4MyA0NjMuNjc2MyAyOTMuMDcwNiA0NjMuOTA0OCAyOTMuNjUyNiA0NjQuMTMxNiAyOTQuMjIxOCA0NjQuMjQxMyAyOTQuODIyNyA0NjQuMjE5NCAyOTUuMTY4MyA0NjQuMjE5NCAyOTUuNTI2NiA0NjQuMTAzMiAyOTUuNzk1IDQ2My44ODU1IDI5NS45ODQxIDQ2My43MzE5IDI5Ni4xMTE2IDQ2My41NTgxIDI5Ni4yMDMyIDQ2My4zMzA4IDI5Ny4zNDc1IDQ2MC40NzkxIDI5OC40NjA0IDQ1Ny42MTE5IDI5OS41OTI2IDQ1NC43NTQ4IDI5OS42MjUyIDQ1NC42NzMyIDI5OS42NDY0IDQ1NC42MDA5IDI5OS42NjM0IDQ1NC41MTQ1IDI5OS44Mzk3IDQ1My42Mjg2IDI5OS45NzYxIDQ1Mi41OTYgMjk5Ljk4MDkgNDUxLjY5MzcgMzAwLjAyOTQgNDUwLjg3MTEgMjk5Ljk1MTcgNDQ5Ljk1MSAyOTkuMjgxIDQ0OS4zNzk4IDI5OC4xNDc3IDQ0OC40MTUxIDI5Ni44Nzk4IDQ0OS4zMzM5IDI5Ni4xNjA0IDQ1MC4yOTMxIDI5Ni4wNDQ3IDQ1MC40MDQyIDI5NS45Mzc2IDQ1MC41MzIxIDI5NS44NDM1IDQ1MC42NzU1IDI5NS42NjM3IDQ1MC45NDg4IDI5NS40OTA2IDQ1MS4yMjY4IDI5NS4zMTkxIDQ1MS41MDQ5IDI5NS4wODI5IDQ1MS44ODY3IDI5NC44NTIyIDQ1Mi4yNjYzIDI5NC42MjA2IDQ1Mi42NTEgMjk0LjU3OTggNDUyLjcxODEgMjk0LjU1MTcgNDUyLjc3NTEgMjk0LjUyMTcgNDUyLjg0OCAyOTMuMzgyNyA0NTUuNjU0MyAyOTIuMjc0MSA0NTguNDg4NiAyOTEuMTY1NyA0NjEuMzA4IDI5MS4xNDUzIDQ2MS4zNjAxIDI5MS4xMzAzIDQ2MS40MDYzIDI5MS4xMTY3IDQ2MS40NTg1IDI5MC45ODYzIDQ2MS45NDU4IDI5MS4xMTI0IDQ2Mi40MTc3IDI5MS40MzYyIDQ2Mi43OTExWk0zMjMuMjIzIDQ3MC45NzkyQzMyMy42NzQ5IDQ3MS40Mjc3IDMyNC4zMzkzIDQ3MS43NTQ1IDMyNC45NDA4IDQ3MS45Mjg4IDMyNS41MzgxIDQ3Mi4xMDIgMzI2LjEyODggNDcyLjE1ODEgMzI2Ljc0NzMgNDcyLjA4MTMgMzI3LjEyMDkgNDcyLjAzNDYgMzI3LjQ4NDYgNDcxLjg2NTYgMzI3LjczNTIgNDcxLjU3NjggMzI3Ljg2NTYgNDcxLjQyNTcgMzI3Ljk1MDkgNDcxLjI3MzIgMzI4LjAwOTkgNDcxLjA4MTUgMzI4LjkxNDQgNDY4LjE1NDUgMzI5Ljc2MjYgNDY1LjE1NjYgMzMwLjYwODQgNDYyLjIwODMgMzMwLjYyNzQgNDYyLjEzOTcgMzMwLjY0MDQgNDYyLjA3OTggMzMwLjY0OTIgNDYyLjAwOSAzMzAuNzYyNiA0NjEuMTU3NyAzMzAuNzg1MyA0NTkuOTg2MiAzMzAuNzEyNyA0NTkuMTMyMSAzMzAuNjg0MSA0NTguMzA4MSAzMzAuNTI0NSA0NTcuMzk3NiAzMjkuODAyOCA0NTYuODkxNiAzMjguNTkzNSA0NTYuMDQyOSAzMjcuNDA3NSA0NTcuMDc1IDMyNi43ODE0IDQ1OC4wOTA0IDMyNi42NzcgNDU4LjIxMDYgMzI2LjU4MjkgNDU4LjM0NTggMzI2LjUwMjEgNDU4LjQ5NjMgMzI2LjM0NzQgNDU4Ljc4NDYgMzI2LjE5OTEgNDU5LjA3ODUgMzI2LjA1MjkgNDU5LjM3MTYgMzI1Ljg1MjIgNDU5Ljc3MzMgMzI1LjY1ODMgNDYwLjE3MSAzMjUuNDYyNCA0NjAuNTc1NSAzMjUuNDI0MSA0NjAuNjUxNSAzMjUuNDAwMyA0NjAuNzE0MSAzMjUuMzc3MSA0NjAuNzk1NyAzMjQuNTIzNiA0NjMuNzA0OSAzMjMuNjU0NSA0NjYuNTk4NiAzMjIuODIzNiA0NjkuNDg1MSAzMjIuNjM5MSA0NzAuMDQxMiAzMjIuODA2MyA0NzAuNTg2NiAzMjMuMjIzIDQ3MC45NzkyWk0zNTQuODk1NyA0NzcuNTQ0OEMzNTUuMzgwNCA0NzcuOTYxNSAzNTYuMDY2NiA0NzguMjQxOSAzNTYuNjgwOSA0NzguMzcxNyAzNTcuMjkwMSA0NzguNTAwNyAzNTcuODgyIDQ3OC41MTM3IDM1OC41MzA1IDQ3OC4zODMzIDM1OC45MjQ1IDQ3OC4yOTI2IDM1OS4yNzQgNDc4LjA4NDUgMzU5LjQ5ODggNDc3LjczMTEgMzU5LjU4NDcgNDc3LjU5NjQgMzU5LjYzODkgNDc3LjQ2ODYgMzU5LjY3NTcgNDc3LjMxMzUgMzYwLjM4NzggNDc0LjM0NzkgMzYxLjAwOTcgNDcxLjI1OTMgMzYxLjYzOTMgNDY4LjI2NyAzNjEuNjU5NyA0NjguMTY4OSAzNjEuNjY4OCA0NjguMDgzMSAzNjEuNjY3OSA0NjguMDE2NCAzNjEuNjkxNyA0NjcuMTAxNyAzNjEuNjY4OCA0NjYuMDk1MSAzNjEuNTI1MyA0NjUuMTg5NCAzNjEuNDM4NiA0NjQuMzcxNyAzNjEuMjE2MSA0NjMuNDc3IDM2MC40NjM1IDQ2My4wMjQ2IDM1OS4yMjAyIDQ2Mi4yNzY5IDM1OC4wODA3IDQ2My4zODYzIDM1Ny41MzI0IDQ2NC40MzI5IDM1Ny40MzYxIDQ2NC41NjEzIDM1Ny4zNTE2IDQ2NC43MDQyIDM1Ny4yODEzIDQ2NC44NjE1IDM1Ny4xNDc1IDQ2NS4xNiAzNTcuMDIxNiA0NjUuNDYyNyAzNTYuODk2MSA0NjUuNzY0OSAzNTYuNzI1NCA0NjYuMTc5IDM1Ni41NjMgNDY2LjU4MjEgMzU2LjM5NTcgNDY2Ljk5NzQgMzU2LjM1ODkgNDY3LjA4NDcgMzU2LjMzOTYgNDY3LjE0OTMgMzU2LjMyMTIgNDY3LjIzNjMgMzU1LjY4MzQgNDcwLjE5MDkgMzU1LjA1MjcgNDczLjE1NCAzNTQuMzg2OCA0NzYuMTAxNCAzNTQuMzc0NiA0NzYuMTUzIDM1NC4zNjc4IDQ3Ni4xOTUgMzU0LjM2MTYgNDc2LjI0NzEgMzU0LjI5OSA0NzYuNzYyMiAzNTQuNTAzNiA0NzcuMjIzNCAzNTQuODk1NyA0NzcuNTQ0OFpNMzkyLjE3NTggNDY5LjQ4MDNDMzkyLjAxIDQ2OC42NzM1IDM5MS43MDA3IDQ2Ny44MDU1IDM5MC45MDY3IDQ2Ny40Mjg1IDM4OS41NzI0IDQ2Ni43OTQxIDM4OC41NzU1IDQ2OC4wMTIyIDM4OC4xMjcxIDQ2OS4xMTkxIDM4OC4wNDQ2IDQ2OS4yNTUyIDM4Ny45NzM0IDQ2OS40MDU0IDM4Ny45MTg3IDQ2OS41NjgxIDM4Ny44MTUgNDY5Ljg3ODUgMzg3LjcxOCA0NzAuMTkyMyAzODcuNjIzMSA0NzAuNTA2MSAzODcuNDkwNyA0NzAuOTQxNSAzODcuMzQ3MiA0NzEuMzkxNCAzODcuMjMxMyA0NzEuODMxMyAzODcuMjEyOSA0NzEuODk5OSAzODcuMjAxMyA0NzEuOTU5NyAzODcuMTkzNiA0NzIuMDI1OCAzODYuODQyMSA0NzUuMDM3OSAzODYuNDQ3NSA0NzguMDU2NSAzODYuMTE4NCA0ODEuMTMxMiAzODYuMDg1IDQ4MS42Njk1IDM4Ni4zMzc1IDQ4Mi4xMzIxIDM4Ni43NzM4IDQ4Mi40MjI3IDM4Ny4yOTYyIDQ4Mi43OTI5IDM4OC4wMDY5IDQ4My4wMDI5IDM4OC42MzE2IDQ4My4wNzI0IDM4OS4yNDgyIDQ4My4xNDEgMzg5LjgzOCA0ODMuMDk0OCAzOTAuNDMzMyA0ODIuOTE0MiAzOTAuNzE5NiA0ODIuODI3NyAzOTEuMDA4MiA0ODIuNjUyOSAzOTEuMjAwMSA0ODIuNDI0NyAzOTEuMzgwNCA0ODIuMjEwNiAzOTEuNDgwMiA0ODEuOTc5OSAzOTEuNTEzNiA0ODEuNzAwNCAzOTEuODc2NyA0NzguNjQ2MSAzOTIuMjQyMSA0NzUuNTg4MSAzOTIuNTg2MiA0NzIuNTMxNyAzOTIuNTk1OSA0NzIuNDQ1OSAzOTIuNTk3OSA0NzIuMzcxOSAzOTIuNTkyMiA0NzIuMjg2IDM5Mi41MzI0IDQ3MS4zNzk1IDM5Mi40MDMxIDQ3MC4zNTczIDM5Mi4xNzU4IDQ2OS40ODAzWk01NzYuMjgzNSA0MzkuODY1QzU3NS43NTk5IDQzOS4yMzk3IDU3NS4wNzMxIDQzOC42MjQzIDU3NC4yMDQ1IDQzOC42NzA1IDU3Mi43NTM4IDQzOC43NDY1IDU3Mi40NDExIDQ0MC4yMjA4IDU3Mi41MzEgNDQxLjQwMTcgNTcyLjUzMjQgNDQxLjU5NjcgNTcyLjU1NyA0NDEuNzk1MSA1NzIuNTg5OSA0NDEuOTg2MiA1NzIuNjQ1OCA0NDIuMzEwMiA1NzIuNzEwNyA0NDIuNjMzIDU3Mi43NzcgNDQyLjk1NTEgNTcyLjg2NjMgNDQzLjM5NSA1NzIuOTU4NCA0NDMuODIzNiA1NzMuMDUzNCA0NDQuMjYyNCA1NzMuMDcxMiA0NDQuMzUxNyA1NzMuMDkxNyA0NDQuNDE2IDU3My4xMjMxIDQ0NC40OTQzIDU3NC4yNDU2IDQ0Ny4zMDg4IDU3NS4zMjc2IDQ1MC4xNTUxIDU3Ni40NzY4IDQ1Mi45NTUxIDU3Ni40OTQ2IDQ1Mi45OTc2IDU3Ni41MTA4IDQ1My4wMzM0IDU3Ni41MzA2IDQ1My4wNzExIDU3Ni43NzE5IDQ1My41MzIgNTc3LjE5NTcgNDUzLjc5MDggNTc3LjY3NSA0NTMuODMxMyA1NzguMjg5IDQ1My45MTM1IDU3OS4wMzc5IDQ1My43NTU2IDU3OS42MzMyIDQ1My41MDkzIDU4MC4yMDg5IDQ1My4yNzA5IDU4MC43MDM4IDQ1Mi45NTIzIDU4MS4xNDE1IDQ1Mi41MDQ3IDU4MS4xNzQ5IDQ1Mi40NzEgNTgxLjIwMTYgNDUyLjQ0MDkgNTgxLjIzMDggNDUyLjQwNDMgNTgxLjQyMTMgNDUyLjE2NjggNTgxLjU1NTEgNDUxLjkyMDUgNTgxLjU5NjIgNDUxLjYwNjcgNTgxLjYyODIgNDUxLjM2MDEgNTgxLjYwMDEgNDUxLjE0MDkgNTgxLjUwNzQgNDUwLjkxMTYgNTgwLjM2MjUgNDQ4LjA2MzcgNTc5LjIzMzggNDQ1LjIwNjMgNTc4LjA5OTEgNDQyLjM1MzUgNTc4LjA2ODQgNDQyLjI3NzMgNTc4LjAzNyA0NDIuMjE0MSA1NzcuOTkzOSA0NDIuMTQ0MSA1NzcuNTI5NiA0NDEuMzg0NyA1NzYuODkxOCA0NDAuNTExOSA1NzYuMjgzNSA0MzkuODY1Wk01NDUuMTAwNCA0NTAuMjU2NUM1NDQuNTcyNiA0NDkuNjIwNyA1NDMuODczNSA0NDguOTk4OCA1NDIuOTkyOCA0NDkuMDU5NyA1NDEuNTU5NiA0NDkuMTU4NyA1NDEuMjUzOCA0NTAuNjE3MSA1NDEuMzQxOSA0NTEuNzg5OCA1NDEuMzQzOSA0NTEuOTg0MyA1NDEuMzY4NiA0NTIuMTgxOCA1NDEuNDAyIDQ1Mi4zNzIgNTQxLjQ1NzMgNDUyLjY5NDkgNTQxLjUyMTkgNDUzLjAxNzUgNTQxLjU4NjggNDUzLjMzODQgNTQxLjY3NjQgNDUzLjc3ODMgNTQxLjc2OCA0NTQuMjA3NSA1NDEuODYyMSA0NTQuNjQ2MyA1NDEuODc5OSA0NTQuNzM2MSA1NDEuOTAwMyA0NTQuODAxNiA1NDEuOTMxOCA0NTQuODc5OCA1NDMuMDUyMSA0NTcuNjg5NSA1NDQuMTcwNiA0NjAuNTA0MSA1NDUuMjc1MyA0NjMuMzE5NyA1NDUuMzAzOSA0NjMuMzk0IDU0NS4zMzQgNDYzLjQ1NTIgNTQ1LjM3NDIgNDYzLjUyMjQgNTQ1LjYyMTQgNDYzLjkzODUgNTQ2LjAxODggNDY0LjE2OTggNTQ2LjQ4OTEgNDY0LjIxNzIgNTQ3LjEyNCA0NjQuMjkzNCA1NDcuODU0OCA0NjQuMTM1NSA1NDguNDM4NSA0NjMuODk1MSA1NDkuMDE1MyA0NjMuNjU3NiA1NDkuNTEyNSA0NjMuMzM3IDU0OS45NTIyIDQ2Mi44ODk0IDU1MC4wMTM3IDQ2Mi44MjY4IDU1MC4wNjEzIDQ2Mi43Njg0IDU1MC4wODg4IDQ2Mi43MjczIDU1MC4yODk1IDQ2Mi40NTIgNTUwLjQxNDUgNDYyLjE3MzEgNTUwLjQxNDUgNDYxLjgxMjggNTUwLjQxNDUgNDYxLjYzMTQgNTUwLjM4NSA0NjEuNDc2MyA1NTAuMzE4NyA0NjEuMzA4IDU0OS4xOTUgNDU4LjQ0ODEgNTQ4LjA0OTMgNDU1LjU5NTMgNTQ2LjkxMzcgNDUyLjc0MDMgNTQ2Ljg4MzEgNDUyLjY2NCA1NDYuODUxNiA0NTIuNjAwOCA1NDYuODA4OCA0NTIuNTMwOCA1NDYuMzQ4NSA0NTEuNzc4MiA1NDUuNzAwNSA0NTAuODk5NCA1NDUuMTAwNCA0NTAuMjU2NVpNNTE0LjQ4MTEgNDU4LjAyNjZDNTE0LjAwOTQgNDU3LjM0NzQgNTEzLjM3NzkgNDU2LjY2ODUgNTEyLjQ5MjMgNDU2LjY0NzggNTExLjAxODkgNDU2LjYxMjEgNTEwLjU5NjIgNDU4LjEwOTYgNTEwLjYxOTUgNDU5LjMwNSA1MTAuNTk3MSA0NTkuNDYyOSA1MTAuNTkwOCA0NTkuNjI5MyA1MTAuNjA1MyA0NTkuODAwOCA1MTAuNjMxMSA0NjAuMTI3MSA1MTAuNjY2IDQ2MC40NTM5IDUxMC43MDE0IDQ2MC43Nzg3IDUxMC43NTA3IDQ2MS4yMjkyIDUxMC43OTkyIDQ2MS42ODUgNTEwLjg1OTMgNDYyLjEzNCA1MTAuODY4NiA0NjIuMjA3NCA1MTAuODgxNyA0NjIuMjY5MiA1MTAuOTAyMSA0NjIuMzQwMSA1MTEuNzUzNiA0NjUuMjUwMSA1MTIuNjA0MyA0NjguMTYyNyA1MTMuNDY5NCA0NzEuMDY4NSA1MTMuNDc4MiA0NzEuMDk4IDUxMy40ODY0IDQ3MS4xMjM1IDUxMy40OTc1IDQ3MS4xNTI0IDUxMy42ODEyIDQ3MS42NDkzIDUxNC4wODI2IDQ3MS45NjYgNTE0LjU5MTEgNDcyLjA2NDkgNTE1LjIxODcgNDcyLjE5OTUgNTE1Ljk2MDggNDcyLjEwODggNTE2LjU2NTcgNDcxLjkyMiA1MTcuMTU4NCA0NzEuNzM4NiA1MTcuNjgyIDQ3MS40NjY4IDUxOC4xNTc5IDQ3MS4wNjIzIDUxOC4xOTUzIDQ3MS4wMzA4IDUxOC4yMjYyIDQ3MS4wMDEzIDUxOC4yNjExIDQ3MC45NjU2IDUxOC40NjI0IDQ3MC43NTUzIDUxOC42MTYgNDcwLjUyMzQgNTE4LjY4NzEgNDcwLjIzIDUxOC43NDM4IDQ2OS45OTQ3IDUxOC43NDEgNDY5Ljc3OTYgNTE4LjY3NzUgNDY5LjU0NTQgNTE3Ljg3NzMgNDY2LjU5NDMgNTE2LjkyNTQgNDYzLjYxOTMgNTE2LjA1OTcgNDYwLjY3ODQgNTE2LjAzNTkgNDYwLjU5NjggNTE2LjAwOTggNDYwLjUyOTMgNTE1Ljk3MTYgNDYwLjQ1MyA1MTUuNTczNiA0NTkuNjUyIDUxNS4wMjU0IDQ1OC43MzI0IDUxNC40ODExIDQ1OC4wMjY2Wk00ODYuNDYyIDQ3Ny42MzEzQzQ4Ni43NjUxIDQ3Ny40MTkyIDQ4Ny4wMDY5IDQ3Ny4xMDA2IDQ4Ny4wOTQyIDQ3Ni43MzcyIDQ4Ny4xNDg5IDQ3Ni41MTI3IDQ4Ny4xNDggNDc2LjMwODkgNDg3LjA5NyA0NzYuMDk3NCA0ODYuNDA5MyA0NzMuMTA3MiA0ODUuODA3MiA0NzAuMDkgNDg1LjEyMSA0NjcuMDk5MSA0ODUuMTAyIDQ2Ny4wMTYxIDQ4NS4wNzg3IDQ2Ni45NDYxIDQ4NS4wNDY3IDQ2Ni44Njk4IDQ4NC42OTI5IDQ2Ni4wMzMzIDQ4NC4yMzg4IDQ2NS4xMTIxIDQ4My43MzQzIDQ2NC4zNTg2IDQ4My4zMTU5IDQ2My42NDg4IDQ4Mi43NDUgNDYyLjkzMTEgNDgxLjg2OTEgNDYyLjgzNzMgNDgwLjM5MjIgNDYyLjY3ODUgNDc5Ljg1MzYgNDY0LjE1NjIgNDc5Ljc5NDEgNDY1LjM1NjQgNDc5Ljc2MDcgNDY1LjUxMTUgNDc5Ljc0MzcgNDY1LjY3NjQgNDc5Ljc0NTEgNDY1Ljg0NzkgNDc5Ljc0ODUgNDY2LjE3NDggNDc5Ljc2MDEgNDY2LjUwMyA0NzkuNzcyMyA0NjYuODI5OSA0NzkuNzg5MyA0NjcuMjgzNyA0NzkuODA1MiA0NjcuNzQzMiA0NzkuODMyOSA0NjguMTk2NCA0NzkuODM3MiA0NjguMjY2NSA0NzkuODQ1NCA0NjguMzI2IDQ3OS44NTk2IDQ2OC4zOTQ5IDQ4MC40NzIyIDQ3MS4zMDY5IDQ4MS4wODA1IDQ3NC4zODI4IDQ4MS43OTc0IDQ3Ny4yNTk5IDQ4MS44OTgzIDQ3Ny44MTQ3IDQ4Mi4yOTU3IDQ3OC4yMjA2IDQ4Mi44Mjg5IDQ3OC4zNTkyIDQ4My40NTExIDQ3OC41NDk0IDQ4NC4yIDQ3OC41MTA5IDQ4NC44Mjc2IDQ3OC4zNjYgNDg1LjQyNjggNDc4LjIyNzQgNDg1Ljk2MjMgNDc3Ljk5NDcgNDg2LjQ2MiA0NzcuNjMxM1pNNDUzLjE0OTkgNDY5LjAxOTZDNDUyLjgwMDMgNDY4LjI3NDcgNDUyLjI5NzIgNDY3LjUwMzQgNDUxLjQzNjkgNDY3LjMyNTEgNDQ5Ljk5MDEgNDY3LjAyNDkgNDQ5LjMwODEgNDY4LjQ0MjggNDQ5LjEzMDYgNDY5LjYyNjUgNDQ5LjA4MjEgNDY5Ljc3NzYgNDQ5LjA0ODcgNDY5LjkzOTcgNDQ5LjAzMzcgNDcwLjExMDEgNDQ5LjAwNDIgNDcwLjQzNjkgNDQ4Ljk4NDMgNDcwLjc2NDkgNDQ4Ljk2NDggNDcxLjA5MjYgNDQ4LjkzODEgNDcxLjU0MDIgNDQ4LjkxNjMgNDcxLjk3OTYgNDQ4Ljg5NDIgNDcyLjQyOCA0NDguODg5NyA0NzIuNTEyNSA0NDguODkxNyA0NzIuNTc1NyA0NDguOTAxMyA0NzIuNjU5MyA0NDkuMjM5NyA0NzUuNjcxNyA0NDkuNTk4MyA0NzguNjk3MSA0NDkuOTcxNyA0ODEuNzAzOCA0NTAuMDQxNCA0ODIuMjY1NCA0NTAuNDAxMSA0ODIuNjg0OSA0NTAuOTE4NyA0ODIuODc3NCA0NTEuNTEyOSA0ODMuMTEwMSA0NTIuMjUzNSA0ODMuMTQ3OCA0NTIuODc3NCA0ODMuMDY4MSA0NTMuNDkzNCA0ODIuOTg5IDQ1NC4wNTYxIDQ4Mi44MDg1IDQ1NC41OTQxIDQ4Mi40OTIxIDQ1NC42NjUgNDgyLjQ1MDIgNDU0LjcyMzEgNDgyLjQwOTEgNDU0Ljc1ODUgNDgyLjM3NzMgNDU0Ljk4NTMgNDgyLjE5ODIgNDU1LjE1NCA0ODIuMDE2OCA0NTUuMjY3OSA0ODEuNzMzOSA0NTUuMzU4NiA0ODEuNTA4OCA0NTUuMzg3NSA0ODEuMjk1OSA0NTUuMzU4NiA0ODEuMDU1IDQ1NC45OTgzIDQ3OC4wMDM1IDQ1NC42MjMzIDQ3NC45NTU3IDQ1NC4yNjUgNDcxLjkwNDIgNDU0LjI1MzQgNDcxLjgwMzggNDU0LjIzNTUgNDcxLjcyMjcgNDU0LjIwOTcgNDcxLjY0NDUgNDUzLjkzNTEgNDcwLjc3NCA0NTMuNTc5MyA0NjkuODIzNSA0NTMuMTQ5OSA0NjkuMDE5NlpNNDE4LjgwNTYgNDg0LjU0MTZDNDE5LjM2NjMgNDg0Ljg0OCA0MjAuMTAwNyA0ODQuOTc0MSA0MjAuNzI4OSA0ODQuOTcxNiA0MjEuMzQ5NyA0ODQuOTY4OCA0MjEuOTMyOCA0ODQuODU1NCA0MjIuNTA0MiA0ODQuNjA2MiA0MjIuNTQ1OSA0ODQuNTg4MyA0MjIuNTgxMyA0ODQuNTcwNSA0MjIuNjE4NyA0ODQuNTQ5OCA0MjIuODkzNCA0ODQuMzk4NyA0MjMuMTEyIDQ4NC4yMTkgNDIzLjI2ODcgNDgzLjkyOTkgNDIzLjM4MyA0ODMuNzE4NCA0MjMuNDM1NCA0ODMuNTEyMyA0MjMuNDM1NCA0ODMuMjcxOSA0MjMuNDM1NCA0ODAuMTk3MiA0MjMuNDUzMyA0NzcuMTIzMyA0MjMuNDUzMyA0NzQuMDQ4NiA0MjMuNDUzMyA0NzMuOTUzOSA0MjMuNDQ1IDQ3My44NzI4IDQyMy40Mjk0IDQ3My43OTM3IDQyMy4yNjE5IDQ3Mi44OTcxIDQyMy4wMjMgNDcxLjkwOSA0MjIuNjk0NyA0NzEuMDU5NyA0MjIuNDM4NyA0NzAuMjc4MiA0MjIuMDMzNyA0NjkuNDUwOCA0MjEuMjAyMyA0NjkuMTY3MyA0MTkuNzk0MyA0NjguNjg4NSA0MTguOTUxOCA0NzAuMDExMiA0MTguNjMyMSA0NzEuMTY5NCA0MTguNTY2IDQ3MS4zMTQzIDQxOC41MTMzIDQ3MS40NzE2IDQxOC40Nzc5IDQ3MS42Mzk3IDQxOC40MDk2IDQ3MS45NTk3IDQxOC4zNTAzIDQ3Mi4yODI2IDQxOC4yOTE3IDQ3Mi42MDM3IDQxOC4yMTE3IDQ3My4wNDQ1IDQxOC4xMzg2IDQ3My40Njk3IDQxOC4wNjIgNDczLjkxMDUgNDE4LjA0MzYgNDc0LjAwMzggNDE4LjAzODggNDc0LjA2OSA0MTguMDM4OCA0NzQuMTYxNyA0MTguMDMyOSA0NzcuMTk1MyA0MTguMDEwMiA0ODAuMjI5NSA0MTguMDEwMiA0ODMuMjYzMSA0MTguMDEwMiA0ODMuODI4MSA0MTguMzE2OSA0ODQuMjg4MiA0MTguODA1NiA0ODQuNTQxNiIvPg0KPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsMCw1OTUuMjc1NikiIGQ9Ik00MTguMjc2MyA0MDIuNTE1NEM0MjEuNzQyNiA0MDEuMjc5OCA0MjIuNDQ4NCA0MDUuNjQzNyA0MjIuNDQ4NCA0MDUuNjQzN0w0MzcuMjYyNSA0NTYuMzQyIDQxNi43NjI2IDQwNy42NzI1QzQxNi43NjI2IDQwNy42NzI1IDQxNC44MDg0IDQwMy43NTMgNDE4LjI3NjMgNDAyLjUxNTRaTTQxOS4zMDE2IDQwNy4zMTYyQzQyMC4yNTE1IDQwNy4zMTYyIDQyMS4wMjM0IDQwNi41NDAxIDQyMS4wMjM0IDQwNS41ODYyIDQyMS4wMjM0IDQwNC42Mjc4IDQyMC4yNTE1IDQwMy44NTI4IDQxOS4zMDE2IDQwMy44NTI4IDQxOC4zNTMyIDQwMy44NTI4IDQxNy41Nzc5IDQwNC42Mjc4IDQxNy41Nzc5IDQwNS41ODYyIDQxNy41Nzc5IDQwNi41NDAxIDQxOC4zNTMyIDQwNy4zMTYyIDQxOS4zMDE2IDQwNy4zMTYyIi8+DQo8L3N2Zz4NCg=='); aspect-ratio: 834/409; }
.logo-mark { --src: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjIzNy4xNyA5My4wMiAzNjcuMTYgMTE1LjY3IiBmaWxsPSJjdXJyZW50Q29sb3IiPg0KPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsMCw1OTUuMjc1NikiIGQ9Ik00MjAuNzQyOCA0OTUuNjE5OUM0MDguNjQ3NiA0OTYuMjU5MSAzMTMuOTY2OCA0OTMuMzAzMiAyNDMuMTY1NSA0NTYuNTExN0wyNjkuMDgxMyAzOTIuNTg4Mkg1NzIuNDAyOEw1OTguMzIwNiA0NTYuNTExN0M1MjcuNTE5MyA0OTMuMzAzMiA0MzIuODM3MSA0OTYuMjU5MSA0MjAuNzQyOCA0OTUuNjE5OVpNNTY3LjE5MzkgMzk3Ljc4MTNIMjc1LjU4MzFMMjUyLjI3NjQgNDU1LjI2NDJDMzE1Ljk0NDggNDg4LjM1MDUgNDEzLjczNzUgNDkxLjAxMTEgNDI0LjYxMzIgNDkwLjQzMjMgNDM1LjQ5MTcgNDkxLjAxMTEgNTI2LjgzMDIgNDg4LjM1MDUgNTkwLjUwMiA0NTUuMjY0MlpNMjYwLjI1MjUgNDUyLjQxMzRDMjYwLjY2NDEgNDUyLjkwMTUgMjYxLjI5MjggNDUzLjI4OTYgMjYxLjg3ODcgNDUzLjUxODkgMjYyLjQ1NTYgNDUzLjc0NDkgMjYzLjAzNjcgNDUzLjg1NTQgMjYzLjY1NzIgNDUzLjgzNjEgMjYzLjcxMDUgNDUzLjgzNDcgMjYzLjc1NTYgNDUzLjgzMDUgMjYzLjgwODMgNDUzLjgyMzEgMjY0LjE2MjYgNDUzLjc3MjkgMjY0LjQ2ODUgNDUzLjY1NyAyNjQuNzMwNyA0NTMuMzgyMyAyNjQuODUgNDUzLjI1NzMgMjY0LjkzMjggNDUzLjEzMDkgMjY1LjAwMTEgNDUyLjk3MTYgMjY2LjE5NDUgNDUwLjE2NTMgMjY3LjI3NDUgNDQ3LjIxNjkgMjY4LjQwMTMgNDQ0LjM3MjEgMjY4LjQzMzkgNDQ0LjI5MDUgMjY4LjQ1NTEgNDQ0LjIxODUgMjY4LjQ3MjEgNDQ0LjEzMiAyNjguNjQ4NCA0NDMuMjQ1MyAyNjguNzg0OCA0NDIuMjA3MyAyNjguNzg5IDQ0MS4zMDUgMjY4LjgzNjEgNDQwLjQ4MzggMjY4Ljc2MSA0MzkuNTY1MSAyNjguMDkxMSA0MzguOTk0NSAyNjYuOTU1IDQzOC4wMjc2IDI2NS42OTA1IDQzOC45NTA2IDI2NC45NjgyIDQzOS45MDg5IDI2NC44NTQzIDQ0MC4wMTg5IDI2NC43NDc3IDQ0MC4xNDQ1IDI2NC42NTQxIDQ0MC4yODY4IDI2NC40NzMzIDQ0MC41NjAxIDI2NC4yOTkgNDQwLjgzODcgMjY0LjEyNzIgNDQxLjExNzYgMjYzLjg5MDggNDQxLjQ5OTIgMjYzLjY2IDQ0MS44NzkgMjYzLjQyODQgNDQyLjI2MjggMjYzLjM4NzYgNDQyLjMzIDI2My4zNTk2IDQ0Mi4zODcgMjYzLjMyOTUgNDQyLjQ1OTggMjYyLjE5MTQgNDQ1LjI2NTYgMjYxLjExNCA0NDguMDk4IDI1OS45NzkyIDQ1MC45MDU0IDI1OS45NjYyIDQ1MC45MzYzIDI1OS45NTc0IDQ1MC45NjEyIDI1OS45NDcyIDQ1MC45OTMzIDI1OS43NzcxIDQ1MS41MDQ5IDI1OS45MDI3IDQ1Mi4wMTcxIDI2MC4yNTI1IDQ1Mi40MTM0Wk0yOTEuNDM2MiA0NjIuNzkxMUMyOTEuODQ2NiA0NjMuMjg0OSAyOTIuNDgzIDQ2My42NzYzIDI5My4wNzA2IDQ2My45MDQ4IDI5My42NTI2IDQ2NC4xMzE2IDI5NC4yMjE4IDQ2NC4yNDEzIDI5NC44MjI3IDQ2NC4yMTk0IDI5NS4xNjgzIDQ2NC4yMTk0IDI5NS41MjY2IDQ2NC4xMDMyIDI5NS43OTUgNDYzLjg4NTUgMjk1Ljk4NDEgNDYzLjczMTkgMjk2LjExMTYgNDYzLjU1ODEgMjk2LjIwMzIgNDYzLjMzMDggMjk3LjM0NzUgNDYwLjQ3OTEgMjk4LjQ2MDQgNDU3LjYxMTkgMjk5LjU5MjYgNDU0Ljc1NDggMjk5LjYyNTIgNDU0LjY3MzIgMjk5LjY0NjQgNDU0LjYwMDkgMjk5LjY2MzQgNDU0LjUxNDUgMjk5LjgzOTcgNDUzLjYyODYgMjk5Ljk3NjEgNDUyLjU5NiAyOTkuOTgwOSA0NTEuNjkzNyAzMDAuMDI5NCA0NTAuODcxMSAyOTkuOTUxNyA0NDkuOTUxIDI5OS4yODEgNDQ5LjM3OTggMjk4LjE0NzcgNDQ4LjQxNTEgMjk2Ljg3OTggNDQ5LjMzMzkgMjk2LjE2MDQgNDUwLjI5MzEgMjk2LjA0NDcgNDUwLjQwNDIgMjk1LjkzNzYgNDUwLjUzMjEgMjk1Ljg0MzUgNDUwLjY3NTUgMjk1LjY2MzcgNDUwLjk0ODggMjk1LjQ5MDYgNDUxLjIyNjggMjk1LjMxOTEgNDUxLjUwNDkgMjk1LjA4MjkgNDUxLjg4NjcgMjk0Ljg1MjIgNDUyLjI2NjMgMjk0LjYyMDYgNDUyLjY1MSAyOTQuNTc5OCA0NTIuNzE4MSAyOTQuNTUxNyA0NTIuNzc1MSAyOTQuNTIxNyA0NTIuODQ4IDI5My4zODI3IDQ1NS42NTQzIDI5Mi4yNzQxIDQ1OC40ODg2IDI5MS4xNjU3IDQ2MS4zMDggMjkxLjE0NTMgNDYxLjM2MDEgMjkxLjEzMDMgNDYxLjQwNjMgMjkxLjExNjcgNDYxLjQ1ODUgMjkwLjk4NjMgNDYxLjk0NTggMjkxLjExMjQgNDYyLjQxNzcgMjkxLjQzNjIgNDYyLjc5MTFaTTMyMy4yMjMgNDcwLjk3OTJDMzIzLjY3NDkgNDcxLjQyNzcgMzI0LjMzOTMgNDcxLjc1NDUgMzI0Ljk0MDggNDcxLjkyODggMzI1LjUzODEgNDcyLjEwMiAzMjYuMTI4OCA0NzIuMTU4MSAzMjYuNzQ3MyA0NzIuMDgxMyAzMjcuMTIwOSA0NzIuMDM0NiAzMjcuNDg0NiA0NzEuODY1NiAzMjcuNzM1MiA0NzEuNTc2OCAzMjcuODY1NiA0NzEuNDI1NyAzMjcuOTUwOSA0NzEuMjczMiAzMjguMDA5OSA0NzEuMDgxNSAzMjguOTE0NCA0NjguMTU0NSAzMjkuNzYyNiA0NjUuMTU2NiAzMzAuNjA4NCA0NjIuMjA4MyAzMzAuNjI3NCA0NjIuMTM5NyAzMzAuNjQwNCA0NjIuMDc5OCAzMzAuNjQ5MiA0NjIuMDA5IDMzMC43NjI2IDQ2MS4xNTc3IDMzMC43ODUzIDQ1OS45ODYyIDMzMC43MTI3IDQ1OS4xMzIxIDMzMC42ODQxIDQ1OC4zMDgxIDMzMC41MjQ1IDQ1Ny4zOTc2IDMyOS44MDI4IDQ1Ni44OTE2IDMyOC41OTM1IDQ1Ni4wNDI5IDMyNy40MDc1IDQ1Ny4wNzUgMzI2Ljc4MTQgNDU4LjA5MDQgMzI2LjY3NyA0NTguMjEwNiAzMjYuNTgyOSA0NTguMzQ1OCAzMjYuNTAyMSA0NTguNDk2MyAzMjYuMzQ3NCA0NTguNzg0NiAzMjYuMTk5MSA0NTkuMDc4NSAzMjYuMDUyOSA0NTkuMzcxNiAzMjUuODUyMiA0NTkuNzczMyAzMjUuNjU4MyA0NjAuMTcxIDMyNS40NjI0IDQ2MC41NzU1IDMyNS40MjQxIDQ2MC42NTE1IDMyNS40MDAzIDQ2MC43MTQxIDMyNS4zNzcxIDQ2MC43OTU3IDMyNC41MjM2IDQ2My43MDQ5IDMyMy42NTQ1IDQ2Ni41OTg2IDMyMi44MjM2IDQ2OS40ODUxIDMyMi42MzkxIDQ3MC4wNDEyIDMyMi44MDYzIDQ3MC41ODY2IDMyMy4yMjMgNDcwLjk3OTJaTTM1NC44OTU3IDQ3Ny41NDQ4QzM1NS4zODA0IDQ3Ny45NjE1IDM1Ni4wNjY2IDQ3OC4yNDE5IDM1Ni42ODA5IDQ3OC4zNzE3IDM1Ny4yOTAxIDQ3OC41MDA3IDM1Ny44ODIgNDc4LjUxMzcgMzU4LjUzMDUgNDc4LjM4MzMgMzU4LjkyNDUgNDc4LjI5MjYgMzU5LjI3NCA0NzguMDg0NSAzNTkuNDk4OCA0NzcuNzMxMSAzNTkuNTg0NyA0NzcuNTk2NCAzNTkuNjM4OSA0NzcuNDY4NiAzNTkuNjc1NyA0NzcuMzEzNSAzNjAuMzg3OCA0NzQuMzQ3OSAzNjEuMDA5NyA0NzEuMjU5MyAzNjEuNjM5MyA0NjguMjY3IDM2MS42NTk3IDQ2OC4xNjg5IDM2MS42Njg4IDQ2OC4wODMxIDM2MS42Njc5IDQ2OC4wMTY0IDM2MS42OTE3IDQ2Ny4xMDE3IDM2MS42Njg4IDQ2Ni4wOTUxIDM2MS41MjUzIDQ2NS4xODk0IDM2MS40Mzg2IDQ2NC4zNzE3IDM2MS4yMTYxIDQ2My40NzcgMzYwLjQ2MzUgNDYzLjAyNDYgMzU5LjIyMDIgNDYyLjI3NjkgMzU4LjA4MDcgNDYzLjM4NjMgMzU3LjUzMjQgNDY0LjQzMjkgMzU3LjQzNjEgNDY0LjU2MTMgMzU3LjM1MTYgNDY0LjcwNDIgMzU3LjI4MTMgNDY0Ljg2MTUgMzU3LjE0NzUgNDY1LjE2IDM1Ny4wMjE2IDQ2NS40NjI3IDM1Ni44OTYxIDQ2NS43NjQ5IDM1Ni43MjU0IDQ2Ni4xNzkgMzU2LjU2MyA0NjYuNTgyMSAzNTYuMzk1NyA0NjYuOTk3NCAzNTYuMzU4OSA0NjcuMDg0NyAzNTYuMzM5NiA0NjcuMTQ5MyAzNTYuMzIxMiA0NjcuMjM2MyAzNTUuNjgzNCA0NzAuMTkwOSAzNTUuMDUyNyA0NzMuMTU0IDM1NC4zODY4IDQ3Ni4xMDE0IDM1NC4zNzQ2IDQ3Ni4xNTMgMzU0LjM2NzggNDc2LjE5NSAzNTQuMzYxNiA0NzYuMjQ3MSAzNTQuMjk5IDQ3Ni43NjIyIDM1NC41MDM2IDQ3Ny4yMjM0IDM1NC44OTU3IDQ3Ny41NDQ4Wk0zOTIuMTc1OCA0NjkuNDgwM0MzOTIuMDEgNDY4LjY3MzUgMzkxLjcwMDcgNDY3LjgwNTUgMzkwLjkwNjcgNDY3LjQyODUgMzg5LjU3MjQgNDY2Ljc5NDEgMzg4LjU3NTUgNDY4LjAxMjIgMzg4LjEyNzEgNDY5LjExOTEgMzg4LjA0NDYgNDY5LjI1NTIgMzg3Ljk3MzQgNDY5LjQwNTQgMzg3LjkxODcgNDY5LjU2ODEgMzg3LjgxNSA0NjkuODc4NSAzODcuNzE4IDQ3MC4xOTIzIDM4Ny42MjMxIDQ3MC41MDYxIDM4Ny40OTA3IDQ3MC45NDE1IDM4Ny4zNDcyIDQ3MS4zOTE0IDM4Ny4yMzEzIDQ3MS44MzEzIDM4Ny4yMTI5IDQ3MS44OTk5IDM4Ny4yMDEzIDQ3MS45NTk3IDM4Ny4xOTM2IDQ3Mi4wMjU4IDM4Ni44NDIxIDQ3NS4wMzc5IDM4Ni40NDc1IDQ3OC4wNTY1IDM4Ni4xMTg0IDQ4MS4xMzEyIDM4Ni4wODUgNDgxLjY2OTUgMzg2LjMzNzUgNDgyLjEzMjEgMzg2Ljc3MzggNDgyLjQyMjcgMzg3LjI5NjIgNDgyLjc5MjkgMzg4LjAwNjkgNDgzLjAwMjkgMzg4LjYzMTYgNDgzLjA3MjQgMzg5LjI0ODIgNDgzLjE0MSAzODkuODM4IDQ4My4wOTQ4IDM5MC40MzMzIDQ4Mi45MTQyIDM5MC43MTk2IDQ4Mi44Mjc3IDM5MS4wMDgyIDQ4Mi42NTI5IDM5MS4yMDAxIDQ4Mi40MjQ3IDM5MS4zODA0IDQ4Mi4yMTA2IDM5MS40ODAyIDQ4MS45Nzk5IDM5MS41MTM2IDQ4MS43MDA0IDM5MS44NzY3IDQ3OC42NDYxIDM5Mi4yNDIxIDQ3NS41ODgxIDM5Mi41ODYyIDQ3Mi41MzE3IDM5Mi41OTU5IDQ3Mi40NDU5IDM5Mi41OTc5IDQ3Mi4zNzE5IDM5Mi41OTIyIDQ3Mi4yODYgMzkyLjUzMjQgNDcxLjM3OTUgMzkyLjQwMzEgNDcwLjM1NzMgMzkyLjE3NTggNDY5LjQ4MDNaTTU3Ni4yODM1IDQzOS44NjVDNTc1Ljc1OTkgNDM5LjIzOTcgNTc1LjA3MzEgNDM4LjYyNDMgNTc0LjIwNDUgNDM4LjY3MDUgNTcyLjc1MzggNDM4Ljc0NjUgNTcyLjQ0MTEgNDQwLjIyMDggNTcyLjUzMSA0NDEuNDAxNyA1NzIuNTMyNCA0NDEuNTk2NyA1NzIuNTU3IDQ0MS43OTUxIDU3Mi41ODk5IDQ0MS45ODYyIDU3Mi42NDU4IDQ0Mi4zMTAyIDU3Mi43MTA3IDQ0Mi42MzMgNTcyLjc3NyA0NDIuOTU1MSA1NzIuODY2MyA0NDMuMzk1IDU3Mi45NTg0IDQ0My44MjM2IDU3My4wNTM0IDQ0NC4yNjI0IDU3My4wNzEyIDQ0NC4zNTE3IDU3My4wOTE3IDQ0NC40MTYgNTczLjEyMzEgNDQ0LjQ5NDMgNTc0LjI0NTYgNDQ3LjMwODggNTc1LjMyNzYgNDUwLjE1NTEgNTc2LjQ3NjggNDUyLjk1NTEgNTc2LjQ5NDYgNDUyLjk5NzYgNTc2LjUxMDggNDUzLjAzMzQgNTc2LjUzMDYgNDUzLjA3MTEgNTc2Ljc3MTkgNDUzLjUzMiA1NzcuMTk1NyA0NTMuNzkwOCA1NzcuNjc1IDQ1My44MzEzIDU3OC4yODkgNDUzLjkxMzUgNTc5LjAzNzkgNDUzLjc1NTYgNTc5LjYzMzIgNDUzLjUwOTMgNTgwLjIwODkgNDUzLjI3MDkgNTgwLjcwMzggNDUyLjk1MjMgNTgxLjE0MTUgNDUyLjUwNDcgNTgxLjE3NDkgNDUyLjQ3MSA1ODEuMjAxNiA0NTIuNDQwOSA1ODEuMjMwOCA0NTIuNDA0MyA1ODEuNDIxMyA0NTIuMTY2OCA1ODEuNTU1MSA0NTEuOTIwNSA1ODEuNTk2MiA0NTEuNjA2NyA1ODEuNjI4MiA0NTEuMzYwMSA1ODEuNjAwMSA0NTEuMTQwOSA1ODEuNTA3NCA0NTAuOTExNiA1ODAuMzYyNSA0NDguMDYzNyA1NzkuMjMzOCA0NDUuMjA2MyA1NzguMDk5MSA0NDIuMzUzNSA1NzguMDY4NCA0NDIuMjc3MyA1NzguMDM3IDQ0Mi4yMTQxIDU3Ny45OTM5IDQ0Mi4xNDQxIDU3Ny41Mjk2IDQ0MS4zODQ3IDU3Ni44OTE4IDQ0MC41MTE5IDU3Ni4yODM1IDQzOS44NjVaTTU0NS4xMDA0IDQ1MC4yNTY1QzU0NC41NzI2IDQ0OS42MjA3IDU0My44NzM1IDQ0OC45OTg4IDU0Mi45OTI4IDQ0OS4wNTk3IDU0MS41NTk2IDQ0OS4xNTg3IDU0MS4yNTM4IDQ1MC42MTcxIDU0MS4zNDE5IDQ1MS43ODk4IDU0MS4zNDM5IDQ1MS45ODQzIDU0MS4zNjg2IDQ1Mi4xODE4IDU0MS40MDIgNDUyLjM3MiA1NDEuNDU3MyA0NTIuNjk0OSA1NDEuNTIxOSA0NTMuMDE3NSA1NDEuNTg2OCA0NTMuMzM4NCA1NDEuNjc2NCA0NTMuNzc4MyA1NDEuNzY4IDQ1NC4yMDc1IDU0MS44NjIxIDQ1NC42NDYzIDU0MS44Nzk5IDQ1NC43MzYxIDU0MS45MDAzIDQ1NC44MDE2IDU0MS45MzE4IDQ1NC44Nzk4IDU0My4wNTIxIDQ1Ny42ODk1IDU0NC4xNzA2IDQ2MC41MDQxIDU0NS4yNzUzIDQ2My4zMTk3IDU0NS4zMDM5IDQ2My4zOTQgNTQ1LjMzNCA0NjMuNDU1MiA1NDUuMzc0MiA0NjMuNTIyNCA1NDUuNjIxNCA0NjMuOTM4NSA1NDYuMDE4OCA0NjQuMTY5OCA1NDYuNDg5MSA0NjQuMjE3MiA1NDcuMTI0IDQ2NC4yOTM0IDU0Ny44NTQ4IDQ2NC4xMzU1IDU0OC40Mzg1IDQ2My44OTUxIDU0OS4wMTUzIDQ2My42NTc2IDU0OS41MTI1IDQ2My4zMzcgNTQ5Ljk1MjIgNDYyLjg4OTQgNTUwLjAxMzcgNDYyLjgyNjggNTUwLjA2MTMgNDYyLjc2ODQgNTUwLjA4ODggNDYyLjcyNzMgNTUwLjI4OTUgNDYyLjQ1MiA1NTAuNDE0NSA0NjIuMTczMSA1NTAuNDE0NSA0NjEuODEyOCA1NTAuNDE0NSA0NjEuNjMxNCA1NTAuMzg1IDQ2MS40NzYzIDU1MC4zMTg3IDQ2MS4zMDggNTQ5LjE5NSA0NTguNDQ4MSA1NDguMDQ5MyA0NTUuNTk1MyA1NDYuOTEzNyA0NTIuNzQwMyA1NDYuODgzMSA0NTIuNjY0IDU0Ni44NTE2IDQ1Mi42MDA4IDU0Ni44MDg4IDQ1Mi41MzA4IDU0Ni4zNDg1IDQ1MS43NzgyIDU0NS43MDA1IDQ1MC44OTk0IDU0NS4xMDA0IDQ1MC4yNTY1Wk01MTQuNDgxMSA0NTguMDI2NkM1MTQuMDA5NCA0NTcuMzQ3NCA1MTMuMzc3OSA0NTYuNjY4NSA1MTIuNDkyMyA0NTYuNjQ3OCA1MTEuMDE4OSA0NTYuNjEyMSA1MTAuNTk2MiA0NTguMTA5NiA1MTAuNjE5NSA0NTkuMzA1IDUxMC41OTcxIDQ1OS40NjI5IDUxMC41OTA4IDQ1OS42MjkzIDUxMC42MDUzIDQ1OS44MDA4IDUxMC42MzExIDQ2MC4xMjcxIDUxMC42NjYgNDYwLjQ1MzkgNTEwLjcwMTQgNDYwLjc3ODcgNTEwLjc1MDcgNDYxLjIyOTIgNTEwLjc5OTIgNDYxLjY4NSA1MTAuODU5MyA0NjIuMTM0IDUxMC44Njg2IDQ2Mi4yMDc0IDUxMC44ODE3IDQ2Mi4yNjkyIDUxMC45MDIxIDQ2Mi4zNDAxIDUxMS43NTM2IDQ2NS4yNTAxIDUxMi42MDQzIDQ2OC4xNjI3IDUxMy40Njk0IDQ3MS4wNjg1IDUxMy40NzgyIDQ3MS4wOTggNTEzLjQ4NjQgNDcxLjEyMzUgNTEzLjQ5NzUgNDcxLjE1MjQgNTEzLjY4MTIgNDcxLjY0OTMgNTE0LjA4MjYgNDcxLjk2NiA1MTQuNTkxMSA0NzIuMDY0OSA1MTUuMjE4NyA0NzIuMTk5NSA1MTUuOTYwOCA0NzIuMTA4OCA1MTYuNTY1NyA0NzEuOTIyIDUxNy4xNTg0IDQ3MS43Mzg2IDUxNy42ODIgNDcxLjQ2NjggNTE4LjE1NzkgNDcxLjA2MjMgNTE4LjE5NTMgNDcxLjAzMDggNTE4LjIyNjIgNDcxLjAwMTMgNTE4LjI2MTEgNDcwLjk2NTYgNTE4LjQ2MjQgNDcwLjc1NTMgNTE4LjYxNiA0NzAuNTIzNCA1MTguNjg3MSA0NzAuMjMgNTE4Ljc0MzggNDY5Ljk5NDcgNTE4Ljc0MSA0NjkuNzc5NiA1MTguNjc3NSA0NjkuNTQ1NCA1MTcuODc3MyA0NjYuNTk0MyA1MTYuOTI1NCA0NjMuNjE5MyA1MTYuMDU5NyA0NjAuNjc4NCA1MTYuMDM1OSA0NjAuNTk2OCA1MTYuMDA5OCA0NjAuNTI5MyA1MTUuOTcxNiA0NjAuNDUzIDUxNS41NzM2IDQ1OS42NTIgNTE1LjAyNTQgNDU4LjczMjQgNTE0LjQ4MTEgNDU4LjAyNjZaTTQ4Ni40NjIgNDc3LjYzMTNDNDg2Ljc2NTEgNDc3LjQxOTIgNDg3LjAwNjkgNDc3LjEwMDYgNDg3LjA5NDIgNDc2LjczNzIgNDg3LjE0ODkgNDc2LjUxMjcgNDg3LjE0OCA0NzYuMzA4OSA0ODcuMDk3IDQ3Ni4wOTc0IDQ4Ni40MDkzIDQ3My4xMDcyIDQ4NS44MDcyIDQ3MC4wOSA0ODUuMTIxIDQ2Ny4wOTkxIDQ4NS4xMDIgNDY3LjAxNjEgNDg1LjA3ODcgNDY2Ljk0NjEgNDg1LjA0NjcgNDY2Ljg2OTggNDg0LjY5MjkgNDY2LjAzMzMgNDg0LjIzODggNDY1LjExMjEgNDgzLjczNDMgNDY0LjM1ODYgNDgzLjMxNTkgNDYzLjY0ODggNDgyLjc0NSA0NjIuOTMxMSA0ODEuODY5MSA0NjIuODM3MyA0ODAuMzkyMiA0NjIuNjc4NSA0NzkuODUzNiA0NjQuMTU2MiA0NzkuNzk0MSA0NjUuMzU2NCA0NzkuNzYwNyA0NjUuNTExNSA0NzkuNzQzNyA0NjUuNjc2NCA0NzkuNzQ1MSA0NjUuODQ3OSA0NzkuNzQ4NSA0NjYuMTc0OCA0NzkuNzYwMSA0NjYuNTAzIDQ3OS43NzIzIDQ2Ni44Mjk5IDQ3OS43ODkzIDQ2Ny4yODM3IDQ3OS44MDUyIDQ2Ny43NDMyIDQ3OS44MzI5IDQ2OC4xOTY0IDQ3OS44MzcyIDQ2OC4yNjY1IDQ3OS44NDU0IDQ2OC4zMjYgNDc5Ljg1OTYgNDY4LjM5NDkgNDgwLjQ3MjIgNDcxLjMwNjkgNDgxLjA4MDUgNDc0LjM4MjggNDgxLjc5NzQgNDc3LjI1OTkgNDgxLjg5ODMgNDc3LjgxNDcgNDgyLjI5NTcgNDc4LjIyMDYgNDgyLjgyODkgNDc4LjM1OTIgNDgzLjQ1MTEgNDc4LjU0OTQgNDg0LjIgNDc4LjUxMDkgNDg0LjgyNzYgNDc4LjM2NiA0ODUuNDI2OCA0NzguMjI3NCA0ODUuOTYyMyA0NzcuOTk0NyA0ODYuNDYyIDQ3Ny42MzEzWk00NTMuMTQ5OSA0NjkuMDE5NkM0NTIuODAwMyA0NjguMjc0NyA0NTIuMjk3MiA0NjcuNTAzNCA0NTEuNDM2OSA0NjcuMzI1MSA0NDkuOTkwMSA0NjcuMDI0OSA0NDkuMzA4MSA0NjguNDQyOCA0NDkuMTMwNiA0NjkuNjI2NSA0NDkuMDgyMSA0NjkuNzc3NiA0NDkuMDQ4NyA0NjkuOTM5NyA0NDkuMDMzNyA0NzAuMTEwMSA0NDkuMDA0MiA0NzAuNDM2OSA0NDguOTg0MyA0NzAuNzY0OSA0NDguOTY0OCA0NzEuMDkyNiA0NDguOTM4MSA0NzEuNTQwMiA0NDguOTE2MyA0NzEuOTc5NiA0NDguODk0MiA0NzIuNDI4IDQ0OC44ODk3IDQ3Mi41MTI1IDQ0OC44OTE3IDQ3Mi41NzU3IDQ0OC45MDEzIDQ3Mi42NTkzIDQ0OS4yMzk3IDQ3NS42NzE3IDQ0OS41OTgzIDQ3OC42OTcxIDQ0OS45NzE3IDQ4MS43MDM4IDQ1MC4wNDE0IDQ4Mi4yNjU0IDQ1MC40MDExIDQ4Mi42ODQ5IDQ1MC45MTg3IDQ4Mi44Nzc0IDQ1MS41MTI5IDQ4My4xMTAxIDQ1Mi4yNTM1IDQ4My4xNDc4IDQ1Mi44Nzc0IDQ4My4wNjgxIDQ1My40OTM0IDQ4Mi45ODkgNDU0LjA1NjEgNDgyLjgwODUgNDU0LjU5NDEgNDgyLjQ5MjEgNDU0LjY2NSA0ODIuNDUwMiA0NTQuNzIzMSA0ODIuNDA5MSA0NTQuNzU4NSA0ODIuMzc3MyA0NTQuOTg1MyA0ODIuMTk4MiA0NTUuMTU0IDQ4Mi4wMTY4IDQ1NS4yNjc5IDQ4MS43MzM5IDQ1NS4zNTg2IDQ4MS41MDg4IDQ1NS4zODc1IDQ4MS4yOTU5IDQ1NS4zNTg2IDQ4MS4wNTUgNDU0Ljk5ODMgNDc4LjAwMzUgNDU0LjYyMzMgNDc0Ljk1NTcgNDU0LjI2NSA0NzEuOTA0MiA0NTQuMjUzNCA0NzEuODAzOCA0NTQuMjM1NSA0NzEuNzIyNyA0NTQuMjA5NyA0NzEuNjQ0NSA0NTMuOTM1MSA0NzAuNzc0IDQ1My41NzkzIDQ2OS44MjM1IDQ1My4xNDk5IDQ2OS4wMTk2Wk00MTguODA1NiA0ODQuNTQxNkM0MTkuMzY2MyA0ODQuODQ4IDQyMC4xMDA3IDQ4NC45NzQxIDQyMC43Mjg5IDQ4NC45NzE2IDQyMS4zNDk3IDQ4NC45Njg4IDQyMS45MzI4IDQ4NC44NTU0IDQyMi41MDQyIDQ4NC42MDYyIDQyMi41NDU5IDQ4NC41ODgzIDQyMi41ODEzIDQ4NC41NzA1IDQyMi42MTg3IDQ4NC41NDk4IDQyMi44OTM0IDQ4NC4zOTg3IDQyMy4xMTIgNDg0LjIxOSA0MjMuMjY4NyA0ODMuOTI5OSA0MjMuMzgzIDQ4My43MTg0IDQyMy40MzU0IDQ4My41MTIzIDQyMy40MzU0IDQ4My4yNzE5IDQyMy40MzU0IDQ4MC4xOTcyIDQyMy40NTMzIDQ3Ny4xMjMzIDQyMy40NTMzIDQ3NC4wNDg2IDQyMy40NTMzIDQ3My45NTM5IDQyMy40NDUgNDczLjg3MjggNDIzLjQyOTQgNDczLjc5MzcgNDIzLjI2MTkgNDcyLjg5NzEgNDIzLjAyMyA0NzEuOTA5IDQyMi42OTQ3IDQ3MS4wNTk3IDQyMi40Mzg3IDQ3MC4yNzgyIDQyMi4wMzM3IDQ2OS40NTA4IDQyMS4yMDIzIDQ2OS4xNjczIDQxOS43OTQzIDQ2OC42ODg1IDQxOC45NTE4IDQ3MC4wMTEyIDQxOC42MzIxIDQ3MS4xNjk0IDQxOC41NjYgNDcxLjMxNDMgNDE4LjUxMzMgNDcxLjQ3MTYgNDE4LjQ3NzkgNDcxLjYzOTcgNDE4LjQwOTYgNDcxLjk1OTcgNDE4LjM1MDMgNDcyLjI4MjYgNDE4LjI5MTcgNDcyLjYwMzcgNDE4LjIxMTcgNDczLjA0NDUgNDE4LjEzODYgNDczLjQ2OTcgNDE4LjA2MiA0NzMuOTEwNSA0MTguMDQzNiA0NzQuMDAzOCA0MTguMDM4OCA0NzQuMDY5IDQxOC4wMzg4IDQ3NC4xNjE3IDQxOC4wMzI5IDQ3Ny4xOTUzIDQxOC4wMTAyIDQ4MC4yMjk1IDQxOC4wMTAyIDQ4My4yNjMxIDQxOC4wMTAyIDQ4My44MjgxIDQxOC4zMTY5IDQ4NC4yODgyIDQxOC44MDU2IDQ4NC41NDE2Ii8+DQo8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSwwLDU5NS4yNzU2KSIgZD0iTTQxOC4yNzYzIDQwMi41MTU0QzQyMS43NDI2IDQwMS4yNzk4IDQyMi40NDg0IDQwNS42NDM3IDQyMi40NDg0IDQwNS42NDM3TDQzNy4yNjI1IDQ1Ni4zNDIgNDE2Ljc2MjYgNDA3LjY3MjVDNDE2Ljc2MjYgNDA3LjY3MjUgNDE0LjgwODQgNDAzLjc1MyA0MTguMjc2MyA0MDIuNTE1NFpNNDE5LjMwMTYgNDA3LjMxNjJDNDIwLjI1MTUgNDA3LjMxNjIgNDIxLjAyMzQgNDA2LjU0MDEgNDIxLjAyMzQgNDA1LjU4NjIgNDIxLjAyMzQgNDA0LjYyNzggNDIwLjI1MTUgNDAzLjg1MjggNDE5LjMwMTYgNDAzLjg1MjggNDE4LjM1MzIgNDAzLjg1MjggNDE3LjU3NzkgNDA0LjYyNzggNDE3LjU3NzkgNDA1LjU4NjIgNDE3LjU3NzkgNDA2LjU0MDEgNDE4LjM1MzIgNDA3LjMxNjIgNDE5LjMwMTYgNDA3LjMxNjIiLz4NCjwvc3ZnPg0K'); aspect-ratio: 367/116; }

/* La misura sta in :root perché da lì si ricava --h-testata. In pagina il
   logo occupa sempre lo stesso posto: da compatto si rimpicciolisce con una
   scala, che vive sul compositore e non fa muovere una virgola di quello che
   ha intorno. Animare la larghezza, come si faceva prima, voleva dire far
   ricalcolare il layout della testata a ogni fotogramma dello scorrimento. */
.marchio .logo-img { width: var(--logo-l); }
.testata.compatta .marchio .logo-img { transform: scale(var(--logo-scala-c)); }

/* header su hero scuro */
.testata--su-scuro:not(.compatta) .marchio,
.testata--su-scuro:not(.compatta) .tel-testata,
.testata--su-scuro:not(.compatta) .nav__link { color: var(--carta); }
.testata--su-scuro:not(.compatta) .nav__link::after { background: var(--carta); }
.testata--su-scuro:not(.compatta) .hamburger span { background: var(--carta); }
@media (hover: hover) and (pointer: fine) {
  .testata--su-scuro:not(.compatta) .btn--vuoto:hover { background: var(--carta); color: var(--inchiostro); }
}

.nav { display: flex; align-items: center; gap: clamp(1.2rem, 2.6vw, 2.4rem); }
.nav__link {
  position: relative; text-decoration: none; font-size: var(--f-m); font-weight: 450;
  padding-block: .3rem; white-space: nowrap;
  transition: color var(--t-medio) var(--e-standard), opacity var(--t-veloce) var(--e-standard);
}
.nav__link::after {
  content: ''; position: absolute; left: 0; bottom: 0; height: 1px; width: 100%;
  background: currentColor; transform: scaleX(0); transform-origin: right;
  /* il filetto si disegna da sinistra quando entra e si ritira verso destra
     quando esce: è il verso della lettura, e si nota senza guardarlo */
  transition: transform var(--t-medio) var(--e-esce);
}
.nav__link[aria-current="page"]::after { transform: scaleX(1); transform-origin: left; }
.nav__link[aria-current="page"] { font-weight: 600; }
/* il filetto sotto la voce è il segno della pagina in cui ci si trova: se
   restasse acceso dopo un tocco (su iOS il :hover non si spegne più) direbbe
   che siamo su una pagina in cui non siamo */
@media (hover: hover) and (pointer: fine) {
  .nav__link:hover::after { transform: scaleX(1); transform-origin: left; }
}

.testata__azioni { display: flex; align-items: center; gap: .9rem; }
.tel-testata {
  display: inline-flex; align-items: center; gap: .5rem;
  text-decoration: none; font-size: var(--f-m); font-weight: 500; white-space: nowrap;
  padding: .5rem .9rem; border-radius: var(--r-pill);
  /* il colore del testo e la pastiglia scura cambiano insieme allo sfondo
     della testata, e ci mettono lo stesso tempo: il passaggio da chiaro a
     compatto deve leggersi come un movimento solo */
  transition: background var(--t-medio) var(--e-standard),
              color var(--t-medio) var(--e-standard),
              box-shadow var(--t-medio) var(--e-standard);
}
.tel-testata svg { width: var(--i-m); }
/* il cambio di stato della testata dura --t-medio, ma una risposta al
   passaggio del mouse a mezzo secondo sembra lenta: qui torna svelta */
@media (hover: hover) and (pointer: fine) {
  .tel-testata:hover { background: var(--carta-scura); transition-duration: var(--t-veloce); }
}

/* Sopra la foto dell'hero il numero deve restare leggibile qualunque cosa
   ci sia dietro: pastiglia quasi piena, non una semplice velatura. */
.testata--su-scuro:not(.compatta) .tel-testata {
  background: rgba(16, 30, 25, .82);
  -webkit-backdrop-filter: blur(10px) saturate(1.2);
          backdrop-filter: blur(10px) saturate(1.2);
  box-shadow: inset 0 0 0 1px var(--linea-scura-forte);
  font-weight: 550;
}
@media (hover: hover) and (pointer: fine) {
  .testata--su-scuro:not(.compatta) .tel-testata:hover {
    background: rgba(16, 30, 25, .94);
  }
}
.testata--su-scuro:not(.compatta) .tel-testata svg { opacity: .85; }

/* Stesso trattamento per il pulsante accanto, così la coppia resta coerente.
   Su iPhone il backdrop-filter senza prefisso non esiste fino a Safari 17:
   senza la riga -webkit- questa pastiglia resterebbe trasparente al 55% sopra
   la foto dell'hero, e il testo dentro diventerebbe illeggibile.
   Colore, bordo e fondo del medesimo elemento stavano in due regole identiche
   scritte a sessanta righe di distanza: qui sono una sola. */
.testata--su-scuro:not(.compatta) .btn--vuoto {
  --fg: var(--carta);
  border-color: var(--linea-scura-forte);
  background: rgba(16, 30, 25, .55);
  -webkit-backdrop-filter: blur(10px) saturate(1.2);
          backdrop-filter: blur(10px) saturate(1.2);
}
/* Dentro la testata il bottone cambia colore insieme allo sfondo sfocato che
   gli compare dietro, e ci mette lo stesso tempo: con la durata breve dei
   bottoni normali il passaggio da chiaro a compatto si vedeva in due tempi,
   prima la pastiglia e mezzo secondo dopo la testata. */
.testata .btn--vuoto { transition-duration: var(--t-medio); }

.hamburger {
  display: none; width: 44px; height: 44px; border: 0; background: none;
  cursor: pointer; padding: 0; position: relative; z-index: 101;
}
.hamburger span {
  display: block; height: 1.5px; width: 24px; margin: 5px auto; background: var(--inchiostro);
  /* le due barrette che si incrociano usano la stessa curva del pannello che
     stanno aprendo: partono decise, si posano ferme. La barretta di mezzo
     sparisce prima che le altre finiscano di ruotare, altrimenti si vede una
     X con un trattino ancora in mezzo. */
  transition: transform var(--t-medio) var(--e-scatto),
              opacity var(--t-veloce) var(--e-standard),
              background var(--t-medio) var(--e-standard);
}
.hamburger[aria-expanded="true"] span:nth-child(1) { transform: translateY(6.5px) rotate(45deg); }
.hamburger[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.hamburger[aria-expanded="true"] span:nth-child(3) { transform: translateY(-6.5px) rotate(-45deg); }
/* Era l'unico comando del sito senza risposta al tocco: tre barrette che
   cambiano forma mezzo secondo dopo, e nel frattempo nulla dice che il dito ha
   preso. Le barrette esterne si allungano appena al passaggio, tutto il
   pulsante rientra su se stesso alla pressione. */
@media (hover: hover) and (pointer: fine) {
  .hamburger:hover span:nth-child(1),
  .hamburger:hover span:nth-child(3) { transform: scaleX(1.14); }
  .hamburger[aria-expanded="true"]:hover span:nth-child(1) { transform: translateY(6.5px) rotate(45deg); }
  .hamburger[aria-expanded="true"]:hover span:nth-child(3) { transform: translateY(-6.5px) rotate(-45deg); }
}
.hamburger:active { transform: scale(.9); transition: transform var(--t-veloce) var(--e-morbida); }

/* Sta qui, prima del media query, e non più dentro con un !important:
   così a farla ricomparire sotto i 940px basta l'ordine della cascata. */
.nav__mob { display: none; }

@media (max-width: 940px) {
  .hamburger { display: block; }
  .testata__azioni .btn, .tel-testata { display: none; }
  .nav {
    position: fixed; inset: 0; flex-direction: column; justify-content: center;
    background: var(--carta); gap: 0;
    padding: 5rem var(--mx) 3rem;
    padding-bottom: calc(3rem + env(safe-area-inset-bottom));
    padding-inline: max(var(--mx), env(safe-area-inset-left)) max(var(--mx), env(safe-area-inset-right));
    clip-path: circle(0% at calc(100% - 44px) 44px);
    /* Il ritaglio a zero nasconde il pannello ma non lo toglie dall'ordine di
       tabulazione: a menù chiuso restavano cinque comandi invisibili da
       attraversare, su ogni pagina. visibility li toglie davvero, e ritardata
       di quanto dura la chiusura non mangia l'animazione. */
    visibility: hidden;
    overscroll-behavior: contain;
    transition: clip-path var(--t-apertura) var(--e-scatto), visibility 0s var(--t-apertura);
    z-index: 100;
  }
  .nav.aperto {
    clip-path: circle(150% at calc(100% - 44px) 44px);
    visibility: visible;
    transition: clip-path var(--t-apertura) var(--e-scatto), visibility 0s 0s;
  }
  .nav__link {
    /* stesso gradino dei titoli di sezione: il pannello a tutto schermo è a
       tutti gli effetti una pagina, e le sue voci ne sono i titoli */
    font-family: var(--serif); font-size: var(--f-4xl); line-height: var(--lh-titolo);
    padding-block: .5rem; opacity: 0; transform: translateY(14px);
    /* le voci salgono di quattordici pixel, non di più: devono sembrare
       arrivate dietro al cerchio che si apre, non lanciate da sotto */
    transition: opacity var(--t-medio) var(--e-esce), transform var(--t-medio) var(--e-esce);
  }
  /* Stessa specificità di .testata--su-scuro:not(.compatta) .nav__link (0-3-0),
     ma scritta dopo nel foglio: l'!important non serve. */
  .testata .nav .nav__link { color: var(--inchiostro); }
  /* A menù aperto il fondo è carta, e sopra la foto scura le barrette
     dell'hamburger sono chiare: carta su carta, la X spariva. 0-4-1 batte lo
     0-3-1 della regola "su scuro" senza bisogno di !important. */
  .nav.aperto ~ .testata__azioni .hamburger span { background: var(--inchiostro); }
  /* Stessa storia, e per lo stesso motivo, sul contorno di fuoco. La regola
     «testata su scuro» (in cima al foglio) dà al fuoco il colore carta, e
     resta valida anche qui sotto i 940px, dove il pannello aperto ha il fondo
     di carta: carta su carta fa 1,00:1, cioè il fuoco spariva del tutto sulle
     quattro voci, sul bottone «Chiama» e sull'hamburger. E capitava nel caso
     più comune, non in un caso limite: la testata prende .compatta soltanto
     scorrendo, quindi chi apre il menù appena arrivato sulla pagina — cioè
     quasi tutti — non vedeva dove fosse il fuoco, che per giunta il codice
     sposta d'ufficio sulla prima voce. Qui torna il petrolio di tutto il
     resto del sito: 5,10:1 su carta. 0-3-0 e 0-4-1, scritte dopo la regola
     che devono battere: nessun !important. */
  .nav.aperto :focus-visible,
  .nav.aperto ~ .testata__azioni .hamburger:focus-visible { outline-color: var(--petrolio); }
  .nav.aperto .nav__link { opacity: 1; transform: none; }
  .nav.aperto .nav__link:nth-child(1) { transition-delay: calc(var(--passo-scaletta) * 1); }
  .nav.aperto .nav__link:nth-child(2) { transition-delay: calc(var(--passo-scaletta) * 2); }
  .nav.aperto .nav__link:nth-child(3) { transition-delay: calc(var(--passo-scaletta) * 3); }
  .nav.aperto .nav__link:nth-child(4) { transition-delay: calc(var(--passo-scaletta) * 4); }
  .nav__mob {
    display: block; margin-top: var(--sp-5); opacity: 0; transform: translateY(14px);
    transition: opacity var(--t-medio) var(--e-esce) calc(var(--passo-scaletta) * 5),
                transform var(--t-medio) var(--e-esce) calc(var(--passo-scaletta) * 5);
  }
  .nav.aperto .nav__mob { opacity: 1; transform: none; }
}

/* Telefono in orizzontale: quattro voci in corpo 3rem più il pulsante fanno
   circa 590px di contenuto dentro 375–430px di altezza. Il pannello si
   riallinea in alto, si lascia scorrere e le voci rimpiccioliscono. */
@media (max-width: 940px) and (max-height: 620px) {
  .nav { justify-content: flex-start; overflow-y: auto; padding-top: 4.5rem; }
  /* Rimpicciolite al gradino --f-xl le quattro voci diventavano alte 39px e,
     con il passo della nav a zero, si toccavano bordo contro bordo: sotto il
     minimo di 44 e senza un millimetro di spazio morto in mezzo, cioè due
     bersagli adiacenti che il dito scambia. Con inline-flex l'altezza minima
     vale davvero anche su un collegamento, e il testo resta dov'è.
     Quattro voci da 44 più il bottone «Chiama» stanno dentro i 375px di uno
     schermo girato, e comunque il pannello si lascia scorrere. */
  .nav__link {
    font-size: var(--f-xl); line-height: var(--lh-titolo-m); padding-block: .45rem;
    display: flex; align-items: center; min-height: 44px;
  }
  .nav__mob { margin-top: var(--sp-4); }
}

/* ================================================================== HERO == */
/* Prima in vh e poi in svh: i browser vecchi si fermano alla prima riga, i
   nuovi usano la seconda. svh e non dvh perché è l'altezza dello schermo con
   le barre del browser aperte: così l'hero non cambia mai misura mentre si
   scorre, e i bottoni non finiscono mai sotto la barra degli indirizzi. */
.hero {
  position: relative;
  min-height: min(100vh, 900px);
  min-height: min(100svh, 900px);
  display: flex; align-items: flex-end;
  padding-block: 9rem clamp(2.5rem, 6vw, 4.5rem);
  color: var(--carta); overflow: hidden;
  background: var(--bosco-scuro);
}
.hero--corto { min-height: min(72vh, 660px); min-height: min(72svh, 660px); }

/* La parallasse sposta questo contenitore verso il BASSO, mai verso l'alto
   (lo fa sito.js, di un quinto dello scorrimento): la striscia che resta
   scoperta in cima è sempre già uscita dallo schermo, e in fondo il
   contenitore sborda dentro un .hero che ritaglia. Per questo qui non serve
   nessun margine di sicurezza, e la foto non va mai ritagliata più del
   necessario: la fotografia del locale resta inquadrata com'è stata scattata. */
.hero__media { position: absolute; inset: 0; z-index: 0; }
.hero__media img {
  width: 100%; height: 100%; object-fit: cover;
  transform: scale(1.08);
  /* Sette secondi e non diciotto: l'immagine dell'hero è quella che il
     browser considera il contenuto principale della pagina, e tenerla in
     animazione per un terzo di minuto significa tenere occupato il
     compositore mentre l'utente sta già leggendo. Con la curva morbida
     l'ottava parte di ingrandimento se ne va quasi tutta nei primi due
     secondi e poi la foto si posa: sembra che si stia avvicinando, non che
     stia zoomando. */
  animation: heroZoom 7s var(--e-morbida) forwards;
}
@keyframes heroZoom { to { transform: scale(1); } }

.hero__media::after {
  content: ''; position: absolute; inset: 0;
  background:
    linear-gradient(180deg, rgba(15,30,25,.78) 0%, rgba(15,30,25,.34) 26%, rgba(15,30,25,.5) 58%, rgba(15,30,25,.88) 100%),
    linear-gradient(96deg, rgba(15,30,25,.72) 0%, rgba(15,30,25,.28) 46%, rgba(15,30,25,0) 72%);
}
/* il testo dell'hero resta leggibile su qualunque foto (le due regole
   .hero__in erano scritte una sotto l'altra: non c'era ragione perché
   fossero due) */
.hero__in {
  position: relative; z-index: 2; width: 100%;
  text-shadow: 0 1px 24px rgba(12,24,20,.5);
}
.testata--su-scuro:not(.compatta) .testata__in { text-shadow: 0 1px 16px rgba(12,24,20,.55); }
/* Arrivava a 6,6rem, cioè 106 pixel: su un monitor da 27 pollici il titolo
   perdeva compostezza e diventava un cartellone. 5,6rem è ancora la cosa più
   grande della pagina e resta il primo gradino della scala, ma il locale è un
   posto in legno dentro un parco, non un'insegna al neon. */
.hero h1 {
  font-size: var(--f-5xl);
  line-height: var(--lh-display); letter-spacing: -.032em; max-width: 15ch;
  text-wrap: balance;
}
/* La parola accentata dentro un titolone su fondo scuro: nell'apertura e nel
   richiamo finale. Erano due regole identiche, dichiarazione per
   dichiarazione, a millecinquecento righe di distanza. */
.hero h1 em,
.cta h2 em {
  font-style: italic; font-variation-settings: 'SOFT' 40, 'WONK' 1;
  color: var(--oro-caldo);
}
.hero__sotto {
  margin: var(--sp-4) 0 0; max-width: 46ch; font-size: var(--f-l);
  color: rgba(250,246,239,.86); line-height: var(--lh-testo);
}
.hero__azioni { display: flex; flex-wrap: wrap; gap: .8rem; margin-top: var(--sp-5); }


.hero__giu {
  position: absolute; right: var(--mx); bottom: clamp(2.5rem, 6vw, 4.5rem); z-index: 2;
  display: flex; flex-direction: column; align-items: center; gap: .8rem;
  font-size: var(--f-3xs); letter-spacing: .2em; text-transform: uppercase;
  color: rgba(250,246,239,.6); text-decoration: none;
  transition: color var(--t-veloce) var(--e-standard), transform var(--t-medio) var(--e-morbida);
}
/* al passaggio scende di tre pixel: è la direzione che sta suggerendo */
@media (hover: hover) and (pointer: fine) {
  .hero__giu:hover { color: var(--carta); transform: translateY(3px); }
}
.hero__giu i {
  display: block; width: 1px; height: 46px; background: rgba(250,246,239,.35); position: relative; overflow: hidden;
}
.hero__giu i::after {
  content: ''; position: absolute; inset: 0; background: var(--carta);
  animation: scorri 3.4s var(--e-standard) infinite;
}
/* Il filo di luce scende una volta e poi si ferma per quasi un secondo prima
   di ricominciare. Prima era un ciclo continuo di due secondi, cioè un
   movimento che non si spegneva mai nell'angolo dell'occhio: la pausa scritta
   dentro i fotogrammi lo trasforma in un respiro. Sposta soltanto una
   strisciolina alta 46 pixel, quindi resta interamente sul compositore, e
   l'hero sta in cima alla pagina: appena si scorre esce di scena da solo. */
@keyframes scorri {
  0%,   8%   { transform: translateY(-100%); }
  46%        { transform: translateY(0); }
  84%, 100%  { transform: translateY(100%); }
}
@media (max-width: 720px) { .hero__giu { display: none; } }

/* Telefono in orizzontale: uno schermo alto 375–430px con 9rem di padding
   sopra e un'altezza piena sotto darebbe un hero più alto dello schermo, con
   il titolo che comincia sotto il bordo inferiore.
   L'altezza minima non si tocca qui: la stessa media query è riscritta in
   fondo al foglio, dopo il blocco dei 940px che gliela ridà, ed è là che
   viene azzerata. Averla in tutti e due i posti voleva dire due righe
   identiche di cui una non serviva mai — e la prima delle due, per giunta,
   era quella che veniva scavalcata. */
@media (max-height: 520px) and (orientation: landscape) {
  .hero, .hero--corto { padding-block: 6.5rem 2rem; }
  .hero h1 { font-size: var(--f-3xl); }
  .hero__sotto { margin-top: var(--sp-3); }
  .hero__azioni { margin-top: var(--sp-4); }
}

/* ============================================================ FASCIA INFO = */
.fascia-info {
  /* Una campitura piatta d'inchiostro fra due fasce di carta sembra un buco
     nella pagina. La sfumatura è di due punti percentuali — non la vede
     nessuno guardandola, ma la striscia smette di essere un rettangolo nero e
     comincia a sembrare una superficie illuminata da sopra. Il filetto chiaro
     sul bordo alto è lo spigolo di quella superficie. */
  background: linear-gradient(180deg, var(--inchiostro-2), var(--inchiostro) 62%);
  box-shadow: var(--filo-luce);
  color: var(--carta);
  padding-block: 1.15rem; font-size: var(--f-s);
}
.fascia-info__in {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: center;
  gap: .6rem clamp(1.2rem, 3vw, 2.6rem);
}
.fascia-info b { font-weight: 600; }
.fascia-info__voce { display: inline-flex; align-items: center; gap: .55rem; white-space: nowrap; }
/* la transizione sta qui e non in fondo al foglio insieme al suo :hover:
   erano due regole con lo stesso selettore a milleduecento righe di distanza */
.fascia-info__voce svg {
  width: var(--i-s); opacity: .65; flex: none;
  transition: transform var(--t-medio) var(--e-morbida);
}
.fascia-info a { text-decoration: none; border-bottom: 1px solid var(--linea-scura-forte); }
@media (hover: hover) and (pointer: fine) {
  .fascia-info a:hover { border-color: var(--carta); }
}
/* «Via Domenico Cimarosa 78 · 03043 Cassino (FR)» tutto su una riga a 360px
   esce dal bordo destro: qui la riga può spezzarsi dentro la voce. */
@media (max-width: 620px) {
  .fascia-info__voce { white-space: normal; min-width: 0; }
}

/* min-width: la pastiglia parte con l'orario scritto nell'HTML e sito.js la
   riscrive con lo stato del momento, che è più corto o più lungo di una
   manciata di caratteri. Riservando la larghezza, la riga di informazioni non
   si riassesta sotto gli occhi appena parte lo script. */
.stato { display: inline-flex; align-items: center; gap: .5rem; font-weight: 600; min-width: 15rem; }
/* L'alone che pulsa era un box-shadow che si allargava all'infinito: un'ombra
   è una cosa che il browser ridisegna, e ridisegnarla senza fine — su tre
   pagine su quattro, anche a fascia informazioni uscita dallo schermo da un
   pezzo — costa senza rendere niente. Lo stesso battito fatto con una scala
   su uno pseudo-elemento resta tutto sul compositore: nessun ridisegno, e la
   scheda video se ne accorge appena. */
.stato i {
  width: 7px; height: 7px; border-radius: 50%; background: #57c08a; flex: none;
  position: relative;
}
/* L'opacità di partenza è zero, e non si tocchi: mentre l'animazione gira la
   detta il fotogramma (parte da .7), ma quando l'animazione è spenta — a
   locale chiuso, o con il movimento ridotto — questo cerchio resterebbe pieno
   e coprirebbe il pallino sotto. Con lo stato «chiuso» voleva dire un
   bollino verde acceso davanti alla scritta «Chiuso ora». */
.stato i::after {
  content: ''; position: absolute; inset: 0; border-radius: 50%;
  background: #57c08a; opacity: 0;
  animation: battito 2.4s var(--e-esce) infinite;
}
.stato.chiuso i { background: #d4805f; }
.stato.chiuso i::after { animation: none; }
@keyframes battito {
  0%        { transform: scale(1); opacity: .7; }
  70%, 100% { transform: scale(3); opacity: 0; }
}

/* ============================================================== INTRO ==== */
.intro { display: grid; grid-template-columns: 1fr; gap: clamp(2.5rem, 5vw, 5rem); align-items: center; }
@media (min-width: 900px) { .intro { grid-template-columns: 1fr 1.08fr; } }

.intro__testo p { margin-block: 0; }
.intro__testo p + p { margin-top: var(--sp-4); }
/* La firma è anche lei un «p + p» (0-1-2), e la sua regola di classe (0-1-0)
   perdeva: il passo più largo scritto qui sotto non è mai arrivato a schermo,
   e la frase in corsivo restava alla stessa distanza di un capoverso
   qualunque, come se fosse la continuazione del precedente invece della
   chiusura del blocco. Con il discendente esplicito si torna a 0-2-1. */
.intro__testo p + .intro__firma { margin-top: var(--sp-5); }
.intro__firma {
  margin-top: var(--sp-5); font-family: var(--serif); font-style: italic;
  font-size: var(--f-xl); line-height: var(--lh-titolo-m);
  color: var(--bosco); font-variation-settings: 'SOFT' 40, 'WONK' 1;
}

.intro__media { position: relative; }
/* raggio piccolo, e per una ragione: su una fotografia larga sei-settecento
   pixel un angolo molto arrotondato non si legge come una foto stampata ma
   come il riquadro di un'applicazione */
.intro__media img { border-radius: var(--r-xs); box-shadow: var(--ombra-l); width: 100%; }

/* foto principale grande, seconda foto appoggiata sopra in basso a destra */
.intro__media--doppia { position: relative; padding: 0 clamp(2rem, 5vw, 4rem) clamp(3rem, 7vw, 5rem) 0; }
.intro__media--doppia img:first-child { width: 100%; margin: 0; }
.intro__media--doppia img:nth-of-type(2) {
  position: absolute; right: 0; bottom: clamp(1rem, 3vw, 2rem);
  width: clamp(140px, 44%, 260px);
  border: 6px solid var(--carta); border-radius: var(--r-xs);
  /* la seconda foto è appoggiata sopra la prima: senza un'ombra propria il
     bordo bianco sembra ritagliato con le forbici invece che posato */
  box-shadow: var(--ombra-m);
}
@media (max-width: 620px) {
  .intro__media--doppia { padding-right: 3rem; padding-bottom: 4rem; }
  .intro__media--doppia img:nth-of-type(2) { width: 42%; }
}

/* punti salienti sotto il testo di apertura */
.intro__punti { list-style: none; padding: 0; margin: var(--sp-5) 0 0; display: grid; gap: var(--sp-3); }
.intro__punti li { display: flex; gap: .85rem; align-items: flex-start; }
.intro__punti svg { width: var(--i-l); flex: none; color: var(--petrolio); margin-top: .2rem; }
.intro__punti b { display: block; font-size: var(--f-m); font-weight: 600; }
.intro__punti span { display: block; font-size: var(--f-s); color: var(--grigio); line-height: var(--lh-fitto); }

/* bollino del punteggio Google appoggiato sulle foto */
.intro__bollo {
  position: absolute; left: -10px; bottom: 0; z-index: 3;
  /* una tinta piatta su un rettangolino che sta sopra una fotografia sembra
     incollata: la sfumatura da bosco a bosco scuro è appena percettibile e gli
     dà lo spessore di un cartellino di legno */
  background: linear-gradient(150deg, var(--bosco), var(--bosco-scuro));
  color: var(--carta);
  border-radius: var(--r-s); padding: .95rem 1.15rem;
  /* l'ombra stacca il cartellino dalla foto, il filetto chiaro sul bordo alto
     gli dà lo spessore: senza, resta una macchia verde appoggiata */
  box-shadow: var(--ombra-l), var(--filo-luce);
  display: flex; align-items: center; gap: .8rem;
  transform: rotate(-1.5deg);
}
.intro__bollo-v {
  font-family: var(--serif); font-size: var(--f-2xl); line-height: 1; letter-spacing: -.02em;
}
/* sito.js fa salire il 4,2 da zero, un fotogramma per volta */
[data-conta] { font-variant-numeric: tabular-nums; }
/* Le cifre a larghezza fissa però funzionano solo dove il carattere le ha, e la
   Fraunces incorporata non porta la variante tabellare: le sue cifre vanno da
   1024 a 1461 unità, cioè il 4 è quasi mezzo carattere più largo dell'1. Sui
   due numeri con le grazie il conteggio faceva ballare il bollino e la riga del
   punteggio. Una larghezza minima in em — che segue il corpo qualunque esso
   sia — tiene ferma la scatola mentre il numero dentro sale. */
.intro__bollo-v [data-conta],
.punteggio__v[data-conta] { display: inline-block; min-width: 1.85em; }
.intro__bollo-v sup { font-size: .5em; color: var(--ottone); }
.intro__bollo-e { font-size: var(--f-2xs); line-height: var(--lh-titolo-s); color: rgba(250,246,239,.72); }
@media (max-width: 620px) {
  .intro__bollo { left: 50%; bottom: -14px; transform: translateX(-50%) rotate(-1.5deg); }
}


/* =========================================================== TRE ANIME === */
/* I passi delle griglie sono due soli in tutto il sito: --sp-4 fra le schede
   grandi (le quattro anime, i piatti in vetrina, le indicazioni) e --sp-3 fra
   quelle piccole e fitte (servizi, piatti del menù, legenda, galleria). Erano
   1,1 · 1,15 · 1 · 0,8 · 0,7 · 1,4: sei misure per dire la stessa cosa. */
.anime {
  display: grid; gap: var(--sp-4);
  /* min(100%, 230px) e non 230px secchi: una colonna della griglia non può
     essere più larga del suo contenitore. Sui telefoni davvero stretti (o se
     un giorno queste schede finissero dentro una colonna) 230px fissi
     sfonderebbero il bordo destro, e il body lo nasconderebbe soltanto. */
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 230px), 1fr));
  align-items: stretch;   /* tutte le schede alla stessa altezza */
}
.anima {
  position: relative; overflow: hidden; border-radius: var(--r-s); isolation: isolate;
  min-height: clamp(360px, 42vw, 460px); display: flex; align-items: flex-end;
  padding: 1.7rem; color: var(--carta); text-decoration: none;
  transition: transform var(--t-medio) var(--e-morbida), box-shadow var(--t-medio) var(--e-morbida);
}
/* il blocco di testo parte sempre dalla stessa quota, qualunque sia la didascalia:
   la descrizione occupa sempre tre righe esatte, così i titoli restano allineati */
.anima > div { width: 100%; display: flex; flex-direction: column; }
/* Era scritta in due punti della stessa sezione, a quaranta righe di distanza:
   una diceva il ritaglio, l'altra il colore e l'interlinea. L'altezza minima
   legge l'interlinea dalla variabile, così se un giorno cambia il passo del
   testo fitto le tre righe restano tre righe invece di diventare due e mezza. */
.anima p {
  margin: 0; font-size: var(--f-m); color: rgba(250,246,239,.82);
  line-height: var(--lh-fitto);
  min-height: calc(var(--lh-fitto) * 3em);
  display: -webkit-box; -webkit-line-clamp: 3; line-clamp: 3;
  -webkit-box-orient: vertical; overflow: hidden;
}
/* La griglia passa a tre colonne solo oltre gli ~815px di finestra: fra i 561
   e gli 815 le schede erano due e strette, e la quarta riga di testo veniva
   tagliata a metà frase. La soglia del ritaglio segue quella della griglia. */
@media (max-width: 820px) {
  .anima p { min-height: 0; -webkit-line-clamp: 4; line-clamp: 4; }
}
/* Tutte le foto del sito chiuse dentro un ritaglio si avvicinano allo stesso
   modo: cinque centesimi di scala in --t-lento. Uno solo, sempre lo stesso,
   perché quattro effetti diversi su quattro griglie diverse si notano — e non
   in bene. Il filter è uscito dall'elenco: nessuna regola lo cambiava, e su
   una foto grande è la proprietà più cara che ci sia da animare. */
.anima img {
  position: absolute; inset: 0; z-index: -2; width: 100%; height: 100%; object-fit: cover;
  transition: transform var(--t-lento) var(--e-esce);
}
.anima::after {
  content: ''; position: absolute; inset: 0; z-index: -1;
  background: linear-gradient(180deg, rgba(20,40,34,0) 30%, rgba(20,40,34,.82) 100%);
  transition: background var(--t-medio) var(--e-standard);
}
/* Su touch il :hover non si spegne più dopo il tocco: resta acceso finché non
   si tocca altrove, e la scheda rimane sollevata a caso. Gli effetti di
   movimento valgono solo dove esiste davvero un puntatore. */
@media (hover: hover) and (pointer: fine) {
  /* cinque pixel e non tre come tutte le altre schede: questa è alta più di
     trecento, e con tre non si accorgerebbe nessuno che si è mossa */
  .anima:hover { transform: translateY(-5px); box-shadow: var(--ombra-m); }
  .anima:hover img { transform: scale(1.05); }
  .anima:hover::after { background: linear-gradient(180deg, rgba(20,40,34,.18) 10%, rgba(20,40,34,.88) 100%); }
}

/* sopra i 24 pixel la crenatura può tornare stretta: sono lettere grandi, e
   lasciate alla spaziatura di serie sembrerebbero sparpagliate */
.anima h3 {
  font-size: var(--f-2xl); line-height: var(--lh-titolo-m);
  letter-spacing: -.018em; margin-bottom: var(--sp-1);
}
.anima__ora {
  display: inline-block; margin-top: var(--sp-3); font-size: var(--f-2xs); letter-spacing: .14em;
  text-transform: uppercase; color: var(--oro-caldo);
  border-top: 1px solid rgb(var(--oro-caldo-rgb) / .35); padding-top: var(--sp-2);
}

/* =========================================================== PIATTI HOME = */
.vetrina { display: grid; gap: var(--sp-4); grid-template-columns: repeat(auto-fit, minmax(min(100%, 215px), 1fr)); }
/* bordo adesso, ombra solo al passaggio: una scheda ferma che ha già bordo e
   ombra non ha più niente da dire quando ci si posa sopra */
.piatto-card {
  background: #fff; border: 1px solid var(--linea); border-radius: var(--r-s); overflow: hidden;
  display: flex; flex-direction: column;
  transition: transform var(--t-medio) var(--e-morbida),
              box-shadow var(--t-medio) var(--e-morbida),
              border-color var(--t-veloce) var(--e-standard);
}
@media (hover: hover) and (pointer: fine) {
  .piatto-card:hover { transform: translateY(-3px); box-shadow: var(--ombra-m); border-color: var(--linea-forte); }
}
.piatto-card__img { aspect-ratio: 1; overflow: hidden; background: var(--carta-scura); }
.piatto-card__img img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--t-lento) var(--e-esce); }
.piatto-card__testo { padding: 1.05rem 1.15rem 1.25rem; display: flex; flex-direction: column; gap: var(--sp-1); flex: 1; }
.piatto-card h3 { font-size: var(--f-l); line-height: var(--lh-titolo-s); }
.piatto-card p { margin: 0; font-size: var(--f-s); color: var(--grigio); line-height: var(--lh-fitto); }
/* Niente cifre a larghezza fissa qui: la Fraunces incorporata non porta la
   variante tabellare (le sue cifre vanno da 1024 a 1461 unità) e chiederla
   sarebbe una riga che non fa nulla. Quello che si può fare è stringere
   appena: «€ 12,00» con le grazie e la spaziatura di serie si legge come tre
   segni staccati invece che come un prezzo. */
.piatto-card__prezzo {
  margin-top: auto; padding-top: var(--sp-3);
  font-family: var(--serif); font-size: var(--f-l); color: var(--terracotta);
  letter-spacing: -.012em;
}
.piatto-card__cat {
  font-size: var(--f-3xs); letter-spacing: .15em; text-transform: uppercase; color: var(--petrolio); font-weight: 600;
}

/* ========================================================= RECENSIONI ==== */
.recensioni { background: var(--carta-calda); }
.rec-testa { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: var(--sp-4); }
.punteggio { display: flex; align-items: center; gap: var(--sp-3); }
.punteggio__v { font-family: var(--serif); font-size: var(--f-4xl); line-height: 1; letter-spacing: -.03em; }
.stelle { display: flex; gap: 2px; color: var(--ottone); }
.stelle svg { width: var(--i-m); height: var(--i-m); }
.punteggio__d { font-size: var(--f-s); color: var(--grigio); margin-top: var(--sp-1); }

.giostra { position: relative; margin-top: var(--sp-6); }
.giostra__pista {
  display: flex; gap: var(--sp-4); overflow-x: auto; scroll-snap-type: x mandatory;
  padding-bottom: 1.2rem; margin-inline: calc(var(--mx) * -1); padding-inline: var(--mx);
  scrollbar-width: none;
  /* Il bordo sinistro della pista coincide col bordo dello schermo: senza
     questo, uno scorrimento che supera la prima scheda innesca il gesto
     "indietro" del telefono e si esce dalla pagina. */
  overscroll-behavior-x: contain;
  /* le schede si fermano dopo il margine di pagina, non incollate al bordo */
  scroll-padding-inline: var(--mx);
  /* le recensioni le scrive sito.js: senza un'altezza riservata, al primo
     fotogramma utile tutto ciò che sta sotto (galleria, richiamo, mappa)
     saltava in basso di tre etti di pagina */
  min-height: clamp(260px, 34vw, 320px);
}
.giostra__pista::-webkit-scrollbar { display: none; }
.rec {
  flex: 0 0 min(400px, 84vw); scroll-snap-align: start;
  background: var(--carta); border: 1px solid var(--linea); border-radius: var(--r-s);
  padding: 1.7rem 1.6rem; display: flex; flex-direction: column; gap: var(--sp-3);
  position: relative;
  transition: transform var(--t-medio) var(--e-morbida),
              box-shadow var(--t-medio) var(--e-morbida),
              border-color var(--t-veloce) var(--e-standard);
}
/* La scheda su cui si posa il mouse è anche quella che ferma lo scorrimento
   automatico (lo fa sito.js): il sollevamento appena accennato è il modo di
   dirlo senza scrivere niente — ci si è fermati a leggere questa. */
@media (hover: hover) and (pointer: fine) {
  .rec:hover { transform: translateY(-3px); box-shadow: var(--ombra-s); border-color: var(--linea-forte); }
}
/* Il virgolettone non è testo e non sta nella scala: è un segno grafico, e la
   sua misura la detta la scheda — grande quanto basta a riconoscerlo, chiaro
   quanto basta a non farsi leggere prima delle parole. */
.rec::before {
  content: '\201C'; position: absolute; top: .1rem; right: 1.1rem;
  font-family: var(--serif); font-size: 5rem; line-height: 1; color: var(--linea); pointer-events: none;
}
.rec p { margin: 0; font-size: var(--f-m); line-height: var(--lh-testo); color: var(--inchiostro-2); }
.rec__chi {
  margin-top: auto; padding-top: var(--sp-2);
  border-top: 1px solid var(--linea); font-size: var(--f-s);
}
.rec__chi b { display: block; font-weight: 600; }
.rec__chi span { color: var(--grigio-chiaro); font-size: var(--f-xs); }

.giostra__cmd {
  display: flex; gap: var(--sp-2); margin-top: var(--sp-4); align-items: center;
  flex-wrap: wrap;
}
.giostra__punti { display: flex; gap: .1rem; margin-left: auto; align-items: center; min-height: 32px; }
/* Il pallino resta di 8px, ma il bersaglio da toccare no: erano pulsanti di
   8×8 px, un terzo del minimo. Il disegno passa allo pseudo-elemento e il
   pulsante diventa alto 44px e largo 26 — in orizzontale non si può allargare
   di più senza mandare a capo la riga dei comandi su un telefono. */
.giostra__punto {
  width: auto; height: auto; padding: 18px 9px; border: 0; background: none;
  cursor: pointer; display: grid; place-items: center;
}
/* Il puntino attivo cresce con una scala e non con la larghezza. Non è
   pignoleria: la larghezza del pulsante la decide il suo contenuto, quindi
   allargare il pallino allargava il pulsante, e con la fila allineata a
   destra tutti gli altri puntini scivolavano di venti pixel a ogni cambio di
   scheda. Adesso la fila sta ferma e si muove soltanto il puntino, sul
   compositore. Il colore fa il resto: chi non distingue una misura distingue
   il petrolio dal grigio. */
/* Il fondo non arriva più dalla variabile dei bordi: qui non è un bordo, è un
   indicatore di stato — dice quale gruppo di recensioni si sta guardando — e
   il senso di quel comando sta tutto nel confronto «uno acceso su cinque».
   Con --linea-forte i puntini spenti facevano 1,73:1 sulla carta calda delle
   recensioni, cioè non si vedevano e il confronto non si leggeva.
   --grigio-chiaro fa 4,20:1: ampiamente oltre il 3:1 di un segno grafico. */
.giostra__punto::before {
  content: ''; display: block; width: 8px; height: 8px; border-radius: var(--r-pill);
  background: var(--grigio-chiaro);
  transition: transform var(--t-medio) var(--e-morbida), background var(--t-veloce) var(--e-standard);
}
@media (hover: hover) and (pointer: fine) {
  .giostra__punto:hover::before { background: var(--grigio); transform: scale(1.25); }
}
.giostra__punto.qui::before { transform: scale(1.6); background: var(--petrolio); }

/* barra di avanzamento dello scorrimento automatico */
.giostra__tempo {
  height: 2px; background: var(--linea); border-radius: var(--r-pill); overflow: hidden;
  margin-top: var(--sp-3); width: 100%;
}
/* La barra si riempie con una scala, non con la larghezza: sito.js la riscrive
   dentro un requestAnimationFrame, cioè una sessantina di volte al secondo, e
   ogni scrittura di width costringeva il browser a rifare il calcolo del
   layout. Con transform il lavoro resta tutto sul compositore. */
.giostra__tempo i {
  display: block; height: 100%; width: 100%; background: var(--petrolio);
  transform: scaleX(0); transform-origin: left;
  /* lineare, ed è l'unica del sito: una barra del tempo che accelera o
     rallenta racconta un tempo che non scorre, e si vede subito */
  transition: transform var(--t-barra) linear, background-color var(--t-veloce) var(--e-standard);
}
.giostra.in-pausa .giostra__tempo i { background: var(--grigio); }
.giostra__btn {
  width: 46px; height: 46px; border-radius: 50%; border: 1px solid var(--linea-forte);
  background: none; cursor: pointer; display: grid; place-items: center;
  transition: background var(--t-veloce) var(--e-standard),
              color var(--t-veloce) var(--e-standard),
              border-color var(--t-veloce) var(--e-standard),
              transform var(--t-veloce) var(--e-morbida);
}
.giostra__btn:active { transform: scale(.92); }
/* Questo :hover era identico, riga per riga, alla regola di aria-pressed qui
   sotto: cioè disegnava un vero stato del comando. Su iOS il :hover resta
   appiccicato all'ultimo elemento toccato, quindi dopo aver rimesso in moto
   lo scorrimento (aria-pressed torna a false) il tasto continuava a sembrare
   premuto, e «in pausa / in movimento» — l'unica cosa che quel tasto ha da
   dire — diventava illeggibile. */
@media (hover: hover) and (pointer: fine) {
  .giostra__btn:hover { background: var(--inchiostro); color: var(--carta); border-color: var(--inchiostro); }
}
/* il tasto di pausa resta premuto finché lo si preme di nuovo: deve vedersi
   che lo scorrimento automatico è fermo per volontà di chi guarda */
.giostra__btn[aria-pressed="true"] { background: var(--inchiostro); color: var(--carta); border-color: var(--inchiostro); }
.giostra__btn svg { width: var(--i-m); }

/* ============================================================= GALLERIA == */
.bento {
  display: grid; gap: var(--sp-2);
  grid-template-columns: repeat(2, 1fr);
  grid-auto-rows: minmax(150px, auto);
  /* i mattoni hanno misure diverse: senza "dense" il primo che non ci sta
     lascia il buco aperto per sempre */
  grid-auto-flow: dense;
}
@media (min-width: 760px)  { .bento { grid-template-columns: repeat(4, 1fr); gap: var(--sp-3); } }
@media (min-width: 1140px) { .bento { grid-template-columns: repeat(6, 1fr); } }

/* raggio piccolo, come su tutte le fotografie grandi del sito: su una foto un
   angolo molto tondo si legge come il riquadro di un'applicazione */
.bento figure { margin: 0; overflow: hidden; border-radius: var(--r-xs); position: relative; background: var(--carta-scura); }
.bento img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--t-lento) var(--e-esce); }
.bento button {
  position: absolute; inset: 0; border: 0; padding: 0; background: none; cursor: zoom-in;
  width: 100%; height: 100%;
}
.bento figure::after {
  content: ''; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(180deg, transparent 55%, rgba(20,40,34,.4));
  opacity: 0; transition: opacity var(--t-medio) var(--e-standard);
}
.bento figcaption {
  position: absolute; left: 1.15rem; right: 1.15rem; bottom: 1.15rem; z-index: 2;
  color: var(--carta); font-size: var(--f-s); letter-spacing: .04em;
  line-height: var(--lh-titolo-s);
  /* la didascalia sta sopra una fotografia qualunque: la velatura sotto aiuta,
     ma è l'ombra portata a garantire che le lettere si stacchino anche dove la
     foto è chiara */
  text-shadow: 0 1px 10px rgba(12, 24, 20, .55);
  opacity: 0; transform: translateY(8px);
  /* entra salendo di otto pixel dietro la velatura che si accende; esce
     con la curva delle uscite, che parte piano e poi se ne va in fretta */
  transition: opacity var(--t-medio) var(--e-standard), transform var(--t-medio) var(--e-entra);
  pointer-events: none;
}
@media (hover: hover) and (pointer: fine) {
  .bento figure:hover img { transform: scale(1.05); }
  .bento figure:hover::after { opacity: 1; }
  /* entrando la didascalia usa la curva delle comparse: la scritta si posa,
     non frena di colpo contro il bordo della foto */
  .bento figure:hover figcaption { opacity: 1; transform: none; transition-timing-function: var(--e-esce); }
}
/* Su touch il :hover non esiste: le didascalie non sarebbero comparse mai, e
   in home sono l'unico testo che spiega le quattro foto. */
@media (hover: none) {
  .bento figcaption { opacity: 1; transform: none; }
  .bento figure::after { opacity: 1; }
}
/* Il pulsante coincide con il riquadro della figure, che ritaglia tutto ciò
   che esce: un contorno di fuoco disegnato fuori dal bordo verrebbe tagliato
   via e la galleria non mostrerebbe dove si trova il fuoco. Lo portiamo
   dentro. */
.bento button:focus-visible {
  outline: 2px solid var(--carta); outline-offset: -6px;
  box-shadow: inset 0 0 0 6px rgba(20, 40, 34, .5);
}

/* mattoni della griglia: su mobile 2 colonne, da 760px 4, da 1140px 6 */
.b-2x2, .b-3x2 { grid-column: span 2; grid-row: span 2; }
.b-2x1, .b-3x1 { grid-column: span 2; }
/* Nella fascia a quattro colonne tutti i mattoni valgono 2 tranne le figure
   senza classe, che restano 1×1 e spezzano la parità: in ambiente.html, con
   tredici figure, restavano tre celle vuote in mezzo alla galleria. */
@media (min-width: 760px) and (max-width: 1139.98px) {
  .bento > figure:not([class]) { grid-column: span 2; }
}
@media (min-width: 1140px) {
  .b-3x2 { grid-column: span 3; grid-row: span 2; }
  .b-3x1 { grid-column: span 3; }
}

/* --------------------------------------------------------- lightbox ----- */
/* La finestra non si accende più con display:none → display:flex, che è un
   interruttore: si apriva di scatto e si chiudeva ancora peggio, sparendo in
   un fotogramma con la foto ancora a schermo intero. Adesso resta sempre
   impaginata e si spegne con opacity + visibility, esattamente come il menù a
   tutto schermo. visibility ritardata di quanto dura la dissolvenza fa due
   cose: toglie davvero i comandi dall'ordine di tabulazione quando è chiusa,
   e aspetta la fine dell'uscita invece di tagliarla a metà.
   Tutta l'impaginazione sta qui e non su .aperta: se gap e direzione
   arrivassero con la classe, alla chiusura la finestra tornerebbe a
   impaginarsi in riga mentre sta ancora sfumando, e si vedrebbe saltare. */
.lightbox {
  position: fixed; inset: 0; z-index: 200;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  gap: clamp(1.1rem, 2.6vw, 1.8rem);
  padding: clamp(1rem, 4vw, 3rem);
  background: rgba(18,12,8,.94);
  -webkit-backdrop-filter: blur(6px);
          backdrop-filter: blur(6px);
  opacity: 0; visibility: hidden;
  transition: opacity var(--t-medio) var(--e-entra), visibility 0s var(--t-medio);
}
.lightbox.aperta {
  opacity: 1; visibility: visible;
  transition: opacity var(--t-medio) var(--e-esce), visibility 0s 0s;
}
/* la foto arriva da tre centesimi più piccola: appena percettibile, ma è
   quello che dà l'idea che la finestra si apra invece di comparire */
.lightbox img {
  max-width: 100%; max-height: 76vh; max-height: 76svh; object-fit: contain;
  border-radius: var(--r-xs);
  /* su un fondo quasi nero una fotografia senza ombra sembra ritagliata e
     incollata: l'alone largo le restituisce lo spessore di una stampa */
  box-shadow: 0 24px 70px rgba(0, 0, 0, .55);
  opacity: 0; transform: scale(.97);
  transition: transform var(--t-medio) var(--e-esce), opacity var(--t-medio) var(--e-standard);
}
.lightbox.aperta img { opacity: 1; transform: none; }
.lightbox__dida {
  color: rgba(250,246,239,.82); font-size: var(--f-m); text-align: center;
  max-width: 60ch; margin: 0; letter-spacing: .01em; line-height: var(--lh-fitto);
}
/* La posa di ogni comando sta in --posa e non direttamente in transform: le
   due frecce si centrano verticalmente con un translateY, e senza questa
   accortezza la rientranza alla pressione (che è pur sempre un transform)
   avrebbe cancellato il centramento facendole saltare di ventiquattro pixel
   nel momento esatto in cui le si preme. */
.lightbox__x, .lightbox__pre, .lightbox__suc {
  position: absolute; background: rgba(250,246,239,.1);
  border: 1px solid var(--linea-scura-forte);
  color: var(--carta); width: 48px; height: 48px; border-radius: 50%; cursor: pointer;
  display: grid; place-items: center;
  transform: var(--posa, translateY(0));
  transition: background var(--t-veloce) var(--e-standard),
              border-color var(--t-veloce) var(--e-standard),
              transform var(--t-veloce) var(--e-morbida);
}
@media (hover: hover) and (pointer: fine) {
  .lightbox__x:hover, .lightbox__pre:hover, .lightbox__suc:hover {
    background: rgba(250,246,239,.25); border-color: var(--carta);
  }
}
/* i tre comandi rispondono al dito come tutti gli altri del sito */
.lightbox__x:active, .lightbox__pre:active, .lightbox__suc:active {
  transform: var(--posa, translateY(0)) scale(.92);
}
/* Con il telefono girato in orizzontale la tacca si sposta su un fianco e
   copre i 44 pixel del bordo: «chiudi» e «successiva» ci finivano sotto
   tutti e due, e con la foto a schermo intero sono gli unici due comandi che
   restano. La zona sicura vince sul margine solo quando è più larga. */
.lightbox__x { top: clamp(1rem, 3vw, 2rem); right: max(clamp(1rem, 3vw, 2rem), env(safe-area-inset-right, 0px)); }
.lightbox__pre { left: max(clamp(.6rem, 2vw, 2rem), env(safe-area-inset-left, 0px)); top: 50%; --posa: translateY(-50%); }
.lightbox__suc { right: max(clamp(.6rem, 2vw, 2rem), env(safe-area-inset-right, 0px)); top: 50%; --posa: translateY(-50%); }
.lightbox svg { width: var(--i-m); }

/* Su un telefono le due frecce ai lati stanno sopra la foto e la coprono
   proprio dove la si guarda: scendono in basso, dove ci arriva anche il
   pollice, e la foto si accorcia per lasciar loro il posto. */
@media (max-width: 520px) {
  /* sul contenitore e non su .aperta: legato alla classe, alla chiusura il
     riempimento sparirebbe nel primo fotogramma e la foto farebbe un salto
     in basso proprio mentre sta sfumando */
  .lightbox { padding-bottom: 5rem; padding-bottom: calc(5rem + env(safe-area-inset-bottom)); }
  .lightbox img { max-height: 62vh; max-height: 62svh; }
  .lightbox__pre, .lightbox__suc {
    top: auto; bottom: 1rem; bottom: calc(1rem + env(safe-area-inset-bottom));
    /* in basso non c'è più niente da centrare: la posa torna neutra, ma resta
       un transform valido perché la pressione ci aggiunge la scala */
    --posa: translateY(0);
  }
  .lightbox__pre { left: 22%; }
  .lightbox__suc { right: 22%; }
}

/* =============================================================== MENU ==== */
/* si incolla sotto la testata compatta, non sotto di essa */
.menu-barra {
  position: sticky; top: var(--h-testata); z-index: 60;
  background: rgba(250,246,239,.94);
  -webkit-backdrop-filter: saturate(1.4) blur(14px);
          backdrop-filter: saturate(1.4) blur(14px);
  border-bottom: 1px solid var(--linea);
  transition: box-shadow var(--t-medio) var(--e-standard);
}
.menu-barra.staccata { box-shadow: var(--ombra-barra); }
.menu-barra__in { padding-block: .85rem; display: flex; flex-direction: column; gap: var(--sp-2); }
/* I blocchi della barra non si comprimono mai, e non è pignoleria: due di
   loro — la fila dei filtri e quella delle categorie — scorrono di lato, e
   per la regola dell'altezza minima automatica un elemento che scorre può
   essere schiacciato fino a zero invece di sfondare il suo contenitore. Con
   il tetto d'altezza che la barra prende sotto i 940px succedeva davvero:
   aperto il pannello allergeni, la fila dei filtri spariva del tutto
   (misurata: altezza zero). Quello che non entra nel tetto si raggiunge
   scorrendo dentro la barra, non schiacciandolo. */
.menu-barra__in > * { flex: none; }

.cerca { position: relative; display: flex; align-items: center; }
.cerca svg { position: absolute; left: 1rem; width: var(--i-m); color: var(--grigio-chiaro); pointer-events: none; }
.cerca input {
  width: 100%; padding: .82rem 2.8rem; border: 1px solid var(--linea-forte);
  border-radius: var(--r-pill); background: #fff; font-size: var(--f-m);
  /* Su iPhone un campo di ricerca ha un disegno tutto suo: ombra interna,
     altezza imposta e angoli che non seguono il border-radius. Azzerandolo il
     campo torna a essere una scatola normale, uguale su tutti i telefoni. */
  -webkit-appearance: none; appearance: none;
  transition: border-color var(--t-veloce) var(--e-standard), box-shadow var(--t-veloce) var(--e-standard);
}
/* Niente «outline: none»: il contorno di fuoco resta quello di :focus-visible
   in cima al foglio, uguale a tutti gli altri comandi del sito. L'alone e il
   bordo che passa al petrolio restano, ma come rifinitura — da soli non
   bastavano (l'alone su fondo bianco fa 1,21:1, e il bordo è un filo di un
   pixel largo quanto quello che il campo ha già da fermo), e soprattutto
   sparivano del tutto nella modalità a contrasto forzato di Windows, dove
   ombre e colori di bordo d'autore vengono scartati e l'outline no. */
.cerca input:focus { border-color: var(--petrolio); box-shadow: var(--ombra-fuoco); }
/* via la "x" nativa: usiamo la nostra */
.cerca input::-webkit-search-cancel-button,
.cerca input::-webkit-search-decoration { -webkit-appearance: none; appearance: none; display: none; }
/* Il cerchietto resta di 29px, ma il pulsante che lo contiene è 44×44:
   il bersaglio da toccare non deve essere grande quanto il disegno. */
/* La crocetta non compare più con un display, che è un interruttore: appare e
   sparisce con opacità e scala, come tutto il resto. Il campo ha già il suo
   riempimento a destra, quindi tenerla sempre impaginata non sposta niente, e
   visibility la toglie davvero dall'ordine di tabulazione quando non c'è
   niente da cancellare. */
.cerca__x {
  position: absolute; right: .35rem; width: 44px; height: 44px; border: 0; border-radius: 50%;
  background: none; cursor: pointer; display: grid; place-items: center;
  opacity: 0; visibility: hidden; transform: scale(.82);
  transition: opacity var(--t-veloce) var(--e-standard),
              transform var(--t-veloce) var(--e-morbida),
              visibility 0s var(--t-veloce);
}
.cerca__x.mostra {
  opacity: 1; visibility: visible; transform: none;
  transition: opacity var(--t-veloce) var(--e-standard),
              transform var(--t-veloce) var(--e-esce),
              visibility 0s 0s;
}
.cerca__x svg {
  position: static; width: 13px; height: 13px;
  padding: 8px; box-sizing: content-box;
  background: var(--carta-scura); border-radius: 50%;
  color: var(--grigio);
  transition: background var(--t-veloce) var(--e-standard),
              color var(--t-veloce) var(--e-standard),
              transform var(--t-veloce) var(--e-morbida);
}
/* Era l'unico comando della barra che al passaggio non diceva niente: un
   cerchietto grigio identico a sé stesso, e chi ci arriva col mouse non sa
   di aver trovato un bottone finché non lo preme. */
@media (hover: hover) and (pointer: fine) {
  .cerca__x:hover svg { background: var(--linea-forte); color: var(--inchiostro); }
}
.cerca__x:active svg { transform: scale(.9); }

.filtri { display: flex; flex-wrap: wrap; gap: .45rem; align-items: center; }
.chip {
  display: inline-flex; align-items: center; gap: .45rem;
  padding: .48rem .95rem; border: 1px solid var(--linea-forte); border-radius: var(--r-pill);
  background: none; cursor: pointer; font-size: var(--f-s); font-weight: 450; white-space: nowrap;
  /* Mai "all": dentro c'è anche il riempimento, che sotto i 940px cambia per
     ingrossare il bersaglio, e la larghezza. Animarli significa far cambiare
     altezza alla barra appiccicata in cima mentre il dito è ancora premuto,
     e la riga dei filtri scappa da sotto le pillole. Qui si muovono solo il
     colore, che non tocca il layout, e una scala alla pressione, che nemmeno. */
  transition: background-color var(--t-veloce) var(--e-standard),
              color var(--t-veloce) var(--e-standard),
              border-color var(--t-veloce) var(--e-standard),
              transform var(--t-veloce) var(--e-morbida);
}
@media (hover: hover) and (pointer: fine) {
  .chip:hover { border-color: var(--inchiostro); }
}
/* su un telefono il filtro è una pillola in mezzo a dodici altre uguali: la
   rientranza sotto il dito è l'unica conferma che si è premuta proprio quella */
.chip:active, .btn-allergeni:active, .all-chip:active { transform: scale(.97); }
.chip[aria-pressed="true"] { background: var(--inchiostro); color: var(--carta); border-color: var(--inchiostro); }
.chip svg { width: var(--i-s); height: var(--i-s); }
.chip--verde[aria-pressed="true"] { background: var(--petrolio); border-color: var(--petrolio); }

/* Un trattino verticale pieno in mezzo a una fila di pastiglie si legge come
   un'asta piantata lì. Sfumato alle due estremità diventa quello che deve
   essere: una pausa fra due gruppi di filtri.
   --linea e non --linea-forte: questo trattino non delimita un comando, lo
   separa dal successivo, ed è esattamente la differenza fra le due variabili.
   Con --linea-forte portata a 3:1 sarebbe diventato un'asta vera. */
.filtri__sep {
  width: 1px; height: 22px; margin-inline: .35rem; border-radius: var(--r-pill);
  background: linear-gradient(180deg, transparent, var(--linea) 25%, var(--linea) 75%, transparent);
}

.btn-allergeni {
  display: inline-flex; align-items: center; gap: .5rem; padding: .48rem .95rem;
  border: 1px solid var(--linea-forte); border-radius: var(--r-pill); background: none; cursor: pointer;
  font-size: var(--f-s);
  /* qui "all" era il peggiore: il contatore compare e scompare, la pillola
     cambia larghezza e l'animazione trascinava con sé tutta la riga */
  transition: background-color var(--t-veloce) var(--e-standard),
              color var(--t-veloce) var(--e-standard),
              border-color var(--t-veloce) var(--e-standard),
              transform var(--t-veloce) var(--e-morbida);
}
@media (hover: hover) and (pointer: fine) {
  .btn-allergeni:hover { border-color: var(--inchiostro); }
}
.btn-allergeni.attivo { background: var(--terracotta); color: #fff; border-color: var(--terracotta); }
/* Il pallino con il numero di allergeni scelti era bianco al 25%: sopra la
   pastiglia terracotta si legge, ma la pastiglia diventa terracotta soltanto
   quando il filtro è attivo — e se il numero comparisse un istante prima
   (o restasse dopo) sarebbe bianco trasparente su carta, cioè invisibile.
   Il colore di riposo è la terracotta velata, che vive da sola; sopra la
   pastiglia piena torna la velatura chiara. */
.btn-allergeni .conta {
  background: rgb(var(--terracotta-vivo-rgb) / .16); color: var(--terracotta);
  border-radius: var(--r-pill); padding: 0 .45rem;
  font-size: var(--f-2xs); font-weight: 600; font-variant-numeric: tabular-nums;
}
.btn-allergeni.attivo .conta { background: rgba(255,255,255,.25); color: inherit; }

/* pannello allergeni */
/* grid-template-rows da 0fr a 1fr è l'unico modo onesto di animare un'altezza
   che non si conosce: non è una proprietà composita, ma qui si apre una volta
   sola su richiesta e riguarda un riquadro solo. */
.pannello-all {
  display: grid; grid-template-rows: 0fr;
  transition: grid-template-rows var(--t-medio) var(--e-standard);
}
.pannello-all.aperto { grid-template-rows: 1fr; }
/* overflow:hidden schiaccia l'altezza a zero ma non toglie nulla dall'ordine
   di tabulazione: a pannello chiuso si attraversavano quattordici pulsanti
   allergene invisibili più "Azzera", mentre il bottone dichiarava
   aria-expanded="false". visibility li toglie davvero. */
.pannello-all__in {
  overflow: hidden; visibility: hidden;
  transition: visibility 0s var(--t-medio);
}
.pannello-all.aperto .pannello-all__in { visibility: visible; transition-delay: 0s; }
/* riquadro grande: raggio largo, come il modulo contatti e il consenso mappa */
.pannello-all__box {
  background: #fff; border: 1px solid var(--linea); border-radius: var(--r-m);
  box-shadow: var(--ombra-s);
  padding: 1.2rem; margin-bottom: var(--sp-3);
}
.pannello-all__testa {
  display: flex; flex-wrap: wrap; gap: var(--sp-2); align-items: center; justify-content: space-between;
  margin-bottom: var(--sp-3);
}
.pannello-all__testa p { margin: 0; font-size: var(--f-s); color: var(--grigio); max-width: 62ch; }
/* le caselle le disegna menu.js: l'altezza minima evita che il pannello, nel
   fotogramma in cui è ancora vuoto, si apra come una fessura e poi scatti */
.all-griglia {
  display: grid; gap: .5rem; min-height: 6rem;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 158px), 1fr));
}

.all-chip {
  display: flex; align-items: center; gap: .6rem; padding: .55rem .7rem;
  border: 1px solid var(--linea); border-radius: var(--r-s); background: var(--carta);
  cursor: pointer; font-size: var(--f-s); text-align: left;
  transition: background-color var(--t-veloce) var(--e-standard),
              color var(--t-veloce) var(--e-standard),
              border-color var(--t-veloce) var(--e-standard),
              transform var(--t-veloce) var(--e-morbida);
}
@media (hover: hover) and (pointer: fine) {
  .all-chip:hover { border-color: var(--grigio-chiaro); }
}
.all-chip[aria-pressed="true"] {
  background: var(--inchiostro); color: var(--carta); border-color: var(--inchiostro);
}
.all-chip__ico {
  width: 26px; height: 26px; border-radius: 50%; flex: none; display: grid; place-items: center;
  background: var(--ac, var(--grigio)); color: #fff;
  /* un tondo di colore pieno è piatto: il filo di luce sul bordo alto e
     l'ombra di contatto sotto lo fanno somigliare a un bollo stampato.
     La ricetta sta in :root perché lo stesso tondo compare in tre punti
     della stessa pagina — qui, sulle schede dei piatti e nella legenda — e
     deve sembrare lo stesso oggetto in tutti e tre. */
  box-shadow: var(--rilievo-bollo);
}
.all-chip__ico svg { width: var(--i-s); height: var(--i-s); }
.all-chip[aria-pressed="true"] .all-chip__ico { box-shadow: 0 0 0 2px rgba(250,246,239,.35); }

/* navigazione categorie */
.menu-nav {
  display: flex; gap: .3rem; overflow-x: auto; scrollbar-width: none;
  /* le pillole delle categorie le scrive menu.js: senza altezza riservata la
     barra appiccicata in cima cambierebbe misura appena parte lo script */
  min-height: 2.6rem;
  margin-inline: calc(var(--mx) * -1); padding-inline: var(--mx);
  /* stessa cura della fila dei filtri: un contenitore che scorre ritaglia
     anche in verticale, e il contorno di fuoco della pastiglia esce di cinque
     pixel. Riempimento per fargli posto, margine negativo per non far
     crescere la barra. */
  padding-block: 5px; margin-block: -5px;
  /* come la giostra: parte dal bordo dello schermo, e senza questo uno swipe
     oltre la prima categoria fa tornare indietro il telefono */
  overscroll-behavior-x: contain;
  scroll-padding-inline: var(--mx);
}
.menu-nav::-webkit-scrollbar { display: none; }
.menu-nav a {
  padding: .45rem .85rem; border-radius: var(--r-pill); text-decoration: none; white-space: nowrap;
  font-size: var(--f-s); color: var(--grigio);
  /* la barra delle categorie scorre di lato: animare il riempimento vorrebbe
     dire cambiare la larghezza della pista mentre la si sta trascinando.
     La scala invece non tocca l'impaginazione e può muoversi. */
  transition: background-color var(--t-veloce) var(--e-standard),
              color var(--t-veloce) var(--e-standard),
              transform var(--t-veloce) var(--e-morbida);
}
/* il fondo carta-scura al passaggio somiglia troppo alla pastiglia della
   categoria in cui ci si trova: appiccicato dopo un tocco direbbe che siamo
   in una sezione diversa da quella in cui siamo davvero */
@media (hover: hover) and (pointer: fine) {
  .menu-nav a:hover { color: var(--inchiostro); background: var(--carta-scura); }
}
.menu-nav a.qui { background: var(--petrolio); color: #fff; font-weight: 500; }
/* anche qui la pastiglia rientra sotto il dito, come i filtri sopra */
.menu-nav a:active { transform: scale(.97); }

/* sezioni menu */
.m-sez {
  padding-top: clamp(3rem, 6vw, 5rem);
  /* --h-barra la scrive menu.js con un ResizeObserver sulla .menu-barra:
     indovinare quell'altezza a mano non funziona, perché le pillole vanno a
     capo e il pannello allergeni la raddoppia. Il valore di riserva serve
     perché senza menu.js la variabile non esiste e il calc sarebbe da buttare.

     Il min() è la metà che mancava. Il primo termine posiziona la sezione
     appena sotto la barra appiccicata, ed è giusto — ma non guardava se sotto
     restasse posto: su un telefono girato, con la testata, la barra dei
     filtri e la barra fissa dei due bottoni, il titolo della sezione atterrava
     dietro quest'ultima e chi toccava una categoria vedeva la pagina muoversi
     senza che comparisse niente. Il secondo termine è il freno: qualunque
     cosa faccia la barra, la sezione non scende mai sotto il punto che lascia
     dodici righe di schermo libere sopra la barra fissa in fondo. */
  scroll-margin-top: min(
    calc(var(--h-testata) + var(--h-barra, 300px) + 1rem),
    calc(100vh - var(--h-barra-mob) - 12rem)
  );
  scroll-margin-top: min(
    calc(var(--h-testata) + var(--h-barra, 300px) + 1rem),
    calc(100svh - var(--h-barra-mob) - 12rem)
  );
}
.m-sez__testa { display: flex; align-items: flex-end; gap: 1.2rem; margin-bottom: var(--sp-5); }
.m-sez__testa h2 { font-size: var(--f-3xl); white-space: nowrap; }
/* Il filetto che porta all'occhiello si spegne verso destra invece di finire
   di colpo: come la riga della pesa in ambiente.html, e per la stessa ragione —
   una linea che si interrompe netta sembra tagliata, una che sfuma sembra
   finita. */
.m-sez__testa i {
  flex: 1; height: 1px; margin-bottom: .7rem; font-style: normal;
  background: linear-gradient(90deg, var(--linea-forte), var(--linea));
}
.m-sez__testa span { font-size: var(--f-xs); color: var(--grigio-chiaro); margin-bottom: .55rem; white-space: nowrap; }
/* «Bar & Aperitivi» accanto a «Dalle 8 del mattino», tutto in una riga sola,
   sotto i 430px esce dallo schermo: il body nasconde lo sbordo e l'occhiello
   sparisce senza lasciare traccia. Qui il titolo può andare a capo, il filetto
   si toglie e l'occhiello passa sotto, a tutta larghezza. */
@media (max-width: 700px) {
  .m-sez__testa { flex-wrap: wrap; align-items: baseline; gap: .4rem 1.2rem; }
  .m-sez__testa h2 { white-space: normal; }
  .m-sez__testa i { display: none; }
  .m-sez__testa span { flex-basis: 100%; margin-bottom: 0; white-space: normal; }
}
/* il margine negativo riporta la nota sotto il titolo della sezione, dentro lo
   spazio che la testata aveva già lasciato: senza, la nota aprirebbe un vuoto
   suo e la sezione si allontanerebbe dalla precedente */
.m-sez__nota {
  margin: calc(var(--sp-4) * -1) 0 var(--sp-5); font-size: var(--f-m);
  color: var(--grigio); font-style: italic;
  font-family: var(--serif); font-variation-settings: 'SOFT' 30;
}

.m-lista { display: grid; gap: var(--sp-2); grid-template-columns: repeat(auto-fill, minmax(min(100%, 380px), 1fr)); }

.m-piatto {
  display: grid; grid-template-columns: 92px 1fr; gap: 1rem;
  background: #fff; border: 1px solid var(--linea); border-radius: var(--r-s); padding: .8rem;
  /* l'opacità è uscita dall'elenco: nessuna regola cambia mai quella della
     scheda intera, .escluso spegne soltanto i suoi figli */
  transition: transform var(--t-medio) var(--e-morbida),
              box-shadow var(--t-medio) var(--e-morbida),
              border-color var(--t-veloce) var(--e-standard);
  align-items: start;
}
@media (hover: hover) and (pointer: fine) {
  .m-piatto:hover { transform: translateY(-3px); box-shadow: var(--ombra-s); border-color: var(--linea-forte); }
  /* un piatto che l'utente ha già escluso non si solleva: non è più una cosa
     da scegliere. Sta qui dentro perché annulla una regola che vive solo qui */
  .m-piatto.escluso:hover { transform: none; box-shadow: none; }
}
@media (min-width: 600px) { .m-piatto { grid-template-columns: 108px 1fr; } }

.m-piatto.nascosto { display: none; }

/* display:none non si può animare: la comparsa la fa un'animazione brevissima
   che menu.js appiccica ai soli piatti che rientrano dopo un filtro e che si
   toglie da sola quando è finita. Su telefono, dove i risultati cambiano a
   ogni lettera digitata, è l'unico segnale che la lista si è aggiornata. */
@keyframes appariPiatto { from { opacity: 0; transform: translateY(6px); } }
.m-piatto.appare { animation: appariPiatto .34s var(--e-esce); }

/* le voci il cui prezzo il locale deve ancora confermare: un filetto
   tratteggiato e nient'altro — devono riconoscersi in revisione, non gridare */
.m-piatto--attesa { border-style: dashed; border-color: rgb(var(--terracotta-vivo-rgb) / .38); }

/* Piatto non compatibile con gli allergeni scelti. Il segnale di esclusione
   resta fortissimo — fondo diverso, fotografia in grigio, allergene cerchiato
   in terracotta — ma il TESTO non si spegne più con l'opacità.
   Il pannello promette a chi lo usa che «i piatti che lo contengono restano
   visibili ma vengono sbiaditi»: con opacity .4 sopra la carta calda il nome
   del piatto scendeva a 2,45:1, la descrizione a 1,74:1 e il prezzo a 1,75:1,
   cioè non restavano leggibili affatto. Su 113 piatti e 14 allergeni è
   l'informazione più delicata del sito, e chi la sta usando ha appena
   dichiarato di avere un'allergia: deve poter leggere che cosa sta evitando.
   L'esclusione la dice adesso il colore: nome, descrizione e prezzo passano
   tutti a --grigio, che su carta calda fa 5,10:1 — sopra il minimo — e resta
   comunque un evidente passo indietro rispetto all'inchiostro pieno delle
   schede accanto. L'opacità sopravvive solo dove non toglie informazione: le
   etichette (che ripetono ciò che il piatto dice già altrove) e i pallini
   degli allergeni non evidenziati. */
.m-piatto.escluso { background: var(--carta-calda); }
.m-piatto.escluso .m-piatto__img { opacity: .32; filter: grayscale(.85); }
.m-piatto.escluso .m-piatto__riga h3,
.m-piatto.escluso .m-piatto__desc,
.m-piatto.escluso .m-piatto__prezzo { color: var(--grigio); }
.m-piatto.escluso .etichetta { opacity: .55; }
.m-piatto.escluso .pallino-all { opacity: .55; }
.m-piatto.escluso .pallino-all.evidenzia { opacity: 1; }
/* Lo spegnimento è un cambio di stato, non un lampo: fatto senza transizione
   la lista sbatteva le palpebre a ogni allergene tolto o rimesso. Tutte le
   parti che cambiano lo fanno insieme e nello stesso tempo. Il grigio
   della fotografia rientra qui perché è un francobollo da cento pixel: sulle
   foto grandi il filter resta una proprietà da non toccare.
   Nell'elenco delle proprietà c'è anche il colore, perché da questa passata
   il testo escluso cambia tinta invece di sbiadire: senza, sarebbe stata
   l'unica parte della scheda a cambiare di scatto mentre tutte le altre si
   spengono in mezzo secondo. */
.m-piatto__img,
.m-piatto__riga h3,
.m-piatto__desc,
.m-piatto__prezzo,
.m-piatto .etichetta,
.m-piatto .pallino-all {
  transition: opacity var(--t-medio) var(--e-standard),
              color var(--t-medio) var(--e-standard),
              filter var(--t-medio) var(--e-standard);
}

.m-piatto__img {
  aspect-ratio: 1; border-radius: var(--r-xs); overflow: hidden; background: var(--carta-scura);
  position: relative;
}
.m-piatto__img img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--t-lento) var(--e-esce); }
@media (hover: hover) and (pointer: fine) {
  .m-piatto:hover .m-piatto__img img { transform: scale(1.05); }
}

/* segnaposto foto mancante, disegnato */
.segnaposto {
  width: 100%; height: 100%; display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: .4rem; text-align: center;
  background:
    repeating-linear-gradient(45deg, var(--carta-calda) 0 7px, var(--carta-scura) 7px 14px);
  color: var(--grigio); padding: .4rem;   /* più scuro: lo vedono 52 piatti */
}
.segnaposto svg { width: var(--i-l); height: var(--i-l); opacity: .75; }
/* Fuori scala di proposito, e con una ragione misurabile: il riquadro è largo
   92 pixel e «Foto da / inserire» in maiuscoletto spaziato al gradino più
   piccolo della scala (--f-3xs) andrebbe a capo in mezzo a una parola. Un
   segnaposto che si spezza attira più attenzione della fotografia che manca. */
.segnaposto span { font-size: .54rem; letter-spacing: .07em; text-transform: uppercase; line-height: var(--lh-titolo-s); font-weight: 500; }

.m-piatto__corpo { min-width: 0; padding-top: .15rem; }
/* A 360px «Arrosticini di pecora» accanto a «€ 1,50 l'uno» (che non si può
   spezzare) chiede 205px dentro 187: il prezzo scendeva fuori dalla scheda.
   Con flex-wrap il prezzo va a capo da solo quando non ci sta. */
/* flex-end non tocca la riga normale (il filetto puntinato si prende tutto lo
   spazio libero e non ne resta da distribuire): serve solo quando il prezzo va
   a capo da solo, per tenerlo allineato a destra come sulle altre schede. */
.m-piatto__riga { display: flex; align-items: baseline; gap: .6rem; flex-wrap: wrap; justify-content: flex-end; }
/* La crenatura negativa se n'è andata: erano diciassette pixel di corpo, e
   sotto i ventiquattro stringere le lettere non si legge come eleganza ma
   come una stampa venuta male. Il titolo e il prezzo stanno sullo stesso
   gradino della scala perché sono la stessa informazione letta da due lati. */
.m-piatto__riga h3 {
  font-size: var(--f-l); line-height: var(--lh-titolo-s); letter-spacing: 0;
  min-width: 0; flex: 1 1 auto;
}
/* --linea e non --linea-forte: il filetto puntinato accompagna l'occhio dal
   nome al prezzo, non delimita niente. Con --linea-forte portata a 3:1
   sarebbe diventato un bordo tratteggiato che compete col testo. */
.m-piatto__riga i {
  flex: 1; height: 0; border-bottom: 1px dotted var(--linea); font-style: normal; min-width: 12px;
}
.m-piatto__prezzo {
  font-family: var(--serif); font-size: var(--f-l); white-space: nowrap;
  color: var(--terracotta); letter-spacing: -.012em;
}
.m-piatto__prezzo small { font-size: .7em; color: var(--grigio-chiaro); }
.m-piatto__desc { margin: var(--sp-1) 0 0; font-size: var(--f-s); color: var(--grigio); line-height: var(--lh-fitto); }

/* Il flex-wrap qui sopra era stato scritto come rete per un caso solo. Alla
   prova dei fatti, su uno schermo da 360, il prezzo andava a capo in 78
   righe su 113: la colonna di testo misura 187 pixel e il titolo con le
   grazie se li mangiava quasi tutti. Non era rotto — titolo, filetto, prezzo
   sotto a destra — ma ogni scheda diventava una riga più alta del previsto e
   il filetto guida non guidava più verso niente, in una pagina dove ogni
   riga in più costa.
   Tre misure, tutte piccole, che insieme restituiscono una quarantina di
   pixel alla colonna di testo: la fotografia scende a 80 (resta un
   francobollo riconoscibile), titolo e prezzo scendono di un gradino
   restando sullo stesso — sono la stessa informazione letta da due lati — e
   il filetto puntinato se ne va, perché sotto questa larghezza il posto per
   guidare l'occhio non c'è comunque.
   Misurato dopo: i prezzi a capo scendono da 78 a 49 e la scheda da 216 a
   184 pixel. Non spariscono del tutto, e va bene così — dove restano, adesso
   sono un titolo e sotto un prezzo allineato a destra, non un filetto che
   punta nel vuoto. */
@media (max-width: 480px) {
  .m-piatto { grid-template-columns: 80px 1fr; gap: .8rem; }
  .m-piatto__riga h3, .m-piatto__prezzo { font-size: var(--f-m); }
  .m-piatto__riga i { display: none; }
}

.m-piatto__all { display: flex; flex-wrap: wrap; gap: .28rem; margin-top: var(--sp-2); }
.pallino-all {
  width: 21px; height: 21px; border-radius: 50%; background: var(--ac, var(--grigio)); color: #fff;
  display: grid; place-items: center; cursor: help;
  /* stesso trattamento del bollo grande nel pannello allergeni: un filo di
     luce sopra e un'ombra di contatto, così i quattordici tondi di colore
     smettono di sembrare adesivi piatti */
  box-shadow: var(--rilievo-bollo);
}
.pallino-all svg { width: var(--i-xs); height: var(--i-xs); }
.pallino-all.evidenzia {
  box-shadow: 0 0 0 2px var(--carta), 0 0 0 4px var(--terracotta);
  animation: pulsa .5s var(--e-esce);
}
@keyframes pulsa { 50% { transform: scale(1.22); } }

.etichetta {
  display: inline-flex; align-items: center; gap: .3rem; font-size: var(--f-3xs); font-weight: 600;
  letter-spacing: .08em; text-transform: uppercase; padding: .2rem .5rem;
  border-radius: var(--r-xs); line-height: var(--lh-titolo-s);
  margin-right: .3rem;
}
/* Tinte scurite: sono testi piccoli, servivano più scuri per essere leggibili.
   Le quattro velature restano scritte per esteso e non ricavate dalle
   variabili: sono quattro famiglie di allergene e i loro colori non sono i
   colori del sito — legarli alla tavolozza vorrebbe dire che ritoccando
   l'accento cambia il significato di un'etichetta. */
.et-veg  { background: rgba(122,201,67,.18); color: #3c6a19; }
.et-gf   { background: rgba(31,122,114,.15); color: #14625b; }
.et-pesce{ background: rgba(240,124,34,.16); color: #8f4514; }
.et-top  { background: rgba(176,135,63,.19); color: #715117; }

.nessun-risultato {
  text-align: center; padding: var(--sp-7) 1rem; color: var(--grigio); display: none;
}
.nessun-risultato.mostra { display: block; }
.nessun-risultato svg { width: var(--i-2xl); margin: 0 auto var(--sp-4); opacity: .35; }

/* legenda allergeni completa */
.legenda { background: var(--carta-calda); }
/* anche le quattordici voci della legenda arrivano da menu.js: l'altezza
   riservata tiene ferme le note e il piè di pagina che stanno sotto */
.legenda__griglia {
  display: grid; gap: var(--sp-3); min-height: 20rem;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 330px), 1fr));
}
.legenda__voce {
  display: flex; gap: .9rem; padding: 1rem; background: var(--carta);
  border: 1px solid var(--linea); border-radius: var(--r-s);
  border-left: 3px solid var(--ac, var(--linea-forte));
  transition: transform var(--t-medio) var(--e-morbida), box-shadow var(--t-medio) var(--e-morbida);
}
/* quattordici voci tutte uguali: il sollevamento serve a tenere il segno di
   quale si sta leggendo, non a fare spettacolo */
@media (hover: hover) and (pointer: fine) {
  .legenda__voce:hover { transform: translateY(-3px); box-shadow: var(--ombra-s); }
}
.legenda__ico {
  width: 34px; height: 34px; border-radius: 50%; background: var(--ac, var(--grigio));
  color: #fff; display: grid; place-items: center; flex: none;
  box-shadow: var(--rilievo-bollo);
}
.legenda__ico svg { width: var(--i-m); height: var(--i-m); }
.legenda__voce h3 {
  font-size: var(--f-m); font-family: var(--sans); font-weight: 600;
  letter-spacing: 0; line-height: var(--lh-titolo-s);
}
.legenda__voce p { margin: var(--sp-1) 0 0; font-size: var(--f-s); color: var(--grigio); line-height: var(--lh-fitto); }

.avviso {
  display: flex; gap: 1rem; padding: 1.2rem 1.4rem; background: #fff;
  border: 1px solid var(--linea); border-left: 3px solid var(--terracotta); border-radius: var(--r-s);
}
/* stessa misura dell'icona della .nota-demo del modulo: sono due riquadri
   d'avviso identici per funzione e prima stavano a 21 e a 18 pixel */
.avviso svg { width: var(--i-l); flex: none; color: var(--terracotta); margin-top: .15rem; }
.avviso p { margin: 0; font-size: var(--f-s); color: var(--grigio); line-height: var(--lh-testo); }
.avviso b { color: var(--inchiostro); }

/* ============================================================ CONTATTI === */
.contatti-griglia { display: grid; gap: clamp(2.5rem, 5vw, 4.5rem); }
@media (min-width: 940px) { .contatti-griglia { grid-template-columns: .85fr 1.15fr; align-items: start; } }

.scheda { border-top: 1px solid var(--linea); padding-top: var(--sp-4); margin-bottom: var(--sp-5); }
/* l'ultima scheda della colonna decideva da sola il fondo della sezione, con
   28,8px di margine appeso nel vuoto */
.scheda:last-child { margin-bottom: 0; }
.scheda h3 {
  font-family: var(--sans); font-size: var(--f-2xs); font-weight: 600; letter-spacing: .15em;
  text-transform: uppercase; color: var(--petrolio); margin-bottom: var(--sp-2);
  transition: color var(--t-veloce) var(--e-standard);
}
/* Una scheda di contatti non è un bottone e non deve sollevarsi da nessuna
   parte: l'unica cosa che si accende è la sua etichetta, giusto quel tanto
   che basta a dire quale delle sei si sta guardando.
   L'accensione era --petrolio-alto, che su carta fa 3,11:1: su un'etichetta
   di undici pixel e mezzo in maiuscolo spaziato serve 4,5:1, quindi era
   proprio il passaggio del mouse a rendere meno leggibile la scritta che si
   sta guardando. Il commento della variabile lo diceva già — «solo veli e
   sfumature, mai un testo». Con l'inchiostro (16,06:1) il salto di colore è
   perfino più netto di prima. */
@media (hover: hover) and (pointer: fine) {
  .scheda:hover h3 { color: var(--inchiostro); }
  .scheda a:hover { border-color: var(--inchiostro); }
}
.scheda p { margin: 0; line-height: var(--lh-testo); }
.scheda a { text-decoration: none; border-bottom: 1px solid var(--linea-forte); transition: border-color var(--t-veloce) var(--e-standard); }

/* Il numero di telefono e l'indirizzo email sono due <p>, e `.scheda p`
   (0-1-1) batteva le loro classi (0-1-0): si prendevano l'interlinea del
   testo corrente, 1,66 — che su un corpo da trentun pixel vuol dire una riga
   alta cinquantadue per una riga sola. Bastava il discendente esplicito, e i
   due dati più importanti della pagina riprendono il passo dei titoli.
   L'email tiene la crenatura di serie: è una stringa da leggere lettera per
   lettera, e stringerla è esattamente il contrario di quel che serve. */
.scheda .scheda__grande {
  font-family: var(--serif); font-size: var(--f-2xl);
  line-height: var(--lh-titolo-m); letter-spacing: -.02em;
}
.scheda .scheda__media {
  font-family: var(--serif); font-size: var(--f-xl);
  line-height: var(--lh-titolo-m); letter-spacing: 0; word-break: break-word;
}

.orari { width: 100%; border-collapse: collapse; font-size: var(--f-m); }
/* Il giorno della settimana è <th scope="row"> e non più un <td>: è
   un'intestazione di riga, non un dato, e i lettori di schermo lo ripetono
   prima dell'orario. Ma un th, se il foglio non lo nomina, il browser lo
   disegna a modo suo: grassetto, centrato, senza riempimento e senza il
   filetto di separazione — che infatti partiva da metà tabella. */
.orari td, .orari th { padding: .5rem 0; border-bottom: 1px solid var(--linea); }
.orari th { text-align: left; font-weight: inherit; }
.orari td:last-child { text-align: right; font-variant-numeric: tabular-nums; }
.orari tr:last-child td, .orari tr:last-child th { border-bottom: 0; }
.orari tr.oggi { font-weight: 600; color: var(--petrolio); }
/* La riga di oggi si accende anche di fondo, e non solo di colore e di
   grassetto: dentro una tabella di sette righe tutte uguali il grassetto da
   solo si trova rileggendole una per una. Il velo è al 7% — il testo in
   petrolio sopra fa comunque 4,71:1 — e il fondo sta sulle celle e non sulla
   riga, perché con border-collapse: collapse un <tr> non disegna il proprio
   sfondo su tutti i browser. */
.orari tr.oggi th, .orari tr.oggi td { background: rgb(var(--petrolio-rgb) / .07); }
/* il segnaposto del giorno corrente va sulla prima cella, che ora è il th:
   scritto su td:first-child non sarebbe più comparso su nessuna riga */
.orari tr.oggi th::before { content: '▸ '; }
.orari .chiuso { color: var(--grigio-chiaro); }

/* form */
/* riquadro grande: raggio largo e ombra, e allora il bordo scende al peso
   leggero — una scheda tiene o il bordo o l'ombra, mai tutti e due al massimo */
.form-box {
  background: #fff; border: 1px solid var(--linea); border-radius: var(--r-m);
  box-shadow: var(--ombra-m);
  padding: clamp(1.5rem, 3.5vw, 2.6rem); position: relative;
}
.form-griglia { display: grid; gap: var(--sp-3); }
/* Un elemento di griglia parte da min-width:auto, cioe' non puo' restringersi
   sotto la larghezza minima del proprio contenuto. Il contenuto qui e' un
   <input>, che di suo chiede una ventina di caratteri: 247px misurati. Con i
   48px di riempimento della scatola bianca e i due bordi faceva 297px di
   pavimento, e sotto i 320px di schermo la scatola del modulo usciva dal bordo
   destro trascinandosi dietro tutta la pagina — 36px di scorrimento
   orizzontale su un Galaxy Fold, con il titolo «Tutto quello che serve»
   tagliato a meta'. Azzerando quel pavimento i campi si restringono come
   qualunque altro contenuto.
   La regola sta dentro una media query stretta e non vale ovunque, e il motivo
   e' misurato: fra i 940 e i ~1150px la pagina dei contatti e' a due colonne
   (.85fr / 1.15fr) e quel pavimento di 247px la STIRAVA, allargando la scatola
   bianca oltre la sua parte di griglia. Toglierlo a tutte le larghezze rendeva
   il modulo piu' stretto e piu' alto proprio li' — a 1024px la scatola passava
   da 549 a 501px — cioe' una modifica visibile a un layout gia' approvato dal
   cliente. Sotto i 360px la colonna e' una sola e il pavimento non stira
   niente: li' toglierlo ripara e basta. */
@media (max-width: 359.98px) {
  .form-griglia > * { min-width: 0; }
  .campo input, .campo textarea, .campo select { min-width: 0; }
}
@media (min-width: 620px) { .form-griglia { grid-template-columns: 1fr 1fr; } .campo--largo { grid-column: 1 / -1; } }

.campo { display: flex; flex-direction: column; gap: .4rem; }
.campo label { font-size: var(--f-xs); font-weight: 550; letter-spacing: .06em; text-transform: uppercase; color: var(--grigio); }
.campo label span { color: var(--terracotta); }
.campo input, .campo textarea, .campo select {
  padding: .8rem .95rem; border: 1px solid var(--linea-forte); border-radius: var(--r-s);
  background: var(--carta); font-size: var(--f-m); font-family: inherit;
  transition: border-color var(--t-veloce) var(--e-standard),
              box-shadow var(--t-veloce) var(--e-standard),
              background var(--t-veloce) var(--e-standard);
}
/* Come sul campo di ricerca del menù: niente «outline: none». Il contorno di
   :focus-visible resta ed è l'unica cosa che sopravvive alla modalità a
   contrasto forzato di Windows; il bordo che passa al petrolio, il fondo che
   diventa bianco e l'alone sono la rifinitura che si vede nel resto dei casi. */
.campo input:focus, .campo textarea:focus, .campo select:focus {
  border-color: var(--petrolio); background: #fff;
  box-shadow: var(--ombra-fuoco);
}
.campo textarea { resize: vertical; min-height: 128px; line-height: var(--lh-testo); }
.campo__aiuto { font-size: var(--f-xs); color: var(--grigio-chiaro); line-height: var(--lh-fitto); }

/* La nota sui campi obbligatori sta nell'HTML; i messaggi d'errore li crea
   sito.js quando si prova a inviare il modulo vuoto. Senza queste tre regole
   uscivano come paragrafi qualunque, con lo stesso corpo e lo stesso colore
   del testo d'aiuto: su un telefono, con la tastiera aperta e mezzo modulo
   fuori schermo, l'errore passava inosservato. */
.form-nota { margin: 0 0 var(--sp-4); font-size: var(--f-xs); color: var(--grigio-chiaro); }
.campo__errore {
  margin: 0; font-size: var(--f-xs); font-weight: 500; color: var(--terracotta);
  display: flex; gap: .35rem; align-items: baseline;
}
.campo__errore::before { content: '▲'; font-size: .7em; }
/* scritta dopo la regola del fuoco, e con la stessa specificità: finché il
   campo resta sbagliato il bordo rosso vince anche mentre lo si compila —
   sito.js toglie aria-invalid al primo carattere digitato */
.campo input[aria-invalid="true"],
.campo textarea[aria-invalid="true"],
.campo select[aria-invalid="true"] {
  border-color: var(--terracotta);
  box-shadow: 0 0 0 3px rgb(var(--terracotta-vivo-rgb) / .12);
}

/* è pur sempre un <label>, ma qui il testo è una frase, non un'etichetta:
   niente maiuscolo, niente spaziatura, niente colore d'accento.
   Il selettore ripete .campo per battere la specificità di `.campo label`. */
.campo .privacy-riga,
.privacy-riga {
  display: flex; gap: .7rem; align-items: flex-start;
  font-size: var(--f-s); line-height: var(--lh-fitto); color: var(--grigio);
  text-transform: none; letter-spacing: 0; font-weight: 400;
}
.privacy-riga span { color: inherit; }
.privacy-riga span span { color: var(--terracotta); }   /* solo l'asterisco */
.privacy-riga input { margin-top: .22rem; accent-color: var(--petrolio); width: 17px; height: 17px; flex: none; }

.nota-demo {
  display: flex; gap: .8rem; align-items: flex-start;
  background: rgb(var(--terracotta-vivo-rgb) / .08);
  border: 1px dashed rgb(var(--terracotta-vivo-rgb) / .45);
  border-radius: var(--r-s); padding: .9rem 1.1rem; margin-bottom: var(--sp-4);
}
/* senza questa riga il display:flex vincerebbe sull'attributo hidden
   e l'avviso comparirebbe prima ancora di premere invio */
.nota-demo[hidden] { display: none; }
.nota-demo svg { width: var(--i-l); flex: none; color: var(--terracotta); margin-top: .2rem; }
.nota-demo p { margin: 0; font-size: var(--f-s); color: #8a4a22; line-height: var(--lh-fitto); }

/* mappa disegnata */
.mappa {
  position: relative; border-radius: var(--r-m); overflow: hidden;
  border: 1px solid var(--linea); background: #eae4d7;
}
/* --- mappa di Google caricata solo dopo il consenso ai suoi cookie --- */
.mappa__sfondo { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.mappa__togli {
  background: none; border: 0; padding: 0; font: inherit; cursor: pointer;
  color: var(--petrolio); text-decoration: underline;
  text-decoration-thickness: 1px; text-underline-offset: .18em;
  transition: color var(--t-veloce) var(--e-standard);
}
/* era l'unico comando della nota senza risposta al passaggio */
@media (hover: hover) and (pointer: fine) {
  .mappa__togli:hover { color: var(--inchiostro); }
}

/* riquadro compatto sopra il piè di pagina */
.mappa-mini { background: var(--carta-calda); border-top: 1px solid var(--linea); }
.mappa-mini__in {
  display: grid; gap: clamp(1.5rem, 4vw, 3rem); align-items: center;
  /* stesso passo corto delle fasce colorate che seguono una sezione: questa è
     una striscia di chiusura, non un capitolo */
  padding-block: var(--sp-7);
}
@media (min-width: 900px) { .mappa-mini__in { grid-template-columns: .85fr 1.15fr; } }
/* un gradino sotto .titolo-sez: è una striscia di servizio sopra il piè di
   pagina, e deve leggersi come tale */
.mappa-mini h2 { font-size: var(--f-3xl); margin-bottom: var(--sp-2); }
.mappa-mini p { color: var(--grigio); font-size: var(--f-m); margin: 0 0 var(--sp-4); }
/* .mappa-mini p (0-1-1) batteva .occhiello (0-1-0) e l'etichetta di sezione si
   portava dietro un margine inferiore doppio del suo, staccandosi dal titolo
   che dovrebbe introdurre. Stessa specificità della regola che vinceva. */
.mappa-mini .occhiello { margin: 0 0 var(--sp-2); }
.mappa-mini .mappa__telaio { aspect-ratio: 16/9; }
.mappa-mini .mappa__box { max-width: 400px; padding: 1.2rem; }
.mappa-mini .mappa__box h3 { font-size: var(--f-l); }
.mappa-mini .mappa__box p { font-size: var(--f-s); margin-bottom: var(--sp-3); }
/* stessa misura del riquadro grande: è lo stesso riquadro, e prima stava a 24
   pixel qui e a 30 sulla pagina dei contatti */
.mappa-mini .mappa__box svg { width: var(--i-xl); margin-bottom: var(--sp-2); }

.mappa__velo {
  position: absolute; inset: 0; display: grid; place-items: center;
  padding: clamp(1.2rem, 4vw, 2.4rem); text-align: center;
  background: linear-gradient(180deg, rgba(36,24,17,.34), rgba(36,24,17,.62));
  -webkit-backdrop-filter: blur(3px);
          backdrop-filter: blur(3px);
  cursor: pointer;
  transition: background var(--t-medio) var(--e-standard);
}
@media (hover: hover) and (pointer: fine) {
  .mappa__velo:hover { background: linear-gradient(180deg, rgba(36,24,17,.28), rgba(36,24,17,.56)); }
}
.mappa__box {
  background: var(--carta); border-radius: var(--r-m); box-shadow: var(--ombra-l);
  padding: clamp(1.3rem, 3vw, 2rem); max-width: 480px;
}
.mappa__box svg { width: var(--i-xl); margin: 0 auto var(--sp-2); color: var(--petrolio); }
.mappa__box h3 { font-size: var(--f-xl); line-height: var(--lh-titolo-m); margin-bottom: var(--sp-2); }
.mappa__box p { margin: 0 0 var(--sp-4); font-size: var(--f-s); color: var(--grigio); line-height: var(--lh-testo); }
.mappa__box .btn { width: 100%; }
/* È l'unica strada per chi i cookie di Google non li vuole: deve rispondere al
   passaggio come un collegamento vero, non restare una riga grigia. */
.mappa__box a.alt {
  display: inline-block; margin-top: var(--sp-3); font-size: var(--f-s); color: var(--grigio);
  text-decoration-thickness: 1px; text-underline-offset: .18em;
  transition: color var(--t-veloce) var(--e-standard);
}
@media (hover: hover) and (pointer: fine) {
  .mappa__box a.alt:hover { color: var(--inchiostro); }
}
.mappa--attiva .mappa__sfondo,
.mappa--attiva .mappa__velo { display: none; }
.mappa iframe { display: block; width: 100%; height: 100%; border: 0; }
.mappa__telaio { position: relative; width: 100%; aspect-ratio: 1000/560; }
.mappa__nota {
  font-size: var(--f-xs); color: var(--grigio); margin: var(--sp-2) 0 0;   /* il grigio chiaro su carta calda si fermava a 4,20:1 */
  display: flex; gap: .45rem; align-items: flex-start; line-height: var(--lh-fitto);
}
.mappa__nota svg { width: var(--i-s); flex: none; margin-top: .2rem; }

/* La regola compatta (.mappa-mini .mappa__telaio, 0-2-0) batteva sempre la
   media query scritta con un solo nome di classe: a 360px il telaio restava
   alto 182px mentre il riquadro del consenso ne chiedeva 290, e overflow:
   hidden tagliava via titolo, bottone e link alternativo. Per batterla serve
   un selettore altrettanto specifico, non basta la media query. */
@media (max-width: 620px) {
  .mappa__telaio,
  .mappa-mini .mappa__telaio { aspect-ratio: 4 / 5; min-height: 21rem; }
}
/* Quel 4/5 pero' e' una proporzione, non un'altezza: stringendo lo schermo il
   telaio si accorcia (280px di larghezza = 336px di altezza) mentre il riquadro
   del consenso si ALLUNGA, perche' titolo e testo vanno a capo piu' volte. Sotto
   una certa soglia il secondo supera il primo e overflow:hidden di .mappa taglia
   via quello che avanza, che sta tutto in fondo: misurato, a 340px sparisce il
   collegamento «oppure aprila direttamente su Google Maps» — cioe' l'unica strada
   per chi i cookie di Google non li accetta — e a 280px sparisce anche il pulsante
   «Accetta e mostra la mappa», lasciando un riquadro che non si puo' ne' accettare
   ne' aggirare.
   Sotto i 360px, allora, finche' la mappa non e' stata accettata l'altezza la
   detta il riquadro: il velo torna nel flusso e il telaio gli si adatta.
   La condizione :not(.mappa--attiva) non e' un vezzo: a consenso dato il velo
   sparisce e dentro il telaio resta solo l'iframe di Google, che e' alto 100% del
   suo contenitore — senza proporzione fissa sarebbe alto zero e la mappa non si
   vedrebbe affatto. Sopra i 360px non cambia nulla: li' il riquadro ci sta gia'
   tutto (misurato: 0px tagliati da 360px in su). */
@media (max-width: 359.98px) {
  .mappa:not(.mappa--attiva) .mappa__telaio { aspect-ratio: auto; min-height: 0; }
  .mappa:not(.mappa--attiva) .mappa__velo { position: relative; }
}
/* .mappa-mini p (0-1-1) batteva .mappa__nota (0-1-0): la nota si portava
   dietro 20,8px di margine sotto che, per collasso, uscivano dalla sezione e
   lasciavano una striscia di carta calda incastrata sopra il piè di pagina. */
.mappa-mini .mappa__nota { margin: var(--sp-2) 0 0; }

/* Con auto-fit le quattro schede attraversavano una fascia a tre colonne fra i
   ~940 e i ~1300px e la quarta restava spaiata su una riga tutta sua: due
   passi espliciti, 1 → 2 → 4, e la simmetria non si rompe in nessun punto. */
.indicazioni {
  display: grid; gap: var(--sp-5) clamp(1.2rem, 3vw, 2.4rem);
  grid-template-columns: 1fr;
  margin-top: var(--sp-6);
}
@media (min-width: 600px)  { .indicazioni { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1280px) { .indicazioni { grid-template-columns: repeat(4, 1fr); } }
/* Icona e titolo stanno sulla stessa riga e si centrano a vicenda:
   nessun calcolo, quindi nessun disallineamento possibile.
   La descrizione va sotto, rientrata quanto l'icona.

   Il filetto sopra è lo stesso delle schede della colonna contatti, ed è qui
   che si chiude il difetto segnalato dal cliente. I quattro testi hanno
   lunghezze diverse: su quattro colonne il più corto finisce un centinaio di
   pixel più in alto del più lungo, e sotto quella riga sfrangiata cominciava
   il riempimento della sezione. Non c'era un vuoto solo, ce n'erano quattro di
   altezza diversa, e senza niente che dicesse dove finisse il gruppo l'occhio
   li leggeva tutti insieme come una fascia di nulla. I quattro filetti
   allineati in cima danno al gruppo un bordo, e un gruppo che ha un bordo si
   vede dove finisce anche quando le sue schede non finiscono insieme. */
.indicazione {
  display: flex; flex-direction: column; gap: .55rem;
  border-top: 1px solid var(--linea); padding-top: var(--sp-4);
}
.indicazione__testa { display: flex; align-items: center; gap: .8rem; }
/* la velatura si ricava dalla terna del petrolio e non è più scritta a mano:
   era rimasto il vecchio 31,122,114, cioè il verde di prima che la tinta
   venisse scurita per il contrasto — due verdi diversi a un pixel di distanza */
.indicazione__ico {
  width: 42px; height: 42px; flex: none; border-radius: 50%;
  background: rgb(var(--petrolio-rgb) / .1); color: var(--petrolio);
  display: grid; place-items: center;
  transition: background var(--t-veloce) var(--e-standard), transform var(--t-medio) var(--e-morbida);
}
@media (hover: hover) and (pointer: fine) {
  .indicazione:hover .indicazione__ico { background: rgb(var(--petrolio-rgb) / .18); transform: translateY(-3px); }
}
.indicazione__ico svg { width: var(--i-l); height: var(--i-l); display: block; }
/* era un <b>, ora è un <h3 class="indicazione__tit">: senza questa regola i
   quattro titoli di «Come arrivare» tornavano al corpo grande con le grazie
   di tutti gli altri titoli, e la scheda perdeva il suo equilibrio */
.indicazione__tit {
  font-family: var(--sans); font-weight: 600; font-size: var(--f-m);
  line-height: var(--lh-titolo-s); letter-spacing: 0; margin: 0;
}
.indicazione p {
  margin: 0; color: var(--grigio); font-size: var(--f-s); line-height: var(--lh-fitto);
  padding-left: calc(42px + .8rem);
}
@media (max-width: 560px) { .indicazione p { padding-left: 0; } }

/* ============================================================= SERVIZI === */
.servizi { display: grid; gap: var(--sp-2); grid-template-columns: repeat(auto-fill, minmax(min(100%, 235px), 1fr)); }
.servizio {
  display: flex; align-items: center; gap: .85rem; padding: 1rem 1.1rem;
  border: 1px solid var(--linea); border-radius: var(--r-s); background: #fff;
  font-size: var(--f-m); line-height: var(--lh-titolo-s);
  transition: transform var(--t-medio) var(--e-morbida),
              border-color var(--t-veloce) var(--e-standard),
              box-shadow var(--t-medio) var(--e-morbida);
}
@media (hover: hover) and (pointer: fine) {
  .servizio:hover { transform: translateY(-3px); border-color: var(--petrolio); box-shadow: var(--ombra-s); }
}
.servizio svg { width: var(--i-l); flex: none; color: var(--petrolio); }

/* ============================================================== BLOCCHI == */
.blocco { display: grid; gap: clamp(2rem, 5vw, 4.5rem); align-items: center; }
@media (min-width: 900px) {
  .blocco { grid-template-columns: 1fr 1fr; }
  .blocco--inv .blocco__media { order: -1; }
}
.blocco__media img { width: 100%; border-radius: var(--r-xs); box-shadow: var(--ombra-m); }
.blocco__testo h2 { font-size: var(--f-3xl); margin-bottom: var(--sp-3); }
.blocco__testo p { color: var(--grigio); margin-block: 0; }
.blocco__testo p + p { margin-top: var(--sp-4); }
.lista-punti { list-style: none; padding: 0; margin: var(--sp-5) 0 0; display: grid; gap: var(--sp-2); }
.lista-punti li { display: flex; gap: .7rem; align-items: flex-start; font-size: var(--f-m); }
.lista-punti svg { width: var(--i-m); flex: none; color: var(--petrolio); margin-top: .3rem; }

/* ================================================================= CTA === */
.cta {
  background: var(--bosco); color: var(--carta); text-align: center;
  position: relative; overflow: hidden;
}
.cta::before {
  content: ''; position: absolute; inset: 0; opacity: .12;
  background: radial-gradient(70% 100% at 50% 0%, var(--petrolio-alto), transparent 70%);
}
.cta__in { position: relative; z-index: 1; }
/* diciotto battute per riga: il richiamo finale è una frase, e va letta in due
   o tre righe corte, non in una lunghissima che attraversa tutto lo schermo */
.cta h2 {
  font-size: var(--f-4xl); max-width: 18ch; margin: 0 auto var(--sp-3);
}
.cta p { color: rgba(250,246,239,.8); max-width: 52ch; margin: 0 auto; }
.cta__azioni { display: flex; flex-wrap: wrap; gap: .8rem; justify-content: center; margin-top: var(--sp-5); }

/* ============================================================== FOOTER === */
.pie {
  /* stesso trattamento della fascia informazioni, che è l'altra campitura
     d'inchiostro del sito: sfumatura di due punti e filo di luce sullo
     spigolo alto, perché il piede della pagina sia una superficie e non un
     buco nero sotto la carta */
  background: linear-gradient(180deg, var(--inchiostro-2), var(--inchiostro) 34%);
  box-shadow: var(--filo-luce);
  color: rgba(250,246,239,.7); padding-block: var(--sp-7) 2rem;
}
.pie__griglia { display: grid; gap: var(--sp-5); grid-template-columns: repeat(auto-fit, minmax(min(100%, 195px), 1fr)); }
.pie__marchio .logo-img { width: 176px; margin-bottom: var(--sp-4); color: var(--carta); }
.pie p { margin: 0; font-size: var(--f-s); line-height: var(--lh-testo); }
/* I titoli delle colonne del piè di pagina adesso sono <h2 class="pie__titolo">
   e non più <h4> (un h4 senza h3 sopra spezza la scaletta dei titoli per chi
   naviga con la voce). I valori sono gli stessi di prima: cambia solo il
   gancio. Senza questa regola gli h2 prendevano dall'alto del foglio il corpo
   grande con le grazie, e il piè di pagina di tutte e cinque le pagine si
   ritrovava tre titoloni al posto delle etichettine maiuscole. */
.pie__titolo {
  font-family: var(--sans); font-size: var(--f-2xs); font-weight: 600; letter-spacing: .15em;
  text-transform: uppercase; color: var(--carta); margin: 0 0 var(--sp-3);
}
.pie a { text-decoration: none; transition: color var(--t-veloce) var(--e-standard); }
@media (hover: hover) and (pointer: fine) {
  .pie a:hover { color: var(--carta); }
}
.pie__lista { list-style: none; padding: 0; margin: 0; display: grid; gap: .45rem; font-size: var(--f-s); }
/* Il telefono e l'email del piè di pagina sono gli unici collegamenti del
   sito scritti dentro una frase e senza nessun segno che li distingua dal
   testo intorno: stesso colore, nessun filetto. La sottolineatura velata li
   rimette a posto senza accendere il piè di pagina. */
.pie p a {
  text-decoration: underline; text-decoration-color: rgba(250, 246, 239, .38);
  text-decoration-thickness: 1px; text-underline-offset: 4px;
}

.social { display: flex; gap: .55rem; margin-top: var(--sp-4); }
.social a {
  width: 40px; height: 40px; border: 1px solid var(--linea-scura-forte); border-radius: 50%;
  display: grid; place-items: center;
  /* niente "all": sotto i 940px questi tondi passano da 40 a 44px per essere
     toccabili, e con "all" la crescita diventava un'animazione a ogni
     ridimensionamento della finestra */
  transition: background var(--t-veloce) var(--e-standard),
              color var(--t-veloce) var(--e-standard),
              border-color var(--t-veloce) var(--e-standard),
              transform var(--t-medio) var(--e-morbida);
}
/* colore, fondo e bordo si invertono: era solo il sollevamento a stare al
   riparo, e su telefono i tre tondi restavano accesi dopo il tocco */
@media (hover: hover) and (pointer: fine) {
  .social a:hover {
    background: var(--carta); color: var(--inchiostro); border-color: var(--carta);
    transform: translateY(-3px);
  }
}
.social a:active { transform: scale(.94); }
.social svg { width: var(--i-m); }

.pie__fondo {
  margin-top: var(--sp-6); padding-top: var(--sp-4); border-top: 1px solid var(--linea-scura);
  display: flex; flex-wrap: wrap; gap: .6rem 1.5rem; justify-content: space-between;
  align-items: center;
  font-size: var(--f-xs); color: rgba(250,246,239,.5);
}
.pie__firma { margin-left: auto; }
.pie__firma a {
  color: rgba(250,246,239,.82); font-weight: 550;
  border-bottom: 1px solid var(--linea-scura-forte); padding-bottom: 1px;
  transition: color var(--t-veloce) var(--e-standard), border-color var(--t-veloce) var(--e-standard);
}
@media (hover: hover) and (pointer: fine) {
  .pie__firma a:hover { color: var(--carta); border-color: var(--carta); }
}
@media (max-width: 700px) { .pie__firma { margin-left: 0; } }

/* ------------------------------------------------------- animazioni ----- */
/* Gli stati di partenza delle comparse valgono solo se il JavaScript è vivo.
   La classe "js" la mette uno script in linea nel <head> di ogni pagina: se
   gli script sono spenti o bloccati — rete pubblica, estensioni, un errore
   qualsiasi in sito.js — la classe non arriva, queste righe non valgono e la
   pagina si legge tutta. Senza questa precauzione metà del sito (intro, tre
   anime, vetrina, recensioni, galleria, mappa: quasi ogni blocco porta la
   classe .rivela) resterebbe trasparente per sempre.
   :where() e non "html.js " davanti a ogni selettore perché :where() non pesa
   nulla in specificità: le regole .dentro continuano a vincere così come
   sono, senza doverle riscrivere una per una. */
/* Venti pixel e non ventisei: una comparsa credibile è un blocco che si
   assesta, non che arriva da fuori. Sopra i venticinque comincia a leggersi
   come una diapositiva che entra, e su una pagina dove quasi ogni sezione
   porta questa classe diventa il gesto che si ricorda del sito.
   L'opacità finisce prima del movimento, in --t-medio contro --t-lento: il
   blocco è già tutto leggibile mentre si sta ancora posando, e chi scorre
   veloce non trova mai testo a mezza tinta. È il motivo per cui le due
   proprietà hanno durate diverse invece della stessa. */
:where(html.js) .rivela { opacity: 0; transform: translateY(20px); }
.rivela.dentro {
  opacity: 1; transform: none;
  transition: opacity var(--t-medio) var(--e-standard), transform var(--t-lento) var(--e-esce);
}
/* IL CONTRATTO DELLA COMPARSA, E L'UNICO POSTO IN CUI SI ROMPEVA.
   La riga qui sopra nasconde un blocco fidandosi che qualcuno gli porti la
   classe "dentro". A portarla è sito.js, che però prende il suo elenco una
   volta sola, appena la pagina è pronta: tutto ciò che nasce dopo non è in
   quell'elenco, non viene osservato e la classe non arriverà mai.
   È esattamente il caso delle quattordici voci della legenda allergeni di
   menu.html, che le scrive menu.js — cioè lo script successivo — con la
   classe .rivela già addosso. Misurato in Chrome: su menu.html i sette
   .rivela scritti a mano nella pagina ricevono tutti "dentro", le quattordici
   .legenda__voce nessuna, e restano a opacità zero per sempre, in tutti i
   casi tranne quello del movimento ridotto (dove le regole !important in
   fondo al foglio le riportano a galla). Sparivano l'elenco dei quattordici
   allergeni e le loro descrizioni: l'informazione che sul sito di un locale
   non può mancare per nessun motivo.
   La cura giusta è qui e non altrove: chi disegna la scomparsa deve anche
   garantirne il ritorno. Dentro un contenitore riempito dal JavaScript la
   comparsa non si dichiara affatto — la legenda arriva già a schermo intero,
   come è giusto per un elenco che si consulta e non si guarda scorrere.
   0-2-0 contro lo 0-1-0 della regola che nasconde: vince senza !important. */
:where(html.js) .legenda__griglia .rivela { opacity: 1; transform: none; }

.rivela[data-ritardo="1"].dentro { transition-delay: calc(var(--passo-scaletta) * 1); }
.rivela[data-ritardo="2"].dentro { transition-delay: calc(var(--passo-scaletta) * 2); }
.rivela[data-ritardo="3"].dentro { transition-delay: calc(var(--passo-scaletta) * 3); }
.rivela[data-ritardo="4"].dentro { transition-delay: calc(var(--passo-scaletta) * 4); }
.rivela[data-ritardo="5"].dentro { transition-delay: calc(var(--passo-scaletta) * 5); }

/* ---- titolo che sale da sotto una riga invisibile ---------------------- */
.rivela-titolo { overflow: hidden; padding-bottom: .12em; }
.rivela-titolo > * {
  display: block;
  /* il titolo è l'unica cosa che si muove da sola dentro la sua riga: se ne
     prende tutto il tempo (--t-lento), perché è il gesto che dà il passo a
     tutta la sezione che gli entra sotto */
  transition: transform var(--t-lento) var(--e-esce);
}
/* senza script il titolo non deve restare spinto sotto la riga che lo ritaglia */
:where(html.js) .rivela-titolo > * { transform: translateY(105%); }
.rivela-titolo.dentro > * { transform: none; }

/* ---- immagine che si scopre dal basso ----------------------------------
   Niente clip-path sull'elemento osservato: un elemento ritagliato a zero
   risulta "non visibile" al rilevatore di scorrimento e non si rivelerebbe
   mai. Ritagliamo il contenitore e muoviamo l'immagine dentro di esso. */
/* La fotografia sale di ventiquattro pixel partendo appena ingrandita: la
   scala che si riassorbe è quello che le fa sembrare di prendere posto nel
   suo ritaglio invece di scivolarci dentro. Tre centesimi bastano — di più e
   si vedrebbe la foto stringersi, che è un effetto, non un movimento. */
:where(html.js) .rivela-foto img { transform: translateY(24px) scale(1.03); opacity: 0; }
.rivela-foto.dentro img {
  transform: none; opacity: 1;
  transition: transform var(--t-lento) var(--e-esce), opacity var(--t-medio) var(--e-standard);
}

/* ---- linea che si disegna ----------------------------------------------
   Lo stato di partenza chiede DUE classi, .rivela-linea e .rivela, e non è
   una ripetizione: la classe "dentro" — quella che fa partire il disegno —
   arriva soltanto agli elementi che sito.js raccoglie, e li raccoglie
   cercando .rivela, .rivela-titolo e .rivela-foto. Un elemento che avesse la
   sola .rivela-linea non riceverebbe mai "dentro" e i suoi due filetti
   resterebbero schiacciati a zero per sempre. Oggi non capita perché l'unica
   .riga-pesa del sito porta entrambe le classi, ma è una coincidenza del
   markup: chiedendole tutte e due, nel caso storto i filetti si disegnano
   normalmente invece di sparire.
   0-2-1 contro lo 0-2-1 della regola "dentro" qui sotto, che è scritta dopo
   e quindi vince: nessun !important. */
:where(html.js) .rivela.rivela-linea::before,
:where(html.js) .rivela.rivela-linea::after { transform: scaleX(0); transform-origin: left; }
.rivela-linea.dentro::before, .rivela-linea.dentro::after {
  transform: scaleX(1); transition: transform var(--t-lento) var(--e-esce) .1s;
}

/* ---- parallasse leggera: la foto scorre più lenta della pagina ---------
   Qui non c'è nessuna regola, ed è voluto: .parallasse è solo il segno che
   sito.js ha acceso l'effetto. Il will-change lo mette e lo toglie lo script,
   fotogramma per fotogramma, perché dichiarato nel foglio teneva un livello
   sulla scheda video per tutta la vita della pagina — anche a hero passato da
   un pezzo, e anche sui telefoni, dove di memoria video ce n'è poca e
   l'effetto lo script lo spegne del tutto. */

/* ---- pulsanti con onda al passaggio ------------------------------------ */
/* Il riflesso segue il puntatore perché sito.js scrive --px e --py in
   percentuale: il centro del chiarore si sposta senza transizione, ed è
   giusto così — un riflesso che insegue il mouse con mezzo secondo di ritardo
   sembra un elastico. L'unica cosa che attraversa una transizione è
   l'accensione, che entra svelta e si spegne con più calma: uscendo dal
   bottone il chiarore si allontana invece di essere staccato. */
.btn::after {
  content: ''; position: absolute; inset: 0; border-radius: inherit;
  background: radial-gradient(circle at var(--px, 50%) var(--py, 50%),
              rgba(255,255,255,.22), transparent 62%);
  opacity: 0; transition: opacity var(--t-medio) var(--e-entra); pointer-events: none;
}
@media (hover: hover) and (pointer: fine) {
  .btn:hover::after { opacity: 1; transition: opacity var(--t-veloce) var(--e-esce); }
}

/* ---- sezioni del menù che entrano in dissolvenza ----------------------- */
/* Quindici sezioni una dietro l'altra, e chi cerca un piatto scorre in
   fretta: qui la comparsa è più corta e più corta è anche la distanza, se no
   la pagina sembra rincorrere il dito. */
.m-sez.entra { opacity: 0; transform: translateY(14px); }
.m-sez.entra.dentro {
  opacity: 1; transform: none;
  transition: opacity var(--t-medio) var(--e-standard), transform var(--t-medio) var(--e-esce);
}

/* ---- icone della fascia informazioni ----------------------------------- */
/* La rotazione se n'è andata: un'icona che si storta al passaggio è il
   dettaglio che fa sembrare un sito uscito da uno stampo. Resta la scala,
   che dice la stessa cosa senza farsi notare. La transizione sta accanto
   alla regola dell'icona, su nella sezione FASCIA INFO. */
@media (hover: hover) and (pointer: fine) {
  .fascia-info__voce:hover svg { transform: scale(1.12); }
}

/* ---- foto dei piatti in evidenza --------------------------------------- */
/* Anche qui la foto si avvicina di cinque centesimi come tutte le altre del
   sito: l'inclinazione di 0,6 gradi che c'era prima era l'unico effetto da
   modello scaricato rimasto in pagina, e su un piatto fotografato dritto si
   notava. */
@media (hover: hover) and (pointer: fine) {
  .piatto-card:hover .piatto-card__img img { transform: scale(1.05); }
}

/* ========================================================= BARRA MOBILE == */
.barra-mob {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 80; display: none;
  background: rgba(250,246,239,.96);
  -webkit-backdrop-filter: blur(12px);
          backdrop-filter: blur(12px);
  border-top: 1px solid var(--linea);
  padding: .55rem .8rem;
  padding-bottom: calc(.55rem + env(safe-area-inset-bottom));
  /* in orizzontale la tacca sta di lato: i bottoni non ci finiscono sotto */
  padding-left: max(.8rem, env(safe-area-inset-left));
  padding-right: max(.8rem, env(safe-area-inset-right));
  gap: .5rem;
}
/* min-height fa sì che l'altezza della barra sia davvero --h-barra-mob:
   48px di bottone + 0,55rem × 2 di padding + il filetto = 68px esatti.
   Senza, il numero riservato dal body e l'altezza vera divergerebbero. */
.barra-mob .btn { flex: 1 1 0; min-width: 0; min-height: 48px; padding: .8rem 1rem; font-size: var(--f-xs); }

/* Fra i 641 e i 940px — iPad in verticale, telefoni in orizzontale, finestre
   desktop rimpicciolite — la testata nasconde già numero e pulsante ma la
   barra fissa non compariva ancora: in tutta quella fascia non restava un solo
   riferimento telefonico. Per un locale che prende le prenotazioni al telefono
   era un buco commerciale. Ora la soglia è la stessa della navigazione. */
@media (max-width: 940px) {
  .barra-mob { display: flex; }
  /* La barra è fissa e non occupa spazio nel flusso: il body si riserva la sua
     altezza più la zona sicura, altrimenti sugli iPhone (barra alta ~100px
     contro i 68 riservati) l'ultima parte del piè di pagina resta coperta e
     non la si raggiunge in nessun modo. */
  body {
    padding-bottom: var(--h-barra-mob);
    padding-bottom: calc(var(--h-barra-mob) + env(safe-area-inset-bottom));
  }
  /* l'hero lascia spazio alla barra fissa: i bottoni restano cliccabili */
  .hero {
    min-height: calc(100vh - var(--h-barra-mob));
    min-height: calc(100svh - var(--h-barra-mob) - env(safe-area-inset-bottom));
    padding-bottom: var(--sp-5);
  }
  .hero--corto {
    min-height: calc(66vh - var(--h-barra-mob));
    min-height: calc(66svh - var(--h-barra-mob) - env(safe-area-inset-bottom));
  }
}
@media (max-width: 640px) {
  .hero__azioni { margin-top: var(--sp-4); }
}
/* «Sfoglia il menù della pizzeria» chiede 298px per stare su una riga sola,
   «Prenota un tavolo» con la freccia altri 227: affiancati ci stanno solo da
   620px di finestra in su. Sotto, la soglia era 430px e in tutta la fascia
   431–620 restavano due colonne strette con la scritta spezzata in mezzo
   dentro la pastiglia. Uno sotto l'altro e a tutta larghezza sono anche il
   bersaglio più facile da centrare col pollice. */
@media (max-width: 620px) {
  .hero__azioni .btn, .cta__azioni .btn { flex: 1 1 100%; }
}

/* ==================================================== RIFINITURA MOBILE == */

/* Sotto i 16px Safari su iPhone ingrandisce la pagina appena il campo prende
   il fuoco e all'uscita non la riporta indietro: da quel momento il sito resta
   zoomato e sbanda di lato. 16px esatti sono la soglia oltre la quale non lo
   fa. Vale anche sui tablet, che sono larghi ma si toccano col dito. */
@media (max-width: 940px), (pointer: coarse) {
  .cerca input, .campo input, .campo textarea, .campo select { font-size: 16px; }
}

/* Bersagli tattili. Un dito non è un puntatore: dove si tocca con le mani
   tutto ciò che si preme arriva ad almeno 44px di lato, anche quando il
   disegno resta piccolo. Stessa doppia condizione del blocco qui sopra: la
   sola larghezza lascerebbe fuori i tablet grandi, larghi come un portatile
   ma pur sempre da toccare. */
@media (max-width: 940px), (pointer: coarse) {
  .chip, .btn-allergeni, .all-chip { padding-block: .7rem; }
  .menu-nav a { padding: .72rem .95rem; }
  .social a { width: 44px; height: 44px; }
  .privacy-riga input { width: 20px; height: 20px; }
  .filtri__sep { height: 30px; }

  /* 44px esatti invece di un riempimento a occhio: con inline-flex l'altezza
     minima vale davvero anche su un collegamento dentro una lista. Il passo
     della lista va a zero perché a distanziare le voci ci pensa la riga
     cresciuta, e fra un bersaglio e l'altro non resta una fascia morta. */
  .pie__lista { gap: 0; }
  .pie__lista a { display: inline-flex; align-items: center; min-height: 44px; }

  /* Il telefono e l'email del piè di pagina, e la firma in fondo. Erano
     scritti come riempimento verticale su un elemento in linea, e lì il conto
     non tornava: su un <a> in linea il riempimento si somma all'altezza del
     CARATTERE (circa 16px a --f-s), non a quella della riga, quindi mezzo
     rem per parte faceva 32px e non 44 — misurati. E la firma non era nemmeno
     raggiunta dalla regola, perché sta dentro uno <span> e non dentro un <p>:
     restava un bersaglio di 69×17.
     Con inline-flex l'altezza minima vale davvero, il collegamento resta
     dentro la sua frase e le due righe smettono di sovrapporsi — che è quello
     che sarebbe successo portando il riempimento a un rem: 48px di scatola su
     righe distanti 24. */
  .pie p a,
  .pie__firma a { display: inline-flex; align-items: center; min-height: 44px; }
  /* la firma ha un filetto sotto: da inline-flex il riempimento inferiore lo
     staccherebbe dalle lettere, quindi passa a sottolineatura vera */
  .pie__firma a {
    border-bottom: 0; padding-bottom: 0;
    text-decoration: underline; text-decoration-color: var(--linea-scura-forte);
    text-decoration-thickness: 1px; text-underline-offset: 4px;
  }
  /* Su contatti.html l'indirizzo email si fermava a 42,6px: mancavano 1,4
     pixel al minimo. Il numero di telefono, nella stessa colonna, ci arrivava
     solo perché è su un gradino tipografico più grande. */
  .scheda p a {
    padding-block: .65rem; border-bottom: 0;
    text-decoration: underline; text-decoration-color: var(--linea-forte);
    /* lo spessore va fissato: lasciato al carattere, sotto il numero di
       telefono in corpo 24 diventerebbe un filo doppio rispetto a prima */
    text-decoration-thickness: 1px; text-underline-offset: 4px;
  }
  /* Nella fascia informazioni il numero non è testo in linea ma una casella
     dentro una riga flessibile: lì il riempimento allarga davvero la striscia,
     e il margine negativo ne restituisce metà. */
  .fascia-info a {
    padding-block: .7rem; margin-block: -.35rem; border-bottom: 0;
    text-decoration: underline; text-decoration-color: rgba(250,246,239,.4);
    text-decoration-thickness: 1px; text-underline-offset: 4px;
  }
  /* «Rimuovi la mappa» è una parola sola dentro una nota da 13px */
  .mappa__togli { padding-block: .7rem; margin-block: -.35rem; }
  /* «oppure aprila direttamente su Google Maps» è l'unica strada per chi i
     cookie di Google non li vuole: non può essere il bersaglio più piccolo
     del riquadro */
  .mappa__box a.alt { padding-block: .55rem; }
}

/* Tetti d'altezza legati alla finestra, non al modo di toccarla: restano
   agganciati alla sola larghezza. */
@media (max-width: 940px) {
  /* IL PANNELLO ALLERGENI NON SCORRE PIÙ PER CONTO SUO.
     Aveva un tetto di 45svh e uno scorrimento proprio, dentro una barra che
     aveva a sua volta un tetto e uno scorrimento proprio: due contenitori
     scorrevoli uno dentro l'altro, tutti e due con overscroll-behavior:
     contain. Per passare da «Arachidi» a «Molluschi», poi al bottone
     «Azzera», poi alle categorie servivano tre gesti su tre superfici
     diverse, e su iOS il secondo veniva spesso preso dal contenitore
     esterno. Adesso a scorrere è soltanto la barra: una superficie sola.
     Il pannello resta con l'overflow:hidden della sua regola normale, che
     serve all'animazione da 0fr a 1fr e non taglia niente da aperto. */
  .all-griglia { grid-template-columns: repeat(auto-fill, minmax(min(100%, 140px), 1fr)); }

  /* IL TETTO DELLA BARRA. Il calc da solo teneva conto della testata e della
     barra fissa in fondo, ma lasciava esattamente 1rem di pagina: e 1rem è
     quello che lasciava. Con il pannello aperto su un telefono da 667 la
     barra si prendeva 502 pixel dei 667 e della lista dei piatti restava una
     striscia di sedici. Il min() aggiunge il vincolo che mancava: qualunque
     cosa contenga, la barra non passa mai il 45% dell'altezza della finestra.
     Misurato a 360×667 col pannello aperto: 81 di testata + 301 di barra + 68
     di barra fissa lasciano 218 pixel di lista, cioè una scheda piatto intera
     e passa (ne misura 184), dove prima ne restavano sedici. A pannello
     chiuso la barra sta sotto il tetto da sola e ne restano 315.
     Quello che non entra nel tetto si raggiunge scorrendo dentro la barra,
     che ha un solo scorrimento e sa dove finisce. */
  .menu-barra__in {
    max-height: min(45vh, calc(100vh - var(--h-testata) - var(--h-barra-mob) - 1rem));
    max-height: min(45svh, calc(100svh - var(--h-testata) - var(--h-barra-mob) - 1rem));
    overflow-y: auto;
    /* arrivati in fondo alla barra, il dito non deve mettersi a scorrere la
       pagina sotto (e su iOS non deve innescare il "tira per aggiornare") */
    overscroll-behavior: contain;
  }

  /* LA RIGA DEI FILTRI SU UNA RIGA SOLA.
     Erano quattro pastiglie, un separatore e il bottone degli allergeni:
     circa settecento pixel di contenuto che sotto i 700 di finestra andavano
     a capo tre volte, 156 pixel di sola fila di filtri, ed erano loro i due
     terzi dell'ingombro della barra. Scorrono di lato come già fa la fila
     delle categorie qui sotto: stesso gesto, stesso disegno, e la barra
     scende da 317 pixel a 205 su uno schermo da 360 (misurato).
     Sopra i 940 la fila ci sta larga e questo blocco non entra in gioco:
     nessuno scorrimento compare dove non serve. */
  .filtri {
    flex-wrap: nowrap;
    overflow-x: auto;
    scrollbar-width: none;
    margin-inline: calc(var(--mx) * -1); padding-inline: var(--mx);
    scroll-padding-inline: var(--mx);
    /* come la giostra e le categorie: senza, uno swipe oltre l'ultima
       pastiglia innesca il gesto "indietro" del telefono */
    overscroll-behavior-x: contain;
    /* Un contenitore che scorre ritaglia anche in verticale, e il contorno di
       fuoco esce di cinque pixel dalla pastiglia (due di spessore più tre di
       stacco): senza questa coppia, chi naviga col tabulatore vedrebbe il
       contorno tagliato sopra e sotto. Il riempimento gli fa posto, il
       margine negativo lo restituisce alla pagina: la barra resta alta
       esattamente quanto prima. */
    padding-block: 5px; margin-block: -5px;
  }
  .filtri::-webkit-scrollbar { display: none; }
  /* in una fila che non va a capo il valore di serie è "restringiti":
     le scritte si spezzerebbero dentro le pastiglie */
  .filtri > * { flex: none; }
  .btn-allergeni { white-space: nowrap; }
  /* Il conteggio dei risultati è l'unica risposta che l'utente riceve dopo
     aver filtrato: in fondo a una fila che scorre sarebbe fuori schermo
     proprio nel momento in cui serve. Messo per primo, si legge senza
     toccare niente. Resta un elemento non raggiungibile col tabulatore,
     quindi spostarlo non scombina nessun ordine di navigazione. */
  .filtri > [role="status"] { order: -1; }
}

/* TELEFONO GIRATO IN ORIZZONTALE, SULLA PAGINA DEL MENÙ.
   Qui nemmeno il tetto basta: su uno schermo alto 375 la testata ne prende
   81 e la barra fissa in fondo 68, e qualunque barra dei filtri appiccicata
   in mezzo lascia le briciole. Una barra che si porta via metà dello schermo
   ha senso finché lo schermo è alto; quando non lo è, la cosa giusta è che
   smetta di stare appiccicata e si comporti come il resto della pagina: si
   legge, si usa e poi scorre via, e la lista dei piatti si riprende i 227
   pixel che restano fra testata e barra fissa (misurati a 667×375, contro i
   sedici di prima — e i sedici restavano tali anche col pannello chiuso).
   Ricerca, filtri e categorie continuano a funzionare identici — cambia solo
   che per tornarci si scorre in su.
   Va scritto dopo il blocco qui sopra, perché ne annulla i tetti. */
@media (max-width: 940px) and (max-height: 620px) {
  .menu-barra { position: static; }
  /* l'ombra racconta uno stacco che, con la barra nel flusso, non c'è più */
  .menu-barra.staccata { box-shadow: none; }
  .menu-barra__in { max-height: none; overflow: visible; }
}

/* Telefono girato in orizzontale, cioè uno schermo alto 375–430px con dentro
   anche la barra fissa dei due bottoni. La regola che dà all'hero l'altezza
   dello schermo meno la barra sta più in basso nel foglio di quella che, in
   orizzontale, gliela toglieva del tutto: vinceva per posizione, e il titolo
   ricominciava a cadere sotto il bordo. Qui si rimette l'ordine giusto —
   scritta in fondo, l'ultima parola è sua. */
@media (max-height: 520px) and (orientation: landscape) {
  .hero, .hero--corto { min-height: 0; }
  /* la foto aperta a schermo intero non deve prendersi tutta l'altezza:
     sotto ci sono la didascalia e, sui telefoni stretti, i due comandi */
  .lightbox img { max-height: 60vh; max-height: 60svh; }
}

/* Sugli iPhone la striscia dell'indicatore di sistema sta sopra il fondo dello
   schermo: sopra i 940px non c'è la barra fissa a fare da cuscino e l'ultima
   riga del piè di pagina ci finirebbe sotto. */
@supports (padding: max(0px)) {
  .pie { padding-bottom: max(2rem, env(safe-area-inset-bottom)); }
}
