/* Plectis — maths subsite layer.
   Loads after assets/style.css and only on maths/ pages. It reuses the site
   tokens and the docs-* skeleton (topbar, sidebar, layout, toc) and adds the
   components this subsite needs: the universe canvas, problem dossiers, the
   paper reading stage, and the repository shelf. House rules hold here:
   no inline styles, no entrance animation, colour never the only signal. */

/* ---- Subsite tokens ----------------------------------------------------
   Canvas node colours are CSS custom properties so the drawing code reads
   them with getComputedStyle and a theme flip repaints the field without a
   second palette in JS. Light first, dark mirrors below (same discipline as
   style.css: the @media block covers system dark, the [data-theme] block
   covers the explicit choice). */
:root {
  /* The same block as the landing's in assets/style.css (keep the two in
     step; universe_runtime_regression.test.mjs holds them equal). The map
     is the plait seen from above: Comparator's replays a field in the
     ember's mark step, what Lean states and no replay has reached yet seeds
     in the ice's glow step (the photograph's red half holding its dots of
     azure), the two inks the doctrine map gives the machinery and the
     rules. Structure is ink and the ground's own violet greys; colour is
     kept for evidence and colours marks, never words. A problem is drawn
     like the core, a ring round a point. The dataviz palette validator
     passes the pair's colour-blind separation (worst Delta E 26 at night,
     14 by day, against 9.7 and 9.6 for the orange and teal it replaced),
     its normal-vision floor and its contrast on both grounds; it flags the
     azure's chroma (0.07 to 0.085 against its 0.10 floor), which the
     palette holds mature on purpose, so a queued result also carries its
     pip and colour is never the only signal. */
  --u-universe: var(--ink);
  --u-problem: #272230;
  --u-claim: #716c7b;
  --u-paper: #9894a0;
  --u-paper-short: #8f6212;
  --u-paper-long: #6a4fa3;
  /* A problem's optional expository paper (11 October 2026): verdigris,
     the one hue family the map's inks leave open. The dataviz palette
     validator passes it against brass and violet on both grounds (worst
     colour-blind Delta E 10.6 by day, 9.9 at night; normal vision 16.5
     and 20.2), and its lightness, chroma and contrast pass on its own. */
  --u-paper-expository: #0d8b73;
  --u-document: #6a6573;
  --u-integration: var(--weave-red);
  --u-module: #9c98a4;
  --u-object: #8c8499;
  --u-statement: var(--weave-azure-glow);
  --u-plate: rgba(25, 21, 32, 0.045);
  --u-edge: rgba(25, 21, 32, 0.14);
  --u-edge-hot: rgba(42, 89, 130, 0.55);
  --u-halo: rgba(25, 21, 32, 0.10);
  --u-rim: rgba(25, 21, 32, 0.3);
  /* Gold marks a link that leaves the site (the source links), as
     --link-ext does; labels and numerals take the ember. */
  --maths-gold: #8f6212;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme]) {
    --u-problem: #ece0cf;
    --u-claim: #a29dac;
    --u-paper: #85818e;
    --u-paper-short: #d9a84e;
    --u-paper-long: #a98fd6;
    --u-paper-expository: #1daa8d;
    --u-document: #94909e;
    --u-module: #847e8f;
    --u-object: #a7a0b6;
    --u-plate: rgba(242, 230, 212, 0.05);
    --u-edge: rgba(242, 230, 212, 0.14);
    --u-edge-hot: rgba(151, 193, 223, 0.7);
    --u-halo: rgba(242, 230, 212, 0.12);
    --u-rim: rgba(12, 8, 16, 0.55);
    --maths-gold: #e6b264;
  }
}
:root[data-theme="dark"] {
  --u-problem: #ece0cf;
  --u-claim: #a29dac;
  --u-paper: #85818e;
  --u-paper-short: #d9a84e;
  --u-paper-long: #a98fd6;
  --u-paper-expository: #1daa8d;
  --u-document: #94909e;
  --u-module: #847e8f;
  --u-object: #a7a0b6;
  --u-plate: rgba(242, 230, 212, 0.05);
  --u-edge: rgba(242, 230, 212, 0.14);
  --u-edge-hot: rgba(151, 193, 223, 0.7);
  --u-halo: rgba(242, 230, 212, 0.12);
  --u-rim: rgba(12, 8, 16, 0.55);
  --maths-gold: #e6b264;
}

/* A grid item refuses to shrink below its content's min-content width, so a
   wide module table would otherwise force page-level horizontal scroll on
   small screens; the table's own .table-scroll wrapper is the scroller. */
.maths-layout .docs-main { min-width: 0; }
/* Labels in the reading room are sentence case, like the rest of its text:
   tracked capitals over every section read as template chrome. The shared
   eyebrow and the PDF/TeX badge are restyled here for these pages only. */
.maths-layout .eyebrow {
  text-transform: none;
  letter-spacing: 0;
  font-size: var(--fs-meta);
  font-weight: 600;
  color: var(--muted);
}
.maths-layout .btn__format { font-family: var(--font-sans); font-weight: 650; letter-spacing: 0.02em; }
/* The paper head, précis, notes and manuscript share one measure, so the
   right edge of the reading column does not move as the page begins. The
   measure is set in the manuscript's own type size, and that size grows with
   the screen: 18px up to a 1280 laptop, 19px on a 13-inch MacBook Air, 20.5px
   on a 1080p monitor, 21px beyond. 38em of STIX holds a body line near 80
   characters at every size, so a wider screen gets a larger page instead of
   the same strip in a wider gutter. The fixed 34.5rem at 18px it replaces
   left a laptop's main column a third empty and sent one display formula in
   eleven into a scroll box (measured over all 19 papers, 4 Oct 2026). */
.maths-layout {
  --paper-font: clamp(1.125rem, 0.90625rem + 0.3125vw, 1.3125rem);
  --paper-measure: calc(var(--paper-font) * 38);
}
/* ---- One reading frame (6 October 2026) --------------------------------
   Every maths page with the sidebar (the overview, the problem pages, the
   papers and the guides) sits in one frame, and the site header lines up
   with it. The overview used to keep the docs' 1320px cap while a manuscript
   took 1560px, so the sidebar, the wordmark and the first line of text all
   moved sideways between the overview and the paper it links to. The frame
   is the manuscript's, kept because the 1320px cap held the main column to
   800px on every laptop and monitor. The grid gap already separates the text
   from the sidebars, so the wrap drops its own 24px gutters there instead of
   doubling them, and every page's text starts on the same edge.
   The sidebar widens with the screen to 258px, where every problem's number
   and name fit on one line; the margin contents keep 220px. */
body:has(.maths-layout) { --maths-frame: min(1560px, calc(100% - 40px)); --maths-nav-w: clamp(220px, 18vw, 258px); }
.docs-layout.maths-layout,
body:has(.maths-layout) .docs-topbar__inner { width: var(--maths-frame); }
@media (min-width: 769px) {
  .maths-layout .docs-main { --gutter: 0px; }
}
@media (min-width: 1281px) {
  .maths-layout { grid-template-columns: var(--maths-nav-w) minmax(0, 1fr) 220px; }
  .maths-layout .docs-toc { grid-column: 3; grid-row: 1; }
}
@media (max-width: 1280px) { .maths-layout .docs-toc { display: none; } }
/* With the margin contents hidden, its empty track went too, and the sidebar
   takes its full width so no problem's name wraps. */
@media (min-width: 1081px) and (max-width: 1280px) {
  body:has(.maths-layout) { --maths-nav-w: 258px; }
  .maths-layout { grid-template-columns: var(--maths-nav-w) minmax(0, 1fr); }
}
.maths-layout .docs-sidebar {
  top: var(--topbar-h);
  height: calc(100dvh - var(--topbar-h));
}

/* ---- Brand: one link to this overview ---------------------------------
   "Will Cook / Plectis" is a single link home. The rungs keep the shared
   ladder's type; hover lights the name the way the ladder's link did. */
a.brand-ladder--home { color: inherit; text-decoration: none; }
a.brand-ladder--home:hover { text-decoration: none; }
a.brand-ladder--home:hover .brand-ladder__up { color: var(--accent); border-bottom-color: var(--accent); }
a.brand-ladder--home:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 3px; }

/* ---- Maths sidebar refinements ---------------------------------------- */
.maths-nav-number {
  font-size: var(--fs-small);
  font-variant-numeric: tabular-nums;
  color: var(--faint);
}
.docs-nav a.is-active .maths-nav-number { color: inherit; }
/* Number and name in two columns: a long name wraps under itself. */
.docs-nav a.maths-nav-problem {
  display: grid;
  grid-template-columns: 2.4rem minmax(0, 1fr);
  column-gap: 0.45rem;
  align-items: baseline;
}

/* ---- Breadcrumb (docs grammar, restated for pages without docs.js) ------ */
.maths-layout .docs-breadcrumb { margin: var(--space-4) 0 var(--space-5); }
.maths-layout .docs-breadcrumb ol {
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  margin: 0;
  padding: 0;
  font-size: var(--fs-small);
  color: var(--faint);
}
.maths-layout .docs-breadcrumb li + li::before {
  content: "/";
  color: var(--faint);
  margin-right: 0.35rem;
}
.maths-layout .docs-breadcrumb a { color: var(--muted); }
.maths-layout .docs-breadcrumb a:hover { color: var(--accent); }
.maths-layout .docs-breadcrumb li[aria-current="page"] { color: var(--ink-soft); }

/* ---- Page bar: breadcrumb left, page tools right, one line -------------
   Copy text and Download JSON are utilities. They sit beside the breadcrumb
   as quiet text controls instead of a labelled row of bordered buttons. */
.maths-pagebar {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-2) var(--space-4);
  margin: var(--space-4) 0 var(--space-5);
}
.maths-layout .maths-pagebar .docs-breadcrumb { margin: 0; flex: 1 1 18rem; min-width: 0; }
.maths-layout .docs-main .docs-pagetools {
  margin: 0;
  max-width: none;
  gap: 2px;
  flex: none;
}
.maths-layout .docs-main .docs-pagetool {
  padding: 2px 8px;
  border-color: transparent;
  background: transparent;
  color: var(--faint);
  font-size: var(--fs-small);
}
.maths-layout .docs-main .docs-pagetool:hover {
  border-color: transparent;
  background: var(--surface-sunk);
  color: var(--accent-strong);
}
.maths-layout .docs-main .docs-pagetool.is-copied { color: var(--accent-strong); }

/* ---- Landing ----------------------------------------------------------- */
.maths-hero { padding: var(--space-7) 0 var(--space-6); }
.maths-hero__kicker {
  font-size: var(--fs-meta);
  color: var(--muted);
  font-weight: 600;
  margin: 0 0 var(--space-3);
}
.maths-hero h1 {
  font-family: var(--font-serif);
  font-size: clamp(2.4rem, 6vw, 3.6rem);
  line-height: 1.05;
  margin: 0 0 var(--space-4);
  letter-spacing: -0.015em;
}
.maths-hero__lede {
  font-size: var(--fs-lede);
  line-height: var(--lh-body);
  color: var(--ink-soft);
  max-width: var(--measure-note);
  margin: 0 0 var(--space-3);
}
/* The ways to work with the corpus, at the foot of the overview. */
.maths-starts {
  list-style: none;
  padding: 0;
  margin: 0 0 var(--space-5);
  max-width: var(--hero-measure, var(--measure-note));
  display: grid;
  gap: var(--space-3);
}
.maths-starts li {
  color: var(--ink-soft);
  line-height: var(--lh-body);
}
.maths-starts strong {
  color: var(--ink);
}
.maths-hero__boundary {
  color: var(--muted);
  max-width: var(--measure-note);
  margin: 0;
}
.maths-counts {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-5);
  margin: var(--space-5) 0 0;
  padding: 0;
  list-style: none;
}
.maths-counts li { color: var(--muted); font-size: var(--fs-meta); }
.maths-counts b {
  display: block;
  font-family: var(--font-serif);
  font-size: 1.55rem;
  font-weight: 600;
  color: var(--ink);
  font-variant-numeric: oldstyle-nums;
}

/* Section frame shared by the landing bands. */
.maths-band { margin: var(--space-8) 0; }
.maths-band__head { margin-bottom: var(--space-5); }
.maths-band__head .eyebrow { color: var(--home-ember); }
.maths-band__head h2 {
  font-family: var(--font-serif);
  font-size: clamp(1.5rem, 3vw, 2rem);
  margin: var(--space-2) 0 var(--space-2);
}
.maths-band__head p { color: var(--muted); max-width: var(--measure-note); margin: 0; }

.maths-route-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1px;
  margin-top: var(--space-5);
  background: var(--border);
  border: 1px solid var(--border);
}

.maths-route {
  min-width: 0;
  padding: var(--space-5);
  background: var(--surface);
}

.maths-route h3 { margin: var(--space-1) 0 var(--space-3); }
.maths-route__step {
  margin: 0;
  color: var(--muted);
  font-size: var(--fs-meta);
  font-weight: 600;
}
.maths-route__links { margin-bottom: 0; }

@media (max-width: 760px) {
  .maths-route-grid { grid-template-columns: 1fr; }
}

.universe-canvas {
  display: block;
  width: 100%;
  height: 460px;
  cursor: crosshair;
  touch-action: pan-y;
  background: var(--surface);
}

/* The overview hero: every block on one measure and one rhythm. The lede and
   the ways in lead, then one pair of actions (the map, the guide) with a
   line saying what the map holds. The note on who built the work and how to
   join it follows the problem list in a quieter voice under a hairline. */
.reading-index { --hero-measure: 42rem; }
.reading-index .maths-hero__lede,
.maths-hero__map,
.maths-hero__about { max-width: var(--hero-measure); }
/* The lede is set larger than the blocks beside it, so on their shared
   measure it ran to 88 characters; at 32em it keeps to about 75. */
.reading-index .maths-hero__lede { margin-bottom: var(--space-5); max-width: min(var(--hero-measure), 32em); }
.maths-hero__actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2) var(--space-3);
  margin: 0 0 var(--space-2);
}
.maths-hero__map { margin: 0 0 var(--space-6); color: var(--muted); }
.maths-hero__about {
  margin: var(--space-6) 0 var(--space-5);
  padding-top: var(--space-4);
  border-top: 1px solid var(--rule);
  color: var(--muted);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
}
.maths-hero__about p { margin: 0 0 var(--space-3); max-width: 62ch; }
.maths-hero__about p:last-child { margin-bottom: 0; }

/* Landing teaser: the same field, fixed portrait, one caption line. */
.universe-teaser {
  margin: var(--space-6) 0 var(--space-7);
  border: 1px solid var(--rule-strong);
  border-radius: var(--r-lg);
  background: var(--surface);
  overflow: hidden;
}
.universe-teaser__head {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  justify-content: space-between;
  gap: var(--space-3) var(--space-5);
  padding: var(--space-5) var(--space-5) var(--space-4);
  border-bottom: 1px solid var(--rule);
}
.universe-teaser__head h2 { margin: 0.2rem 0 0.4rem; font-size: 1.35rem; line-height: var(--lh-snug); }
.universe-teaser__head h2 a { color: var(--ink); text-decoration: none; }
.universe-teaser__head h2 a:hover { color: var(--accent); }
.universe-teaser__lede { margin: 0; max-width: 60ch; color: var(--muted); font-size: var(--fs-small); line-height: var(--lh-body); }
.universe-teaser__cta { flex: none; }
.universe-teaser__stage { position: relative; background: var(--surface); }
.universe-canvas--teaser { height: 380px; cursor: pointer; }
@media (max-width: 720px) { .universe-canvas--teaser { height: 300px; } }
/* Over the field the wheel zooms, as on a map, and beside it the page
   scrolls; on touch a swipe scrolls the page past the field and a pinch
   zooms it, so the canvas never traps the reader. */
.universe-canvas--page {
  /* The field fills the panel's height: on a laptop's first screen the
     whole map shows, and it grows with taller screens. */
  height: var(--universe-h, 600px);
  cursor: grab;
  touch-action: pan-y;
}
.universe-rings {
  list-style: none;
  margin: 0 0 var(--space-3);
  padding: 0;
  display: grid;
  gap: 0.35rem;
}
.universe-rings li {
  display: grid;
  grid-template-columns: 1rem 1fr;
  align-items: baseline;
  gap: 0.55rem;
  font-size: var(--fs-small);
  line-height: var(--lh-body);
  color: var(--ink-soft);
}
.universe-rings .dot {
  display: inline-block;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  justify-self: center;
  transform: translateY(0.5px);
}
/* The evidence chip carries its glyph's colour, faintly. */
.universe-chip--replayed { background: color-mix(in srgb, var(--u-integration) 14%, var(--surface)); }
.universe-chip--lean { background: color-mix(in srgb, var(--u-statement) 14%, var(--surface)); }
.universe-open__verb { white-space: nowrap; }
/* The leaving-the-site arrow rides on the verb, never on a line of its own. */
.universe-open[data-link-kind="exogenous"]::after { content: none; }
.universe-open[data-link-kind="exogenous"] .universe-open__verb::after {
  content: "\2197";
  margin-left: 0.2em;
  font-size: 0.8em;
  color: var(--link-ext);
}
.universe-step__btn { white-space: nowrap; }
/* Inside the map's rail, a link that leaves the site keeps its arrow but
   takes the ink colour: amber there would read as Comparator's orange. */
.universe-inspector a[data-link-kind="exogenous"],
.universe-preview a[data-link-kind="exogenous"] { color: var(--ink); text-decoration-color: var(--rule-strong); }
.universe-canvas--page.is-panning { cursor: grabbing; }
.universe-canvas.is-over { cursor: pointer; }

/* The landing teaser announces the hovered object in one quiet line pinned
   to the frame instead of a box over the pointer. */
.universe-caption {
  position: absolute;
  left: var(--space-4);
  right: var(--space-4);
  bottom: var(--space-3);
  font-size: var(--fs-small);
  color: var(--muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  pointer-events: none;
  visibility: hidden;
}
.universe-caption.is-shown { visibility: visible; }

.dot--problem {
  background: radial-gradient(circle, var(--u-problem) 0 24%, transparent 27%);
  box-shadow: inset 0 0 0 1.5px var(--u-problem);
}
.dot--claim { background: var(--u-claim); }
/* A problem's two papers, short and long, each in its own colour. */
.dot--paper { background: linear-gradient(90deg, var(--u-paper-short) 50%, var(--u-paper-long) 50%); }
.dot--document { background: var(--u-document); }
.dot--integration { background: var(--u-integration); }
.dot--module { background: var(--u-module); }
.dot--object { background: var(--u-object); }
.dot--statement { background: linear-gradient(90deg, var(--u-integration) 50%, var(--u-statement) 50%); }
.dot--universe { background: var(--u-universe); }

/* Claim glyphs: the record's status as a mark. The same four shapes are
   drawn on the canvas, in the legend, on the status filters and on cards. */
.glyph {
  display: inline-block;
  width: 10px;
  height: 10px;
  box-sizing: border-box;
  border-radius: 50%;
  border: 1.6px solid var(--u-claim);
  margin-right: 0.4em;
  vertical-align: baseline;
  transform: translateY(1px);
}
.glyph--proved { background: var(--u-claim); }
.glyph--progress { background: linear-gradient(90deg, var(--u-claim) 50%, transparent 50%); }
.glyph--conditional { background: transparent; }
.glyph--open { background: transparent; border-width: 1px; opacity: 0.7; }
/* Paper-result glyphs: the coverage ledger's evidence as a mark. Comparator's
   colour fills a statement it replayed; the Lean colour fills an exact Lean
   statement awaiting replay and rings one stated modulo named inputs. */
.glyph--replayed { background: var(--u-integration); border-color: var(--u-integration); }
.glyph--lean {
  /* The queued pip, as on the map: colour is never the only signal. */
  background: radial-gradient(circle, var(--surface) 0 30%, var(--u-statement) 35%);
  border-color: var(--u-statement);
}
.glyph--modulo { background: transparent; border-color: var(--u-statement); }
.glyph--none { background: transparent; border-color: var(--faint); border-width: 1px; }
.glyph--ordinary_proof { border-radius: 0; background: transparent; border-color: var(--ink-soft); rotate: 45deg; scale: 0.8; }
.universe-legend--glyphs { padding-left: var(--space-3); border-left: 1px solid var(--rule); }
.lens-btn--glyph .glyph { margin-right: 0.45em; }
.lens-btn[aria-pressed="true"] .glyph { border-color: var(--on-accent); }
.lens-btn[aria-pressed="true"] .glyph--proved { background: var(--on-accent); }
.lens-btn[aria-pressed="true"] .glyph--progress { background: linear-gradient(90deg, var(--on-accent) 50%, transparent 50%); }
.lens-btn[aria-pressed="true"] .glyph--replayed,
.lens-btn[aria-pressed="true"] .glyph--lean { background: var(--on-accent); }
.universe-chip .glyph { transform: translateY(0.5px); margin-right: 0.35em; }
.universe-inspector__census--status .glyph { flex: none; }
.universe-sector { color: var(--muted); }

/* Where a click goes: the result in its paper, the page here, the Lean line. */
.universe-inspector__open { display: flex; flex-direction: column; gap: 0.35rem; margin: 0 0 var(--space-3); }
.universe-open {
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
  padding: 0.45rem 0.7rem;
  border: 1px solid var(--rule-control);
  border-radius: var(--r-control);
  background: var(--surface);
  color: var(--ink-soft);
  text-decoration: none;
  font-size: var(--fs-small);
  line-height: var(--lh-snug);
  transition: border-color var(--motion-fast) var(--ease), color var(--motion-fast) var(--ease);
}
.universe-open:hover { border-color: var(--accent); color: var(--ink); }
.universe-open--primary { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 10%, var(--surface)); }
.universe-open__verb { font-weight: 600; }
.universe-open__where { color: var(--muted); font-size: var(--fs-micro); overflow-wrap: anywhere; }
.universe-open__where code { font-size: 0.95em; }
.universe-open__more { color: var(--faint); font-size: var(--fs-micro); padding: 0.1rem 0.2rem; }
/* A paper result's card. First the paper's own words: the environment it
   prints, set like the paper (serif, the statement in italic, display maths
   centred and scrolling sideways rather than spilling), on a quiet sunk
   ground with a rule down its side. When two papers state it, a tab for
   each. Then the ways out, as buttons. */
