/* Canonical Barterbot faces, self-hosted. Built by `just fonts`
   (scripts/gen-fonts.py) from upstream sources — do not hand-edit the .woff2
   files or add a face here without a matching entry in that script.

   IBM Plex Sans and IBM Plex Mono are one superfamily: they share an x-height
   of exactly 0.516em and the same skeleton, so a price sits inside a sentence
   as the same voice rather than a pasted-in second one. Sora stays the
   counterweight — wide, circular, geometric, visibly a different job.

   The latin / latin-ext split is what the `unicode-range` descriptors below buy
   us: a page of English listings never downloads the Vietnamese and Central
   European glyphs, but a seller named Nguyễn or a pickup in Timișoara still
   renders in-face instead of dropping to the system fallback mid-word. */

/* --- IBM Plex Sans — body and UI --------------------------------------------------- */
/* Variable, so the `font-weight` descriptor is a RANGE: every weight the design
   system asks for is interpolated from this one download. The wdth axis is
   pinned to 100 at build time; nothing here varies width. */
@font-face {
  font-family: "IBM Plex Sans";
  src: url("/assets/fonts/plex-sans-latin.woff2") format("woff2");
  font-weight: 100 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+2000-206F, U+2070-209F, U+20A0-20BF, U+2116, U+2122,
    U+2150-215F, U+2190-2193, U+2212, U+2260;
}
@font-face {
  font-family: "IBM Plex Sans";
  src: url("/assets/fonts/plex-sans-latin-ext.woff2") format("woff2");
  font-weight: 100 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-024F, U+0259, U+0300-036F, U+1E00-1EFF, U+2C60-2C7F, U+A720-A7FF;
}

/* Metric-matched stand-in for the swap window and for clients that never get the
   webfont. Plex's x-height is 516/1000 against Arial's 1062/2048, so the two sit
   within half a percent of each other and `size-adjust` barely has to work.
   Listing copy keeps its line count across the swap instead of reflowing the
   card grid under it.

   Deliberately no ascent/descent overrides: every type class in
   colors_and_type.css sets a unitless line-height, which already makes the line
   box a function of font-size alone. Overriding those metrics here would be
   inert on this codebase and would imply a precision this single declaration
   cannot have across Arial, Roboto and Segoe UI. Only the body face gets a
   stand-in at all — headings are short enough that a little reflow costs
   nothing.

   Two faces, and the regular one deliberately carries NO `font-weight`
   descriptor. Adding a range (`font-weight: 100 900`) would make this single
   Arial Regular face claim it covers bold, and the browser would stop
   synthesizing — measured: bold text then lays down exactly the same ink as
   regular, i.e. it stops looking bold at all. Leaving the descriptor at its
   default keeps synthesis available, and the explicit 700 face below beats
   synthesis outright by binding local Arial Bold (measured 28.8% more ink than
   regular, against 15.4% for the synthesized version). */
@font-face {
  font-family: "IBM Plex Sans Fallback";
  src: local("Arial"), local("Helvetica Neue"), local("Roboto"), local("Segoe UI");
  size-adjust: 99.5%;
}
@font-face {
  font-family: "IBM Plex Sans Fallback";
  src: local("Arial Bold"), local("Helvetica Neue Bold"), local("Roboto Bold"),
    local("Segoe UI Bold");
  font-weight: 700;
  size-adjust: 99.5%;
}

/* --- IBM Plex Mono — prices, labels, tickers, any measured value ------------------- */
/* Single weights, not a range, because there is no variable IBM Plex Mono
   anywhere upstream — not on google/fonts and not in IBM's own @ibm/plex-mono
   package. These four are every mono weight the app asks for: 400 (.bb-mono),
   500 (.bb-caption/.bb-eyebrow), 600 (.bb-price), and 700 for the component-level
   emphasis in /design, AppraisalResult and the listing document. The generator's
   FAMILIES list must stay in sync — a weight used in CSS but missing here
   silently renders at the nearest one, which is invisible in review.

   700 is the ceiling: Bold is the heaviest Plex Mono static, and Plex Sans's
   variable axis also stops at 700, so a `font-weight: 800` anywhere in this
   codebase clamps rather than paints. */
@font-face {
  font-family: "IBM Plex Mono";
  src: url("/assets/fonts/plex-mono-400-latin.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+2000-206F, U+2070-209F, U+20A0-20BF, U+2116, U+2122,
    U+2150-215F, U+2190-2193, U+2212, U+2260;
}
@font-face {
  font-family: "IBM Plex Mono";
  src: url("/assets/fonts/plex-mono-400-latin-ext.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-024F, U+0259, U+0300-036F, U+1E00-1EFF, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "IBM Plex Mono";
  src: url("/assets/fonts/plex-mono-500-latin.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+2000-206F, U+2070-209F, U+20A0-20BF, U+2116, U+2122,
    U+2150-215F, U+2190-2193, U+2212, U+2260;
}
@font-face {
  font-family: "IBM Plex Mono";
  src: url("/assets/fonts/plex-mono-500-latin-ext.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-024F, U+0259, U+0300-036F, U+1E00-1EFF, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "IBM Plex Mono";
  src: url("/assets/fonts/plex-mono-600-latin.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+2000-206F, U+2070-209F, U+20A0-20BF, U+2116, U+2122,
    U+2150-215F, U+2190-2193, U+2212, U+2260;
}
@font-face {
  font-family: "IBM Plex Mono";
  src: url("/assets/fonts/plex-mono-600-latin-ext.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-024F, U+0259, U+0300-036F, U+1E00-1EFF, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "IBM Plex Mono";
  src: url("/assets/fonts/plex-mono-700-latin.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+2000-206F, U+2070-209F, U+20A0-20BF, U+2116, U+2122,
    U+2150-215F, U+2190-2193, U+2212, U+2260;
}
@font-face {
  font-family: "IBM Plex Mono";
  src: url("/assets/fonts/plex-mono-700-latin-ext.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-024F, U+0259, U+0300-036F, U+1E00-1EFF, U+2C60-2C7F, U+A720-A7FF;
}

/* --- Sora — display and headings --------------------------------------------------- */
@font-face {
  font-family: "Sora";
  src: url("/assets/fonts/sora-latin.woff2") format("woff2");
  font-weight: 100 800;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+2000-206F, U+2070-209F, U+20A0-20BF, U+2116, U+2122,
    U+2150-215F, U+2190-2193, U+2212, U+2260;
}
@font-face {
  font-family: "Sora";
  src: url("/assets/fonts/sora-latin-ext.woff2") format("woff2");
  font-weight: 100 800;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-024F, U+0259, U+0300-036F, U+1E00-1EFF, U+2C60-2C7F, U+A720-A7FF;
}
