/* ==========================================================================
 * fonts.css — SSOT for every @font-face on AstroNoir. Link this, never copy it.
 *
 * Loaded by partials/header.ejs + partials/header_d.ejs (so every normal page
 * gets it) AND directly by the standalone documents that include no header:
 * views/<lang>/index.ejs, invite-landing.ejs, invite-activate.ejs.
 * ========================================================================== */

/* ---------------------------------------------------------------------------
 * SELF-HOSTED FONTS (2026-08-03) — replaced the Google Fonts @import that pulled
 * Inter + Playfair Display + Montserrat from a third-party origin.
 *
 * WHY: an @import inside a render-blocking stylesheet is the worst pattern for FCP.
 * The browser could only discover it AFTER downloading and parsing this file, then had
 * to open a THIRD-PARTY origin (measured: DNS 124ms + TLS 222ms + TTFB 289ms on a fast
 * desktop line) for a 25 KB CSS, and only then could text paint. Serialized, unavoidable,
 * on every page of the site. Origin TTFB was never the problem — it is 16 ms.
 *
 * Montserrat is GONE on purpose: no live font-family declaration used it. Only
 * index_back.ejs and dashboard_back.css (dead copies) name it.
 *
 * All three families are VARIABLE: ONE file per (style, subset) serves every weight,
 * hence `font-weight: <min> <max>`. This also fixes a latent bug — --fw-black below is
 * 900, but the old @import requested only up to 700, so 900 was synthetically bolded.
 *
 * Subsets: latin + latin-ext only (every language we ship is Latin-script; sr is sr-Latn
 * and latin-ext carries the diacritics). unicode-range is verbatim from Google, so an
 * English page still never downloads the latin-ext file.
 *
 * font-display:swap keeps text painting in the fallback immediately — a font file can
 * never block first paint.
 *
 * Regenerate (writes public/fonts/ + reprints this block): /root/fetch_fonts2.py
 * --------------------------------------------------------------------------- */
/* Inter — variable, one file per style+subset */
@font-face{font-family:'Inter';font-style:normal;font-weight:100 900;font-display:swap;src:url('/fonts/inter-normal-latin-ext.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:100 900;font-display:swap;src:url('/fonts/inter-normal-latin.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;}

/* Playfair Display — variable, one file per style+subset */
@font-face{font-family:'Playfair Display';font-style:italic;font-weight:400 900;font-display:swap;src:url('/fonts/playfair-display-italic-latin-ext.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:'Playfair Display';font-style:italic;font-weight:400 900;font-display:swap;src:url('/fonts/playfair-display-italic-latin.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:'Playfair Display';font-style:normal;font-weight:400 900;font-display:swap;src:url('/fonts/playfair-display-normal-latin-ext.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:'Playfair Display';font-style:normal;font-weight:400 900;font-display:swap;src:url('/fonts/playfair-display-normal-latin.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;}

/* Space Grotesk — variable, one file per style+subset */
@font-face{font-family:'Space Grotesk';font-style:normal;font-weight:300 700;font-display:swap;src:url('/fonts/space-grotesk-normal-latin-ext.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:'Space Grotesk';font-style:normal;font-weight:300 700;font-display:swap;src:url('/fonts/space-grotesk-normal-latin.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;}
