/*
 * Fira Sans -- the app's typeface, self-hosted.
 * ============================================================================
 *
 * WHY SELF-HOSTED AND NOT fonts.googleapis.com
 *
 * The Google Fonts snippet is two external requests on every page: a
 * stylesheet from fonts.googleapis.com and the faces themselves from
 * fonts.gstatic.com. Both would need CSP amendments (`style-src` and
 * `font-src`), and both put a public CDN in the render path of a shop tablet
 * and of the customer portal -- which is the exact mistake
 * core/partials/_styles.html was written to undo. Self-hosting needs no CSP
 * change at all: `font-src 'self'` already covers it, the installed PWA keeps
 * working offline, and nothing about the app's typography depends on a third
 * party staying reachable.
 *
 * WHY THESE SIXTEEN FILES AND NOT THE FIFTY-SIX GOOGLE SERVES
 *
 * Google's css2 URL ships every subset (cyrillic, cyrillic-ext, greek,
 * greek-ext, vietnamese, latin, latin-ext) for every weight asked for. This
 * app is an RV shop in Alabama, so only latin + latin-ext are kept -- and only
 * the four weights the codebase actually uses:
 *
 *     400 normal      98 uses (font-normal, plus everything unstyled)
 *     500 medium   5,040 uses  <- the workhorse
 *     600 semibold 1,939 uses
 *     700 bold       522 uses
 *
 * font-thin / extralight / light / extrabold / black have ZERO uses, so their
 * faces are not shipped; asking for a weight with no face makes the browser
 * synthesise one, which is a worse outcome than the four real ones. Italic is
 * shipped at all four weights because `italic` (185 uses) combines freely with
 * the weight utilities and a synthesised oblique of a real face looks wrong
 * next to the genuine one beside it.
 *
 * `unicode-range` is what makes latin-ext free: it is only downloaded when a
 * glyph outside latin actually renders (an accented customer name), so the
 * ordinary page pays for latin alone.
 *
 * TWO THINGS THAT MUST NOT CHANGE
 *
 *  - `font-display: swap`. The alternative is a shop tablet showing an empty
 *    screen while 17 KB arrives over the shop's wifi. Text in the fallback
 *    stack for a moment is the right trade; the fallback in
 *    static/js/brand-palette.js is metric-similar on purpose.
 *  - The url()s stay RELATIVE. ManifestStaticFilesStorage rewrites relative
 *    references in CSS when it hashes filenames for the cloud-storage build
 *    (verified: `../fonts/fira-sans-400-normal-latin.woff2` becomes
 *    `...-latin.37ade634544d.woff2`). Django skips an ABSOLUTE url() unless it
 *    starts with `settings.STATIC_URL`, and this project's STATIC_URL is
 *    `"static/"` with no leading slash -- so `/static/fonts/...` matches
 *    neither branch, ships un-hashed, and then 404s against the manifest. That
 *    failure appears only in production, as the whole app quietly rendering in
 *    the fallback font.
 *
 * This file is generated from Google's own css2 output (which is what supplies
 * the unicode-range values) and the faces are redistributed under the SIL Open
 * Font License 1.1 -- see static/fonts/OFL.txt. To add a weight: download its
 * woff2 into static/fonts/ and add a block here. Nothing else needs touching;
 * the family itself is named once, in static/js/brand-palette.js.
 */

/* latin */
@font-face {
    font-family: 'Fira Sans';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url("../fonts/fira-sans-400-normal-latin.37ade634544d.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;
}

/* latin-ext */
@font-face {
    font-family: 'Fira Sans';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url("../fonts/fira-sans-400-normal-latin-ext.f3b5d429f74a.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: 'Fira Sans';
    font-style: italic;
    font-weight: 400;
    font-display: swap;
    src: url("../fonts/fira-sans-400-italic-latin.ac270aa1907c.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;
}

/* latin-ext */
@font-face {
    font-family: 'Fira Sans';
    font-style: italic;
    font-weight: 400;
    font-display: swap;
    src: url("../fonts/fira-sans-400-italic-latin-ext.7d43f9f0698e.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: 'Fira Sans';
    font-style: normal;
    font-weight: 500;
    font-display: swap;
    src: url("../fonts/fira-sans-500-normal-latin.29e95c097b33.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;
}

/* latin-ext */
@font-face {
    font-family: 'Fira Sans';
    font-style: normal;
    font-weight: 500;
    font-display: swap;
    src: url("../fonts/fira-sans-500-normal-latin-ext.2355f0c21b7c.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: 'Fira Sans';
    font-style: italic;
    font-weight: 500;
    font-display: swap;
    src: url("../fonts/fira-sans-500-italic-latin.440d85461649.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;
}

/* latin-ext */
@font-face {
    font-family: 'Fira Sans';
    font-style: italic;
    font-weight: 500;
    font-display: swap;
    src: url("../fonts/fira-sans-500-italic-latin-ext.fc107303c118.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: 'Fira Sans';
    font-style: normal;
    font-weight: 600;
    font-display: swap;
    src: url("../fonts/fira-sans-600-normal-latin.66b257bcbeca.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;
}

/* latin-ext */
@font-face {
    font-family: 'Fira Sans';
    font-style: normal;
    font-weight: 600;
    font-display: swap;
    src: url("../fonts/fira-sans-600-normal-latin-ext.3d3c337a4f44.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: 'Fira Sans';
    font-style: italic;
    font-weight: 600;
    font-display: swap;
    src: url("../fonts/fira-sans-600-italic-latin.57a1c77545a8.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;
}

/* latin-ext */
@font-face {
    font-family: 'Fira Sans';
    font-style: italic;
    font-weight: 600;
    font-display: swap;
    src: url("../fonts/fira-sans-600-italic-latin-ext.076f9e7422db.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: 'Fira Sans';
    font-style: normal;
    font-weight: 700;
    font-display: swap;
    src: url("../fonts/fira-sans-700-normal-latin.e93949e611a6.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;
}

/* latin-ext */
@font-face {
    font-family: 'Fira Sans';
    font-style: normal;
    font-weight: 700;
    font-display: swap;
    src: url("../fonts/fira-sans-700-normal-latin-ext.c303fec70c70.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: 'Fira Sans';
    font-style: italic;
    font-weight: 700;
    font-display: swap;
    src: url("../fonts/fira-sans-700-italic-latin.edac33d7d8af.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;
}

/* latin-ext */
@font-face {
    font-family: 'Fira Sans';
    font-style: italic;
    font-weight: 700;
    font-display: swap;
    src: url("../fonts/fira-sans-700-italic-latin-ext.733fd2e4852c.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;
}
