Self-host the Latin and monospace faces master
Every font the site draws with is now cut and served by us, and nothing reaches fonts.gstatic.com. Latin, digits and punctuation come from Noto Sans and Noto Serif rather than from the CJK families, whose Latin is a compromise; the data columns come from IBM Plex Mono. One file per style rather than one per weight, because the Latin faces are variable and the interface only ever asks for 400 and 500. Two leaks were worth chasing. The tone marks a reading carries -- ā, ǐ, ǜ -- sit in Google's latin-ext chunk, so nearly every character page paid 164KB for a handful of vowels; the subset now carries them, along with the punctuation the templates reach for directly rather than through the message files. And presetWebFonts puts its own family at the head of `font-mono`, so every codepoint and stroke count went to Google no matter what the variable said. With nothing left to fall back to, presetWebFonts goes: its 669 @font-face rules were the entry stylesheet, 638KB of declarations for faces that can no longer be fetched. The typeface switch names each face in that face, so both designs are on screen at once and no single font file can serve them. Rather than ship two files for two glyphs, their outlines are lifted at build time and inlined as SVG. first paint, homepage 10 requests, 45KB from Google -> 7, none character page 3 requests, 210KB from Google -> 0 entry stylesheet 638KB -> 25KB Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>