/* Proving Ground deck: the shared layer of every slide (Assembler, 2026-11-14 night).

   TYPE: one voice for the whole deck, switched in ONE place (deck/base.js DECK_CONFIG.type, or ?type=jost|baskervville):
     html.theme-baskervville  deck/opening/TYPE_SYSTEM.md (variant 1): names in Baskervville italic 500, statements in
                              Baskervville roman 500, the date/context line in Baskervville capitals tracked 0.16 em
     html.theme-jost          variant 8, deck/opening/v2/TYPE_SYSTEM_v8.md (block at the END of this file, copied from
                              deck/opening/v2/samples/v8.css of 22:50): one face, Jost. Names in tracked capitals,
                              statements and words in Jost 500 sentence case, numbers Jost 650, units 400; Archivo leaves.
                              Each slide's own fixes for it are in that slide's <style>, scoped html.theme-jost.
     Baskervville: numbers, units, chart labels in Archivo (tabular lining figures). Both: our one hand note in
     Excalifont, bone (the Regolith palette: the hand is bone, --violet holds bone); Georgian falls back to Noto Serif Georgian / Noto Sans Georgian in every stack.
   Slides never name a face. They use the ROLE variables (--name-*, --stmt-*, --ctx-*) or the role classes
   (.pl / .place / .name = a name, .statement / .title = a statement, .ctx = the date line).

   Named sizes on the 1920 x 1080 stage (TYPE_SYSTEM.md "Roles, sizes, tracking"):
     title 118 (88 to 157) . name on a picture 82 . name attached to a thing 54 (never under 44) . context line 31
     label 37 . number 210 (the slide) / 118 (a pair) / 66 (a table), unit 0.42 of its number . hand 44 to 50
   Floor: nothing a juror must read under 28 px. No lower case in Baskervville under 44 px (use the label face).
   CREDITS: no credit or source line on a live slide (team decision, 2026-11-14 22:00). Every credit is on the credits
   slide (deck/credits.js -> slides/c1_credits.html) and in each slide's speaker notes. .credit stays in the markup,
   hidden here; html.credits-on shows it again (DECK_CONFIG.showCredits).
*/

@font-face { font-family: "Baskervville"; font-style: normal; font-weight: 400 700; font-display: block;
  src: url("fonts/Baskervville%5Bwght%5D.ttf") format("truetype"); }
@font-face { font-family: "Baskervville"; font-style: italic; font-weight: 400 700; font-display: block;
  src: url("fonts/Baskervville-Italic%5Bwght%5D.ttf") format("truetype"); }
@font-face { font-family: "Jost"; font-style: normal; font-weight: 100 900; font-display: block;
  src: url("fonts/Jost%5Bwght%5D.ttf") format("truetype"); }
