/* ===========================================================================
   Synfonos — vendored web fonts
   ---------------------------------------------------------------------------
   WHY THESE FILES ARE LOCAL

   Synfonos is a LAN-only audio tool. A design canvas that pulls its typefaces
   from `fonts.googleapis.com` makes the shipped app perform an outbound
   request on every launch — a network behaviour nobody chose, and one that
   leaks "this machine started Synfonos" to a third party. It also means an
   offline build silently falls through to Arial, which is not the design:
   the canvas sets Bricolage Grotesque at 34/38/54/56/76px where the optical
   size axis is plainly visible, and Turkish text loses its correct
   diacritics.

   So every face is vendored next to this file and served from disk. There is
   NO remote `@import`, NO `<link>` to a CDN, and no `src` that resolves off
   this directory. All paths below are relative to fonts.css, so the bundle
   satisfies a strict CSP of `font-src 'self' data:`.

   `font-display: block` is deliberate. On a pixel-exact screen a flash of
   Arial is a defect, not a progressive-enhancement win — and because these
   are local files the block period is sub-millisecond.

   ---------------------------------------------------------------------------
   LICENCES — all three families are SIL Open Font License 1.1

   Bricolage Grotesque   OFL 1.1   Google Fonts v9
       Copyright 2022 The Bricolage Grotesque Project Authors
       (https://github.com/ateliertriay/bricolage)

   Instrument Sans       OFL 1.1   Google Fonts v4
       Copyright 2022 The Instrument Sans Project Authors
       (https://github.com/Instrument/instrument-sans)

   IBM Plex Mono         OFL 1.1   Google Fonts v20
       Copyright (c) 2017 IBM Corp. with Reserved Font Name "Plex"

   OFL 1.1 permits bundling inside a closed-source desktop application. The
   three conditions are met here: the verbatim licence text ships alongside
   the fonts, no file has been renamed or modified (each .woff2 is byte-identical
   to what fonts.gstatic.com served), and the fonts are not sold on their own.
   IBM Plex carries a Reserved Font Name — "Plex" must never be reused on a
   modified copy, so do not re-subset or re-name these files in place.

   Full licence text: ./LICENSES/*.txt
   Provenance, versions, byte sizes: ./README.md

   NOTE: `cargo deny` does NOT audit these files. It reads Rust crate
   manifests only, so the font licence obligations above are invisible to
   scripts/gate.ps1 and live only in this header and ./README.md.
   =========================================================================== */


/* ---------------------------------------------------------------------------
   Bricolage Grotesque — VARIABLE, optical-size axis `opsz` 12..96
   The weight axis is instanced to 300 (verified: OS/2 usWeightClass = 300) and
   the width axis to 100%, but `opsz` is live — verified by reading the `fvar`
   table: exactly one axis, `opsz`, min 12 / default 96 / max 96. Requesting
   the same face with `opsz` pinned returns a file with no `fvar` at all, which
   is what confirms the surviving axis is the optical-size one.

   Browsers drive that axis from the used font-size via `font-optical-sizing:
   auto`. That is the initial value, but the :root rule at the bottom states it
   explicitly, because the axis DEFAULT is 96 — if optical sizing were ever
   switched off by a reset, every size would render with the 96pt display cut
   and the 34/38px headings would visibly tighten. Do not remove it.

   (The font's internal name record reads "Bricolage Grotesque 96pt ExtraBold".
   That is a stale gftools instancing artifact in the name table, not the
   shipped weight — the outlines are weight 300. It has no effect on matching
   because these faces are loaded by URL, never by `local()`.)
   --------------------------------------------------------------------------- */

/* latin-ext — carries ğ Ğ ş Ş İ and the rest of the Turkish set */
@font-face {
  font-family: 'Bricolage Grotesque';
  font-style: normal;
  font-weight: 300;
  font-stretch: 100%;
  font-display: block;
  src: url('./bricolage-grotesque-var-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;
}

/* latin — carries ı (U+0131) plus ç ö ü Ç Ö Ü from U+0000-00FF */
@font-face {
  font-family: 'Bricolage Grotesque';
  font-style: normal;
  font-weight: 300;
  font-stretch: 100%;
  font-display: block;
  src: url('./bricolage-grotesque-var-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;
}


/* ---------------------------------------------------------------------------
   Instrument Sans — VARIABLE on `wght`, one file covers the whole range
   Google serves a single woff2 per subset for all three requested weights
   (the URLs are byte-identical), so this is declared once per subset with a
   `font-weight` RANGE rather than three times with a pinned weight. The width
   axis is instanced to 100%.

   The range is declared as `400 700`, not `400 600`. The design only calls for
   400/500/600, but the file that arrives genuinely carries `wght` 400..700
   with named instances at 400/500/600/700 — verified from `fvar`. Declaring
   the true range costs zero extra bytes and means a stray `font-weight: bold`
   renders the real 700 master instead of a synthesised faux-bold.
   --------------------------------------------------------------------------- */

/* latin-ext */
@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 400 700;
  font-stretch: 100%;
  font-display: block;
  src: url('./instrument-sans-var-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;
}

/* latin */
@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 400 700;
  font-stretch: 100%;
  font-display: block;
  src: url('./instrument-sans-var-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 — STATIC instances, weights 400 and 500
   Plex is not published as a variable font on Google Fonts, so each weight is
   a separate file (verified: no `fvar` table in any of the four).
   --------------------------------------------------------------------------- */

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

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

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

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


/* ---------------------------------------------------------------------------
   The three stacks the rest of the UI consumes.
   These match the canvas's own declarations character for character, so no
   other stylesheet needs to repeat a font stack — use the custom property.
   --------------------------------------------------------------------------- */
:root {
  --font-display: 'Bricolage Grotesque', 'Instrument Sans', sans-serif;
  --font-ui: 'Instrument Sans', 'Helvetica Neue', sans-serif;
  --font-mono: 'IBM Plex Mono', ui-monospace, monospace;

  /* Keep Bricolage's `opsz` axis live at 34/38/54/56/76px. This is the
     initial value; it is stated so a CSS reset cannot quietly disable it. */
  font-optical-sizing: auto;
}
