/* ─────────────────────────────────────────────────────────────────────────────
   DEBASE — styling B, "The entry"

   A different argument from styling A, not a reskin of it.

   A dresses the page as a LEDGER: warm paper, engraved serif, Roman numerals,
   tabular figures. It argues from the accounts.

   B dresses it as a DICTIONARY ENTRY and argues from the word. `debase` has five
   senses in ordinary English and four of them are things this token pointedly does
   NOT do — so the page prints the real definitions, strikes them through, and
   writes the correction underneath. The fifth, the archaic literal one (de- "down"
   + base "low"), is the only one left standing, and it is exactly what the contract
   does: it brings the supply down and nothing can raise it.

   That device only works on a hard, printed-looking ground, so: near-black, a
   condensed poster face for the headword, a serif with real italics for the senses,
   and mono for anything a machine produced.
   ───────────────────────────────────────────────────────────────────────────── */

:root {
  --ground: #0b0d10;
  --ground-2: #14171c; /* an inset block, one step up from the ground */
  --paper: #ece7dd;
  --paper-2: #a8a49a; /* secondary copy */
  --paper-3: #6f6d68; /* struck text, furniture, the quiet parts */
  --rule: #272b32;

  --flame: #2b7bff; /* the logo blue, lifted a little to hold up on a dark ground */
  --flame-true: #005cfe; /* the artwork's own value, kept for reference */
  --peak: #19c268; /* likewise the logo green */

  --measure: 66rem;
  --poster: "Anton", "Haettenschweiler", "Arial Narrow", sans-serif;
  --serif: "Newsreader", "Iowan Old Style", Georgia, serif;
  --sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
  --mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}

* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  background: var(--ground);
  color: var(--paper);
  font-family: var(--sans);
  font-size: 17px;
  line-height: 1.6;
}

.wrap { max-width: var(--measure); margin: 0 auto; padding: 0 clamp(1.25rem, 5vw, 3rem); }

/* ── Masthead ─────────────────────────────────────────────────────────────── */

.masthead {
  display: flex; align-items: center; justify-content: space-between;
  gap: 1.5rem; padding: 1.5rem 0; border-bottom: 1px solid var(--rule); flex-wrap: wrap;
}
.wordmark { display: flex; align-items: center; gap: 0.7rem; text-decoration: none; color: var(--paper);
  font-family: var(--poster); font-size: 1.5rem; letter-spacing: 0.04em; }
.wordmark img { width: 32px; height: 32px; }
.masthead { position: relative; }

/* The sections menu is a <details>. On a desktop there is no button at all: the summary is
   hidden and the nav shows inline, exactly as the old <nav> did.

   Showing a CLOSED <details>'s content on desktop takes TWO rules, because engines hide it two
   different ways and only one of them is the old `display: none`:

     1. `.menu > nav { display: flex }` — beats the UA sheet's `details:not([open]) > *` rule
        (author styles win over UA styles regardless of specificity). Handles older engines.
     2. `::details-content { content-visibility: visible }` — current Chrome/Safari/Firefox wrap
        the content in this pseudo and set `content-visibility: hidden`, which SIZE-CONTAINS the
        box. Rule 1 alone leaves the nav rendered at zero width with its links overflowing off
        the right of the page — verified, it is exactly what happened.

   Engines that do not know the pseudo ignore rule 2 and are covered by rule 1, so both stay. */
.menu > summary { display: none; }
.menu::details-content { content-visibility: visible; block-size: auto; }
.menu > nav { display: flex; gap: 1.35rem; flex-wrap: wrap; font-family: var(--mono);
  font-size: 0.74rem; letter-spacing: 0.12em; text-transform: uppercase; }
.menu > nav a { color: var(--paper-3); text-decoration: none; }
.menu > nav a:hover, .menu > nav a[aria-current] { color: var(--paper); }

/* Between the breakpoint and ~64rem the inline nav, the wordmark and the socials together
   exceed the content column and the masthead wraps to two rows (87px → 147px at 768px). Tighten
   the nav and the icons through that band rather than letting it wrap. */
@media (min-width: 46rem) and (max-width: 64rem) {
  .masthead { gap: 1rem; }
  .menu > nav { gap: 0.85rem; font-size: 0.68rem; letter-spacing: 0.08em; }
  .socials a { width: 2rem; height: 2rem; }
}