.universe-result__where { margin: -0.2rem 0 var(--space-2); color: var(--muted); font-size: var(--fs-small); line-height: var(--lh-snug); }
.universe-result__where b { color: var(--ink-soft); font-weight: 600; }
.universe-quote { margin: var(--space-2) 0 var(--space-3); }
.universe-quote__from { margin: 0 0 0.4rem; color: var(--muted); font-size: var(--fs-micro); line-height: var(--lh-snug); }
.universe-quote__tabs { display: flex; flex-wrap: wrap; gap: 0.3rem; margin: 0 0 0.45rem; }
.universe-quote__tab {
  font: inherit;
  font-size: var(--fs-micro);
  min-height: 26px;
  padding: 0.15rem 0.65rem;
  color: var(--muted);
  background: var(--surface);
  border: 1px solid var(--rule-control);
  border-radius: var(--r-pill);
  cursor: pointer;
  transition: border-color var(--motion-fast) var(--ease), color var(--motion-fast) var(--ease);
}
.universe-quote__tab:hover { color: var(--ink); border-color: var(--accent); }
.universe-quote__tab[aria-selected="true"] { color: var(--ink); border-color: var(--accent); background: color-mix(in srgb, var(--accent) 10%, var(--surface)); }
.universe-quote__tab:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.universe-quote__text {
  margin: 0;
  padding: 0.65rem 0.8rem 0.7rem;
  background: var(--surface-sunk);
  border-left: 2px solid var(--rule-strong);
  border-radius: 0 var(--r-sm) var(--r-sm) 0;
  font-family: var(--font-serif);
  font-size: 0.97rem;
  line-height: 1.55;
  color: var(--ink);
  overflow-wrap: break-word;
}
.universe-quote__text p { margin: 0 0 0.5em; }
.universe-quote__text p:last-child { margin-bottom: 0; }
.universe-quote__text .math-display { margin: 0.45em 0; overflow-x: auto; overflow-y: hidden; }
.universe-quote__text math { color: var(--ink); font-size: 1.04em; }
.universe-quote__text math[display="block"] { margin: 0.1em 0; }
.universe-quote__text a { color: inherit; text-decoration-color: var(--rule-strong); text-underline-offset: 0.16em; }
.universe-quote__text a:hover { color: var(--accent); }
.universe-quote__name { margin: 0 0 0.35em; font-style: normal; font-weight: 600; }
.universe-quote__wait { margin: 0; padding: 0.65rem 0.8rem; color: var(--faint); font-size: var(--fs-small); background: var(--surface-sunk); border-left: 2px solid var(--rule); }
.universe-quote__via,
.universe-quote__more { margin: 0.4rem 0 0; color: var(--faint); font-size: var(--fs-micro); line-height: var(--lh-snug); }
.universe-quote__go { display: flex; flex-wrap: wrap; gap: 0.35rem; margin: 0.55rem 0 0; }
.universe-go {
  display: inline-flex;
  align-items: center;
  min-height: 28px;
  padding: 0.18rem 0.75rem;
  font: inherit;
  font-size: var(--fs-micro);
  font-weight: 600;
  color: var(--ink-soft);
  background: var(--surface);
  border: 1px solid var(--rule-control);
  border-radius: var(--r-pill);
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  transition: border-color var(--motion-fast) var(--ease), color var(--motion-fast) var(--ease);
}
.universe-go:hover { border-color: var(--accent); color: var(--ink); }
.universe-go:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.universe-quote__go .universe-go--primary { color: var(--ink); border-color: var(--accent); background: color-mix(in srgb, var(--accent) 12%, var(--surface)); }
.universe-go--small { min-height: 24px; padding: 0.08rem 0.6rem; font-weight: 500; }
.universe-inspector a.universe-go[data-link-kind="exogenous"]::after { content: "\2009\2197"; color: var(--muted); }
.universe-sector__go {
  font: inherit;
  font-weight: 600;
  color: var(--u-problem);
  background: none;
  border: 0;
  padding: 0;
  cursor: pointer;
  text-decoration: underline;
  text-decoration-color: var(--rule-strong);
  text-underline-offset: 0.15em;
}
.universe-sector__go:hover { color: var(--accent); text-decoration-color: currentColor; }
.universe-inspector kbd {
  font: inherit;
  font-size: var(--fs-micro);
  padding: 0 0.35em;
  border: 1px solid var(--rule-control);
  border-radius: var(--r-sm);
  background: var(--surface);
}
.universe-rule {
  margin: var(--space-3) 0 0;
  color: var(--faint);
  font-size: var(--fs-small);
  max-width: 48rem;
}

/* No-JS and reduced capability: the canvas is an enhancement. */
html:not(.scripting) .universe-nojs { display: block; }
.universe-nojs { display: none; padding: var(--space-4); color: var(--muted); }

/* ---- Problem rows (landing) -------------------------------------------- */
.problem-list { list-style: none; margin: 0; padding: 0; }
.problem-row { border-top: 1px solid var(--rule); }
.problem-row:last-child { border-bottom: 1px solid var(--rule); }
.problem-row a {
  display: grid;
  grid-template-columns: 5.2rem 1fr auto;
  gap: var(--space-4);
  align-items: baseline;
  padding: var(--space-4) var(--space-2);
  color: inherit;
  text-decoration: none;
  transition: background var(--motion-fast) var(--ease);
}
.problem-row a:hover { background: var(--surface); text-decoration: none; }
.problem-row__num {
  font-family: var(--font-serif);
  font-variant-numeric: oldstyle-nums;
  font-size: 1.35rem;
  color: var(--home-ember);
}
.problem-row__title { font-weight: 600; }
.problem-row__q {
  display: block;
  font-weight: 400;
  color: var(--muted);
  font-size: var(--fs-body);
  margin-top: 0.2rem;
  max-width: 56ch;
}
.problem-row__meta {
  font-size: var(--fs-small);
  color: var(--faint);
  text-align: right;
  white-space: nowrap;
}
.problem-row__meta .chip { margin-left: var(--space-2); }

/* Status chips — text carries the meaning; colour assists. */
/* A status chip is a sentence-case label, like every label in the reading
   room (tracked capitals turned "locally proved result; novelty unassessed"
   into a line nobody reads). A result's status wears the ember and an open
   question the azure, the site's two inks; the class keeps its old name. */
.chip {
  display: inline-block;
  font-size: var(--fs-meta);
  letter-spacing: 0;
  text-transform: none;
  padding: 0.12rem 0.55rem;
  border: 1px solid var(--rule-control);
  border-radius: var(--r-pill);
  color: var(--muted);
  max-width: 100%;
}
.chip--open { border-color: var(--accent); color: var(--accent); }
.chip--gold { border-color: color-mix(in srgb, var(--home-ember) 70%, transparent); color: var(--home-ember); }
.chip--warn { border-color: var(--warn-warm, #a8481e); color: var(--warn-warm, #a8481e); }

/* ---- Shelves (papers, documents) ---------------------------------------- */
.shelf-group { margin: var(--space-5) 0 0; }
.shelf-group__label {
  font-size: var(--fs-meta);
  font-weight: 600;
  color: var(--muted);
  margin: 0 0 var(--space-2);
}
.shelf { list-style: none; margin: 0; padding: 0; }
.shelf li { border-top: 1px solid var(--rule); }
.shelf li:last-child { border-bottom: 1px solid var(--rule); }
.shelf__row {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: var(--space-4);
  align-items: baseline;
  padding: var(--space-3) var(--space-2);
}
.shelf__row > a {
  color: inherit;
  font-weight: 600;
  text-decoration: none;
}
.shelf__row > a:hover { color: var(--accent); }
.shelf__sub {
  display: block;
  font-weight: 400;
  color: var(--muted);
  font-size: var(--fs-body);
  margin-top: 0.15rem;
  max-width: 60ch;
}
.shelf__meta {
  font-size: var(--fs-small);
  color: var(--faint);
  white-space: nowrap;
  text-align: right;
}
.shelf__meta a { color: var(--faint); }
.shelf__meta a:hover { color: var(--accent); }

/* ---- Generation receipt strip ------------------------------------------- */
/* Provenance closes the page under a hairline, in caption type. */
.maths-receipt {
  margin: var(--space-8) 0 var(--space-6);
  padding: var(--space-4) 0 0;
  border-top: 1px solid var(--rule);
  font-size: var(--fs-meta);
  color: var(--muted);
}
.maths-receipt code { font-size: var(--fs-small); }
.maths-receipt p { margin: 0.35rem 0; max-width: 64ch; }
.maths-receipt--inline { max-width: 62ch; }

/* ---- Problem dossier pages ---------------------------------------------- */
.dossier-head { margin: 0 0 var(--space-6); }
.dossier-head__num {
  font-family: var(--font-serif);
  font-variant-numeric: oldstyle-nums;
  color: var(--home-ember);
  font-size: clamp(1.4rem, 3vw, 1.9rem);
  display: block;
  margin-bottom: var(--space-1);
}
.dossier-head h1 {
  font-family: var(--font-serif);
  font-size: clamp(1.9rem, 4.4vw, 2.7rem);
  line-height: 1.12;
  margin: 0 0 var(--space-3);
}
.dossier-head__q {
  font-size: var(--fs-lede);
  color: var(--ink-soft);
  max-width: var(--measure-note);
  margin: 0 0 var(--space-3);
}
.dossier-head__meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-3);
  align-items: center;
  color: var(--muted);
  font-size: var(--fs-meta);
}
.dossier-head__actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  margin-top: var(--space-4);
}
.dossier-head__actions .btn { font-size: var(--fs-meta); padding: 0.5rem 0.9rem; }
/* The plates open the page under its head (6 October 2026): each a computed
   figure of one strongest result, with the caption the landing gives it and
   the mathematician's reading under it. The drawing keeps the papers page's
   frontispiece scale; the reading keeps the page's measure. */
/* The problem itself first (10 October 2026): Erdős's wording on the ember
   rule, then what it says, an example and the crux beside its drawing, each
   a summary and its full explanation, all open. */
.problem-opening { margin: 0 0 var(--space-6); max-width: var(--measure-note); }
.problem-opening__title { margin: 0 0 var(--space-3); font-family: var(--font-serif); font-weight: 500; font-size: 1.5rem; }
.problem-opening__original {
  position: relative; margin: 0 0 var(--space-4); padding-left: 1.1rem;
  font-family: var(--font-serif); font-size: 1.14rem; line-height: 1.55; color: var(--ink);
}
.problem-opening__original::before {
  content: ""; position: absolute; left: 0; top: 0.2em; bottom: 0.2em; width: 2px;
  background: color-mix(in oklab, var(--home-ember, var(--accent)) 62%, transparent);
}
.problem-opening__original p { margin: 0; }
.problem-opening__original footer { margin-top: 0.4rem; font-family: var(--font-sans, inherit); font-size: var(--fs-meta); color: var(--muted); }
.problem-opening__part { margin: 0 0 var(--space-4); }
.problem-opening__label { margin: 0 0 0.35rem; font-family: var(--font-serif); font-style: italic; font-weight: 500; font-size: 1.12rem; color: var(--ink); }
.problem-opening__summary { margin: 0 0 0.75rem; font-size: 1.04rem; line-height: 1.6; color: var(--ink); text-wrap: pretty; }
.problem-opening__summary > p { margin: 0 0 0.75rem; }
.problem-opening__summary > p:last-child { margin-bottom: 0; }
.problem-opening__part > p:not(.problem-opening__summary) { margin: 0 0 0.75rem; line-height: 1.64; color: var(--ink-soft); text-wrap: pretty; }
.problem-opening__part > ol, .problem-opening__part > ul { margin: 0 0 0.8rem; padding-left: 1.3rem; color: var(--ink-soft); line-height: 1.6; }
.problem-opening__part li { margin: 0 0 0.4rem; }
.problem-opening__part > .math.display { margin: 0.2rem 0 0.85rem; }
.problem-opening__figure { margin: var(--space-3) 0 var(--space-3); }
.problem-opening__drawing { width: min(100%, 42rem); }
.problem-plates { margin: 0 0 var(--space-6); }
.problem-plate { margin: 0 0 var(--space-6); }
.problem-plate:last-child { margin-bottom: 0; }
/* The plates are 720 by 500 (7 October 2026): 42rem draws one at about
   0.93 of its size, so its labels read at body size. */
.problem-plate__drawing { width: min(100%, 42rem); }
.problem-plate__caption { max-width: var(--measure-note); margin-top: var(--space-3); }
.problem-plate__lead {
  margin: 0 0 var(--space-2);
  font-family: var(--font-serif); font-size: 1.02rem; line-height: 1.55;
  color: var(--ink-soft); text-wrap: pretty;
}
.problem-plate__reading { margin: 0; color: var(--ink-soft); line-height: 1.62; text-wrap: pretty; }
.problem-plate__reading > p { margin: 0; }
.problem-plate__reading > p + p { margin-top: 0.85em; }
.problem-plate__lead .home-result-plate__beat { display: block; }
.problem-plate__lead .home-result-plate__beat + .home-result-plate__beat { margin-top: 0.75em; }

.dossier-section { margin: var(--space-6) 0; }
.dossier-section > h2 {
  font-family: var(--font-serif);
  font-size: 1.45rem;
  margin: 0 0 var(--space-3);
}
.dossier-section > p.note { color: var(--muted); max-width: var(--measure-note); }

.fact-list { margin: 0; padding: 0; list-style: none; max-width: 72ch; }
.fact-list li {
  padding: var(--space-2) 0 var(--space-2) var(--space-5);
  position: relative;
  border-top: 1px solid var(--rule);
}
.fact-list li:last-child { border-bottom: 1px solid var(--rule); }
.fact-list li::before {
  content: "";
  position: absolute;
  left: 0.35rem;
  top: 1.05rem;
  width: 7px;
  height: 7px;
  border-radius: 50%;
}
.fact-list--checked li::before { background: var(--weave-red); }
.fact-list--unchecked li::before {
  background: transparent;
  border: 1.5px solid var(--rule-control);
}

.result-card {
  border: 1px solid var(--rule-strong);
  border-radius: var(--r-md);
  background: var(--surface);
  padding: var(--space-4) var(--space-5);
  margin: 0 0 var(--space-4);
}
.result-card__head {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-3);
  align-items: baseline;
  margin-bottom: var(--space-2);
}
.result-card__head code { font-size: var(--fs-small); color: var(--faint); }
.result-card__statement { margin: 0 0 var(--space-2); max-width: 72ch; }
.result-card__boundary {
  margin: 0 0 var(--space-3);
  color: var(--muted);
  font-size: var(--fs-body);
  max-width: 72ch;
}
.result-card__links {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-4);
  font-size: var(--fs-meta);
}

/* A source link is a route, set in the text face; the module names inside a
   table's links keep their own <code>. */
.source-link {
  font-family: var(--font-sans);
  font-size: var(--fs-small);
  color: var(--maths-gold);
  text-decoration: none;
  border-bottom: 1px solid color-mix(in srgb, var(--maths-gold) 45%, transparent);
  overflow-wrap: anywhere;
}
.source-link:hover { border-bottom-color: var(--maths-gold); text-decoration: none; }

.module-table { width: 100%; border-collapse: collapse; font-size: var(--fs-body); }
.module-table th {
  text-align: left;
  font-size: var(--fs-micro);
  letter-spacing: var(--tracking-label);
  text-transform: uppercase;
  color: var(--faint);
  font-weight: 600;
  padding: 0 var(--space-3) var(--space-2) 0;
  border-bottom: 1px solid var(--rule-strong);
}
.module-table td {
  padding: var(--space-2) var(--space-3) var(--space-2) 0;
  border-bottom: 1px solid var(--rule);
  vertical-align: baseline;
}
.module-table td.num { text-align: right; font-variant-numeric: tabular-nums; color: var(--muted); }
.module-table code { font-size: var(--fs-small); }
.table-scroll { overflow-x: auto; }

/* Comparator families grouped by disposition tier. */
.family-tier { margin: var(--space-4) 0; }
.family-tier > h3 {
  font-size: var(--fs-h3);
  margin: 0 0 var(--space-2);
}
.family-tier > p.note { color: var(--faint); font-size: var(--fs-meta); margin: 0 0 var(--space-2); }
.family-list { list-style: none; margin: 0; padding: 0; }
.family-list li {
  border-top: 1px solid var(--rule);
  padding: var(--space-3) var(--space-2);
}
.family-list li:last-child { border-bottom: 1px solid var(--rule); }
.family-list .summary-line { margin: 0 0 0.25rem; max-width: 72ch; }
.family-list .boundary-line {
  margin: 0;
  color: var(--muted);
  font-size: var(--fs-body);
  max-width: 72ch;
}
.family-list .disposition {
  font-family: var(--font-mono);
  font-size: var(--fs-micro);
  color: var(--faint);
}
.disposition { overflow-wrap: anywhere; }

/* ---- Paper reading stage ------------------------------------------------ */
.paper-head { margin: 0 0 var(--space-5); }
/* Which paper this is, in the sentence case of the rest of the page: the
   tracked capitals read as template chrome over a manuscript. */
.paper-head__eyebrow {
  font-size: var(--fs-meta);
  color: var(--muted);
  font-weight: 500;
  margin: 0 0 var(--space-2);
}
/* 24ch broke the long titles into four lines and split #1041's hyphenated
   "Degree-Seven" across two; 32ch with balancing sets them in three. */
.paper-head h1 {
  font-family: var(--font-serif);
  font-size: clamp(1.9rem, 4.2vw, 2.7rem);
  line-height: 1.12;
  margin: 0 0 var(--space-3);
  letter-spacing: -0.012em;
  text-wrap: balance;
  max-width: 32ch;
}
/* Problem, author and date are spaced apart rather than strung on dots. */
.paper-head__meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1) 1.4em;
  align-items: baseline;
  color: var(--muted);
  font-size: var(--fs-meta);
  margin-bottom: var(--space-4);
}
/* One control, one size: the PDF leads as the filled button and every other
   route follows as a ghost button of the same height. A route that leaves
   the site keeps the shared outbound mark and takes the button's ink. */
.paper-head__routes,
.paper-choice__links {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
}
.paper-head__routes .btn,
.paper-choice__links .btn {
  font-size: var(--fs-meta);
  padding: 0.5rem 0.9rem;
}

/* The précis opens on a hairline with a run-in head, the way a journal sets
   an abstract; a coloured side bar and a capitals label made it a callout. */
.paper-precis {
  border-top: 1px solid var(--rule);
  padding: var(--space-4) 0 0;
  margin: var(--space-6) 0 var(--space-5);
  max-width: var(--paper-measure, 34.5rem);
}
.paper-precis p {
  margin: 0;
  color: var(--ink-soft);
  font-family: var(--font-serif);
  font-size: calc(var(--paper-font, 1.125rem) * 0.98);
  line-height: 1.6;
  text-wrap: pretty;
}
.paper-precis__head { font-weight: 600; color: var(--ink); }

.authority-card {
  border: 1px solid var(--rule);
  border-radius: var(--r-sm);
  background: var(--surface-sunk);
  padding: var(--space-3) var(--space-4);
  margin: 0 0 var(--space-6);
  font-size: var(--fs-body);
  max-width: 78ch;
}
.authority-card p { margin: 0.3rem 0; }
.authority-card b { font-weight: 600; }

/* What the paper is and is not authority for stays with the précis (6 October
   2026): it governs how every result below is read, so it is in reading type,
   not caption type. Authorship, AI use and the citation note moved to the
   foot ("About this paper"), named by a link in the byline. */
.paper-precis .paper-scope {
  border: 0;
  border-radius: 0;
  background: none;
  padding: 0;
  margin: var(--space-3) 0 0;
  max-width: none;
}
.paper-precis .paper-scope p {
  margin: 0;
  font-family: var(--font-sans);
  font-size: var(--fs-body);
  line-height: 1.6;
  color: var(--muted);
  max-width: 66ch;
}
.paper-precis .paper-scope p + p { margin-top: var(--space-1); }
.paper-precis .paper-scope b { font-weight: 600; color: var(--ink-soft); }

/* The rendered manuscript. Pandoc emits section.levelN wrappers.
   Set like a journal page: a serif measure of about 68 characters, an
   18px face with generous leading, paragraphs separated by a little under
   one line, and mathematics that sits in the same ink as the prose. The
   base sheet zeroes every <p> margin for its card layouts; the manuscript
   restores a reading rhythm here. */
