/*
 * The app's two faces, served from here rather than from Google.
 *
 * index.html used to pull FOUR families from fonts.googleapis.com - Archivo,
 * IBM Plex Mono, Inter and Martian Mono. Self-hosting fixes the privacy
 * problem - a third-party request disclosing the visitor's IP before the page
 * renders and before consent could be asked for, which is the most-litigated
 * item on the European web - and dropping the unused families removed about
 * 660 KB and two cross-origin round trips from the critical path.
 *
 * These are VARIABLE fonts, and that is load-bearing. Google returns one file
 * per family+subset covering the whole weight axis: requesting Inter at 400,
 * 500, 600 and 700 returns four URLs with identical bytes. This file used to
 * declare 600 and 700 as separate @font-face rules pointing at separate
 * copies, so every visitor downloaded the same 48 KB twice. One rule with a
 * `font-weight` RANGE lets the browser instance any weight in it from a
 * single download.
 *
 * Net effect of the v5 type change, for a reader of latin text:
 *   before   inter-600-latin + inter-700-latin        96,512 bytes
 *   after    inter-var-latin + jetbrains-mono-var     79,688 bytes
 * - a whole extra family, and still 16 KB lighter than what it replaced.
 *
 * Adding a weight costs nothing here; adding a SUBSET costs a file. Keep the
 * unicode-range lines, or a reader of latin text starts paying for latin-ext.
 */

@font-face{
  font-family: "Inter";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/fonts/inter-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: "Inter";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/fonts/inter-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;
}

@font-face{
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 400 500;
  font-display: swap;
  src: url("/fonts/jetbrains-mono-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: "JetBrains Mono";
  font-style: normal;
  font-weight: 400 500;
  font-display: swap;
  src: url("/fonts/jetbrains-mono-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;
}

/*
 * Country flags, because Windows has none.
 *
 * Segoe UI Emoji ships no glyphs for regional-indicator pairs, and Chromium
 * has said it will not add its own until Windows does. So on the one platform
 * Connect ships to, `🇳🇱` renders as two lettered boxes reading "NL". This is a
 * subset of Twemoji Mozilla containing ONLY U+1F1E6-1F1FF, so a flag resolves
 * here and every other character falls through to the next family in the stack.
 *
 * The unicode-range is what makes this free for everyone who draws no flag:
 * a browser downloads a face only when a character in its range is used, so the
 * dashboard, the marketing pages and every reader of latin text pay 0 bytes for
 * these 78 KB. That is the same rule the latin/latin-ext split above exists for.
 * Put "Twemoji Country Flags" FIRST in the font-family of an element that draws
 * a flag; putting it in a body-wide stack would be harmless but pointless.
 *
 * font-display is `block`, not `swap`: swapping would flash the lettered-box
 * fallback before the flag arrives, and the boxes are the exact failure this
 * face exists to remove. The file is local, so the block period is not felt.
 *
 * Twemoji Country Flags, from country-flag-emoji-polyfill@0.1.8 (TalkJS, MIT).
 * The emoji art is Twemoji and is redistributed under CC-BY 4.0:
 *   https://creativecommons.org/licenses/by/4.0/
 *   https://github.com/twitter/twemoji#license
 * Attribution is required and is carried here and in NOTICE.md. Do not strip it.
 */
@font-face{
  font-family: "Twemoji Country Flags";
  font-style: normal;
  font-weight: 400;
  font-display: block;
  src: url("/fonts/twemoji-country-flags.woff2") format("woff2");
  unicode-range: U+1F1E6-1F1FF;
}

/*
 * The wordmark's face, which is NOT the body face.
 *
 * "Unfenced" is a rounded n on straight legs when you squint at the mark, and
 * Inter's flat shoulder argued with it — Sora's is fully round, so the name and
 * the gate are drawn on the same idea. Set at 600: 700 closes the counters at
 * rail size, where the wordmark actually lives.
 *
 * LATIN ONLY, and deliberately. Everything --wordmark styles renders the
 * literal string "Unfenced" (the rail, the consent screen, the crash screen,
 * the sign-in card), so latin-ext would be a second file nobody's glyphs come
 * from. If --wordmark is ever pointed at arbitrary text — a customer's brand
 * name, say — add the latin-ext subset with it, or accented characters will
 * silently fall back to Inter mid-word.
 */
@font-face{
  font-family: "Sora";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/fonts/sora-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;
}
