/*
 * ONE FAMILY: IBM Plex Sans. Plus Plex Mono, for numbers only.
 *
 *   IBM Plex Sans             headlines, running text, labels, UI — everything
 *   IBM Plex Mono             values compared down a column: ids, counts, statuses
 *   IBM Plex Sans Devanagari  the Hindi and Marathi interface specimens
 *   Caveat                    five words of handwriting in the hero, and nothing else
 *
 * WHAT WAS REMOVED, AND WHY
 * -------------------------
 * This file used to carry IBM Plex Serif at four weights, for every headline
 * on the page. It is gone. Four files, 114 KB.
 *
 * On paper the serif was the right call — a display face distinct from the body face, from the same
 * superfamily, so no pairing risk. What it actually produced was a serif
 * headline sitting over a mono uppercase eyebrow, which is not a neutral
 * combination: it is the house style of the same generated work the note
 * below was written to avoid.
 *
 * Hierarchy now comes from weight and scale in a single face, which is where
 * hierarchy is supposed to come from and which cannot be pattern-matched to
 * anything.
 *
 * CAVEAT STAYED, AND THE DISTINCTION IS THE POINT. It was cut alongside the
 * serif and put back. A fourth family used SYSTEMATICALLY — a serif on every
 * heading — is a second typographic voice the page has to keep justifying.
 * A fourth family used ONCE, on five words, in one composition, is art
 * direction. The test is whether removing it would change the page's system
 * or only its hero. See the block at the bottom of this file.
 *
 * WHY PLEX AND NOT THE OBVIOUS CHOICE. The first attempt here was Instrument
 * Serif over Inter, chosen to look editorial. Both are the defaults that
 * generated design reaches for — Inter is *the* AI-landing-page sans, and
 * Instrument Serif has become *the* "make it look editorial" display face. Two
 * defaults paired together do not add up to a decision; they read as one.
 *
 * IBM Plex was drawn by Bold Monday as IBM's corporate identity, which gives it
 * the register this product actually occupies: institutional, engineered,
 * slightly severe, with none of the softness of a startup face. It is also
 * almost absent from generated work, so it reads as chosen.
 *
 * Two things it buys beyond the look:
 *
 *   1. IT MATCHES THE APP FOR FREE. The authenticated product is set in Plex
 *      Sans and ships Plex Mono. The page and the thing it sells are now one
 *      typeface rather than two.
 *   2. IT FIXES DEVANAGARI PROPERLY. Plex has a real Devanagari cut, so the
 *      Hindi and Marathi specimens render in the SAME family as everything
 *      around them instead of falling back to Noto — which was a different
 *      designer's idea of the same page.
 *
 * Plex Sans is served as a VARIABLE font — one file per subset covers 400
 * through 700, which is why there is a single `@font-face` per subset with a
 * weight *range* rather than four separate declarations. That is also why
 * dropping the serif cost no headline weights: 600 and 700 come out of the
 * file already being loaded.
 *
 * `font-display: swap` throughout: text must be readable during the load. The
 * single preload in index.html covers the one face above the fold.
 */

/* -------------------------------------------------------------------------- */
/*                    IBM Plex Sans — variable, 400 → 700                     */
/* -------------------------------------------------------------------------- */

@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('/fonts/ibm-plex-sans-latin-ext.woff2') format('woff2-variations'),
       url('/fonts/ibm-plex-sans-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;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('/fonts/ibm-plex-sans-latin.woff2') format('woff2-variations'),
       url('/fonts/ibm-plex-sans-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;
}

/* -------------------------------------------------------------------------- */
/*              IBM Plex Mono — tabular values only, 400 & 500                */
/* -------------------------------------------------------------------------- */
/*
 * Copied from the app, so the two properties render mono identically.
 *
 * NOT FOR HEADINGS OR EYEBROWS. This sets things that get compared down a
 * column — counts, APAAR ids, status labels in the product mockups — where a
 * fixed digit width is the difference between a scannable column and a ragged
 * one. It used to also set every section eyebrow on the page; that is what
 * made them read as generated, and it no longer does.
 */

@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/ibm-plex-mono-latin-ext-400.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: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/ibm-plex-mono-latin-400.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: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/ibm-plex-mono-latin-ext-500.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: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/ibm-plex-mono-latin-500.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;
}

/* -------------------------------------------------------------------------- */
/*        IBM Plex Sans Devanagari — the Hindi and Marathi specimens          */
/* -------------------------------------------------------------------------- */
/*
 * Devanagari subset ONLY. The Latin in these blocks comes from Plex Sans
 * above — declaring the Latin cut here too would mean two families competing
 * for the same codepoints with no benefit.
 *
 * The `unicode-range` means a visitor who never reaches the localisation
 * section downloads neither file: the browser fetches a face only when a glyph
 * in its range is actually used.
 */
@font-face {
  font-family: 'IBM Plex Sans Devanagari';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/ibm-plex-sans-devanagari-400.woff2') format('woff2');
  unicode-range: U+0900-097F, U+1CD0-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839,
    U+A8E0-A8FF, U+11B00-11B09;
}
@font-face {
  font-family: 'IBM Plex Sans Devanagari';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/ibm-plex-sans-devanagari-500.woff2') format('woff2');
  unicode-range: U+0900-097F, U+1CD0-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839,
    U+A8E0-A8FF, U+11B00-11B09;
}

/* -------------------------------------------------------------------------- */
/*                 Caveat — the hero's handwritten annotations                */
/* -------------------------------------------------------------------------- */
/*
 * One weight, latin only, ~25KB. Exists for exactly two strings: the margin
 * notes beside the hero mockup. A handwritten aside is what makes the hero
 * read as art-directed rather than assembled, and it only works if the face
 * is visibly NOT the UI face — which is why this is a script and not Plex
 * Italic.
 *
 * THIS IS THE ONE EXCEPTION TO THE ONE-FAMILY RULE AT THE TOP OF THIS FILE,
 * and it was removed once before being put back deliberately. The serif went
 * because it was carrying every headline on the page, which is a system.
 * Caveat carries five words in one composition, which is a choice. Never use
 * it for interface text, labels, headings, or anything a reader must parse to
 * operate the page.
 */
@font-face {
  font-family: 'Caveat';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/fonts/caveat-latin-600.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;
}