/* ── Socials ──────────────────────────────────────────────────────────────────
   The only outbound links on the page. Icons are inline SVG inheriting currentColor, so they
   tint with the link and cost no request; the footer copies show the handle as text as well,
   because a bare glyph tells you the platform but not who you are about to follow. */
.socials { display: flex; align-items: center; gap: 0.15rem; list-style: none; margin: 0; padding: 0; }
.socials a {
  display: inline-flex; align-items: center; justify-content: center;
  width: 2.25rem; height: 2.25rem; color: var(--paper-3); text-decoration: none;
  transition: color 120ms ease;
}
.socials a:hover { color: var(--paper); }
.socials a svg { display: block; }
.socials a > span { display: none; }   /* handle text is footer-only */

.footer-socials { margin-top: 1.1rem; gap: 1.5rem; }
.footer-socials a {
  width: auto; height: auto; gap: 0.5rem; padding: 0.4rem 0;
  font-family: var(--mono); font-size: 0.76rem; letter-spacing: 0.08em;
}
.footer-socials a > span { display: inline; }

/* ── The burn ticker ──────────────────────────────────────────────────────────
   Sits where the errata slip was and stays there: a burn counter is the one number
   on this page that is never finished, so it should not scroll away. Sticky, not
   fixed, so it cannot cover anything on a short viewport.

   It only ever counts UP. That is the entire argument of the site expressed as a
   widget, and it is why the increment below is `+=` with no branch that could
   subtract — a burn counter that ticked down would be describing a different token.

   `aria-live="off"` on purpose: a figure that changes every second or two would be
   read aloud continuously and make the page unusable with a screen reader. The same
   numbers sit in The ledger, static and announced normally. */
.ticker {
  position: sticky;
  top: 0;
  z-index: 10;
  background: var(--ground);
  border-top: 1px solid var(--rule);
  border-bottom: 1px solid var(--rule);
}
.ticker-in {
  display: flex;
  align-items: baseline;
  gap: clamp(1rem, 4vw, 2.75rem);
  flex-wrap: wrap;
  padding-top: 0.7rem;
  padding-bottom: 0.7rem;
}
.tick-item { display: flex; align-items: baseline; gap: 0.6rem; }
.tick-right { margin-left: auto; }
.tick-label {
  font-family: var(--mono); font-size: 0.66rem; letter-spacing: 0.18em;
  text-transform: uppercase; color: var(--paper-3);
}
.tick-value {
  font-family: var(--mono); font-size: clamp(0.95rem, 2.2vw, 1.3rem); font-weight: 500;
  /* Tabular, or every tick shifts the digits sideways and the bar jitters. */
  font-variant-numeric: tabular-nums;
}
.tick-unit { font-family: var(--mono); font-size: 0.7rem; letter-spacing: 0.1em; color: var(--paper-3); }
.tick-dot {
  width: 7px; height: 7px; border-radius: 50%; background: var(--flame);
  display: inline-block; animation: tick-pulse 2.4s ease-in-out infinite;
}
@keyframes tick-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.25; } }
.tick-note { font-family: var(--mono); font-size: 0.66rem; letter-spacing: 0.14em;
  text-transform: uppercase; color: var(--flame); }
/* Pre-launch. A pulsing flame dot beside the word NOT LAUNCHED would read as live no matter what
   the text said, so before launch the dot is hollow, grey and still. `.pre` is on the markup and
   ticker.js removes it when the counter is wired, so there is no live-looking flash either way. */
.ticker.pre .tick-dot { background: none; box-shadow: inset 0 0 0 1px var(--paper-3); animation: none; }
.ticker.pre .tick-note { color: var(--paper-3); }
.ticker.pre .tick-value { color: var(--paper-3); }
/* Phone layout for the bar lives in the Phones block at the end of the file. */
@media (prefers-reduced-motion: reduce) { .tick-dot { animation: none; } }

.errata { margin: 1.25rem 0 0; padding: 0.7rem 1rem; border: 1px solid var(--flame);
  color: var(--flame); font-size: 0.84rem; }

/* ── The entry ────────────────────────────────────────────────────────────── */