.paper-stage {
  max-width: var(--paper-measure, 34.5rem);
  font-family: var(--font-serif);
  font-size: var(--paper-font, 1.125rem);
  line-height: 1.66;
  color: var(--ink);
  text-rendering: optimizeLegibility;
  font-kerning: normal;
  font-variant-ligatures: common-ligatures;
  /* Lining figures: MathJax sets the formulas' numbers in lining STIX Two
     Math, so a number in the prose matches the same number in a formula. */
  font-variant-numeric: lining-nums proportional-nums;
  hanging-punctuation: first;
}
.paper-stage p {
  margin: 0 0 0.95em;
  text-wrap: pretty;
}
.paper-stage p:last-child { margin-bottom: 0; }
.paper-stage ul, .paper-stage ol {
  margin: 0.2em 0 1em;
  padding-left: 1.6em;
}
.paper-stage li { margin: 0.3em 0; }
.paper-stage li > p { margin-bottom: 0.45em; }
.paper-stage li::marker { color: var(--muted); font-variant-numeric: lining-nums; }
.paper-stage em { font-style: italic; }
.paper-stage strong { font-weight: 650; }
.paper-stage sup, .paper-stage sub { line-height: 0; }
.paper-stage :not(pre) > code {
  font-size: .82em;
  background: transparent;
  padding: 0;
  border-radius: 0;
}
.paper-stage .lean-identifier {
  display: inline-flex;
  align-items: baseline;
  max-width: min(28ch, 100%);
  min-height: 24px;
  padding: 2px 0;
  border: 0;
  border-bottom: 1px dotted var(--muted);
  border-radius: 0;
  background: transparent;
  color: var(--muted);
  font: .8em var(--font-mono);
  line-height: 1.25;
  vertical-align: baseline;
  cursor: pointer;
}
.paper-stage .lean-identifier code {
  display: block;
  min-width: 0;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  font: inherit;
  color: inherit;
}
.lean-identifier::after { content: "▾"; margin-left: .35em; font-size: .8em; }
.paper-stage .lean-identifier:hover { color: var(--accent); }
.lean-identifier:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
.lean-identifier-detail {
  position: fixed;
  inset: auto;
  margin: 0;
  width: min(34rem, calc(100vw - 32px));
  padding: 1rem;
  border: 1px solid var(--rule);
  border-radius: 8px;
  background: var(--surface);
  color: var(--ink);
  box-shadow: var(--shadow);
  font-family: var(--font-sans);
}
.lean-identifier-detail__title { margin: 0 0 .7rem; color: var(--muted); font-size: .75rem; }
.lean-identifier-detail code {
  display: block;
  padding: 0;
  background: none;
  white-space: normal;
  overflow-wrap: anywhere;
  font: .85rem/1.6 var(--font-mono);
}
.lean-identifier-detail__actions { display: flex; justify-content: space-between; align-items: center; gap: 1rem; margin-top: .9rem; }
.lean-identifier-detail button { font: .8rem var(--font-sans); cursor: pointer; }
.lean-identifier-detail__status { color: var(--muted); font-size: .8rem; }
@media print {
  .paper-stage .lean-identifier { display: inline; max-width: none; padding: 0; border: 0; }
  .paper-stage .lean-identifier code { display: inline; white-space: normal; overflow-wrap: anywhere; }
  .lean-identifier::after, .lean-identifier-detail { display: none; }
}
.lean-paper__header, .lean-document__header { display: none; }
/* The fragment repeats title and eyebrow we already set in the page head. */
.paper-stage h2, .paper-stage h3, .paper-stage h4, .paper-stage h5, .paper-stage h6 {
  font-family: var(--font-serif);
  line-height: 1.22;
  color: var(--ink);
  text-wrap: balance;
  font-variant-numeric: lining-nums;
  scroll-margin-top: calc(var(--topbar-h) + 16px);
}
/* A section opening reads as a new movement: a hairline, air above, a
   little below; a subsection sits closer to the prose it introduces. */
.paper-stage h2 {
  font-size: 1.6rem;
  font-weight: 600;
  letter-spacing: -0.012em;
  margin: 2.6em 0 0.7em;
  padding-top: 1.1em;
  border-top: 1px solid var(--rule);
}
.paper-stage section.level2:first-child > h2:first-child,
.paper-stage .lean-paper__body > section:first-of-type > h2:first-child,
.paper-stage .lean-document__body > section:first-of-type > h2:first-child {
  margin-top: 0.4em;
  padding-top: 0;
  border-top: 0;
}
.paper-stage h3 {
  font-size: 1.22rem;
  font-weight: 600;
  margin: 1.9em 0 0.5em;
}
.paper-stage h4, .paper-stage h5, .paper-stage h6,
.paper-stage .paper-minor-head {
  font-size: 1.05rem;
  font-weight: 600;
  font-style: italic;
  margin: 1.5em 0 0.4em;
}
/* A \paragraph head the build moved up a level (so the outline never skips
   one) keeps the run-in look it had as h5, even where it is now an h3. */
.paper-stage h2 + .paper-minor-head { margin-top: 0.6em; }
.paper-stage h2 + h3, .paper-stage h3 + h4 { margin-top: 0.6em; }
.paper-stage h2 + p, .paper-stage h3 + p, .paper-stage h4 + p { text-indent: 0; }
.paper-stage math { font-size: 1.05em; overflow-wrap: normal; word-break: normal; }
/*
  Never override <math> `display` with CSS `block` / `inline-block`. Chromium
  only runs the MathML formatter for the math display types; `inline-block`
  flattens fractions and scripts into wrapping prose. Overflow scrolling stays
  on the element without changing its display type.
*/
.paper-stage math[display="block"] {
  overflow-x: auto;
  overflow-y: hidden;
  padding: var(--space-2) 0;
  max-width: 100%;
}
/*
  Display math should read like the PDF: a centred band of its own, not a
  left-aligned strip inside the paragraph that interrupted it. The dossier
  ``.math { white-space: nowrap }`` rule is for problem-card notation, not
  Pandoc/MathJax spans.
*/
.paper-stage span.math {
  font-family: inherit;
  font-feature-settings: normal;
}
.paper-stage span.math.inline { white-space: normal; }
.paper-stage .math.inline[data-math-compact],
.paper-stage .math.inline[data-math-compact] mjx-math,
.paper-stage .math.inline[data-math-compact] mjx-break { white-space: nowrap; }
.paper-stage span.math.display,
.paper-stage .math-display {
  display: block;
  text-align: center;
  white-space: normal;
  overflow-x: auto;
  overflow-y: hidden;
  margin: 1.1em 0 1.15em;
  padding: 0;
  max-width: 100%;
}
/*
  Lifted displays wrap a MathJax span that also carries display margins.
  Paying both stacked the formula so far under the last wrapped words
  ("Archimedean height condition") that the leftover read as a heading.
*/
.paper-stage .math-display span.math.display,
.paper-stage .math-display mjx-container[display="true"] {
  margin: 0;
}
.paper-stage .math-display { overflow: visible; }
.paper-stage span.math.display { scrollbar-width: thin; padding-block: .35em; overscroll-behavior-x: contain; }
.paper-stage .math.display mjx-container[display="true"] { margin: 0; }
/*
  The bleed: the width between the prose's right edge and the end of the
  main column (.wrap inside .docs-main, the size container). A display the
  prose measure cannot hold is marked data-math-wide by maths.js and runs on
  into the bleed, start-aligned at the prose's left edge the way TeX sets an
  overfull display; a display that fits stays centred on the prose. A wide
  inline formula promoted to its own line and a wide table take the same
  room. Only an expression wider than the whole column scrolls. Phones have
  no bleed: the prose already fills the screen.
*/
.maths-layout .paper-stage {
  --paper-bleed: max(0px, min(var(--max, 1080px), 100cqi - var(--gutter, 24px) * 2) - var(--paper-measure));
}
@media (max-width: 768px) { .maths-layout .paper-stage { --paper-bleed: 0px; } }
.paper-stage span.math.display[data-math-wide],
.paper-stage .math-inline-flow[data-math-overflow] {
  margin-right: calc(-1 * var(--paper-bleed, 0px));
  max-width: calc(100% + var(--paper-bleed, 0px));
}
.paper-stage span.math.display[data-math-wide],
.paper-stage span.math.display[data-math-wide] mjx-container[display="true"] { text-align: left; }
/* Every block under a heading lays out lazily (content-visibility, below),
   and that contains its paint: a formula reaching into the bleed was cut off
   at the block's edge without a scroll bar. The block that holds one reaches
   into the bleed too and hands the width back as padding, so its prose keeps
   the measure. */
.paper-stage section > :has(span.math.display[data-math-wide], .math-inline-flow[data-math-overflow]) {
  margin-right: calc(-1 * var(--paper-bleed, 0px));
  padding-right: var(--paper-bleed, 0px);
  max-width: calc(100% + var(--paper-bleed, 0px));
}
/* A formula that still scrolls says so with a quiet bar in the rule ink. */
.paper-stage span.math.display,
.paper-stage .math-inline-flow[data-math-overflow],
.paper-stage table {
  scrollbar-color: color-mix(in srgb, var(--muted) 45%, transparent) transparent;
}
/* Equation numbers sit in the margin ink, lining figures, never bold. */
.paper-stage mjx-labels { color: var(--muted); font-variant-numeric: lining-nums; }
.paper-stage a.math-ref { font-variant-numeric: lining-nums; }
.paper-stage p:has(+ .math-display) {
  margin-bottom: 0.15em;
}
.paper-stage .math-display + p.display-continue {
  margin-top: 0.15em;
}
/* Equations arrive as static HTML with assistive MathML. Never hide source
   text behind a loading timer: a failed asset must not erase mathematics. */
.paper-stage .math[data-math-rendered] { color: inherit; }
.paper-stage .math.display { position: relative; }
.paper-stage .math.display:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
}
.reader-contents { display: none; margin: 1.5rem 0; border-block: 1px solid var(--rule); }
.reader-contents--inline { display: block; }
.reader-contents summary { padding: .8rem 0; cursor: pointer; font-weight: 600; }
.reader-contents nav { display: grid; gap: .65rem; max-height: 45vh; overflow-y: auto; padding: .5rem 0 1.1rem; }
.reader-contents a { color: var(--ink); font-size: .9rem; line-height: 1.45; }
.reader-contents .toc-l3 { padding-left: 1rem; color: var(--muted); }
.source-empty { padding: 1rem; color: var(--muted); }
.source-empty button { font: inherit; color: var(--accent); border: 0; background: none; text-decoration: underline; cursor: pointer; }
@media (max-width: 1280px) { .reader-contents { display: block; } }
@media print { .reader-contents { display: none; } }
.paper-stage a.math-ref {
  color: var(--accent);
  text-decoration: none;
}
.paper-stage a.math-ref:hover { text-decoration: underline; }
.paper-stage a[href*="github.com"],
.paper-stage a[data-github],
.paper-stage a[href^="#lean-module"] {
  color: inherit;
  text-decoration: underline dotted;
  text-decoration-color: color-mix(in srgb, var(--muted) 75%, transparent);
  text-underline-offset: 0.18em;
}
.paper-stage a[href*="github.com"]:hover,
.paper-stage a[data-github]:hover,
.paper-stage a[href^="#lean-module"]:hover {
  color: var(--accent);
  text-decoration-color: var(--accent);
}
/*
  amsthm environments. Results (theorem, lemma, proposition, corollary) and
  problem statements keep one hairline beside them so the eye can find them
  on a long page; definitions, examples and remarks are carried by their
  run-in heads and spacing alone. Both the long Pandoc class names and the
  short manuscript aliases (thm, lem, prop, cor, defn, rem, obs) are covered
  so every paper and reasoning surface reads the same way.
*/
.paper-stage .theorem, .paper-stage .thm,
.paper-stage .lemma, .paper-stage .lem,
.paper-stage .proposition, .paper-stage .prop,
.paper-stage .corollary, .paper-stage .cor,
.paper-stage .equivform,
.paper-stage .definition, .paper-stage .defn,
.paper-stage .example,
.paper-stage .problem,
.paper-stage .remark, .paper-stage .rem,
.paper-stage .obs {
  margin: 1.35em 0;
  padding: 0;
  scroll-margin-top: calc(var(--topbar-h) + 16px);
}
/* Statements are set as a journal sets them: the bold run-in head carries
   the environment, and a theorem or a problem keeps one hairline beside it
   so the eye can find the statements on a long page. The gold side tab and
   tinted panel this replaces read as callout chrome (critique, 3 Oct 2026). */
.paper-stage .theorem, .paper-stage .thm,
.paper-stage .lemma, .paper-stage .lem,
.paper-stage .proposition, .paper-stage .prop,
.paper-stage .corollary, .paper-stage .cor,
.paper-stage .equivform,
.paper-stage .problem {
  padding: 0.1em 0 0.15em 1.1em;
  border-left: 1px solid var(--rule-strong);
}
.paper-stage .theorem p, .paper-stage .thm p,
.paper-stage .lemma p, .paper-stage .lem p,
.paper-stage .proposition p, .paper-stage .prop p,
.paper-stage .corollary p, .paper-stage .cor p,
.paper-stage .equivform p,
.paper-stage .definition p, .paper-stage .defn p,
.paper-stage .example p,
.paper-stage .problem p,
.paper-stage .remark p, .paper-stage .rem p,
.paper-stage .obs p {
  margin: 0;
}
.paper-stage .theorem p + p, .paper-stage .thm p + p,
.paper-stage .lemma p + p, .paper-stage .lem p + p,
.paper-stage .proposition p + p, .paper-stage .prop p + p,
.paper-stage .corollary p + p, .paper-stage .cor p + p,
.paper-stage .equivform p + p,
.paper-stage .definition p + p, .paper-stage .defn p + p,
.paper-stage .example p + p,
.paper-stage .problem p + p,
.paper-stage .remark p + p, .paper-stage .rem p + p,
.paper-stage .obs p + p {
  margin-top: 0.6em;
}
/* "Theorem 1 (name)." is the running head of the statement. */
.paper-stage .theorem > p:first-child > strong:first-child,
.paper-stage .thm > p:first-child > strong:first-child,
.paper-stage .lemma > p:first-child > strong:first-child,
.paper-stage .lem > p:first-child > strong:first-child,
.paper-stage .proposition > p:first-child > strong:first-child,
.paper-stage .prop > p:first-child > strong:first-child,
.paper-stage .corollary > p:first-child > strong:first-child,
.paper-stage .cor > p:first-child > strong:first-child,
.paper-stage .equivform > p:first-child > strong:first-child,
.paper-stage .definition > p:first-child > strong:first-child,
.paper-stage .defn > p:first-child > strong:first-child,
.paper-stage .example > p:first-child > strong:first-child,
.paper-stage .problem > p:first-child > strong:first-child,
.paper-stage .remark > p:first-child > strong:first-child,
.paper-stage .rem > p:first-child > strong:first-child,
.paper-stage .obs > p:first-child > strong:first-child {
  font-weight: 700;
  font-variant-numeric: lining-nums;
  letter-spacing: 0.005em;
}
/*
  Pandoc wraps amsthm bodies in <em>. On paper that italic is the statement
  cue; on this page it turns a long theorem into an italic wall around MathJax.
  Keep the cue on the "Theorem N" lead-in and read the body in roman.
*/
.paper-stage .theorem em, .paper-stage .thm em,
.paper-stage .lemma em, .paper-stage .lem em,
.paper-stage .proposition em, .paper-stage .prop em,
.paper-stage .corollary em, .paper-stage .cor em,
.paper-stage .equivform em,
.paper-stage .definition em, .paper-stage .defn em,
.paper-stage .example em,
.paper-stage .problem em,
.paper-stage .remark em, .paper-stage .rem em,
.paper-stage .obs em {
  font-style: normal;
}
/* Proofs: an italic "Proof." lead, a little indent so the argument reads as
   subordinate to its statement, and the closing box the source already
   carries. */
.paper-stage .proof {
  margin: 0.4em 0 1.4em;
  padding-left: 1.05em;
}
.paper-stage .proof > p:first-child > em:first-child { font-style: italic; }
.paper-stage .proof p:last-child { margin-bottom: 0; }
/* Tables in the booktabs manner: a heavy rule above and below, a light rule
   under the header, and no vertical rules. The block wrapper scrolls a wide
   table inside its own box; max-content keeps the rules the width of the
   table rather than the column. */
.paper-stage table {
  border-collapse: collapse;
  margin: 1.2em 0 1.4em;
  display: block;
  width: max-content;
  max-width: calc(100% + var(--paper-bleed, 0px));
  overflow-x: auto;
  font-size: 0.94em;
  line-height: 1.45;
  border-top: 1.5px solid var(--rule-strong);
  border-bottom: 1.5px solid var(--rule-strong);
  font-variant-numeric: lining-nums tabular-nums;
}
.paper-stage table th, .paper-stage table td {
  padding: 0.42em 1em 0.42em 0;
  text-align: left;
  vertical-align: baseline;
  border: 0;
}
.paper-stage table th:last-child, .paper-stage table td:last-child { padding-right: 0.2em; }
.paper-stage table thead th { border-bottom: 1px solid var(--rule-strong); font-weight: 600; }
.paper-stage table tbody tr + tr td { border-top: 1px solid var(--rule); }
.paper-stage table caption {
  caption-side: bottom;
  text-align: left;
  padding: 0.5em 0 0;
  color: var(--muted);
  font-size: 0.92em;
}
.paper-stage .center { text-align: center; }
.paper-stage .center table { margin-inline: auto; }
.paper-stage pre {
  background: var(--code-bg);
  color: var(--code-ink);
  border-radius: var(--r-sm);
  padding: var(--space-3) var(--space-4);
  overflow-x: auto;
  font-size: var(--fs-small);
  line-height: 1.55;
}
.paper-stage blockquote {
  border-left: 3px solid var(--rule-strong);
  margin: var(--space-4) 0;
  padding-left: var(--space-4);
  color: var(--muted);
}
.paper-stage .footnotes {
  color: var(--muted);
  font-size: 0.9em;
  margin-top: 2.5em;
  padding-top: 1em;
  border-top: 1px solid var(--rule);
}
.paper-stage .footnotes hr { display: none; }
.paper-stage hr { border: 0; border-top: 1px solid var(--rule); margin: var(--space-6) 0; }
/* Wide display equations should scroll inside their own box, never the page. */
.paper-stage { overflow-wrap: break-word; }

/* Citations and the rendered References section. */
.paper-stage .citation a {
  font-size: 0.85em;
  vertical-align: 0.08em;
  text-decoration: none;
  color: var(--accent);
}
.paper-stage .citation a:hover { text-decoration: underline; }
/* Bibliography: bracketed numbers in a hanging indent, one size down. */
.paper-stage #references ol {
  list-style: none;
  padding: 0;
  margin: 0.4em 0 0;
  counter-reset: plectis-ref;
}
.paper-stage #references li {
  counter-increment: plectis-ref;
  display: grid;
  grid-template-columns: 2.6em minmax(0, 1fr);
  column-gap: 0.4em;
  margin: 0 0 0.7em;
  color: var(--ink-soft);
  font-size: 0.92em;
  line-height: 1.55;
  scroll-margin-top: calc(var(--topbar-h) + 16px);
}
.paper-stage #references li::before {
  content: "[" counter(plectis-ref) "]";
  color: var(--muted);
  font-variant-numeric: lining-nums tabular-nums;
}
.paper-stage #references li:target { background: color-mix(in srgb, var(--home-ember) 10%, transparent); }
.paper-stage #references li > p { margin: 0; }
.paper-stage #references li > p + p { margin-top: 0.3em; }

/* Inline MathJax must stay in the line; overflow:auto on it creates a box
   that sits on a false baseline and looks like a stray indent. */
.paper-stage mjx-container { max-width: 100%; }
.paper-stage mjx-container[display="true"] {
  display: block;
  text-align: center;
  margin: 1.1em 0;
  overflow: visible;
  font-size: 1.04em;
}
.paper-stage mjx-container[display="true"] mjx-math {
  display: inline-block;
  text-align: left;
}

/* ---- Document pages ------------------------------------------------------ */
.doc-role-eyebrow {
  font-size: var(--fs-meta);
  color: var(--muted);
  font-weight: 500;
  margin: 0 0 var(--space-2);
}
.doc-source-line {
  color: var(--muted);
  font-size: var(--fs-meta);
  margin: 0 0 var(--space-4);
}
.doc-source-line code { font-size: var(--fs-small); }

/* ---- Universe page ------------------------------------------------------- */
/* Publication location and verification are independent filters. Neutral
   controls preserve the map's evidence colours; text also carries each axis. */
.universe-filters { display: grid; gap: 0.65rem; }
.universe-filter__label { display: block; color: var(--ink-soft); font-size: var(--fs-small); margin-bottom: 0.25rem; }
.universe-scope__choices { display: flex; border: 1px solid var(--rule-control); border-radius: var(--r-control); overflow: hidden; }
.universe-scope__choices button {
  flex: 1; min-height: 32px; padding: 0.3rem 0.25rem; border: 0; border-radius: 0;
  font: inherit; font-size: var(--fs-small); cursor: pointer; color: var(--muted); background: transparent;
}
.universe-scope__choices button + button { border-left: 1px solid var(--rule); }
.universe-scope__choices button[aria-pressed="true"] { color: var(--ink); background: var(--surface-raised, var(--surface)); box-shadow: inset 0 -2px var(--ink-soft); }
.universe-scope__choices button:focus-visible { outline: 2px solid var(--accent); outline-offset: -3px; }
.universe-overlap { display: flex; align-items: center; gap: 0.4rem; color: var(--ink-soft); font-size: var(--fs-small); margin-top: 0.4rem; cursor: pointer; }
.universe-overlap input { accent-color: var(--ink-soft); margin: 0; }
.universe-filter__help { margin: 0.25rem 0 0; font-size: var(--fs-micro); line-height: 1.4; color: var(--muted); }
.universe-checking select { width: 100%; min-height: 34px; font: inherit; font-size: var(--fs-small); color: var(--ink-soft); background: var(--surface); border: 1px solid var(--rule-control); border-radius: var(--r-control); padding: 0.3rem 0.4rem; }
.universe-checking select:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.universe-proof-key { display: flex; flex-wrap: wrap; gap: 0.3rem 0.8rem; font-size: var(--fs-micro); color: var(--ink-soft); }
.universe-proof-key > span { display: inline-flex; align-items: center; gap: 0.4rem; }
.universe-paper-coverage { display: flex; gap: 0.5rem; margin: 0.4rem 0 0.75rem; color: var(--ink-soft); font-size: var(--fs-small); }
.universe-paper-coverage span { flex: 1; border-top: 1px solid var(--rule); padding-top: 0.35rem; }
.universe-paper-coverage b { display: block; font-family: var(--font-serif); font-size: 1.25rem; font-weight: 400; }

