/* ===========================================================================
   hlc fonts - self-hosted Anton / Outfit / Rajdhani, latin + latin-ext.

   WHY THIS FILE EXISTS
     The site used to pull these from fonts.googleapis.com with display=swap.
     That put two extra origins (googleapis + gstatic) on the critical path, and
     because the headings paint in a fallback and then RESIZE when Anton lands,
     it was the main cause of the homepage's 0.245 CLS. Anton is 13.6% narrower
     than Arial, so the reflow was very visible.

   HOW THE SHIFT IS REMOVED
     Each family gets a companion "<Family> Fallback" face: a LOCAL system font
     re-declared with size-adjust and ascent/descent overrides so it occupies the
     same box as the real font. While the webfont loads, text is laid out at the
     final metrics, so the swap changes glyph shapes and nothing else moves.

     The percentages below were MEASURED, not looked up: each real face was
     loaded in headless Chrome and compared against Arial with canvas
     TextMetrics at a 1000px em, over a sample of this site's own copy.
     See the note on Android at the bottom.

   THE FALLBACK ONLY WORKS IF IT IS IN THE STACK
     Every declaration site says font-family:'Anton','Anton Fallback',sans-serif.
     Adding a face here is not enough on its own.

   SUBSETS
     latin and latin-ext, each with its unicode-range, so a browser downloads
     only what the page's characters actually need - the same behaviour Google
     Fonts provided. Rajdhani's 75KB Devanagari subsets are deliberately not
     shipped; nothing on this site needs them.

     latin-ext DOES get fetched on most pages, and that is correct rather than
     waste: the rupee sign is U+20B9, which sits in latin-ext, not latin. Any
     page showing a price needs it. The Google setup fetched it too.

   OUTFIT IS ONE FILE, NOT FIVE
     Outfit is a variable font: a single woff2 per subset covers 300-700 via a
     font-weight RANGE. Rajdhani is static, so it genuinely needs one file per
     weight. Declaring Outfit as five static faces made the browser fetch the
     same 31KB file five times.
   =========================================================================== */

/* ---- Anton ---- */
@font-face{font-family:'Anton';font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/anton-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}
@font-face{font-family:'Anton';font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/anton-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}
/* ---- Outfit ---- */
@font-face{font-family:'Outfit';font-style:normal;font-weight:300 700;font-display:swap;src:url(/assets/fonts/outfit-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}
@font-face{font-family:'Outfit';font-style:normal;font-weight:300 700;font-display:swap;src:url(/assets/fonts/outfit-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}
/* ---- Rajdhani ---- */
@font-face{font-family:'Rajdhani';font-style:normal;font-weight:500;font-display:swap;src:url(/assets/fonts/rajdhani-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}
@font-face{font-family:'Rajdhani';font-style:normal;font-weight:500;font-display:swap;src:url(/assets/fonts/rajdhani-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}
@font-face{font-family:'Rajdhani';font-style:normal;font-weight:600;font-display:swap;src:url(/assets/fonts/rajdhani-600-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}
@font-face{font-family:'Rajdhani';font-style:normal;font-weight:600;font-display:swap;src:url(/assets/fonts/rajdhani-600-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:'Rajdhani';font-style:normal;font-weight:700;font-display:swap;src:url(/assets/fonts/rajdhani-700-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}
@font-face{font-family:'Rajdhani';font-style:normal;font-weight:700;font-display:swap;src:url(/assets/fonts/rajdhani-700-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}

/* ---- metrics-matched fallbacks ------------------------------------------
   local() rather than a URL: these are system fonts, already on the device, so
   they cost no bytes and are available on the very first paint. The list is
   ordered by platform - Arial on Windows, Helvetica Neue on Apple, Liberation
   Sans on Linux, Roboto on Android. */
@font-face{font-family:'Anton Fallback';src:local('Arial'),local('Helvetica Neue'),local('Liberation Sans'),local('Roboto');size-adjust:86.36%;ascent-override:136.17%;descent-override:38.1%;line-gap-override:0%}
@font-face{font-family:'Outfit Fallback';src:local('Arial'),local('Helvetica Neue'),local('Liberation Sans'),local('Roboto');size-adjust:98.05%;ascent-override:101.99%;descent-override:26.52%;line-gap-override:0%}
@font-face{font-family:'Rajdhani Fallback';src:local('Arial'),local('Helvetica Neue'),local('Liberation Sans'),local('Roboto');size-adjust:85.71%;ascent-override:108.5%;descent-override:40.37%;line-gap-override:0%}

/* Android maps local('Arial') to Roboto, whose advance widths sit within a
   couple of percent of Arial's, so the match there is very close but not exact.
   That is the standard tradeoff for this technique: one set of numbers has to
   serve every platform, and being 2% out beats being 14% out. */
