/* apps/main/public/fonts/fonts.css — SELF-HOSTED TYPE. NO THIRD-PARTY FONT REQUEST.
 *
 * 🔴 WHY THIS FILE EXISTS. Every page on this origin — home, pricing, help, the atlas pages, the
 * blog, and /terms /privacy /security /accessibility — carried
 *     <link rel="preconnect" href="https://fonts.googleapis.com">
 *     <link href="https://fonts.googleapis.com/css2?family=DM+Sans…" rel="stylesheet">
 * which hands every visitor's IP address and User-Agent to Google before a single word renders.
 * German courts have held that embedding Google Fonts without consent violates the GDPR
 * (LG München I, 20 O 14368/19), and a privacy policy is the worst possible page on which to make
 * an undisclosed third-party request about the reader. Serving the files ourselves removes the
 * request entirely — there is nothing left to disclose or consent to.
 *
 * Same decision, same shape as apps/seafoam/client/public/fonts/ (Adam's answer there was
 * SELF-HOST); this is that answer applied to the marketing and legal surface.
 *
 * SUBSET: `latin` only (U+0000–00FF plus the punctuation Google ships in that subset). The
 * `latin-ext` faces are deliberately dropped — these pages are English and never paint them.
 * Eight files, ~205 kB total, replacing a DNS lookup and two round-trips to a third party.
 *
 * VARIABLE WHERE THE FAMILY IS VARIABLE. DM Sans is one file per style covering weight 100–1000,
 * because the Google Fonts API returns the SAME url for every weight in that range — shipping a
 * file per weight would ship identical bytes five times. DM Serif Display and DM Mono are static.
 *
 * LICENSING: all three families are SIL Open Font License 1.1. The `OFL-*.txt` beside the woff2
 * are the upstream texts, unmodified. OFL permits redistribution and web-serving including
 * subsets; the license must travel with the files, which is why they are committed, not ignored.
 *
 * URLS ARE RELATIVE TO THIS FILE, DELIBERATELY. apps/main serves public/ at the origin root, so
 * these resolve at /fonts/…; apps/steel mounts its client at /research/, so the same file resolves
 * at /research/fonts/… without a second copy of the stylesheet that differs only in a prefix. An
 * absolute /fonts/ path would 404 on steel and fall back to Times with no error anywhere.
 *
 * REFRESHING: fetch `https://fonts.googleapis.com/css2?family=…` with a modern-browser
 * User-Agent (the API serves woff2 only to UAs it believes support it), keep the @font-face
 * blocks whose unicode-range contains U+0000-00FF, download those urls here, update the blocks
 * below. See fonts/README.md.
 */

/* ══ 🔴 RUN VA — SOURCE SERIF 4, THE BODY TEXT FACE. ═══════════════════════════════════════════
 * Adam, on the live build: "the font looks like SHIT." RUN RA had already measured the answer's
 * body at weight 400, so the complaint was never about weight. What was wrong is that
 * DM SERIF DISPLAY WAS DOING PARAGRAPH WORK: a display cut — high contrast, tight spacing, small
 * apertures, drawn to be set once at 40px — carrying four hundred words at 19px. At text sizes a
 * display face reads as heavy and cramped, and making it SMALLER makes it denser, not lighter.
 *
 * So the faces are PAIRED rather than swapped. DM Serif Display keeps every display job it has —
 * Ask Clark, headings, and the case names inside the answer. Body prose moves to Source Serif 4,
 * which is cut for continuous reading, and which has a TRUE ITALIC: Bluebook R2.1 wants a real
 * italic for a case name, and an obliqued roman is not one.
 *
 * TWO FILES, AND THE ROMAN COVERS BOTH WEIGHTS. Source Serif 4 is variable (opsz 8–60, wght), and
 * the Google Fonts API returns THE SAME url for `wght@400` and `wght@600` — one file, requested
 * twice, would be identical bytes twice. `font-weight: 400 600` is therefore a range on one file,
 * matching DM Sans's treatment above and, deliberately, refusing weights this product does not
 * set: a request for 700 clamps to 600 rather than pulling a face nobody asked for.
 *
 * ⭐ THE OPTICAL SIZE AXIS IS WHY THIS PAIRING IS NOT JUST "A DIFFERENT SERIF". `opsz` is honoured
 * by default (`font-optical-sizing: auto`), so at 17.5px the browser instances the TEXT cut of the
 * family — looser spacing, lower stroke contrast, larger apertures — which is precisely the thing
 * DM Serif Display, having no such axis, cannot do at any size.
 *
 * PAYLOAD, STATED: 122,168 B roman + 50,584 B italic = 172,752 B (168.7 KiB) added, latin subset,
 * self-hosted. No third-party request is introduced — that is the whole point of this directory.
 * LICENCE: SIL Open Font License 1.1, Adobe; `OFL-sourceserif4.txt` beside these files.
 */
@font-face {
  font-family: 'Source Serif 4';
  font-style: normal;
  font-weight: 400 600;
  font-display: swap;
  src: url('source-serif-4-400-600-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: 'Source Serif 4';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('source-serif-4-italic-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: 'DM Sans';
  font-style: italic;
  font-weight: 100 1000;
  font-display: swap;
  src: url('dm-sans-italic-100-1000-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: 'DM Sans';
  font-style: normal;
  font-weight: 100 1000;
  font-display: swap;
  src: url('dm-sans-100-1000-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: 'DM Serif Display';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('dm-serif-display-italic-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: 'DM Serif Display';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('dm-serif-display-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: 'DM Mono';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('dm-mono-italic-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: 'DM Mono';
  font-style: italic;
  font-weight: 500;
  font-display: swap;
  src: url('dm-mono-italic-500-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: 'DM Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('dm-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: 'DM Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('dm-mono-500-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;
}