.universe-find { position: relative; }
.universe-find .universe-search { width: 100%; min-width: 0; }
/* The first matches open under the field; the map lights the rest. */
.universe-results {
  position: absolute;
  z-index: 20;
  top: calc(100% + 4px);
  left: 0;
  right: 0;
  margin: 0;
  padding: 0.25rem;
  list-style: none;
  background: var(--surface);
  border: 1px solid var(--rule-strong);
  border-radius: var(--r-md);
  box-shadow: 0 12px 32px rgba(10, 8, 16, 0.22);
  max-height: min(60vh, 26rem);
  overflow-y: auto;
}
.universe-results[hidden] { display: none; }
.universe-result {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: baseline;
  gap: 0.15rem 0.5rem;
  padding: 0.4rem 0.55rem;
  border-radius: var(--r-sm);
  cursor: pointer;
  font-size: var(--fs-small);
  color: var(--ink-soft);
}
.universe-result .dot { width: 9px; height: 9px; border-radius: 50%; display: inline-block; }
.universe-result .glyph { margin: 0; transform: none; }
.universe-result:hover,
.universe-result.is-active { background: color-mix(in srgb, var(--accent) 12%, var(--surface)); color: var(--ink); }
.universe-result__label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.universe-result__where { color: var(--muted); font-size: var(--fs-micro); white-space: nowrap; }
.universe-result--more { display: block; cursor: default; color: var(--muted); font-size: var(--fs-micro); }
.universe-result--more:hover { background: none; color: var(--muted); }
/* Evidence gauges in the rail: the same four classes, in proportion. */
.universe-gauge {
  display: flex;
  height: 6px;
  min-width: 3rem;
  border-radius: 3px;
  overflow: hidden;
  background: var(--rule);
}
.universe-gauge__seg { display: block; min-width: 2px; }
.universe-gauge__seg + .universe-gauge__seg { margin-left: 1px; }
.universe-gauge__seg--replayed { background: var(--u-integration); }
.universe-gauge__seg--lean { background: var(--u-statement); }
.universe-gauge__seg--modulo { background: color-mix(in srgb, var(--u-statement) 45%, transparent); }
.universe-gauge__seg--none { background: color-mix(in srgb, var(--faint) 45%, transparent); }
/* The static page draws the strip as SVG (no inline styles); same colours as fills. */
svg.universe-gauge { display: block; width: 100%; }
rect.universe-gauge__seg--replayed { fill: var(--u-integration); }
rect.universe-gauge__seg--lean { fill: var(--u-statement); }
rect.universe-gauge__seg--modulo { fill: color-mix(in srgb, var(--u-statement) 45%, transparent); }
rect.universe-gauge__seg--none { fill: color-mix(in srgb, var(--faint) 45%, transparent); }
.universe-overview__gauge { margin: 0 0 var(--space-2); }
.universe-overview__gauge .universe-gauge { height: 9px; border-radius: 4px; }
.universe-problems { list-style: none; margin: 0 0 var(--space-3); padding: 0; }
.universe-problem {
  font: inherit;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  grid-template-areas: "name count" "gauge gauge";
  gap: 0.3rem 0.6rem;
  width: 100%;
  padding: 0.45rem 0.4rem;
  text-align: left;
  color: var(--ink-soft);
  background: none;
  border: 0;
  border-top: 1px solid var(--rule);
  border-radius: 0;
  cursor: pointer;
  transition: color var(--motion-fast) var(--ease), background var(--motion-fast) var(--ease);
}
.universe-problems li:first-child .universe-problem { border-top: 0; }
.universe-problem:hover { color: var(--ink); background: color-mix(in srgb, var(--accent) 7%, transparent); }
.universe-problem:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.universe-problem__name { grid-area: name; font-size: var(--fs-small); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.universe-problem__count { grid-area: count; font-size: var(--fs-micro); color: var(--muted); font-variant-numeric: tabular-nums; }
.universe-problem .universe-gauge { grid-area: gauge; height: 4px; }
/* Stepping through a paper's results from its card. */
.universe-step {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-2);
  margin: 0 0 var(--space-3);
  padding: 0.3rem;
  border: 1px solid var(--rule);
  border-radius: var(--r-control);
  background: var(--surface-sunk);
}
.universe-step__btn {
  font: inherit;
  font-size: var(--fs-small);
  min-height: 30px;
  padding: 0.2rem 0.65rem;
  color: var(--ink-soft);
  background: var(--surface);
  border: 1px solid var(--rule-control);
  border-radius: var(--r-sm);
  cursor: pointer;
  transition: color var(--motion-fast) var(--ease), border-color var(--motion-fast) var(--ease);
}
.universe-step__btn:hover:not([disabled]) { color: var(--ink); border-color: var(--accent); }
.universe-step__btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.universe-step__btn[disabled] { opacity: 0.4; cursor: default; }
.universe-step__at { color: var(--muted); font-size: var(--fs-micro); font-variant-numeric: tabular-nums; text-align: center;
  display: flex; flex-direction: column; align-items: center; gap: 4px; }
/* The paper's scale in small, its cursor on this result: the map's own mark. */
.universe-step__scale { display: block; overflow: visible; }
.universe-step__ticks { fill: none; stroke: var(--faint); stroke-width: 1; }
.universe-step__knock { stroke: var(--surface-sunk); stroke-width: 4; }
.universe-step__cursor { stroke: var(--ink); stroke-width: 2; }
/* The legend is the filter: each key switches its kind or glyph on and off. */
.universe-keys {
  display: grid;
  gap: var(--space-1);
  padding: var(--space-3) var(--space-4);
  border-top: 1px solid var(--rule);
  background: var(--surface-sunk);
}
.universe-key { display: flex; flex-wrap: wrap; align-items: center; gap: 0.1rem 0.25rem; }
.universe-key__label { flex: 0 0 7rem; color: var(--muted); font-size: var(--fs-small); }
.universe-key__btn {
  font: inherit;
  font-size: var(--fs-small);
  display: inline-flex;
  align-items: center;
  min-height: 28px;
  padding: 0.15rem 0.6rem 0.15rem 0.45rem;
  color: var(--ink-soft);
  background: none;
  border: 1px solid transparent;
  border-radius: var(--r-pill);
  cursor: pointer;
  transition: color var(--motion-fast) var(--ease), border-color var(--motion-fast) var(--ease);
}
.universe-key__btn[hidden] { display: none; }
.universe-key__btn:hover { color: var(--ink); border-color: var(--rule-control); }
.universe-key__btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.universe-key__btn .dot {
  display: inline-block;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  margin-right: 0.45em;
  flex: none;
}
.universe-key__btn .glyph { flex: none; transform: none; margin-right: 0.45em; }
.universe-key__btn[aria-pressed="false"] { color: var(--muted); }
.universe-key__btn[aria-pressed="false"] .dot,
.universe-key__btn[aria-pressed="false"] .glyph { opacity: 0.3; }
.universe-key__btn[aria-pressed="true"] { color: var(--ink); }
@media (max-width: 720px) {
  .universe-key__label { flex-basis: 100%; }
}
.universe-about { max-width: 62ch; margin: var(--space-7) 0 var(--space-5); }
.universe-about h2 { font-size: var(--fs-h3); margin: 0 0 var(--space-3); }
.universe-about p { max-width: 62ch; color: var(--ink-soft); line-height: var(--lh-body); text-wrap: pretty; margin: 0 0 var(--space-3); }
.universe-about .universe-about__snapshot,
.universe-about .doc-source-line,
.universe-about .universe-rule { color: var(--muted); font-size: var(--fs-small); }
.lens-btn {
  font: inherit;
  font-size: var(--fs-small);
  color: var(--muted);
  background: var(--surface);
  border: 1px solid var(--rule-control);
  border-radius: var(--r-pill);
  padding: 0.22rem 0.75rem;
  cursor: pointer;
  transition: color var(--motion-fast) var(--ease), border-color var(--motion-fast) var(--ease), background var(--motion-fast) var(--ease);
}
.lens-btn:hover { color: var(--ink); border-color: var(--accent); }
.lens-btn[aria-pressed="true"] {
  color: var(--on-accent);
  background: var(--accent);
  border-color: var(--accent);
}
.universe-search {
  font: inherit;
  font-size: var(--fs-body);
  color: var(--ink);
  background: var(--surface);
  border: 1px solid var(--rule-control);
  border-radius: var(--r-control);
  padding: 0.3rem 0.7rem;
  min-width: 210px;
}
.universe-search:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.universe-count { color: var(--faint); font-size: var(--fs-micro); margin-left: auto; font-variant-numeric: tabular-nums; }

.universe-inspector__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-2);
}
.universe-inspector__kind {
  font-size: var(--fs-small);
  color: var(--muted);
  margin: 0 0 0.35rem;
}
.universe-inspector__kind::first-letter { text-transform: uppercase; }
.universe-inspector__kind .dot { margin-right: 0.45em; }
.universe-inspector__title {
  font-family: var(--font-serif);
  font-size: 1.1rem;
  line-height: var(--lh-snug);
  margin: 0 0 var(--space-2);
}
.universe-inspector__meta { margin: 0 0 var(--space-3); }
.universe-chip {
  display: inline-block;
  font-size: var(--fs-micro);
  color: var(--muted);
  background: var(--surface-sunk);
  border: 1px solid var(--rule);
  border-radius: var(--r-pill);
  padding: 0.12rem 0.55rem;
  margin: 0 0.35rem 0.25rem 0;
}
.universe-inspector__body,
.universe-inspector__boundary,
.universe-inspector__note {
  margin: 0 0 var(--space-3);
  color: var(--ink-soft);
  font-size: var(--fs-small);
  line-height: var(--lh-body);
}
.universe-inspector__boundary,
.universe-inspector__note { color: var(--muted); }
/* The notes' TeX arrives typeset as MathML, as on the paper pages. A long
   formula may break at its operators, never out of the column. */
.universe-inspector math { font-size: 1.06em; color: var(--ink-soft); overflow-wrap: normal; }
.universe-inspector__note math, .universe-inspector__boundary math { max-width: 100%; }
.universe-inspector__hint {
  margin: var(--space-3) 0 0;
  color: var(--faint);
  font-size: var(--fs-small);
  line-height: var(--lh-body);
}
.universe-inspector__links {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1) var(--space-4);
  font-size: var(--fs-meta);
  margin: 0 0 var(--space-3);
}
.universe-inspector__census {
  list-style: none;
  margin: 0 0 var(--space-2);
  padding: 0;
}
.universe-inspector__census li {
  display: flex;
  align-items: baseline;
  gap: 0.5em;
  padding: 0.28rem 0;
  border-top: 1px solid var(--rule);
  font-size: var(--fs-small);
  color: var(--muted);
}
.universe-inspector__census li:first-child { border-top: 0; }
.universe-inspector__census b {
  margin-left: auto;
  color: var(--ink-soft);
  font-variant-numeric: oldstyle-nums;
}
.universe-inspector__sub {
  font-size: var(--fs-small);
  color: var(--ink-soft);
  margin: var(--space-4) 0 var(--space-1);
  font-weight: 600;
}
/* How a result is checked: three stations down one thread, Lean, then
   Comparator, then Palomar, each a mark and a sentence. The mark speaks the
   map's evidence language: filled in its colour when done, the queued pip
   while it waits, half filled under named inputs, a faint ring when not
   yet; Palomar, which holds a prepared corpus, is a ring with a centre. */
.universe-checks { list-style: none; margin: var(--space-2) 0 var(--space-3); padding: 0; }
.universe-check {
  position: relative;
  display: grid;
  grid-template-columns: 0.85rem minmax(0, 1fr);
  column-gap: 0.65rem;
  padding-bottom: 0.8rem;
  --check: var(--faint);
}
.universe-check:last-child { padding-bottom: 0; }
.universe-check:not(:last-child)::before {
  content: "";
  position: absolute;
  left: calc(0.425rem - 0.5px);
  top: 1.2rem;
  bottom: 0.15rem;
  width: 1px;
  background: var(--rule-strong);
}
.universe-check--lean { --check: var(--u-statement); }
.universe-check--comparator { --check: var(--u-integration); }
.universe-check--palomar { --check: var(--muted); }
.universe-check__mark {
  width: 0.85rem;
  height: 0.85rem;
  margin-top: 0.22rem;
  box-sizing: border-box;
  border-radius: 50%;
  border: 1.6px solid var(--check);
}
.universe-check--done .universe-check__mark { background: var(--check); }
.universe-check--queued .universe-check__mark { background: radial-gradient(circle, var(--surface) 0 30%, var(--check) 35%); }
.universe-check--part .universe-check__mark { background: linear-gradient(90deg, var(--check) 50%, transparent 50%); }
.universe-check--ready .universe-check__mark { background: radial-gradient(circle, var(--check) 0 28%, transparent 33%); }
.universe-check--none .universe-check__mark { border-width: 1px; border-color: var(--faint); opacity: 0.8; }
.universe-check__body { min-width: 0; }
.universe-check__text { margin: 0; color: var(--ink-soft); font-size: var(--fs-small); line-height: var(--lh-body); }
.universe-check__text b { color: var(--ink); font-weight: 600; }
.universe-check--none .universe-check__text { color: var(--muted); }
.universe-check__more { margin: 0.35rem 0 0; color: var(--muted); font-size: var(--fs-small); line-height: var(--lh-body); }
.universe-check__links { display: flex; flex-wrap: wrap; align-items: center; gap: 0.3rem; margin: 0.45rem 0 0; }
.universe-check__entry { color: var(--faint); font-size: var(--fs-micro); margin: 0 0.1rem 0 0.2rem; font-variant-numeric: tabular-nums; }
.universe-check__entry:first-child { margin-left: 0; }
.universe-check__record { margin: 0 0 var(--space-3); }
.universe-lean__where { margin: 0.3rem 0 0.45rem; color: var(--faint); font-size: var(--fs-micro); line-height: var(--lh-snug); }
.universe-lean__list { list-style: none; margin: 0.35rem 0 0; padding: 0; display: grid; gap: 0.6rem; }
.universe-lean__list li { min-width: 0; }
.universe-lean__name { font-size: var(--fs-micro); overflow-wrap: anywhere; }
.universe-lean__line { margin-left: 0.45em; color: var(--faint); font-size: var(--fs-micro); white-space: nowrap; font-variant-numeric: tabular-nums; }
.universe-lean__code {
  margin: 0.3rem 0 0;
  padding: 0.5rem 0.6rem;
  max-height: 16rem;
  overflow: auto;
  background: var(--surface-sunk);
  border: 1px solid var(--rule);
  border-radius: var(--r-sm);
  font-size: 0.76rem;
  line-height: 1.5;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  tab-size: 2;
}
/* What else rests on the same Lean theorems; a row selects it. */
.universe-related { list-style: none; margin: 0 0 var(--space-3); padding: 0; }
.universe-related li:first-child .universe-goto { border-top: 0; }
.universe-goto {
  font: inherit;
  font-size: var(--fs-small);
  display: flex;
  align-items: baseline;
  gap: 0.5em;
  width: 100%;
  text-align: left;
  color: var(--muted);
  background: none;
  border: 0;
  border-top: 1px solid var(--rule);
  padding: 0.32rem 0.1rem;
  cursor: pointer;
}
.universe-goto:hover { color: var(--accent); }
.universe-goto .dot { flex: none; transform: translateY(-1px); }
.universe-goto__label { min-width: 0; overflow-wrap: anywhere; }
.universe-goto__rel {
  margin-left: auto;
  flex: none;
  color: var(--faint);
  font-size: var(--fs-micro);
  white-space: nowrap;
}
/* How the card's object connects, said in words: each line is a phrase
   ("Replayed by", "Stated in") over what it names; a long group folds
   under its count. A result's evidence reads as one sentence. */
.universe-inspector__evidence {
  margin: 0 0 var(--space-3);
  color: var(--ink-soft);
  font-size: var(--fs-small);
  line-height: var(--lh-body);
}
.universe-links { list-style: none; margin: 0 0 var(--space-3); padding: 0; font-size: var(--fs-small); }
.universe-link { padding: 0.4rem 0 0.2rem; border-top: 1px solid var(--rule); }
.universe-link:first-child { border-top: 0; padding-top: 0; }
.universe-link__how { display: block; color: var(--faint); font-size: var(--fs-micro); margin-bottom: 0.1rem; }
.universe-link .universe-goto { border-top: 0; padding: 0.18rem 0.1rem; color: var(--ink-soft); }
.universe-link .universe-goto:hover { color: var(--accent); }
.universe-goto__more {
  color: var(--faint);
  font-size: var(--fs-small);
  padding: 0.32rem 0.1rem;
  border-top: 1px solid var(--rule);
}
.universe-inspector__clear,
.universe-inspector__copy {
  font: inherit;
  font-size: var(--fs-small);
  color: var(--muted);
  background: var(--surface);
  border: 1px solid var(--rule-control);
  border-radius: var(--r-pill);
  padding: 0.14rem 0.7rem;
  cursor: pointer;
  transition: color var(--motion-fast) var(--ease), border-color var(--motion-fast) var(--ease);
}
.universe-inspector__clear:hover,
.universe-inspector__copy:hover { color: var(--ink); border-color: var(--accent); }
.universe-inspector__copy { margin-top: var(--space-3); }

.universe-index ul {
  list-style: none;
  margin: 0;
  padding: 0 0 var(--space-3) var(--space-5);
  columns: 2;
  column-gap: var(--space-6);
}
.universe-index li { padding: 0.15rem 0; break-inside: avoid; font-size: var(--fs-body); }
.universe-index a { color: var(--muted); }
.universe-index a:hover { color: var(--accent); }

/* ---- Pager ---------------------------------------------------------------- */
.maths-pager {
  display: flex;
  justify-content: space-between;
  gap: var(--space-4);
  margin: var(--space-7) 0 var(--space-5);
  border-top: 1px solid var(--rule);
  padding-top: var(--space-4);
}
.maths-pager__link {
  color: var(--ink-soft);
  text-decoration: none;
  max-width: 46%;
}
.maths-pager__link:hover { color: var(--accent); text-decoration: none; }
.maths-pager__link--next { text-align: right; margin-left: auto; }
.maths-pager__dir {
  display: block;
  font-size: var(--fs-meta);
  color: var(--muted);
  margin-bottom: 0.15rem;
}
.maths-pager__spacer { flex: 1; }

/* ---- Long tables of contents --------------------------------------------- */
.maths-layout .docs-toc {
  max-height: calc(100vh - var(--topbar-h) - 48px);
  overflow-y: auto;
  scrollbar-width: thin;
}
.docs-toc a.toc-l3 { padding-left: 1.6rem; font-size: var(--fs-small); }
/* The margin contents is navigation a reader uses, not a caption: it takes
   the sidebar's type size, one step down for nested sections. */
.maths-layout .docs-toc a { font-size: 0.9rem; }
.maths-layout .docs-toc a.toc-l3,
.maths-layout .docs-toc a.toc-l4 { font-size: var(--fs-meta); }

/* ---- Pandoc table alignment classes ---------------------------------------
   The experience builder converts LaTeX/Pandoc inline alignment styles into
   these classes so the estate's no-inline-style rule holds on fragments. */
.paper-stage .ta-l { text-align: left; }
.paper-stage .ta-r { text-align: right; }
.paper-stage .ta-c { text-align: center; }
.paper-stage .pl0 { padding-left: 0; }
.paper-stage .pr0 { padding-right: 0; }

/* ---- The frontier block ---------------------------------------------------
   The dossier's argument, in the order a reader asks for it: what this work
   added, what stands on its own, what has already failed, what would close it,
   and only then what it does not establish. The limits are set apart rather
   than played down -- a boundary that looks like body copy gets skimmed, and
   this one is load-bearing. */
.result-card__boundary + .result-card__boundary { margin-top: calc(-1 * var(--space-1)); }
.result-card--absence { background: none; border-style: dashed; }
.result-card--absence .result-card__boundary { color: var(--ink-soft); }
.result-card .fact-list { margin: var(--space-2) 0 0; }
.frontier-limit {
  border-left: 3px solid var(--rule-strong);
  padding-left: var(--space-4);
  margin: var(--space-5) 0;
}
.frontier-limit .eyebrow {
  color: var(--muted);
  margin: 0 0 var(--space-2);
}
.frontier-limit .result-card__boundary:last-child { margin-bottom: 0; }
/* The authority note is true and it is not the news. It sits under the results
   it bounds, at the size of a footnote, because a reader who arrived to find
   out what was proved should meet a finding first. */
.note--authority {
  margin-top: var(--space-5);
  padding-top: var(--space-3);
  border-top: 1px solid var(--rule);
  font-size: var(--fs-meta);
  color: var(--faint);
}
/* A closed disclosure should say what is behind it. */
.dossier-details > summary {
  cursor: pointer;
  color: var(--muted);
  font-size: var(--fs-meta);
  padding: var(--space-3) 0;
  border-top: 1px solid var(--rule);
  border-bottom: 1px solid var(--rule);
}
.dossier-details > summary:hover { color: var(--ink); }
.dossier-details[open] > summary { border-bottom-color: transparent; }

/* ---- Mathematical notation ------------------------------------------------
   Expressions detected in the corpus records are wrapped in .math by
   plectis_math_notation and given real sub/superscripts. The face shift is
   deliberate but small: a reader should register "this is an expression"
   without the line changing colour or weight, because the surrounding sentence
   is usually half of the statement. Expressions never break across a line if
   they can help it -- a summation sign orphaned from its summand reads as a
   rendering fault. */
.math {
  font-family: var(--font-serif);
  font-feature-settings: "tnum" 1, "lnum" 1;
  white-space: nowrap;
}
.math sub, .math sup {
  font-size: 0.72em;
  line-height: 0;
  /* Scripts inside a script stay legible rather than compounding to nothing. */
  font-feature-settings: inherit;
}
.math sub { vertical-align: -0.28em; }
.math sup { vertical-align: 0.5em; }
.math sub .math sub, .math sup .math sup { font-size: 0.85em; }
/* A long expression is allowed to wrap rather than push the page sideways. */
.dossier-head__q .math, .result-card__statement .math,
.result-card__boundary .math, .fact-list .math { white-space: normal; }

