/* ==========================================================================
   MAYURA STATION — BRAND WEBFONTS (self-hosted)          MAYURAWEB-198
   ==========================================================================

   Cinzel (headings/wordmark) · Mulish (nav/labels) · Roboto (body).
   The family strings here MUST stay identical to the ones in tokens.css
   (--cinzel / --mulish / --roboto) and theme.json; nothing else in the theme
   names a font.

   WHY THIS FILE EXISTS
   Until MAYURAWEB-198 these three families came from
   fonts.googleapis.com/css2?…, which cost a full round trip to a third party
   BEFORE the browser even learned the font file URLs (the URLs live inside
   that stylesheet). On the measured Slow-4G mobile arm the stylesheet landed
   at ~645-697 ms and the fonts only at ~2.2-2.4 s. Self-hosting removes the
   hop and the third-party dependency; the files below are byte-for-byte the
   ones Google was serving, so the letterforms do not change.

   WHICH BUILD, AND WHY IT MATTERS (verified 4 Sep 2026)
   fonts.gstatic.com serves TWO builds of every one of these faces, chosen by
   User-Agent:
     · HINTED   — Windows / Linux Chrome, Windows Firefox
     · UNHINTED — macOS, iOS, Android (same outlines, `prep`/`fpgm`/`cvt `
                  stripped)
   Verified with fonttools: identical version strings, identical cmap,
   identical glyph counts, ZERO advance-width differences between the two.
   We ship the HINTED build because it is a strict superset: Windows and Linux
   visitors keep the TrueType hinting they get today, and the platforms that
   ignore hinting are unaffected (measured: 62/62 rendered widths identical
   between the two builds across all three families, weights 300-700, sizes
   11/14/16/28/48). Shipping the unhinted build instead would have silently
   removed hinting for every Windows visitor to save 5,616 bytes on Roboto.

   ONE RULE PER FILE, NOT ONE PER WEIGHT
   All three families are VARIABLE fonts (fvar `wght` axis: Cinzel 400-900,
   Mulish 200-1000, Roboto 100-900), and Google serves ONE file per family
   that every weight block points at. Google's css2 API returns a separate
   single-weight @font-face per requested weight (four for Cinzel, five for
   Mulish, three for Roboto) over that one file; declaring the min-max range
   once is equivalent and shorter. Verified in-browser against Google's own
   discrete blocks: identical rendered widths at every weight the theme uses
   (300/400/500/600/700 — the only values that appear in the theme CSS), and
   identical for every weight above or below the range, which clamps to the
   same edge Google's nearest-face matching picks. The two declarations differ
   ONLY at intermediate values Google never declared (350/450/550/650); if a
   half-step weight is ever introduced, revisit this comment, not just the CSS.

   WHY ROBOTO HAS THREE FILES
   Google splits each family into subsets and the browser fetches only the
   subsets a page actually needs. For Cinzel and Mulish the theme only ever
   touches `latin`. Roboto is different: the theme's body copy contains
   `→` (U+2192, e.g. "Read Mark's full story →" on /steakhouse/, and the
   .btn on /cuts-library/) and `≈` (U+2248, the product `mayura_format`
   field), and NEITHER is in the latin unicode-range. Measured on the live
   dev site: /steakhouse/ loads FIVE gstatic files, not three — Roboto's
   `math` and `symbols` subsets are fetched and rendered. Shipping only the
   latin files would therefore have changed those characters from Roboto to
   the system fallback. Both subsets are kept below and both load lazily, only
   on pages that use such a character, and their declaration order — math,
   then symbols, then latin — is Google's, so the same face wins for
   codepoints in more than one range. Their ranges are Google's verbatim with
   ONE deliberate exception: the arrows are struck from `math`, because a
   codepoint in two ranges is fetched from both files and drawn from only one
   — see the block comment on that face (MAYURAWEB-207).

   ORDER / DEPENDENCY WARNING
   This sheet is enqueued under the handle `mayura-fonts` and every other
   theme stylesheet declares it as a dependency (functions.php: `$prev =
   'mayura-fonts'`). Renaming the handle drops the whole chain and the site
   deploys unstyled. See mayura_assets().

   CACHING
   Filenames carry a content hash, and wp-content/themes/mayura/.htaccess
   sends `Cache-Control: public, max-age=31536000, immutable` for *.woff2.
   A new build means a new hash means a new URL; never edit a file in place.

   TO UPDATE
   Request the css2 URL that mayura_assets() used to enqueue with a Windows
   Chrome User-Agent, read the `latin` (plus Roboto `math`/`symbols`) blocks,
   download those files, re-hash the names, and copy the unicode-range values
   verbatim. Licence texts sit beside the fonts in assets/fonts/ and come from
   github.com/google/fonts (all three families live under ofl/ — Roboto moved
   there from apache/, which now 404s).
   ========================================================================== */

