/* fonts.css — i font del sito, serviti dal sito.
 *
 * PERCHE' NON DA GOOGLE
 * Chiedere i font a fonts.googleapis.com costava tre cose insieme:
 *   1. PRIVACY — il browser contattava Google su ogni pagina, prima di qualsiasi scelta del
 *      visitatore, trasferendogli l'indirizzo IP. Era l'ultimo terzo contattato senza consenso.
 *   2. VELOCITA' — il foglio di stile dei font era la prima risorsa a bloccare il disegno della
 *      pagina: risoluzione DNS, handshake TLS e una richiesta in piu', su una connessione nuova,
 *      prima che comparisse una riga di testo.
 *   3. STABILITA' — con il font che arriva tardi, il testo veniva disegnato con un carattere di
 *      ripiego e poi si rifletteva: e' lo spostamento di layout (CLS 0,091) misurato sulla home
 *      nell'audit del 2026-09-22, presente in due misurazioni su tre.
 * Serviti da qui arrivano sulla connessione gia' aperta, senza terzi e senza attesa.
 *
 * FONT VARIABILI
 * Un file copre tutti i pesi da 400 a 700 (`font-weight: 400 700`), invece di un file per peso.
 * Con tre famiglie la differenza e' fra 8 file e 32.
 *
 * SOTTOINSIEMI
 * Solo `latin` e `latin-ext`: il sito e' in italiano e inglese. Google serviva anche cirillico,
 * greco e vietnamita — meta' dei file, mai usati qui. `unicode-range` fa il resto: il browser
 * scarica `latin-ext` solo se la pagina contiene davvero un carattere che sta li' dentro.
 *
 * DICHIARARE NON E' SCARICARE
 * Tutte le famiglie stanno in questo unico file, incluso su pagine che non le usano. Non costa
 * niente: una @font-face non scarica nulla finche' non c'e' del testo che la richiede davvero.
 * Il sito pubblico dichiara Fraunces e non lo scarica mai.
 *
 * RIGENERARE (dopo un cambio di pesi o famiglie): vedi `css-and-render-blocking.md` nel playbook.
 * I file .woff2 stanno in /assets/fonts/ e non vanno rinominati: i nomi sono nelle url qui sotto.
 */

@font-face {
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('/assets/fonts/montserrat-latin-ext-normal.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('/assets/fonts/montserrat-latin-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('/assets/fonts/inter-latin-ext-normal.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('/assets/fonts/inter-latin-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Fraunces';
  font-style: italic;
  font-weight: 400 700;
  font-display: swap;
  src: url('/assets/fonts/fraunces-latin-ext-italic.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Fraunces';
  font-style: italic;
  font-weight: 400 700;
  font-display: swap;
  src: url('/assets/fonts/fraunces-latin-italic.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Fraunces';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('/assets/fonts/fraunces-latin-ext-normal.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Fraunces';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('/assets/fonts/fraunces-latin-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* --- Ripiego con le stesse proporzioni di Montserrat -------------------------------------------
 *
 * IL PROBLEMA CHE RISOLVE
 * `font-display: swap` fa disegnare subito il testo con un carattere di sistema e lo ridisegna
 * quando arriva Montserrat. È la scelta giusta — l'alternativa è una pagina senza testo — ma i
 * due caratteri non occupano lo stesso spazio, quindi al momento dello scambio le righe si
 * riassestano: è lo spostamento di layout che Lighthouse misurava come CLS 0,08-0,09 sulle
 * pagine pubbliche, attribuendolo per nome a montserrat-latin-normal.woff2.
 *
 * Portare i font sul sito ha ridotto molto l'attesa (LCP della home da 11,2 a 2,9 s) ma non ha
 * tolto lo scambio: lo ha solo anticipato. Finché il ripiego ha proporzioni diverse, lo
 * spostamento resta.
 *
 * COME FUNZIONA
 * Si dichiara il carattere di sistema come una famiglia a sé, corretta perché occupi esattamente
 * lo spazio di Montserrat. Messa in mezzo alla pila (`Montserrat, 'Montserrat fallback', Arial…`)
 * viene usata nei millisecondi che precedono l'arrivo del font vero, e quando lo scambio avviene
 * nessuna riga si sposta.
 *
 * DA DOVE VENGONO I NUMERI — misurati, non copiati
 * Con un canvas, a 2000 px, sulla stessa stringa in Montserrat e in Arial:
 *   larghezza    Montserrat 65,3297 em  ·  Arial 59,5796 em   -> 65,3297/59,5796 = 1,0965
 *   ascendente   Montserrat 0,968 em    ·  discendente 0,251 em
 * (le due metriche di Montserrat coincidono con quelle dichiarate nel font: 968/1000 e 251/1000,
 * il che conferma che la misura è buona)
 *   size-adjust       = 1,0965                    -> 109,65%
 *   ascent-override   = 0,968 / 1,0965            ->  88,28%
 *   descent-override  = 0,251 / 1,0965            ->  22,89%
 * Gli override vanno divisi per size-adjust perché si applicano al font GIÀ riscalato.
 *
 * SE UN DOMANI SI CAMBIA IL CARATTERE DEL SITO, QUESTI NUMERI VANNO RIMISURATI. Lasciati com'è
 * con un font diverso non sono neutri: introducono loro lo spostamento, invece di toglierlo.
 * Il metodo è in `css-and-render-blocking.md` nel playbook.
 *
 * Helvetica misura esattamente come Arial (verificato), e Liberation Sans è metric-compatible:
 * la stessa correzione vale su Windows, macOS e Linux.
 */
@font-face {
  font-family: 'Montserrat fallback';
  src: local('Arial'), local('Helvetica'), local('Liberation Sans');
  size-adjust: 109.65%;
  ascent-override: 88.28%;
  descent-override: 22.89%;
  line-gap-override: 0%;
}