/* ---- File routes ----------------------------------------------------------
   The PDF is a first-class destination, not a footnote after the reading page:
   a stranger who wants the manuscript should never have to open a website page
   to find the file. Both routes are buttons, on every surface that offers a
   paper. */
.btn--file { gap: 0.45rem; }
.result-card__links--routes {
  align-items: center;
  gap: var(--space-2) var(--space-3);
  margin-top: var(--space-3);
}
.shelf__meta .btn { font-size: 0.78rem; padding: 0.34rem 0.7rem; }
.paper-foot {
  margin-top: var(--space-7);
  padding-top: var(--space-5);
  border-top: 1px solid var(--rule);
}
.paper-foot__label {
  font-size: var(--fs-meta);
  color: var(--muted);
  margin: 0 0 var(--space-3);
}
/* The paper's record: authorship and AI use, citation, the manuscript, the
   rendered source. Reading type, quieter in colour, at the notes' measure. */
.paper-foot__title { font-family: var(--font-serif); font-size: 1.35rem; margin: 0 0 var(--space-3); }
.paper-foot > p.note { margin: 0 0 var(--space-3); max-width: 62ch; font-size: var(--fs-body); line-height: 1.6; color: var(--muted); }
.paper-foot > p.note b { font-weight: 600; color: var(--ink-soft); }
.paper-foot > p.note + .paper-foot__label { margin-top: var(--space-5); }
.maths-receipt--inline { margin-top: var(--space-4); }

/* ---- Small screens ------------------------------------------------------- */
@media (max-width: 860px) {
  .problem-row a { grid-template-columns: 3.4rem 1fr; }
  .problem-row__meta { grid-column: 2; text-align: left; white-space: normal; }
  .shelf__row { grid-template-columns: 1fr; }
  .shelf__meta { text-align: left; }
  .universe-canvas { height: 340px; }
  .universe-index ul { columns: 1; }
  .maths-counts b { font-size: 1.3rem; }
}

/* ---- Print ---------------------------------------------------------------- */
@media print {
  .paper-head__routes, .maths-receipt { display: none !important; }
  .paper-stage { max-width: none; }
}

/* A reading index and a local source map, with the repository one click away. */
.reading-index .maths-hero { padding-bottom: 2rem; }
.reading-index .maths-hero h1 { font-size: clamp(2.4rem, 5vw, 4rem); }
.problem-directory, .reading-shelf { list-style: none; margin: 0; padding: 0; }
/* Problem rows share one shape: number and title, the question, an optional
   note in a quieter line, then the reading routes. */
.problem-section { margin: var(--space-4) 0 0; }
/* Two widths inside the frame (6 October 2026): prose keeps the reading
   measure, and what a reader scans (the problems, the papers, the map preview
   and the guides) shares one wider index track. A question still never runs
   the width of a monitor: each row's text keeps its own measure inside it. */
.reading-index { --index-measure: 48rem; }
.problem-directory,
.reading-index .reading-shelf,
.reading-index .fact-list,
.reading-index .universe-teaser,
.reading-index > .maths-receipt { max-width: var(--index-measure); }
.reading-index .dossier-section > p { max-width: 62ch; }
.problem-section__head { margin: 0 0 var(--space-4); }
.problem-section__head h2 { font-family: var(--font-serif); font-size: 1.45rem; margin: 0 0 var(--space-1); }
.problem-section__head .note { margin: 0; color: var(--muted); font-size: var(--fs-meta); }
/* The overview's document lists carry no marker, so they take no indent. */
.reading-index .fact-list li { padding-left: 0; }
.reading-index .fact-list li::before { content: none; }
.problem-entry { border-top: 1px solid var(--u-edge); padding: 1.5rem 0; }
.problem-entry__title { display: grid; grid-template-columns: 4.5rem minmax(0, 1fr); gap: 1rem; align-items: baseline; text-decoration: none; }
.problem-entry__title strong { font-size: 1.25rem; font-weight: 500; }
.problem-entry__title > span { color: var(--muted); font-variant-numeric: tabular-nums; }
.problem-entry > p { margin: .5rem 0 0 5.5rem; max-width: 65ch; }
.problem-entry__question { color: var(--ink-soft); }
/* A note qualifies the question above it (what is proved, what stays open),
   so it is set in reading type, quieter in colour only. */
.problem-entry__note { color: var(--muted); font-size: var(--fs-body); line-height: var(--lh-body); }
.problem-entry__note strong { font-weight: 600; color: var(--ink-soft); }
.problem-entry__links {
  display: flex;
  flex-wrap: wrap;
  gap: .1rem 1.4rem;
  margin: .6rem 0 0 5.5rem;
  font-size: var(--fs-body);
}
/* Each route is a full-height target; the short paper leads. */
.problem-entry__links a { padding-block: .2rem; }
.problem-entry__links a:first-child { font-weight: 600; }
.problem-jumps { display: flex; flex-wrap: wrap; gap: 1rem 2rem; padding: 1.5rem 0; border-top: 1px solid var(--u-edge); }
.reading-shelf li { padding: 0.85rem 0; border-bottom: 1px solid var(--u-edge); display: flex; flex-wrap: wrap; justify-content: space-between; gap: 0.5rem 1rem; align-items: center; }
.reading-shelf li > a:first-child { flex: 1 1 100%; }
.reading-shelf__title { flex: 1 1 18rem; min-width: 0; display: flex; flex-direction: column; gap: 0.1rem; }
.reading-shelf__title small { color: var(--muted); font-size: var(--fs-small); }
.reading-shelf li > p { flex: 1 1 100%; margin: 0; max-width: 65ch; color: var(--ink-soft); }
.reading-shelf .btn { font-size: var(--fs-small); padding: 0.3rem 0.7rem; }
/* The guides are single links, so on a wide screen they set in two columns
   instead of eleven full-width rules. */
@media (min-width: 900px) {
  .reading-index #documents .fact-list,
  .reading-index #reference .fact-list { columns: 2; column-gap: 2.5rem; }
  .reading-index #documents .fact-list li,
  .reading-index #reference .fact-list li { break-inside: avoid; }
}
/* The overview closes on how to take part, then who made it and how to cite. */
.maths-closing .maths-hero__about { margin-bottom: 0; }

/* A folded section on the overview reads as a section: its summary takes the
   same serif heading as the open sections around it, with a small chevron. */
.reading-index > details.dossier-section > summary {
  cursor: pointer;
  list-style: none;
  font-family: var(--font-serif);
  font-size: 1.45rem;
  font-weight: 600;
  line-height: var(--lh-tight);
  color: var(--ink);
  padding: var(--space-1) 0 var(--space-3);
}
.reading-index > details.dossier-section > summary::-webkit-details-marker { display: none; }
.reading-index > details.dossier-section > summary::after {
  content: "";
  display: inline-block;
  width: 0.42em;
  height: 0.42em;
  margin-left: 0.55em;
  border-right: 1.5px solid var(--muted);
  border-bottom: 1.5px solid var(--muted);
  transform: translateY(-0.18em) rotate(45deg);
  transition: transform var(--motion-ui) var(--ease);
}
.reading-index > details.dossier-section[open] > summary::after { transform: translateY(0.05em) rotate(-135deg); }
.reading-index > details.dossier-section > summary:hover { color: var(--accent); }
.paper-choices { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 22rem), 1fr)); gap: 2rem; padding: 1.4rem 0; }
.paper-choice { border-top: 2px solid var(--u-edge-hot); padding-top: 1.2rem; }
.paper-choice h2 { font-size: 1.35rem; line-height: 1.4; margin: .6rem 0 1.2rem; }
.paper-choice h2 a { color: inherit; text-decoration: none; }
.paper-choice__links { display: flex; flex-wrap: wrap; align-items: center; gap: .8rem; }
.paper-edition { margin: 0 0 1.5rem; }
.source-browser { padding-top: 1.5rem; }
.source-browser__head {
  display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between;
  gap: 0.4rem 1.2rem; margin: 0 0 0.85rem;
}
.source-browser__head h2 { margin: 0; }
.source-browser__count { margin: 0; color: var(--muted); font-size: 0.86rem; }
.source-browser__count a { color: inherit; }
.source-browser__count a:hover { color: var(--accent); }
.source-filter[hidden], .source-files li[hidden] { display: none; }
.source-filter {
  display: flex; flex-wrap: wrap; align-items: center; gap: 0.7rem 1.1rem;
  margin: 0 0 0.85rem; font-size: 0.8rem;
}
.source-filter__search { flex: 1 1 14rem; min-width: 0; }
.source-filter input[type=search] {
  display: block; width: 100%; padding: 0.55rem 0.7rem;
  border: 1px solid var(--u-edge-hot); border-radius: var(--r-control);
  font: inherit; background: var(--page); color: var(--ink);
}
.source-filter__direct { color: var(--muted); display: inline-flex; align-items: center; gap: 0.4rem; }
.source-filter [data-map-count] { color: var(--muted); margin-left: auto; }
.source-files {
  list-style: none; padding: 0; margin: 0;
  border-top: 1px solid var(--u-edge);
}
.source-files.is-long {
  max-height: 32rem; overflow-y: auto; overscroll-behavior: contain auto;
}
.source-files li {
  display: grid; grid-template-columns: minmax(0, 1fr) auto;
  column-gap: 1rem; row-gap: 0.15rem;
  border-bottom: 1px solid var(--u-edge); padding: 0.72rem 0.55rem 0.72rem 0.7rem;
}
.source-files li.is-selected {
  background: color-mix(in srgb, var(--accent) 9%, transparent);
  box-shadow: inset 2px 0 0 var(--accent);
  scroll-margin-bottom: 5.5rem;
}
.source-file__name {
  color: var(--ink); text-align: left; border: 0; background: transparent;
  cursor: pointer; font: inherit; padding: 0; overflow-wrap: anywhere;
}
.source-file__name:hover { color: var(--accent); }
.source-file__name[aria-pressed=true] { font-weight: 650; color: var(--accent); }
.source-file__github {
  font-size: 0.8rem;
  align-self: center;
  color: var(--muted);
  display: inline-flex;
  align-items: center;
  min-height: 24px;
}
.source-file__github:hover { color: var(--accent); }
.source-file__path {
  grid-column: 1 / -1; color: var(--muted); overflow-wrap: break-word;
  font: 0.7rem var(--font-mono);
}
.source-file__rels {
  grid-column: 1 / -1; display: flex; flex-direction: column; gap: 0.28rem;
  margin-top: 0.45rem;
}
.source-file__rel {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.28rem 0.45rem;
}
.source-file__rel-k {
  flex: none; width: 4.6rem; color: var(--muted); font-size: 0.72rem;
  letter-spacing: 0.04em; text-transform: uppercase;
}
.source-file__rel-empty { color: var(--faint); }
.source-file__rel button {
  font: inherit; font-size: 0.78rem; padding: 0.12rem 0.48rem;
  border: 1px solid var(--u-edge-hot); border-radius: var(--r-control);
  background: var(--page); color: var(--ink); cursor: pointer;
}
.source-file__rel button:hover { border-color: var(--accent); color: var(--accent); }
.source-browser button:focus-visible, .source-browser input:focus-visible {
  outline: 2px solid var(--accent); outline-offset: 3px;
}
.research-details > .dossier-section { border-top: 0; }
@media (max-width: 640px) {
  /* The heading below already names the page; on a phone the breadcrumb
     keeps only the route back. */
  .maths-layout .docs-breadcrumb li[aria-current="page"] { display: none; }
  .problem-entry__title { grid-template-columns: 3.5rem minmax(0, 1fr); gap: .5rem; }
  .problem-entry > p, .problem-entry__links { margin-left: 0; }
  .source-file__rel-k { width: auto; }
}
.source-browser:target { background: transparent; box-shadow: none; }

/* Long theorem identifiers must fit the same mobile column as their prose. */
.maths-layout { overflow-wrap: anywhere; }

/* The shared return pill docks at the bottom of the viewport. On a manuscript
   that covers every formula that crosses that band. Keep the same left edge
   so a second press does not teleport sideways; sit under the topbar instead. */
body.has-viewback:has(.maths-layout) .viewback {
  bottom: auto;
  top: calc(var(--topbar-h) + 10px);
  max-width: min(22rem, calc(100vw - 2rem));
}
@media (min-width: 769px) {
  body.has-viewback:has(.maths-layout) .viewback { max-width: 200px; }
  body.has-viewback .maths-layout .docs-sidebar {
    padding-top: 4rem;
    height: calc(100dvh - var(--topbar-h));
  }
}
/* Where the sidebar stays on screen the pill is part of it (6 October 2026):
   it sits on the frame's left edge, exactly as wide as the sidebar, in the
   space the sidebar keeps free above its first heading. Every maths page has
   the same frame, so a second press still lands on the same spot. Docked in
   its own space it covers no text, so it keeps its label while the reader
   scrolls instead of folding to a bare arrow, and the page names itself in a
   few words (h1[data-page-name], read by docs.js) so the label wraps rather
   than trails off. */
@media (min-width: 1081px) {
  body.has-viewback:has(.maths-layout) .viewback,
  body.has-viewback:has(.maths-layout) .viewback.is-folded:not(:hover):not(:focus-visible) {
    left: max(20px, calc((100vw - 1560px) / 2));
    width: var(--maths-nav-w);
    min-width: 0;
    max-width: none;
    height: auto;
    gap: 0.45rem;
    padding: 0.5rem 0.9rem 0.5rem 0.8rem;
    justify-content: flex-start;
    border-radius: 1.25rem;
  }
  body.has-viewback:has(.maths-layout) .viewback .viewback__label,
  body.has-viewback:has(.maths-layout) .viewback.is-folded:not(:hover):not(:focus-visible) .viewback__label {
    display: inline;
    white-space: normal;
    overflow: visible;
    max-width: none;
    line-height: 1.3;
  }
}
@media (max-width: 768px) {
  body.has-viewback:has(.maths-layout) .viewback {
    top: auto;
    bottom: max(12px, env(safe-area-inset-bottom));
  }
}
@media (max-width: 768px) {
  body:has(.maths-layout) { --topbar-h: 116px; }
  body:has(.maths-layout) .docs-topbar__inner {
    position: relative; flex-wrap: wrap; height: auto; min-height: 58px; padding-block: .6rem;
  }
  body:has(.maths-layout) .docs-topbar__links {
    display: flex;
    width: 100%;
    margin-inline: 0;
    flex-wrap: nowrap;
    gap: 1rem;
    overflow-x: auto;
    font-size: .85rem;
    margin-top: .4rem;
  }
  body:has(.maths-layout) .docs-topbar__links a { flex: none; white-space: nowrap; padding-block: .4rem; }
  body:has(.maths-layout) .theme-toggle { position: absolute; right: 0; top: .85rem; }
  .maths-layout .docs-main > .wrap { width: 100%; margin-inline: 0; padding-inline: 0; }
  .maths-layout .docs-breadcrumb { margin-block: 1rem; }
  .maths-hero { padding-top: 1.8rem; }
  .paper-stage { font-size: 1.0625rem; line-height: 1.6; }
  .paper-stage h2 { font-size: 1.4rem; margin-top: 2em; }
  .paper-stage .proof { padding-left: 0.6em; }
  .problem-jumps { gap: .5rem 1rem; padding-block: 1rem; font-size: .875rem; }
  .source-files.is-long { max-height: 55dvh; }
}
.paper-source-guide {
  margin-block: 1.5rem;
  padding: 1rem 1.25rem;
  border: 1px solid var(--line, #7d70834d);
  border-radius: .5rem;
}
.paper-source-guide > summary { cursor: pointer; font-weight: 600; }
.paper-source-guide > summary span { font-weight: 400; opacity: .7; }
.paper-source-links { list-style: none; padding: 0; }
.paper-source-links > li {
  padding-block: .65rem;
  border-bottom: 1px solid var(--line, #7d70834d);
  overflow-wrap: anywhere;
  line-height: 1.55;
}
@media print { .paper-source-guide { border: 0; padding: 0; } }

/* A wide indivisible inline formula gets a local reading area; the rest of
   the paragraph retains its normal measure and baseline. */
.paper-stage .math-inline-flow[data-math-overflow] {
  display: block;
  max-width: calc(100% + var(--paper-bleed, 0px));
  overflow-x: auto;
  overflow-y: hidden;
  white-space: nowrap;
  margin: .65em 0;
  padding-block: .35em;
  scrollbar-width: thin;
  overscroll-behavior-x: contain;
}
.paper-stage .math-inline-flow[data-math-overflow]:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
}

/* Touch controls keep a comfortable target without changing manuscript type. */
@media (max-width: 768px), (pointer: coarse) {
  .lens-btn { min-height: 44px; }
  .universe-search, .source-filter input[type=search] {
    font-size: 1rem;
    min-height: 44px;
  }
}

/* ---- Problem dossier prose ------------------------------------------------
   The results section quotes the corpus record, whose notation arrives in
   backticks. The base sheet's code chips turned a mathematical sentence into
   a run of boxes; here notation reads in a quiet monospace at the ink of the
   sentence around it, and the paragraphs take a reading measure. */
.dossier-section > p,
#current-results p {
  max-width: 72ch;
  margin: 0 0 0.9em;
  line-height: var(--lh-body);
  color: var(--ink-soft);
}
#current-results p:last-child { margin-bottom: 0; }
#current-results > p + a,
#current-results > a { display: inline-block; margin-top: 0.35em; }
.dossier-section :where(p, li) code,
.result-card :where(p, li, dd) code,
.fact-list li code,
.family-list li code,
.summary-line code,
.boundary-line code {
  background: transparent;
  color: var(--ink);
  padding: 0;
  border-radius: 0;
  font-size: 0.86em;
  letter-spacing: -0.005em;
}
.dossier-section > p strong a { color: inherit; text-decoration: none; }
.dossier-section > p strong a:hover { color: var(--accent); }
/* An inlined manuscript on a dossier shares the reading measure of the
   sections around it and keeps its own leading. */
.dossier-section .paper-stage { margin-top: var(--space-4); }

/* Operator help leaves the typeset expression unchanged. */
.paper-stage .math[data-term-help="notation"] { cursor: help; }
.paper-stage .math[data-term-help="notation"]:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
}

.paper-chapter-nav { display: flex; flex-wrap: wrap; gap: .6em 1.2em; margin: 1.3em 0; font: .9rem/1.5 var(--font-sans); }
.paper-chapter-link { margin: .7em 0; }

/* ---- Long manuscripts: lay out only what is on screen ---------------------
   The long records arrive as two and a half megabytes of prerendered
   equations. Every block below a section heading is laid out lazily: the
   browser keeps a placeholder height until the block nears the viewport,
   then renders it. Headings stay live so the margin contents and deep links
   keep their targets, and the placeholder remembers a block's real height
   once it has been shown, so scrolling back is stable. Print sets everything. */
.paper-stage section > :not(h1, h2, h3, h4, h5, h6, section) {
  content-visibility: auto;
  contain-intrinsic-block-size: auto 6em;
}
@media print {
  .paper-stage section > * { content-visibility: visible; }
}

/* ---- Typeset expressions outside the manuscript stage --------------------
   Record fields and repository documents now carry exact-TeX spans too. The
   record face and no-break rule above are for the HTML fallback; a typeset
   expression brings its own face and its own line breaking. */
.math[data-math-rendered] {
  font-family: inherit;
  font-feature-settings: normal;
  white-space: normal;
}
.math.inline[data-math-compact],
.math.inline[data-math-compact] mjx-math,
.math.inline[data-math-compact] mjx-break { white-space: nowrap; }
.math[data-math-rendered] mjx-container { overflow-wrap: normal; }
.dossier-section :not(.paper-stage) .math.display,
.docs-toc .math.display { display: block; text-align: center; overflow-x: auto; margin: .8em 0; }

/* ---- Contents panels with mathematics -----------------------------------
   Heading maths in the margin sets at the panel's own size; nothing in a
   label may push the panel wider than its column. */
.docs-toc a { hyphens: auto; }
.docs-toc mjx-container, .reader-contents mjx-container { font-size: 1em; }
.docs-toc a.toc-l4 { padding-left: 2.4rem; font-size: var(--fs-small); color: var(--faint); }
.reader-contents .toc-l4 { padding-left: 2rem; color: var(--faint); }
/* The dossier's inline contents is the narrow-screen fallback; on a wide
   screen the margin panel carries the same rows. */
@media (min-width: 1281px) {
  .maths-layout:has(.docs-toc) .reader-contents--inline { display: none; }
}
/* A condensed margin needs its complete contents available at every width. */
@media screen and (min-width: 1281px) {
  .maths-layout:has(.docs-toc) .reader-contents--all { display: block; }
}

/* ---- Definition links ------------------------------------------------------
   The builder keeps one automatic definition link per technical term per
   page. It reads as plain prose: no colour and no rule at rest, a help cursor,
   and a fine dotted rule on hover or focus. A reader who asks for more
   contrast keeps the rule at rest. */
.maths-layout a.narrative-ref--term,
.maths-layout a.narrative-ref--term.is-term-first,
.maths-layout a.narrative-ref--term.is-term-again,
html:not(.scripting) .maths-layout a.narrative-ref--term {
  color: inherit;
  text-decoration-line: none;
}
.maths-layout a.narrative-ref--term:hover,
.maths-layout a.narrative-ref--term:focus-visible,
.maths-layout a.narrative-ref--term.is-term-first:hover,
.maths-layout a.narrative-ref--term.is-term-again:hover {
  color: inherit;
  text-decoration-line: underline;
  text-decoration-style: dotted;
  text-decoration-thickness: 1px;
  text-decoration-color: color-mix(in srgb, var(--accent) 60%, transparent);
  text-underline-offset: 0.2em;
}
@media (prefers-contrast: more) {
  .maths-layout a.narrative-ref--term,
  .maths-layout a.narrative-ref--term.is-term-first {
    text-decoration-line: underline;
    text-decoration-style: dotted;
  }
}