.entry { padding: clamp(2.5rem, 7vw, 4.5rem) 0 clamp(2rem, 4vw, 3rem); }
.headword {
  font-family: var(--poster);
  font-size: clamp(4rem, 17vw, 12rem);
  line-height: 0.82;
  letter-spacing: -0.015em;
  text-transform: lowercase;
  margin: 0;
}
/* The syllable break, set quieter than the word it interrupts. */
.headword span { color: var(--paper-3); }
.pron {
  font-family: var(--serif);
  font-size: clamp(1.05rem, 2.4vw, 1.45rem);
  color: var(--paper-2);
  margin: 1.25rem 0 0;
}
.pron em { font-style: italic; }
.pron b { font-weight: 400; color: var(--paper); font-style: normal; }
.etym {
  font-family: var(--serif);
  font-size: 1.02rem;
  color: var(--paper-2);
  max-width: 54ch;
  margin: 1.5rem 0 0;
  padding-top: 1.25rem;
  border-top: 1px solid var(--rule);
}
.etym em { font-style: italic; color: var(--paper); }

/* The mark, at the largest size that still sits BESIDE the headword.
 *
 * The ceiling is arithmetic, not taste: `.wrap` caps the content at 66rem (960px of usable width
 * at this padding), the headword is ~588px once its font-size clamp tops out at 12rem, and the
 * gap is 32px. That leaves ~340px — so 22rem (352px) is the first size that wraps, and when it
 * wraps `justify-content: space-between` drops it to the LEFT of an empty row, where it reads as
 * an orphan rather than a hero. 18rem (288px) keeps ~100px of slack, which is the margin needed
 * for the fallback face: if Anton fails to load, "de·base" is set in Arial Narrow at a different
 * width and a tighter fit would wrap in the wild but never here.
 *
 * If it ever needs to be bigger than this, the answer is a different composition — mark centred
 * ABOVE the word — not a larger number in this rule. */
.entry-mark { width: clamp(9rem, 22vw, 18rem); height: auto; }
.entry-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 2rem; flex-wrap: wrap; }
/* Below this the two genuinely cannot share a line, so stack on purpose rather than letting the
   flex wrap decide — an intentional stack looks like a layout, a wrapped one looks like a bug. */
@media (max-width: 60rem) {
  .entry-top { flex-direction: column; align-items: flex-start; gap: clamp(1.5rem, 5vw, 2.5rem); }
  /* Centred once it stacks. Left-aligned under the pronunciation it sat in the left 40% of an
     otherwise empty row and read as a wrap accident; centred between the entry head and the
     etymology rule it reads as the ornament a dictionary would put there. */
  .entry-mark { width: clamp(8rem, 34vw, 15rem); align-self: center; }
}

/* ── The senses ───────────────────────────────────────────────────────────── */

section { padding: clamp(2.5rem, 6vw, 4.5rem) 0; border-top: 1px solid var(--rule); }
.kicker { font-family: var(--mono); font-size: 0.72rem; letter-spacing: 0.2em;
  text-transform: uppercase; color: var(--paper-3); margin: 0 0 2rem; }

.senses { list-style: none; margin: 0; padding: 0; counter-reset: sense; }
.sense {
  display: grid;
  gap: 0.35rem 1.5rem;
  grid-template-columns: 2.5rem minmax(0, 1fr);
  padding: 1.75rem 0;
  border-top: 1px solid var(--rule);
}
.sense:first-child { border-top: 0; }
.sense::before {
  counter-increment: sense;
  content: counter(sense) ".";
  font-family: var(--mono);
  font-size: 1rem;
  color: var(--paper-3);
  grid-row: 1 / span 3;
  padding-top: 0.2rem;
}
/* The real definition, as a dictionary would print it — then taken away. */
.def {
  font-family: var(--serif);
  font-style: italic;
  font-size: clamp(1.1rem, 2.4vw, 1.5rem);
  line-height: 1.35;
  color: var(--paper-3);
  margin: 0;
  text-decoration: line-through;
  text-decoration-thickness: 1px;
  text-decoration-color: var(--paper-3);
}
/* …and the correction, which is what the contract actually does. */
.fix { margin: 0.6rem 0 0; color: var(--paper); max-width: 58ch; }
.fix b { font-weight: 600; }
.tag {
  font-family: var(--mono); font-size: 0.68rem; letter-spacing: 0.16em;
  text-transform: uppercase; color: var(--paper-3); margin: 0.75rem 0 0;
}
/* Any link inside prose. Without this the two inline "Verify" links fell through to the browser
   default — pure #0000EE with an underline, on a near-black ground. The tag and address links set
   the same treatment explicitly; this makes it the rule rather than the exception. */