/* Cinzel — headings, wordmark, stat numerals. Used at 400/500/600/700.
   Source: https://fonts.gstatic.com/s/cinzel/v26/8vIJ7ww63mVu7gt79mT7.woff2
   Version 2.000 · SIL OFL 1.1 · fvar wght 400-900 */
@font-face {
	font-family: 'Cinzel';
	src: url('../fonts/cinzel-latin-var.09941fb1.woff2') format('woff2');
	font-style: normal;
	font-weight: 400 700;
	font-display: swap;
	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;
}

/* Mulish — eyebrows, nav, small-caps labels, data keys. Used at 300-700.
   Source: https://fonts.gstatic.com/s/mulish/v18/1Ptvg83HX_SGhgqk3wot.woff2
   Version 3.603 · SIL OFL 1.1 · fvar wght 200-1000

   NOT taken from the client archive (GROUP LOGOS/Mayura Font/mulish_5.2.8.zip)
   even though that archive does contain latin woff2 files: they are the same
   font version 3.603, but as five per-weight STATIC files totalling 66,464 B
   against 29,968 B for this one variable file. Same design, 36,496 bytes and
   four requests cheaper. The archive stays the print reference. */
@font-face {
	font-family: 'Mulish';
	src: url('../fonts/mulish-latin-var.8d1d33d6.woff2') format('woff2');
	font-style: normal;
	font-weight: 300 700;
	font-display: swap;
	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 copy, captions. Used at 300/400/500.
   Version 3.015 · SIL OFL 1.1 · fvar wght 100-900.
   Three subsets, in Google's declaration order (a codepoint listed in more
   than one range is rendered by the LAST matching face, so the order is part
   of the behaviour, not decoration). */

/* Roboto · math — lazily fetched; the theme needs it for ≈ (U+2248).
   Source: …/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2

   THE ARROW CODEPOINTS ARE DELIBERATELY REMOVED FROM THIS RANGE   MAYURAWEB-207
   Google ships U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2 and
   U+21F4-21FF here AS WELL AS in `symbols` below. A codepoint that sits in two
   ranges is DRAWN by the last matching face (symbols) but FETCHED from both, so
   a page containing `→` in Roboto-set text downloaded 41,348 B it could never
   render a glyph from. The whole U+2190-21FF arrow block is therefore left to
   `symbols` alone: Google's `U+21F4-2211` becomes `U+2200-2211`, keeping the
   mathematical operators that share that run and dropping only 21F4-21FF.
   Everything else is Google's range verbatim, so ≈ and the rest of U+2216-22FF
   still come from Roboto if copy ever uses them, and this file is fetched then
   — which is why the face stays declared. TO UPDATE above says to copy Google's
   ranges verbatim: do that, then re-apply this removal.

   HOW MANY PAGES THIS ACTUALLY AFFECTS — measured 7 Sep 2026, cold cache
   ONE, today: /steakhouse/, 160,912 B of font over five files, because its
   "Read Mark's full story →" link is the only arrow on the site set in Roboto.
   Home, /beef/, /insights/ and /cuts-library/ load three files / 99,008 B and
   fetch NEITHER subset: their arrows are `.arr` spans and block buttons, whose
   stack is `Mulish, -apple-system, system-ui, sans-serif` — no Roboto in it, so
   Roboto's ranges are never consulted and the platform font draws the glyph.
   Beware the measurement trap that says otherwise: walk several pages in ONE
   warm browser session and every page after /steakhouse/ re-reports both files
   out of the HTTP cache, so the waste looks site-wide. It is not. Use a cold
   session per page. After this change /steakhouse/ loads four files / 119,564 B
   and every other page is unchanged. */
@font-face {
	font-family: 'Roboto';
	src: url('../fonts/roboto-math-var.7cb4281a.woff2') format('woff2');
	font-style: normal;
	font-weight: 300 500;
	font-display: swap;
	unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2200-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF;
}

/* Roboto · symbols — lazily fetched; the theme needs it for → (U+2192).
   Source: …/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2 */
@font-face {
	font-family: 'Roboto';
	src: url('../fonts/roboto-symbols-var.2addf2d8.woff2') format('woff2');
	font-style: normal;
	font-weight: 300 500;
	font-display: swap;
	unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF;
}

/* Roboto · latin — the one that carries the body copy; preloaded in wp_head.
   Source: …/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2 */
@font-face {
	font-family: 'Roboto';
	src: url('../fonts/roboto-latin-var.1404ca34.woff2') format('woff2');
	font-style: normal;
	font-weight: 300 500;
	font-display: swap;
	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;
}