/* ---- A figure the web edition cannot draw ---------------------------------
   The TikZ drawings live in the PDF; the page says so in one line where the
   figure stood, and a cross-reference to the figure still lands here. */
.paper-stage .figure-elsewhere {
  margin: 1.2em 0;
  padding: 0.6em 0.9em;
  border: 1px dashed var(--rule-strong);
  border-radius: var(--r-sm);
  font-family: var(--font-sans);
  font-size: var(--fs-meta);
  color: var(--muted);
  scroll-margin-top: calc(var(--topbar-h) + 16px);
}

/* ── Motion (2026-10-04) ──────────────────────────────────────────────────────
   The maths pages share the site's motion grammar (the "Motion" block in
   assets/style.css). One thing is theirs alone: arriving at a statement.
   The map's "read it in the paper" buttons and every cross-reference land on
   a theorem's anchor, so the statement says it is the one: its hairline
   flares ember and settles back over about two seconds, under the same light
   wash every arrival gets. The flare is a shadow beside the rule, so nothing
   moves; reduced motion keeps the page still. */
@keyframes mc-statement-arrive {
  0%, 35% { border-left-color: var(--home-ember); box-shadow: -2px 0 0 0 var(--home-ember); }
  100% { border-left-color: var(--rule-strong); box-shadow: -2px 0 0 0 transparent; }
}
@media screen and (prefers-reduced-motion: no-preference) {
  .paper-stage :is(.theorem, .thm, .lemma, .lem, .proposition, .prop,
                   .corollary, .cor, .equivform, .problem):target {
    animation: mc-target-arrive 900ms var(--ease-out), mc-statement-arrive 2.1s var(--ease-out);
  }
}

.universe-evidence-key { display: inline-flex; align-items: center; gap: 0.35em; padding: 0.3rem 0.5rem; color: var(--muted); font-size: var(--fs-small); }
.universe-evidence-key .glyph { flex: none; margin: 0; }

/* ---- The universe explorer (5 October 2026) ----------------------------------
   maths/universe.html is one full-window explorer: the shared frame
   (style.css "Map explorers", assets/explorer.js) holds a reading panel on
   the left and the drawing in the rest of the window. These rules set the
   map's own panel: the search under the title, then three levels of
   reading, each a well-set page. At rest the eight problems are its
   landmarks; a chosen problem reads its question, its short paper whole
   and its results; a chosen result reads its statement, how far it is
   checked and the ways out, under one line naming its problem. Nothing is
   clamped or folded: the panel's body scrolls instead. */
.universe-explorer .explorer__stage > canvas.universe-canvas {
  background: var(--page); touch-action: none; cursor: grab;
}
.universe-explorer .explorer__stage > canvas.universe-canvas.is-over { cursor: pointer; }
.universe-explorer .explorer__stage > canvas.universe-canvas.is-panning { cursor: grabbing; }
.universe-explorer .universe-find { margin-top: 0.9rem; }
.universe-explorer .universe-search {
  min-height: 40px; padding: 0.45rem 0.85rem;
  font-size: 0.95rem; background: color-mix(in srgb, var(--surface) 70%, var(--page));
  border-color: var(--rule-control);
}
.universe-explorer .universe-results { z-index: 30; max-height: min(60vh, 28rem); }
/* The preview layer spans the whole panel, so nothing of the card under it
   shows at its edge. Rows, rules and summaries use the panel's whole width
   (6 October 2026); only prose keeps a reading measure. */
.universe-explorer :is(.universe-inspector, [data-universe-pane]) :is(p, .universe-quote),
.universe-preview > p, .universe-preview .universe-quote { max-width: 64ch; }
.universe-explorer :is(.universe-inspector, [data-universe-pane]) :is(.universe-folio, .universe-context, .universe-list__from, .universe-step),
.universe-preview :is(.universe-folio, .universe-context) { max-width: none; }
.universe-summary {
  margin: 0.15rem 0 0.8rem; max-width: 52ch;
  font-size: 1rem; line-height: 1.6; color: var(--ink-soft); text-wrap: pretty;
}
.universe-section__title {
  margin: 2rem 0 0.65rem;
  font-family: var(--font-serif); font-weight: 500; font-size: 1.22rem; line-height: 1.2;
  letter-spacing: -0.003em; color: var(--ink);
}
.universe-explorer .universe-overview__gauge { margin: 0 0 0.4rem; }
.universe-explorer .universe-overview__gauge .universe-gauge { height: 8px; border-radius: 4px; max-width: 30rem; }

/* The problems, as landmarks (6 October 2026): a number column, the
   title as the row's largest words, the replay count in figures that line
   up, and a slim strip of the same counts across the title's width. Rows
   rest flat on hairlines; hover lifts a row a little, the problem last
   read stands as a quiet raised region with a clear edge, and keyboard
   focus is the steel ring, apart from both. Ember and teal stay with the
   evidence they mean. */
.universe-explorer .universe-problems { margin: 0 0 0.4rem; border-top: 1px solid var(--home-line-strong); }
.universe-explorer .universe-problem {
  grid-template-columns: 3.6rem minmax(0, 1fr);
  grid-template-areas: "num name" "num count" "num gauge";
  gap: 0.14rem 0.35rem; align-items: baseline;
  min-height: 64px; padding: 0.72rem 0.6rem 0.8rem 0.35rem;
  border-top: 1px solid var(--home-line); border-radius: 0;
  transition: background-color var(--motion-fast, 120ms) var(--ease-out, ease-out);
}
.universe-explorer .universe-problems li:first-child .universe-problem { border-top: 0; }
.universe-explorer .universe-problem__num {
  grid-area: num; font-family: var(--font-serif); font-size: 1.04rem; line-height: 1.3;
  color: var(--home-ember); font-variant-numeric: lining-nums tabular-nums;
}
.universe-explorer .universe-problem__name {
  grid-area: name; white-space: normal; overflow: visible;
  font-family: var(--font-serif); font-size: 1.0625rem; line-height: 1.3; color: var(--ink); text-wrap: pretty;
}
.universe-explorer .universe-problem__count {
  grid-area: count; margin-top: 0.1rem; font-size: var(--fs-meta); line-height: 1.35; color: var(--muted);
  font-variant-numeric: lining-nums tabular-nums;
}
.universe-explorer .universe-problem__count b { font-weight: 600; color: var(--ink-soft); }
.universe-explorer .universe-problem .universe-gauge {
  grid-area: gauge; align-self: center; width: 100%; max-width: none; height: 3px; margin-top: 0.42rem; border-radius: 2px;
}
.universe-explorer .universe-problem:hover { background: color-mix(in srgb, var(--ink) 4%, transparent); }
.universe-explorer .universe-problem:hover .universe-problem__name { color: var(--ink); }
.universe-explorer .universe-problem.is-current {
  border-radius: var(--r-sm, 6px); border-top-color: transparent;
  background: color-mix(in srgb, var(--ink) 7%, var(--page));
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ink) 24%, transparent);
}
.universe-explorer .universe-problems li:has(.is-current) + li .universe-problem { border-top-color: transparent; }
.universe-explorer .universe-problem:focus-visible {
  outline: 2px solid var(--accent); outline-offset: -2px; border-radius: var(--r-sm, 6px);
}

/* The panel's prose reads at body size; its asides a step smaller. */
.universe-explorer .universe-inspector__body,
.universe-preview .universe-inspector__body { font-size: var(--fs-body); }
.universe-explorer .universe-inspector__note,
.universe-explorer .universe-inspector__boundary,
.universe-explorer .universe-inspector__hint,
.universe-explorer .universe-inspector__evidence,
.universe-explorer .universe-check__text,
.universe-explorer .universe-check__more,
.universe-explorer .universe-inspector__census li,
.universe-explorer .universe-rings li { font-size: var(--fs-meta); }
.universe-explorer .universe-inspector__hint { color: var(--muted); }
.universe-inspector__hint--lead { margin: 0 0 0.4rem; }
.universe-explorer .universe-inspector__sub {
  margin: 1.6rem 0 0.45rem; font-size: var(--fs-meta); font-weight: 600; color: var(--ink);
}
.universe-explorer .universe-rings { margin: 0 0 0.8rem; }
.universe-explorer .universe-inspector kbd { font-size: var(--fs-small); }

/* A card's head: what it is, and the way back. */
.universe-explorer .universe-inspector__head { align-items: center; margin: 0 0 0.35rem; }
.universe-explorer .universe-inspector__head .universe-inspector__kind { margin: 0; }
.universe-explorer .universe-inspector__kind { font-size: var(--fs-meta); }
.universe-explorer .universe-inspector__clear { min-height: 30px; padding: 0.2rem 0.85rem; font-size: var(--fs-meta); }
.universe-explorer .universe-inspector__title,
.universe-preview .universe-inspector__title {
  margin: 0 0 0.55rem; font-size: 1.42rem; font-weight: 500; line-height: 1.2;
  letter-spacing: -0.005em; text-wrap: balance;
}
.universe-inspector__kind.universe-kicker,
.universe-explorer .universe-inspector__kind.universe-kicker {
  font-family: var(--font-serif); font-size: 1.06rem; color: var(--home-ember);
  font-variant-numeric: lining-nums;
}
.universe-explorer .universe-inspector__title--problem,
.universe-preview .universe-inspector__title--problem {
  font-size: clamp(1.6rem, 1.2rem + 0.75vw, 1.95rem); line-height: 1.1; letter-spacing: -0.012em; margin-bottom: 0.8rem;
}
.universe-chip--status { color: var(--home-ember); border-color: color-mix(in srgb, var(--home-ember) 45%, transparent); background: none; }
.universe-question {
  margin: 0 0 0.85rem; max-width: 54ch;
  font-size: 1.05rem; line-height: 1.6; color: var(--ink-soft); text-wrap: pretty;
}
.universe-tally { margin: 0 0 0.45rem; max-width: 56ch; font-size: var(--fs-meta); line-height: 1.55; color: var(--muted); text-wrap: pretty; }
.universe-paper { margin: 1.15rem 0 0; padding-top: 0.95rem; border-top: 1px solid var(--home-line-strong); }
.universe-label { margin: 0 0 0.25rem; font-size: var(--fs-small); font-weight: 600; color: var(--faint); }
.universe-paper__title { margin: 0; font-family: var(--font-serif); font-size: 1.14rem; line-height: 1.35; color: var(--ink); text-wrap: pretty; }
.universe-paper__title a { color: inherit; text-decoration: none; }
.universe-paper__title a:hover { color: var(--home-ember); text-decoration: none; }
.universe-precis { margin: 0.45rem 0 0; max-width: 58ch; font-size: var(--fs-body); line-height: 1.62; color: var(--ink-soft); text-wrap: pretty; }
.universe-precis .math, .universe-question .math { white-space: normal; }
/* A problem's card opens on Erdős's own wording, quoted on the ember rule
   the landing gives it, then what it says in plain words (10 October 2026). */
.universe-original {
  position: relative; margin: 0 0 0.85rem; padding-left: 0.95rem; max-width: 56ch;
  font-family: var(--font-serif); font-size: 1.08rem; line-height: 1.55; color: var(--ink);
}
.universe-original::before {
  content: ""; position: absolute; left: 0; top: 0.2em; bottom: 0.2em; width: 2px;
  background: color-mix(in oklab, var(--home-ember, var(--accent)) 62%, transparent);
}
.universe-original p { margin: 0; }
.universe-original .universe-original__source { margin-top: 0.35rem; font-family: var(--font-sans, inherit); font-size: var(--fs-meta); color: var(--muted); }
.universe-plain { margin: 0 0 0.85rem; max-width: 56ch; font-size: 1rem; line-height: 1.6; color: var(--ink-soft); text-wrap: pretty; }
.universe-plain strong { font-weight: 600; color: var(--ink); }
.universe-original math, .universe-plain math { font-size: 1.04em; }
.universe-chip .paper-swatch { margin-right: 0.4em; transform: none; }
.universe-precis--waiting { min-height: 3.2em; }
.universe-explorer .universe-go { min-height: 30px; font-size: var(--fs-small); }
.universe-explorer .universe-quote__go .universe-go--primary,
.universe-preview .universe-quote__go .universe-go--primary {
  border-color: var(--home-ember); background: color-mix(in srgb, var(--home-ember) 10%, transparent);
}

/* A problem's results, paper by paper, in the order each states them. */
.universe-list__from {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.1rem 0.6rem;
  margin: 1rem 0 0.35rem; font-size: var(--fs-small); color: var(--muted);
}
.universe-list__from cite { font-style: normal; color: var(--ink-soft); }
.universe-list__count { margin-left: auto; color: var(--faint); white-space: nowrap; font-variant-numeric: tabular-nums; }
.universe-list { list-style: none; margin: 0 0 0.5rem; padding: 0; border-top: 1px solid var(--home-line); }
.universe-item {
  display: grid; grid-template-columns: 0.75rem auto minmax(0, 1fr); align-items: baseline; gap: 0.2rem 0.55rem;
  width: 100%; min-height: 32px; padding: 0.4rem 0.35rem 0.42rem 0.2rem;
  font: inherit; font-size: var(--fs-meta); line-height: 1.42; text-align: left;
  color: var(--ink-soft); background: none; border: 0; border-bottom: 1px solid var(--home-line); border-radius: 0;
  cursor: pointer;
}
.universe-item:hover { color: var(--ink); background: color-mix(in srgb, var(--home-ember) 7%, transparent); }
.universe-item:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.universe-item .glyph { margin: 0; transform: translateY(1px); }
.universe-item__num { color: var(--ink); font-weight: 600; white-space: nowrap; font-variant-numeric: lining-nums tabular-nums; }
.universe-item__name { min-width: 0; overflow-wrap: break-word; }
.universe-item__num:last-child { grid-column: 2 / -1; }
.universe-list--goto { border-top: 0; }
.universe-list--goto .universe-goto { border-top: 0; border-bottom: 1px solid var(--home-line); }
.universe-link__count { margin-left: 0.35rem; color: var(--faint); }
.universe-explorer .universe-link__how { font-size: var(--fs-small); color: var(--muted); }

/* A chosen result's problem, said in one line over its card. */
.universe-context {
  display: flex; align-items: baseline; gap: 0.15rem 0.65rem; flex-wrap: wrap;
  margin: 0 0 0.85rem; padding: 0 0 0.7rem; border-bottom: 1px solid var(--home-line);
  font-size: var(--fs-meta); line-height: 1.4; color: var(--muted);
}
.universe-context__go {
  flex: none; min-height: 24px; padding: 0; border: 0; background: none; cursor: pointer;
  font: inherit; font-family: var(--font-serif); font-size: 1rem; color: var(--home-ember);
  text-decoration: underline; text-decoration-color: color-mix(in srgb, var(--home-ember) 40%, transparent);
  text-underline-offset: 0.2em;
}
.universe-context__go:hover { text-decoration-color: currentColor; }
.universe-context__go:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: var(--r-xs); }
.universe-context__title { min-width: 0; text-wrap: pretty; }
.universe-explorer .universe-result__where { margin: 0 0 0.75rem; font-size: var(--fs-meta); }
.universe-explorer .universe-quote__text { font-size: 1rem; line-height: 1.6; }

/* The Lean statements, after the checks, each name a way to its line. */
.universe-lean { margin: 0.2rem 0 0; }
.universe-explorer .universe-lean__where { font-size: var(--fs-small); color: var(--muted); }
.universe-explorer .universe-lean__name { font-size: var(--fs-small); }
.universe-explorer .universe-lean__code { font-size: 0.8rem; max-height: 22rem; }

/* What the pointer is on, over the panel's body: the panel below it is left
   exactly as it was. It is the page's own ground, flat, and never takes a
   click (the pointer is on the map). */
.universe-preview {
  position: absolute; z-index: 4; left: 0; right: 0; bottom: 0; top: 0;
  overflow: hidden; pointer-events: none;
  padding: 16px var(--explorer-pad) 40px;
  background: var(--page);
}
.universe-preview[hidden] { display: none; }
.universe-preview .universe-inspector__hint { color: var(--muted); font-size: var(--fs-meta); }

/* Without scripts the views stand in order under the problems, each
   parted by a rule; with them one view stands at a time (the panel views,
   below). */
.universe-rest > section {
  max-width: 62ch; margin: 0; padding: 1.5rem 0 0.5rem;
  border-top: 1px solid var(--home-line-strong);
}
.universe-rest { margin-top: 1.6rem; }
.universe-rest .universe-section__title { margin-top: 0; }
.universe-show .universe-filters { gap: 0.9rem; }
.universe-show .universe-filter__label { font-size: var(--fs-meta); }
.universe-show .universe-scope__choices button,
.universe-show .universe-checking select { min-height: 36px; font-size: var(--fs-meta); }
.universe-show .universe-overlap { font-size: var(--fs-meta); }
.universe-show .universe-filter__help { font-size: var(--fs-small); }
.universe-show .universe-keys { display: grid; gap: 0.7rem; margin: 1.1rem 0 0.4rem; padding: 0; border: 0; background: none; }
.universe-show .universe-key__label { flex: 0 0 100%; margin: 0 0 0.1rem; font-size: var(--fs-meta); color: var(--ink-soft); }
.universe-show .universe-key__btn { min-height: 30px; font-size: var(--fs-meta); }
.universe-show .universe-count { margin: 0.5rem 0 0.9rem; font-size: var(--fs-small); color: var(--muted); }
.universe-full { display: grid; justify-items: start; gap: 0.45rem; margin: 0 0 0.5rem; }
.universe-full__note { margin: 0; max-width: 52ch; font-size: var(--fs-small); line-height: 1.5; color: var(--muted); }
.universe-explorer .universe-about { max-width: 62ch; margin: 0; }
.universe-explorer .universe-about p { font-size: var(--fs-body); }
.universe-explorer .universe-index { margin: 0; }
.universe-index h3 { margin: 1.1rem 0 0.35rem; font-size: var(--fs-meta); font-weight: 600; color: var(--ink); }
.universe-index .note { margin: 0 0 0.35rem; font-size: var(--fs-small); line-height: 1.5; color: var(--muted); }
.universe-explorer .universe-index ul { columns: 1; margin: 0 0 0.4rem; padding: 0; }
.universe-explorer .universe-index li { padding: 0.14rem 0; font-size: var(--fs-meta); line-height: 1.45; }

/* The key on the drawing: the marks a result wears, in its bottom-left
   corner, one per line, so the ring keeps its room. It never takes the
   pointer from the map. */
.universe-explorer .explorer__legend.universe-marks {
  right: auto; flex-direction: column; align-items: flex-start; gap: 0.1rem;
}
.universe-explorer .explorer__legend.universe-marks > * { pointer-events: none; }
.universe-marks .universe-evidence-key { padding: 0.1rem 0; gap: 0.55rem; font-size: var(--fs-meta); color: var(--muted); }
.universe-marks .glyph { width: 11px; height: 11px; }

/* Definition links in the panel read as plain prose, as on the reading pages. */
.universe-explorer a.narrative-ref--term,
.universe-explorer a.narrative-ref--term.is-term-first,
.universe-explorer a.narrative-ref--term.is-term-again { color: inherit; text-decoration-line: none; }
.universe-explorer a.narrative-ref--term:hover,
.universe-explorer a.narrative-ref--term:focus-visible {
  text-decoration-line: underline; text-decoration-style: dotted; text-decoration-thickness: 1px;
  text-decoration-color: color-mix(in srgb, var(--accent) 60%, transparent); text-underline-offset: 0.2em;
}

/* Without scripts the drawing cannot be made: the stage says so, and the
   panel's lists carry every object. */
.universe-explorer .universe-nojs {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
  max-width: 40ch; margin: 0; padding: 0; text-align: center;
}
html:not(.scripting) .universe-explorer .explorer__stage > canvas,
html:not(.scripting) .universe-explorer .explorer__tools,
html:not(.scripting) .universe-explorer .universe-show { display: none; }