p a { color: var(--flame); text-decoration: none; border-bottom: 1px solid rgba(43, 123, 255, 0.35); }
p a:hover { border-bottom-color: var(--flame); }

/* The one sense that survives. Not struck, and marked as standing. */
.sense.stands .def {
  text-decoration: none;
  color: var(--paper);
  font-style: italic;
}
.sense.stands { border-left: 2px solid var(--peak); padding-left: 1.5rem; }
.sense.stands::before { color: var(--peak); }
.stands-note { font-family: var(--mono); font-size: 0.68rem; letter-spacing: 0.16em;
  text-transform: uppercase; color: var(--peak); margin: 0.75rem 0 0; }

/* ── Figures ──────────────────────────────────────────────────────────────── */

h2 { font-family: var(--poster); font-size: clamp(1.9rem, 5vw, 3.2rem); line-height: 0.95;
  letter-spacing: 0.005em; text-transform: lowercase; margin: 0 0 1.75rem;
  /* "the ledger only runs one / way" — balance the break rather than orphan the last word. */
  text-wrap: balance; }
.lede { font-size: clamp(1.02rem, 2vw, 1.18rem); color: var(--paper-2); max-width: 56ch; margin: 0 0 1.1rem; }
.note { margin-top: 1.75rem; }

.figure { font-family: var(--mono); font-size: clamp(1.9rem, 6.5vw, 3.8rem); font-weight: 500;
  letter-spacing: -0.03em; line-height: 1; margin: 0.4rem 0 0; font-variant-numeric: tabular-nums; }
.arc { display: flex; align-items: center; gap: 0.6rem; margin: 1.6rem 0; }
.arc-kept { flex: 4; border-top: 1px solid var(--flame); }
.arc-gone { flex: 1; border-top: 1px dotted var(--paper-3); }

.cells { display: grid; gap: 0; grid-template-columns: 1fr; }
@media (min-width: 46rem) { .cells { grid-template-columns: 1fr 1fr; } }
@media (min-width: 70rem) { .cells { grid-template-columns: repeat(4, 1fr); } }
.cell { padding: 1.3rem 1.5rem 1.3rem 0; border-top: 1px solid var(--rule); }
.cell dt { font-family: var(--mono); font-size: 0.7rem; letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--paper-3); margin: 0 0 0.45rem; }
.cell dd { margin: 0; font-family: var(--mono); font-size: 1.25rem; font-variant-numeric: tabular-nums; }
.cell p { margin: 0.45rem 0 0; font-size: 0.84rem; color: var(--paper-3); line-height: 1.5; }
.flame { color: var(--flame); }
.peak { color: var(--peak); }

/* ── The toll ─────────────────────────────────────────────────────────────── */

.toll { width: 100%; border-collapse: collapse; }
.toll th { text-align: left; font-family: var(--mono); font-size: 0.7rem; letter-spacing: 0.18em;
  text-transform: uppercase; color: var(--paper-3); font-weight: 400; padding: 0 0 0.85rem;
  border-bottom: 1px solid var(--paper-3); }
.toll th:last-child, .toll td:last-child { text-align: right; }
.toll td { padding: 1.3rem 0; border-bottom: 1px solid var(--rule); vertical-align: top; }
.toll .name { font-family: var(--poster); font-size: 1.35rem; text-transform: lowercase;
  white-space: nowrap; padding-right: 2rem; letter-spacing: 0.02em; }
.toll .what { color: var(--paper-2); font-size: 0.92rem; }
.toll .share { font-family: var(--mono); font-size: 1.15rem; font-variant-numeric: tabular-nums; white-space: nowrap; }

/* ── Blocks ───────────────────────────────────────────────────────────────── */

.block { background: var(--ground-2); padding: clamp(1.6rem, 4vw, 2.5rem); }
.terms { margin: 1.75rem 0 0; }
.terms div { display: flex; justify-content: space-between; gap: 1.5rem; padding: 0.9rem 0;
  border-top: 1px solid var(--rule); flex-wrap: wrap; }
.terms dt { font-weight: 600; margin: 0; }
.terms dd { margin: 0; color: var(--paper-2); text-align: right; }

