/* ============================================================================
   FIDS — Font system
   The active font is selected via the --font-primary CSS variable on body,
   which the Customize tab sets through the font-picker. The board default is
   Bricolage Grotesque.

   v24038 — ONLY THE APPROVED FAMILIES. Every face here is self-hosted and
   licensed for the boards: Bricolage Grotesque (SIL OFL), Cabinet Grotesk
   (ITF Free Font License), Possibility (bought: Commercial Use and Webfont)
   and AC Nord. The Google Fonts families that used to be imported here
   (Geist, Inter, Manrope, Space Grotesk, DM Sans, JetBrains Mono) are gone;
   code and figures that used JetBrains Mono take the system's monospace.
   ============================================================================ */

/* Possibility (Bold) — the project brand font. Single weight mapped across the
   range so it always resolves regardless of the weight the UI requests.
   v24027 — the file is NOT in the repository: its licence forbids passing it
   on, so it lives in private storage and the Worker serves it at this path
   (worker-entry.js privateFont). v24036 — licensed (Commercial Use and
   Webfont, Matthew Reynolds): the webfont as supplied, on orionconnected.com,
   .ca and .app. Elsewhere the stacks fall back to Bricolage Grotesque. */
@font-face { font-family:'Possibility'; font-weight:100 900; font-style:normal; font-display:swap; src:url('../fonts/Possibility-Bold-Web.woff2') format('woff2'); }

/* AC Nord — Air Canada's official brand typeface, bundled locally (woff2, no
   CDN). Two optical families: Display (headlines / gate numbers) and Text
   (body / labels). Each weight is its own file mapped to its true weight. */
@font-face { font-family:'AC Nord Display'; font-weight:400; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Display-Regular.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Display'; font-weight:500; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Display-Medium.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Display'; font-weight:700; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Display-Bold.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Display'; font-weight:800 900; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Display-Heavy.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Text'; font-weight:300; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Text-Light.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Text'; font-weight:400; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Text-Regular.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Text'; font-weight:400; font-style:italic;  font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Text-Italic.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Text'; font-weight:500; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Text-Medium.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Text'; font-weight:700; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Text-Bold.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Text'; font-weight:800 900; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Text-Heavy.woff2') format('woff2'); }

/* Per-weight AC Nord families — each maps ALL weights to a single file so the
   font picker can offer every weight as its own option (selecting one forces
   that exact weight everywhere). Same woff2 files as above. */
