/* Self-hosted webfonts for the public /docs* pages and authenticated Admin
 * Portal guide (#392, #131).
 *
 * WHY THESE ARE COMMITTED RATHER THAN LINKED FROM GOOGLE FONTS. Until now all
 * public guides pulled Inter from fonts.googleapis.com at render time (ID 837) and
 * nothing waited for the fetch before printing. Measured, not assumed: the body
 * text DID come out as Inter on both machines, so the PDFs were not
 * wholesale-substituted -- what differed was the handful of glyphs Google's
 * latin subsets do not carry, chiefly the U+2192 arrow, which fell back to
 * Liberation Sans in the agent sandbox and DejaVu Sans on the GitHub runner and
 * reflowed every line it appeared on. That is what kept the ID 839 per-page
 * visual baseline red on CI from 2026-08-01 (#392): the rasteriser was
 * deterministic, the render was not.
 *
 * A pixel baseline can only exist if the render is reproducible, and a render
 * that depends on a third-party fetch completing in time is not -- a slow or
 * blocked fonts.gstatic.com would substitute the whole document rather than one
 * glyph, which is the same bug an order of magnitude larger. The font files
 * therefore ship in the repo, on the same commit as the baseline they produce.
 *
 * SUBSETS. latin + latin-ext only, taken from the same Google Fonts payload the
 * <link> used to serve (Inter v20 variable 400..900; Roboto Mono v31 variable,
 * whose 400 and 700 faces are byte-identical files, hence one file per subset
 * here and a weight RANGE below). A glyph outside these ranges would fall back
 * to a system font and quietly reintroduce the non-determinism above -- so
 * build-guide-pdfs.js asserts both families actually loaded, and the per-page
 * visual diff fails on any wrapping change that follows a fallback.
 *
 * font-display: block, not swap. On the web that is a ~100ms invisible-text
 * window on a first visit for a page whose fonts are same-origin and cached
 * forever; in print it is what stops a page from being laid out in the fallback
 * face and then re-flowing after the real font lands.
 *
 * Served by express.static at /assets (server.js) and shipped to Vercel by the
 * "assets/**" entry in vercel.json includeFiles. No build step.
 *
 * Scoped to documentation pages, including docs-admin.html. The three app
 * pages (Owner Portal index.html, Admin Portal admin.html,
 * docs/wireframes/deal-inbox.html) self-host a different set of families
 * (JetBrains Mono, Cabinet Grotesk, Satoshi) from assets/app-fonts.css (#573)
 * -- see that file if you're looking for those.
 */

@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 400 900;
  font-display: block;
  src: url('/assets/fonts/inter-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: 400 900;
  font-display: block;
  src: url('/assets/fonts/inter-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;
}

/* The arrow subset, and the reason the whole ticket existed (#392).
 *
 * Google's "latin" and "latin-ext" subsets do NOT contain U+2192, and the
 * guides use it 75 times -- every <span class="ui">Settings -> Tenant Portal</span>
 * breadcrumb is a real arrow. So the body text was Inter in both environments
 * all along, and the ONLY glyph that differed was the arrow: it fell out of
 * Inter to the machine's default sans, which is Liberation Sans in the agent
 * sandbox and DejaVu Sans on the GitHub runner. Those two measure the arrow
 * differently, the difference reflows the line it sits on, and 38 of 80 pages
 * missed the pixel baseline because of it.
 *
 * This face is a `text=` subset of the same Inter v20, requested for exactly
 * U+2190-2193 and U+2318 (the latter is the cmd-K hint, print-hidden but cheap
 * to include). If a guide ever introduces another glyph Inter's subsets miss,
 * build-guide-pdfs.js fails and names it rather than silently reintroducing this
 * bug -- see assertNoFallbackFonts() there. */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 400 900;
  font-display: block;
  src: url('/assets/fonts/inter-symbols.woff2') format('woff2');
  unicode-range: U+2190-2193, U+2318;
}

@font-face {
  font-family: 'Roboto Mono';
  font-style: normal;
  font-weight: 100 700;
  font-display: block;
  src: url('/assets/fonts/roboto-mono-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: 'Roboto Mono';
  font-style: normal;
  font-weight: 100 700;
  font-display: block;
  src: url('/assets/fonts/roboto-mono-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;
}