@media (max-width: 899px) {
  .universe-explorer .universe-find { margin-top: 0.7rem; }
  .universe-explorer .explorer__legend.universe-marks { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .universe-explorer .universe-problem, .universe-item { transition: none; }
}

/* A closer view brings marks into the corners, so the key steps aside
   while the reader explores and returns with Fit. */
.universe-explorer .explorer__legend.universe-marks {
  transition: opacity 200ms var(--ease-out, ease-out), visibility 0s linear 0s;
}
.universe-explorer.is-explored .explorer__legend.universe-marks {
  opacity: 0; visibility: hidden;
  transition: opacity 160ms var(--ease-out, ease-out), visibility 0s linear 160ms;
}
.universe-explorer .dot, .universe-preview .dot {
  display: inline-block; flex: none; width: 9px; height: 9px; border-radius: 50%;
}
.universe-explorer .universe-inspector__kind .dot,
.universe-preview .universe-inspector__kind .dot { display: none; }
.universe-lean__code code { background: none; padding: 0; border-radius: 0; color: inherit; font-size: inherit; }
.universe-explorer .universe-quote__text .math-display,
.universe-preview .universe-quote__text .math-display { scrollbar-width: thin; }
/* Over a closer view the marks pass under the controls; the controls stand
   on the page's own flat ground, so no mark shows through a button. */
.universe-explorer .explorer-tool { background: var(--page); backdrop-filter: none; -webkit-backdrop-filter: none; }
.universe-explorer .explorer__zoom { background: var(--page); }
/* A formula still wider than the measure keeps a visible track under it. */
.universe-explorer .universe-quote__text .math-display { scrollbar-color: var(--rule-strong) transparent; }
/* A match's name is read whole: it wraps under itself rather than ending
   in an ellipsis. */
.universe-explorer .universe-result { align-items: start; }
.universe-explorer .universe-result__label { white-space: normal; overflow: visible; text-overflow: clip; text-wrap: pretty; }
.universe-explorer .universe-result .glyph, .universe-explorer .universe-result .dot { margin-top: 0.35em; }
.universe-explorer .universe-index code { overflow-wrap: normal; word-break: normal; }

/* ---- The universe reader's states (6 October 2026) --------------------------
   The panel says which of two things it is showing. A card the pointer only
   rests on is a preview: it covers the whole panel (the page underneath is
   kept exactly as the reader left it) and says "Preview" where a kept card
   has its Back or Close. A kept card turns the panel's edge toward the map
   ember, as the landing's column turns its rule ember when it holds a
   result, so what is held reads as held from across the window. */
.universe-preview { max-width: none; }
.universe-inspector__head--preview { align-items: baseline; }
.universe-preview__tag {
  flex: none; margin-left: auto;
  font-size: var(--fs-small); line-height: 1.3; letter-spacing: 0.02em;
  color: var(--faint);
}
.universe-explorer .explorer__panel {
  transition: border-color 220ms var(--ease-out, ease-out);
}
.universe-explorer.is-reading .explorer__panel {
  border-right-color: color-mix(in oklab, var(--home-ember) 62%, var(--home-line-strong));
}
@media (max-width: 899px) {
  .universe-preview__tag { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .universe-explorer .explorer__panel { transition: none; }
}

/* ---- The universe reader as a page (7 October 2026) ------------------------
   Once something is kept, the map's own title steps down to a running
   head naming the place (the panel views, below) and the kept object's
   title leads. A
   kept result reads down the panel as a page of an edition: its problem as
   a running head; one folio line with the way through its paper and the
   way back, quiet and always in the same place, so stepping through a
   paper never hunts for its buttons; the title; where it is stated and how
   far it is checked, in one line; then the statement on the panel's own
   ground behind one fine ember rule, the largest uninterrupted thing in
   the panel. Status keeps its glyph and words, never its colour alone. */
.universe-explorer .universe-context { margin: 0 0 0.35rem; padding: 0; border-bottom: 0; }
.universe-explorer .universe-folio {
  display: flex; align-items: center; justify-content: space-between; gap: 0.5rem;
  margin: 0 0 1rem; padding: 0 0 0.45rem; border-bottom: 1px solid var(--home-line);
}
.universe-folio__room { flex: 1 1 auto; }
.universe-folio .universe-step {
  flex: 0 1 auto; justify-content: flex-start; gap: 0.1rem;
  margin: 0 0 0 -0.5rem; padding: 0; border: 0; border-radius: 0; background: none;
}
.universe-folio .universe-step__btn {
  min-height: 32px; padding: 0.2rem 0.5rem; font-size: var(--fs-meta);
  color: var(--muted); background: none; border-color: transparent;
}
.universe-folio .universe-step__btn:hover:not([disabled]) { color: var(--ink); border-color: var(--home-line-strong); }
.universe-folio .universe-step__btn[disabled] { opacity: 0.32; }
.universe-folio .universe-step__at { min-width: 6.2rem; gap: 3px; color: var(--muted); }
.universe-folio .universe-step__knock { stroke: var(--page); }
.universe-folio .universe-inspector__clear { flex: none; }
.universe-explorer .universe-inspector .universe-inspector__title {
  margin-bottom: 0.4rem; font-size: 1.7rem; line-height: 1.14; letter-spacing: -0.008em;
}
.universe-explorer .universe-result__where {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.2rem 1rem;
  margin: 0 0 1.15rem; color: var(--muted);
}
.universe-result__where .universe-chip,
.universe-result__where .universe-chip--replayed,
.universe-result__where .universe-chip--lean {
  margin: 0; padding: 0; border: 0; border-radius: 0; background: none;
  font-size: inherit; color: var(--ink-soft); white-space: nowrap;
}
.universe-explorer .universe-inspector .universe-quote { margin: 0 0 1.25rem; }
.universe-explorer .universe-inspector .universe-quote__text {
  padding: 0.1rem 0 0.15rem 1.1rem; background: none; border-radius: 0;
  border-left: 1px solid color-mix(in oklab, var(--home-ember) 62%, transparent);
  font-size: 1.125rem; line-height: 1.64;
}
.universe-explorer .universe-inspector .universe-quote__from { margin: 0 0 0.55rem; }
.universe-explorer .universe-inspector .universe-quote__go { margin-top: 0.9rem; }
/* Two papers' statements: a row of quiet tabs, the chosen one underlined
   in ember, and the reason there are two said before them. */
.universe-explorer .universe-quote__tabs { align-items: baseline; gap: 0.15rem 0.6rem; margin: 0 0 0.6rem; }
.universe-quote__twins { color: var(--faint); font-size: var(--fs-small); margin-right: 0.15rem; }
/* A narrower panel keeps the two tabs on one line; the tab list's name says why there are two. */
@media (max-width: 1279px) { .universe-quote__twins { display: none; } }
.universe-explorer .universe-quote__tab {
  min-height: 30px; padding: 0.2rem 0.1rem; font-size: var(--fs-small);
  background: none; border: 0; border-bottom: 1px solid transparent; border-radius: 0;
}
.universe-explorer .universe-quote__tab:hover { border-bottom-color: var(--home-line-strong); }
.universe-explorer .universe-quote__tab[aria-selected="true"] {
  color: var(--ink); background: none; border-bottom-color: var(--home-ember);
}
/* A claim's notation, set on the card: indices sit on the line's own lead. */
.universe-inspector__title sub, .universe-inspector__title sup,
.universe-inspector__body sub, .universe-inspector__body sup,
.universe-inspector__boundary sub, .universe-inspector__boundary sup { font-size: 0.74em; line-height: 0; }
@media (min-width: 1800px) {
  .universe-explorer .universe-inspector .universe-inspector__title { font-size: 1.85rem; }
  .universe-explorer .universe-inspector .universe-quote__text { font-size: 1.1875rem; }
}

/* ---- The page refers to the figure (7 October 2026) -------------------------
   A kept result's references (where it is stated, its counterpart in the
   other paper, Comparator's replay, Palomar's corpus) identify their
   relation on the map when rested on or focused. They carry one quiet mark
   of that: a dotted rule under inline words, and a held row warms to the
   map's ember, so a reader can see which words the figure answers. */
.universe-explorer .universe-result__place[data-universe-refer] {
  text-decoration: underline dotted; text-decoration-thickness: 1px;
  text-decoration-color: color-mix(in oklab, var(--muted) 60%, transparent);
  text-underline-offset: 0.24em;
}
.universe-explorer .universe-result__place.is-referred { color: var(--ink); text-decoration-color: var(--home-ember); }
.universe-explorer .universe-check[data-universe-refer] {
  border-radius: var(--r-sm);
  transition: background-color 160ms var(--ease-out, ease-out), box-shadow 160ms var(--ease-out, ease-out);
}
.universe-explorer .universe-check.is-referred {
  background: color-mix(in oklab, var(--home-ember) 8%, transparent);
  box-shadow: 0 0 0 0.4rem color-mix(in oklab, var(--home-ember) 8%, transparent);
}
.universe-explorer .universe-quote__tab.is-referred:not([aria-selected="true"]) { color: var(--ink); border-bottom-color: var(--home-line-strong); }
/* A claim's assertion reads as a statement: the paper results' serif and
   measure behind the same fine rule, upright, since a claim is not quoted
   from a paper's theorem. */
.universe-explorer .universe-inspector .universe-claim__statement {
  margin: 0.2rem 0 1.15rem; padding: 0.1rem 0 0.15rem 1.1rem;
  border-left: 1px solid color-mix(in oklab, var(--home-ember) 62%, transparent);
  font-family: var(--font-serif); font-size: 1.0625rem; line-height: 1.64; color: var(--ink);
  text-wrap: pretty;
}
/* A run of relations too wide for the measure, stacked on its signs. */
.universe-quote__text mtable.universe-stack > mtr > mtd { padding: 0.14em 0; }
.universe-quote__text mtable.universe-stack > mtr > mtd:first-child:not(.universe-stack__lhs) { padding-right: 0.9em; }
.universe-quote__text .universe-stack__lhs { text-align: right; }
.universe-quote__text .universe-stack__rhs { text-align: left; }
.universe-explorer .universe-quote__text .math-display.is-wide { scrollbar-color: color-mix(in oklab, var(--home-ember) 70%, transparent) transparent; }
@media (prefers-reduced-motion: reduce) {
  .universe-explorer .universe-check[data-universe-refer] { transition: none; }
}

/* ---- The universe reader's type (6 October 2026) ----------------------------
   Each kind of reading has its own size: the chosen object's title is read
   first and stands a step larger; a quoted statement, the mathematics the
   card exists to show, is set a little above body size so its formulae read
   at the paper's own scale; the lists and asides keep their smaller steps,
   so a long index stays quick to scan. Where the panel is wide (a monitor),
   the title and the statement take one more step. */
.universe-explorer .universe-inspector__title,
.universe-preview .universe-inspector__title { font-size: 1.5rem; line-height: 1.18; }
.universe-explorer .universe-quote__text { font-size: 1.0625rem; line-height: 1.62; }
@media (min-width: 1800px) {
  .universe-explorer .universe-inspector__title,
  .universe-preview .universe-inspector__title { font-size: 1.62rem; }
  .universe-explorer .universe-quote__text,
  .universe-explorer .universe-question,
  .universe-explorer .universe-precis { font-size: 1.125rem; }
}

/* ---- The overview as a folio (6 October 2026) ---------------------------
   The overview is the collection's opening, not a manual page: the maths
   navigation lives in the Menu drawer here (body.docs-nav-drawer), and the
   page takes the whole frame in five movements. An opening sets the title
   beside one real expression on a plate; the eight programmes follow as a
   two-column numbered index; then one wide feature, the map, and spreads
   whose heads sit in the left column and whose text starts on the right
   column's edge, so every section below the index shares the index's grid.
   The papers, problem pages and guides keep their sidebars and frame. */
body.maths-folio .maths-layout--folio { grid-template-columns: minmax(0, 1fr); }
body.maths-folio .maths-layout--folio .docs-main { padding-top: 0; }
.maths-layout--folio .docs-main > .wrap.folio { width: 100%; max-width: none; margin-inline: 0; }
.folio { --folio-gap: clamp(2.5rem, 5vw, 5.5rem); }
.reading-index.folio .problem-directory,
.reading-index.folio .reading-shelf,
.reading-index.folio .fact-list,
.reading-index.folio .universe-teaser,
.reading-index.folio > .maths-receipt { max-width: none; }

/* The opening: title and lede on the left, the plate on the right. */
.reading-index.folio .folio-cover {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--space-6) var(--folio-gap);
  align-items: center;
  padding: 2.25rem 0 1.75rem;
}
@media (min-width: 1000px) {
  .reading-index.folio .folio-cover { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
}
.folio-kicker {
  margin: 0 0 var(--space-4);
  color: var(--home-ember);
  font-size: var(--fs-meta);
  font-weight: 600;
  letter-spacing: 0.01em;
}
.reading-index.folio .folio-cover h1 {
  font-size: clamp(1.9rem, 1.2rem + 2.7vw, 4.4rem);
  line-height: 1.04;
  letter-spacing: -0.02em;
  margin: 0 0 var(--space-5);
}
.reading-index.folio .folio-cover .maths-hero__lede { max-width: 34em; margin-bottom: var(--space-4); }
/* Each sentence of the title keeps its own line where the column allows. */
.folio-cover h1 .folio-line { display: inline-block; }
.reading-index.folio .folio-cover .maths-hero__map { margin: var(--space-3) 0 0; max-width: 40em; font-size: var(--fs-meta); }

/* The plate is a sheet of the page's own theme, one step lifted and edged
   with a hairline, the landing's results sheet: a paper sheet by day, an
   ink sheet by night, the expression set large in display style in the
   page's ink (8 October 2026). It used to reverse the page, ivory on the
   night ground, the brightest thing on the screen; Will turned the
   results sheet the same way ("it needs to be tailored for the dark mode
   thing as well"). */
.folio-specimen { margin: 0; min-width: 0; }
.folio-specimen__plate {
  display: grid;
  place-items: center;
  min-height: clamp(11rem, 18vw, 15rem);
  padding: clamp(1.75rem, 3.5vw, 3rem) clamp(1rem, 3vw, 2.5rem);
  --folio-sheet: #fcf7ee; --folio-edge: rgba(25, 21, 32, 0.10);
  background: var(--folio-sheet);
  color: var(--ink);
  box-shadow: 0 0 0 1px var(--folio-edge);
  border-radius: var(--r-md);
  font-size: clamp(1.3rem, 0.75rem + 1.45vw, 2.25rem);
  overflow-x: auto;
}
.folio-specimen__plate .math.display { display: block; margin: 0; }
/* On a phone the widest statement (#243's two conditions) still fits the plate. */
@media (max-width: 640px) { .folio-specimen__plate { font-size: 1.1rem; padding-inline: 0.6rem; } }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme]) .folio-specimen__plate { --folio-sheet: #231b2f; --folio-edge: rgba(242, 230, 212, 0.085); }
}
:root[data-theme="dark"] .folio-specimen__plate { --folio-sheet: #231b2f; --folio-edge: rgba(242, 230, 212, 0.085); }
.folio-specimen__plate mjx-container[display="true"],
.folio-specimen__plate math[display="block"] { margin: 0; color: inherit; }
/* One formula per programme. The numbers above the plate are radio
   buttons, so the choice works without a script and from the keyboard. The
   slides share one grid cell, so the plate keeps the tallest one's height
   and the page never moves when the reader picks another problem. */
.folio-specimen__picks { display: flex; flex-wrap: wrap; gap: 0.35rem; margin: 0 0 var(--space-3); }
.folio-specimen__picks label { position: relative; cursor: pointer; }
.folio-specimen__picks input { position: absolute; inset: 0; opacity: 0; margin: 0; cursor: pointer; }
.folio-specimen__picks span {
  display: inline-flex; align-items: center; min-height: 2rem; padding: 0.2rem 0.7rem;
  border: 1px solid var(--rule-strong); border-radius: 999px;
  font-family: var(--font-serif); font-size: 0.98rem; color: var(--ink-soft);
  font-variant-numeric: lining-nums tabular-nums;
}
.folio-specimen__picks label:hover span { border-color: var(--home-ember); color: var(--ink); }
.folio-specimen__picks input:checked + span { border-color: var(--ink); background: var(--ink); color: var(--page); }
.folio-specimen__picks input:focus-visible + span { outline: 2px solid var(--accent); outline-offset: 2px; }
.folio-specimen__slides { display: grid; grid-template-columns: minmax(0, 1fr); }
.folio-specimen__slide { grid-area: 1 / 1; min-width: 0; visibility: hidden; }
.folio-specimen__picks:has(label:nth-child(1) input:checked) + .folio-specimen__slides > :nth-child(1),
.folio-specimen__picks:has(label:nth-child(2) input:checked) + .folio-specimen__slides > :nth-child(2),
.folio-specimen__picks:has(label:nth-child(3) input:checked) + .folio-specimen__slides > :nth-child(3),
.folio-specimen__picks:has(label:nth-child(4) input:checked) + .folio-specimen__slides > :nth-child(4),
.folio-specimen__picks:has(label:nth-child(5) input:checked) + .folio-specimen__slides > :nth-child(5),
.folio-specimen__picks:has(label:nth-child(6) input:checked) + .folio-specimen__slides > :nth-child(6),
.folio-specimen__picks:has(label:nth-child(7) input:checked) + .folio-specimen__slides > :nth-child(7),
.folio-specimen__picks:has(label:nth-child(8) input:checked) + .folio-specimen__slides > :nth-child(8),
.folio-specimen__picks:has(label:nth-child(9) input:checked) + .folio-specimen__slides > :nth-child(9),
.folio-specimen__picks:has(label:nth-child(10) input:checked) + .folio-specimen__slides > :nth-child(10) { visibility: visible; }
/* Without :has the numbers cannot choose, so the first formula stands alone. */
@supports not selector(:has(*)) {
  .folio-specimen__picks { display: none; }
  .folio-specimen__slide:first-child { visibility: visible; }
}
.folio-specimen__caption { margin-top: var(--space-4); max-width: 36em; }
.folio-specimen__label {
  display: inline-block;
  font-family: var(--font-serif);
  font-size: 1.2rem;
  color: var(--ink);
  text-decoration: none;
}
.folio-specimen__label span { color: var(--home-ember); font-variant-numeric: lining-nums tabular-nums; margin-right: 0.3em; }
.folio-specimen__label:hover { color: var(--accent); }
.folio-specimen__caption p { margin: var(--space-1) 0 0; color: var(--muted); font-size: var(--fs-base); line-height: var(--lh-body); }

/* The page's contents, one line between the opening and the index. */
.folio-nav {
  display: flex;
  flex-wrap: wrap;
  gap: 0.15rem 1.9rem;
  padding: 0.75rem 0;
  margin: 0 0 var(--space-4);
  border-block: 1px solid var(--rule);
  font-size: var(--fs-body);
}
.folio-nav a { color: var(--ink-soft); padding-block: 0.25rem; text-decoration: none; }
.folio-nav a:hover { color: var(--accent); text-decoration: underline; text-underline-offset: 0.2em; }

/* The eight programmes: two open columns of numbered entries on one grid. */
.reading-index.folio .problem-section__head h2,
.reading-index.folio .folio-spread__head h2 {
  font-family: var(--font-serif);
  font-size: clamp(1.6rem, 1.2rem + 0.9vw, 2.1rem);
  line-height: 1.15;
  margin: 0 0 var(--space-2);
}
.reading-index.folio .problem-section__head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.25rem 1.5rem; margin-bottom: var(--space-3); }
.reading-index.folio .problem-section__head h2 { margin: 0; }
.reading-index.folio .problem-section__head .note { font-size: var(--fs-base); }
@media (min-width: 1000px) {
  .reading-index.folio .problem-directory {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: var(--folio-gap);
  }
}
.reading-index.folio .problem-entry { padding: 1.4rem 0 1.9rem; }
.reading-index.folio .problem-entry__title { display: block; }
.reading-index.folio .problem-entry__title > span {
  display: block;
  margin-bottom: 0.3rem;
  font-family: var(--font-serif);
  font-size: 1.05rem;
  color: var(--home-ember);
  font-variant-numeric: lining-nums tabular-nums;
}
.reading-index.folio .problem-entry__title strong {
  font-family: var(--font-serif);
  font-size: clamp(1.4rem, 1.1rem + 0.6vw, 1.7rem);
  line-height: 1.2;
  font-weight: 500;
  color: var(--ink);
}
.reading-index.folio .problem-entry__title:hover strong { color: var(--accent); }
.reading-index.folio .problem-entry > p { margin: 0.6rem 0 0; max-width: 32em; }
.reading-index.folio .problem-entry__question { font-size: 1.125rem; line-height: 1.55; }
.reading-index.folio .problem-entry__note { font-size: var(--fs-base); }
.reading-index.folio .problem-entry__links { margin: 0.9rem 0 0; font-size: var(--fs-base); }

/* Spreads: the head on the left column, the text from the right column's
   edge, the same two columns and gap as the problem index above. */
.reading-index.folio .folio-spread { margin: var(--space-8) 0 0; padding-top: var(--space-5); border-top: 1px solid var(--rule-strong); }
.folio-spread__body > :first-child { margin-top: 0; }
.folio-spread__body > p { max-width: 32em; }
.folio-spread__action { margin: var(--space-4) 0 var(--space-5); }
@media (min-width: 1000px) {
  .reading-index.folio .folio-spread {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: var(--folio-gap);
  }
  .reading-index.folio > details.dossier-section,
  .reading-index.folio > .maths-receipt { margin-left: calc(50% + var(--folio-gap) / 2); }
}
.reading-index.folio .folio-spread .maths-hero__about { max-width: none; }
@media (min-width: 1000px) {
  .reading-index.folio #documents .fact-list { columns: 2; column-gap: 2rem; }
  /* A spread's head travels with a long body, so its name stays in view. */
  .reading-index.folio .folio-spread__head { position: sticky; top: calc(var(--topbar-h) + 1.5rem); align-self: start; }
}

/* The feature: the paper read across all eight, set as large as a title. */
.reading-index.folio .folio-feature { border-top: 2px solid var(--ink); }
.reading-index.folio .folio-feature__papers { margin-top: var(--space-5); }
.folio-feature__papers li { display: block; padding: 0 0 var(--space-5); border-bottom: 0; }
.folio-feature__title {
  display: block;
  font-family: var(--font-serif);
  font-size: clamp(1.4rem, 1.1rem + 0.6vw, 1.7rem);
  line-height: 1.2;
  color: var(--ink);
  text-decoration: none;
}
.folio-feature__title:hover { color: var(--accent); }
.reading-index.folio .folio-feature__papers li > p { margin: var(--space-3) 0 0; max-width: 32em; font-size: 1.0625rem; }
.folio-feature__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-5); margin-top: var(--space-4); }
.folio-feature__actions > a:first-child { font-weight: 600; }

/* The map takes the whole frame. */
.reading-index.folio .universe-teaser { margin: var(--space-8) 0 0; }
.reading-index.folio .universe-canvas--teaser { height: clamp(320px, 36vw, 520px); }

/* Papers that no programme entry opens: one quiet line each. */
.reading-index.folio .paper-shelves > .folio-spread__body > h3 {
  font-family: var(--font-serif); font-size: 1.15rem; font-weight: 600; margin: var(--space-6) 0 var(--space-2);
}
.folio-papers { list-style: none; margin: 0; padding: 0; }
.folio-papers li { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 0.15rem 1rem; padding: 0.7rem 0; border-top: 1px solid var(--u-edge); }
.folio-papers li:last-child { border-bottom: 1px solid var(--u-edge); }
.folio-papers__meta { color: var(--muted); font-size: var(--fs-meta); }
.folio-papers__meta a { margin-left: 0.35rem; font-weight: 600; }

.reading-index.folio > details.dossier-section > summary { font-size: 1.2rem; }
.reading-index.folio > details.dossier-section { margin-top: var(--space-6); }

