/* SiteDialect webfonts — loaded ASYNC from base.html (<link media="print" id="sd-fonts"> + nonce'd end-of-body double-rAF flip script + noscript). Keep it that way: linking this render-blocking, inlining these rules into base.html, or preloading any woff2 puts the font bytes back into Lighthouse's simulated FCP/LCP graph (PSI 72 regression class, fixed 2026-07-02). The metric-matched *Fallback faces stay INLINE in base.html so the pre-font frame has identical geometry (CLS 0).
   Latin families are VARIABLE fonts and the per-weight files are byte-identical duplicates (inter-tight-400/500/600/700-latin.woff2 share one md5) — so ONE rule per family+slice with a font-weight RANGE serves all weights and saves ~3 duplicate downloads vs the old per-weight rules. Do not re-add per-weight rules pointing at duplicate files.
   ALL faces = font-display:swap — do NOT use 'optional' here: optional faces applied from a late async stylesheet become RENDER-BLOCKING in Chrome (it holds first paint for in-flight optional fonts discovered pre-FCP) — measured on PSI 2026-07-02: obsFCP 1410ms (after onload!) with optional vs ~250ms with swap. This supersedes the 6/29 'optional for Inter Tight' decision: the metric-matched fallbacks now make every swap pixel-shiftless (verified), so swap has no CLS cost and never blocks paint. Noto swaps are also shift-safe: lang-wall chips are fixed grid cells, the hero flip slot is a nowrap block line, the quote mark is a fixed 24px box.
   Noto files are css2 text= subsets: glyph set = index.html demo strings (non-ASCII + printable ASCII). If demo strings gain NEW non-Latin characters, regenerate the subset files (css2 text= fetch, see memory project_sitedialect_psi_fixes_2026_07_01) or new glyphs silently fall back to system fonts.
   This file is served 1yr-immutable (/_sd/static/fonts/ tier) — bump the ?v= querystring in base.html whenever it changes. */
@font-face{font-family:'Inter Tight';font-style:normal;font-weight:100 900;font-display:swap;src:url(/_sd/static/fonts/inter-tight-400-latinext.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 Tight';font-style:normal;font-weight:100 900;font-display:swap;src:url(/_sd/static/fonts/inter-tight-400-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:'Inter';font-style:normal;font-weight:100 900;font-display:swap;src:url(/_sd/static/fonts/inter-400-latinext.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(/_sd/static/fonts/inter-400-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:'JetBrains Mono';font-style:normal;font-weight:400 800;font-display:swap;src:url(/_sd/static/fonts/jetbrains-mono-400-latinext.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:'JetBrains Mono';font-style:normal;font-weight:400 800;font-display:swap;src:url(/_sd/static/fonts/jetbrains-mono-400-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:'Noto Sans Arabic';font-style:normal;font-weight:100 900;font-display:swap;src:url(/_sd/static/fonts/noto-sans-arabic-subset.woff2) format('woff2')}
@font-face{font-family:'Noto Sans JP';font-style:normal;font-weight:100 900;font-display:swap;src:url(/_sd/static/fonts/noto-sans-jp-subset.woff2) format('woff2')}
@font-face{font-family:'Noto Sans SC';font-style:normal;font-weight:100 900;font-display:swap;src:url(/_sd/static/fonts/noto-sans-sc-subset.woff2) format('woff2')}
@font-face{font-family:'Noto Sans KR';font-style:normal;font-weight:100 900;font-display:swap;src:url(/_sd/static/fonts/noto-sans-kr-subset.woff2) format('woff2')}
@font-face{font-family:'Noto Sans Devanagari';font-style:normal;font-weight:100 900;font-display:swap;src:url(/_sd/static/fonts/noto-sans-devanagari-subset.woff2) format('woff2')}
@font-face{font-family:'Noto Serif Display';font-style:normal;font-weight:100 900;font-display:swap;src:url(/_sd/static/fonts/noto-serif-display-subset.woff2) format('woff2')}
@font-face{font-family:'Archivo Black';font-style:normal;font-weight:400;font-display:swap;src:url(/_sd/static/fonts/archivo-black-400-latinext.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:'Archivo Black';font-style:normal;font-weight:400;font-display:swap;src:url(/_sd/static/fonts/archivo-black-400-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}
