/* ==========================================================================
   Mouldshop type — Montserrat (display) and Roboto (body), SELF-HOSTED.
   M4 / TASK-0063.

   WHY SELF-HOSTED AND NOT THE GOOGLE CDN. A `fonts.googleapis.com` link is a
   render-blocking request to a third party on every page load, and it hands a client
   storefront's visitor IPs to that third party. Both families are SIL Open Font Licence
   1.1, which permits redistribution, so there is no reason to pay either cost. The files
   were fetched once at build time and committed; nothing here reaches the network.

   ── WHAT WAS ACTUALLY HAPPENING BEFORE THIS FILE EXISTED ─────────────────────────────
   NO FONT FILES EXISTED ON THIS BOX AT ALL — `find` over the whole Files volume for
   woff2/woff/ttf returned ZERO. Every surface declaring "Montserrat" or "Roboto" was
   resolving against whatever the VIEWER'S MACHINE happened to have installed:

     · on the dev box, Chrome reported the used font as "Montserrat Thin" — a LOCAL
       INSTALL, and only the Thin cut, so a declared `font-weight: 700` was being
       SYNTHESISED as faux bold from a 100-weight face;
     · on any machine without Montserrat installed — which is essentially every visitor —
       it fell through to Arial.

   So the type was machine-dependent and nobody could see that from the CSS. That is the
   defect this file closes, and it is why the before/after screenshots taken on the dev box
   are NOT a fair picture of what changed for a visitor: the dev box was already getting a
   (wrong-weight) Montserrat; a visitor was getting Arial.

   ── VARIABLE, NOT FOUR STATIC CUTS, AND THERE WAS NO CHOICE TO MAKE ──────────────────
   The packet asks for four weights (100/300/500/900) and for the static-vs-variable call
   to be stated with both byte counts. There is only one byte count, because Google Fonts
   serves BOTH families as variable woff2 and nothing else: requesting
   `Montserrat:wght@100;300;500;900` and `Montserrat:wght@100..900` returns CSS whose
   distinct font-file URLs are IDENTICAL (md5 of the sorted URL set matches for both
   families). The "static" response simply declares the same variable file four times, once
   per weight. So a static build would be four references to this exact file, at exactly
   these bytes, and the variable file is shipped.

   Each face declares `font-weight: 100 900`, which covers all four requested weights and
   every value between them from one file.

   ── SUBSETS: latin + latin-ext ONLY ──────────────────────────────────────────────────
   Google slices these into latin, latin-ext, cyrillic, cyrillic-ext, greek, greek-ext,
   vietnamese, math and symbols. Shipped: latin and latin-ext.
     · `latin` covers U+0000-00FF, which includes the Danish æ ø å the DAN language rows
       need — they are U+00E6 / U+00F8 / U+00E5, inside latin-1.
     · `latin-ext` covers U+0100+ for European product and customer names.
     · The rest are dropped: no cyrillic, greek, vietnamese or maths content exists on this
       storefront, and `unicode-range` means a browser never downloads a subset it has no
       characters for anyway — so the cost of the dropped ones was already near zero and
       the cost of KEEPING them is repository weight for nothing.

   Shipped bytes:
       montserrat-latin.woff2       37,956
       montserrat-latin-ext.woff2   70,688
       roboto-latin.woff2           43,136
       roboto-latin-ext.woff2       29,392
       ------------------------------------
       total                       181,172   (~177 KB, of which a latin-only visitor
                                              downloads 81,092 — the two `latin` files)

   `font-display: swap` on every face: text paints immediately in the fallback and swaps
   when the face arrives, rather than holding the page blank. The fallback stacks in
   `--ms-font-display` / `--ms-font-body` are what that first paint uses, which is why they
   name real system faces rather than ending at a bare `sans-serif`.
   ========================================================================== */

/* ── Montserrat — display ─────────────────────────────────────────────────────────── */
@font-face {
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('fonts/montserrat-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: 'Montserrat';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('fonts/montserrat-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;
}

/* ── Roboto — body ────────────────────────────────────────────────────────────────── */
@font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('fonts/roboto-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: 'Roboto';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('fonts/roboto-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 two properties every surface references ──────────────────────────────────────
   Surfaces name the PROPERTY, never the family — item 4. The fallback stacks are what the
   first paint uses under `font-display: swap`, so they name real system faces in
   descending order of how close they are metrically, not a bare `sans-serif`.

   `--ms-font-head` is the name the existing surfaces already use (buy box, icon grid,
   category grid, hero, card markers). It is ALIASED to `--ms-font-display` rather than
   replaced, so this packet lands the families without touching a single other stylesheet —
   item 5. Retiring the old name is a later packet's job and needs all of its call sites
   moved in one go. */
:root {
  --ms-font-display:    'Montserrat', 'Segoe UI', Roboto, Arial, sans-serif;

  /* The body stack is declared under its own name because mouldshop.css loads AFTER this
     file and aliases `--ms-font-body` back to it. Declaring `--ms-font-body` here directly
     and again there would be two definitions of one stack, and the later file would silently
     win — so the stack lives here once, under a name nothing else assigns to. */
  --ms-font-body-stack: 'Roboto', 'Segoe UI', Arial, sans-serif;
  --ms-font-body:       var(--ms-font-body-stack);
}