.addresses { margin: 0; }
.addresses div { padding: 1rem 0; border-top: 1px solid var(--rule); }
.addresses dt { font-family: var(--mono); font-size: 0.7rem; letter-spacing: 0.18em;
  text-transform: uppercase; color: var(--paper-3); margin: 0 0 0.35rem; }
.addresses dd { margin: 0; font-family: var(--mono); font-size: 0.84rem; overflow-wrap: anywhere; }
.addresses a { color: var(--flame); text-decoration: none; border-bottom: 1px solid rgba(43, 123, 255, 0.35); }
.addresses a:hover { border-bottom-color: var(--flame); }

/* ── Buttons ──────────────────────────────────────────────────────────────── */

.actions { display: flex; gap: 0.75rem; flex-wrap: wrap; margin-top: 2rem; }
.btn { display: inline-block; padding: 0.8rem 1.5rem; font-family: var(--mono); font-size: 0.78rem;
  letter-spacing: 0.14em; text-transform: uppercase; text-decoration: none;
  border: 1px solid var(--paper); color: var(--paper); background: transparent;
  transition: background 120ms ease, color 120ms ease, border-color 120ms ease; }
.btn:hover { background: var(--paper); color: var(--ground); }
.btn-solid { background: var(--paper); color: var(--ground); }
.btn-solid:hover { background: var(--flame); border-color: var(--flame); color: #fff; }
/* The one link that leaves for somewhere it can actually be traded. */
.btn-out::after { content: " ↗"; }
/* A button shape that is not a link, because there is nowhere to send you yet. Keeps the outline
   so the row still composes, drops the hover and the pointer so it never pretends to be clickable
   — a dead <a href="#"> would look identical and lie about it. */
.btn-dead { display: inline-block; padding: 0.8rem 1.5rem; font-family: var(--mono);
  font-size: 0.78rem; letter-spacing: 0.14em; text-transform: uppercase;
  border: 1px dashed var(--rule); color: var(--paper-3); background: transparent;
  cursor: default; }

/* ── Redaction ────────────────────────────────────────────────────────────────
   The launchpad is not named until the token is live. The bar is the point: it says
   "a name belongs here and is being withheld", which on a page built out of struck-through
   dictionary senses reads as part of the argument rather than as a gap.

   Deliberately still legible — a true blackout would leave sentences unparseable, and the
   sentences around it are doing real work explaining the tax and the vault. */
.redacted {
  font-family: var(--mono); font-size: 0.86em; letter-spacing: 0.06em;
  padding: 0.12em 0.42em; border-radius: 2px;
  background: var(--paper-3); color: var(--ground);
  /* Sits on a baseline shared with body serif; the nudge keeps the bar optically centred. */
  vertical-align: baseline; white-space: nowrap;
}
/* On the masthead the bar would out-shout the nav, so it thins out to a rule-and-text mark. */
.menu > nav .redacted { background: none; color: var(--paper-3);
  border: 1px dashed var(--rule); padding: 0.1em 0.4em; }
/* Inside a filled button the bar has to invert or it disappears into the fill. */
.btn-dead .redacted { background: var(--paper-3); color: var(--ground); }

footer { border-top: 1px solid var(--rule); padding: 2.25rem 0 4rem; color: var(--paper-3); font-size: 0.83rem; }
footer a { color: var(--paper-2); }

a:focus-visible, .btn:focus-visible { outline: 2px solid var(--flame); outline-offset: 3px; }
@media (prefers-reduced-motion: reduce) { * { transition: none !important; } }

/* ── Phones ───────────────────────────────────────────────────────────────────
   Everything below is the 2026-09-22 mobile review, applied. The breakpoint is the one the
   ticker already used; the desktop layout above is untouched. Re-run mobile-shots.js after
   editing any of this — every rule here was checked against a render, not reasoned about. */
@media (max-width: 46rem) {

  /* 1a. The masthead cost 213px on a 568px phone: six mono nav items wrapped to three rows.
     The first fix made it one sideways-scrolling row, which fit but hid half the sections behind
     a gesture nothing on the page suggested. This is a proper disclosure instead: one button, a
     panel that drops over the content, every section visible at full width and a real tap target.
     Costs a tap; shows the reader what is on the page, which the scrolling row never did. */
  .masthead { padding: 1rem 0; gap: 0.75rem; }
  /* Order puts the socials against the right edge and the menu button after them, so the
     header reads wordmark … socials · menu rather than three things spread apart. */
  .masthead .socials { order: 2; margin-left: auto; gap: 0; }
  .masthead .socials a { width: 2.75rem; height: 2.75rem; }
  .menu { order: 3; }

  .menu > summary {
    display: inline-flex; align-items: center; gap: 0.55rem;
    /* 44px guaranteed, rather than inferred from padding + glyph height. */
    min-height: 2.75rem; box-sizing: border-box;
    font-family: var(--mono); font-size: 0.72rem; letter-spacing: 0.14em;
    text-transform: uppercase; color: var(--paper-2);
    padding: 0.78rem 0.95rem; border: 1px solid var(--rule);
    cursor: pointer; user-select: none; -webkit-user-select: none;
    /* Both are needed to kill the default triangle: ::marker for the standard, the -webkit-
       pseudo for Safari, and list-style for the older WebKit that honours neither. */
    list-style: none;
  }
  .menu > summary::-webkit-details-marker { display: none; }
  .menu > summary::marker { content: ""; }
  .menu[open] > summary { color: var(--paper); border-color: var(--paper-3); }
  .menu-chev { transition: transform 140ms ease; flex-shrink: 0; }
  .menu[open] .menu-chev { transform: rotate(180deg); }
  .menu-bars { display: none; }

  /* Narrowest phones: the worded button does not fit beside the wordmark and two 44px social
     targets in a 280px content column, and the masthead wrapped to two rows (78px → 134px).
     Bars instead of the word; same element, same tap target, same accessible name. */
  @media (max-width: 23rem) {
    .menu > summary { padding: 0.78rem 0.8rem; }
    .menu-word, .menu-chev { display: none; }
    .menu-bars { display: block; }
  }

  /* The panel overlays rather than pushing the page down, so opening the menu does not shove
     the headword off-screen. Above the ticker's z-index 10. */
  .menu > nav {
    display: block;
    position: absolute; top: 100%; left: 0; right: 0; z-index: 30;
    background: var(--ground-2);
    border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule);
    margin: 0 calc(-1 * clamp(1.25rem, 5vw, 3rem));
    padding: 0 clamp(1.25rem, 5vw, 3rem) 0.35rem;
    font-size: 0.78rem; letter-spacing: 0.1em;
  }
  .menu:not([open]) > nav { display: none; }
  .menu > nav a, .menu > nav .redacted {
    display: block; padding: 0.95rem 0; border-top: 1px solid var(--rule); white-space: nowrap;
  }
  .menu > nav a:first-child { border-top: 0; }
  .menu > nav .redacted { display: inline-block; margin: 0.8rem 0; }

  /* 1b. The sticky ticker wrapped to three rows — 106px pinned to the top of every screen on a
     small phone, a fifth of the viewport for the entire scroll. One line: value and percent on
     the left, state on the right; the unit and the second label are what made it wrap, and the
     figure is unambiguous without them. */
  .ticker-in { flex-wrap: nowrap; gap: 0.9rem; padding-top: 0.55rem; padding-bottom: 0.55rem; }
  .tick-item { gap: 0.4rem; flex-shrink: 0; }
  .tick-unit { display: none; }
  .tick-item:nth-child(2) .tick-label { display: none; }
  .tick-right { margin-left: auto; min-width: 0; }
  .tick-note { white-space: nowrap; }
  .tick-value { font-size: 0.95rem; }

  /* 7. The sense number had its own 2.5rem column, so every definition ran in 79% of an already
     narrow screen. Number above, text full width. */
  .sense { grid-template-columns: minmax(0, 1fr); gap: 0.3rem 0; padding: 1.5rem 0; }
  .sense::before { grid-row: auto; padding-top: 0; font-size: 0.85rem; margin-bottom: 0.1rem; }
  .sense.stands { padding-left: 1rem; }

  /* 3. A three-column table at 320px gave the description ten characters of width and
     fourteen lines of height. Each row becomes a block: name and share on one line, the
     description full width beneath. The header row is dropped — the layout says what it said. */
  .toll, .toll tbody { display: block; }
  .toll thead { display: none; }
  .toll tr { display: grid; grid-template-columns: 1fr auto; align-items: baseline;
    gap: 0.45rem 1rem; padding: 1.1rem 0; border-bottom: 1px solid var(--rule); }
  .toll td { display: block; padding: 0; border: 0; }
  /* Placed explicitly. Auto-placement put the share on a third row under the description,
     because the description spans both columns and comes before it in the DOM. */
  .toll .name  { grid-column: 1; grid-row: 1; padding-right: 0; }
  .toll .share { grid-column: 2; grid-row: 1; }
  .toll .what  { grid-column: 1 / -1; grid-row: 2; }

  /* 6. Term on the left, definition right-aligned and wrapping under it as a ragged paragraph,
     last word orphaned. Stack them, both left. */
  .terms div { flex-direction: column; gap: 0.3rem; }
  .terms dd { text-align: left; }

  /* 10. Two stacked buttons at two different widths, both left-aligned. Full width each. */
  .actions .btn, .actions .btn-dead { flex: 1 1 100%; text-align: center; }

  /* 9. The mono labels a phone reader actually needs sat at 10.5–11.5px. Floor them. */
  .kicker, .tag, .stands-note, .tick-label, .tick-note, .cell dt, .addresses dt { font-size: 0.75rem; }

  /* The stat cells stack one per row here, so their desktop padding compounds into a lot of
     scroll for three short figures. */
  .cell { padding: 1rem 0; }
  .cell dd { font-size: 1.15rem; }

  /* A little less air at the top of the entry — the masthead and ticker are already there. */
  .entry { padding-top: clamp(1.75rem, 6vw, 2.5rem); }

  /* ── Second pass (2026-09-22): the mark beside the headword, and text positioning ──────── */

  /* The mark sits to the RIGHT of the headword on a phone, with the pronunciation running full
     width under both. The headword had filled the whole content width on its own (its 4rem
     floor is 64px, which at 320px is exactly the column), so it drops to ~13.5vw to make the
     room. The wrapper div becomes `display: contents` so the h1 and the pronunciation can be
     placed as grid items without touching the HTML. */
  .entry-top {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    grid-template-areas: "word mark" "pron pron";
    align-items: center;
    column-gap: clamp(0.9rem, 3.5vw, 1.4rem);
    row-gap: 1rem;
  }
  .entry-top > div { display: contents; }
  /* The word column is `auto`, not `1fr`: it takes exactly the word's width so the mark sits
     right up against it rather than at the far edge of the row. Measured, "de·base" in Anton is
     only ~3.1× its font size wide — 133px at 320px — so the pair below leaves ~50px of slack in
     the 280px column at the narrowest phone. Re-measure with mobile-shots.js before enlarging
     either; when they no longer fit the word overflows its cell INTO the mark, silently. */
  .entry-top { grid-template-columns: auto 1fr; }
  .headword { grid-area: word; font-size: clamp(2.5rem, 13.5vw, 4rem); }
  .entry-mark { grid-area: mark; width: clamp(5rem, 26vw, 8rem); align-self: center; justify-self: start; }
  .pron { grid-area: pron; margin-top: 0; text-wrap: balance; }

  /* Balanced breaks on the short display lines that were leaving one word on a line of its own:
     the kicker ("…NONE OF IT BURNED / YET") and the struck definitions. */
  .kicker, .def, .stands-note { text-wrap: balance; }

  /* The supply figure was set at 6.5vw — 25px on a phone, smaller than the body copy around it.
     It is the one number the ledger exists to show. */
  .figure { font-size: clamp(1.7rem, 8.5vw, 3rem); }

  /* The vault block's inset padding stacked on top of the page padding: 45px each side at 320px,
     leaving 230px for text. Halve the inset. */
  .block { padding: 1.1rem; }

  /* The address rows and the governance note are set in mono; on a phone that is a five-line
     mono paragraph at 13px. A little more leading is the difference between dense and cramped. */
  .addresses dd { line-height: 1.6; }
  .addresses div { padding: 0.9rem 0; }

  /* Etymology: the paragraph now follows the pronunciation directly, so it wants slightly less
     separation than it had under a centred mark. */
  .etym { margin-top: 1.1rem; }

  /* No single-word last lines in the short explanatory paragraphs ("…never touches a / pool").
     Chromium honours this; Safari ignores it, which costs nothing. */
  .cell p, .terms dd, .toll .what, .addresses dd, .lede { text-wrap: pretty; }
}