@font-face { font-family: "Archivo"; font-style: normal; font-weight: 100 900; font-stretch: 62% 125%; font-display: block;
  src: url("fonts/archivo-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: "Archivo"; font-style: normal; font-weight: 100 900; font-stretch: 62% 125%; font-display: block;
  src: url("fonts/archivo-var-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; }
/* Newsreader: the app's serif, kept only as a fallback in the display stack */
@font-face { font-family: "Newsreader"; font-style: normal; font-weight: 200 800; font-display: block;
  src: url("fonts/newsreader-roman-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: "Newsreader"; font-style: italic; font-weight: 200 800; font-display: block;
  src: url("fonts/newsreader-italic-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: "Excalifont"; font-style: normal; font-weight: 400; font-display: block;
  src: url("fonts/excalifont-latin.woff2") format("woff2"); }
@font-face { font-family: "Patrick Hand"; font-style: normal; font-weight: 400; font-display: block;
  src: url("fonts/patrickhand-latin.woff2") format("woff2"); }
/* Georgian companions (TYPE_SYSTEM.md rule 11: size-adjust 85 % beside Baskervville, 96 % beside Archivo).
   Georgian has no italic: the upright file is declared for italic too, so the browser never slants it. */
@font-face { font-family: "Noto Sans Georgian"; font-style: normal; font-weight: 100 900; font-stretch: 62.5% 100%; font-display: block;
  src: url("fonts/noto-sans-georgian-var.woff2") format("woff2");
  unicode-range: U+0589, U+10A0-10FF, U+1C90-1CBA, U+1CBD-1CBF, U+205A, U+2D00-2D2F, U+2E31;
  size-adjust: 96%; ascent-override: 89.6%; descent-override: 21.4%; line-gap-override: 0%; }
@font-face { font-family: "Noto Sans Georgian"; font-style: italic; font-weight: 100 900; font-stretch: 62.5% 100%; font-display: block;
  src: url("fonts/noto-sans-georgian-var.woff2") format("woff2");
  unicode-range: U+0589, U+10A0-10FF, U+1C90-1CBA, U+1CBD-1CBF, U+205A, U+2D00-2D2F, U+2E31;
  size-adjust: 96%; ascent-override: 89.6%; descent-override: 21.4%; line-gap-override: 0%; }
@font-face { font-family: "Noto Serif Georgian"; font-style: normal; font-weight: 100 900; font-stretch: 62.5% 100%; font-display: block;
  src: url("fonts/noto-serif-georgian-var.woff2") format("woff2");
  unicode-range: U+0589, U+10A0-10FF, U+1C90-1CBA, U+1CBD-1CBF, U+205A, U+2D00-2D2F, U+2E31;
  size-adjust: 85%; ascent-override: 85.5%; descent-override: 30.8%; line-gap-override: 0%; }
@font-face { font-family: "Noto Serif Georgian"; font-style: italic; font-weight: 100 900; font-stretch: 62.5% 100%; font-display: block;
  src: url("fonts/noto-serif-georgian-var.woff2") format("woff2");
  unicode-range: U+0589, U+10A0-10FF, U+1C90-1CBA, U+1CBD-1CBF, U+205A, U+2D00-2D2F, U+2E31;
  size-adjust: 85%; ascent-override: 85.5%; descent-override: 30.8%; line-gap-override: 0%; }

:root {
  /* colour: the Regolith palette (deck/color/PALETTE.md, tokens from deck/color/tokens.css, pasted by the Assembler
     2026-11-15 final pass). Variable NAMES are unchanged, so every slide follows. The one rule: amber means "the analogy
     breaks here" and nothing else; everything we draw (type, marks, our hand) is bone. --violet* now hold our hand's
     bone (the name is kept so no slide had to change). Contrast on --void, WCAG / harsh projector model. */
  --void: #050505;         /*  1.00 : 1  ground of every slide; the footage's own black */
  --stage: #0e0d0c;        /*  1.05 : 1  land on maps, quiet fills */
  --stage-2: #1d1c1a;      /*  1.20 : 1  panels (a chart's own ground) */
  --line: #2d2c2a;         /*  1.46 : 1  hairline for the laptop only; never carries meaning */
  --line-strong: #716f6c;  /*  4.07 : 1  every hairline that must be seen in the hall: axes, panel edges */
  --bone: #ede9df;         /* 16.81 : 1  all type, our marks, our results, thin data lines */
  --ash: #bbb8b0;          /* 10.28 : 1  secondary type: units, quiet labels, a baseline's number */
  --smoke: #aaa7a0;        /*  8.49 : 1  the smallest labels: axis numbers, dawn/dusk, a baseline's marks */
  --violet: #ede9df;       /* OUR HAND (was violet): hand notes, rings, arrows, the selected thing. = --hand */
  --violet-deep: #3a3935;  /* a pressed control or a fill that carries bone text. = --hand-deep */
  --violet-wash: rgba(237, 233, 223, 0.10);
  --amber: #eeb72f;        /* 11.11 : 1  WHERE THE ANALOGY BREAKS. Nothing else. One amber group per slide. = --breaks */
  --amber-wash: rgba(238, 183, 47, 0.13);
  --new: #7fe3a4;           /* the word NEW (a place not among the 192 known sites). Asked for by the team, 15 Nov. Nothing else. */
  --mars: #b57d61;         /* Mars: a disc before its name, an area or dot >= 6 px; never a line, never an accent */
  --earth: #a1b3c6;        /* Earth: as --mars (cool steel from the Artemis II Earth disc) */
  --moon: #b4b1a9;         /* Moon: as --mars (regolith grey); also a large filled area of Moon data */
  --hand: #ede9df; --hand-deep: #3a3935; --hand-wash: rgba(237, 233, 223, 0.10);
  --breaks: #eeb72f; --breaks-wash: rgba(238, 183, 47, 0.13);
  --casing: #050505;       /* 2 px casing under a hand mark that crosses a picture or a map */
  --on-hand: #050505; --on-breaks: #050505;
  --sun: #fff4d6;          /* sunlight itself (a ray, the Sun's disc): physical, not a palette colour */
  /* sequential ramp 'lamplit' (score maps, sunlight share) and the diverging steel / black / straw */
  --ramp-0: #4e463f; --ramp-1: #6e5f52; --ramp-2: #8e7a65; --ramp-3: #ae967b; --ramp-4: #c9b699; --ramp-5: #e1d6c0;
  --ramp-nodata: #0e0d0c;
  --div-0: #b8cde4; --div-1: #728396; --div-2: #353e47; --div-3: #141414; --div-4: #4a4130; --div-5: #948363; --div-6: #e0d0a8;

  /* families (stacks keep the Georgian companion second) */
  --f-baskervville: "Baskervville", "Noto Serif Georgian", "Newsreader", "Baskerville", Georgia, serif;
  --f-jost: "Jost", "Noto Sans Georgian", "Archivo", "Segoe UI", system-ui, sans-serif;
  --f-ui: "Archivo", "Noto Sans Georgian", "Segoe UI", system-ui, sans-serif;
  --f-hand: "Excalifont", "Patrick Hand", "Noto Sans Georgian", "Segoe Print", cursive;

  /* named sizes, px on the 1920 x 1080 stage */
  --ts-title: 118px; --ts-title-min: 88px; --ts-title-max: 157px;
  --ts-name: 82px;            /* a name on a picture */
  --ts-name-attached: 54px;   /* a name attached to a thing; never under 44 */
  --ts-context: 31px;         /* the one date or context line under a name (capitals) */
  --ts-label: 37px;           /* a label naming a part of a chart or picture (Archivo 500; quiet: ash 400) */
  --ts-num-slide: 210px; --ts-num-pair: 118px; --ts-num-table: 66px;
  --ts-unit: 0.42em;          /* a unit after its number, on the same baseline */
  --ts-hand: 50px;
  --ts-credit: 20px;
  /* weights and tracking that do not depend on the theme */
  --w-num: 650; --w-unit: 400; --w-label: 500; --tr-num: -0.035em; --tr-label: 0;

  /* the old scale, kept for the builders' slides: 28 x (4/3)^n */
  --t-credit: 20px;
  --t0: 28px; --t1: 37px; --t2: 50px; --t3: 66px; --t4: 88px; --t5: 118px; --t6: 157px; --t7: 210px;
  --t8: 280px; --t9: 373px; --t10: 497px;

  --margin: 96px;            /* outer margin of every slide, all four sides */
  --baseline: 984px;         /* the bottom line: 1080 minus the margin (TYPE_SYSTEM.md rule 7) */
  --col: 120px;
  --ease: cubic-bezier(0.4, 0, 0.2, 1);   /* 15 Nov 11:05 (team: nothing should pop): was (0.22, 0.7, 0.2, 1), which put three quarters of a fade into its first 100 ms; this one reads as a fade */

  /* motion between and inside slides (deck/motion/MOTION_SPEC.md 2.11; JS twins DECK.ease.arrive / travel / fall) */
  --t-blink: 120ms;   /* type that cuts in on a spoken word (labels in moves) */
  --t-leave: 200ms;   /* what is not carried leaves: opacity, linear */
  --t-build: 350ms;   /* builds, as today */
  --ease-arrive: cubic-bezier(0.4, 0, 0.2, 1);   /* = --ease: things arriving, builds, a light spreading */
  --ease-travel: cubic-bezier(0.65, 0, 0.35, 1);    /* a carried thing going from one rest to another */
  --ease-fall:   cubic-bezier(0.5, 0, 0.75, 0.2);   /* light leaving, things breaking or sinking */
  /* leave and every opacity that stands for a rate: linear. Decay of a glare: exp(-t / 250 ms). Never overshoot. */

  /* ---------- the voice: theme-baskervville is the default ---------- */
  --f-display: var(--f-baskervville);
  /* a name: a place, a world, the product */
  --name-family: var(--f-baskervville); --name-style: italic; --name-weight: 500; --name-case: none;
  --name-track: -0.008em; --name-adjust: none;
  /* a statement: the one sentence of a slide */
  --stmt-family: var(--f-baskervville); --stmt-style: normal; --stmt-weight: 500; --stmt-case: none; --stmt-adjust: none;
  /* the date or context line under a name: capitals of the roman, tracked */
  --ctx-family: var(--f-baskervville); --ctx-style: normal; --ctx-weight: 500; --ctx-case: uppercase;
  --ctx-track: 0.16em; --ctx-word: -0.1em; --ctx-adjust: none;
  /* tracking of statements by size band (TYPE_SYSTEM.md: -0.012 at 88, -0.018 at 118, -0.022 at 157) */
  --tr-t3: -0.008em; --tr-t4: -0.012em; --tr-t5: -0.018em; --tr-t6: -0.022em;
}

*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; height: 100%; background: #000; overflow: hidden; }
body {
  color: var(--bone); font-family: var(--f-ui); font-size: var(--t1); font-weight: 400; line-height: 1.3;
  font-kerning: normal; font-optical-sizing: auto; font-synthesis: none;
  font-variant-numeric: lining-nums; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility;
}
h1, h2, h3, p, figure, ul, ol { margin: 0; padding: 0; font-weight: inherit; font-size: inherit; list-style: none; }
img, canvas, svg, video { display: block; }

/* the stage: always 1920 x 1080, scaled to the window by base.js (letterboxed, centred) */
.stage { position: absolute; left: 0; top: 0; width: 1920px; height: 1080px; overflow: hidden;
  background: var(--void); transform-origin: 0 0; }
.bleed { position: absolute; inset: 0; width: 1920px; height: 1080px; object-fit: cover; }
.layer { position: absolute; inset: 0; }

/* ---------- roles ---------- */
.name, .place, .pl, .r-name {
  font-family: var(--name-family); font-style: var(--name-style); font-weight: var(--name-weight);
  text-transform: var(--name-case); letter-spacing: var(--name-track); font-size-adjust: var(--name-adjust);
}
.statement, .title, .r-stmt {
  font-family: var(--stmt-family); font-style: var(--stmt-style); font-weight: var(--stmt-weight);
  text-transform: var(--stmt-case); font-size-adjust: var(--stmt-adjust);
}
.ctx, .r-ctx {
  font-family: var(--ctx-family); font-style: var(--ctx-style); font-weight: var(--ctx-weight); font-size: var(--ts-context);
  text-transform: var(--ctx-case); letter-spacing: var(--ctx-track); word-spacing: var(--ctx-word);
  font-size-adjust: var(--ctx-adjust); opacity: 0.9;
}
.statement { font-size: var(--t4); line-height: 1.04; letter-spacing: var(--tr-t4); text-wrap: balance; }
.data { font-family: var(--f-ui); font-variant-numeric: tabular-nums lining-nums; }
.num { font-variant-numeric: tabular-nums lining-nums; }
.r-num { font-family: var(--f-ui); font-weight: var(--w-num); letter-spacing: var(--tr-num); line-height: 1;
  font-variant-numeric: tabular-nums lining-nums; }
.r-unit { font-family: var(--f-ui); font-weight: var(--w-unit); font-size: var(--ts-unit); letter-spacing: 0; }
.r-label { font-family: var(--f-ui); font-weight: var(--w-label); font-size: var(--ts-label); letter-spacing: var(--tr-label); }
.r-label.quiet { color: var(--ash); font-weight: 400; }
/* a name set under 44 px (a caption, a small chart): the label face, upright, keeps its world disc */
.pl.r-label, .name.r-label { font-style: normal; text-transform: none; font-size-adjust: none; }
.strong { font-weight: 650; }
.hand { font-family: var(--f-hand); font-weight: 400; font-style: normal; color: var(--violet); font-size: var(--t1); line-height: 1.15;
  text-transform: none; letter-spacing: 0; font-size-adjust: none; }
.ash { color: var(--ash); } .smoke { color: var(--smoke); } .amber { color: var(--amber); } .violet { color: var(--violet); }
.nowrap { white-space: nowrap; }

/* the one credit line (TYPE_SYSTEM.md): Archivo 400, 20 px, ash, right edge on x = 1824, baseline on y = 984.
   Hidden on live slides (team decision); the credits slide carries them all. */
.credit { position: absolute; left: auto; right: var(--margin); bottom: 92.7px; top: auto; text-align: right;
  font-family: var(--f-ui); font-size: var(--ts-credit); font-weight: 400; line-height: 20px; letter-spacing: 0.02em;
  color: var(--ash); white-space: nowrap; font-variant-numeric: tabular-nums lining-nums; display: none !important; }
html.credits-on .credit { display: block !important; }
.credit.on-image { color: var(--ash); }

/* a marked placeholder: never shown in the deck (optional fields render nothing when empty, base.js DECK_CONFIG) */
.pending { display: none !important; }

/* stars canvas sits behind type; base.js never draws a star under an element marked data-clear */
canvas.stars { position: absolute; inset: 0; width: 1920px; height: 1080px; pointer-events: none; }

/* visual grammar, the same on every slide: a coloured disc before a name says which world it is (Moon grey,
   Earth blue, Mars rust); amber means "here it breaks" and nothing else; bone is our own hand (Regolith). */
.pl { color: var(--bone); white-space: nowrap; }
.pl::before { content: ""; display: inline-block; width: 0.42em; height: 0.42em; border-radius: 50%; margin-right: 0.32em;
  vertical-align: 0.14em; background: var(--moon); }
.pl.earth::before { background: var(--earth); }
.pl.mars::before { background: var(--mars); }
.c-moon { color: var(--moon); } .c-earth { color: var(--earth); } .c-mars { color: var(--mars); }
/* THE MOON MARK (FIX round, queue E0 S1): a Moon base is named with the plain Moon disc, the same size as the Earth
   disc; where the place matters the words say it. The old "locator" glyph (a disc with a white dot) is gone: base.js no
   longer adds it, and an inline copy still left inside a name never shows. */
.stage .pl > svg.mglyph { display: none; }
/* the short heading of a slide, top left: a statement at the bottom of the title range */
.title { position: absolute; left: var(--margin); top: 72px; font-size: var(--ts-title-min);
  line-height: 1.04; letter-spacing: var(--tr-t4); color: var(--bone); white-space: nowrap; }
.title .dim { color: var(--ash); }
/* a label under or beside a picture: a few words */
.tag { font-size: var(--t1); font-weight: 500; color: var(--bone); white-space: nowrap; }
.tag.dim { color: var(--ash); font-weight: 400; }

/* builds: hidden until the presenter's key (base.js); type arrives by opacity only */
[data-build] { opacity: 0; transition: opacity 0.45s var(--ease); }
[data-build].built { opacity: 1; }

/* real footage, full bleed: the poster frame is always underneath the video, so a clip that
   cannot play still leaves a complete slide. Type sits on a scrim in the bottom third only. */
video.bleed { opacity: 0; transition: opacity 0.5s linear; }
video.bleed.on { opacity: 1; }
html.still video.bleed { display: none; }
.scrim { position: absolute; left: 0; right: 0; bottom: 0; height: 420px;
  background: linear-gradient(to top, color-mix(in srgb, var(--void) 94%, transparent) 0%,
    color-mix(in srgb, var(--void) 78%, transparent) 40%, color-mix(in srgb, var(--void) 0%, transparent) 100%); }

/* a note for the laptop driver: never shown on a slide (speaker notes carry it) */
.cue { display: none; }
.todo { display: none !important; }

/* still mode (renderer): everything jumps to its final state */
html.still *, html.still *::before, html.still *::after { animation-duration: 0s !important; animation-delay: 0s !important;
  transition-duration: 0s !important; transition-delay: 0s !important; }
/* OS reduced motion: standalone pages only. Inside the deck (html.in-deck, set by base.js) the deck's own switch decides
   (DECK_CONFIG.motion, ?motion=, key M): MOTION_SPEC 2.6, a borrowed laptop must not silently freeze a slide's content. */
@media (prefers-reduced-motion: reduce) {
  html:not(.in-deck) *, html:not(.in-deck) *::before, html:not(.in-deck) *::after { animation-duration: 0s !important; animation-delay: 0s !important; transition-duration: 0s !important; }
}
/* armed (?arm=1): the slide is loaded under the current one and must not start anything before 'go' (base.js holds
   play() and requestAnimationFrame; this holds every CSS animation) */
html.armed *, html.armed *::before, html.armed *::after { animation-play-state: paused !important; }

/* ---------- theme-jost: TYPE_SYSTEM_v8.md (deck/opening/v2/samples/v8.css, 22:50, font paths made "fonts/...") ---------- */
/* Georgian beside Jost's lower case: Mkhedruli at 88 % (x-height 0.48 em against Jost's 0.47).
   Beside Jost's capitals the deck's existing "Noto Sans Georgian" (size-adjust 96 %) is right: its Mtavruli
   capitals are 0.724 em tall, 0.695 em at 96 %, against Jost's 0.70. */
@font-face { font-family: "Noto Sans Georgian Text"; font-style: normal; font-weight: 100 900; font-stretch: 62.5% 100%; font-display: block;
  src: url("fonts/noto-sans-georgian-var.woff2") format("woff2");
  unicode-range: U+0589, U+10A0-10FF, U+1C90-1CBA, U+1CBD-1CBF, U+205A, U+2D00-2D2F, U+2E31;
  size-adjust: 88%; ascent-override: 98%; descent-override: 30%; line-gap-override: 0%; }

html.theme-jost {
  /* families: capitals roles take Georgian at 96 %, lower-case roles at 88 % */
  --f-jost: "Jost", "Noto Sans Georgian", "Segoe UI", system-ui, sans-serif;
  --f-jost-text: "Jost", "Noto Sans Georgian Text", "Segoe UI", system-ui, sans-serif;
  --f-display: var(--f-jost-text);
  --f-ui: var(--f-jost-text);            /* numbers, units, labels, body: Jost (was Archivo) */

  /* a name: a place, a world, the product. Capitals, tracked. Sizes are real font sizes (cap height = 0.70 of them) */
  --name-family: var(--f-jost); --name-style: normal; --name-weight: 500; --name-case: uppercase;
  --name-track: 0.12em; --name-word: -0.14em; --name-adjust: none;
  --name-track-title: 0.08em;  /* a name at title size (the product on slide 3, 88 px): capitals need less room as they grow */
  --ts-name: 46px;             /* a name on a picture: cap height 32, as on slide 1 (deck/opening/v2/K8_final.html) */
  --name-weight-picture: 480; --name-track-picture: 0.14em;   /* ... where it is a touch lighter and wider: a lone line on a frame */
  --ts-name-attached: 37px;    /* a name attached to a thing: cap height 26 */
  --ts-label-attached: 33px;   /* the one label in a picture (the lamp, the Sun): cap height 23, weight 530, as on slide 1 */
  --w-label-attached: 530; --label-word: -0.18em;
  /* the date or context line under a name: smaller capitals, wider */
  --ctx-family: var(--f-jost); --ctx-style: normal; --ctx-weight: 500; --ctx-case: uppercase;
  --ts-context: 30px; --ctx-track: 0.16em; --ctx-word: -0.1em; --ctx-adjust: none;

  /* a statement: sentence case, a full stop, never capitals */
  --stmt-family: var(--f-jost-text); --stmt-style: normal; --stmt-weight: 500; --stmt-case: none; --stmt-adjust: none;
  --stmt-leading: 1.14;
  --tr-t3: 0em; --tr-t4: -0.01em; --tr-t5: -0.015em; --tr-t6: -0.02em;

  /* numbers and their units */
  --w-num: 650; --tr-num: -0.035em; --w-unit: 400;
  /* a word about a thing (a verdict, an axis word): lower case */
  --w-label: 500; --tr-label: 0.01em;
}

/* Georgian capitals are WRITTEN in Mtavruli (U+1C90..). Chromium's text-transform: uppercase does not make them and
   shows Mtavruli text as Mkhedruli again (checked in Chromium 145), so it is switched off for Georgian. */
html.theme-jost :lang(ka) { --name-case: none; --ctx-case: none; }

/* role rules: what the theme adds to the rules deck/base.css already has. :where() keeps their weight at that of
   the base rules (one class), so a slide's own style still wins, exactly as if the lines were inside base.css. */
:where(html.theme-jost) .name, :where(html.theme-jost) .place, :where(html.theme-jost) .pl, :where(html.theme-jost) .r-name { word-spacing: var(--name-word); }
:where(html.theme-jost) .statement, :where(html.theme-jost) .title, :where(html.theme-jost) .r-stmt { line-height: var(--stmt-leading); }
/* a name set in lower case (in a list, in a narrow column: class="pl r-label"): no capitals, so none of their spacing */
:where(html.theme-jost) .pl.r-label, :where(html.theme-jost) .name.r-label { letter-spacing: var(--tr-label); word-spacing: 0; }
/* what is said about a named thing after its name (a height, a time: "2 m up"): lower case and quiet, in a
   <span class="q">. Capitals would turn the unit into "2 M UP". No middle dot: the change of case separates. */
html.theme-jost .pl .q, html.theme-jost .name .q { text-transform: none; font-family: var(--f-ui); font-weight: 400;
  letter-spacing: var(--tr-label); word-spacing: 0; color: var(--ash); margin-left: 0.6em; }
/* figures: Jost's own figures are proportional; its tabular set puts a 1 in a 0.6 em cell and leaves holes
   ("1 1 December", "1 34"). So proportional lining figures everywhere, and tabular only where a number changes on
   screen or stands in a column: mark that element class="tabular". (In Archivo every figure had one width, so the
   slides ask for tabular everywhere; this one rule undoes that without touching them.) */
html.theme-jost .stage * { font-variant-numeric: lining-nums proportional-nums !important; }
html.theme-jost .stage .tabular, html.theme-jost .stage .tabular * { font-variant-numeric: lining-nums tabular-nums !important; }
/* the world disc before a capitals name: two thirds of the cap height (18 px at 37), centred on it */
html.theme-jost .pl::before { width: 0.48em; height: 0.48em; margin-right: 0.4em; vertical-align: 0.11em; }
/* Assembler: a qualifier after a name is marked <span class="q"><span class="sep"> · </span>2 m up</span>. In the
   Baskervville theme it reads "Moon Base I ridge · 2 m up" in the name's own italic; in Jost the change of case
   separates, so the dot goes (TYPE_SYSTEM_v8.md: no middle dots). */
html.theme-jost .q .sep { display: none; }
