/* Inherited verbatim from design/article/article.html — C1's
   accepted stylesheet. Do not edit here; edit the artifact and
   rebuild, so the two surfaces cannot drift. */

  /* ============================================================
     Vijay Kumar Archive — the article page (C1, second surface)
     The inside of the two cloth volumes. The accepted cover binds:
     docs/specs/2026-08-28-c1-cover-direction.md

     Direction chosen by the client 2026-08-28: THE REGISTRAR'S CARD —
     the critical edition. Provenance lives in a margin rail (desktop)
     and one quiet foot line; every citation is decoded in a printed
     apparatus block; the labelled colophon block is dissolved (client
     ruling), its duties kept: the untouched-capture link and the
     cutting caveat survive in the rail and the foot (hard rule 6).

     Client rulings this iteration:
       · headings set in Alegreya bold — Bodoni Moda stays on masthead
         and display identity only (legibility for the readership)
       · bulletin story and essay share ONE identical article dress;
         the aubergine title panel is retired (supersedes the panel's
         essay-flourish ruling; noted in the direction record)
       · the volume threshold carries THE REGISTER — an authored
         calendar of a real month, lead headings on hover/tap, the
         typeset day live; DDT's register drops the Sunday column
         because the column never appeared on one — zero Sundays in
         2,997 dated captures, measured over A1's manifest

     The citation grammar (one law, all surfaces): live back-reference
     = hairline underline, gilt under the hand, navigates where its
     target is built; dead TIOL citation = small caps, secondary ink,
     no underline, opens a record card (sheet on phones); headline-
     length dead reference = italic with a terminal double dagger
     (client ruling 2026-08-29); dead off-site = dagger; mail = plain
     roman, inert.
     Survives greyscale. Gilt at rest: nowhere. The record card's gilt
     border exists only while summoned — an interaction state.
     ============================================================ */

  :root{
    --parchment:#F3EBDD;
    --parchment-deep:#EDE2CF;
    --parchment-dim:#CFC1AC;
    --thr-ink:#2A1E22;
    --thr-soft:#6B5A50;
    /* --thr-rule SEPARATES and nothing else: row dividers, table borders,
       the foot's rule, the calendar's hairlines. It is meant to be quiet and
       it has no contrast floor, because it carries no signal.
       --thr-nav is the NAVIGATE RULE, and it is a separate token because for
       eleven rounds it was the same one. Ruled 2026-09-05 on renders, three
       lenses and a deciding director; every figure re-derived before it was
       applied:
         · as shipped the navigate mark and the divider were the SAME VALUE —
           1.00:1, one token doing two jobs — so a door and a fence were
           indistinguishable, and on a wrapping apparatus entry the decorative
           divider landed under the wrapped line and out-signalled the mark.
         · #CBB9A4 measures 1.61:1 on parchment, under the 3:1 floor this
           archive applies to the SOLE CARRIER of a signal — the same floor
           that moved the focus ring off gilt at 2.20:1.
         · #6B5A50 clears BOTH floors that matter: 5.54:1 on parchment and
           3.44:1 against the divider it must not be confused with. The
           candidate between them (#7D6C60, 4.24:1 on parchment) clears the
           first and fails the second at 2.63:1.
         · --thr-ink was the runner-up and lost on the rule vocabulary, not on
           taste: `1px #2A1E22` is already reserved, in this document's own
           words, to close a plate "and nowhere else", and it sits 1.19:1 from
           the 2px cloth open-marker — three meanings told apart by thickness
           alone.
         · it invents no colour. #6B5A50 is the secondary ink, and the capture
           door already drew its rule in it through `currentColor`. Three
           values collapse into one that existed.
       THE COST, accepted: the contents row comes DOWN from 13.57:1, the one
       surface that was already right, to buy the law on the six that were
       not. And the open-marker is now load-bearing — soft sits 2.06:1 from
       the cloth, so it is weight AND colour that separate them; lighten the
       cloth in a later round and this value goes stale. */
    --thr-rule:#CBB9A4;
    --thr-nav:#6B5A50;
    --case:#150F0B;
    --cloth-ddt:#3B2B20;  --cloth-ddt-edge:#2C2018;
    --cloth-jest:#242C42; --cloth-jest-edge:#1B2132;
    /* INTERACTION ONLY. 2.20:1 on parchment, 2.04:1 on the deepened sheet.
       Lawful as a 1–2px rule beside its own compliant text. NOT lawful as:
       a glyph colour; the sole carrier of a focus indicator (3:1 floor);
       any text. Gilt at rest, nowhere. */
    --gilt:#BC9C5C;
    --signoff:#9C4343;      /* darkened from the author's #FF6666 (2.42:1 as printed) */
    --pullquote:#8A3D12;    /* darkened from the author's #FF6633 (2.46:1 as printed);
                               script-verified 6.43:1 — the ink of the line he
                               wanted you to feel */
  }

  *{ box-sizing:border-box; margin:0; padding:0; }
  html{ -webkit-text-size-adjust:100%; }
  body{
    font-family:'Alegreya', Georgia, 'Times New Roman', serif;
    line-height:1.5;
    min-height:100svh;
    background:var(--case);
    color:var(--parchment);
  }

  button{ font:inherit; color:inherit; background:none; border:none; cursor:pointer; text-align:inherit; }
  /* The focus ring is INK, not gilt. Gilt measures 2.20:1 on parchment and
     2.04:1 on the deepened sheet — under the 3:1 floor a focus indicator
     must meet. Ink is 13.57:1 and 12.53:1. Gilt survives as a ring in
     exactly one place, the cover's volumes, where the ground is case-black
     and it measures 7.28:1. Script-verified, contrast_check.py. */
  button:focus-visible, a:focus-visible, [tabindex="0"]:focus-visible{
    outline:2px solid var(--thr-ink); outline-offset:3px; }
  /* Programmatic focus targets (screen arrival lands on the heading): no
     ring — it is not an interactive element being keyboard-walked. This
     silencer is load-bearing and must stay blanket. Narrowing it to
     :not(:focus-visible) puts a rectangle back around the masthead on every
     screen entry, because Chromium matches :focus-visible on a
     programmatically focused heading when the prior interaction was a
     keypress. That is the bug that shipped invisibly for five rounds, and a
     render caught it again here. */
  [tabindex="-1"]:focus{ outline:none; }
  /* …but a roving-tabindex grid cell IS keyboard-walked, and its ring has to
     survive the silencer above: hence the attribute in the selector, which
     outweighs it. Inset, so the ring rules around the cell without colliding
     with the neighbouring column's hairline.
     Written with the attribute rather than by ordering, because three rules
     this project shipped in round 8 existed and never fired — each losing to
     a single-class rule below it. A doubled selector beats an argument about
     source order. */
  .cal-day:focus-visible, .cal-day[tabindex]:focus-visible,
  .essay-row:focus-visible, .essay-row[tabindex]:focus-visible{
    outline:2px solid var(--thr-ink); outline-offset:-2px; }

  h1,h2{ text-wrap:balance; font-weight:inherit; }
  .figures{ font-variant-numeric:tabular-nums lining-nums; }
  /* Screen-reader parity, not a legend. The run-step's direction is carried
     visually by an arrow, which is a glyph a screen reader announces
     inconsistently or not at all; the word rides along unseen so both
     readers get the same fact from the same node. Nothing on the page
     explains itself — this explains nothing that the arrow does not already
     say to the eye. */
  .vh{ position:absolute; width:1px; height:1px; overflow:hidden;
       clip-path:inset(50%); white-space:nowrap; }
  ::selection{ background:var(--cloth-ddt); color:var(--parchment); }
  .world--jest ::selection, .threshold--jest ::selection{
    background:var(--cloth-jest); color:var(--parchment); }

  .screen{ display:none; min-height:100svh; padding-bottom:6.5rem; }
  .screen.active{ display:flex; flex-direction:column; }
  .board{
    position:fixed; inset:0; z-index:20; pointer-events:none; opacity:0;
    background:var(--case);
  }
  .board.in{ opacity:1; }
  @media (prefers-reduced-motion:no-preference){
    .board{ transition:opacity .25s ease-out; }
    .board.in{ transition-duration:.15s; transition-timing-function:ease-in; }
    .screen.active{ animation:settle .28s ease-out; }
    .screen.cover.active{ animation-duration:.2s; }
    .screen.threshold.active .thr-rule,
    .screen.article.active .thr-rule{ animation:inkRule .2s ease-out .12s both; }
    @keyframes settle{ from{ opacity:0; } to{ opacity:1; } }
    @keyframes inkRule{ from{ opacity:0; } to{ opacity:1; } }
  }

  /* ---------------- the cover (staging, accepted design) ---------------- */
  .cover{ align-items:center; justify-content:center; text-align:center; padding:4.5rem 1.5rem 7rem; }
  .press-line{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    font-size:.8rem; letter-spacing:.4em; color:var(--parchment-dim);
  }
  .cover h1{
    font-family:'Bodoni Moda',Georgia,serif; font-variation-settings:'opsz' 96;
    font-weight:500; font-size:clamp(2.6rem, 7.5vw, 5.2rem); letter-spacing:.14em;
    text-transform:uppercase; line-height:1.1; margin:1.5rem 0 4rem;
  }
  .shelf{
    display:flex; align-items:flex-end; justify-content:center; gap:clamp(2rem, 5vw, 3.5rem);
    position:relative; padding:0 1rem;
  }
  .shelf::after{
    content:""; position:absolute; left:0; right:0; bottom:0; height:1px;
    background:var(--parchment-dim);
  }
  .volume{
    width:min(17rem, 40vw); height:clamp(23rem, 54vh, 28rem);
    display:flex; flex-direction:column; align-items:stretch; justify-content:center;
    padding:1.5rem 1.2rem; position:relative;
    box-shadow:0 14px 24px -12px rgba(0,0,0,.55);
  }
  .volume:focus-visible{ outline:1px solid var(--gilt); outline-offset:6px; }
  .volume:hover{ filter:brightness(1.05); }
  .volume:hover .label{ border-color:var(--gilt); }
  .shelf:has(.volume:hover) .volume:not(:hover){ opacity:.82; }
  @media (prefers-reduced-motion:no-preference){
    .volume{ transition:transform .3s ease-out, filter .3s ease-out, opacity .25s ease; }
    .volume:hover{ transform:translateY(-2px); transition-duration:.2s; }
    .volume .label{ transition:border-color .2s ease; }
    .volume .open{ transition:color .18s ease; }
  }
  .volume--ddt{ background:var(--cloth-ddt); border-left:7px solid var(--cloth-ddt-edge); }
  .volume--jest{ background:var(--cloth-jest); border-left:7px solid var(--cloth-jest-edge); }
  .volume .label{
    border:1px solid var(--parchment-dim); padding:1.6rem 1.1rem; flex:1;
    display:flex; flex-direction:column; align-items:center; justify-content:center; gap:.55rem;
    text-align:center;
  }
  .volume .kind{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    font-size:.72rem; letter-spacing:.3em; color:var(--parchment-dim);
  }
  .volume .masthead{
    font-family:'Bodoni Moda',Georgia,serif; font-variation-settings:'opsz' 40;
    font-weight:500; font-size:clamp(1.15rem, 2.4vw, 1.6rem); line-height:1.2;
    min-height:2.4em; display:flex; align-items:center; justify-content:center;
  }
  .volume .span{ font-size:.95rem; color:var(--parchment); }
  .volume .count{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    font-size:.82rem; letter-spacing:.16em; color:var(--parchment-dim);
  }
  .volume .open{
    margin-top:1rem; font-style:italic; font-size:.9rem; color:var(--parchment-dim);
    border-bottom:1px solid transparent;
  }
  .volume:hover .open{ color:var(--parchment); border-bottom-color:var(--parchment); }
  .scale-line{
    margin-top:2.8rem;
    font-family:'Bodoni Moda',Georgia,serif; font-style:italic; font-weight:400;
    font-size:clamp(1.1rem, 2.4vw, 1.4rem); letter-spacing:.02em;
    color:var(--parchment);
    font-variant-numeric:tabular-nums lining-nums;
  }
  .scale-line .sep{ color:var(--parchment-dim); padding:0 .35em; font-style:normal; }

  /* ---------------- thresholds: the opened volume ---------------- */
  .threshold{
    background:var(--parchment); color:var(--thr-ink);
    align-items:flex-start; padding:3.5rem clamp(1.5rem, 8vw, 7rem) 7rem;
  }
  .back{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    letter-spacing:.14em; font-size:.875rem; color:var(--thr-soft);
    background-image:linear-gradient(currentColor,currentColor);
    background-repeat:no-repeat; background-size:0 1px;
    /* THE TOUCH FLOOR (2026-09-05). 23.0px at 360px, against the archive's
       own 44px floor -- stated for the record card's rows, and the figure
       round 10's whole triage turned on for .rs-step. Same remedy as there:
       the padding grows the box, the margin gives back what it took, and the
       underline is pinned to the text rather than to the new padding edge, so
       the hit target reaches the floor and no ink moves. */
    padding:.72rem 0 calc(.72rem + 2px);
    background-position:0 calc(100% - .72rem);
    /* The margin gives back BOTH halves of the padding -- a negative top and a
       reduced bottom. Giving back only the bottom left every threshold's
       cloth rule 12px lower than it was, which a measurement caught and a
       render would have shown: the padding grows the box in two directions
       and the composition has to be repaid in two. */
    margin:-.72rem 0 2.48rem;
  }
  .back:hover{ color:var(--thr-ink); background-size:100% 1px; }
  @media (prefers-reduced-motion:no-preference){
    .back{ transition:background-size .18s ease-out, color .15s ease; }
  }
  .thr-rule{ display:block; width:3.5rem; height:2px; margin-bottom:1.3rem; }
  .threshold--ddt .thr-rule, .world--ddt .thr-rule{ background:var(--cloth-ddt); }
  .threshold--jest .thr-rule, .world--jest .thr-rule{ background:var(--cloth-jest); }
  .threshold .kicker{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    font-size:.8rem; letter-spacing:.26em; color:var(--thr-soft);
  }
  /* The masthead keeps the cover's Bodoni but thicker and smaller — the
     hairline 96-optical cut was hard to read on office screens (client). */
  .threshold h2{
    font-family:'Bodoni Moda',Georgia,serif; font-variation-settings:'opsz' 60; font-weight:600;
    font-size:clamp(2rem, 4.6vw, 3.1rem); line-height:1.12; margin:.7rem 0 1.8rem;
  }
  .threshold--ddt h2{ color:var(--cloth-ddt); }
  .threshold--jest h2{ color:var(--cloth-jest); }
  /* The plate is the only place the run's own rules are stated — that it ran
     unsigned, kept the department's hours, never once ran on a Sunday, and
     that the calendar below therefore has no Sunday column. It is prose, and
     it had been set four pixels under the size foundations chose for this
     readership.
     34em, not 62ch: at 1.25rem in Alegreya, 62ch measures 33.9em — inside
     the reading measure by a tenth of an em, and only because this face's
     ch is ~.55em. On the Georgia fallback ch is wider and the plate would
     set past the measure. Govern it by the measure it must not exceed. */
  .threshold-body{ max-width:34em; font-size:1.25rem; line-height:1.55; }
  .threshold-body p{ margin-bottom:1rem; }
  .door-note{ font-style:italic; color:var(--thr-soft); max-width:52ch; }
  /* the imprint line: a fine-press page closes its frame at the foot —
     pushed to the true base of the room (the screen is a flex column) */
  .threshold-inner{ display:flex; flex-direction:column; flex:1; }
  .threshold-foot{ margin-top:auto; padding-top:3rem; }

  /* -------- the threshold spread: plate left, register right --------
     The two columns are pushed to the case's edges (space-between), so
     the width of the room becomes the spread's gutter, not a margin. */
  .threshold-inner{ width:100%; max-width:88rem; margin:0 auto; }
  /* the register spans the page (client ruling 2026-08-30): the plate
     splits around it — identity above, contents below */
  .threshold-more{ margin-top:2.8rem; }
  /* The spine takes the ledger's side at the same threshold as the
     article rail (one wide-room breakpoint, not two): below it, the
     spine stacks above a full-width ledger. At 1100–1240 the ledger
     would otherwise fall to ~46px columns and wrap its annotated
     cells (director's ruling). */
  @media (min-width:1240px){
    .register-view{
      display:grid; grid-template-columns:minmax(17rem, 24rem) minmax(0, 1fr);
      gap:0 4.5rem; align-items:start;
    }
    .register-month .rm-month, .register-month .rm-year{ display:block; }
    /* the pane keeps its post beside the month, like the rail */
    .reg-pane{ position:sticky; top:2rem; margin-bottom:0; }
    /* the wide grid breathes: taller day cells, roomier heads */
    .calendar td{ height:3.6rem; }
    .calendar th{ padding-bottom:.7rem; }
    /* d·1 — land the ledger's head hairline on the month label's last
       baseline, so the two columns read as one plate with a shared
       shoulder rather than as two boxes sharing a top edge.
         .register-month  2.1rem x 1.12 x 2 lines = 4.704rem
         th line box      .875rem x 1.5           = 1.3125rem
         th padding-bottom                        =  .7rem
         offset  4.704 - 2.0125                   = 2.69rem
       ...which lands the hairline on the bottom of the label's last LINE
       BOX, 8px below its baseline — near enough to read as error rather
       than intention. The last line's half-leading plus descent is the
       missing term, ~.5rem, so the shipped value is 2.2rem. Verify by
       measuring hairline against baseline, never by re-deriving this sum.
       Wide room only: below 1240px the pane stacks above a full-width
       ledger and the offset would be dead space above the calendar. */
    .reg-ledger{ padding-top:2.2rem; }
  }

  /* -------- the register: the whole run, year → month → day --------
     Round 6, incorporating the client's Claude Design review: the
     selection controls compress into a RIBBON at the head (year row
     above month row, coarse-to-fine by size), and the left column
     becomes the READING PANE — the headline is what the reader came
     for, so it gets the largest type, filled by hover before any
     click. The calendar keeps its issue numbers, its hollow brackets
     and its missing Sunday column: the record overrules the mockup
     where they disagree. */
  .register{ margin:2.8rem 0 0; max-width:none; }
  .reg-ribbon{ border-top:2px solid var(--thr-ink); }
  .ribbon-head{
    display:flex; align-items:baseline; justify-content:space-between;
    gap:1rem; padding:.55rem 0 .6rem;
  }
  .register-kicker{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    font-size:.8rem; letter-spacing:.26em; color:var(--thr-soft);
  }
  .reg-count{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    font-size:.875rem; letter-spacing:.14em; color:var(--thr-soft);
    font-variant-numeric:tabular-nums lining-nums;
  }
  /* the body: reading pane left, ledger right (stacked below 1240) */
  /* d·2 — the ribbon is a closed plate (2px ink above, 2px ink under the
     month strip) but the spread below it was open and ragged: the pane ends
     at its door after four lines, the ledger runs on for five weeks, and
     nothing gathered them. One rule across both columns closes it, and gives
     the imprint something to sit beneath. 1px ink is the closing weight —
     opening is an act (2px), closing is a fact (1px) — and it is not the
     #CBB9A4 hairline that separates the last calendar row. */
  .register-view{ padding-top:1.1rem;
                  border-bottom:1px solid var(--thr-ink); padding-bottom:1.6rem; }
  .reg-pane{ margin-bottom:1.6rem; }
  .pane-ref{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    font-size:.875rem; letter-spacing:.14em; color:var(--thr-soft);
    font-variant-numeric:tabular-nums lining-nums;
    display:block; margin-bottom:.35rem;
  }
  /* the headline is what the reader came for: the pane's largest type.
     Italic, because here the register QUOTES the headline; the reading
     room sets the same headline in roman, where it is the thing itself.
     (Chosen from a rendered four-way against Bodoni italic — which
     glitters over four lines and doubles the label's voice — and
     lighter romans, which go anonymous.) */
  .pane-head{
    display:block;
    font-family:'Alegreya',Georgia,serif; font-style:italic; font-weight:600;
    font-size:1.55rem; line-height:1.3; text-wrap:pretty;
    color:var(--thr-ink); min-height:4.5rem;
  }
  /* d·5 — the pane's headline IS the door. The headline is the largest
     thing in the pane and what the reader came for; the door was a 12.8px
     line under it, so a reader who clicked the headline got nothing and a
     reader who aimed at the door aimed at the pane's smallest text. One
     button now wraps the reference line, the headline and the door: one
     target of about five rem, one tab stop, one underline.
     The law is untouched — the headline takes NO underline at rest; the
     "read this bulletin →" line keeps the only one, so the promise still
     sits on the words that make it. And where the day is recorded but not
     typeset the block is a plain .pane-body div: no button, no cursor, no
     ring, because an affordance that opens nothing must stay
     unexpressible. */
  /* text-align is not declared: button{text-align:inherit} above already
     carries it, and with the declaration removed the pane's computed type
     and geometry are identical to the build before d·5 in every measured
     property — the change is the target and nothing else. */
  .pane-door{ display:block; width:100%; }
  /* The ring wraps a five-rem block, so it stands off further than the 3px a
     line of text takes — but at the archive's OWN generous value, not a new
     one. .35rem is 5.6px, which is 0.4px from the 6px the strips and the
     cover's volumes already use: a distinction no eye resolves and the next
     hand reinvents at a sixth value. Round 8 was convened to kill exactly
     that. Measured at 6px: 18.8px clear of the month label above, and the
     ring's right edge at 504px against the ledger's first column at 573px. */
  .pane-door:focus-visible{ outline-offset:6px; }
  .pane-cta{
    display:inline-block; margin-top:.9rem;
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    letter-spacing:.26em; font-size:.8rem; color:var(--thr-ink);
    padding:0 0 2px; border-bottom:1px solid var(--thr-nav);
  }
  .pane-door:hover .pane-cta,
  .pane-door:focus-visible .pane-cta{ border-bottom-color:var(--gilt); }
  .pane-note{ font-style:italic; color:var(--thr-soft); font-size:.9375rem; }
  .register-month{
    font-family:'Bodoni Moda',Georgia,serif; font-style:italic; font-weight:400;
    /* opsz tracks the rendered size: 2.1rem = 33.6px at the wide room where
       the register is a spread. (28 in the phone block, where the clamp
       bottoms out at 1.7rem = 27.2px.) */
    font-variation-settings:'opsz' 34;
    font-size:clamp(1.7rem, 3.4vw, 2.1rem); line-height:1.12; margin:0 0 1.2rem;
  }
  /* ribbon rows: label in a fixed column, then the run — the year row
     larger than the month row, so coarse and fine read apart (the
     mockup's three-treatments rule) */
  .strip{
    display:flex; flex-wrap:wrap; align-items:baseline; gap:.35rem 1.05rem;
    padding:.55rem 0 .7rem;
    font-family:'Alegreya SC',Georgia,serif;
    font-variant-numeric:tabular-nums lining-nums;
    font-size:1rem; letter-spacing:.06em; color:var(--thr-soft);
  }
  .strip--years{ border-top:1px solid var(--thr-rule); }
  .strip--months{
    border-top:1px solid var(--thr-rule);
    border-bottom:2px solid var(--thr-ink);
    font-size:.8rem; letter-spacing:.26em;
  }
  /* A re-aimed register settles once and the registrar rules under the
     chosen entry — only on an actual re-aim, so the object reason is
     true in every case it fires (first paint arrives with the room). */
  @media (prefers-reduced-motion:no-preference){
    .re-aimed .register-view{ animation:settle .18s ease-out; }
    .re-aimed .strip .open::after{
      transform-origin:left; animation:ruleDraw .15s ease-out .1s both;
    }
    @keyframes ruleDraw{ from{ transform:scaleX(0); } to{ transform:scaleX(1); } }
    /* the light warms rather than switches — every hairline that
       answers the hand (cover precedent: the volume label frames) */
    button.cite--wired, .strip button,
    .cal-day--live .d, .essay-row--live .et,
    .pane-door .pane-cta, button.rs-step .rs-id, .to-contents,
    .return-slip .figures, .source-open{
      transition:border-bottom-color .15s ease-out, color .15s ease-out;
    }
    .contents button.c-row .c-title{
      transition:text-decoration-color .15s ease-out, color .15s ease-out;
    }
    .cal-day, .essay-row{ transition:background-color .15s ease-out; }
  }
  /* the open choice carries the cloth bar (an ::after, so the
     rule-draw can scale it and nothing shifts on selection) */
  /* THE TOUCH FLOOR (2026-09-05): 22.2px at 360px, half the archive's own
     44px floor, on the control a reader taps to change year or month. The
     padding grows the box; the ::after is pinned to the TEXT's bottom edge
     with the same offset it had, so the cloth marker does not sink with the
     box. The strip rows grow, which is the cost and it is accepted: a year
     that cannot be tapped is not a control. */
  .strip button{ color:inherit; padding:.7rem 0 calc(.7rem + 3px);
    position:relative; letter-spacing:inherit; }
  .strip button:hover{ color:var(--thr-ink); }
  /* The open-marker is a 2px cloth rule at the button's own bottom edge. At
     the global 3px offset the focus ring lands 3px under it and the two read
     as one smudged underline — invisible while the ring was gilt at 2.20:1,
     plain once it became ink at 13.57:1. Six px of parchment separates
     them. */
  .strip button:focus-visible{ outline-offset:6px; }
  .strip .open{ color:var(--thr-ink); }
  .strip .open::after{
    content:""; position:absolute; left:0; right:0; bottom:.7rem; height:2px;
  }
  .threshold--ddt .strip .open::after{ background:var(--cloth-ddt); }
  .threshold--jest .strip .open::after{ background:var(--cloth-jest); }
  /* d·4 — there is no dim month. A month the run did not reach is not
     printed, exactly as the calendar states "no Sunday" with a missing
     column rather than a greyed one. The rule this replaces composited
     #6B5A50 at opacity .45 to #B6AA9E — 1.92:1, against the ghost day's
     5.34:1 — so the register receded two ways with a 3x contrast gap, and
     the worse one carried a fact of the record. Measured before adoption:
     every month from 2004-12 to 2016-12 holds a bulletin (145 of 145) and
     every month from 2018-01 to 2025-06 holds an essay (90 of 90), so the
     omission fires exactly once in the archive — DDT 2004, whose strip
     reads "month  dec". A short trailing strip in an OPEN run's current
     year is not an omission and must never be dressed as one; the Jest
     plate and the imprint already carry that fact in words. */
  .strip-label{
    flex:0 0 4.2rem;
    /* f1. The opacity is gone: .75 composited #6B5A50 to #8D7E73 at 3.31:1,
       under the 4.5:1 text floor, on the densest surface in the archive and
       for its oldest readers. The demotion the opacity bought is carried by
       the step instead — .8rem/.26em against the year row's 1rem/.06em. */
    font-size:.8rem; letter-spacing:.26em;
  }
  .calendar{ border-collapse:collapse; width:100%; }
  .calendar th{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    font-weight:400; letter-spacing:.14em; font-size:.875rem; color:var(--thr-soft);
    text-align:left; padding:0 .5rem .7rem .35rem;
    border-bottom:1px solid var(--thr-rule);
  }
  .calendar td{
    padding:0; border-bottom:1px solid var(--thr-rule);
    height:3.1rem; vertical-align:top;
  }
  .cal-day{
    display:flex; flex-direction:column; gap:.1rem; width:100%; height:100%;
    /* a left breath, so the pinned #EDE2CF fill reads as a turned-down leaf
       and not as a bar running into the previous column's numerals. The head
       takes the same value, so the tabular column edge is preserved. */
    padding:.4rem .5rem .45rem .35rem;
  }
  .cal-day .d{ font-size:1.02rem; line-height:1; color:var(--thr-ink); }
  .cal-day .n{
    /* a figure takes its step's size at .02em — tabular lining numerals are
       already spaced. f2, because the issue number is the record's own
       content and the one value in the cell that changes. */
    font-family:'Alegreya SC',Georgia,serif; font-size:.875rem; letter-spacing:.02em;
    color:var(--thr-soft);
  }
  /* a day with no bulletin recedes; the record's days carry the ink */
  .cal-day--void .d{ color:var(--thr-soft); }
  /* r9 — three states, three marks, restated now that the ledger chooses
     rather than opens.

     CHOSEN — the day the pane is holding and the door answers for: the
     parchment-deep fill plus a 2px cloth bar. The bar is the ribbon's own
     open-marker, which already marks the chosen year and the chosen month one
     and two rows above; the register says "this is the open one" in the same
     language at all three levels. **The fill is the chosen day's alone.**
     FOCUS — the 2px ink inset ring (below).
     There is no third state. Hover changes nothing but the cursor: a graze
     used to take the fill AND the pane AND the door's destination with it, so
     a reader who had deliberately chosen the 13th and then passed over the
     6th found the 6th chosen instead. See the note on r2 below.

     No day carries an underline any more, because no day navigates: the
     only underline in the register is the pane's own door. Which days can
     be READ is a different fact from which day is chosen, and it is marked
     on the issue number — ink where the archive holds the bulletin, soft
     where the record holds it and we have not typeset it yet. That
     distinction dissolves by itself when the run is complete, which is
     right: then every day can be read and there is nothing to mark. */
  .cal-day.held, .essay-row.held{ background:var(--parchment-deep); }
  .cal-day.held, .essay-row.held{ position:relative; }
  .cal-day.held::after, .essay-row.held::after{
    /* bottom:-1px, so the 2px cloth COVERS the row's 1px hairline rather than
       resting on it. At bottom:0 the two touched and printed a 3px stack whose
       last pixel was a paler tint — the same collision the strips already
       answer with outline-offset:6px, where a 2px cloth marker 3px from
       another rule "read as one smudged underline". */
    content:""; position:absolute; left:0; right:0; bottom:-1px; height:2px;
  }
  .threshold--ddt .cal-day.held::after,
  .threshold--ddt .essay-row.held::after{ background:var(--cloth-ddt); }
  .threshold--jest .cal-day.held::after,
  .threshold--jest .essay-row.held::after{ background:var(--cloth-jest); }
  /* readable: the archive holds this day's room */
  .cal-day--live .n{ color:var(--thr-ink); }
  .cal-day--live .d{ align-self:flex-start; }
  /* a never-captured number: the day stands, its number in brackets —
     shape first, the pane says the fact in words */
  .cal-day--hollow .d, .cal-day--hollow .n{ color:var(--thr-soft); }
  .cal-note{
    margin-top:1.2rem; font-style:italic; color:var(--thr-soft); font-size:.9375rem;
    max-width:52ch;
  }
  /* Jest: a weekly column's month is a ruled list, not a grid. */
  .essay-list{ list-style:none; }
  .essay-list li{ border-bottom:1px solid var(--thr-rule); }
  .essay-row{
    display:flex; gap:1.3rem; width:100%; padding:.75rem .3rem .8rem 0;
    align-items:baseline;
  }
  .essay-row .ed{
    flex:0 0 5.4rem;
    font-family:'Alegreya SC',Georgia,serif;
    font-variant-numeric:tabular-nums lining-nums;
    font-size:.875rem; letter-spacing:.02em; color:var(--thr-soft);
  }
  .essay-row .et{ font-size:1.09375rem; line-height:1.4; }
  /* No essay row carries an underline either: the row chooses, it does not
     navigate. Readable is marked on the DATE, since the title is ink on
     every row. (The underline used to be keyed on the element being a
     button, which broke the moment a width rule changed which rows were
     buttons -- four unbuilt essays claimed a promise the archive cannot
     keep. Keying marks on the FACT, never on the element, is why that
     cannot happen again.) */
  .essay-row--live .ed{ color:var(--thr-ink); }

  /* ============================================================
     THE READING ROOM — the Registrar's Card, converged
     ============================================================ */
  .article{ background:var(--parchment); color:var(--thr-ink); padding:0 0 7rem;
    overflow-x:clip; }
  .article-inner{ width:100%; }
  .reading{ width:100%; font-size:1.25rem; line-height:1.55; }
  .reading .measure, .reading .band-inner{
    max-width:34em; margin-left:auto; margin-right:auto;
    padding-left:1.25rem; padding-right:1.25rem;
  }

  /* the band */
  .band-head{ display:flex; align-items:baseline; justify-content:space-between;
    gap:1rem; padding-top:2.2rem; margin-bottom:1.68rem; }
  .band .back{ margin-bottom:0; }
  .band .thr-rule{ margin:1.5rem 0 .9rem; }
  .band .kicker{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    font-size:.8rem; letter-spacing:.26em; color:var(--thr-soft);
  }

  /* headings: Alegreya bold, length-stepped, wrapping in full, never
     truncated. Bodoni stays on masthead and display identity (client:
     the hairline display face was hard to read as a text-page heading). */
  .frag h1, .frag h2, .frag h3{ overflow-wrap:break-word; }
  .frag h1, .frag h2{
    font-family:'Alegreya',Georgia,serif; font-weight:700;
    line-height:1.25; letter-spacing:0;
    margin:0 0 .45em; color:var(--thr-ink); text-wrap:balance;
  }
  .frag .len-s{ font-size:1.875rem; }
  .frag .len-m{ font-size:1.5625rem; line-height:1.3; }
  .frag .len-l{ font-size:1.34375rem; line-height:1.4; }
  .frag h3{
    font-family:'Alegreya',Georgia,serif; font-weight:700; font-size:1.25rem;
    line-height:1.4; margin:1.6em 0 .5em;
  }
  .frag h1 strong, .frag h2 strong, .frag h3 strong,
  .r-dateline strong{ font-weight:inherit; }
  /* the corpus's own incipit: the printer's bold first word, set as an
     inscription rather than a shout */
  .frag .versal{ font-family:'Alegreya SC',Georgia,serif; font-weight:400;
    letter-spacing:.08em; }
  .r-byline u, .byline u{ text-decoration:none; }

  .byline{ font-style:italic; color:var(--thr-soft); font-size:1.0625rem; margin:0 0 1.9em; }

  /* prose */
  .frag p{ margin:0 0 .85em; }
  .frag .r-body{ text-wrap:pretty; }
  .frag em em{ font-style:normal; }

  /* quotation furniture */
  .frag blockquote{ margin:1.4em 0; padding:.2em 0 .2em 1.4em;
    border-left:1px solid var(--thr-rule); }
  .frag blockquote p:last-child{ margin-bottom:0; }
  .frag .r-pull_quote{ font-style:italic; color:var(--thr-soft);
    font-size:1.3125rem; line-height:1.5; margin:1.3em 0; }
  /* The author kept a second ink for the line he wanted you to feel
     (#FF6633 in the source); the freestanding pull-quote gets it back
     as a lawful shade. Quoted matter inside a blockquote stays quiet —
     that is statute speaking, not the author raising his voice. */
  .frag .r-pull_quote[data-src-colour="#ff6633"]{ color:var(--pullquote); }
  .frag blockquote .r-pull_quote{ font-size:1.25rem; margin:0 0 .85em; }
  .frag blockquote .r-pull_quote[data-src-colour]{ color:var(--thr-soft); }

  /* the citation grammar — see the header comment; one law, one page */
  .cite{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps;
    font-weight:400; font-style:normal;
    color:var(--thr-soft);
    font-variant-numeric:tabular-nums lining-nums;
  }
  .cite strong, .cite b{ font-weight:400; }
  button.cite--wired{ padding:0; cursor:pointer; border-bottom:1px solid transparent; }
  button.cite--wired:hover{ color:var(--thr-ink); border-bottom-color:var(--gilt); }
  button.cite--wired[data-card="backissue"]{
    font-family:inherit; font-variant:normal; color:var(--thr-ink);
    border-bottom:1px solid var(--thr-nav);
  }
  button.cite--wired[data-card="backissue"]:hover{ border-bottom-color:var(--gilt); }
  .cite--external::after{ content:"\2020"; margin-left:.1em; }
  /* Headline-length dead reference: italic body text, and NO MARK.
     THE DOUBLE DAGGER IS RETIRED — client ruling 2026-09-06, replacing the
     ruling of 2026-08-29 that put it here.

     The pair was described as print's own reference marks: single dagger =
     the outside link died, double = a dead in-house reference too long to
     set in small caps. The second half of that sentence is a description of
     a DRESS, not of a fact about the record — and the measurement is what
     settled it. `.cite` and `.cite--long` are one branch of one function
     split by `len(text) > 40`: the same reference at 39 characters carries
     no mark, and 3,429 marks of the identical species carry none. So no
     true sentence could ever explain the ‡, and it was a reference mark
     pointing at a footnote that cannot be written. On 47 pages it stood
     beside a single dagger that CAN be explained, and now is.
     Nothing is lost with the glyph: the italic, body-ink setting is what
     tells this species from the small-caps token, and it stays. */
  .cite--long{
    font-family:inherit; font-variant:normal; font-style:italic;
    color:inherit;
  }
  .mail{ font-style:normal; }

  /* the sign-off */
  .signoff-matter{ margin-top:2.6em; padding-top:1.2em; border-top:1px solid var(--thr-rule); }
  .signoff-matter p{ font-style:italic; color:var(--signoff); margin:0 0 .35em; font-size:1.1875rem; }
  .signoff-matter .cite{ color:inherit; }

  /* in this bulletin: every sibling story, current marked, built ones live */
  .contents{ margin-top:3em; }
  .contents-kicker{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    letter-spacing:.26em; font-size:.8rem; color:var(--thr-soft); margin-bottom:.9rem;
  }
  .contents ol{ list-style:none; border-top:1px solid var(--thr-rule); }
  .contents li{ border-bottom:1px solid var(--thr-rule); }
  .contents .c-row{
    display:flex; gap:1.1rem; width:100%; padding:.6rem .2rem .65rem 0;
    align-items:baseline; position:relative;
  }
  .contents .c-ord{
    flex:0 0 1.6rem;
    font-family:'Alegreya SC',Georgia,serif;
    font-variant-numeric:tabular-nums lining-nums;
    font-size:.875rem; letter-spacing:.02em; color:var(--thr-soft);
  }
  .contents .c-title{ font-size:1.0625rem; line-height:1.45; }
  .contents button.c-row .c-title{
    border-bottom:0;
    text-decoration:underline; text-decoration-thickness:1px;
    text-decoration-color:var(--thr-nav); text-underline-offset:2px;
  }
  .contents button.c-row:hover .c-title{ text-decoration-color:var(--gilt); }
  .contents .c-row--here .c-title{ font-weight:700; }
  /* The here-dot marks the ordinal, so it hangs off the ORDINAL and centres on
     its line box — not off the row at a hand-set `top`, which was 2.4px high
     and would drift again at any change of size, leading or row padding. */
  .contents .c-ord{ position:relative; }
  .contents .c-row--here .c-ord::before{
    content:""; position:absolute; left:-1.05rem; top:50%;
    transform:translateY(-50%);
    width:.4rem; height:.4rem; border-radius:50%;
  }
  .world--ddt .contents .c-row--here .c-ord::before{ background:var(--cloth-ddt); }
  .world--jest .contents .c-row--here .c-ord::before{ background:var(--cloth-jest); }

  /* the way into the contents list, from the one line that already counts the
     stories. The apparatus's in-page-pointer dress, because it is the same
     species: it moves the reader within the page. */
  .kick-seg{ white-space:nowrap; }
  .to-contents{
    color:inherit; padding:0 0 2px;
    border-bottom:1px solid var(--thr-nav);
    /* A control does not inherit its dress. The browser's own form-control
       rules reset letter-spacing, text-transform and font-variant-numeric,
       and `button{font:inherit}` above does not carry them back — so this
       printed at a fourth size and a twelfth tracking, with its figures 8px
       against the kicker's 11px, on a COUNT. `inherit` is right for the
       first two because this control has two homes: .26em in the band
       kicker, normal in the rail. Round 10 measured this exact trap at
       .rs-step and wrote it down; this is the second time, which is why
       structure_check.js now audits every button on every screen for it. */
    letter-spacing:inherit; text-transform:inherit;
    font-variant:inherit; font-variant-numeric:tabular-nums lining-nums;
  }
  .to-contents:hover{ color:var(--thr-ink); border-bottom-color:var(--gilt); }

  /* the apparatus: every citation in the story, decoded and printed */
  .apparatus{ margin-top:3em; border:1px solid var(--thr-rule); padding:1.3rem 1.4rem; }
  .apparatus-kicker{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    letter-spacing:.26em; font-size:.8rem; color:var(--thr-soft); margin-bottom:.8rem;
  }
  .apparatus ul{ list-style:none; }
  .apparatus li{ font-size:1rem; padding:.45rem 0; border-top:1px solid var(--thr-rule); }
  .apparatus li:first-child{ border-top:0; }
  .apparatus .figures{ font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; }
  /* the apparatus answers back: the decoded entry turns to its mark in
     the prose — it navigates, so it may carry the underline */
  .apparatus button.app-go{
    padding:0 0 1px; border-bottom:1px solid var(--thr-nav);
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps;
    font-variant-numeric:tabular-nums lining-nums;
  }
  .apparatus button.app-go:hover{ border-bottom-color:var(--gilt); }
  /* the sought mark answers for a moment, then rests (class removed) */
  button.cite--wired.sought{ color:var(--thr-ink); border-bottom-color:var(--gilt); }

  /* e·3 — THE RUN-STEP. A daily column is a serial: 3,002 bulletins were
     written to be read on consecutive mornings, and until this round the
     archive had no next day. One line of two ends, above the foot.
     Its identity sets in the register's own reference dress (f2, .875/.14,
     small caps, tabular) because it prints the same fact the pane's
     reference line prints — a day's identity — and the two are formed by
     one function, so they cannot drift into two spellings.
     A step that is typeset is a <button> carrying the hairline; a step the
     record holds but this build has not typeset is a <span> with no door
     attribute at all, so the unwired affordance stays unexpressible. Where
     the run itself has no day, the side is simply absent — undemonstrated
     here, see the direction record. */
  .run-step{
    /* flex-wrap is the belt to the breakpoint's braces: where the row cannot
       hold both identities the second drops to its own line, rather than a
       nowrap identity being clipped by the room's overflow-x:clip. Nothing
       here may ever cut a bulletin's name in half. */
    display:flex; flex-wrap:wrap; align-items:baseline; gap:1.4rem 2rem;
    /* .525em, not 1.1em: the step's own .72rem of padding now carries the
       other half, so the rule-to-text gap is unchanged at 22px while the
       touch box grows. */
    margin-top:2.9em; padding-top:.525em;
    border-top:1px solid var(--thr-rule);
  }
  /* The dress is declared on the STEP, not inherited from the line. A
     browser's own stylesheet resets text-transform, letter-spacing and
     word-spacing on form controls, and this page's `button{font:inherit}`
     does not carry them back — so a step set from its parent came out in
     mixed case with no tracking while its dead twin, a span, came out in
     small caps: one species in two dresses on the same line, and the two
     sides 238px and 201px wide for the same twenty-nine characters. Every
     other small-caps control in the archive already declares its own dress;
     this was the only rule that leaned on inheritance through a control.
     Measured, not reasoned: the diff is in the round's record. */
  .rs-step{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps;
    text-transform:lowercase;
    font-size:.875rem; letter-spacing:.14em; color:var(--thr-soft);
    font-variant-numeric:tabular-nums lining-nums;
    /* 21.7 + 23.0 = 44.7px. The archive's touch floor is 44px — stated for
       the record card's rows, and the figure d·8's whole triage turned on for
       the ledger's cells. The run-step is the likeliest next action on a
       reading page, it stacks on a phone with a WRONG-DIRECTION twin beneath
       it, and it was shipping at half the floor while the contents block on
       the same page cleared it. This round's own headline finding is a phone
       mis-tap; it may not also be a phone mis-tap.
       The padding is on the BUTTON and the underline is on .rs-id inside it,
       so the hit box grows and no ink moves. */
    padding:.72rem 0;
  }
  /* margin, not an empty flex end: a missing side must leave no node
     behind, and the surviving side must still keep its own end */
  .rs-next{ margin-left:auto; text-align:right; }
  /* the arrow is direction, not apparatus: it takes no tracking of its own,
     and its gap is a margin — a letter-spaced glyph sets a hole after
     itself, which is the versal's lesson */
  .rs-arrow{ letter-spacing:0; }
  .rs-prev .rs-arrow{ margin-right:.55em; }
  .rs-next .rs-arrow{ margin-left:.55em; }
  button.rs-step{ color:var(--thr-ink); }
  button.rs-step .rs-id{
    border-bottom:1px solid var(--thr-nav); padding-bottom:2px;
  }
  /* An identity is ONE string, and no width may cut it in half. Left to break
     it orphaned the year onto a second line — two orphans at opposite ends of
     an otherwise empty line, the arrow stranded under its own text — at every
     viewport from 604 to 760px, a 157px band no spot width in this round had
     looked at; and because the navigate rule sits on an inline box, a wrapped
     identity drew it TWICE for one destination.
     That invariant is delivered by the breakpoint and by `flex-wrap` below,
     and it is ASSERTED by structure_check.js — rather than by piling up rules
     that might each deliver it. `white-space:nowrap` is the obvious third and
     is deliberately absent, for a sharper reason than redundancy: **it is
     harmful.** In the row dress it is inert, because a wrapping flex container
     breaks its LINE before it shrinks an item — but in the STACKED dress there
     is no line to break, so the identity must be allowed to turn, and nowrap
     instead overruns it by up to 125px into the room's `overflow-x:clip`.
     Measured: re-added here it fails the check at 390px on a 24px root.
     Do not re-add it. Assert the outcome; do not accumulate mechanisms. */
  button.rs-step:hover .rs-id{ border-bottom-color:var(--gilt); }
  /* 47.5em is 760px at the default root — the same pixel where the reading
     room drops to its phone measure and the line's room falls from 640 to
     538px, which two identities and their gap (546px for a February pair)
     cannot hold. Expressed relatively rather than in px so an enlarged
     browser default stacks EARLIER instead of clipping a nowrap identity.
     The old value, 600px, left the whole 604–760px band setting two broken
     lines. */
  @media (max-width:47.5em){
    /* stacked, the gap separates two 44.7px boxes rather than two lines of
       type: .5rem of clear space between the targets, and the padding does
       the rest of the optical spacing */
    .run-step{ flex-direction:column; gap:.5rem; }
    .rs-next{ margin-left:0; text-align:left; }
  }

  /* the provenance foot: the colophon's duties in one quiet line-set */
  .provenance-foot{
    margin-top:3em; padding-top:1.1em; border-top:1px solid var(--thr-rule);
    font-size:.90625rem; line-height:1.7; color:var(--thr-soft);
  }
  .provenance-foot .sep{ padding:0 .45em; }
  .provenance-foot .source-open{ color:inherit; }

  .source-open{
    /* was `currentColor`, which happened to compute to #6B5A50 and so was
       accidentally the only navigate rule that had always been right. Stated
       now rather than coincidental. */
    font-style:italic; border-bottom:1px solid var(--thr-nav); padding-bottom:1px;
  }
  .source-open:hover{ color:var(--gilt); }

  /* Jest front matter — the same dress as the bulletin story (client
     ruling: one identical article format for both worlds). */
  .world--jest .r-dateline{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    letter-spacing:.26em; font-size:.8rem; color:var(--thr-soft); margin-bottom:1.2em;
  }
  .world--jest .r-byline{ font-style:italic; color:var(--thr-soft); font-size:1.0625rem;
    margin:0 0 1.9em; }
  .world--jest .r-section_heading{
    font-family:'Alegreya',Georgia,serif; font-weight:700; font-size:1.25rem; margin:1.6em 0 .5em;
  }

  /* the table, as a plate */
  .tablewrap{
    overflow-x:auto; margin:2.2em 0;
    scrollbar-color:var(--parchment-dim) var(--parchment-deep);
    border-top:2px solid var(--thr-ink);
    border-bottom:1px solid var(--thr-ink);
    padding:0 0 .2rem;
  }
  .tablewrap::-webkit-scrollbar{ height:8px; }
  .tablewrap::-webkit-scrollbar-track{ background:var(--parchment-deep); }
  .tablewrap::-webkit-scrollbar-thumb{ background:var(--parchment-dim); }
  .tablewrap table{ border-collapse:collapse; min-width:100%; }
  /* The last row's separator and the plate's closing rule were landing 4px
     apart and reading as an accident. A plate closes once: the separator
     stops where the foot begins. */
  .tablewrap tr:last-child td, .tablewrap tr:last-child th{ border-bottom:0; }
  /* f1. The plate label names the exhibit before the grid is read, and it
     never slides: it is outside the scroll region by construction now, not
     by discipline.
     The selector carries `.frag p` because `.plate-label` alone is (0,1,0)
     and loses its margin to `.frag p{margin:0 0 .85em}` at (0,1,1) — a value
     the record states and the page would not use. The plate's opening
     whitespace lives on the label, not on the region below it, so the label
     binds DOWN to the plate it names rather than up to the paragraph it
     follows. */
  .frag p.plate-label{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps;
    text-transform:lowercase; font-size:.8rem; letter-spacing:.26em;
    color:var(--thr-soft); margin:3.4em 0 .55rem;
    font-variant-numeric:tabular-nums lining-nums;
  }
  .frag p.plate-label + .tablewrap{ margin-top:0; }
  .tablewrap td, .tablewrap th{
    /* A tariff grid is not decoration a reader skims past — it is the thing
       they came to check. It was the smallest reading type in a system that
       sizes prose at 20px. The grid grows ~13% and slides sooner; the region
       exists and says so, and a slide is cheaper than a squint. */
    padding:.5rem .875rem .625rem .125rem; text-align:left; vertical-align:top;
    font-size:1.0625rem; line-height:1.5;
    border-bottom:1px solid var(--thr-rule);
  }
  .tablewrap th{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    font-weight:400; letter-spacing:.14em; font-size:.875rem; color:var(--thr-soft);
    padding-top:.625rem; padding-bottom:.75rem;
  }
  .tablewrap th p{ font-weight:400; }
  .tablewrap th strong{ font-weight:inherit; }
  .tablewrap tr.row-span-label td{
    border-bottom:0; font-style:italic; color:var(--thr-soft);
    padding:16px 2px 6px;
  }
  .tablewrap td p, .tablewrap th p{ margin:0; }
  .tablewrap td.col-right{ text-align:right; padding-right:10px;
    font-variant-numeric:tabular-nums lining-nums; }
  .slide-note{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    letter-spacing:.26em; font-size:.8rem; color:var(--thr-soft);
    text-align:right; margin:1.6em 0 -1.8em;
  }

  /* lost images: silent omission unless the source named the image */
  .img-lost:empty{ display:none; }
  /* An INLINE lost image stood where a small float sat beside the words —
     the Legal Corner hammer sits in essentially every DDT digest. As a
     dashed box it was the only closed rectangle on a page of hairlines, and
     louder than the room's own name. It is a registrar's note in the flow.
     The dashed frame stays for the BLOCK case, where a picture genuinely
     occupied the place the frame now holds. */
  .img-lost{
    display:block; font-style:italic; color:var(--thr-soft); font-size:.9375rem;
    border:1px dashed var(--thr-rule); padding:.8rem 1rem; margin:1.2em 0;
  }
  /* Doubled class, not order: at a single class this lost to `.img-lost`
     below it and the frame came back — the same specificity trap that kept
     `.plate-label`'s margin from ever firing. */
  .img-lost.img-lost--inline{
    border:0; padding:0; margin:.2em 0 .5em;
  }
  .embed-citation{
    display:block; font-style:italic; color:var(--thr-soft); font-size:.9375rem;
    border:1px solid var(--thr-rule); padding:.8rem 1rem; margin:1.2em 0;
  }
  .layout{ display:contents; }

  /* the provenance rail (desktop): the registrar's margin — a museum
     label stays bolted beside its exhibit, so the post is sticky:
     placement, not motion (nothing scroll-triggered moves) */
  .rail{ display:none; }
  @media (min-width:1240px){
    .measure{ position:relative; }
    .rail{
      display:block; position:absolute; left:-15rem; top:.5rem; bottom:0;
      width:12.5rem;
    }
    .rail-inner{
      position:sticky; top:2rem;
      font-size:.875rem; line-height:1.5; color:var(--thr-soft);
      border-right:1px solid var(--thr-rule); padding-right:1.2rem;
      text-align:right;
    }
    .rail p{ margin-bottom:.7em; }
    .rail .rail-label{
      display:block;
      font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
      letter-spacing:.26em; font-size:.8rem;
    }
    /* The rail carries the identity at this width; no ghost slot. */
    .band .kicker{ display:none; }
  }

  /* one-shot return slip: a follower of a reference never loses their
     page — dressed as the object its copy claims, a call slip laid
     across the story, its left edge the cloth of the page it keeps */
  .return-slip{
    display:block; max-width:34em; margin:1.1rem auto 0;
    padding:.55rem 1.25rem; text-align:left;
    font-style:italic; font-size:.9375rem; color:var(--thr-soft);
    background:var(--parchment-deep); border:1px solid var(--thr-rule);
    border-left:3px solid var(--cloth-ddt);
  }
  .return-slip.slip--jest{ border-left-color:var(--cloth-jest); }
  .return-slip:hover{ color:var(--thr-ink); }
  /* The ruling of 2026-09-05 listed this under "does not apply" and it is
     applied anyway, because the slip NAVIGATES: the whole element is an
     anchor back to the page the reader left, and the rule sits on the
     identity inside it exactly as `.rs-id` sits inside a run-step. Leaving it
     at --thr-rule would have kept one navigate mark at 1.61:1 — the very
     defect the ruling exists to close — and would have made the site check's
     family equivalence false. Recorded as a departure, not an oversight. */
  .return-slip .figures{ border-bottom:1px solid var(--thr-nav); }
  .return-slip:hover .figures{ border-bottom-color:var(--gilt); }
  @media (prefers-reduced-motion:no-preference){
    .return-slip{ animation:cardUp .18s ease-out; }
  }

  /* ---------------- review scaffold (NOT part of the design) ---------------- */
  .scaffold{
    position:fixed; left:0; right:0; bottom:0; z-index:30;
    background:#2b2b2b; color:#ddd;
    font:.75rem/1.4 system-ui, -apple-system, "Segoe UI", sans-serif;
    display:flex; flex-wrap:wrap; gap:.4rem .9rem; align-items:center;
    padding:.45rem .8rem; border-top:1px solid #555;
  }
  .scaffold b{ font-weight:600; color:#fff; }
  .scaffold .note{ opacity:.65; }
  .scaffold button{ color:#bbb; padding:.15rem .5rem; border:1px solid #555; border-radius:3px;
    font:inherit; }
  .scaffold button:hover{ border-color:#999; color:#fff; }

  /* ---------------- overlays: record card and source view ---------------- */
  .veil{
    position:fixed; inset:0; z-index:40; background:rgba(21,15,11,.45);
    display:none; align-items:center; justify-content:center; padding:1.25rem;
  }
  .veil.open{ display:flex; }
  .record-card, .source-panel{
    background:var(--parchment); color:var(--thr-ink);
    max-width:26rem; width:100%;
    border:1px solid var(--gilt); /* summoned surface: interaction state */
    padding:1.4rem 1.5rem 1.5rem;
    position:relative;
  }
  /* 2px is the opening weight — a summoned card is an opening, the same act
     as a register or a table plate, and it had been the one object in the
     system with its own private rule weight. (The reason first written here,
     that 3px was the system's only third thickness, was false: the return
     slip's left cloth edge is 3px. The outcome stands on the opening-weight
     argument alone.) The cloth still keys the world; the gilt border, not
     this rule, marks 'summoned'. */
  .record-card{ border-top:2px solid var(--cloth-ddt); }
  .record-card.world--jest{ border-top-color:var(--cloth-jest); }
  .source-panel{ max-width:52rem; max-height:86svh; display:flex; flex-direction:column;
    border:1px solid var(--thr-rule); }
  @media (prefers-reduced-motion:no-preference){
    .veil.open .record-card, .veil.open .source-panel{ animation:cardUp .18s ease-out; }
    @keyframes cardUp{ from{ opacity:0; transform:translateY(6px); } to{ opacity:1; transform:none; } }
  }
  .card-kicker{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    font-size:.8rem; letter-spacing:.26em; color:var(--thr-soft);
  }
  .card-rule{ display:block; width:2.6rem; height:2px; margin:.55rem 0 .8rem;
    background:var(--thr-ink); }
  .record-card .card-rule{ background:var(--cloth-ddt); }
  .record-card.world--jest .card-rule{ background:var(--cloth-jest); }
  .card-title{
    /* This title is a CITATION, not identity — and Bodoni was losing it. At
       18.4px the face's thin hyphen falls under one device pixel at 1x, so
       2010-TIOL-102-HC-DEL-CX printed as "2010 TIOL 102 HC DEL CX": the card
       opened by misprinting the very string it exists to decode. Lowering
       opsz (28 to 18) was the right diagnosis and an insufficient dose — the
       hyphens returned only at 2x, and office desktops at 1x are the stated
       environment. It now sets in the species every other citation on the
       page already uses, where the same string prints its hyphens at full
       ink. The lock is unbroken: Bodoni stays on identity, and this is data. */
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps;
    font-weight:400; letter-spacing:.03em;
    font-size:1.25rem; line-height:1.3; margin-bottom:.9rem;
    overflow-wrap:break-word;
  }
  .card-rows{ border-top:1px solid var(--thr-rule); }
  .card-rows > div{ display:flex; gap:1.2rem; padding:.5rem 0; min-height:44px;
    border-bottom:1px solid var(--thr-rule); font-size:1.0625rem; align-items:baseline; }
  .card-rows dt{
    flex:0 0 6.5rem;
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps; text-transform:lowercase;
    letter-spacing:.14em; font-size:.875rem; color:var(--thr-soft);
  }
  .card-rows dd{ margin:0; }
  .card-note{ font-style:italic; color:var(--thr-soft); font-size:.9375rem; margin-top:.9rem;
    max-width:38ch; }
  .card-close{
    position:absolute; top:.35rem; right:.35rem; font-size:1.1rem; color:var(--thr-soft);
    padding:.6rem .85rem;
  }
  .card-close:hover{ color:var(--thr-ink); }
  /* Inset, like the ledger cell's: at the global 3px offset this ring lands
     flush on the card's 2px cloth top border and 2px from its gilt right
     border, reading as a doubled band in the corner. Keyboard users are the
     only people the ring exists for. */
  .card-close:focus-visible{ outline:2px solid var(--thr-ink);
                             outline-offset:-3px; }
  .source-meta{ display:flex; flex-wrap:wrap; gap:.3rem 1.4rem; margin-bottom:.6rem;
    font-size:.85rem; color:var(--thr-soft); }
  .source-meta .figures{ overflow-wrap:anywhere; }
  .source-note{ font-style:italic; color:var(--thr-soft); font-size:.9375rem;
    margin-bottom:.7rem; }
  /* View toggles are view-controls, not navigation: no gilt underline — the
     open state carries the OPEN-MARKER, and the open-marker is the strips'
     own 2px cloth bar.
     Ruled 2026-09-05, on renders. This comment already said "like the
     strips" and the rule drew a 1px `--thr-ink` border instead: the only
     state mark in the whole stylesheet drawn that way, and shaped exactly
     like the navigate rule — on a page where nothing else carries one, so
     the single rule on the screen sat under the one control that goes
     nowhere, marking the tab you are ALREADY IN while the tab that acts went
     bare. Two findings, one cause: an intended system drawn two ways.
     The archive has exactly two state marks and now keeps to them —
     1px navigate rule under a door, 2px cloth bar under an open choice. */
  .source-tabs{ display:flex; gap:1.1rem; margin-bottom:.6rem; }
  .src-tab{
    font-family:'Alegreya SC',Georgia,serif; font-variant-caps:small-caps;
    text-transform:lowercase; letter-spacing:.14em; font-size:.875rem;
    color:var(--thr-soft); position:relative;
    /* the touch floor, as on the strips whose marker it now shares */
    padding:.65rem 0 calc(.65rem + 3px);
  }
  .src-tab:hover{ color:var(--thr-ink); }
  .src-tab.open{ color:var(--thr-ink); }
  .src-tab.open::after{
    content:""; position:absolute; left:0; right:0; bottom:.65rem; height:2px;
  }
  /* keyed on the volume, exactly as .thr-rule and the strips are */
  .threshold--ddt .src-tab.open::after,
  .world--ddt .src-tab.open::after{ background:var(--cloth-ddt); }
  .threshold--jest .src-tab.open::after,
  .world--jest .src-tab.open::after{ background:var(--cloth-jest); }
  #source-frame{ flex:1; width:100%; min-height:20rem;
    border:1px solid var(--thr-rule); background:#fff; }
  #source-frame[hidden], #source-pre[hidden]{ display:none; }
  .source-panel pre{
    flex:1; overflow:auto; border:1px solid var(--thr-rule); background:var(--parchment-deep);
    padding:1rem; font:.8125rem/1.55 ui-monospace, "Cascadia Mono", Consolas, monospace;
    white-space:pre-wrap; overflow-wrap:anywhere; color:var(--thr-ink);
  }

  /* ---------------- phones ---------------- */
  @media (max-width:760px){
    .shelf{ flex-direction:column; align-items:center; gap:2rem; }
    .shelf::after{ content:none; }
    .volume{ width:min(19rem, 84vw); }
    .reading{ font-size:1.0625rem; }
    .frag .len-s{ font-size:1.5rem; }
    .frag .len-m{ font-size:1.3125rem; }
    .frag .len-l{ font-size:1.1875rem; }
    .frag h3, .world--jest .r-section_heading{ font-size:1.0625rem; }
    .frag .r-pull_quote{ font-size:1.125rem; }
    /* At -1.05rem the here-dot lands 3px from the viewport edge, inside the
       edge-gesture strip and 17px left of everything else on the page — the
       only mark that reads as having fallen off its block, on the
       readership's primary device. */
    .contents .c-row--here .c-ord::before{ left:-.6rem; }
    .signoff-matter p{ font-size:1rem; }
    /* the issue numbers ARE the register's content: they set smaller here,
       never hidden, because a published day and a holiday must not print
       identically on this readership's primary device. */
    .cal-day .n{ font-size:.75rem; letter-spacing:.02em; }
    .calendar td{ height:3.1rem; }
    .cal-day{ padding:.35rem .35rem .35rem .3rem; }
    .calendar th{ font-size:.8rem; letter-spacing:.1em; }
    /* the clamp bottoms out at 1.7rem = 27.2px here */
    .register-month{ font-variation-settings:'opsz' 28; }
    .essay-row{ gap:.9rem; }
  }
  @media (max-width:600px){
    #card-veil{ align-items:flex-end; padding:0; }
    #card-veil .record-card{ max-width:none; border-left:0; border-right:0; border-bottom:0; }
    .source-panel{ max-height:94svh; }
  }

  /* The advocate's copy: this readership files things. The story, its
     decoded apparatus and its provenance print clean — and hard rule 5
     holds on paper by the same construction (no hrefs exist to print).
     D3 inherits this dress. */
  @media print{
    .scaffold, .board, .veil, .back, .return-slip, .slide-note,
    .run-step{ display:none !important; }
    body, .article, .threshold{ background:#fff; }
    /* the cover's parchment lettering would print near-white on white */
    body{ color:var(--thr-ink); }
    .cover *{ color:var(--thr-ink); }
    .volume{ box-shadow:none; }
  }

/* ==========================================================================
   The site block. Appended to C1's accepted stylesheet, never edited into it.

   Everything here exists because the archive became REAL PAGES, and nothing
   here changes a colour, a size, a tracking or a rule weight that C1 settled.
   Three jobs only:

     1. give the anchor the dress the button had, wherever the button was the
        thing that navigated;
     2. take the navigate rule OFF a control that does not navigate;
     3. dress the one room that a veil could not become.

   ------------------------------------------------------------------------
   1 & 2 -- THE UNDERLINE LAW, KEYED ON THE FACT

   C1's grammar: an underline means "will navigate", and it appears nowhere
   else. The artifact could not enforce it, because in a single file with 29
   screens nothing had a destination, so every control was a <button> and the
   rule had to be keyed on the SPECIES of citation instead:

        button.cite--wired[data-card="backissue"]{ border-bottom: ... }

   That is "the element is not the fact" for the fourth time in this project,
   and on 2026-09-05 it was found live and confirmed on a render: of the six
   wired back-references in the accepted build, FIVE carry the navigate rule
   and open a record card instead of navigating, because their target story is
   not typeset. The direction document's own ship rule says an underline may
   only be emitted where the pipeline knows the target is built; the artifact
   violated it in prose, and `structure_check.js` looked only at the ledger.

   On a real site the fact has an element of its own. A control that goes to a
   URL is an anchor and nothing else is, and the generator emits an anchor
   only where the route exists. So underline and anchor become the SAME THING,
   and `site_check.js` asserts the equivalence in both directions rather than
   trusting it. A back-reference whose target this build has not typeset keeps
   C1's ink and family exactly and loses only the rule -- the minimum that
   makes the law true.

   AND THE SENTENCE THAT USED TO END HERE WAS INCOMPLETE (corrected 2026-09-06).
   It read: "in the finished archive the species disappears, because every
   bulletin is typeset". The species it names does disappear -- at full corpus
   0 marks name a bulletin this build has not typeset -- but the BUTTON does
   not, and 890 of them ship. A reference that names a bulletin and no story
   in it can never be an anchor at any scale, because the day route was ruled
   NO; it keeps this dress permanently and its card carries the door (C5b,
   section 2b below). One sentence covered two species and retired both.
   ========================================================================== */

a { color: inherit; text-decoration: none; }

/* -- the live back-reference: running text under a hairline -- */
/* A citation mark sits in RUNNING PROSE, so it stays inline and may break
   across a line. C1's button was an inline-block, which cannot break: the
   whole mark moved to the next line instead, leaving a gap.
   MEASURED before it was written down, over 612 mark/width comparisons from
   320px to 460px on five built rooms: the two builds differ on SIX of them --
   one mark, "TIOL-DDT 523", in a 20px band at 440-460px. So the change is
   real and it is small, which is the honest way to record it.
   The direction it cuts needed checking too, because round 10 found the
   opposite for the run-step: a wrapped identity draws the navigate rule TWICE
   for one destination. That finding does not reach here. It was about an
   IDENTITY STRING standing alone in furniture, where two fragments read as two
   destinations -- which is why `.rs-step` is display:block with flex-wrap and
   stays so. A link inside a sentence that breaks and carries its rule onto
   both lines is ordinary typography, and the alternative -- a mark that cannot
   break -- is the ragged hole. Inline is right here and block is right there,
   and the reason is the setting, not the species. */
a.cite--wired[data-card="backissue"] {
  display: inline; font-family: inherit; font-variant: normal;
  color: var(--thr-ink);
  border-bottom: 1px solid var(--thr-nav);
  padding: 0; cursor: pointer;
}
a.cite--wired[data-card="backissue"]:hover { border-bottom-color: var(--gilt); }
a.cite--wired.sought { color: var(--thr-ink); border-bottom-color: var(--gilt); }

/* -- a carded mark that opens a card: small caps, no rule -- */
a.cite--wired:not([data-card="backissue"]),
button.cite--wired { padding: 0; cursor: pointer; }
/* Doubled, so this wins on specificity rather than on order (project law:
   prefer a doubled class to ordering). A button.cite--wired exists on this
   site ONLY where no route does, so it must not promise one. */
button.cite--wired.cite--wired[data-card="backissue"] { border-bottom: 0; }
button.cite--wired.cite--wired[data-card="backissue"]:hover {
  border-bottom: 0; color: var(--thr-ink);
}

/* -- the contents row, the run-step, the apparatus entry -- */
.contents a.c-row .c-title {
  border-bottom: 0;
  text-decoration: underline; text-decoration-thickness: 1px;
  text-decoration-color: var(--thr-nav); text-underline-offset: 2px;
}
.contents a.c-row:hover .c-title { text-decoration-color: var(--gilt); }
.contents a.c-row { color: inherit; }

a.rs-step { color: var(--thr-ink); }
a.rs-step .rs-id { border-bottom: 1px solid var(--thr-nav); padding-bottom: 2px; }
a.rs-step:hover .rs-id { border-bottom-color: var(--gilt); }

/* C1's rule is `.apparatus button.app-go`, and it declares NO tracking and NO
   colour: the button took `letter-spacing: normal` from the browser's own
   form-control reset and its colour by inheritance. An anchor gets neither
   reset, so both have to be said out loud to render what C1 renders -- the
   control-dress law running the other way. (An earlier draft of this file
   invented `.03em` here and the side-by-side measurement caught it: 0.48px of
   tracking C1 does not print.)
   `display:inline-block` reproduces C1's box exactly. It is right for a mark
   in FURNITURE, where the string sits alone on its line; it would be wrong for
   a mark in running prose, which must be able to break -- see the citation
   marks below, which stay inline deliberately. */
.apparatus a.app-go {
  display: inline-block; letter-spacing: normal;
  font-family: 'Alegreya SC', Georgia, serif; font-variant-caps: small-caps;
  font-variant-numeric: tabular-nums lining-nums;
  border-bottom: 1px solid var(--thr-nav); padding: 0 0 1px;
}
.apparatus a.app-go:hover { border-bottom-color: var(--gilt); }
/* Same species, same reason: the count sits alone in the kicker and the rail. */
a.to-contents { display: inline-block; }

/* The light warms rather than switches (motion 6) -- the anchors join the
   same list the buttons are on in C1's block. */
@media (prefers-reduced-motion: no-preference) {
  a.cite--wired, a.rs-step .rs-id, .apparatus a.app-go {
    transition: color .15s ease, border-bottom-color .15s ease;
  }
  .contents a.c-row .c-title { transition: text-decoration-color .15s ease; }
}

/* ==========================================================================
   2b -- THE CARD'S DOOR (C5b, 2026-09-06)

   The largest species in the run: 890 back-references on 680 pages name a
   BULLETIN and no story in it, so the mark cannot be an anchor -- the day
   route was ruled NO, and putting the day's head on the mark would draw the
   navigate rule over a string the citing sentence did not write. The C2
   ruling gave the door to the card instead, where the archive can say what it
   is doing before it does it.

   NO NEW DRESS. The door is the same act as the reading pane's -- a block has
   shown you a day; here is the way in -- so it wears `.pane-cta` unchanged and
   says the pane's own words. What is written here is only what C1's rule
   cannot reach: C1's hover and focus are scoped to `.pane-door`, a parent that
   does not exist inside a card, so the dress has to be said out loud. That is
   this file's job 1 running the other way, exactly as it does for
   `.apparatus a.app-go`.

   The FOCUS RING is C1's global `a:focus-visible` at offset 3px, deliberately
   NOT the pane door's 6px: that offset exists because the pane's ring wraps a
   five-rem block, and this one wraps a single line of text.

   THE 44px FLOOR. A standalone control, so it must clear it. The cta's own box
   is 19.2px (12.8px type over 1.3, plus its 2px rule), so the padding grows the
   hit box and the negative margin gives back what it took IN BOTH DIRECTIONS
   -- round 10's remedy with the design sitting's correction, which found that
   repaying only the bottom half drops everything below by half the padding.
   Measured on a render: 44.4px. `.pane-cta`'s own .9rem top margin survives on
   the anchor, so the door still stands off the note by 14.4px.
   ========================================================================== */
.card-door {
  display: block;
  padding: 12.6px 0; margin: -12.6px 0;
}
.card-door .pane-cta { margin-top: .9rem; }
.card-door:hover .pane-cta,
.card-door:focus-visible .pane-cta { border-bottom-color: var(--gilt); }
@media (prefers-reduced-motion: no-preference) {
  .card-door .pane-cta {
    transition: border-bottom-color .15s ease-out, color .15s ease-out;
  }
}

/* ==========================================================================
   3 -- THE CAPTURE AS A ROOM

   Measured, not preferred. The corpus is 65.3MB of captures; embedding each
   in every story page of its bulletin costs 326.9MB -- five copies of the
   whole corpus -- and puts ~19KB of escaped markup on a page whose story is
   often smaller. So the source view keeps its dress exactly and moves from a
   veil to a room with an address of its own, which is also the first time the
   untouched capture has been a citable thing.
   ========================================================================== */

.measure--wide { max-width: 60em; margin-left: auto; margin-right: auto;
  padding-left: 1.25rem; padding-right: 1.25rem; }
.reading .measure--wide { max-width: 60em; }

.source-panel--room {
  max-width: none; max-height: none; border: 0; padding: 0;
  background: transparent; display: block;
}
.source-panel--room #source-frame { min-height: 34rem; }
.source-panel--room pre {
  max-height: 34rem; overflow: auto;
  border: 1px solid var(--thr-rule); background: var(--parchment-deep);
  padding: 1rem; font: .8125rem/1.55 ui-monospace, "Cascadia Mono", Consolas, monospace;
  white-space: pre-wrap; overflow-wrap: anywhere; color: var(--thr-ink);
}
.capture .provenance-foot { margin-top: 2.4em; }
/* The band belongs to the room it opens. C1 sets `.reading .measure, .reading
   .band-inner{ max-width:34em }` together, so a room that widens its measure
   and leaves its band behind puts the back link and the cloth rule on a
   different left edge from everything under them -- which is what the first
   render of this room showed, the rule floating 260px right of the page it
   rules. They move together or not at all. */
.capture .band-inner { max-width: 60em; }
/* SAY-IT-ONCE, per fact, is a rule about the PAGE, not about a breakpoint.
   C1 hides the band kicker at >=1240px because the margin rail carries the
   identity there -- never both. The capture room has no rail, so at 1440px
   the page was left saying nothing at all about which bulletin's capture it
   was showing. The kicker keeps its job here, which is the law working, not
   an exception to it. */
.capture .band .kicker { display: block; }

/* The reading room's own ground. On the artifact a screen inherited it from
   the board behind it; a page has to paint it. */
.screen.article, .screen.threshold { background: var(--parchment); }

/* ==========================================================================
   Print. The advocate's copy: the story, its decoded apparatus and its
   provenance. Navigation prints nowhere -- there are no arrows to follow on
   paper -- and no dead link can leak onto the page because none exists.
   C1 specified this dress and assigned it to D3; a real page is where it can
   finally be true, so it ships here.
   ========================================================================== */
@media print {
  .board, .veil, .back, .return-slip, .slide-note, .run-step,
  .source-tabs, #source-frame { display: none !important; }
  body { background: #fff; color: #000; }
  .screen.article, .screen.threshold { background: #fff; }
  .reading .measure { max-width: none; padding: 0; }
  .rail { display: none !important; }
  .band .kicker { display: block !important; }
  a.cite--wired, a.rs-step .rs-id, .apparatus a.app-go,
  .contents a.c-row .c-title { border-bottom: 0; text-decoration: none; }
  .contents a.c-row, .apparatus a.app-go, a.cite--wired { color: #000; }
  .provenance-foot { border-top: 1px solid #999; }
}

/* ==========================================================================
   4 -- THE SEARCH COUNTER (D4, 2026-09-08)

   The archive is a critical edition with a court registry's card index behind
   it, and this is the registry's counter. It is the FOURTH piece of furniture
   -- cover, two thresholds, counter -- and not a fifth KIND: the four kinds
   are story, digest, cartoon and capture, and nothing here mints an address
   for anything in the record.

   NO NEW COLOUR, SIZE, TOKEN OR RULE WEIGHT. Every value below is one C1
   already settled, and most of the page carries no new class at all: the
   label wears `.kicker`, the honest limits wear `.door-note`, and A RESULT
   IS A `.contents` ROW -- the same anchor, the same 1.0625rem title, the same
   navigate rule the bulletin's own contents block uses. That is not thrift.
   The underline law says an underline means "will navigate", and the surest
   way to keep it on a list built in a browser is to build the list out of the
   one component in the archive where the law is already true.

   WHAT IS ABSENT, AND WHY. There is no `.thr-rule` on this plate. The cloth
   bar is a VOLUME's mark -- `--cloth-ddt` on one threshold, `--cloth-jest` on
   the other -- and the counter serves both runs and belongs to neither.
   Drawing it in a third colour would mint a binding the archive does not
   have; drawing it in one of the two would say this page belongs to that run.
   Absent for a reason, exactly as the run-step's absent side is.
   ========================================================================== */

/* Three ways out instead of one. `.back` keeps its own dress and its own
   46px hit box (the design sitting's touch-floor pass); this only lays them
   on a line, and wraps rather than shrinking them on a phone. */
.thr-ways { display: flex; flex-wrap: wrap; gap: 0 1.6rem; align-items: baseline; }

.find { margin: 2.2rem 0 0; max-width: 34em; }
.find .kicker { display: block; margin-bottom: .5rem; }
.find-row { display: flex; gap: .8rem; align-items: stretch; }

/* THE 44px FLOOR, and an input is the one control in the archive that has no
   C1 precedent to inherit it from. .625rem of padding over a 1.0625rem line
   at 1.4 puts the box at 43.8px, so the padding is .68rem: measured, not
   chosen. `site_check.js` sweeps it with every other species. */
.find-field {
  flex: 1 1 auto; min-width: 0;
  font-family: 'Alegreya', Georgia, serif; font-size: 1.0625rem; line-height: 1.4;
  padding: .68rem .8rem; color: var(--thr-ink);
  background: var(--parchment-deep);
  /* --thr-soft, NOT --thr-rule, and measured before it was written down.
     The fill is 1.08:1 against the page, so this box is the sole means of
     identifying the archive's only form control -- WCAG 1.4.11's 3:1 case,
     which is the exact reasoning that moved the focus ring off gilt at
     2.20:1 in the design sitting. --thr-rule measures 1.49:1 on the deepened
     sheet; --thr-soft measures 5.11:1. And it stays a BOX -- four sides, one
     width, one colour -- which is what keeps it clear of the navigate rule,
     the same hex at 1px along a bottom edge and nothing else. */
  border: 1px solid var(--thr-soft); border-radius: 0;
  -webkit-appearance: none; appearance: none;
}
/* NO OPACITY. It was `--thr-soft` at .8, which composites to #857569 and
   3.45:1 -- under the 4.5:1 a line of text owes, and a COMPOSITE value at
   that: the class of number this project has now been wrong about three
   times, because nothing in any table is measuring it. The token, undiluted,
   is 5.11:1. */
.find-field::placeholder { color: var(--thr-soft); }
/* THE BROWSER'S OWN CLEAR BUTTON, found on a render and on nothing else.
   `type="search"` gives Chromium a cancel glyph it draws in ITS accent
   colour, and the first shot of this page carried a bright blue cross inside
   the field -- a colour that is in no token, no palette and no record in this
   project, on the archive's only form control. `appearance:none` on the field
   does not reach the shadow part; the part has to be named. */
.find-field::-webkit-search-cancel-button,
.find-field::-webkit-search-decoration { -webkit-appearance: none; appearance: none; }
.find-field:focus { outline: 2px solid var(--thr-ink); outline-offset: 3px; }

/* The submit is a BUTTON and carries no underline, because the underline law
   is about navigation and this does not navigate -- it asks. Same reasoning
   that took the rule off the register's strips.

   AND IT CARRIES NO BORDER EITHER, which is not a preference. Its first cut
   had `border:1px solid var(--thr-ink)` -- invisible against a fill of the
   same ink -- and `site_check.js` failed the build: a visible bottom border
   IS the navigate rule as the check reads it, so a button that does not
   navigate was drawing it. The fill is the affordance; the border was doing
   no work and asserting something false. The padding grows by the 2px the
   border gave back, so the 44px box is unchanged. */
.find-go {
  font-family: 'Alegreya SC', Georgia, serif; font-variant-caps: small-caps;
  text-transform: lowercase; letter-spacing: .14em; font-size: .875rem;
  padding: .75rem 1.15rem; color: var(--parchment);
  background: var(--thr-ink); border: 0;
}
.find-go:hover { background: var(--thr-soft); }

.find-state { margin-top: 1.1rem; color: var(--thr-soft); font-size: .875rem; }
.find-results { margin-top: 1.2rem; max-width: 52em; }
.find-results ol:empty { border-top: 0; }
/* The contents block sets its ordinal in a fixed 2.2rem gutter, because a
   bulletin's ordinals are one or two characters. A result's ordinal is its
   whole identity -- `TIOL-DDT 1814 * story 3 * 13 March 2012` -- so here it
   sits above the title rather than beside it. Layout only: the ink, the size
   and the tracking are the contents block's own. */
.find-results .c-row { display: block; }
.find-results .c-ord { display: block; width: auto; margin-bottom: .15rem; }
/* The standing note under the field was ruled off on 2026-09-08; what is left
   wearing this dress is the no-script fallback, which a reader with JavaScript
   never sees at all. Kept as its own class so `site_check` can assert the
   note's ABSENCE without the fallback answering for it. */
.find-noscript { margin-top: 2.6rem; }
@media print { .find, .find-state, .find-noscript { display: none !important; } }