/* The way back rests as its arrow at the frame's corner, as on the papers
   catalogue; pointer or keyboard focus opens its label in place. */
body.maths-folio.has-viewback:has(.maths-layout) .viewback:not(:hover):not(:focus-visible) {
  min-width: 0; gap: 0; padding: 0; width: 2.5rem; height: 2.5rem; justify-content: center; border-radius: 999px;
}
body.maths-folio.has-viewback:has(.maths-layout) .viewback:not(:hover):not(:focus-visible) .viewback__label { display: none; }
@media (min-width: 1081px) {
  body.maths-folio.has-viewback:has(.maths-layout) .viewback:is(:hover, :focus-visible) { width: auto; max-width: 22rem; }
}
/* The resting arrow sits above the opening's first line, never on it. */
body.maths-folio.has-viewback .reading-index.folio .folio-cover { padding-top: 4rem; }

/* ---- The universe panel as a guide (6 October 2026) -------------------------
   Type B review of the map's reading panel: it reads to the reader's current
   question, one view at a time, rather than as one long document. The head
   keeps the way back, the switch to the system map, the title, the search
   and the panel's two destinations (Problems, Index) with its two tools
   (Map filters, How to read); at depth the title steps down and the head
   names the place being read. The body shows the view universe.js sets on
   the explorer as data-universe-view; without scripts the attribute is
   absent and every view stands in order, the index being the map's text
   alternative. One grid: the search, rows, rules and summaries share the
   panel's left and right edges (--u-gutter is the body's scrollbar, so
   the head's right edge meets the body's); only prose keeps a measure. */
.universe-explorer .explorer__head { padding-right: calc(var(--explorer-pad) + var(--u-gutter, 0px)); }

/* The title, and at depth the place being read as a short trail that
   runs on from the title, as a running head does, and wraps under it. */
.universe-heading { display: block; }
.universe-explorer.is-deep .explorer__title { display: inline; }
.universe-where { display: inline; margin: 0; }
.universe-where[hidden] { display: none; }
.universe-where__seg, .universe-where__sep, .universe-where::before {
  font-family: var(--font-serif); font-size: 1.12rem; line-height: 1.4;
}
.universe-where__seg { color: var(--ink-soft); overflow-wrap: anywhere; }
.universe-where__seg:last-child { color: var(--ink); }
.universe-where__sep, .universe-where::before { color: var(--faint); padding: 0 0.4em; }
.universe-where:not([hidden])::before { content: "/"; }
.universe-explorer.is-deep .explorer__title {
  font-size: 1.12rem; line-height: 1.4; letter-spacing: 0; color: var(--muted);
}
@media screen and (prefers-reduced-motion: no-preference) {
  .universe-explorer .explorer__title { transition: font-size 160ms var(--ease-out, ease-out), color 160ms var(--ease-out, ease-out); }
}
.universe-explorer .universe-find { margin-top: 0.8rem; }
.universe-explorer.is-deep .universe-find { margin-top: 0.65rem; }
.universe-find__none {
  margin: 0.55rem 0 0; font-size: var(--fs-meta); line-height: 1.5; color: var(--ink-soft); text-wrap: pretty;
}
.universe-find__none[hidden] { display: none; }

/* Problems and Index are peers: two plain tabs, the open one underlined in
   ink. The tools are quiet outlined buttons at the row's other end. */
.universe-nav {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: 0.4rem 0.75rem; margin: 0.7rem 0 -0.2rem;
}
.universe-explorer:not([data-universe-view]) .universe-nav { display: none; }
.universe-tabs { display: flex; gap: 1.1rem; }
.universe-tab {
  min-height: 36px; padding: 0.35rem 0 0.25rem; border: 0; border-bottom: 2px solid transparent; border-radius: 0;
  background: none; cursor: pointer; font: inherit; font-size: 0.9375rem; font-weight: 600; line-height: 1.2;
  color: var(--muted);
}
.universe-tab:hover { color: var(--ink-soft); }
.universe-tab[aria-pressed="true"] { color: var(--ink); border-bottom-color: var(--ink); }
.universe-tab:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 3px; }
.universe-utils { display: flex; flex-wrap: wrap; gap: 6px; }
.universe-util {
  display: inline-flex; align-items: center; gap: 0.4rem;
  min-height: 32px; padding: 0 0.7rem; border: 0; border-radius: var(--r-pill); cursor: pointer;
  background: none; box-shadow: 0 0 0 1px var(--home-line-strong);
  font: inherit; font-size: 0.8125rem; font-weight: 600; line-height: 1; color: var(--ink-soft);
}
.universe-util svg { width: 14px; height: 14px; flex: none; }
.universe-util:hover { color: var(--ink); box-shadow: 0 0 0 1px color-mix(in srgb, var(--ink) 38%, transparent); }
.universe-util[aria-pressed="true"] {
  color: var(--ink); background: color-mix(in srgb, var(--ink) 8%, var(--page));
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--ink) 45%, transparent);
}
.universe-util:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.universe-util__badge {
  display: inline-grid; place-items: center; min-width: 1.15rem; height: 1.15rem; padding: 0 0.3rem;
  border-radius: var(--r-pill); background: var(--ink); color: var(--page);
  font-size: 0.6875rem; font-weight: 700; font-variant-numeric: tabular-nums;
}
.universe-util__badge[hidden] { display: none; }

/* An active filter stays said under the head, with its reset, whatever
   view is open. */
.universe-filtered {
  display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 0.2rem 0.8rem;
  margin: 0.8rem 0 0; padding: 0.45rem 0.7rem 0.5rem;
  border: 1px solid color-mix(in srgb, var(--accent) 38%, transparent); border-radius: var(--r-sm, 6px);
  background: color-mix(in srgb, var(--accent) 8%, var(--page));
}
.universe-filtered[hidden] { display: none; }
.universe-filtered__text { flex: 1 1 14rem; margin: 0; font-size: var(--fs-meta); line-height: 1.45; color: var(--ink); text-wrap: pretty; }
.universe-filtered__acts { display: inline-flex; gap: 0.9rem; }
.universe-filtered__btn, .universe-inline-btn {
  min-height: 24px; padding: 0; border: 0; background: none; cursor: pointer;
  font: inherit; font-size: inherit; font-weight: 600; color: var(--accent-strong);
  text-decoration: underline; text-decoration-color: color-mix(in srgb, currentColor 45%, transparent);
  text-underline-offset: 0.18em;
}
.universe-filtered__btn { font-size: var(--fs-meta); }
.universe-inline-btn { min-height: 0; font-weight: 500; }
.universe-filtered__btn:hover, .universe-inline-btn:hover { text-decoration-color: currentColor; }
.universe-filtered__btn:focus-visible, .universe-inline-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 2px; }
.universe-filtered__btn:disabled, .universe-inline-btn[hidden] { display: none; }

/* One view at a time, once the engine has set one. */
.universe-explorer[data-universe-view] [data-universe-pane] { display: none; }
.universe-explorer[data-universe-view="index"] [data-universe-pane="index"],
.universe-explorer[data-universe-view="filters"] [data-universe-pane="filters"],
.universe-explorer[data-universe-view="about"] [data-universe-pane="about"] { display: block; }
.universe-explorer:is([data-universe-view="index"], [data-universe-view="filters"], [data-universe-view="about"]) .universe-inspector { display: none; }
.universe-explorer[data-universe-view] .universe-rest { margin: 0; }
.universe-explorer[data-universe-view] .universe-rest > section { max-width: none; margin: 0; padding: 0; border-top: 0; }
.universe-explorer [data-universe-pane] > .universe-section__title:first-of-type,
.universe-explorer .universe-index__head .universe-section__title { margin-top: 0.15rem; }
.universe-pane__lede { margin: 0 0 1rem; font-size: var(--fs-body); line-height: 1.55; color: var(--ink-soft); text-wrap: pretty; }
.universe-explorer :is([data-universe-pane], .universe-inspector) :is(h2, h3)[tabindex="-1"]:focus { outline: none; }
.universe-explorer :is([data-universe-pane], .universe-inspector) :is(h2, h3)[tabindex="-1"]:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 2px; }

/* A view's way back: a labelled text button at its top. */
.universe-paneback {
  display: inline-flex; align-items: center; gap: 0.35rem;
  min-height: 32px; margin: 0 0 0.55rem -0.5rem; padding: 0 0.6rem 0 0.5rem;
  border: 0; border-radius: var(--r-pill); background: none; cursor: pointer;
  font: inherit; font-size: var(--fs-meta); font-weight: 600; color: var(--ink-soft);
}
.universe-paneback:hover { color: var(--ink); background: color-mix(in srgb, var(--ink) 6%, transparent); }
.universe-paneback:focus-visible { outline: 2px solid var(--accent); outline-offset: 0; }
.universe-paneback[hidden] { display: none; }

/* The Problems view: the lede, the scope in two lines, the problems. */
.universe-lede { margin: 0 0 0.85rem; font-size: var(--fs-body); line-height: 1.55; color: var(--ink-soft); text-wrap: pretty; }
.universe-scope-line {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.1rem 0.9rem;
  margin: 0 0 0.2rem; font-variant-numeric: lining-nums tabular-nums;
}
.universe-scope-line__lead { flex: 0 0 100%; font-size: 0.9375rem; font-weight: 600; line-height: 1.4; color: var(--ink); }
.universe-scope-line__totals { font-size: var(--fs-meta); line-height: 1.5; color: var(--ink-soft); }
.universe-scope-line__go {
  min-height: 24px; padding: 0; border: 0; background: none; cursor: pointer;
  font: inherit; font-size: var(--fs-meta); font-weight: 600; color: var(--accent-strong);
  text-decoration: underline; text-decoration-color: color-mix(in srgb, currentColor 45%, transparent); text-underline-offset: 0.18em;
}
.universe-scope-line__go:hover { text-decoration-color: currentColor; }
.universe-scope-line__go:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 2px; }
.universe-explorer .universe-problems__title { margin-top: 1.5rem; }
.universe-card__index { margin: 1.1rem 0 0; }

/* The index: categories first, each a row that says what it holds. */
.universe-cats { list-style: none; margin: 0.2rem 0 0; padding: 0; border-top: 1px solid var(--home-line-strong); }
.universe-cats__go {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "name count" "desc desc";
  gap: 0.15rem 1rem; align-items: baseline;
  padding: 0.75rem 0.6rem 0.8rem 0; border-bottom: 1px solid var(--home-line);
  color: var(--ink); text-decoration: none;
}
.universe-cats__go:hover { text-decoration: none; background: color-mix(in srgb, var(--ink) 4%, transparent); }
.universe-cats__go:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; border-radius: var(--r-sm, 6px); }
.universe-cats__name { grid-area: name; font-family: var(--font-serif); font-size: 1.0625rem; line-height: 1.3; color: var(--ink); }
.universe-cats__count { grid-area: count; font-size: var(--fs-meta); color: var(--muted); font-variant-numeric: lining-nums tabular-nums; white-space: nowrap; }
.universe-cats__desc { grid-area: desc; font-size: var(--fs-meta); line-height: 1.45; color: var(--muted); text-wrap: pretty; }
.universe-cat { margin: 1.5rem 0 0; }
.universe-cat__title {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.2rem 0.7rem;
  margin: 0 0 0.45rem; font-family: var(--font-serif); font-size: 1.22rem; font-weight: 500; line-height: 1.2; color: var(--ink);
}
.universe-cat__count { font-family: var(--font-sans); font-size: var(--fs-meta); font-weight: 400; color: var(--muted); font-variant-numeric: lining-nums tabular-nums; }
.universe-cat__note { margin: 0 0 0.6rem; font-size: var(--fs-meta); line-height: 1.5; color: var(--muted); text-wrap: pretty; }
.universe-index__scope {
  margin: 0 0 0.8rem; padding: 0.45rem 0.7rem 0.5rem; border-radius: var(--r-sm, 6px);
  border: 1px solid var(--home-line-strong); background: color-mix(in srgb, var(--ink) 4%, var(--page));
  font-size: var(--fs-meta); line-height: 1.5; color: var(--ink-soft);
}
.universe-index__scope b { font-weight: 600; color: var(--ink); }
.universe-index__scope[hidden] { display: none; }
.universe-index__status { margin: 0 0 0.6rem; font-size: var(--fs-meta); line-height: 1.5; color: var(--ink-soft); }
.universe-index__status[hidden], .universe-index__status:empty { display: none; }
.universe-explorer[data-universe-index="cats"] .universe-cat { display: none; }
.universe-explorer:is([data-universe-index="cat"], [data-universe-index="all"]) :is(.universe-cats, .universe-index__head) { display: none; }
.universe-explorer:is([data-universe-index="cat"], [data-universe-index="all"]) .universe-cat:not(.is-open),
.universe-explorer[data-universe-index="all"] .universe-cat.is-empty { display: none; }
.universe-explorer[data-universe-index="cat"] .universe-cat.is-open { margin-top: 0.1rem; }
.universe-explorer[data-universe-index="cat"] .universe-cat__title { font-size: 1.42rem; }
.uidx-list li[hidden] { display: none; }

/* The index's rows: each category its own treatment, on one edge. */
.universe-explorer .universe-index ul.uidx-list,
.uidx-list { list-style: none; columns: 1; margin: 0 0 0.4rem; padding: 0; border-top: 1px solid var(--home-line); }
.universe-explorer .universe-index .uidx-list li { padding: 0; font-size: inherit; line-height: inherit; }
.uidx-row {
  display: grid; grid-template-columns: minmax(0, 1fr); gap: 0.12rem; align-items: baseline;
  min-height: 44px; padding: 0.55rem 0.6rem 0.6rem 0; border-bottom: 1px solid var(--home-line);
  color: var(--ink); text-decoration: none;
}
a.uidx-row:hover { text-decoration: none; background: color-mix(in srgb, var(--ink) 4%, transparent); }
a.uidx-row:hover .uidx-title { color: var(--ink); }
.uidx-row:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; border-radius: var(--r-sm, 6px); }
.universe-explorer .universe-index a.uidx-row { color: var(--ink); }
.uidx-title { min-width: 0; font-size: 0.9375rem; line-height: 1.4; color: var(--ink); overflow-wrap: break-word; text-wrap: pretty; }
.uidx-meta { font-size: var(--fs-meta); line-height: 1.4; color: var(--muted); }
.uidx-tally { font-size: var(--fs-meta); line-height: 1.45; color: var(--ink-soft); font-variant-numeric: lining-nums tabular-nums; text-wrap: pretty; }
.uidx-row .universe-gauge { display: flex; width: 100%; height: 3px; margin-top: 0.35rem; border-radius: 2px; }
.uidx-row--problem { grid-template-columns: 3.6rem minmax(0, 1fr); padding-left: 0.35rem; }
.uidx-num { font-family: var(--font-serif); font-size: 1rem; color: var(--home-ember); font-variant-numeric: lining-nums tabular-nums; }
.uidx-row--problem .uidx-title { font-family: var(--font-serif); font-size: 1.0625rem; line-height: 1.3; }
.uidx-row--claim { grid-template-columns: 0.85rem minmax(0, 1fr); column-gap: 0.6rem; }
.uidx-row--claim .glyph { grid-row: 1 / span 2; align-self: start; margin: 0.32em 0 0; }
.uidx-row--claim .uidx-title, .uidx-row--claim .uidx-meta { grid-column: 2; }
.uidx-ident {
  font-size: 0.75rem; line-height: 1.45; color: var(--muted); background: none; padding: 0;
  overflow-wrap: anywhere; word-break: normal;
}
.uidx-row--module .uidx-title { overflow-wrap: anywhere; }

/* The map filters: grouped, each group named. */
.universe-fgroup { margin: 0 0 1.15rem; }
.universe-explorer .universe-fgroup__title {
  flex: 0 0 100%; margin: 0 0 0.45rem; font-family: var(--font-sans); font-size: 0.875rem; font-weight: 600;
  line-height: 1.3; color: var(--ink);
}
.universe-show .universe-filters { display: block; }
.universe-show .universe-keys { margin: 0; gap: 0; }
.universe-show .universe-key { display: flex; flex-wrap: wrap; gap: 0.35rem 0.5rem; }
.universe-show .universe-count { margin: 0 0 1.15rem; }
.universe-show .universe-full .universe-full__note { margin: 0 0 0.6rem; }
.universe-reset { margin: 0.4rem 0 0; padding-top: 1rem; border-top: 1px solid var(--home-line); }
.universe-reset__btn:disabled { opacity: 0.5; cursor: default; }

/* How to read the map: the key, the evidence in full, the sources. */
.universe-explorer .universe-about__sub {
  margin: 1.6rem 0 0.5rem; font-family: var(--font-sans); font-size: 0.9375rem; font-weight: 600; line-height: 1.3; color: var(--ink);
}
.universe-explorer .universe-about h2 + .universe-about__sub { margin-top: 0.6rem; }
.universe-explorer .universe-about .universe-rings li { font-size: var(--fs-meta); }
.universe-marklist { list-style: none; margin: 0.6rem 0 0; padding: 0; display: grid; gap: 0.3rem; }
.universe-marklist li { display: flex; align-items: center; gap: 0.6rem; font-size: var(--fs-meta); color: var(--ink-soft); }
.universe-marklist .glyph { flex: none; width: 11px; height: 11px; margin: 0; }
.universe-explorer .universe-about p { font-size: var(--fs-body); }
.universe-explorer .universe-about p[data-universe-captions] { font-size: var(--fs-meta); color: var(--muted); }
.universe-explorer .universe-about p[data-universe-captions]:empty { display: none; }
.universe-explorer .universe-about .universe-summary { margin: 0 0 0.4rem; font-size: var(--fs-body); }
.universe-evidence h4.universe-inspector__sub { margin: 1rem 0 0.4rem; font-size: var(--fs-meta); font-weight: 600; color: var(--ink); }
.universe-evidence .universe-inspector__census li { font-size: var(--fs-meta); }
.universe-evidence .universe-inspector__note { font-size: var(--fs-meta); color: var(--muted); }

/* The way back to the page before (docs.js's back pill) keeps its words
   on the map: folded to an arrow it said nothing of what it does. */
html.is-explorer body:has(.universe-explorer) .viewback.is-folded:not(:hover):not(:focus-visible) {
  width: auto; height: auto; gap: 0.45rem; padding: 0.55rem 1rem 0.55rem 0.82rem; justify-content: flex-start;
}
html.is-explorer body:has(.universe-explorer) .viewback.is-folded:not(:hover):not(:focus-visible) .viewback__label { display: inline; }

@media (max-width: 899px) {
  .universe-explorer .explorer__head { padding-right: 16px; }
  .universe-nav { margin-top: 0.55rem; }
}
@media (prefers-reduced-motion: reduce) {
  .universe-explorer .universe-problem { transition: none; }
}
/* An index row that leaves the site keeps its outward mark, at the row's
   right; a row the panel opens as a card (with scripts) has no such mark. */
.uidx-row { position: relative; }
a.uidx-row[data-link-kind="exogenous"] { padding-right: 1.6rem; }
a.uidx-row[data-link-kind="exogenous"]::after { position: absolute; right: 0.5rem; top: 0.62rem; }
.universe-explorer[data-universe-view] a.uidx-row--claim::after,
.universe-explorer.is-full[data-universe-view] a.uidx-row--module::after { content: none; }
.universe-explorer[data-universe-view] a.uidx-row--claim,
.universe-explorer.is-full[data-universe-view] a.uidx-row--module { padding-right: 0.6rem; }
/* On a phone the two destinations and the two tools share one row: the
   tools keep their words and drop their marks. */
@media (max-width: 480px) {
  .universe-tabs { gap: 0.9rem; }
  .universe-util { padding: 0 0.6rem; }
  .universe-util svg { display: none; }
}
/* The way back and the map switch wrap rather than run off a narrow panel,
   and the way back is a full target. */
.universe-explorer .explorer__crumbs { flex-wrap: wrap; row-gap: 0.5rem; }
.universe-explorer .explorer__back { display: inline-flex; align-items: center; gap: 0.3rem; min-height: 28px; }

/* Each problem's two papers have a colour each (Will, 10 October 2026:
   "color code short and long papers"). The swatch is what the map draws:
   the paper's node in the colour, its rows of results on a wash of it. */
.paper-swatch {
  display: inline-block; flex: none; width: 11px; height: 11px; box-sizing: border-box;
  border-radius: 2px; border: 1.5px solid var(--u-paper); vertical-align: baseline; transform: translateY(1px);
}
.paper-swatch--short { border-color: var(--u-paper-short); background: color-mix(in srgb, var(--u-paper-short) 30%, transparent); }
.paper-swatch--long { border-color: var(--u-paper-long); background: color-mix(in srgb, var(--u-paper-long) 30%, transparent); }
.paper-swatch--expository { border-color: var(--u-paper-expository); background: color-mix(in srgb, var(--u-paper-expository) 30%, transparent); }

/* What the words on the map mean: under the lede at rest, and first in How
   to read. A term and its sentence, the term's own mark beside it. */
.universe-terms { margin: 0 0 1.1rem; border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); }
.universe-terms__title { margin: 0; padding: 0.6rem 0; font-size: var(--fs-small); font-weight: 600; color: var(--ink); }
.universe-terms dl { margin: 0 0 0.7rem; display: grid; gap: 0.6rem; }
.universe-terms__row { display: grid; gap: 0.15rem; }
.universe-terms dt { display: flex; align-items: center; gap: 0.5rem; font-size: var(--fs-small); font-weight: 600; color: var(--ink); }
.universe-terms dt .dot { display: inline-block; flex: none; width: 10px; height: 10px; border-radius: 50%; }
.universe-terms dt .dot, .universe-terms dt .glyph, .universe-terms dt .paper-swatch { margin: 0; transform: none; }
.universe-terms dd { margin: 0 0 0 calc(11px + 0.5rem); font-size: var(--fs-small); line-height: 1.5; color: var(--ink-soft); text-wrap: pretty; }
