/* Brand typefaces — SELF-HOSTED, never a CDN.
 *
 * Montserrat (headings/titles) + Cabin (body) are the Quality "Switch On" brand
 * fonts. Both were named in ~960 CSS declarations across this app but NO font file
 * was ever served and there was no @font-face rule anywhere — so every screen fell
 * back to a system sans, and the whole ERP rendered off-brand. Found 2026-08-18 when
 * a drawn-vs-typed glyph on the Sales KPI cards resolved from a different fallback
 * than the label beside it.
 *
 * Same rule as the softphone's JsSIP (CLAUDE.md → "Self-host business-critical
 * runtime assets"): served from our own static/ so it works offline/LAN, needs no
 * third-party request at page load, and satisfies the CSP's 'self'. A CDN link here
 * would be blocked by the CSP anyway.
 *
 * VARIABLE fonts: one file covers the whole weight range, so the five Montserrat
 * weights this app uses (300/600/700/750/800) and the five Cabin weights
 * (400/500/600/700/800) all come from two files per subset rather than ten.
 * Cabin's axis stops at 700 — an 800 declaration renders at 700, which is what the
 * fallback was doing anyway.
 *
 * Subsets: latin + latin-ext only. Staff screens are English (CLAUDE.md language
 * policy) and neither family has Arabic glyphs — Arabic customer documents use their
 * own font through apps/sales/services/pdf.py::_ensure_ar_font.
 *
 * font-display:swap — text paints immediately in the fallback and re-renders when
 * the file lands, so a slow font never blocks a page.
 *
 * Licence: SIL Open Font License 1.1 (both families) — see static/fonts/OFL.txt.
 * Files fetched from Google Fonts on 2026-08-18: Montserrat v31, Cabin v35.
 */

/* ---------------------------------------------------------------- Cabin (body) */
@font-face {
  font-family: 'Cabin';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("../fonts/cabin-latin.44691444dd98.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: 'Cabin';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("../fonts/cabin-latin-ext.6d21674013fa.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;
}

/* ------------------------------------------------- Montserrat (headings/titles) */
@font-face {
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 300 800;
  font-display: swap;
  src: url("../fonts/montserrat-latin.311d352d9323.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: 'Montserrat';
  font-style: normal;
  font-weight: 300 800;
  font-display: swap;
  src: url("../fonts/montserrat-latin-ext.d16dfe26bcd7.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;
}
