/* oz-fonts.css — the venue's own typefaces, served by the venue.
 *
 * Owner, 24 Aug: *"واحد صاحبي فتح الموقع من على Brave Browser وكل الموقع كان
 * بايظ، الفوتر كبير جداً وبايظ والألوان وحشة."*
 *
 * Every page loaded Orbitron, Rajdhani and Cairo from `fonts.googleapis.com`,
 * and BRAVE BLOCKS THAT BY DEFAULT — it is one of the requests its shields stop
 * as a fingerprinting vector, with no setting most people ever touch. So his
 * friend got a site with none of its three typefaces.
 *
 * That alone explains what he described. 310 declarations in this codebase said
 * `font-family:'Orbitron'` with NOTHING after the comma, so when Orbitron is
 * unavailable the browser falls all the way to its DEFAULT — a serif, at
 * different metrics — for every heading, every number, and the whole footer.
 * A site drawn in Times at Orbitron's sizes is exactly "the footer is enormous
 * and the colours look wrong": nothing about the colours changed, but a display
 * face swapped for a book face makes a dark theme look like a broken document.
 *
 * IT IS NOT ONLY BRAVE. Any privacy extension, any network that blocks Google,
 * and any slow DNS produces the same page. A venue whose site depends on a
 * third party to look like itself is a venue that does not control its own
 * brand (§3.7).
 *
 * THE FILES ARE OURS ALREADY. The player app has bundled all nine since it
 * shipped — same families, same weights, already licensed (all three are Open
 * Font License). Nothing was downloaded to build this; the files were copied
 * out of `occupy_player/assets/fonts/`.
 *
 * WHAT IS AND IS NOT SHIPPED, and why:
 *   Orbitron  — all three weights. 17KB each, and it is the brand.
 *   Cairo     — all three. Arabic is not optional here, and 91KB is fair.
 *   Rajdhani  — ONE weight, synthesised across 400–700. Each file is 363KB,
 *               because Rajdhani carries Devanagari the venue will never use,
 *               and three of them would be a megabyte of body text nobody
 *               looks at. One real weight beats a megabyte.
 *
 * 696KB in total, once, and the service worker keeps it.
 */

/* ---- Orbitron: display, numerals, the HUD ---- */
@font-face {
  font-family: 'Orbitron';
  src: url('assets/fonts/Orbitron-Bold.ttf') format('truetype');
  font-weight: 700;
  font-style: normal;
  /* Text is readable in the fallback while the file arrives, rather than
     invisible. An arena's wifi is the first thing to go. */
  font-display: swap;
}
@font-face {
  font-family: 'Orbitron';
  src: url('assets/fonts/Orbitron-ExtraBold.ttf') format('truetype');
  font-weight: 800;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Orbitron';
  src: url('assets/fonts/Orbitron-Black.ttf') format('truetype');
  font-weight: 900;
  font-style: normal;
  font-display: swap;
}

/* ---- AND THE DIGITS INSIDE IT COME FROM RAJDHANI ----
 *
 * Owner, 6 Sep 2026, picking option 3 of three rendered samples: *"غيره في كل
 * الموقع"*.
 *
 * ORBITRON DRAWS A SLASHED ZERO. It is a display face and the slash is
 * deliberate there, the way a gauge or a terminal draws one. On a price, a
 * points balance or a KDA it reads as a box with a line through it, and the
 * venue's numbers are the thing customers actually squint at.
 *
 * It is not a switch. `Orbitron-Bold.ttf` carries GPOS:kern and GPOS:mark and
 * NO GSUB TABLE AT ALL, so there is no `zero` or `ss01` feature to turn off and
 * no weight that draws it plain. Verified by reading the font's own table
 * directory rather than trusting a note that said so.
 *
 * WHY HERE AND NOT IN THE PAGES. 373 rules across 25 files say
 * `font-family:'Orbitron'`, and roughly half of them land on a number. Editing
 * them one at a time would mean deciding 373 times whether a thing is a
 * heading or a value, getting some of them wrong, and leaving the next rule
 * anyone writes free to bring the slash back. Declared here, every rule that
 * already exists and every rule anyone writes later gets Rajdhani digits, and
 * the whole change is this block plus one line on each Orbitron face.
 *
 * TWO THINGS ABOUT THE SHAPE, both learned by getting them wrong:
 *
 *   ONE FACE PER WEIGHT, not one face declared `font-weight: 400 900`. With a
 *     span, this face won the weight match for the whole family and the digits
 *     came out in the fallback instead of Rajdhani. Measured: 210.0px for
 *     "0123456" against Rajdhani's 203.5px.
 *   AND THE ORBITRON FACES KEEP THEIR FULL COVERAGE. My first version also
 *     restricted them to everything-but-digits, which is the tidy-looking half
 *     of the idea and it cost the site its display face entirely: the three
 *     Orbitron files stopped being fetched at all and every heading fell back
 *     to a serif. Later declaration is enough to win the overlap; the earlier
 *     faces do not need narrowing, and narrowing them broke them.
 *
 * Rajdhani ships ONE real file, so 800 and 900 are synthesised from it. Checked
 * side by side at 96px: the synthesis is not visible on digits.
 */
@font-face {
  font-family: 'Orbitron';
  src: url('assets/fonts/Rajdhani-SemiBold.ttf') format('truetype');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0030-0039;
}
@font-face {
  font-family: 'Orbitron';
  src: url('assets/fonts/Rajdhani-SemiBold.ttf') format('truetype');
  font-weight: 800;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0030-0039;
}
@font-face {
  font-family: 'Orbitron';
  src: url('assets/fonts/Rajdhani-SemiBold.ttf') format('truetype');
  font-weight: 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0030-0039;
}

/* ---- Cairo: every Arabic string on the site ---- */
@font-face {
  font-family: 'Cairo';
  src: url('assets/fonts/Cairo-SemiBold.ttf') format('truetype');
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Cairo';
  src: url('assets/fonts/Cairo-Bold.ttf') format('truetype');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Cairo';
  src: url('assets/fonts/Cairo-ExtraBold.ttf') format('truetype');
  font-weight: 800;
  font-style: normal;
  font-display: swap;
}

/* ---- Rajdhani: English body text ----
 *
 * One file for the whole range. A static face declared across 400–700 lets the
 * browser synthesise the heavier ones — slightly less crisp than a real bold,
 * and worth it against 730KB of Devanagari this venue will never render.
 */
@font-face {
  font-family: 'Rajdhani';
  src: url('assets/fonts/Rajdhani-SemiBold.ttf') format('truetype');
  font-weight: 400 700;
  font-style: normal;
  font-display: swap;
}

/* ---- AND A FALLBACK THAT IS NOT TIMES ----
 *
 * Belt and braces. Even self-hosted, a file can 404 after a bad deploy, and a
 * bare `font-family:'Orbitron'` would put the whole site in a serif again. This
 * gives the three families a sane stack at the root, so anything that inherits
 * lands on a system sans rather than on the browser's default book face.
 *
 * It does NOT replace the per-declaration fallbacks — those are in the pages,
 * because a rule that sets `font-family` overrides this one entirely. This is
 * what catches everything that never sets one at all.
 */
:root {
  --oz-sans: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
  --oz-display: 'Orbitron', var(--oz-sans);
  --oz-body: 'Rajdhani', var(--oz-sans);
  --oz-arabic: 'Cairo', var(--oz-sans);
}