@font-face { font-family:'AC Nord Display Regular'; font-weight:1 1000; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Display-Regular.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Display Medium';  font-weight:1 1000; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Display-Medium.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Display Bold';    font-weight:1 1000; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Display-Bold.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Display Heavy';   font-weight:1 1000; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Display-Heavy.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Text Light';      font-weight:1 1000; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Text-Light.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Text Regular';    font-weight:1 1000; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Text-Regular.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Text Italic';     font-weight:1 1000; font-style:italic;  font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Text-Italic.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Text Medium';     font-weight:1 1000; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Text-Medium.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Text Bold';       font-weight:1 1000; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Text-Bold.woff2') format('woff2'); }
@font-face { font-family:'AC Nord Text Heavy';      font-weight:1 1000; font-style:normal; font-display:swap; src:url('../fonts/ac-nord/AC_Nord_Text-Heavy.woff2') format('woff2'); }

/* ── Font stacks exposed as variables ────────────────────────────────────── */
:root {
  /* Named font stacks — referenced by --font-primary when user picks one */
  --font-possibility:   'Possibility', 'Bricolage Grotesque', -apple-system, BlinkMacSystemFont, sans-serif;
  --font-ac-nord-display: 'AC Nord Display', 'AC Nord Text', -apple-system, BlinkMacSystemFont, sans-serif;
  --font-ac-nord-text:    'AC Nord Text', -apple-system, BlinkMacSystemFont, sans-serif;
  --font-system:        -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  --font-mono-stack:    ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
}

/* ── THE BOARD'S ICONS — our own files, not Air Canada's ─────────────────
   v24039. The gate info rows, the BIDS suitcase, the board-title plane, the
   boarding-lane arrows and the hotel ads' two marks were glyphs of Air
   Canada's own icon font (icomoon). They are now our own SVGs in
   logos/icons/: the planes, suitcase and boarding pass from a Vecteezy pack
   and the lane arrow from another (Vecteezy Pro licence); the bell,
   stopwatch, passengers, ringed plane, plane and house from Google's
   Material Symbols (Apache 2.0, LICENSE-Apache-2.0.txt beside them).

   Each is drawn as a MASK on the ::before box, so it takes `color` exactly
   as the font glyph did: white on the badges, an airline's ink where a rule
   sets one, Porter's navy, the hotel ads' gold. Every file is cropped to its
   own ink in a square box, with a little more margin on the tall marks than
   the wide ones, so one font-size gives one visible size. */
.ac-ico { font-style:normal; font-weight:normal; line-height:1; speak:none;
  display:inline-flex; align-items:center; justify-content:center;
  font-size:clamp(42px,6.4vh,84px); color:#fff; }
.ac-ico::before { content:'' !important; display:block; width:1em; height:1em; flex:none;
  background-color:currentColor;
  -webkit-mask-position:center; mask-position:center;
  -webkit-mask-size:contain; mask-size:contain;
  -webkit-mask-repeat:no-repeat; mask-repeat:no-repeat;
  /* an icon class with no drawing of its own paints nothing, never a square */
  -webkit-mask-image:linear-gradient(transparent, transparent); mask-image:linear-gradient(transparent, transparent); }
.ac-ico-flight::before   { -webkit-mask-image:url('../logos/icons/passengers.svg');    mask-image:url('../logos/icons/passengers.svg'); }
.ac-ico-dest::before     { -webkit-mask-image:url('../logos/icons/plane-ring.svg');    mask-image:url('../logos/icons/plane-ring.svg'); }
.ac-ico-status::before   { -webkit-mask-image:url('../logos/icons/bell.svg');          mask-image:url('../logos/icons/bell.svg'); }
.ac-ico-boarding::before { -webkit-mask-image:url('../logos/icons/boarding-pass.svg'); mask-image:url('../logos/icons/boarding-pass.svg'); }
.ac-ico-depart::before   { -webkit-mask-image:url('../logos/icons/takeoff.svg');       mask-image:url('../logos/icons/takeoff.svg'); }
.ac-ico-time::before     { -webkit-mask-image:url('../logos/icons/timer.svg');         mask-image:url('../logos/icons/timer.svg'); }
.ac-ico-landing::before  { -webkit-mask-image:url('../logos/icons/landing.svg');       mask-image:url('../logos/icons/landing.svg'); }
.ac-ico-baggage::before  { -webkit-mask-image:url('../logos/icons/suitcase.svg');      mask-image:url('../logos/icons/suitcase.svg'); }
/* One visible size on the rail (~58px at 1080p). The optical balance is in
   the files themselves (a tall bell carries more margin than a wide plane),
   so every mark takes the same size here. */
.ac-ico-flight, .ac-ico-dest, .ac-ico-status, .ac-ico-boarding, .ac-ico-depart { font-size:clamp(40px,6.4vh,86px) !important; }
/* The stopwatch rule must out-specify gate-display.css's
   `.gad-aircraft-col [class*="time"] {font-size:…34px}` — that value-text
   rule's [class*="time"] also matches ac-ico-TIME. Hence the deep scope. */
.g8-wrap .gad-aircraft-col .v2-fi-row .v2-fi-icon-badge:has(.ac-ico-time) { overflow: visible !important; }
.g8-wrap .gad-aircraft-col .v2-fi-icon-badge .ac-ico-time { font-size:clamp(40px,6.4vh,86px) !important; line-height:1 !important; }

/* ── BRICOLAGE GROTESQUE — self-hosted, variable ──────────────────────────
   v23869. Three axes in one file per subset: weight 200–800, width 75–100%,
   and an optical-size axis from 12 to 96 that the browser drives itself via
   font-optical-sizing (auto by default). That last one is the reason this is
   a variable face and not a set of instances: a board sets type from a gate
   number down to a row label, and the drawing corrects across that range
   without anything being asked for.

   The width axis is a fitting tool, not decoration. A bilingual string that
   overruns its cell can be condensed to fit instead of being cut — which is
   the rule the boards are held to, and the reason the two pinned widths
   below exist alongside the full range.

   SIL Open Font License 1.1 — OFL.txt sits beside the files, as the licence
   requires of anything that redistributes them. That licence is why this
   typeface can be here at all: it permits web embedding, self-hosting and
   broadcast, which is the exact combination the previously evaluated
   candidates each failed on one count or another.
   ───────────────────────────────────────────────────────────────────────── */
@font-face { font-family:'Bricolage Grotesque'; font-weight:200 800; font-stretch:75% 100%; font-style:normal; font-display:swap; src:url('../fonts/bricolage/BricolageGrotesque-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:'Bricolage Grotesque'; font-weight:200 800; font-stretch:75% 100%; font-style:normal; font-display:swap; src:url('../fonts/bricolage/BricolageGrotesque-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:'Bricolage Grotesque'; font-weight:200 800; font-stretch:75% 100%; font-style:normal; font-display:swap; src:url('../fonts/bricolage/BricolageGrotesque-vietnamese.woff2') format('woff2'); unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; }
@font-face { font-family:'Bricolage Grotesque SemiCond'; font-weight:200 800; font-stretch:87.5%; font-style:normal; font-display:swap; src:url('../fonts/bricolage/BricolageGrotesque-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:'Bricolage Grotesque SemiCond'; font-weight:200 800; font-stretch:87.5%; font-style:normal; font-display:swap; src:url('../fonts/bricolage/BricolageGrotesque-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:'Bricolage Grotesque SemiCond'; font-weight:200 800; font-stretch:87.5%; font-style:normal; font-display:swap; src:url('../fonts/bricolage/BricolageGrotesque-vietnamese.woff2') format('woff2'); unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; }
@font-face { font-family:'Bricolage Grotesque Cond'; font-weight:200 800; font-stretch:75%; font-style:normal; font-display:swap; src:url('../fonts/bricolage/BricolageGrotesque-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:'Bricolage Grotesque Cond'; font-weight:200 800; font-stretch:75%; font-style:normal; font-display:swap; src:url('../fonts/bricolage/BricolageGrotesque-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:'Bricolage Grotesque Cond'; font-weight:200 800; font-stretch:75%; font-style:normal; font-display:swap; src:url('../fonts/bricolage/BricolageGrotesque-vietnamese.woff2') format('woff2'); unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; }

/* ── CABINET GROTESK — Indian Type Foundry, via Fontshare ─────────────────
   v23880. ITF Free Font Licence: free for commercial use, and it names the
   three things this project actually needs — Websites, Broadcasting, and
   self-hosting through CSS @font-face. That combination is what every earlier
   candidate failed on, and it is why this one can be here.

   THE FILES ARE ITF'S OWN, BYTE FOR BYTE. The licence forbids subsetting and
   format conversion, so unlike Bricolage — where the OFL permitted using
   Google's subset builds — nothing here may be re-cut. The variable file
   carries the whole 100–900 weight axis in 42KB and is the one to use; the
   static weights are kept beside it for any renderer that will not take a
   variable face.
   ───────────────────────────────────────────────────────────────────────── */
@font-face { font-family:'Cabinet Grotesk'; font-weight:100 900; font-style:normal; font-display:swap; src:url('../fonts/cabinet-grotesk/CabinetGrotesk-Variable.woff2') format('woff2'); }
@font-face { font-family:'Cabinet Grotesk Light';   font-weight:300; font-style:normal; font-display:swap; src:url('../fonts/cabinet-grotesk/CabinetGrotesk-300.woff2') format('woff2'); }
@font-face { font-family:'Cabinet Grotesk Medium';  font-weight:500; font-style:normal; font-display:swap; src:url('../fonts/cabinet-grotesk/CabinetGrotesk-500.woff2') format('woff2'); }
@font-face { font-family:'Cabinet Grotesk Bold';    font-weight:700; font-style:normal; font-display:swap; src:url('../fonts/cabinet-grotesk/CabinetGrotesk-700.woff2') format('woff2'); }
@font-face { font-family:'Cabinet Grotesk Extrabold'; font-weight:800; font-style:normal; font-display:swap; src:url('../fonts/cabinet-grotesk/CabinetGrotesk-800.woff2') format('woff2'); }
@font-face { font-family:'Cabinet Grotesk Black';   font-weight:900; font-style:normal; font-display:swap; src:url('../fonts/cabinet-grotesk/CabinetGrotesk-900.woff2') format('woff2'); }
