/* THE ARROWS AND TRIANGLES, which Inter's Google subsets do not cover. None of
   its unicode-range declarations reaches these blocks, so a glyph outside all
   of them matched no @font-face, skipped the webfont and fell through --sans to
   whatever the platform had — a different face, weight and baseline on every
   machine, for about two hundred characters on the wire (59 arrows, 26 up
   triangles, 20 crosses...). The pricing page carried one of these three files
   and the wire pages none. Three subsets, one family, disjoint ranges, so a
   browser fetches only the file whose glyph is actually on the page. */
@font-face {
  font-family: "AXIOM Symbols";
  src: url("fonts/sym-inter.woff2?generation=a1fc39a1508e4671ad8e51b4384e9a66") format("woff2");
  font-display: swap;
  unicode-range: U+2190, U+2192, U+2197, U+21B3, U+2298, U+25A0, U+25B2,
                 U+25B6, U+25BC, U+25C6, U+2605, U+2606, U+2665, U+2713;
}
@font-face {
  font-family: "AXIOM Symbols";
  src: url("fonts/sym-noto.woff2?generation=a1fc39a1508e4671ad8e51b4384e9a66") format("woff2");
  font-display: swap;
  unicode-range: U+25B4, U+25B8, U+25BE, U+25D0, U+25D1, U+26A1, U+2715, U+270D;
}
@font-face {
  font-family: "AXIOM Symbols";
  src: url("fonts/sym-math.woff2?generation=a1fc39a1508e4671ad8e51b4384e9a66") format("woff2");
  font-display: swap;
  unicode-range: U+21C4, U+21F1, U+2261;
}

/* ============================================================
   AXIOM DEFENSE & FRONTIER TECH WIRE — terminal stylesheet
   Design family shared with the AXIOM Defense & Frontier Tech Wire
   (navy #0A2032 · blues #1D6BB4/#4D9BE0/#5BA6E8 · Inter + Newsreader
    · up #1f9d6b / down #cf4b3d · soft 10-12px radii)
   ============================================================ */

:root {
  /* the pinned masthead row — header.chrome is exactly this tall on every
     page; the clock strip and tape live outside it (see OVERHAUL LAYER) */
  --masthead: 56px;
  --bg:        #0A2032;
  --bg2:       #081B2B;
  --panel:     #0E2A3D;
  --panel2:    #13314A;
  /* A text field must not be the same colour as the surface it sits on. The
     newsletter input was painted --panel INSIDE a --panel panel — pixel
     identical in both themes, measured — so its only affordance was a 1px
     border and it did not read as something you could type into. --field is
     the fill that lifts it off the panel: lighter in both themes, which in
     dark means a step up from --panel and in light means plain white. */
  --field:     #163952;
  --grid:      #1B374F;
  --grid-soft: #163045;
  --text:      #E9F1F8;
  --text-dim:  #A9BDCD;
  --faint:     #7A93A6;
  /* --dim is what four podcast rules ask for by name (.pod-blurb, .pod-ep.nolink
     and the episode link) and nothing has ever defined: an undefined custom
     property makes the whole declaration invalid at computed-value time, so
     those rules inherited body colour and the blurb was never dimmed. Aliased
     rather than given a fifth grey — the intent is plainly secondary text. */
  --dim:       var(--text-dim);
  /* --ink and --muted were the same fault as --dim: used (the podcast card
     titles, the calendar stat figures, the kill-reason chips) and defined
     nowhere, so each of those rules fell back to inherited body colour.
     --muted follows the author's own fallback at .ph-note, --faint. */
  --ink:       var(--text);
  --muted:     var(--faint);
  --brand:     #4D9BE0;
  --brand-l:   #5BA6E8;
  --brand-d:   #1D6BB4;
  --pale:      #E6F1FB;
  --up:        #1f9d6b;
  --up-l:      #3ec78f;
  --down:      #cf4b3d;
  --violet:    #B07CE8;
  --footer:    #071521;
  --mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --sans: "Inter", "AXIOM Symbols", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  --serif: "Newsreader", Georgia, "Times New Roman", serif;
  /* the ✕ used by the search field's clear button, masked so it takes
     the theme colour instead of the browser's fixed grey bitmap */
  --x-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.6' stroke-linecap='round'%3E%3Cpath d='M5 5l14 14M19 5L5 19'/%3E%3C/svg%3E");
}

/* light theme — the newsletter's PAPER TWIN per the brand kit:
   ink #0A2032 on white, wash #F2F5F8, rule #D8E0E8, muted #5B6B7A,
   accent_dark #2F6FAE for text-level accents (AA on paper) */
[data-theme="light"] {
  --bg:        #FFFFFF;
  --bg2:       #F2F5F8;
  --panel:     #F2F5F8;
  --panel2:    #E6F1FB;
  /* white, because on paper "lighter than the panel" is the panel's own
     ground — the usual light-theme well. --panel2 is bluer, not lighter. */
  --field:     #FFFFFF;
  --grid:      #D8E0E8;
  --grid-soft: #E9EEF3;
  --text:      #0A2032;
  --text-dim:  #5B6B7A;
  --dim:       var(--text-dim);
  /* --ink and --muted were the same fault as --dim: used (the podcast card
     titles, the calendar stat figures, the kill-reason chips) and defined
     nowhere, so each of those rules fell back to inherited body colour.
     --muted follows the author's own fallback at .ph-note, --faint. */
  --ink:       var(--text);
  --muted:     var(--faint);
  /* was #7E99B5 — 2.95:1 on white and 2.70:1 on --bg2, well under the 4.5:1
     WCAG AA needs for text this size. It carries every timestamp, source chip,
     count and micro-label on the default theme, so the whole secondary layer
     of the page was failing. Same hue (211deg) and saturation, walked down in
     lightness only, to 4.95:1 on white and 4.52:1 on the panel — and still
     lighter than --text-dim, so faint still reads as fainter. */
  --faint:     #547392;
  --brand:     #2F6FAE;
  --brand-l:   #2F6FAE;
  --brand-d:   #1D6BB4;
  --pale:      #0A2032;
  --up:        #1f9d6b;
  --up-l:      #178a5d;
  --down:      #cf4b3d;
  --footer:    #F2F5F8;
}

/* Local copies of the Entertainment/Defense text families; see docs/FONT-SOURCES.json. */
@font-face{font-family:Inter;src:url("fonts/inter.ttf?generation=a1fc39a1508e4671ad8e51b4384e9a66") format("truetype");font-weight:100 900;font-display:swap}
@font-face{font-family:Newsreader;src:url("fonts/newsreader.ttf?generation=a1fc39a1508e4671ad8e51b4384e9a66") format("truetype");font-weight:200 800;font-display:swap}
@font-face{font-family:"IBM Plex Mono";src:url("fonts/plex-mono.ttf?generation=a1fc39a1508e4671ad8e51b4384e9a66") format("truetype");font-weight:400;font-display:swap}
