/* PriFi.info: the page families, in the language of web/style.css (tokens, ledgers, tags, rules). No cards, no pills,
   no rounding, no shadows: a former card is a ruled block on the paper, a former pill a tag (style.css, section 5).
   Every section opens with a banner, "/* ---- [area] Family ...", naming the area of DESIGN.md ("Working in parallel")
   whose agent writes in it; [shared] sections are for the groundwork and finishing agents. Add rules inside your own
   sections only, never at the end of the file; a new family gets a new banner section directly after one of yours.
   Sections: page headers · seals · How it works · illustrations · Access and rules · Changes · Data · Protocols ·
   Chains · Protocol profiles · Exchange access · Timeline · Activity · Anonymity sets · Funding · Watchlist ·
   Bitcoin privacy · Calendar · Wallets · About · Overview · Live ticker · Legal cases · Incidents and audits ·
   Network health · Stablecoins · Supply · Cost · Developer activity · Records · Digest and embeds · Access pages ·
   Tools · Search · Live · API and feed status · 404. */

/* ---- [shared] Page headers: the title band shared by most pages (.how-head), with "On this page" (.how-toc) beside it ---- */
.how-head { display: grid; grid-template-columns: [main-start] minmax(0, 1fr) [main-end side-start] minmax(15rem, 21rem) [side-end]; column-gap: clamp(32px, 5vw, 80px); row-gap: var(--s-5); align-items: end; padding: clamp(40px, 6vw, 88px) 0 var(--s-6); counter-reset: how; }
.how-head > :first-child { grid-column: main-start / main-end; min-width: 0; }
.how-head > :not(:first-child) { grid-column: side-start / side-end; }
.how-head h1 { margin: 0 0 var(--s-5); }
.how-head .lede { margin: 0; max-width: 42ch; }
.tabs + .how-head { padding-top: var(--s-7); }
.how-toc { display: block; max-width: 36rem; padding: var(--s-3) 0 0; border-top: 1px solid var(--ink); }
.how-toc-title { margin: 0 0 var(--s-2); }
.how-toc ol { list-style: none; margin: 0; padding: 0; counter-reset: toc; }
.how-toc li { counter-increment: toc; border-bottom: 1px solid var(--rule); }
.how-toc a { display: flex; align-items: baseline; gap: 12px; padding: 6px 0; color: var(--ink); font-size: var(--fs-note); line-height: 1.35; text-decoration: none; background-size: 0 100%; background-position: 0 100%; }
.how-toc a:hover { background-size: 100% 100%; }
.how-toc a::before { content: counter(toc, decimal-leading-zero); flex: none; min-width: 2em; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); color: var(--ink-2); }
html:has(.how-toc) { scroll-behavior: smooth; }
/* the header graphic (DESIGN.md, "Header graphic"): figure.head-art, after the title block of a .how-head (before any
   "On this page" list or side box) or after the h1 inside a .panel-head. Wide screens: the side column, its foot level
   with the lede's, at most --head-art-h tall; beside an "On this page" list it sits above the list and the title
   block spans both. Below 960px: under the lede, the full column wide and lower. A kit graphic fills its width;
   graphics drawn with a viewBox (dotField, dotMap, a seal) take --head-art-h as their height. */
.head-art { --head-art-h: 168px; display: grid; gap: var(--s-2); align-content: end; min-width: 0; max-width: 100%; margin: 0; }
.head-art > svg, .head-art > figure.ck { display: block; width: 100%; max-width: 100%; margin: 0; }
.head-art > svg.ck-spark { height: auto; max-height: var(--head-art-h); }
.head-art > svg:is(.ck-field, .ck-seal), .head-art > figure.ck-map svg { height: var(--head-art-h); }
.head-art-cap { margin: 0; padding-top: var(--s-2); border-top: 1px solid var(--rule); color: var(--ink-2); font-size: var(--fs-note); line-height: 1.45; text-wrap: pretty; }
.head-art-cap .head-art-k { display: block; color: var(--ink); font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; }
.how-head > .head-art { grid-column: side-start / side-end; align-self: end; }
/* a side column with a list or box ("On this page", a side box) is usually taller than the title block: the band then
   hangs from its top, the title where the eye lands, the graphic level with it and the list straight under the graphic
   (the second row takes what is left), and the shorter column ends first */
.how-head:has(> .how-toc, > .side-box) { align-items: start; }
.how-head:has(> .head-art):has(> .how-toc, > .side-box) { grid-template-rows: auto 1fr; }
.how-head:has(> .head-art):has(> .how-toc, > .side-box) > :first-child { grid-row: span 2; }
.how-head:has(> .how-toc, > .side-box) > .head-art { --head-art-h: 128px; align-self: start; }
/* in a panel header the title starts at the top, as in the title bands, the graphic level with it */
.panel-head:has(> .head-art) { align-items: flex-start; }
.panel-head > .head-art { flex: 0 1 var(--col-margin); width: var(--col-margin); margin-left: auto; }
/* the small caps labels the pages share: the label face */
.how-toc-title, .tech-facts dt, .pf-facts dt, .pf-aside h3, .pf-hide h3, .act-about h3, .anon-box h3, .btc-apart h3, .btc-facts dt, .wl-facts dt, .wl-hidden h4, .wl-onsite-h, .lg-facts dt, .lg-h, .ab-not h3, .fd-pick-l, .wl-pick label, .tpc-h, .tln-src-h, .mp-kicker, .cal-m, .wl-lbl, .chg-kind, .fd-years-head, .rules-head, .file-facts dt, .mp-facts dt, .ct-facts dt, .xa-when, .nh-tile .tile-label, .side-title, .sc-via, .wk-note {
  font-family: var(--font-label);
  font-size: var(--fs-label);
  font-weight: 400;
  font-style: normal;
  line-height: 1.45;
  letter-spacing: var(--track-label);
  text-transform: uppercase;
  font-synthesis: none;
  color: var(--ink-2);
}
/* header statistics: a short ledger of counts under a page title */
.acc-head { padding-bottom: var(--s-6); }
.acc-stats { list-style: none; margin: var(--s-5) 0 0; padding: var(--s-3) 0 0; display: flex; flex-wrap: wrap; gap: var(--s-3) var(--s-6); border-top: 1px solid var(--rule-2); color: var(--ink-2); font-size: var(--fs-note); }
.acc-stats li { display: flex; flex-direction: column; gap: 2px; }
.acc-stats strong { display: block; color: var(--ink); font-family: var(--font-display-35); font-size: clamp(1.6rem, 1.2rem + 1.2vw, 2.25rem); font-weight: 400; line-height: 1; letter-spacing: -0.01em; font-variant-numeric: lining-nums; }
.acc-meta { margin: var(--s-3) 0 0; color: var(--ink-2); font-size: var(--fs-note); }
/* the sections of most pages: panels with an intro paragraph */
.acc-sec > .panel-head h2 { font-size: var(--fs-2); }
.acc-intro { margin: 0 0 var(--s-4); max-width: var(--measure); color: var(--ink); }
.acc-sec h3.sub, .acc-sec h3 { margin-top: var(--s-6); }
.acc-sec .n { color: var(--ink-2); font-weight: 400; font-size: 0.85em; }
.acc-cols { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--s-2) var(--s-7); font-size: var(--fs-small); line-height: 1.6; }
.acc-cols h3 { margin: var(--s-2) 0 var(--s-2); font-size: 1rem; }
.acc-cols h3:not(:first-child) { margin-top: var(--s-5); }
.acc-cols p { margin: 0 0 var(--s-3); }
.acc-defs { margin: 0; border-top: 1px solid var(--ink); }
.acc-defs > div { padding: var(--s-3) 0; border-bottom: 1px solid var(--rule); }
.acc-defs dt { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; font-weight: 700; }
.acc-defs dd { margin: 3px 0 0; color: var(--ink-2); }
.acc-defs dd p { margin: 0 0 6px; }
.acc-defs dd p:last-child { margin-bottom: 0; }
@media (max-width: 960px) {
  .how-head { grid-template-columns: [main-start side-start] minmax(0, 1fr) [main-end side-end]; padding-top: var(--s-7); }
  .acc-cols { grid-template-columns: minmax(0, 1fr); }
  /* the header graphic: under the lede, lower, never above the title */
  .how-head:has(> .head-art):has(> .how-toc, > .side-box) { grid-template-rows: none; }
  .how-head:has(> .head-art):has(> .how-toc, > .side-box) > :first-child { grid-row: auto; }
  .head-art, .how-head:has(> .how-toc, > .side-box) > .head-art { --head-art-h: 112px; max-width: 34rem; }
  .panel-head > .head-art { flex: 1 1 100%; width: 100%; margin-left: 0; }
}

/* ---- [shared] Seals: the seal key (sealKey in src/seals.mjs) and seals placed beside names ---- */
/* the legend of one kind of seal, closed under the seals it explains; print opens it (web/theme.js) */
.seal-key { margin: var(--s-4) 0 0; max-width: 64rem; border-top: 1px solid var(--rule); }
.seal-key > summary { padding: var(--s-2) 0; color: var(--ink-2); font-size: var(--fs-note); cursor: pointer; }
.seal-key > summary:hover { color: var(--ink); }
.seal-key[open] > summary { color: var(--ink); }
.seal-key > .ck-seal-key { margin: var(--s-2) 0 var(--s-4); }
/* a seal at the start of a line of text (a row head, a list item, a title) keeps to the text's height */
.seal-inline { width: 1.35em; height: 1.35em; margin: -0.2em 0.45em 0 0; vertical-align: middle; }

/* ---- [explainers, search and site pages] How it works (/how-it-works/) ---- */
.how-sec { counter-increment: how; font-size: var(--fs-body); line-height: var(--lh-text); }
.how-sec > .panel-head h2::before { content: counter(how, decimal-leading-zero); display: block; margin-bottom: var(--s-2); font-family: var(--font-display-70); font-size: var(--fs-label-3); line-height: 1; letter-spacing: 0; color: var(--vermilion); }
.how-sec .note { max-width: 72ch; }
.how-text { max-width: 63ch; }
p.how-text, .how-text p, .how-text ul { margin: 0 0 1em; }
.how-text ul { padding-left: 1.2em; }
.how-text li { margin: 0.3em 0; padding-left: 0.2em; }
.how-text li::marker { color: var(--ink-2); }
.how-text > :last-child, .how-sec > p.how-text:last-child { margin-bottom: 0; }
.how-cols { max-width: none; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1em var(--s-8); }
.how-cols > p { margin: 0; }
.how-split { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 0.9fr); gap: var(--s-6) var(--s-8); align-items: center; }
.how-split.flip { grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr); }
.how-split.flip > .fig { order: -1; }
.how-sec .steps { margin-top: var(--s-5); }
.hw-steps-fig > figcaption { margin-top: var(--s-4); max-width: 72ch; }
.how-sec .hw-steps + .how-split { margin-top: var(--s-6); padding-top: var(--s-6); border-top: 1px solid var(--rule); }
/* the four steps: numbered in the degraded face, the drawing over a rule */
.steps { list-style: none; margin: 4px 0 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--s-5); counter-reset: step; }
.step { display: flex; flex-direction: column; gap: 6px; padding-top: var(--s-3); border-top: 1px solid var(--ink); }
.step-art svg { display: block; width: 100%; height: auto; }
.step h3 { display: flex; align-items: baseline; gap: 10px; margin: 6px 0 0; font-size: 1.0625rem; }
.step-n { font-family: var(--font-display-70); font-size: var(--fs-label-2); font-weight: 400; line-height: 1; color: var(--vermilion); }
.step p { margin: 0; color: var(--ink-2); font-size: var(--fs-small); }
.fig { margin: 0; counter-increment: fig; }
.fig-art svg { display: block; width: 100%; height: auto; }
.how-split .fig-art { padding: var(--s-3) 0; border-top: 1px solid var(--ink); border-bottom: 1px solid var(--rule); }
.fig figcaption { margin-top: var(--s-2); color: var(--ink-2); font-size: var(--fs-note); line-height: 1.45; }
.fig figcaption::before { content: "Fig. " counter(fig) "\2002"; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink); }
/* leaks and technologies: ruled blocks, the drawing on top, the text under it */
.leaks { list-style: none; margin: var(--s-6) 0 var(--s-6); padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--s-6) var(--col-gap); }
.techs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--s-7) var(--col-gap); margin-top: var(--s-6); }
.leak, .tech { display: grid; grid-template-rows: subgrid; grid-row: span 2; row-gap: 0; min-width: 0; border-top: 1px solid var(--ink); }
.leak > .fig .fig-art, .tech > .fig .fig-art { border-bottom: 1px solid var(--rule); }
.leak > .fig figcaption, .tech > .fig figcaption { margin: 0; padding: var(--s-2) 0 0; }
.card-body { padding: var(--s-4) 0 0; }
.card-body h3 { margin: 0 0 6px; font-size: var(--fs-3); line-height: 1.3; }
.tech .card-body h3 { font-family: var(--font-display); font-size: 1.75rem; font-weight: 400; line-height: 1.1; letter-spacing: -0.01em; margin-bottom: var(--s-2); }
.leak .card-body p { margin: 0; font-size: var(--fs-small); line-height: 1.6; }
.tech .analogy { margin: 0 0 var(--s-4); padding-left: var(--s-3); border-left: 3px solid var(--vermilion); font-family: var(--font-display); font-size: 1.1875rem; font-style: italic; line-height: 1.4; }
.tech .analogy + p { margin: 0 0 var(--s-4); font-size: var(--fs-small); line-height: 1.62; }
.tech-facts { display: grid; gap: var(--s-3); align-content: start; margin: 0; padding: var(--s-3) 0 0; border-top: 1px solid var(--rule-2); }
.tech-facts dd { margin: 3px 0 0; font-size: var(--fs-note); line-height: 1.5; }
.used-by { color: var(--ink-2); }
@media (min-width: 761px) {
  .tech:last-child:nth-child(odd) { grid-column: 1 / -1; grid-row: auto; grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr); grid-template-rows: auto auto 1fr auto; column-gap: var(--s-7); padding-top: var(--s-4); }
  .tech:last-child:nth-child(odd) > .fig { grid-column: 1; grid-row: 1 / 4; align-self: center; }
  .tech:last-child:nth-child(odd) > .fig .fig-art { border-bottom: 0; }
  .tech:last-child:nth-child(odd) .card-body { display: contents; }
  .tech:last-child:nth-child(odd) .card-body > :not(.tech-facts) { grid-column: 2; }
  .tech:last-child:nth-child(odd) .tech-facts { grid-column: 1 / -1; margin-top: 6px; grid-template-columns: repeat(3, minmax(0, 1fr)); column-gap: var(--s-6); }
}
.glossary { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: var(--s-8); margin: 0; }
.glossary > div { padding: var(--s-3) 0; border-top: 1px solid var(--rule); }
.glossary dt { font-weight: 700; }
.glossary dd { margin: 3px 0 0; color: var(--ink-2); font-size: var(--fs-small); line-height: 1.55; }
.how-sources { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--ink); }
.how-sources li { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 2px var(--s-5); padding: var(--s-3) 0; border-bottom: 1px solid var(--rule); }
.src-name { flex: 1 1 28em; min-width: 0; }
.src-note { color: var(--ink-2); }
.src-host { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; color: var(--ink-2); }
.how-sources + .note { margin-top: var(--s-4); }
/* "How to read the seals" (#seals): a few real seals of each kind, each linking its page, then the kind's key, open */
.seal-ex { margin-top: var(--s-6); }
.seal-ex > .sub { margin: 0 0 var(--s-3); }
.seal-ex-list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); gap: var(--s-4) var(--col-gap); }
.seal-ex-i { min-width: 0; padding-top: var(--s-3); border-top: 1px solid var(--ink); }
.seal-ex-a { display: flex; align-items: center; gap: var(--s-3); color: var(--ink); text-decoration: none; }
.seal-ex-a .ck-seal { flex: none; }
.seal-ex-n { font-family: var(--font-display); font-size: 1.5rem; line-height: 1.1; text-decoration: underline; text-decoration-color: var(--lapis); text-decoration-thickness: 1px; text-underline-offset: 4px; }
.seal-ex-a:hover .seal-ex-n { text-decoration-color: var(--ink); }
.seal-ex-d { margin: var(--s-2) 0 0; color: var(--ink-2); font-size: var(--fs-note); line-height: 1.5; }
#seals .seal-key { max-width: none; margin-top: var(--s-4); }
#seals .seal-key .ck-seal-n { display: none; }
@media (max-width: 960px) {
  .leaks { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .how-cols { grid-template-columns: 1fr; max-width: 63ch; }
  .steps { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 760px) {
  .how-split, .how-split.flip, .glossary { grid-template-columns: 1fr; }
  .techs { grid-template-columns: minmax(0, 1fr); }
  .how-split.flip > .fig { order: 0; }
}
@media (max-width: 640px) {
  .leaks, .steps { grid-template-columns: 1fr; }
}

/* ---- [explainers, search and site pages] Illustrations: the drawings of /how-it-works/ (src/how-art.mjs), dots on one lattice inked by these classes, so they follow the theme and print in the day inks ---- */
.hw { display: block; width: 100%; height: auto; overflow: visible; }
.hw-defs { position: absolute; width: 0; height: 0; overflow: hidden; }
/* the patterns' dots (howDefs): a pool's screen, the finest screen of a large crowd, the hatch of a sealed amount */
.hw-pt { fill: var(--rule-2); }
.hw-pf { fill: var(--ink); }
.hw-ph { fill: var(--ink-2); }
.hw .hw-s, .hw-sw .hw-s { fill: url(#hw-screen) color-mix(in srgb, var(--ink) 8%, transparent); }
.hw .hw-fine { fill: url(#hw-fine) var(--ink-2); }
.hw .hw-h, .hw-sw .hw-h { fill: url(#hw-hatch) color-mix(in srgb, var(--ink) 28%, transparent); }
/* inks: a mark takes --hw from its class or its group */
.hw-i { --hw: var(--ink); }
.hw-i2 { --hw: var(--ink-2); }
.hw-q { --hw: var(--rule-2); }
.hw-v { --hw: var(--vermilion); }
/* marks: dots (one path of round caps), a dot, a ring (an address), a spent note, a dashed ring (yours, known only to
   you), a trail (a movement anyone can see), rules, a frame, the marker pen */
.hw-d { fill: none; stroke: var(--hw, var(--ink)); stroke-linecap: round; }
.hw-c, .hw-f { fill: var(--hw, var(--ink)); }
.hw-r { fill: var(--paper); stroke: var(--hw, var(--ink)); stroke-width: 1.5; }
.hw-sp { fill: var(--paper); stroke: var(--ink-2); stroke-width: 1.2; }
.hw-rd { fill: none; stroke: var(--hw, var(--vermilion)); stroke-width: 1.4; stroke-dasharray: 2.2 2.2; }
.hw-rd.hw-solid { stroke-dasharray: none; stroke-width: 1.6; }
.hw-t { fill: none; stroke: var(--hw, var(--ink-2)); stroke-width: 2.2; stroke-linecap: round; stroke-dasharray: 0 6; }
.hw-l { fill: none; stroke: var(--hw, var(--ink)); stroke-width: 1.25; }
.hw-l.hw-hair { stroke: var(--rule); stroke-width: 1; }
.hw-l.hw-rule { stroke: var(--ink); stroke-width: 1.25; }
.hw-l.hw-tick { stroke: var(--ink); stroke-width: 1; }
.hw-frame { fill: none; stroke: var(--ink); stroke-width: 1.25; }
.hw-m { fill: var(--row-hover); }
.hw-faint { opacity: 0.42; }
.hw-out { opacity: 0; }
.hw-pop { transform-box: fill-box; transform-origin: 50% 50%; }
/* labels over a drawing: the label face at its one size, placed in percent of the drawing's box (hw-x-*, hw-y-*, every
   2%) and anchored at their start, middle (hw-am) or end (hw-ae) */
.hw-art { position: relative; }
.hw-lb { position: absolute; z-index: 1; padding: 1px 3px; background: var(--paper); font-family: var(--font-label); font-size: var(--fs-label); font-weight: 400; line-height: 1.2; letter-spacing: var(--track-label); text-transform: uppercase; font-synthesis: none; color: var(--ink); white-space: nowrap; pointer-events: none; }
.hw-lb-q { color: var(--ink-2); }
.hw-am { translate: -50% 0; }
.hw-ae { translate: -100% 0; }
/* a label too long for its part of the drawing on a phone (.hw-lb-w) takes two lines there, ending where one would */
@media (max-width: 480px) {
  .hw-lb-w { white-space: normal; width: 7.4em; text-align: center; translate: -50% -1.2em; }
  .hw-lb-w.hw-ae { text-align: right; translate: -100% -1.2em; }
}
.hw-x-0{left:0%} .hw-x-2{left:2%} .hw-x-4{left:4%} .hw-x-6{left:6%} .hw-x-8{left:8%} .hw-x-10{left:10%} .hw-x-12{left:12%} .hw-x-14{left:14%} .hw-x-16{left:16%} .hw-x-18{left:18%} .hw-x-20{left:20%} .hw-x-22{left:22%} .hw-x-24{left:24%} .hw-x-26{left:26%} .hw-x-28{left:28%} .hw-x-30{left:30%} .hw-x-32{left:32%} .hw-x-34{left:34%} .hw-x-36{left:36%} .hw-x-38{left:38%} .hw-x-40{left:40%} .hw-x-42{left:42%} .hw-x-44{left:44%} .hw-x-46{left:46%} .hw-x-48{left:48%} .hw-x-50{left:50%} .hw-x-52{left:52%} .hw-x-54{left:54%} .hw-x-56{left:56%} .hw-x-58{left:58%} .hw-x-60{left:60%} .hw-x-62{left:62%} .hw-x-64{left:64%} .hw-x-66{left:66%} .hw-x-68{left:68%} .hw-x-70{left:70%} .hw-x-72{left:72%} .hw-x-74{left:74%} .hw-x-76{left:76%} .hw-x-78{left:78%} .hw-x-80{left:80%} .hw-x-82{left:82%} .hw-x-84{left:84%} .hw-x-86{left:86%} .hw-x-88{left:88%} .hw-x-90{left:90%} .hw-x-92{left:92%} .hw-x-94{left:94%} .hw-x-96{left:96%} .hw-x-98{left:98%} .hw-x-100{left:100%}
.hw-y-0{top:0%} .hw-y-2{top:2%} .hw-y-4{top:4%} .hw-y-6{top:6%} .hw-y-8{top:8%} .hw-y-10{top:10%} .hw-y-12{top:12%} .hw-y-14{top:14%} .hw-y-16{top:16%} .hw-y-18{top:18%} .hw-y-20{top:20%} .hw-y-22{top:22%} .hw-y-24{top:24%} .hw-y-26{top:26%} .hw-y-28{top:28%} .hw-y-30{top:30%} .hw-y-32{top:32%} .hw-y-34{top:34%} .hw-y-36{top:36%} .hw-y-38{top:38%} .hw-y-40{top:40%} .hw-y-42{top:42%} .hw-y-44{top:44%} .hw-y-46{top:46%} .hw-y-48{top:48%} .hw-y-50{top:50%} .hw-y-52{top:52%} .hw-y-54{top:54%} .hw-y-56{top:56%} .hw-y-58{top:58%} .hw-y-60{top:60%} .hw-y-62{top:62%} .hw-y-64{top:64%} .hw-y-66{top:66%} .hw-y-68{top:68%} .hw-y-70{top:70%} .hw-y-72{top:72%} .hw-y-74{top:74%} .hw-y-76{top:76%} .hw-y-78{top:78%} .hw-y-80{top:80%} .hw-y-82{top:82%} .hw-y-84{top:84%} .hw-y-86{top:86%} .hw-y-88{top:88%} .hw-y-90{top:90%} .hw-y-92{top:92%} .hw-y-94{top:94%} .hw-y-96{top:96%} .hw-y-98{top:98%} .hw-y-100{top:100%}
/* a drawing is never drawn larger than its lattice: one unit is at most one pixel */
.hw-leak .fig-art { max-width: 372px; }
.hw-tech .fig-art { max-width: 576px; }
.step-art { max-width: 288px; }
/* the key to the drawings, under the page's header */
.hw-keybar { display: grid; grid-template-columns: [label-start] var(--col-label) [label-end body-start] minmax(0, 1fr) [body-end]; column-gap: var(--col-gap); align-items: baseline; padding: var(--s-3) 0; border-top: 1px solid var(--rule-2); border-bottom: 1px solid var(--rule); }
.hw-key-h { margin: 0; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink); }
.hw-key { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: var(--s-2) var(--s-5); color: var(--ink-2); font-size: var(--fs-note); line-height: 1.35; }
.hw-key li { display: inline-flex; align-items: center; gap: 8px; }
.hw-sw { flex: none; display: block; width: 14px; height: 14px; overflow: visible; }
.hw-sw.hw-sw-w { width: 26px; height: 13px; }
/* the ledger's column heads, at the lattice's columns */
.hw-ledger-head { display: grid; grid-template-columns: 41.67% 23.81% minmax(0, 1fr); padding: 0 0 var(--s-1); font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); }
/* three crowds on one baseline: the columns follow the panels' widths, so the three are drawn at one scale */
.hw-crowds { display: grid; grid-template-columns: 96fr 96fr 216fr; column-gap: var(--s-4); align-items: end; }
.hw-crowd { min-width: 0; }
.hw-ph-h { display: grid; gap: 3px; margin: 0 0 var(--s-2); }
.hw-ph-k { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); }
.hw-ph-v { font-family: var(--font-display); font-size: 1.5rem; line-height: 1; color: var(--ink); white-space: nowrap; }
/* the mixer's four pools: their sizes under them */
.hw-mixer-foot { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin-top: var(--s-1); text-align: center; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); }
.hw-mixer-foot span { display: grid; gap: 2px; }
.hw-mixer-foot b { font-family: var(--font-display); font-size: 1.25rem; font-weight: 400; letter-spacing: 0; text-transform: none; color: var(--ink); }
/* stages: each drawing plays its stages once, in the order of data-st, the first time a third of it is on screen
   (web/motion.js puts .hw-wait on a drawing below the fold, held at its first frame, and swaps it for .is-seen); the
   step panels side by side follow one another (--hw-o). A drawing on screen when the page opens is shown as written.
   Nothing moves without .mo, under reduced motion or in print, and nothing waits once it has played. */
@keyframes hw-wr { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0 0 0); } }
@keyframes hw-wu { from { clip-path: inset(100% 0 0 0); } to { clip-path: inset(0 0 0 0); } }
@keyframes hw-wd { from { clip-path: inset(0 0 100% 0); } to { clip-path: inset(0 0 0 0); } }
@keyframes hw-pop { from { opacity: 0; transform: scale(0.2); } to { opacity: 1; transform: none; } }
@keyframes hw-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes hw-out { from { opacity: 1; } to { opacity: 0; } }
@media screen and (prefers-reduced-motion: no-preference) {
  .mo :is(.hw-wait, .is-seen) .hw-st { --hw-o: 0ms; animation: hw-in 340ms var(--ease-out) both; animation-delay: var(--hw-o); }
  .mo .hw-wait .hw-st { animation-play-state: paused; }
  .mo :is(.hw-wait, .is-seen) .hw-st[data-st="2"] { animation-delay: calc(var(--hw-o) + 180ms); }
  .mo :is(.hw-wait, .is-seen) .hw-st[data-st="3"] { animation-delay: calc(var(--hw-o) + 360ms); }
  .mo :is(.hw-wait, .is-seen) .hw-st[data-st="4"] { animation-delay: calc(var(--hw-o) + 540ms); }
  .mo :is(.hw-wait, .is-seen) .hw-st[data-st="5"] { animation-delay: calc(var(--hw-o) + 720ms); }
  .mo :is(.hw-wait, .is-seen) .hw-st.hw-wr { animation-name: hw-wr; }
  .mo :is(.hw-wait, .is-seen) .hw-st.hw-wu { animation-name: hw-wu; }
  .mo :is(.hw-wait, .is-seen) .hw-st.hw-wd { animation-name: hw-wd; }
  .mo :is(.hw-wait, .is-seen) .hw-st.hw-pop { animation-name: hw-pop; }
  .mo :is(.hw-wait, .is-seen) .hw-st.hw-out { animation-name: hw-out; }
  .mo .step:nth-child(2) .hw-st { --hw-o: 120ms; }
  .mo .step:nth-child(3) .hw-st { --hw-o: 240ms; }
  .mo .step:nth-child(4) .hw-st { --hw-o: 360ms; }
}
@media screen and (prefers-reduced-motion: no-preference) and (max-width: 960px) {
  .mo .step:nth-child(3) .hw-st { --hw-o: 0ms; }
  .mo .step:nth-child(4) .hw-st { --hw-o: 120ms; }
}
@media screen and (prefers-reduced-motion: no-preference) and (max-width: 640px) {
  .mo .step .hw-st { --hw-o: 0ms; }
}
@media (max-width: 1099px) {
  .hw-keybar { grid-template-columns: minmax(0, 1fr); row-gap: var(--s-2); }
}

/* ---- [access and rules] Access and rules (/access/ and the pages under it) ----
   The levels are drawn as halftone tone: the stricter the rule, the larger its dot (the map, its key, the swatches in
   the tables and panels), in one vermilion ink that is darkest for a general crypto bar by day and brightest by night
   and steps towards the paper for the weaker levels, never so far that a dot is lost on either paper. "No restriction
   found" is lapis and "Not reviewed" the plain land. Sizes are in the map's units (its dots are 6 apart); the swatches
   are drawn at twice that in px. */
:root {
  --lv-crypto-ban: color-mix(in srgb, var(--vermilion) 58%, var(--ink));
  --lv-exchange-ban: var(--vermilion);
  --lv-scheduled-ban: var(--vermilion);
  --lv-delisted-under-pressure: color-mix(in srgb, var(--vermilion) 82%, var(--paper));
  --lv-mixers-targeted: color-mix(in srgb, var(--vermilion) 68%, var(--paper));
  --lv-no-restriction-found: var(--lapis);
  --lv-none: var(--rule-2);
  --lv-any: var(--ink-2);
}
.lv-crypto-ban { fill: var(--lv-crypto-ban); background-color: var(--lv-crypto-ban); }
.lv-exchange-ban { fill: var(--lv-exchange-ban); background-color: var(--lv-exchange-ban); }
.lv-scheduled-ban { fill: var(--lv-scheduled-ban); background-color: var(--lv-scheduled-ban); }
.lv-delisted-under-pressure { fill: var(--lv-delisted-under-pressure); background-color: var(--lv-delisted-under-pressure); }
.lv-mixers-targeted { fill: var(--lv-mixers-targeted); background-color: var(--lv-mixers-targeted); }
.lv-no-restriction-found { fill: var(--lv-no-restriction-found); background-color: var(--lv-no-restriction-found); }
.lv-none { fill: var(--lv-none); background-color: var(--lv-none); }
/* a level's swatch beside its name: a dot of the level's size (a diamond for a bar scheduled), centred in a fixed box */
.sw.lv-crypto-ban, .sw.lv-exchange-ban, .sw.lv-scheduled-ban, .sw.lv-delisted-under-pressure, .sw.lv-mixers-targeted, .sw.lv-no-restriction-found, .sw.lv-none { border-radius: 50%; vertical-align: middle; }
.sw.lv-crypto-ban { width: 11px; height: 11px; }
.sw.lv-exchange-ban { width: 9px; height: 9px; }
.sw.lv-scheduled-ban { width: 8px; height: 8px; border-radius: 0; transform: rotate(45deg); }
.sw.lv-delisted-under-pressure { width: 8px; height: 8px; }
.sw.lv-mixers-targeted { width: 6px; height: 6px; }
.sw.lv-no-restriction-found { width: 7px; height: 7px; }
.sw.lv-none { width: 5px; height: 5px; }

/* the map: the chart kit's dot world (figure.ck-map.acc-map), each jurisdiction a link in the dots of its level */
.map-layout { display: grid; grid-template-columns: minmax(0, 1fr) 330px; gap: var(--s-5) var(--s-6); }
.map-fig { margin: 0; min-width: 0; }
.acc-map .lv-crypto-ban .ck-cty, .am-loc .lv-crypto-ban .ck-cty, .am-sw-d.lv-crypto-ban { stroke-width: 5.6; }
.acc-map .lv-exchange-ban .ck-cty, .am-loc .lv-exchange-ban .ck-cty, .am-sw-d.lv-exchange-ban { stroke-width: 4.7; }
.acc-map .lv-scheduled-ban .ck-cty, .am-loc .lv-scheduled-ban .ck-cty, .am-sw-d.lv-scheduled-ban { stroke-width: 4.7; }
.acc-map .lv-delisted-under-pressure .ck-cty, .am-loc .lv-delisted-under-pressure .ck-cty, .am-sw-d.lv-delisted-under-pressure { stroke-width: 4; }
.acc-map .lv-mixers-targeted .ck-cty, .am-loc .lv-mixers-targeted .ck-cty, .am-sw-d.lv-mixers-targeted { stroke-width: 3.1; }
.acc-map .lv-no-restriction-found .ck-cty, .am-loc .lv-no-restriction-found .ck-cty, .am-sw-d.lv-no-restriction-found { stroke-width: 3.5; }
.am-sw-d.lv-none { stroke-width: 2.4; }
.am-sw-d.lv-any { stroke-width: 3.5; }
/* (svg.am-sw raises these above the kit's .ck-sw .lv-* rule, which web/charts.css gives its own filled swatches) */
svg.am-sw .am-sw-d { fill: none; stroke-linecap: round; }
svg.am-sw .am-sw-d.lv-crypto-ban { stroke: var(--lv-crypto-ban); }
svg.am-sw .am-sw-d.lv-exchange-ban { stroke: var(--lv-exchange-ban); }
svg.am-sw .am-sw-d.lv-delisted-under-pressure { stroke: var(--lv-delisted-under-pressure); }
svg.am-sw .am-sw-d.lv-mixers-targeted { stroke: var(--lv-mixers-targeted); }
svg.am-sw .am-sw-d.lv-no-restriction-found { stroke: var(--lv-no-restriction-found); }
svg.am-sw .am-sw-d.lv-none { stroke: var(--lv-none); }
/* a bar scheduled: diamonds; an entry not fully verified: hollow dots of its level (the markers of mapDefs) */
.acc-map .lv-scheduled-ban .ck-cty, .am-loc .lv-scheduled-ban .ck-cty, .am-sw-d.lv-scheduled-ban { stroke: transparent; marker: url(#am-dia); }
.acc-map .am-unconf .ck-cty, .am-sw-d.am-unconf { stroke: transparent; }
.acc-map .am-unconf.lv-crypto-ban .ck-cty, .am-sw-d.am-unconf.lv-crypto-ban { marker: url(#am-ring-crypto-ban); }
.acc-map .am-unconf.lv-exchange-ban .ck-cty, .am-sw-d.am-unconf.lv-exchange-ban { marker: url(#am-ring-exchange-ban); }
.acc-map .am-unconf.lv-scheduled-ban .ck-cty, .am-sw-d.am-unconf.lv-scheduled-ban { marker: url(#am-ring-scheduled-ban); }
.acc-map .am-unconf.lv-delisted-under-pressure .ck-cty, .am-sw-d.am-unconf.lv-delisted-under-pressure { marker: url(#am-ring-delisted-under-pressure); }
.acc-map .am-unconf.lv-mixers-targeted .ck-cty, .am-sw-d.am-unconf.lv-mixers-targeted { marker: url(#am-ring-mixers-targeted); }
.acc-map .am-unconf.lv-no-restriction-found .ck-cty, .am-sw-d.am-unconf.lv-no-restriction-found { marker: url(#am-ring-no-restriction-found); }
.am-sw-d.am-unconf.lv-any { marker: url(#am-ring-any); }
.am-defs .am-ring { fill: none; stroke-width: 0.44; }
.am-defs .am-ring.lv-crypto-ban { stroke: var(--lv-crypto-ban); }
.am-defs .am-ring.lv-exchange-ban, .am-defs .am-ring.lv-scheduled-ban { stroke: var(--lv-exchange-ban); }
.am-defs .am-ring.lv-delisted-under-pressure { stroke: var(--lv-delisted-under-pressure); }
.am-defs .am-ring.lv-mixers-targeted { stroke: var(--lv-mixers-targeted); }
.am-defs .am-ring.lv-no-restriction-found { stroke: var(--lv-no-restriction-found); }
.am-defs .am-ring.lv-any { stroke: var(--lv-any); }
.am-defs .am-dia { fill: var(--lv-scheduled-ban); stroke: none; }
/* each country's cells as squares under its dots (accessMap): they take the pointer, so a gap between two dots is still
   the country, and the marker pen when the country is hovered, focused or chosen (web/map.js) */
.acc-map .am-hit { fill: none; stroke: transparent; stroke-width: 6.2; stroke-linecap: square; pointer-events: stroke; }
.acc-map .ck-m:is(:hover, :focus-visible, .is-pinned) .am-hit { stroke: var(--row-hover); }
/* the country shown in the panel (web/map.js): its dots in ink, a small place's ring of marker pen */
.acc-map .ck-m.is-pinned .ck-cty { stroke: var(--ink); }
.acc-map .ck-m.is-pinned .ck-cty-hit { fill: var(--row-hover); }
.am-legend { margin-top: var(--s-3); }
.am-legend .am-sw { width: 27px; height: 9px; }
/* rules over time arrives as every kit chart does (charts.css, section 7): once, when it is first on screen */
.map-tools { grid-column: 1 / -1; display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; }
.map-pick { font-size: var(--fs-note); color: var(--ink-2); }
.map-tools select { width: min(100%, 300px); }
.map-side { position: relative; min-height: 420px; }
.map-side-inner { position: absolute; inset: 0; display: flex; flex-direction: column; }
.map-panel { flex: 1; min-height: 0; overflow: auto; padding: var(--s-3) 0 0; border-top: 3px solid var(--ink); font-size: var(--fs-small); line-height: 1.5; }
.mp-kicker { display: flex; align-items: center; gap: 8px; margin: 0 0 var(--s-1); }
.mp-kicker .sw { flex: none; }
.mp-name { margin: 0 0 var(--s-2); font-family: var(--font-display); font-size: 2rem; font-weight: 400; line-height: 1.05; letter-spacing: -0.01em; }
.mp-tag { margin: 0 0 var(--s-2); white-space: normal; }
.mp-summary { margin: 0 0 var(--s-3); }
.mp-facts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--s-2) var(--s-4); margin: 0 0 var(--s-3); padding: var(--s-3) 0; border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); }
.mp-facts dd { margin: 1px 0 0; font-weight: 700; line-height: 1.35; }
.mp-inst { margin: 0 0 var(--s-2); color: var(--ink-2); font-size: var(--fs-note); display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; line-clamp: 3; overflow: hidden; }
.mp-foot { margin: 0; display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 14px; font-size: var(--fs-note); color: var(--ink-2); }

/* country rules (the older list form, still drawn on some pages) */
.rules-list > summary { display: flex; align-items: center; gap: 10px; padding: var(--s-2) 0; border-top: 1px solid var(--ink); border-bottom: 1px solid var(--ink); font-weight: 700; cursor: pointer; list-style: none; }
.rules-list > summary::-webkit-details-marker, .rule > summary::-webkit-details-marker, .xnote > summary::-webkit-details-marker { display: none; }
.rules-list[open] > summary { margin-bottom: var(--s-3); }
.rules-list[open] > summary > .rl-show, .rules-list:not([open]) > summary > .rl-hide { display: none; }
.rules-head, .rule > summary { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1.6fr) minmax(0, 0.95fr) minmax(0, 0.8fr) minmax(0, 1.1fr) minmax(0, 1.2fr) minmax(0, 0.9fr) minmax(0, 0.8fr); column-gap: 14px; align-items: baseline; }
.rules-head { margin-top: var(--s-4); padding: 8px 10px 8px 26px; border-bottom: 1px solid var(--ink); }
.rule { border-bottom: 1px solid var(--rule); }
.rule > summary { padding: 10px; cursor: pointer; list-style: none; font-size: var(--fs-small); }
.rule > summary:hover, .xnote > summary:hover { background: var(--row-hover); }
.r-name, .xn-name { display: flex; align-items: baseline; gap: 10px; font-weight: 700; }
.r-name::before, .xn-name::before { content: ""; flex: none; width: 9px; height: 9px; background: linear-gradient(currentColor, currentColor) 50% 50% / 9px 1.5px no-repeat, linear-gradient(currentColor, currentColor) 50% 50% / 1.5px 9px no-repeat; transition: transform var(--t) var(--ease-out); }
.rule[open] > summary .r-name::before, .xnote[open] > summary .xn-name::before { transform: rotate(45deg); }
.r-sub { font-weight: 400; color: var(--ink-2); font-size: var(--fs-note); }
.r-level { display: flex; align-items: baseline; gap: 8px; }
.r-level .sw { flex: none; align-self: center; }
.r-date { color: var(--ink-2); font-variant-numeric: tabular-nums; white-space: nowrap; }
.r-group-note { grid-column: span 3; color: var(--ink-2); }
.r-none { color: var(--ink-2); }
.rule-group { border-left: 3px solid var(--ink); }
.rule-body { padding: 4px 10px var(--s-5) 26px; max-width: 88ch; font-size: var(--fs-small); line-height: 1.6; overflow-wrap: break-word; }
.rule-body p { margin: 0 0 10px; }
.rule-summary { font-weight: 700; }
.rule-facts { display: none; }
.rule-inst { color: var(--ink-2); font-size: var(--fs-note); }
.rule-body .rule-meta, .xn-cell .rule-meta { margin: var(--s-3) 0 0; color: var(--ink-2); font-size: var(--fs-note); }
.rule-sh, .rule-states { margin-top: var(--s-4); padding-top: var(--s-3); border-top: 1px solid var(--rule); }
.rule-sh p.lbl, .rule-states p.lbl:first-child { margin-top: 0; }
.sh-tag { --tag: var(--lapis); white-space: normal; }
.us-ex { margin: 4px 0 12px; padding-left: 1.1em; }
.us-ex li { margin: 6px 0; }
.us-more { margin: 4px 0 8px; }

/* the exchange matrix: a dot-matrix of listings, the first column fixed while the rest scrolls */
.xtable { min-width: 780px; }
.xtable th.coin span, .rtable th.coin span { display: block; font-family: var(--font-text); font-size: var(--fs-note); text-transform: none; letter-spacing: 0; color: var(--ink-2); }
.xtable th.coin .coin-n, .rtable th.coin .coin-n { margin-top: 3px; font-family: var(--font-label); font-size: var(--fs-label); text-transform: uppercase; letter-spacing: 0.04em; white-space: normal; line-height: 1.35; }
.xtable tbody th, .rtable tbody th, .zs-table tbody th, .ctable tbody th, .xv-table tbody th { text-align: left; white-space: nowrap; vertical-align: top; }
.xtable thead th:first-child, .xtable tbody th, .rtable thead th:first-child, .rtable tbody th { position: sticky; left: 0; z-index: 3; background: var(--paper); }
/* the corner stays over the row heads when the head sticks to the top */
.xtable thead th:first-child, .rtable thead th:first-child { z-index: 4; }
.xtable tbody th a, .rtable tbody th a, .zs-table tbody th a, .ctable tbody th a { color: var(--ink); text-decoration: none; }
.x-hint { display: none; margin: 0 0 var(--s-2); }
.st { color: var(--ink); }
.st-listed { --tag: var(--lapis); }
.st-listed-restricted { --tag: var(--lapis); }
.st-delisted { --tag: var(--vermilion); }
.st-never-listed, .st-unknown { --tag: var(--ink-2); color: var(--ink-2); }
.st-perponly { --tag: var(--plum); }
.st-perponly::before { border-radius: 0; width: 6px; height: 6px; transform: rotate(45deg); }
.st-frozen { --tag: var(--down); }
.st-wrapped, .st-named { --tag: var(--plum); }
.st-wrapped::before { background: transparent; }
.st-plus { margin-left: 4px; color: var(--moss); }
.st-plus::before { display: none; }
.st-sub { display: flex; width: fit-content; margin-top: 4px; white-space: normal; }
.st-when, .st-zec { display: block; margin-top: 3px; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.02em; color: var(--ink-2); white-space: nowrap; }
.x-legend { list-style: none; margin: var(--s-4) 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px 22px; font-size: var(--fs-note); color: var(--ink-2); }
.x-legend li { display: inline-flex; align-items: center; gap: 8px; }
.x-legend .st-sub { display: inline-flex; margin-top: 0; }
.x-legend .st-plus { margin-left: 0; }
/* notes under the exchanges */
.xnotes { border-top: 1px solid var(--ink); }
.xnote { border-bottom: 1px solid var(--rule); }
.xnote > summary { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 14px; padding: 10px 0; cursor: pointer; list-style: none; }
.xn-scope { flex: 1 1 30em; min-width: 0; color: var(--ink-2); font-size: var(--fs-note); }
.xn-body { padding: 0 0 var(--s-4) 20px; max-width: 92ch; font-size: var(--fs-small); line-height: 1.55; overflow-wrap: break-word; }
.xn-site { margin: 0 0 6px; font-size: var(--fs-note); }
.xn-cell { padding: var(--s-3) 0; border-top: 1px solid var(--rule); }
.xn-cell h4 { margin: 0 0 6px; font-size: 1rem; display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; }
.xn-coin-name, .xn-when { font-weight: 400; color: var(--ink-2); font-size: var(--fs-note); }
.xn-cell p { margin: 0 0 6px; }
.xn-regions { font-weight: 700; }
.xn-zec { color: var(--ink-2); }
.xn-cell h4 .st-sub { display: inline-flex; margin-top: 0; }
.xn-sub { margin-top: var(--s-3); padding-top: var(--s-2); border-top: 1px solid var(--rule); }
.xn-sub p.lbl { margin-top: 0; }
.xn-regex code { overflow-wrap: anywhere; }
/* shielded Zcash at each exchange */
.zs-table { max-width: 900px; }
.zs-yes { --tag: var(--lapis); }
.zs-no { --tag: var(--vermilion); }
.zs-unknown { --tag: var(--ink-2); color: var(--ink-2); }
.zs-d { display: block; margin-top: 3px; color: var(--ink-2); font-size: var(--fs-note); }
/* non-custodial routes */
.rtable { min-width: 760px; }
.rtable tbody th { white-space: normal; min-width: 10.5em; max-width: 15em; }
.rt-cust { display: block; margin-top: 2px; font-family: var(--font-label); font-size: var(--fs-label); font-weight: 400; letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); }
.rtable tr.rt-grp th { position: static; max-width: none; padding: var(--s-5) 0 var(--s-2); background: none; border-bottom: 1px solid var(--ink); font-family: var(--font-label); font-size: var(--fs-label); font-weight: 400; letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink); }
.rtable tr.rt-grp th > span { position: sticky; left: 0; }
.rtable tbody:first-of-type tr.rt-grp th { padding-top: var(--s-2); }
.rt-none { position: relative; }
.rt-none::before, .rt-dot { content: ""; display: inline-block; width: 4px; height: 4px; border-radius: 50%; background: var(--rule-2); vertical-align: middle; }
.rt-dot { margin: 0 4px; }
.rs-live { --tag: var(--lapis); }
.rs-paused { --tag: var(--plum); }
.rs-planned { --tag: var(--lapis); }
.rs-planned::before { background: var(--tag); border-radius: 0; width: 6px; height: 6px; transform: rotate(45deg); }
.rs-removed { --tag: var(--vermilion); }
.rs-unknown { --tag: var(--ink-2); color: var(--ink-2); }
.rt-sum { margin: 0; border-top: 1px solid var(--ink); }
.rt-sum > div { display: grid; grid-template-columns: 8.5em minmax(0, 1fr); gap: 4px var(--s-4); padding: var(--s-3) 0; border-bottom: 1px solid var(--rule); font-size: var(--fs-small); line-height: 1.6; }
.rt-sum dt { font-weight: 700; }
.rt-sum dt span { display: block; color: var(--ink-2); font-size: var(--fs-note); font-weight: 400; }
.rt-sum dd { margin: 0; max-width: 92ch; }
.rt-srcs { margin-top: 6px; }
/* the publishers cited, on /sources/ */
.pub-list { columns: 2 280px; column-gap: var(--s-7); padding-left: 1.1em; font-size: var(--fs-note); }
.pub-list li { break-inside: avoid; margin: 3px 0; }
@media (max-width: 960px) {
  .map-layout { grid-template-columns: minmax(0, 1fr); }
  .map-side { min-height: 0; }
  .map-side-inner { position: static; }
  .map-panel { overflow: visible; }
}
@media (max-width: 760px) {
  .rules-head { display: none; }
  .rule > summary { grid-template-columns: minmax(0, 1fr) minmax(0, 1.25fr); row-gap: 2px; }
  .rule > summary > .r-val, .rule > summary > .r-group-note, .rule > summary > .r-conf { display: none; }
  .rule-facts { display: block; margin: 0 0 12px; }
  .rule-facts > div { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; padding: 5px 0; border-top: 1px solid var(--rule); font-size: var(--fs-note); }
  .rule-facts dt { color: var(--ink-2); }
  .rule-facts dd { margin: 0; font-weight: 700; text-align: right; }
  .rule-body, .xn-body { padding-left: 0; }
  .x-hint { display: block; }
  .rt-sum > div { grid-template-columns: minmax(0, 1fr); }
  .rtable tbody th { min-width: 9em; max-width: 11em; }
}

/* ---- [explainers, search and site pages] Changes (/changes/ and the lists of changes elsewhere): a dated ledger ---- */
.changes { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--ink); }
.chg { display: grid; grid-template-columns: 8.5rem minmax(0, 1fr); gap: 2px var(--s-4); padding: var(--s-3) 0; border-bottom: 1px solid var(--rule); font-size: var(--fs-small); line-height: 1.55; scroll-margin-top: var(--s-4); }
.chg time { padding-top: 3px; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); white-space: nowrap; }
.chg-body p { margin: 0 0 4px; max-width: 92ch; }
.chg-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; }
.chg-coins { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.06em; }
.chg-src { color: var(--ink-2); font-size: var(--fs-note); }
.chg-note { color: var(--ink-2); font-size: var(--fs-note); }
.chg-src .sep { margin: 0 3px; }
.chg-src .chg-more { white-space: nowrap; }
.chg[hidden], .chg-year[hidden] { display: none; }
.more-changes { margin-top: var(--s-3); }
/* the badges of a change, by what happened */
.ev-listed, .ev-relisted, .ev-added, .ev-counted, .ev-tracked { --tag: var(--lapis); }
.ev-delisted, .ev-removed, .ev-uncounted, .ev-gone, .ev-exploit, .ev-governance-attack { --tag: var(--vermilion); }
.ev-delisted::before, .ev-removed::before, .ev-uncounted::before, .ev-gone::before, .ev-exploit::before, .ev-governance-attack::before, .ev-shutdown::before { border-radius: 0; }
.ev-restricted, .ev-status, .ev-changed { --tag: var(--plum); }
.ev-restricted::before, .ev-status::before, .ev-changed::before { background: linear-gradient(90deg, var(--tag) 50%, transparent 50%); }
.ev-shielded-support { --tag: var(--moss); }
.ev-sanction, .ev-prosecution, .ev-court { --tag: var(--plum); }
.ev-sanction::before, .ev-prosecution::before { border-radius: 0; width: 6px; height: 6px; transform: rotate(45deg); }
.ev-shutdown { --tag: var(--ink-2); }
.ev-review { --tag: var(--ink-2); }
.ev-ignored { --tag: var(--ink-2); color: var(--ink-2); }
.ev-ignored::before { background: transparent; }
.ev-check-listed, .ev-check-missing { --tag: var(--lapis); }
.ev-check-missing { --tag: var(--vermilion); }
.ev-check-listed::before, .ev-check-missing::before { background: transparent; border-style: dashed; border-width: 1px; width: 8px; height: 8px; }
.ev-level::before { display: none; }
.ev-level .sw { width: 9px; height: 9px; border-radius: 0; }
/* the filter by kind (radio buttons, no script) and the years */
.chg-filter { position: relative; display: flex; flex-wrap: wrap; gap: 4px var(--s-5); margin: 2px 0 var(--s-5); padding-bottom: var(--s-2); border-bottom: 1px solid var(--rule); }
.chg-filter input { position: absolute; width: 1px; height: 1px; margin: 0; opacity: 0; pointer-events: none; }
.chg-filter input:focus-visible + label { outline: 2px solid var(--focus); outline-offset: 2px; }
.chg-years { display: flex; flex-direction: column; gap: var(--s-5); }
.chg-year-h { margin: 0; font-family: var(--font-display-35); font-size: var(--fs-label-3); font-weight: 400; line-height: 1; color: var(--ink); font-variant-numeric: lining-nums; }
.chg-year .changes { border-top: 0; }
.chg-year > summary { display: flex; align-items: baseline; gap: 12px; padding: 0 0 var(--s-2); border-bottom: 1px solid var(--ink); cursor: pointer; list-style: none; }
.chg-year > summary::-webkit-details-marker { display: none; }
.chg-year > summary::before { content: ""; flex: none; width: 11px; height: 11px; background: linear-gradient(currentColor, currentColor) 50% 50% / 11px 1.5px no-repeat, linear-gradient(currentColor, currentColor) 50% 50% / 1.5px 11px no-repeat; transition: transform var(--t) var(--ease-out); align-self: center; }
.chg-year[open] > summary::before { transform: rotate(45deg); }
.chg-year > summary:hover { text-decoration: none; }
.chg-year > summary:hover .chg-year-h { color: var(--vermilion); }
.yc { display: none; font-family: var(--font-label); font-size: var(--fs-label); color: var(--ink-2); }
.chg-list:has(#k-all:checked) .yc[data-k="all"],
.chg-list:has(#k-exchange:checked) .yc[data-k="exchange"],
.chg-list:has(#k-rule:checked) .yc[data-k="rule"],
.chg-list:has(#k-protocol:checked) .yc[data-k="protocol"],
.chg-list:has(#k-listing:checked) .yc[data-k="listing"],
.chg-list:has(#k-site:checked) .yc[data-k="site"] { display: inline; }
.chg-list:has(#k-exchange:checked) .chg:not([data-kind="exchange"]),
.chg-list:has(#k-rule:checked) .chg:not([data-kind="rule"]),
.chg-list:has(#k-protocol:checked) .chg:not([data-kind="protocol"]),
.chg-list:has(#k-listing:checked) .chg:not([data-kind="listing"]),
.chg-list:has(#k-site:checked) .chg:not([data-kind="site"]),
.chg-list:has(#k-exchange:checked) .chg-year:not(:has([data-kind="exchange"])),
.chg-list:has(#k-rule:checked) .chg-year:not(:has([data-kind="rule"])),
.chg-list:has(#k-protocol:checked) .chg-year:not(:has([data-kind="protocol"])),
.chg-list:has(#k-listing:checked) .chg-year:not(:has([data-kind="listing"])),
.chg-list:has(#k-site:checked) .chg-year:not(:has([data-kind="site"])) { display: none; }
.chg-list.is-topic:has(#k-exchange:checked) .chg-year:not(:has(.chg[data-kind="exchange"]:not([hidden]))),
.chg-list.is-topic:has(#k-rule:checked) .chg-year:not(:has(.chg[data-kind="rule"]:not([hidden]))),
.chg-list.is-topic:has(#k-protocol:checked) .chg-year:not(:has(.chg[data-kind="protocol"]:not([hidden]))),
.chg-list.is-topic:has(#k-listing:checked) .chg-year:not(:has(.chg[data-kind="listing"]:not([hidden]))),
.chg-list.is-topic:has(#k-site:checked) .chg-year:not(:has(.chg[data-kind="site"]:not([hidden]))) { display: none; }
.chg-list.is-topic .yc { display: none !important; }
@media (max-width: 760px) {
  .chg { grid-template-columns: minmax(0, 1fr); }
}

/* ---- [explainers, search and site pages] Data (/data/): one ruled entry per file ---- */
.files { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--s-6) var(--col-gap); align-items: start; }
.file { display: flex; flex-direction: column; gap: var(--s-2); min-width: 0; padding: var(--s-3) 0 0; border-top: 1px solid var(--ink); scroll-margin-top: var(--s-4); }
.file-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 10px; }
.file-head h3 { margin: 0; font-family: var(--font-display); font-size: 1.625rem; font-weight: 400; line-height: 1.1; }
.fmt { --tag: var(--ink); }
.fmt-csv { --tag: var(--moss); }
.fmt-json { --tag: var(--lapis); }
.fmt-rss, .fmt-ics { --tag: var(--vermilion); }
.fmt-txt { --tag: var(--plum); }
.file-desc { margin: 0; font-size: var(--fs-small); line-height: 1.55; }
.file-facts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--s-2) var(--s-4); margin: 0; padding-top: var(--s-2); border-top: 1px solid var(--rule); font-size: var(--fs-note); line-height: 1.45; }
.file-facts dd { margin: 1px 0 0; }
.file-fields { margin-top: auto; padding-top: var(--s-2); border-top: 1px solid var(--rule); }
.file-fields > summary .n { color: var(--ink-2); font-variant-numeric: tabular-nums; }
.file-fields .table-wrap { margin-top: var(--s-2); }
table.fields { font-size: var(--fs-note); }
table.fields td { padding: 7px 8px; line-height: 1.45; }
table.fields td:first-child { white-space: nowrap; font-family: var(--font-label); font-size: var(--fs-label); }
.file-members { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 4px 16px; font-size: var(--fs-note); line-height: 1.5; }
@media (max-width: 760px) {
  .files { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 640px) {
  .file-facts { grid-template-columns: minmax(0, 1fr); }
}

/* ---- [protocols, chains and wallets] Protocols (/protocols/): the page around the protocol table ---- */
/* the stacked time-series charts (web/protocols.js, uPlot loaded when they near the screen): the room of a drawn chart
   while it loads, none without script, where the box holds a line of text */
.js .pr-chart { min-height: calc(320px + 2.75rem); }
.js .pr-chart.ts-drawn { min-height: auto; }
html:not(.js) .pr-chart { min-height: 0; }
.pr-chart > .note { margin: 0; }
/* what the hides grid does not say, and how the assets are grouped: under the figure, in the text face */
.pr-hides-not, .pr-method { margin-top: var(--s-4); color: var(--ink-2); font-size: var(--fs-small); line-height: 1.55; }
/* the two seal keys under the profiles, side by side on wide screens */
.pr-keys { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 var(--col-gap); }
.pr-keys-more { margin: var(--s-3) 0 0; }
@media (max-width: 960px) {
  .pr-keys { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 560px) {
  .js .pr-chart { min-height: calc(240px + 2.75rem); }
}
/* How concentrated it is (#concentration): the newest three figures as a ledger strip, then the two small charts side by
   side (shares in percent; the effective number of protocols), one above the other below 960px */
.pr-conc-tiles { grid-template-columns: repeat(3, minmax(0, 1fr)); grid-template-rows: repeat(3, auto); margin-bottom: var(--s-5); }
.pr-conc-tiles .tile-label { margin: 0; }
/* the three tiles share their rows (subgrid), so the numerals stand level however the labels wrap on a phone */
.pr-conc-tiles > .tile { display: grid; grid-row: span 3; grid-template-rows: subgrid; row-gap: 0; align-content: start; }
.pr-conc-charts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--s-5) var(--col-gap); }
.pr-conc-part { min-width: 0; }
.pr-conc-part > .sub { margin-top: 0; }
.js .pr-conc-chart { min-height: calc(220px + 2.75rem); }
.js .pr-conc-chart:not(.ts-drawn):has(> .ts-pre) { grid-template-rows: 220px auto; }
@media (max-width: 960px) {
  .pr-conc-charts { grid-template-columns: minmax(0, 1fr); }
}
/* Lifespans (#lifespans): the names in a column of their own beside the drawing, one 14px row a lane in both */
.pr-life-grid { display: grid; grid-template-columns: minmax(0, 10rem) minmax(0, 1fr); column-gap: var(--s-3); }
.pr-life-names { list-style: none; margin: 0; padding: 4px 0 0; font-size: 12px; line-height: 14px; }
.pr-life-names li { height: 14px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; color: var(--ink); }
.pr-life-names li.is-off { color: var(--ink-2); }
.pr-life-names a { text-decoration-thickness: 1px; text-underline-offset: 2px; }
.pr-life-plot { min-width: 0; }
.pr-life-plot .ck-open { stroke-width: 2px; }
.pr-life-years-h { margin-top: var(--s-6); }
.pr-life-years { max-width: 760px; }
@media (max-width: 560px) {
  .pr-life-grid { grid-template-columns: minmax(0, 7rem) minmax(0, 1fr); column-gap: var(--s-2); }
  .pr-life-names { font-size: 11px; }
}

/* ---- [protocols, chains and wallets] Chains (/chains/ and /chains/<id>/) ---- */
/* a chain's seal before its name in the tables (seal-inline sizes it to the line); its key under the first table */
.ch-table th[scope="row"] { white-space: nowrap; }
.ch-keys { margin-top: var(--s-2); }
.ch-keys > .seal-key { margin-top: 0; }

/* ---- [protocols, chains and wallets] Protocol profiles (/protocols/<id>/), the strip of profiles and the table's Profile link ---- */
.pf-head { padding-top: var(--s-5); }
.pf-head h1 { display: flex; align-items: center; gap: var(--s-4); }
.pf-head .lede { max-width: 48ch; }
.logo.pf-logo { width: 52px; height: 52px; margin: 0; }
.logo.pf-logo.mono { font-size: var(--fs-label-2); border-width: 2px; }
.pf-badges { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px 18px; margin: var(--s-5) 0 0; }
.pf-kind { display: inline-flex; align-items: baseline; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); }
.pf-status-note { margin: var(--s-3) 0 0; max-width: 72ch; color: var(--ink-2); font-size: var(--fs-small); line-height: 1.55; }
.pf-facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: var(--s-4) var(--s-5); margin: var(--s-5) 0 0; padding: var(--s-3) 0 0; border-top: 1px solid var(--ink); }
.pf-facts .pf-wide { grid-column: 1 / -1; }
.pf-facts dd { margin: 4px 0 0; font-weight: 700; line-height: 1.4; font-variant-numeric: tabular-nums; }
.pf-facts dd small { display: block; margin-top: 2px; font-size: var(--fs-note); font-weight: 400; color: var(--ink-2); }
.pf-links { list-style: none; margin: var(--s-5) 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px var(--s-5); }
.pf-links a { display: inline-flex; align-items: baseline; gap: 8px; font-weight: 700; }
.pf-links .src-host { font-weight: 400; }
.pf-head .acc-meta { margin-top: var(--s-4); }
.pf-text { max-width: var(--measure); line-height: 1.65; }
.pf-text p { margin: 0 0 1em; }
.pf-text > :last-child { margin-bottom: 0; }
.pf-how { display: grid; grid-template-columns: minmax(0, 1fr) minmax(250px, 330px); gap: var(--s-5) var(--s-7); align-items: start; }
.pf-aside { padding: var(--s-3) 0 0; border-top: 3px solid var(--ink); font-size: var(--fs-small); line-height: 1.55; }
.pf-aside h3 { margin: 0 0 6px; }
.pf-aside h3:not(:first-child) { margin-top: var(--s-4); padding-top: var(--s-3); border-top: 1px solid var(--rule); }
.pf-aside p { margin: 0; }
.chip.pf-symbol { margin: 0 4px 0 0; }
.pf-stats { margin: 0 0 var(--s-4); }
.pf-chart-note { max-width: 96ch; line-height: 1.55; }
.pf-none { margin: 0; }
/* what it hides and what it does not: two columns under a heavy rule, ink and vermilion */
.pf-hides { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--s-5) var(--col-gap); }
.pf-hide { padding: var(--s-3) 0 0; border-top: 3px solid var(--ink); }
.pf-visible { border-top-color: var(--vermilion); }
.pf-hide h3 { display: flex; align-items: center; margin: 0 0 var(--s-2); }
.pf-hide ul { margin: 0; padding-left: 1.15em; font-size: var(--fs-small); line-height: 1.55; }
.pf-hide li { margin: 0 0 8px; padding-left: 0.2em; }
.pf-hide li:last-child { margin-bottom: 0; }
.pf-hide li::marker { color: var(--ink-2); }
.pf-hides + .note { margin-top: var(--s-4); max-width: 96ch; }
/* audits and funding tables; on phones each row becomes a block */
table.pf-table { font-variant-numeric: normal; }
table.pf-table td { line-height: 1.5; }
table.pf-table td p { margin: 0 0 4px; }
table.pf-table .chg-src { margin: 0; }
table.pf-table th[scope="row"] { min-width: 9em; }
.pf-date { width: 7.5em; white-space: nowrap; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); }
.pf-undated { color: var(--ink-2); font-style: italic; }
table.pf-funding td.num { font-weight: 700; font-variant-numeric: tabular-nums; }
table.pf-funding td:last-child { min-width: 12em; }
/* milestones: dates beside a dotted line, a dot per entry */
.pf-timeline { list-style: none; margin: 0; padding: 0; }
.pf-timeline > li { position: relative; display: grid; grid-template-columns: 7.2em minmax(0, 1fr); column-gap: 36px; padding: 0 0 var(--s-4); font-size: var(--fs-small); line-height: 1.55; }
.pf-timeline > li:last-child { padding-bottom: 0; }
.pf-timeline > li::before { content: ""; position: absolute; left: calc(7.2em + 17px); top: 12px; bottom: -6px; width: 2px; color: var(--ink-2); background: var(--dot-1) 0 0 / 2px 3px repeat-y; }
.pf-timeline > li:last-child::before { display: none; }
.pf-timeline > li::after { content: ""; position: absolute; left: calc(7.2em + 13px); top: 6px; width: 10px; height: 10px; border-radius: 50%; background: var(--ink); }
.pf-timeline time { padding-top: 3px; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); text-align: right; white-space: nowrap; }
.tl-body p { margin: 0 0 4px; max-width: 92ch; }
.tl-body .chg-src { margin: 0; }
.pf-sources { columns: 2 340px; column-gap: var(--s-7); }
.pf-sources li { break-inside: avoid; }
#sources .acc-meta { margin-top: var(--s-4); }
/* the strip of profiles: an index of names, each with its glyph */
.sub.pf-sub { margin-top: var(--s-6); }
.pf-strip-note { margin: 0 0 var(--s-3); }
.pf-strip { list-style: none; margin: 0 0 6px; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0 var(--col-gap); border-top: 1px solid var(--ink); }
.pf-strip > li { border-bottom: 1px solid var(--rule); }
.pf-card { display: flex; align-items: center; gap: 12px; height: 100%; padding: 10px 0; color: var(--ink); text-decoration: none; background-position: 0 100%; background-size: 0 100%; }
.pf-card:hover { background-size: 100% 100%; color: var(--on-highlight); }
.logo.pf-card-logo { width: 26px; height: 26px; margin: 0; }
.pf-card-text { display: flex; flex-direction: column; min-width: 0; line-height: 1.3; }
.pf-card-name { font-weight: 700; }
.pf-card-kind { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); }
/* a card with its 12-month line and its seal at the right end (profileStripHtml with the page context) */
.pf-strip-x .pf-card { gap: 10px; }
.pf-card-spark { flex: none; display: block; margin-left: auto; line-height: 0; }
.pf-card-spark > svg { display: block; width: 64px; height: 22px; }
.pf-card > .ck-seal.pf-card-seal { flex: none; display: block; width: 26px; height: 26px; }
.pf-card-text + .ck-seal.pf-card-seal { margin-left: auto; }
/* four cards a row left a name too little room beside its line and seal under 1440px: names ran onto two lines from
   1400px and broke inside words at 1100px ("Decre d", 13 Nov 2026), so three a row there; the seal column stays at
   each card's right edge, with a line or without one */
@media (min-width: 961px) and (max-width: 1439px) { .pf-strip-x { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.pf-strip-key { margin-top: var(--s-3); }
/* the header graphic of a profile: its seal, large, beside the reading key (the key goes under it when the column is
   narrow); when a card's seal travels here, web/theme.js names this one (.vt-seal-dest) its partner, vt-seal */
.pf-seal-fig { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-3) var(--s-4); }
.pf-seal-fig > .ck-seal { flex: none; display: block; width: var(--head-art-h); height: var(--head-art-h); }
.pf-seal-key { flex: 1 1 9.5rem; min-width: 0; margin: 0; display: grid; gap: 6px; font-size: var(--fs-note); line-height: 1.35; }
.pf-seal-key dt { color: var(--ink-2); font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; }
.pf-seal-key dd { margin: 1px 0 0; color: var(--ink); }
/* what it hides, as a diagram: the seal with the five things a design can hide at their places around it */
.pf-hfig { margin: 0 0 var(--s-6); }
.pf-hfig-grid { display: grid; grid-template-columns: minmax(0, 1fr) 176px minmax(0, 1fr); grid-template-areas: ". sender balance" "link seal recipient" ". amount ."; gap: var(--s-3) var(--s-4); align-items: center; max-width: 46rem; }
.pf-hfig-grid > .ck-seal { grid-area: seal; display: block; width: 176px; height: 176px; }
.pf-hfig-list { display: contents; list-style: none; margin: 0; padding: 0; }
.pf-hpos { display: flex; flex-direction: column; gap: 2px; font-size: var(--fs-small); line-height: 1.35; }
.pf-hpos .pf-hname { font-weight: 700; }
.pf-hpos:not(.is-on) .pf-hname { font-weight: 400; color: var(--ink-2); }
.pf-hpos.is-on .pf-htag { --tag: var(--vermilion); }
.pf-hpos-sender { grid-area: sender; align-self: end; align-items: center; text-align: center; }
.pf-hpos-balance { grid-area: balance; align-self: end; }
.pf-hpos-recipient { grid-area: recipient; }
.pf-hpos-amount { grid-area: amount; align-self: start; align-items: center; text-align: center; }
.pf-hpos-link { grid-area: link; align-items: flex-end; text-align: right; }
.pf-hfig > figcaption { max-width: 96ch; margin-top: var(--s-4); }
@media (max-width: 960px) {
  .pf-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .pf-how { grid-template-columns: minmax(0, 1fr); }
  .pf-aside { max-width: 78ch; }
}
@media (max-width: 760px) {
  .pf-hides { grid-template-columns: minmax(0, 1fr); }
  table.pf-table thead { position: absolute; left: -9999px; }
  table.pf-table, table.pf-table tbody, table.pf-table tr, table.pf-table td, table.pf-table th[scope="row"] { display: block; width: auto; min-width: 0; }
  table.pf-table tr { padding: var(--s-3) 0; border-bottom: 1px solid var(--rule); }
  table.pf-table td, table.pf-table th[scope="row"] { padding: 2px 0; border: 0; text-align: left; }
  table.pf-table td[data-label]::before { content: attr(data-label) ": "; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); }
  table.pf-funding td.num { text-align: left; }
  .pf-timeline > li { grid-template-columns: minmax(0, 1fr); padding-left: 28px; }
  .pf-timeline > li::before { left: 4px; }
  .pf-timeline > li::after { left: 0; }
  .pf-timeline time { text-align: left; }
}
@media (max-width: 640px) {
  .logo.pf-logo { width: 40px; height: 40px; }
  .pf-strip { grid-template-columns: minmax(0, 1fr); }
  /* the diagram: the seal, then the five things in a list */
  .pf-hfig-grid { grid-template-columns: minmax(0, 1fr); grid-template-areas: none; }
  .pf-hfig-grid > .ck-seal { grid-area: auto; width: 136px; height: 136px; }
  .pf-hfig-list { display: grid; gap: var(--s-2); }
  .pf-hpos, .pf-hpos-sender, .pf-hpos-amount, .pf-hpos-link { grid-area: auto; flex-direction: row; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; text-align: left; }
}

/* ---- [protocols, chains and wallets] Compare (/compare/): the seals at the head of the table, the rows marked where the protocols differ, the small multiples ---- */
/* (the table's own rules, the selector and the links are in the Tools section) */
.cmp-head { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; color: var(--ink); text-decoration: none; background-size: 0 100%; }
.cmp-head:hover { background-size: 100% 100%; color: var(--on-highlight); }
.cmp-head > .ck-seal.cmp-seal { display: block; width: 96px; height: 96px; margin-bottom: 4px; }
.cmp-table thead .cmp-kind { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); }
.cmp-row { display: block; }
.cmp-table tbody th[scope="row"] .tag { margin-top: 6px; }
.tag.cmp-tag-differs { --tag: var(--vermilion); }
.cmp-table tr.cmp-first-same > * { border-top: 3px solid var(--ink); }
.cmp-key { max-width: 96ch; }
.cmp-key .tag { margin: 0 2px; }
/* the header graphic: the seals of the profiles on one sheet */
.head-art > svg.cmp-sheet { max-height: var(--head-art-h); }
/* small multiples: a card per protocol, the line on the scale shared with the cards of the same measure */
.cmp-multiples { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--s-5) var(--col-gap); }
.cmp-mcard { min-width: 0; padding: var(--s-2) 0 0; border-top: 1px solid var(--ink); }
.cmp-mname { margin: 0; display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 2px 8px; font-weight: 700; }
.cmp-mlabel { font-family: var(--font-label); font-size: var(--fs-label); font-weight: 400; letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); }
.cmp-mnow { margin: var(--s-1) 0 0; display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 8px; color: var(--ink-2); font-size: var(--fs-note); }
.cmp-mnow strong { color: var(--ink); font-family: var(--font-display-35); font-size: var(--fs-label-3); font-weight: 400; line-height: 1.1; }
.chart.cmp-chart { min-height: 0; height: 124px; margin-top: 6px; }
.chart.cmp-chart.cmp-chart-none { height: auto; padding: var(--s-3) 0; color: var(--ink-2); font-size: var(--fs-note); }
@media (max-width: 960px) {
  .cmp-multiples { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  .cmp-multiples { grid-template-columns: minmax(0, 1fr); }
  .cmp-head > .ck-seal.cmp-seal { width: 64px; height: 64px; }
}

/* ---- [access and rules] Exchange access (/access/#exchange-access): small multiples, one per coin, on the same 0 to 14 scale ---- */
.xa-grid { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--s-5) var(--col-gap); }
.xa-card { display: flex; flex-direction: column; min-width: 0; padding: var(--s-2) 0 0; border-top: 1px solid var(--ink); }
.xa-coin { margin: 0; display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 8px; font-size: var(--fs-small); line-height: 1.3; }
.xa-sym { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); }
.xa-name { font-weight: 400; color: var(--ink-2); font-size: var(--fs-note); }
.xa-now { margin: var(--s-1) 0 0; display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 6px; color: var(--ink-2); font-size: var(--fs-note); }
.xa-now strong { color: var(--ink); font-family: var(--font-display-35); font-size: var(--fs-label-3); font-weight: 400; line-height: 1.1; }
.xa-when { margin-left: auto; white-space: nowrap; }
.chart.xa-chart { min-height: 0; height: 112px; margin-top: 6px; }
.xa-list { margin: 6px 0 0; color: var(--ink-2); font-size: var(--fs-note); line-height: 1.45; }
.xa-note, .xa-checked { max-width: 96ch; line-height: 1.55; }
.xa-checked a, .xa-note a { overflow-wrap: anywhere; }
.xa-table .table-wrap { margin-top: var(--s-2); }
.xa-table td:first-child { white-space: nowrap; }
@media (max-width: 960px) {
  .xa-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ---- [timeline, legal, incidents and funding] Timeline (/timeline/) and the overview's strip of recent entries ----
   Entries hang from one dotted line under a numeral for each year, each with a dot in its family's ink, the same inks
   as the pictures above the list (TIMELINE_FAMILIES in src/record-charts.mjs): exploits vermilion, enforcement
   (sanctions, prosecutions, court) plum, regulation moss, delistings ochre, launches and upgrades lapis, shutdowns
   ink-2 (square), other a ring. */
.tln-t-exploit { --tag: var(--vermilion); }
.tln-t-delisting { --tag: var(--ochre); }
.tln-t-sanction, .tln-t-prosecution, .tln-t-court { --tag: var(--plum); }
.tln-t-regulation { --tag: var(--moss); }
.tln-t-launch, .tln-t-upgrade { --tag: var(--lapis); }
.tln-t-shutdown { --tag: var(--ink-2); }
.tln-t-shutdown::before { border-radius: 0; }
.tln-t-other { --tag: var(--ink-2); }
.tln-t-other::before { background: transparent; }
.tln-sw-exploit { background: var(--vermilion); }
.tln-sw-delisting { background: var(--ochre); }
.tln-sw-sanction, .tln-sw-prosecution, .tln-sw-court { background: var(--plum); }
.tln-sw-regulation { background: var(--moss); }
.tln-sw-launch, .tln-sw-upgrade { background: var(--lapis); }
.tln-sw-shutdown { background: var(--ink-2); border-radius: 0; }
.tln-sw-other { background: transparent; border: 1.5px solid var(--ink-2); }
.tln-jump { list-style: none; margin: var(--s-1) 0 2px; padding: 0; display: flex; flex-wrap: wrap; gap: 4px var(--s-4); }
.tln-jump li[hidden] { display: none; }
.tln-jump a { display: inline-flex; align-items: baseline; gap: 6px; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-decoration: none; }
.tln-jump .n { color: var(--ink-2); }
.tln-tools { display: flex; flex-direction: column; gap: var(--s-3); margin: var(--s-1) 0 var(--s-6); padding-bottom: var(--s-4); border-bottom: 1px solid var(--ink); }
.tln-tools[hidden] { display: none; }
.tln-filter { display: flex; flex-wrap: wrap; gap: 4px var(--s-4); }
.tln-filter .sw { width: 8px; height: 8px; }
.tln-find { display: flex; flex-wrap: wrap; align-items: center; gap: 8px var(--s-4); }
.tln-search { display: flex; align-items: center; gap: 10px; flex: 0 1 28rem; min-width: 0; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); }
.tln-search input { flex: 1 1 auto; width: 100%; min-width: 0; font-family: var(--font-text); font-size: 1rem; text-transform: none; letter-spacing: 0; }
.tln-count { margin: 0; color: var(--ink-2); font-size: var(--fs-note); }
.tln-clear[hidden] { display: none; }
.tln-years { position: relative; }
.tln-years::before { content: ""; position: absolute; left: calc(6.6rem + 17px); top: 14px; bottom: 8px; width: 3px; color: var(--ink-2); background: var(--dot-1) 0 0 / 3px 3px repeat-y; }
.tln-year { scroll-margin-top: var(--s-4); }
.tln-year[hidden] { display: none; }
.tln-year-head { position: relative; display: grid; grid-template-columns: 6.6rem minmax(0, 1fr); column-gap: 36px; align-items: center; margin: 0 0 var(--s-4); }
.tln-year + .tln-year .tln-year-head { margin-top: var(--s-4); }
.tln-year-head::after { content: ""; position: absolute; left: calc(6.6rem + 10px); top: 50%; width: 17px; height: 17px; margin-top: -8.5px; border-radius: 50%; background: var(--ink); }
.tln-year-h { margin: 0; text-align: right; font-family: var(--font-display-35); font-size: var(--fs-label-3); font-weight: 400; line-height: 1; font-variant-numeric: lining-nums; }
.tln-year-n { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); }
.tln-list { list-style: none; margin: 0 0 var(--s-3); padding: 0; }
.tln-entry { position: relative; display: grid; grid-template-columns: 6.6rem minmax(0, 1fr); column-gap: 36px; padding: 0 0 var(--s-5); font-size: var(--fs-small); line-height: 1.55; scroll-margin-top: var(--s-4); }
.tln-entry[hidden] { display: none; }
.tln-entry::after { content: ""; position: absolute; left: calc(6.6rem + 13px); top: 7px; width: 11px; height: 11px; border-radius: 50%; background: var(--tln-c, var(--ink-2)); outline: 3px solid var(--paper); }
.tln-entry[data-type="exploit"] { --tln-c: var(--vermilion); }
.tln-entry[data-type="delisting"] { --tln-c: var(--ochre); }
.tln-entry[data-type="sanction"], .tln-entry[data-type="prosecution"], .tln-entry[data-type="court"] { --tln-c: var(--plum); }
.tln-entry[data-type="regulation"] { --tln-c: var(--moss); }
.tln-entry[data-type="launch"], .tln-entry[data-type="upgrade"] { --tln-c: var(--lapis); }
.tln-entry[data-type="shutdown"]::after { border-radius: 0; }
.tln-entry > time { padding-top: 3px; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); text-align: right; white-space: nowrap; }
.tln-body { min-width: 0; }
.tln-body > .tln-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; margin: 0 0 5px; }
.tln-conf { font-size: var(--fs-note); }
.tln-title { margin: 0 0 4px; max-width: 70ch; font-family: var(--font-display); font-size: 1.4375rem; font-weight: 400; line-height: 1.2; letter-spacing: -0.005em; }
.tln-sum { margin: 0 0 var(--s-2); max-width: 88ch; }
.tln-amount { margin: 0 0 var(--s-2); color: var(--ink-2); font-size: var(--fs-note); }
.tln-amount strong { color: var(--ink); font-variant-numeric: tabular-nums; }
.tln-chips { list-style: none; margin: 0 0 var(--s-2); padding: 0; display: flex; flex-wrap: wrap; gap: 4px 14px; }
.tln-chips .chip { margin: 0; }
.tln-src { display: flex; flex-wrap: wrap; align-items: baseline; gap: 3px 10px; color: var(--ink-2); font-size: var(--fs-note); }
.tln-src ol { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 3px 14px; }
.tln-src a { display: inline-flex; align-items: baseline; gap: 5px; overflow-wrap: anywhere; }
.tln-n { display: inline-block; min-width: 1.4em; font-family: var(--font-label); font-size: var(--fs-label); text-align: center; color: var(--ink); }
.tln-n::before { content: "["; color: var(--ink-2); }
.tln-n::after { content: "]"; color: var(--ink-2); }
.tln-note { margin: 4px 0 0; color: var(--ink-2); font-size: var(--fs-note); font-style: italic; }
.tln-entry:target > .tln-body, :target > .tln-body, :target > .chg-body { background: var(--target); outline: 8px solid var(--target); }
.tln-entry:target::after { outline: 2px solid var(--tln-c, var(--ink-2)); outline-offset: 2px; }
.tln-defs dt { font-weight: 400; }
/* the pictures above the list (src/record-charts.mjs): every entry on one time axis, its dots all one size, then the
   entries by year; web/timeline.js dims the dots of the entries that the filters leave out */
.tln-axis .ck-evs .ck-m.is-out { opacity: 0.14; }
/* the overview's strip: the five newest entries as a ruled index */
.panel-head .tln-all { font-size: var(--fs-note); white-space: nowrap; }
.tln-strip { list-style: none; margin: var(--s-1) 0 2px; padding: 0; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 0 var(--col-gap); }
.tln-strip > li { border-top: 1px solid var(--ink); }
.tln-card { display: flex; flex-direction: column; gap: var(--s-2); height: 100%; padding: var(--s-3) 0 var(--s-4); color: var(--ink); text-decoration: none; background-position: 0 100%; background-size: 0 100%; }
.tln-card:hover { background-size: 100% 100%; color: var(--on-highlight); }
.tln-card-top { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 4px 8px; }
.tln-card time { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); white-space: nowrap; }
.tln-card-title { font-family: var(--font-display); font-size: 1.1875rem; line-height: 1.22; }
@media (max-width: 960px) {
  .tln-strip { grid-template-columns: minmax(0, 1fr); }
  .tln-strip > li { border-top: 0; border-bottom: 1px solid var(--rule); }
  .tln-strip > li:first-child { border-top: 1px solid var(--ink); }
  .tln-card { flex-direction: row; flex-wrap: wrap; align-items: baseline; gap: 4px var(--s-4); padding: var(--s-3) 0; }
  .tln-card-top { flex: 0 0 auto; justify-content: flex-start; gap: 10px; min-width: 12rem; }
  .tln-card-title { flex: 1 1 18rem; }
}
@media (max-width: 760px) {
  .tln-years::before { left: 4px; }
  .tln-year-head { display: flex; align-items: baseline; gap: 12px; padding-left: 28px; }
  .tln-year-head::after { left: -3px; }
  .tln-year-h { text-align: left; }
  .tln-entry { grid-template-columns: minmax(0, 1fr); padding-left: 28px; }
  .tln-entry::after { left: 0; }
  .tln-entry > time { text-align: left; }
}
@media (max-width: 640px) {
  .tln-search { flex-basis: 100%; }
}

/* ---- [activity and anonymity] Activity (/activity/): each metric a figure, what it measures and its limits side by side ---- */
.act-tiles { margin: 0 0 var(--s-5); scroll-margin-top: var(--s-4); }
.act-tile .tile-change { font-weight: 400; color: var(--ink-2); }
.act-sec .acc-stats.act-stats { margin: 0 0 var(--s-4); }
.act-note { margin: var(--s-2) 0 0; max-width: 96ch; }
.act-about { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--s-4) var(--s-7); margin: var(--s-5) 0 0; padding-top: var(--s-4); border-top: 1px solid var(--rule-2); font-size: var(--fs-small); line-height: 1.6; }
.act-about h3 { margin: 0 0 6px; }
.act-about p { margin: 0; max-width: 72ch; }
.act-chains { margin: var(--s-5) 0 0; max-width: 720px; }
.act-source { margin: var(--s-4) 0 0; max-width: 110ch; line-height: 1.55; }
.act-docs { margin: var(--s-2) 0 0; font-size: var(--fs-small); }
.act-docs .srcs { margin-top: var(--s-2); }
.act-usage p { max-width: 64ch; }
.act-checks { margin: 4px 0 var(--s-3); font-size: var(--fs-note); }
.act-checks td .src-meta { display: block; font-size: var(--fs-note); white-space: normal; }
.act-checks td.num { white-space: normal; }
/* the tiles' labels link to each project's profile, and travel into its title */
.act-tile .tile-label a { color: inherit; text-decoration-color: var(--rule-2); }
.act-tile .tile-label a:hover { text-decoration-color: var(--ink); }
/* the weekly rhythm: small multiples, one set of seven columns a project, three abreast on wide screens */
.act-week { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--s-6) var(--s-6); align-items: start; margin: var(--s-2) 0 0; }
.act-wk { min-width: 0; padding-top: var(--s-2); border-top: 1px solid var(--rule-2); }
.act-wk > h3.act-wk-h { margin: 0 0 var(--s-2); font-size: 1rem; line-height: 1.35; }
.act-wk-h span { display: block; color: var(--ink-2); font-size: var(--fs-note); font-weight: 400; }
.act-cover { max-width: 96ch; }
/* the overview's Private DEX volume panel (dexVolumePanelHtml in src/dexvolume.mjs): its figures over the bars */
.acc-stats.dexv-stats { margin: 0 0 var(--s-4); }
@media (min-width: 1100px) {
  /* the weekly rhythm's note moves into the margin beside its columns, as a chart's does */
  .panel > .act-week:has(+ .note) { grid-column: body-start / body-end; }
  .panel > .act-week + .note { grid-column: margin-start / margin-end; align-self: start; margin-top: 0; padding-top: var(--s-2); border-top: 1px solid var(--ink); }
  .panel > .act-week + .note::before { content: "Note"; display: block; margin-bottom: var(--s-1); font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink); }
}
@media (max-width: 960px) {
  .act-week { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 760px) {
  .act-about { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 520px) {
  .act-week { grid-template-columns: minmax(0, 1fr); gap: var(--s-5); }
}

/* ---- [activity and anonymity] Anonymity sets (/anonymity-sets/), also used by Cost of privacy ---- */
.anon-intro { margin: 0 0 var(--s-4); max-width: 80ch; line-height: 1.6; }
.anon-meta { margin: 0 0 var(--s-4); color: var(--ink-2); font-size: var(--fs-note); }
.anon-what p { margin: 0 0 10px; }
.anon-table tbody th[scope="row"] { min-width: 8em; }
.anon-now tr.anon-group th { padding: var(--s-4) 0 var(--s-2); border-bottom: 1px solid var(--ink); background: none; font-family: var(--font-label); font-size: var(--fs-label); font-weight: 400; letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink); }
.anon-now tbody + tbody tr.anon-group th { padding-top: var(--s-6); }
.anon-now tr.anon-group a { color: inherit; text-decoration: none; }
.anon-sub { display: block; margin-top: 2px; color: var(--ink-2); font-size: var(--fs-note); font-weight: 400; }
.anon-when { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; color: var(--ink-2); white-space: nowrap; }
.anon-charts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--s-6) var(--col-gap); align-items: start; margin: var(--s-2) 0 var(--s-6); }
.anon-fig { margin: 0; min-width: 0; padding-top: var(--s-2); border-top: 1px solid var(--rule-2); }
.anon-fig-head { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 8px 12px; margin: 0 0 var(--s-2); }
.anon-fig-head h3 { margin: 0; font-size: 1.0625rem; line-height: 1.35; }
.anon-fig .note { margin-top: var(--s-2); line-height: 1.5; }
.anon-wait, .nh-wait { display: grid; place-items: center; min-height: 200px; margin: 0; padding: var(--s-4); color: var(--ink-2); font-size: var(--fs-note); line-height: 1.5; text-align: center; background: var(--dot-1) 0 0 / var(--dot-1-size); background-color: transparent; }
.anon-wait { color: var(--ink-2); }
.nh-wait { min-height: 160px; }
.anon-box { padding: var(--s-3) 0 0; border-top: 1px solid var(--ink); font-size: var(--fs-small); line-height: 1.6; }
.anon-box h3 { margin: 0 0 6px; }
.anon-box p { margin: 0; }
.anon-fact { display: flex; align-items: baseline; gap: var(--s-5); max-width: 80ch; margin: 4px 0 var(--s-5); padding: var(--s-3) 0; border-top: 1px solid var(--ink); border-bottom: 1px solid var(--ink); }
.anon-fact strong { flex: none; font-family: var(--font-display-35); font-size: clamp(2.6rem, 2rem + 2vw, 3.5rem); font-weight: 400; line-height: 0.9; color: var(--vermilion); font-variant-numeric: lining-nums; }
.anon-fact span { line-height: 1.5; }
.anon-limits { padding: var(--s-3) 0 0; border-top: 3px solid var(--vermilion); }
.anon-limits ul { margin: 0; padding-left: 1.15em; max-width: 92ch; line-height: 1.6; }
.anon-limits li { margin: 0 0 10px; padding-left: 0.2em; }
.anon-limits li:last-child { margin-bottom: 0; }
.anon-limits li::marker { color: var(--vermilion); }
.anon-srcs .srcs { margin-bottom: 4px; }
@media (max-width: 760px) {
  .anon-charts { grid-template-columns: minmax(0, 1fr); }
  table.anon-stack thead { position: absolute; left: -9999px; }
  table.anon-stack, table.anon-stack tbody, table.anon-stack tr, table.anon-stack td, table.anon-stack th { display: block; width: auto; min-width: 0; }
  table.anon-stack tr { padding: var(--s-3) 0; border-bottom: 1px solid var(--rule); }
  table.anon-stack td, table.anon-stack th[scope="row"] { padding: 2px 0; border: 0; text-align: left; white-space: normal; }
  table.anon-stack td[data-label]::before { content: attr(data-label) ": "; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); }
  table.anon-stack td.num { white-space: normal; }
  .anon-now tr.anon-group { padding: var(--s-5) 0 6px; }
  .anon-now tr.anon-group th, .anon-now tbody + tbody tr.anon-group th { padding: 0; border: 0; }
  .anon-sub { display: inline; margin: 0 0 0 6px; }
}

/* ---- [timeline, legal, incidents and funding] Funding (/funding/), also used by Incidents and Audits: year rows with a bar each, filters, the table ---- */
/* the pictures above the tables (src/record-charts.mjs): disclosed funding by year and type, the largest rounds and the
   investors across projects; a year, round, project or investor chosen to narrow the table keeps the marker pen */
:is(.fd-bars, .fd-barlist, .fd-arcs) a.ck-m[aria-current="true"] > .ck-hit { fill: var(--target); }
.fd-undated-line { margin: var(--s-3) 0 0; color: var(--ink-2); font-size: var(--fs-note); }
.fd-chart-note { max-width: 96ch; }
.fd-tools { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--s-3) var(--s-4); margin: 0 0 var(--s-4); padding-bottom: var(--s-3); border-bottom: 1px solid var(--rule); }
.fd-tools[hidden], .fd-reset[hidden], .fd-empty[hidden] { display: none; }
.fd-pick { display: inline-flex; flex-direction: column; gap: 4px; }
.fd-pick select { min-width: 11em; }
.fd-pick-sort { display: none; }
.fd-count { margin: 0 0 var(--s-2); color: var(--ink-2); font-size: var(--fs-note); }
.fd-empty { margin: var(--s-3) 0 0; }
table.fd-table { font-size: var(--fs-note); font-variant-numeric: normal; }
table.fd-table th { vertical-align: bottom; }
table.fd-table td { line-height: 1.45; }
table.fd-table tr[hidden] { display: none; }
.fd-sortable th[data-sort-key] { padding: 0; }
.fd-sort { display: inline-flex; align-items: center; gap: 6px; width: 100%; padding: 10px 12px 8px; border: 0; background: none; color: inherit; font: inherit; letter-spacing: inherit; text-transform: inherit; text-align: left; white-space: nowrap; cursor: pointer; }
.fd-table th.num .fd-sort { justify-content: flex-end; }
.fd-sort::after { content: ""; flex: none; width: 0; height: 0; border-left: 4px solid transparent; border-right: 4px solid transparent; border-top: 5px solid currentColor; opacity: 0.3; }
.fd-sort:hover, .fd-table th[aria-sort] .fd-sort { color: var(--ink); background: var(--row-hover); }
.fd-table th[aria-sort] .fd-sort::after { opacity: 1; }
.fd-table th[aria-sort="ascending"] .fd-sort::after { transform: rotate(180deg); }
.fd-date { width: 7.4em; white-space: nowrap; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); }
.fd-undated { font-style: italic; }
.fd-project { min-width: 9.5em; }
.fd-pname { font-weight: 700; }
.fd-project .pf-link { margin-left: 6px; }
.fd-org { display: block; margin-top: 1px; color: var(--ink-2); font-size: var(--fs-note); }
.fd-round { min-width: 8em; }
/* the types' inks are those of the chart of disclosed funding (ROUND_FILLS in src/record-charts.mjs) */
.fd-rt-seed { --tag: var(--lapis); }
.fd-rt-series-a { --tag: var(--slate); }
.fd-rt-series-b { --tag: var(--ochre); }
.fd-rt-strategic { --tag: var(--plum); }
.fd-rt-token-sale { --tag: var(--vermilion); }
.fd-rt-grant { --tag: var(--moss); }
.fd-rt-other { --tag: var(--ink-2); }
.fd-rt-other::before { background: transparent; }
.fd-rname { display: block; margin-top: 3px; color: var(--ink-2); font-size: var(--fs-note); }
.fd-amt { font-weight: 700; font-variant-numeric: tabular-nums; }
.fd-none { color: var(--ink-2); font-weight: 400; }
.fd-lead { min-width: 8.5em; }
.fd-inv { min-width: 13em; }
.fd-src { min-width: 10.5em; }
.fd-srcs { list-style: none; margin: 0; padding: 0; }
.fd-srcs li { margin: 0 0 2px; }
.fd-srcs a { overflow-wrap: anywhere; }
.fd-src-foot { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 12px; margin-top: 3px; font-size: var(--fs-note); }
.fd-conf { white-space: nowrap; }
.fd-note > summary, .fd-more > summary { color: var(--ink); font-size: var(--fs-note); }
.fd-note[open] { flex-basis: 100%; }
.fd-note p { margin: 4px 0 2px; max-width: 62ch; color: var(--ink); font-size: var(--fs-note); line-height: 1.5; }
.fd-more { margin-top: 3px; }
.fd-more[open] > summary { margin-bottom: 2px; }
.fd-types dt { gap: 10px; }
.fd-type-n { font-family: var(--font-label); font-size: var(--fs-label); font-weight: 400; color: var(--ink-2); }
.fd-inv-table td.num, .fd-tvl-table td.num { white-space: nowrap; }
.fd-inv-name { font-weight: 700; }
.fd-inv-projects { font-size: var(--fs-note); }
@media (max-width: 900px) {
  .fd-pick-sort { display: inline-flex; }
  table.fd-table thead { position: absolute; left: -9999px; }
  table.fd-table, table.fd-table tbody, table.fd-table td { display: block; width: auto; min-width: 0; }
  table.fd-table tr { display: flex; flex-direction: column; gap: 3px; padding: var(--s-3) 0; border-bottom: 1px solid var(--rule); }
  table.fd-table tr[hidden] { display: none; }
  table.fd-table td { padding: 0; border: 0; text-align: left; }
  table.fd-table td.fd-project { order: -1; font-size: var(--fs-small); }
  table.fd-table td[data-label]::before { content: attr(data-label) ": "; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); }
  .fd-date { color: var(--ink); }
  .fd-round .fd-rname { display: inline; margin: 0 0 0 8px; }
  .fd-srcs, .fd-srcs li { display: inline; }
  .fd-srcs li + li::before { content: "; "; }
}
@media (max-width: 640px) {
  .fd-pick { flex: 1 1 9em; }
  .fd-pick select { min-width: 0; width: 100%; }
}

/* ---- [protocols, chains and wallets] Watchlist (/watchlist/): one ruled entry per project, grouped ---- */
.wl-toc-n { margin-left: auto; padding-left: 12px; font-family: var(--font-label); font-size: var(--fs-label); color: var(--ink-2); }
.wl-reasons { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: var(--s-7); margin: 0; border-top: 1px solid var(--ink); }
.wl-reasons > div { padding: var(--s-3) 0; border-bottom: 1px solid var(--rule); }
.wl-reasons dt { font-weight: 700; }
.wl-reasons dd { margin: 3px 0 0; color: var(--ink-2); font-size: var(--fs-small); line-height: 1.55; }
.wl-count { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; color: var(--ink-2); }
.wl-cards { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--s-6) var(--col-gap); }
.wl-card { display: flex; flex-direction: column; gap: var(--s-3); min-width: 0; padding: var(--s-3) 0 0; border-top: 1px solid var(--ink); scroll-margin-top: var(--s-4); }
.wl-card:target { background: var(--target); outline: 10px solid var(--target); }
.wl-card-head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 6px 12px; }
.wl-card-head h3 { margin: 0; font-family: var(--font-display); font-size: 1.75rem; font-weight: 400; line-height: 1.1; }
.status.wl-st-mainnet { --tag: var(--lapis); }
.status.wl-st-testnet { --tag: var(--vermilion); }
.status.wl-st-testnet::before { border-radius: 0; width: 6px; height: 6px; transform: rotate(45deg); }
.status.wl-st-research { --tag: var(--ink-2); }
.status.wl-st-research::before { background: transparent; border-style: dashed; border-width: 1px; }
.wl-summary { margin: 0; font-size: var(--fs-small); line-height: 1.6; }
.wl-hidden { padding-left: var(--s-3); border-left: 3px solid var(--moss); }
.wl-hidden h4 { display: flex; align-items: center; margin: 0 0 4px; }
.wl-hidden p { margin: 0; font-size: var(--fs-small); line-height: 1.55; }
.wl-facts { display: grid; gap: var(--s-2); margin: 0; }
.wl-facts dd { margin: 2px 0 0; font-size: var(--fs-small); line-height: 1.55; }
.wl-facts time { margin-right: 4px; font-family: var(--font-label); font-size: var(--fs-label); white-space: nowrap; }
.wl-onsite { margin: 0; padding: var(--s-2) 0 0; border-top: 1px dashed var(--rule-2); font-size: var(--fs-note); line-height: 1.5; }
.wl-onsite-h { display: block; margin-bottom: 2px; }
.wl-foot { margin-top: auto; padding-top: var(--s-2); border-top: 1px solid var(--rule); }
.wl-foot-row { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 6px 14px; }
.wl-site { display: inline-flex; align-items: baseline; gap: 8px; font-weight: 700; }
.wl-site .src-host { font-weight: 400; }
.wl-meta { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; color: var(--ink-2); }
.wl-links { display: inline-flex; flex-wrap: wrap; align-items: baseline; gap: 6px 14px; }
@media (max-width: 960px) {
  .wl-reasons { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 760px) {
  .wl-cards { grid-template-columns: minmax(0, 1fr); }
}

/* ---- [protocols, chains and wallets] Bitcoin privacy on /protocols/ ---- */
.btc-apart { max-width: 96ch; margin: 0 0 6px; padding-left: var(--s-4); border-left: 3px solid var(--ink); font-size: var(--fs-small); line-height: 1.6; }
.btc-apart h3 { margin: 0 0 6px; }
.btc-apart p { margin: 0; }
.btc-liquid { margin-top: var(--s-5); padding-top: var(--s-4); border-top: 1px solid var(--rule-2); scroll-margin-top: var(--s-4); }
.btc-chart-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px 12px; flex-wrap: wrap; margin-bottom: 4px; }
.btc-chart-head h3 { margin: 0; font-family: var(--font-display); font-size: 1.75rem; font-weight: 400; line-height: 1.15; }
.btc-liquid .pf-stats { margin: var(--s-2) 0 var(--s-3); }
.btc-chart { width: 100%; }
/* the Liquid chart keeps the room of a drawn chart with a one-line legend while web/bitcoin.js loads (as .chart does),
   so the page does not grow when it is drawn; none without script, where the box holds a line of text */
.js .btc-chart:not(.pr-chart) { min-height: calc(320px + 2.75rem); }
@media (max-width: 599px) {
  .js .btc-chart:not(.pr-chart) { min-height: calc(240px + 2.75rem); }
}
.btc-chart > .note { margin: 0; }
.btc-chart-off { display: none; }
.btc-asof, .btc-chart-note { max-width: 96ch; line-height: 1.55; }
.btc-h { display: flex; align-items: baseline; gap: 10px; margin: var(--s-7) 0 4px; font-family: var(--font-display); font-size: 1.875rem; font-weight: 400; line-height: 1.15; scroll-margin-top: var(--s-4); }
/* the net pegs each month (divergingBars) under the Liquid chart */
.btc-liquid .btc-sub { margin: var(--s-6) 0 var(--s-2); font-family: var(--font-display); font-size: 1.375rem; font-weight: 400; line-height: 1.2; }
.btc-h .n { font-family: var(--font-label); font-size: var(--fs-label); color: var(--ink-2); }
.btc-group-intro { margin: 0 0 var(--s-4); max-width: 78ch; color: var(--ink-2); font-size: var(--fs-small); line-height: 1.55; }
.btc-cards { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--s-6) var(--col-gap); align-items: start; }
.btc-card { display: flex; flex-direction: column; gap: var(--s-2); min-width: 0; padding: var(--s-3) 0 0; border-top: 1px solid var(--ink); overflow-wrap: break-word; scroll-margin-top: var(--s-4); }
.btc-card:target { background: var(--target); outline: 10px solid var(--target); }
.btc-card-head { display: flex; align-items: baseline; justify-content: space-between; gap: 6px 12px; flex-wrap: wrap; }
.btc-card-head h4 { margin: 0; font-family: var(--font-display); font-size: 1.5rem; font-weight: 400; line-height: 1.15; }
.btc-badges { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 12px; margin: 0; }
.status-shut-down { --tag: var(--down); }
.status-archived { --tag: var(--ink-2); }
.btc-alert { --tag: var(--vermilion); white-space: normal; }
.btc-alert::before { border-radius: 0; }
.btc-kind { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 12px; margin: -4px 0 0; color: var(--ink-2); font-size: var(--fs-note); }
.btc-kind .btc-profile { margin-left: 0; }
.btc-site { font-size: var(--fs-note); }
.btc-status-note { margin: 0; font-size: var(--fs-small); line-height: 1.5; }
.btc-facts { display: grid; gap: var(--s-2); margin: 0; padding-top: var(--s-2); border-top: 1px solid var(--rule); }
.btc-facts > div + div { padding-top: var(--s-2); border-top: 1px solid var(--rule); }
.btc-facts dd { margin: 4px 0 0; font-size: var(--fs-small); line-height: 1.55; }
.btc-facts dd p { margin: 0 0 6px; }
.btc-facts dd > :last-child { margin-bottom: 0; }
.btc-sample { padding-left: var(--s-2); border-left: 2px solid var(--rule-2); font-variant-numeric: tabular-nums; }
.btc-api, .btc-none { color: var(--ink-2); font-size: var(--fs-note); }
.btc-incidents { list-style: none; margin: 0; padding: 0; }
.btc-incidents > li + li { margin-top: 6px; padding-top: 6px; border-top: 1px solid var(--rule); }
.btc-inc > summary { cursor: pointer; line-height: 1.5; }
.btc-inc > summary time { margin-right: 4px; font-family: var(--font-label); font-size: var(--fs-label); color: var(--ink-2); white-space: nowrap; }
.btc-inc > summary .ev { margin-right: 4px; }
.btc-inc[open] > summary { margin-bottom: 6px; }
.btc-inc > p { margin: 0 0 6px; }
.btc-inc .chg-src { margin: 0; }
.btc-more { padding-top: var(--s-2); border-top: 1px solid var(--rule); }
.btc-more > summary .n { color: var(--ink-2); font-variant-numeric: tabular-nums; }
.btc-more .srcs { margin-top: 6px; }
.btc-meta { margin: 0; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; color: var(--ink-2); }
@media (max-width: 760px) {
  .btc-cards { grid-template-columns: minmax(0, 1fr); }
}

/* ---- [timeline, legal, incidents and funding] Calendar (/calendar/) and the overview's events block ---- */
/* the types' inks are those of the picture of the months ahead (CALENDAR_FILLS in src/record-charts.mjs) */
.cal-t-regulation { --tag: var(--moss); }
.cal-t-standards { --tag: var(--slate); }
.cal-t-court, .cal-t-sanctions { --tag: var(--plum); }
.cal-t-protocol { --tag: var(--lapis); }
.cal-t-market { --tag: var(--ochre); }
.cal-t-incident { --tag: var(--vermilion); }
/* under the picture of the months ahead, the next dates with their countdowns: a ruled row, each cell a link */
.cal-soon-h { grid-column: body-start / margin-end; margin: var(--s-6) 0 var(--s-2); }
.cal-soon { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0 var(--col-gap); }
.cal-soon > li { min-width: 0; border-top: 1px solid var(--ink); }
.cal-soon-a { display: flex; flex-direction: column; gap: 6px; height: 100%; padding: var(--s-3) 0 var(--s-4); color: var(--ink); text-decoration: none; background-position: 0 100%; background-size: 0 100%; }
.cal-soon-a:hover { background-size: 100% 100%; color: var(--on-highlight); }
.cal-soon .countdown { font-size: var(--fs-label-2); line-height: 1.1; white-space: normal; }
.cal-soon time { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); }
.cal-soon-t { font-family: var(--font-display); font-size: 1.1875rem; line-height: 1.22; overflow-wrap: break-word; }
@media (max-width: 960px) {
  .cal-soon { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 560px) {
  .cal-soon { grid-template-columns: minmax(0, 1fr); }
  .cal-soon > li + li { border-top-color: var(--rule); }
}
.cal-c { --tag: var(--ink); }
.cal-c-fixed::before { background: var(--tag); }
.cal-c-expected::before { background: linear-gradient(90deg, var(--tag) 50%, transparent 50%); }
.cal-c-targeted::before { background: transparent; border-style: dashed; border-width: 1px; }
.event-cert { --tag: var(--ink-2); color: var(--ink-2); }
.event-cert.cal-c-expected::before { background: linear-gradient(90deg, var(--tag) 50%, transparent 50%); }
.event-cert.cal-c-targeted::before { background: transparent; border-style: dashed; border-width: 1px; }
.cal-next-when { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 12px; margin: 2px 0 6px; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); }
.cal-next-when .countdown { font-size: var(--fs-label-2); }
.cal-next-title { margin: 0 0 var(--s-2); font-family: var(--font-display); font-size: 1.625rem; font-weight: 400; line-height: 1.2; }
.cal-next-title a { color: var(--ink); }
.cal-next .cal-badges { margin: 0; }
.cal-jump ul { list-style: none; margin: 0 0 var(--s-5); padding: 0 0 var(--s-2); display: flex; flex-wrap: wrap; gap: 4px var(--s-4); border-bottom: 1px solid var(--rule); }
.cal-jump a { display: inline-flex; align-items: baseline; gap: 6px; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; text-decoration: none; white-space: nowrap; }
.cal-jump .n { color: var(--ink-2); }
.cal-months { display: flex; flex-direction: column; gap: var(--s-6); }
.cal-month { scroll-margin-top: var(--s-4); }
.cal-month-h { display: flex; align-items: baseline; gap: 12px; margin: 0; padding-bottom: var(--s-2); border-bottom: 1px solid var(--ink); font-family: var(--font-display); font-size: 1.75rem; font-weight: 400; line-height: 1.1; color: var(--ink); }
.cal-month-h .n { font-family: var(--font-label); font-size: var(--fs-label); font-weight: 400; color: var(--ink-2); }
.cal-list { list-style: none; margin: 0; padding: 0; }
.cal-ev { display: grid; grid-template-columns: 7rem minmax(0, 1fr); gap: 4px var(--s-5); padding: var(--s-4) 0; border-bottom: 1px solid var(--rule); scroll-margin-top: var(--s-4); }
.cal-when { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; }
.cal-tile { display: flex; flex-direction: column; align-items: flex-start; line-height: 1; }
.cal-d { font-family: var(--font-display-35); font-size: 3.25rem; font-weight: 400; line-height: 0.9; font-variant-numeric: lining-nums; }
.cal-m { margin-top: 4px; color: var(--ink); }
.cal-range { font-family: var(--font-label); font-size: var(--fs-label); color: var(--ink-2); line-height: 1.3; white-space: nowrap; }
.cal-when .countdown { line-height: 1.3; white-space: normal; }
.cal-body { min-width: 0; font-size: var(--fs-small); line-height: 1.6; }
.cal-body > p { margin: 0 0 6px; max-width: 92ch; }
.cal-badges { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 14px; }
.cal-where { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); }
.cal-title { margin: 4px 0 6px; font-family: var(--font-display); font-size: 1.4375rem; font-weight: 400; line-height: 1.2; }
.cal-rules { font-size: var(--fs-note); }
.cal-ev:target, .cal-past > .chg:target { background: var(--target); }
.cal-past > .chg { scroll-margin-top: var(--s-4); }
.cal-past-when { display: flex; flex-direction: column; gap: 2px; }
.cal-past .cal-title { margin: 2px 0 4px; font-size: 1.1875rem; }
.cal-defs dt .ev { font-weight: 400; }
.cal-ics { margin-top: 6px; }
@media (max-width: 640px) {
  .cal-ev { grid-template-columns: 4.6rem minmax(0, 1fr); gap: 4px var(--s-3); }
  .cal-d { font-size: 2.6rem; }
}

/* ---- [protocols, chains and wallets] Wallets and tools (/wallets/): each entry a <tbody>, its row then a row of detail; cards below 1140px ---- */
/* the matrix of what each entry supports (walletMatrix) and its keys, one per group of columns */
.ck-heat.wl-matrix { max-width: 980px; }
.wl-mx-keys { display: flex; flex-wrap: wrap; gap: var(--s-3) var(--s-6); margin-top: var(--s-3); }
.wl-mx-key .ck-legend { margin-top: 4px; gap: 4px 14px; }
.wl-mx-h { margin: 0; padding-bottom: 2px; border-bottom: 1px solid var(--rule); color: var(--ink-2); font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; }
/* the header graphic: one marker per entry or project, by group (src/unit-rows.mjs, also on /watchlist/) */
.head-art > figure.ck-unitrows .ck-legend { margin-top: var(--s-2); gap: 4px 14px; font-size: var(--fs-note); }
.wl-warn { border-top: 3px solid var(--vermilion); }
.wl-warn p { margin: 0 0 var(--s-2); font-size: var(--fs-small); line-height: 1.55; }
.wl-warn p:last-child { margin-bottom: 0; }
.wl-warn .wl-warn-title { margin: 0 0 var(--s-2); font-weight: 700; line-height: 1.35; }
.wl-tools { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--s-3) var(--s-4); margin: 0 0 var(--s-4); padding-bottom: var(--s-3); border-bottom: 1px solid var(--rule); }
.wl-tools[hidden] { display: none; }
.wl-pick { display: flex; flex-direction: column; gap: 4px; }
.wl-pick select { min-width: 210px; max-width: 100%; }
.wl-empty { margin-top: 4px; }
.wl-reset { margin-left: 6px; }
table.wtable { font-size: var(--fs-note); font-variant-numeric: normal; }
.wtable thead th { padding: 10px 6px 8px; white-space: normal; vertical-align: bottom; line-height: 1.3; }
.wtable .wl-row > th, .wtable .wl-row > td { padding: var(--s-3) 5px 6px; border-bottom: 0; line-height: 1.45; }
.wtable .wl-row > th { text-align: left; vertical-align: top; font-size: var(--fs-small); }
.wtable tbody.wl-entry + tbody.wl-entry > tr:first-child > * { border-top: 1px solid var(--rule); }
.wtable tbody.wl-entry[hidden] { display: none; }
.wtable .wl-c-name { width: 7.6rem; }
.wtable .wl-c-cat { width: 5.4rem; }
.wtable .wl-c-coins { width: 5.1rem; }
.wtable .wl-c-plat { width: 4.9rem; }
.wtable .wl-c-os { width: 4.2rem; }
.wtable .wl-c-maint { width: 7rem; }
.wtable .wl-c-status { width: 7rem; }
.wtable .wl-c-rel { width: 5.6rem; }
.wtable .wl-c-src { width: 4.9rem; }
.wtable .wl-c-rb { width: 6.2rem; }
.wl-host { display: block; margin-top: 2px; font-family: var(--font-label); font-size: var(--fs-label); font-weight: 400; letter-spacing: 0.02em; color: var(--ink-2); line-height: 1.35; overflow-wrap: anywhere; }
.wl-name .pf-link { margin-left: 6px; }
.wl-unconf { --tag: var(--ink-2); color: var(--ink-2); margin-top: 5px; }
.wl-kind-wallet { --tag: var(--lapis); }
.wl-kind-route { --tag: var(--moss); }
.wl-kind-tool { --tag: var(--plum); }
.wl-chips, .wl-plats { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 2px 10px; }
.wl-chips li::before { display: none; }
.wl-plats li { --tag: var(--moss); }
.wl-plats li::before { width: 5px; height: 5px; border-radius: 0; }
.wl-none { color: var(--ink-2); font-style: italic; }
.wl-os-yes, .wl-os-no { font-weight: 700; }
.wl-os-unclear { color: var(--ink-2); font-style: italic; }
.wl-st { --tag: var(--ink-2); white-space: normal; }
.wl-st-active { --tag: var(--up); }
.wl-st-development { --tag: var(--lapis); }
.wl-st-halted { --tag: var(--vermilion); }
.wl-st-ended { --tag: var(--down); }
.wl-st-other::before { background: transparent; border-style: dashed; border-width: 1px; }
.wl-rb-yes { --tag: var(--up); }
.wl-rb-partial { --tag: var(--ochre); }
.wl-rb-no { --tag: var(--down); }
.wl-rb-unknown { --tag: var(--ink-2); color: var(--ink-2); }
.wl-rb-src { display: block; margin-top: 2px; font-size: var(--fs-note); }
.wl-gh { display: block; font-family: var(--font-label); font-size: var(--fs-label); color: var(--ink-2); }
.wl-legend { margin-top: var(--s-4); }
.wl-rel { white-space: nowrap; font-variant-numeric: tabular-nums; }
.wl-rel .wl-none { white-space: normal; }
.wl-srcs > summary { color: var(--ink); white-space: nowrap; }
.wl-srcs .srcs { margin-top: 6px; font-size: var(--fs-note); }
.wl-srcs .srcs li { padding: 3px 0; }
.wtable .wl-more > td { padding: 4px 6px var(--s-3); border-bottom: 0; color: var(--ink-2); font-size: var(--fs-note); line-height: 1.5; }
.wl-more p { margin: 0; max-width: 140ch; }
.wl-more p + p { margin-top: 3px; }
.wl-lbl { margin-right: 6px; color: var(--ink); }
.wl-checked { white-space: nowrap; }
.wl-more-d > summary { display: none; }
.wtable tbody tr:hover > * { background: none; }
@media (max-width: 1140px) {
  table.wtable { font-size: var(--fs-small); }
  .wtable thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .wtable, .wtable tbody, .wtable tr, .wtable .wl-row > th, .wtable td { display: block; width: auto; }
  .wtable tbody.wl-entry { padding: var(--s-4) 0 var(--s-3); border-top: 1px solid var(--ink); }
  .wtable tbody.wl-entry + tbody.wl-entry > tr:first-child > * { border-top: 0; }
  .wtable .wl-row { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); grid-auto-flow: row dense; gap: var(--s-3) var(--s-5); }
  .wtable .wl-row > th, .wtable .wl-row > td { padding: 0; }
  .wtable .wl-row > th, .wtable .wl-priv, .wtable .wl-src { grid-column: 1 / -1; }
  .wtable .wl-maint { grid-column: span 2; }
  .wtable .wl-row > th { font-family: var(--font-display); font-size: 1.5rem; font-weight: 400; }
  .wtable .wl-row > th .wl-host { display: inline; margin: 0 0 0 10px; }
  .wtable td[data-label]::before { content: attr(data-label); display: block; margin-bottom: 3px; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); }
  .wtable td.wl-src::before { content: none; }
  .wtable .wl-more > td { padding: var(--s-3) 0 0; }
}
@media (max-width: 960px) {
  .wtable .wl-row { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .wtable .wl-maint { grid-column: auto; }
  .wtable .wl-src { grid-column: span 2; }
}
@media (max-width: 640px) {
  .wtable .wl-row { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--s-3) var(--s-4); }
  .wtable .wl-maint, .wtable .wl-src { grid-column: 1 / -1; }
  .wtable .wl-row > th .wl-host { display: block; margin: 2px 0 0; }
  .wl-more-d > summary { display: list-item; color: var(--ink); font-size: var(--fs-note); }
  .wl-more-d[open] > summary { margin-bottom: 6px; }
  .wl-pick { flex: 1 1 160px; }
  .wl-pick select { min-width: 0; width: 100%; }
}

/* ---- [explainers, search and site pages] About (/about/) ---- */
.ab-note { margin: var(--s-3) 0 0; max-width: 60ch; color: var(--ink-2); line-height: 1.6; }
.ab-sub { display: block; margin-top: 2px; color: var(--ink-2); font-size: var(--fs-note); font-weight: 400; line-height: 1.45; }
.ab-nots { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--s-5) var(--col-gap); }
.ab-not { padding: var(--s-3) 0 0; border-top: 3px solid var(--ink); font-size: var(--fs-small); line-height: 1.6; }
.ab-not h3 { margin: 0 0 var(--s-2); }
.ab-not p { margin: 0; }
.fmt.ab-lic { flex: none; white-space: nowrap; }
.ab-contact { padding: var(--s-2) 0 var(--s-2) var(--s-3); border-left: 3px solid var(--ink); font-weight: 700; overflow-wrap: anywhere; }
.ab-contact-none { border-left-style: dashed; color: var(--ink-2); font-weight: 400; }
.ab-key { white-space: pre-wrap; word-break: break-all; }
.ab-steps code, #snapshots code { overflow-wrap: anywhere; }
@media (max-width: 760px) {
  .ab-nots { grid-template-columns: minmax(0, 1fr); }
}

/* ---- [overview and live] Overview (/): page rules beyond style.css section 6 (the opening and the ledger strip) ---- */
/* the live field (#dotfield; src/overview.mjs writes it, web/field.js keeps it live on a canvas, web/live-field.mjs
   draws both): the drawing fills the side of the opening, its axis, key and caption under it in the label face. The
   page's own drawing (two SVGs: the side on wide screens, a shorter strip on phones) steps aside once the canvas has
   drawn (.is-drawn). */
.dotfield { display: flex; flex-direction: column; gap: var(--s-2); min-width: 0; }
.df-art { position: relative; flex: 1 1 auto; min-height: 180px; }
.df-svg, .df-canvas { position: absolute; inset: 0; display: block; width: 100%; height: 100%; }
.df-art.is-drawn > .df-svg, .df-narrow, .df-narrow-t { display: none; }
.df-axis, .df-key, .df-cap { margin: 0; font-family: var(--font-label); font-size: var(--fs-label); line-height: 1.45; letter-spacing: var(--track-label); text-transform: uppercase; font-synthesis: none; }
.df-axis { display: flex; justify-content: space-between; padding-top: 5px; border-top: 1px solid var(--rule-2); color: var(--ink-2); }
.df-key { list-style: none; padding: 0; display: flex; flex-wrap: wrap; gap: 2px var(--s-4); color: var(--ink); }
.df-k { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.df-k::before { content: ""; flex: none; width: 7px; height: 7px; border-radius: 50%; background: var(--df-ink, var(--ink)); }
.df-k-v { color: var(--ink-2); font-variant-numeric: tabular-nums; }
.df-k-ink { --df-ink: var(--ink); }
.df-k-lapis { --df-ink: var(--lapis); }
.df-k-ochre { --df-ink: var(--ochre); }
.df-k-plum { --df-ink: var(--plum); }
.df-k-ink-2 { --df-ink: var(--ink-2); }
/* the caption keeps room for three lines (four on phones), so a change of its words never moves the drawing */
.df-cap { max-width: 64ch; min-height: calc(3 * 1.45 * var(--fs-label)); color: var(--ink-2); text-wrap: pretty; }
.df-more { color: var(--ink); white-space: nowrap; }
.df-more::after { content: " \2192"; }
/* beside the field the text keeps to its own column, so the lede never runs under the field's key and caption; the lede
   keeps its offset to the right only as far as the column has room for it */
@media (min-width: 761px) {
  .opening-text { grid-column: text-start / text-end; }
  .opening .lede { margin-left: clamp(0px, calc(100% - 34ch), min(22vw, 340px)); }
}
@media (max-width: 760px) {
  .dotfield { min-height: 0; margin-top: var(--s-5); }
  .df-art { flex: none; height: 132px; min-height: 0; }
  .df-wide, .df-wide-t, .df-key { display: none; }
  .df-narrow { display: block; }
  .df-narrow-t { display: inline; }
  .df-cap { min-height: calc(4 * 1.45 * var(--fs-label)); }
}

/* the ledger strip on the overview: each figure with a sparkline of its last 90 days under it (src/overview.mjs), the
   source last; the label of a figure with a page of its own links there */
.tiles[data-tiles] .tile-label { order: 1; }
.tiles[data-tiles] .tile-value { order: 2; }
.tiles[data-tiles] .tile-spark { order: 3; }
.tiles[data-tiles] .tile-sub { order: 4; }
.tiles[data-tiles] .tile-change { order: 5; }
.tiles[data-tiles] .tile-meta { order: 6; }
.tile-label a { color: var(--ink); text-decoration-color: var(--lapis); text-underline-offset: 0.3em; }
.tile-label a::after { content: " \2192"; }
.tile-spark { margin: var(--s-1) 0 var(--s-3); }
.tile-spark > svg.ck-spark { display: block; width: 100%; height: auto; max-height: 64px; }
.tile-spark-k { display: block; margin-top: 2px; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); }

/* "What moved in 30 days" (#moved, src/overview.mjs): the largest rises and the largest falls as two ledgers, each on a
   scale of its own written under its bars (a ruler from zero to a round top): the name, a bar from zero (rises in --up,
   falls in --down) and the change with its sign, triangle and percentage; the full list in the closed table under them.
   The same rows hold "Prices and deposits" (#flows) */
.ck-movers { max-width: 980px; }
.mv-panel + .mv-panel { margin-top: var(--s-5); }
.mv-h { margin: 0 0 var(--s-2); }
.mv-h-scale { color: var(--ink-2); }
.mv-list { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--ink); }
.mv-row, .mv-scale { display: grid; grid-template-columns: minmax(7rem, 12rem) minmax(0, 1fr) minmax(9rem, auto); align-items: center; column-gap: var(--s-4); }
.mv-row { padding: 7px 0; border-bottom: 1px solid var(--rule); font-size: var(--fs-small); line-height: 1.35; }
.mv-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mv-bar { display: block; min-width: 0; }
.mv-svg { display: block; overflow: visible; }
.mv-axis { stroke: var(--ink); stroke-width: 1px; shape-rendering: crispEdges; }
.mv-up { fill: var(--up); }
.mv-down { fill: var(--down); }
.mv-v { display: inline-flex; align-items: baseline; justify-content: flex-end; gap: 6px; font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
.mv-v::before { content: ""; flex: none; width: 9px; height: 8px; background: currentColor; transform: translateY(-1px); }
.mv-v.up::before { clip-path: polygon(50% 0, 100% 100%, 0 100%); }
.mv-v.down::before { clip-path: polygon(0 0, 100% 0, 50% 100%); }
.mv-p { font-weight: 400; color: var(--ink-2); }
/* the panel's scale: a ruler under the bar column with 0, half and the top */
.mv-scale { margin: 0; }
.mv-ticks { grid-column: 2; position: relative; height: 24px; }
.mv-t { position: absolute; top: 9px; font-family: var(--font-label); font-size: var(--fs-label); line-height: 1; letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); white-space: nowrap; font-synthesis: none; }
.mv-t0 { left: 0; }
.mv-t1 { left: 50%; transform: translateX(-50%); }
.mv-t2 { right: 0; }
/* "Prices and deposits" (#flows): the same rows, the bars from a centre line on one percentage scale, the change and its
   two parts in words at the end */
.fl-row.is-total { border-bottom-color: var(--ink); }
.fl-v { display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: baseline; gap: 0 8px; min-width: 0; }
.fl-parts { color: var(--ink-2); font-variant-numeric: tabular-nums; }
/* every row of a list and its ruler share one grid (.mv-grid, the rows and the ruler as subgrids), so the bars have one
   zero and one scale whatever the length of the words beside them (without subgrid each row keeps its own grid) */
@media (min-width: 641px) {
  .mv-grid { display: grid; grid-template-columns: minmax(7rem, 12rem) minmax(0, 1fr) minmax(9rem, auto); column-gap: var(--s-4); }
  .mv-grid > .mv-list { display: grid; }
  .mv-grid > .mv-list, .mv-grid > .mv-scale, .mv-grid .mv-row { grid-column: 1 / -1; grid-template-columns: subgrid; }
}
@media (max-width: 640px) {
  .mv-row { grid-template-columns: minmax(0, 1fr) auto; row-gap: 4px; }
  .mv-bar { grid-column: 1 / -1; grid-row: 2; }
  .mv-scale { grid-template-columns: minmax(0, 1fr); }
  .mv-ticks { grid-column: 1; }
  .fl-row { grid-template-columns: minmax(0, 1fr); }
  .fl-row .mv-bar { grid-row: 3; }
  .fl-v { justify-content: flex-start; }
}

/* the figure of the privacy coins (#coins): a chart at a time, chosen in its head (web/app.js); without scripts every
   part shows */
.cv-views { display: flex; flex-wrap: wrap; gap: 2px var(--s-4); }
.cv-views[hidden], .panel > [data-view-of][hidden] { display: none; }
.cv-head { margin-top: var(--s-2); }
.cv-head h3 { margin: 0; font-family: var(--font-label); font-size: var(--fs-label); font-weight: 400; letter-spacing: var(--track-label); text-transform: uppercase; }
html:not(.js) .cv-head ~ .cv-head { margin-top: var(--s-6); }
.cv-basket { margin-top: var(--s-6); }

/* live ticker */
/* ---- [overview and live] The Live panel (/activity/, /live/): the live dot, a tag per chain, the filter and Pause, then the newest
   transactions in a ledger that scrolls inside the panel. Every colour is a token. ---- */
.acc-sec.tk > .panel-head { margin-bottom: var(--s-3); }
.acc-sec.tk > .panel-head h2 { display: flex; align-items: center; gap: 12px; font-variant-numeric: tabular-nums; }
.tk[data-tk-mode="live"] .tk-dot, .tk[data-tk-mode="poll"] .tk-dot { background: var(--vermilion); }
.tk[data-tk-mode="loading"] .tk-dot, .tk[data-tk-mode="reconnecting"] .tk-dot { background: transparent; border: 2px solid var(--ochre); }
.tk-pills { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 4px 16px; }
.tk-pills:empty { display: none; }
.tk-pill { --tag: var(--ink-2); }
.tk-pill-st { color: var(--ink-2); }
.tk-st-connected { --tag: var(--up); }
.tk-st-connected::before { background: var(--tag); }
.tk-st-lagging { --tag: var(--ochre); }
.tk-st-lagging::before { background: linear-gradient(90deg, var(--tag) 50%, transparent 50%); }
.tk-st-down { --tag: var(--down); }
.tk-st-down::before { border-radius: 0; background: var(--tag); }
.tk-tools { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--s-3) var(--s-5); margin: 0 0 var(--s-3); }
.tk-tools[hidden] { display: none; }
.tk-filter { display: flex; flex-wrap: wrap; gap: 4px var(--s-4); }
.tk-filter .sw { width: 8px; height: 8px; }
.tk-ctl { display: flex; align-items: center; gap: 12px; margin-left: auto; }
.tk-state { margin: 0; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); white-space: nowrap; }
.tk-pause[aria-pressed="true"] { background: var(--ink); color: var(--paper); }
.tk-list { list-style: none; margin: 0; padding: 0; max-height: 30rem; overflow-y: auto; border-top: 1px solid var(--ink); border-bottom: 1px solid var(--ink); }
.tk-list:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
.tk-row { display: grid; grid-template-columns: 4.6em 8.5em 6.8em minmax(0, 1fr) auto; align-items: baseline; column-gap: 12px; padding: 7px 0; border-top: 1px solid var(--rule); font-size: var(--fs-note); line-height: 1.45; }
.tk-row:first-child { border-top: 0; }
.tk-row[hidden] { display: none; }
.tk-row time { font-family: var(--font-label); font-size: var(--fs-label); color: var(--ink-2); white-space: nowrap; }
.tk-row .ev { justify-self: start; }
.tk-kind { white-space: nowrap; }
.tk-detail { min-width: 0; color: var(--ink-2); overflow-wrap: anywhere; }
.tk-hash { justify-self: end; font-family: var(--font-label); font-size: var(--fs-label); white-space: nowrap; }
.tk-a1 { --tag: var(--c1); }
.tk-a2 { --tag: var(--c2); }
.tk-a3 { --tag: var(--c3); }
.tk-a4 { --tag: var(--c4); }
.tk-muted { --tag: var(--ink-2); }
.tk-ink { --tag: var(--ink); }
.tk-slate { --tag: var(--slate); }
.tk-moss { --tag: var(--moss); }
@keyframes tk-in {
  from { opacity: 0; transform: translateY(-6px); }
  to { opacity: 1; transform: none; }
}
@keyframes tk-mark { from { opacity: 1; } to { opacity: 0; } }
/* a new row slides in under the marker pen, which fades (opacity only, on a layer of its own) */
.tk-new { position: relative; isolation: isolate; animation: tk-in 0.6s var(--ease-out); }
.tk-new::before { content: ""; position: absolute; inset: 0; z-index: -1; background: var(--row-hover); opacity: 0; pointer-events: none; animation: tk-mark 0.6s var(--ease-out); }
.tk-empty { margin: var(--s-3) 0 0; }
.tk-nojs, .tk-note, .tk-src { max-width: 96ch; line-height: 1.55; }
@media (prefers-reduced-motion: reduce) {
  .tk[data-tk-mode] .tk-dot, .tk-new { animation: none; }
  .tk-new::before { animation: none; }
}
@media (max-width: 640px) {
  .tk-ctl { margin-left: 0; }
  .tk-list { max-height: 26rem; }
  .tk-row { grid-template-columns: auto auto minmax(0, 1fr); row-gap: 3px; padding: 8px 0; }
  .tk-detail { grid-column: 1 / 3; }
}

/* ---- [timeline, legal, incidents and funding] Legal cases (/legal-cases/): open cases lapis, investigations dashed, concluded ones ink, ended ones rings ---- */
.status.lg-st-ongoing, .status.lg-st-convicted { --tag: var(--lapis); }
.status.lg-st-appeal-pending { --tag: var(--lapis); }
.status.lg-st-appeal-pending::before { background: linear-gradient(90deg, var(--tag) 50%, transparent 50%); }
.status.lg-st-investigation { --tag: var(--plum); }
.status.lg-st-investigation::before { background: transparent; border-style: dashed; border-width: 1px; }
.status.lg-st-sentenced, .status.lg-st-acquitted, .status.lg-st-decided, .status.lg-st-settled { --tag: var(--ink); }
.status.lg-st-sentenced::before, .status.lg-st-acquitted::before, .status.lg-st-decided::before, .status.lg-st-settled::before { border-radius: 0; }
.status.lg-st-dismissed, .status.lg-st-closed { --tag: var(--ink-2); color: var(--ink-2); }
.status.lg-st-dismissed::before, .status.lg-st-closed::before { background: transparent; }
.lg-k-criminal { --tag: var(--plum); }
.lg-k-civil { --tag: var(--lapis); }
.lg-k-administrative { --tag: var(--moss); }
.lg-table td { vertical-align: top; }
.lg-name a { font-weight: 700; }
.lg-proj { display: block; color: var(--ink-2); font-size: var(--fs-note); }
.lg-date { white-space: nowrap; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; }
.lg-none { color: var(--ink-2); }
.lg-cases { display: grid; gap: var(--s-7); }
.lg-case { min-width: 0; padding: var(--s-3) 0 0; border-top: 3px solid var(--ink); overflow-wrap: break-word; scroll-margin-top: var(--s-4); }
.lg-case:target { background: var(--target); outline: 10px solid var(--target); }
.lg-case-head h3 { margin: var(--s-2) 0 2px; font-family: var(--font-display); font-size: 2rem; font-weight: 400; line-height: 1.08; letter-spacing: -0.01em; }
.lg-badges { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 14px; margin: 0; }
.lg-sub { margin: 0; color: var(--ink-2); font-size: var(--fs-small); }
.lg-note { margin: var(--s-3) 0; max-width: 96ch; line-height: 1.55; }
.lg-facts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 var(--s-6); margin: 0 0 var(--s-4); font-size: var(--fs-small); line-height: 1.55; }
.lg-facts > div { padding: var(--s-2) 0; border-top: 1px solid var(--rule); }
.lg-facts dd { margin: 3px 0 0; }
.lg-cols { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--s-2) var(--s-6); font-size: var(--fs-small); line-height: 1.5; }
.lg-h { margin: 6px 0; }
.lg-history { list-style: none; margin: 0 0 var(--s-2); padding: 0; border-top: 1px solid var(--ink); }
.lg-history li { display: grid; grid-template-columns: 7.2em minmax(0, 1fr); gap: 10px; padding: 6px 0; border-bottom: 1px solid var(--rule); }
.lg-history time { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); white-space: nowrap; padding-top: 3px; }
.lg-refs { color: var(--ink-2); font-size: 0.85em; white-space: nowrap; }
.lg-refs a { text-decoration: none; }
.lg-sources { margin: 0 0 var(--s-2); padding-left: 1.6em; }
.lg-sources li { padding: 4px 0; }
.lg-sources li:target { background: var(--target); }
.lg-unconf { margin: 4px 0 var(--s-2); padding-left: var(--s-3); border-left: 2px dashed var(--rule-2); font-size: var(--fs-small); }
.lg-unconf ul { margin: 0; padding-left: 1.2em; }
.lg-cal { margin-left: 4px; white-space: nowrap; }
.lg-case .chg-src { margin: var(--s-2) 0 0; }
/* the cases through time (swimlanes, src/record-charts.mjs) and the key to its stages under How cases are tracked;
   a lane's status, at its right end, keeps a halo of paper where it meets today's rule */
.lg-lanes .ck-lane > text.ck-lb { paint-order: stroke; stroke: var(--paper); stroke-width: 3px; stroke-linejoin: round; }
.lg-defs dt .ck-sw { align-self: center; }
@media (max-width: 760px) {
  .lg-facts, .lg-cols { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 640px) {
  .lg-history li { grid-template-columns: minmax(0, 1fr); gap: 2px; }
  .lg-date { white-space: normal; }
}

/* ---- [timeline, legal, incidents and funding] Incidents (/incidents/) and Audits (/audits/): the Funding page's parts, with types and severities ---- */
/* the types' inks are those of their families on the pictures (INCIDENT_FAMILIES in src/record-charts.mjs): funds
   taken vermilion, cryptographic flaws lapis, network and governance attacks plum, outages ochre, the rest ink-2 */
.ia-type { --tag: var(--ink-2); }
.ia-type-exploit, .ia-type-rug { --tag: var(--vermilion); }
.ia-type-exploit::before, .ia-type-rug::before, .ia-type-51-percent-attack::before { border-radius: 0; }
.ia-type-cryptographic-flaw { --tag: var(--lapis); }
.ia-type-governance-attack, .ia-type-51-percent-attack { --tag: var(--plum); }
.ia-type-outage { --tag: var(--ochre); }
.ia-type-outage::before { background: linear-gradient(90deg, var(--tag) 50%, transparent 50%); }
.ia-type-sanction, .ia-type-shutdown, .ia-type-other { --tag: var(--ink-2); }
.ia-type-shutdown::before, .ia-type-other::before { background: transparent; }
/* the pictures above the tables: a year or a protocol chosen to narrow the table keeps the marker pen */
:is(.ia-bars, .ia-barlist, .ia-grid) a.ck-m[aria-current="true"] > .ck-hit { fill: var(--target); }
table.ia-table td p { margin: 0 0 4px; }
table.ia-table td p:last-child { margin-bottom: 0; }
.ia-what { min-width: 18em; max-width: 46em; }
.ia-title { font-weight: 700; }
.ia-k { color: var(--ink-2); font-weight: 700; }
.ia-type-cell { white-space: nowrap; }
.ia-loss { min-width: 8em; }
.ia-rec { white-space: nowrap; }
.ia-sub { display: block; margin-top: 2px; color: var(--ink-2); font-size: var(--fs-note); }
.ia-loss .fd-note p { max-width: 36ch; }
.ia-auditor { min-width: 8em; font-weight: 700; }
.ia-scope { min-width: 14em; max-width: 34em; }
.ia-findings { min-width: 14em; max-width: 30em; }
/* what the sources say about the code deployed, under the findings of the audits that say it (5 of 112 on 13 Nov 2026),
   as a tag in the marker shapes of DEPLOYED_STATES (src/record-charts.mjs): dot, half dot, ring, dashed ring */
.ia-dep-line { margin: 6px 0 0; padding-top: 6px; border-top: 1px solid var(--rule); }
.ia-dep-k { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); }
.ia-dep { white-space: nowrap; }
.ia-dep-yes, .ia-dep-partly { --tag: var(--lapis); }
.ia-dep-no { --tag: var(--vermilion); }
.ia-dep-not-stated { --tag: var(--ink-2); color: var(--ink-2); }
.ia-report { margin: 0 0 4px; font-weight: 700; }
.ia-sevs { display: flex; flex-wrap: wrap; gap: 2px 12px; list-style: none; margin: 0 0 6px; padding: 0; }
.ia-sev { --tag: var(--ink-2); }
.ia-sev-n { font-weight: 400; }
.ia-sev-critical { --tag: var(--down); }
.ia-sev-high { --tag: var(--vermilion); }
.ia-sev-medium { --tag: var(--ochre); }
.ia-sev-medium::before { background: linear-gradient(90deg, var(--tag) 50%, transparent 50%); }
.ia-sev-low, .ia-sev-informational { --tag: var(--ink-2); }
.ia-sev-low::before, .ia-sev-informational::before { background: transparent; }
.ia-sev-zero { color: var(--ink-2); }
@media (max-width: 900px) {
  .ia-what, .ia-scope, .ia-findings { max-width: none; }
  .ia-type-cell, .ia-rec { white-space: normal; }
  table.ia-table td.ia-what::before { content: none; }
}

/* ---- [timeline, legal, incidents and funding] Changes and the weekly digest: their pictures (/changes/, /this-week/, /this-week/archive/; src/record-charts.mjs) ----
   The changes by month follow the filter by kind under All changes, which is plain CSS: the kind chosen keeps its
   segments and its legend entry, the others step back. The figures table of the digest carries a line a figure. */
:root:has(#k-exchange:checked) .chg-bars :is(.ck-col, .ck-legend li)[data-k]:not([data-k="exchange"]),
:root:has(#k-rule:checked) .chg-bars :is(.ck-col, .ck-legend li)[data-k]:not([data-k="rule"]),
:root:has(#k-protocol:checked) .chg-bars :is(.ck-col, .ck-legend li)[data-k]:not([data-k="protocol"]),
:root:has(#k-listing:checked) .chg-bars :is(.ck-col, .ck-legend li)[data-k]:not([data-k="listing"]),
:root:has(#k-site:checked) .chg-bars :is(.ck-col, .ck-legend li)[data-k]:not([data-k="site"]) { opacity: 0.18; }
.wk-table td.wk-spark { min-width: 7.5rem; vertical-align: middle; }
.wk-table td.wk-spark svg.ck-spark { display: block; }
/* the archive's weeks while there are few of them: a narrower figure that its columns fill */
figure.ck.wk-few { max-width: 30rem; }

/* ---- [measures, supply and records] Network health (/network-health/): a ledger strip per coin, then its figures ---- */
.tiles.nh-tiles { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); margin: 4px 0 var(--s-5); border-top-width: 1px; }
.nh-tile { padding: var(--s-3) var(--s-3) var(--s-4); }
.nh-tile .tile-label { min-height: 0; color: var(--ink); }
.nh-tile .tile-value { font-size: clamp(1.4rem, 1.1rem + 0.9vw, 2rem); overflow-wrap: anywhere; white-space: normal; }
.nh-tile .tile-sub { font-size: var(--fs-note); color: var(--ink-2); line-height: 1.4; }
.nh-fig .note { font-size: var(--fs-note); }
.nh-facts dd { line-height: 1.55; }
.nh-src { white-space: nowrap; font-family: var(--font-label); font-size: var(--fs-label); }
.nh-src a { text-decoration: none; }
.nh-missing { margin: 0 0 var(--s-4); padding-left: 1.15em; font-size: var(--fs-small); line-height: 1.55; color: var(--ink-2); }
.nh-missing li { margin: 0 0 var(--s-2); }
.nh-missing strong { color: var(--ink); }
/* the board: the seven coins by measure, the latest figure over a note and a sparkline of the last 90 days */
.nh-board-note { max-width: var(--measure); margin: calc(-1 * var(--s-2)) 0 var(--s-4); }
.nh-board td, .nh-board th { vertical-align: top; }
.nh-board td { min-width: 9.5em; }
.nh-board tbody th[scope="row"] { min-width: 7em; }
.nh-bv { display: block; font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
.nh-bs { display: block; margin: 2px 0 6px; color: var(--ink-2); font-size: var(--fs-note); font-weight: 400; line-height: 1.35; }
.nh-board svg.ck-spark { display: block; }
.nh-bx { color: var(--ink-2); font-size: var(--fs-note); }
@media (max-width: 640px) {
  .tiles.nh-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .tiles.nh-tiles > .nh-tile { padding: var(--s-3) var(--s-2) var(--s-3) 0; border-top: 1px solid var(--rule-2); }
  .nh-board td { min-width: 0; padding-bottom: var(--s-2); }
  .nh-bv { display: inline; margin-right: 6px; }
  .nh-bs { display: inline; }
  .nh-board th[scope="row"] .nh-bs { margin-left: 8px; }
  .nh-board svg.ck-spark { margin-top: 4px; }
}

/* ---- [measures, supply and records] Private stablecoins (/stablecoins/) and the line under the overview's figures ---- */
@media (width > 640px) {
  .tiles.sc-tiles { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
.sc-overview { margin: var(--s-4) 0 0; font-size: var(--fs-small); }
.sc-chart-head { margin-bottom: 4px; }
.sc-chart-head .note { margin: 0; }
.sc-chart { min-height: 240px; width: 100%; margin: var(--s-2) 0 0; display: grid; place-items: center; color: var(--rule-2); background: var(--dot-1) 0 0 / var(--dot-1-size); }
.sc-chart > .note { margin: 0; padding: var(--s-4); max-width: 52ch; text-align: center; background: var(--paper); color: var(--ink-2); }
.sc-chart:has(.uplot) { display: block; background: none; }
.sc-days .table-wrap { max-width: 40rem; margin-top: var(--s-2); }
.sc-table tbody th[scope="row"] { white-space: nowrap; }
.sc-table tbody tr.sc-first:not(:first-child) > * { border-top: 1px solid var(--ink); }
.sc-cont { color: var(--ink-2); font-weight: 400; }
.sc-coins { list-style: none; margin: 0; padding: 0; }
.sc-coins li { margin: 0 0 3px; }
.sc-addr { display: block; white-space: nowrap; }
.sc-addr a, .sc-contracts a { font-family: var(--font-label); font-size: var(--fs-label); }
.sc-contracts > summary { color: var(--ink); font-size: var(--fs-note); white-space: nowrap; }
.sc-contracts ul { list-style: none; margin: 6px 0 0; padding: 0; font-size: var(--fs-note); }
.sc-contracts li { padding: 2px 0; }
.sc-when { font-family: var(--font-label); font-size: var(--fs-label); white-space: nowrap; }
.sc-block, .sc-stale { display: block; color: var(--ink-2); font-size: var(--fs-note); }
.sc-stale { color: var(--down); }
.sc-table tfoot th, .sc-table tfoot td { font-weight: 700; border-top: 1px solid var(--ink); border-bottom: 0; }
.sc-list { margin: 0; padding: 0 0 0 1.1rem; max-width: 80ch; }
.sc-list li { margin: 0 0 var(--s-2); line-height: 1.55; }
.sc-wl .status { margin: 0 6px; }
.sc-latest { display: block; margin-top: 2px; color: var(--ink-2); font-size: var(--fs-small); }
.sc-sources { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 var(--s-7); }
.sc-sources h3 { font-size: 1rem; margin: var(--s-4) 0 4px; }
@media (max-width: 760px) {
  .sc-sources { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 640px) {
  .sc-table tbody th[scope="row"], .sc-addr, .sc-contracts > summary, .sc-when { white-space: normal; }
  .sc-table tbody tr.sc-first:not(:first-child) > * { border-top: 0; }
  .sc-table tbody tr.sc-first:not(:first-child) { border-top: 1px solid var(--ink); }
  .sc-table tfoot td:empty { display: none; }
  .sc-table tfoot td { border-top: 0; }
  .sc-contracts li { overflow-wrap: anywhere; }
}

/* ---- [measures, supply and records] Supply (a new family) ---- */
/* /supply/: the ledger of the seven coins, the coin chart with its buttons, the next reductions and the pools */
.su-sub { display: block; margin-top: 2px; color: var(--ink-2); font-size: var(--fs-note); font-weight: 400; white-space: normal; }
.su-none { color: var(--ink-2); }
.su-table td { vertical-align: top; }
.su-table td.num { min-width: 7.5em; white-space: normal; }
.su-table .su-n, .su-table time { white-space: nowrap; }
.su-table td.su-rate .su-n { font-weight: 700; }
.su-table td.num .su-sub { font-variant-numeric: tabular-nums; }
.su-table tbody th[scope="row"] { min-width: 7.5em; }
.su-chart-head { align-items: flex-end; }
.su-chart-head .acc-intro { margin: 0; }
.su-coins[hidden] { display: none; }
.su-next { list-style: none; margin: 0 0 var(--s-4); padding: 0; max-width: 92ch; border-top: 1px solid var(--ink); }
.su-next li { padding: var(--s-3) 0; border-bottom: 1px solid var(--rule); line-height: 1.55; }
.su-next li.su-none-li { color: var(--ink-2); }
.su-next li.su-none-li strong { color: var(--ink); }
.su-next time { white-space: nowrap; }
.su-pools { max-width: 30rem; margin-top: var(--s-4); }
.su-pools tr.su-total > * { border-top: 1px solid var(--ink); font-weight: 700; }
.su-list { margin: 0; padding-left: 1.15em; max-width: 92ch; font-size: var(--fs-small); line-height: 1.6; color: var(--ink-2); }
.su-list li { margin: 0 0 var(--s-2); }
.su-list strong { color: var(--ink); }
.su-rules dd p { max-width: 92ch; }
.su-rules dd .srcs { margin-top: 4px; }
@media (max-width: 640px) {
  .su-table td.num { min-width: 0; }
  .su-table .su-sub { display: inline; margin: 0 0 0 6px; }
}

/* ---- [activity and anonymity] Cost of privacy (/cost/): the Anonymity sets page's parts, with the fee column ---- */
.cost-table td.cost-usd { font-weight: 700; white-space: nowrap; }
.cost-table td.num { white-space: nowrap; }
.cost-table td .anon-sub { white-space: normal; font-weight: 400; }
.cost-table td.cost-usd .anon-sub { min-width: 9em; }
.cost-extras td { vertical-align: top; }
.cost-extras .srcs { margin: 0; }
.cost-basis { padding-top: var(--s-2); border-top: 1px solid var(--rule); }
.cost-basis > summary { font-weight: 700; }
.cost-basis[open] > summary { margin-bottom: 6px; }
.cost-basis dd a { overflow-wrap: anywhere; }
@media (max-width: 760px) {
  .cost-table td.num, .cost-table td.cost-usd { white-space: normal; }
}

/* ---- [measures, supply and records] Developer activity (/developer-activity/) ---- */
/* the coverage after a heading while not every repository has been read ("12 of 49 repositories so far") */
.dv-cover { color: var(--ink-2); }
/* each project's weekly commits as a kit sparkline in the ledger; the note on their scale sits above the table */
.dv-table td.dv-spark { width: 128px; min-width: 104px; vertical-align: middle; }
table.dv-table td.num .dv-none { white-space: normal; }
.dv-spark svg.ck-spark { display: block; }
.dv-weeks-note { max-width: var(--measure); margin: calc(-1 * var(--s-2)) 0 var(--s-4); }
/* "Every project" fits its column from 960px up without scrolling sideways (13 Nov 2026; it measured 1414px in 1176):
   the repositories sit under the project's name in the first column, the headings wrap at their spaces, the cells
   are 8px apart at the sides, and nothing breaks inside a word (a repository's name may break after its slash or at a
   hyphen, a date not at all) */
table.dv-table th, table.dv-table th.num { white-space: normal; }
table.dv-table time { white-space: nowrap; }
@media (min-width: 641px) {
  table.dv-table th, table.dv-table td { padding-left: 8px; padding-right: 8px; }
  table.dv-table tr > :first-child { padding-left: 0; }
  table.dv-table tr > :last-child { padding-right: 0; }
}
.dv-sort { all: unset; cursor: pointer; font: inherit; color: inherit; letter-spacing: inherit; text-transform: inherit; border-bottom: 1px dotted var(--ink-2); }
.dv-sort:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
.dv-table th[aria-sort="ascending"] .dv-sort::after { content: " \2191"; }
.dv-table th[aria-sort="descending"] .dv-sort::after { content: " \2193"; }
.dv-name { min-width: 11em; }
.dv-pname { font-weight: 700; }
.dv-name .pf-link { margin-left: 6px; }
.dv-group { display: block; margin-top: 2px; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); font-weight: 400; }
.dv-rp { margin-top: 6px; font-weight: 400; }
.dv-rp-l { display: none; }
.dv-repos { list-style: none; margin: 0; padding: 0; display: grid; gap: 2px; font-size: var(--fs-note); line-height: 1.4; }
.dv-flag { --tag: var(--ink-2); margin-left: 6px; color: var(--ink-2); }
.dv-flag-err::before { background: transparent; border-style: dashed; border-width: 1px; }
.dv-tag { display: block; font-family: var(--font-label); font-size: var(--fs-label); color: var(--ink-2); }
.dv-none { color: var(--ink-2); font-style: italic; }
/* on a phone (one block per project) the repositories are named as the other cells are */
@media (max-width: 640px) {
  .dv-rp-l { display: inline-block; min-width: 7.5em; margin-right: 8px; font-family: var(--font-label); font-size: var(--fs-label); font-weight: 400; letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); vertical-align: top; }
  .dv-rp .dv-repos { display: inline-grid; }
}

/* ---- [measures, supply and records] Cost of privacy: the kit charts on /cost/ (the page's tables keep their rules under "Cost of privacy" above) ---- */
.cost-lg { margin: 0 0 var(--s-3); }
#now > .ck-heat { margin-top: var(--s-6); }
#now > .table-wrap { margin-top: var(--s-6); }

/* ---- [measures, supply and records] Records (a new family) ---- */
/* /records/: a ledger per family of series, a record set in the last 30 days in bold, a sparkline per series with its
   high a vermilion dot and its low a ring; the recent records grouped by series at the top */
.rc-sub { display: block; margin-top: 2px; color: var(--ink-2); font-size: var(--fs-note); font-weight: 400; white-space: normal; }
.rc-none { color: var(--ink-2); }
.rc-v { white-space: nowrap; }
.rc-v.rc-fresh { font-weight: 700; }
.rc-pct { color: var(--ink-2); font-size: var(--fs-note); font-weight: 400; }
.rc-src { max-width: var(--measure); margin: calc(-1 * var(--s-2)) 0 var(--s-4); }
.rc-table td { vertical-align: top; }
.rc-table td.num { white-space: normal; min-width: 7.5em; }
.rc-table tbody th[scope="row"] { min-width: 11em; max-width: 20em; }
.rc-table td.rc-spark { width: 128px; vertical-align: middle; }
.rc-spark svg { display: block; }
.rc-items { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.rc-items li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 10px; }
.rc-k { min-width: 15em; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); }
.rc-items .rc-sub { display: inline; margin: 0; }
.rc-recent .rc-v { font-weight: 700; }
@media (max-width: 640px) {
  .rc-table td.num { min-width: 0; }
  .rc-table .rc-sub { display: inline; margin: 0 0 0 6px; }
  .rc-k { min-width: 0; }
}

/* ---- [explainers, search and site pages] Weekly digest (/this-week/, /this-week/archive/), the calendar file and the embed pages ---- */
.wk-note { display: block; white-space: normal; }
table.wk-table tbody th { font-weight: 700; }
table.wk-table td.up { color: var(--up); }
table.wk-table td.down { color: var(--down); }
.wk-list { list-style: none; margin: var(--s-2) 0 var(--s-3); padding: 0; display: grid; gap: 0; border-top: 1px solid var(--ink); }
.wk-list li { padding: 6px 0; border-bottom: 1px solid var(--rule); line-height: 1.5; }
.wk-list time { display: inline-block; min-width: 8.5em; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); }
.wk-list .ev { margin-right: 6px; }
.wk-days { list-style: none; margin: var(--s-2) 0; padding: 0; display: flex; flex-wrap: wrap; gap: 6px var(--s-4); font-size: var(--fs-note); color: var(--ink-2); }
.wk-day { color: var(--ink); font-weight: 700; }
.wk-lines { margin: var(--s-2) 0 0; padding-left: 1.2em; display: grid; gap: 6px; line-height: 1.55; max-width: 96ch; }
.embed-item { margin: 0 0 var(--s-4); min-width: 0; }
.embed-item-h { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin: 0 0 6px; }
.embed-item-h img { display: block; max-width: 100%; height: 20px; }
.embed-code { margin: 0; white-space: pre-wrap; overflow-wrap: anywhere; }
body.embed { background: var(--paper); margin: 0; }
.embed-main { padding: var(--s-3) var(--s-4) var(--s-2); max-width: none; border-top: 3px solid var(--ink); }
.embed-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px var(--s-4); margin: 0 0 var(--s-2); }
.embed-head h1 { margin: 0; font-size: 1.75rem; line-height: 1.1; }
.embed-head h1 a { color: var(--ink); text-decoration: none; }
.embed-head .seg { margin-left: auto; }
.embed-figure { margin: 0; font-variant-numeric: tabular-nums; }
.embed-figure strong { font-family: var(--font-display-35); font-size: 1.5rem; font-weight: 400; }
.embed-figure span { color: var(--ink-2); font-size: var(--fs-note); }
.embed-src { margin: var(--s-2) 0 0; font-size: var(--fs-note); }
.embed-main .chart { min-height: 0; }
@media (max-width: 640px) {
  .wk-list time { display: block; min-width: 0; }
  .embed-head .seg { margin-left: 0; }
}

/* ---- [access and rules] Access pages: the country table on /access/ and the pages per jurisdiction, exchange and route ---- */
.ctable { min-width: 920px; }
.ctable tbody th { white-space: normal; min-width: 9em; }
.ct-sub { display: block; margin-top: 2px; font-family: var(--font-label); font-size: var(--fs-label); font-weight: 400; letter-spacing: 0.02em; color: var(--ink-2); }
.ct-level { display: inline-flex; align-items: flex-start; gap: 8px; }
/* each level's dot centred on the first line of its name (the line's middle is 0.75em down at a leading of 1.5) */
.ct-level .sw { flex: none; margin-top: calc(0.75em - 4.5px); }
.ct-level .sw.lv-crypto-ban { margin-top: calc(0.75em - 5.5px); }
.ct-level .sw.lv-scheduled-ban, .ct-level .sw.lv-delisted-under-pressure { margin-top: calc(0.75em - 4px); }
.ct-level .sw.lv-no-restriction-found { margin-top: calc(0.75em - 3.5px); }
.ct-level .sw.lv-mixers-targeted { margin-top: calc(0.75em - 3px); }
.ct-span { color: var(--ink-2); }
.acc-links { list-style: none; margin: 0; padding: 0; columns: 4 11em; column-gap: var(--s-6); font-size: var(--fs-small); }
.acc-links li { break-inside: avoid; padding: 4px 0; border-bottom: 1px solid var(--rule); }
.acc-more { margin: var(--s-3) 0 0; font-size: var(--fs-small); }
.ct-head .mp-kicker { margin-bottom: var(--s-2); }
.ct-head .lede { max-width: 60ch; }
.ct-facts { display: grid; grid-template-columns: repeat(auto-fill, minmax(12em, 1fr)); gap: var(--s-2) var(--s-5); margin: 0 0 var(--s-4); padding: var(--s-3) 0; border-top: 1px solid var(--ink); border-bottom: 1px solid var(--rule); }
.ct-facts dd { margin: 2px 0 0; font-weight: 700; }
#rule > p, #rule > .srcs { max-width: 88ch; }
.xtable-exchange { min-width: 640px; }
.xtable-country { min-width: 780px; }
.ct-xs { display: grid; gap: 0; border-top: 1px solid var(--ink); }
.ct-x { padding: var(--s-3) 0; border-bottom: 1px solid var(--rule); font-size: var(--fs-small); line-height: 1.55; }
.ct-x-name { margin: 0 0 4px; font-weight: 700; }
.ct-x ul { margin: 0; padding-left: 1.1em; max-width: 92ch; }
.ct-x li { margin: 4px 0; }
.ct-x li .st { margin: 0 4px; }
.ct-wallets { columns: 2 22em; column-gap: var(--s-6); margin: 0; padding-left: 1.1em; font-size: var(--fs-small); }
.ct-wallets li { break-inside: avoid; margin: 4px 0; }
.xn-page { padding: 0; max-width: none; }
.xn-page > .xn-cell:first-child { border-top: 0; padding-top: 0; }
.xn-page .xn-cell { max-width: 92ch; }
/* an exchange's daily-check history (figure.ck.xd-grid, the kit's heat grid: one row per coin, one dot per day) */
.xd-fig { margin: 0; }
@media (max-width: 640px) {
  .ctable { min-width: 0; }
  .ctable td:not([data-label])::before { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-2); }
  .ctable td:not([data-label]):nth-child(2)::before { content: "Strongest rule: "; }
  .ctable td:not([data-label]):nth-child(3)::before { content: "Exchange listing: "; }
  .ctable td:not([data-label]):nth-child(4)::before { content: "Holding: "; }
  .ctable td:not([data-label]):nth-child(5)::before { content: "Mixers: "; }
  .ctable td:not([data-label]):nth-child(6)::before { content: "Self-hosted wallets: "; }
  .ctable td:not([data-label]):nth-child(7)::before { content: "In force from: "; }
  .ctable td:not([data-label]):nth-child(8)::before { content: "Confidence: "; }
  .ctable tbody th { border-bottom: 0; }
  .acc-links { columns: 2 9em; }
}
/* where privacy coins trade: each coin's total, its split between the exchanges (the kit's stackedBars), the share on
   exchanges restricting it (a ledger strip with a sparkline per figure) and the figures by exchange */
.xv-sum { list-style: none; margin: 0 0 var(--s-4); padding: var(--s-2) 0; display: flex; flex-wrap: wrap; gap: 4px var(--s-5); border-top: 1px solid var(--ink); border-bottom: 1px solid var(--rule); font-size: var(--fs-note); }
.xv-sum li { display: inline-flex; align-items: baseline; gap: 6px; }
.xv-sym { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); }
.xv-tot { color: var(--ink-2); }
.xv-share { margin: var(--s-3) 0 var(--s-3); }
.xv-share > .tile:first-child { padding-left: 0; }
.xv-share .tile-value { font-size: clamp(2rem, 13cqi, 3.5rem); }
.xv-spark { margin: var(--s-3) 0 0; }
.xv-spark svg.ck-spark { display: block; width: 100%; max-width: 200px; height: auto; }
.xv-ledger tr.xv-all th, .xv-ledger tr.xv-all td { border-top: 1px solid var(--ink); font-weight: 700; }
.xv-table { max-width: 760px; }
/* the lifelines of the five smaller coins on /access/, behind one summary */
.am-more { margin: var(--s-5) 0 0; border-top: 1px solid var(--ink); }
.am-more > summary { padding: var(--s-2) 0; font-weight: 700; cursor: pointer; }
.am-more > summary:hover { color: var(--ink); background: var(--row-hover); }
.am-more[open] > summary { margin-bottom: var(--s-3); }
.am-more > figure.ck + figure.ck { margin-top: var(--s-6); }
/* every lifeline figure in the body column, so that their time axes line up; the note sits beside the first */
#lifelines > .note + figure.ck, #lifelines > figure.ck + figure.ck { margin-top: var(--s-6); }
@media (min-width: 1100px) {
  #lifelines > figure.ck { grid-column: body-start / body-end; }
}
/* a jurisdiction's header graphic: its seal, then its dots lit on its part of the world */
.ct-art { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: end; gap: var(--s-3); width: 100%; }
.ct-art > figure.am-loc { grid-column: 2; margin: 0; }
.ct-art > figure.am-loc svg { display: block; width: 100%; height: auto; max-height: var(--head-art-h); overflow: hidden; }
.ct-art > figure.am-loc:only-child { grid-column: 1 / -1; }
.am-loc .ck-land { stroke: color-mix(in srgb, var(--ink) 24%, transparent); }
.am-loc .am-lit .ck-cty { stroke: var(--ck-c, var(--vermilion)); }
.am-loc-ring { fill: none; stroke: var(--ink); stroke-width: 1.5px; vector-effect: non-scaling-stroke; }
.ct-art > svg.ct-seal { grid-column: 1; grid-row: 1; width: 56px; height: 56px; }
@media (max-width: 960px) {
  .ct-art > svg.ct-seal { width: 48px; height: 48px; }
}

/* ---- [explainers, search and site pages] Tools: Compare (/compare/), the filters by topic and the permalinks, the Glossary and Numbers explained ---- */
.cmp-form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--s-3) var(--s-4); margin: 4px 0 var(--s-4); padding-bottom: var(--s-3); border-bottom: 1px solid var(--rule); }
.cmp-form[hidden], [data-cmp-nojs][hidden] { display: none; }
.cmp-pick { display: grid; gap: 4px; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); }
.cmp-pick select { min-width: 12rem; max-width: 100%; font-family: var(--font-text); letter-spacing: 0; text-transform: none; }
.cmp-share { margin: 0 0 7px; font-size: var(--fs-note); }
.cmp-table { width: 100%; min-width: 36rem; table-layout: fixed; }
.cmp-table th, .cmp-table td { text-align: left; vertical-align: top; }
.cmp-table tbody th[scope="row"] { width: 10.5rem; font-family: var(--font-label); font-size: var(--fs-label); font-weight: 400; letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); }
.cmp-table thead th:first-child { width: 10.5rem; }
.cmp-table thead th a { font-family: var(--font-display); font-size: 1.5rem; letter-spacing: -0.01em; text-transform: none; }
.cmp-list { margin: 0; padding-left: 1.1em; }
.cmp-list li + li { margin-top: 5px; }
.cmp-access { padding-left: 0; list-style: none; }
.cmp-meta { display: block; margin-top: 2px; color: var(--ink-2); font-size: var(--fs-note); line-height: 1.45; }
.cmp-none { color: var(--ink-2); }
.cmp-fig { font-variant-numeric: tabular-nums; }
.cmp-st-listed { --tag: var(--lapis); }
.cmp-st-listed-restricted { --tag: var(--lapis); }
.cmp-st-delisted { --tag: var(--vermilion); }
.cmp-st-never-listed { --tag: var(--ink-2); color: var(--ink-2); }
.cmp-st-never-listed::before { background: transparent; }
.cmp-links { display: flex; flex-wrap: wrap; gap: 6px var(--s-4); margin: 0; padding: 0; list-style: none; }
@media (max-width: 640px) {
  .cmp-pick { flex: 1 1 100%; }
  .cmp-pick select { width: 100%; min-width: 0; }
  .cmp-table tbody th[scope="row"], .cmp-table thead th:first-child { width: 7.5rem; }
}
.tpc-tools { display: flex; flex-direction: column; gap: var(--s-2); margin: 0 0 var(--s-4); padding-bottom: var(--s-3); border-bottom: 1px solid var(--rule); }
.tpc-tools[hidden], .tpc-now[hidden], .chg-topic-count[hidden] { display: none; }
.tpc-row { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px var(--s-4); }
.tpc-h { min-width: 7.5rem; }
.tpc-now { display: flex; flex-wrap: wrap; align-items: center; gap: 6px var(--s-4); margin: 4px 0 0; font-size: var(--fs-note); }
.chg-topic-count { margin: calc(-1 * var(--s-2)) 0 var(--s-4); }
/* the permalink and copy button at the end of an entry's head line */
.plink { display: inline-flex; align-items: center; gap: 6px; margin-left: 4px; }
.plink-a { font-family: var(--font-label); font-size: var(--fs-label); color: var(--ink-2); text-decoration: none; }
.plink-a:hover, .plink-a:focus-visible { color: var(--on-highlight); }
.plink-copy { padding: 1px 6px; }
.plink-copy[hidden] { display: none; }
/* the glossary and Numbers explained */
.gl-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: var(--s-8); margin: 0; border-top: 1px solid var(--ink); }
.gl-list > div { padding: var(--s-3) 0; border-bottom: 1px solid var(--rule); scroll-margin-top: var(--s-4); }
.gl-list dt { font-family: var(--font-display); font-size: 1.375rem; line-height: 1.2; }
.gl-list dd { margin: 4px 0 0; color: var(--ink-2); line-height: 1.55; }
.gl-list > div:target { background: var(--target); outline: 8px solid var(--target); }
/* the glossary's letters: an index from A to Z, and each letter set large beside its first term */
.gl-letters { margin: 0 0 var(--s-4); }
.gl-letters ol { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 2px; }
.gl-letters li { display: grid; place-items: center; min-width: 30px; height: 30px; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; }
.gl-letters a { display: grid; place-items: center; width: 100%; height: 100%; border: 1px solid var(--ink); color: var(--ink); text-decoration: none; background: none; }
.gl-letters a:hover { background: var(--ink); color: var(--paper); }
.gl-letters .is-empty { color: var(--rule-2); }
.gl-list > div { position: relative; }
.gl-list > div:has(.gl-l) { border-top: 3px solid var(--ink); margin-top: -1px; }
.gl-l { position: absolute; top: var(--s-3); right: 0; font-family: var(--font-display-70); font-size: var(--fs-label-3); line-height: 1; color: var(--vermilion); }
.gl-list > div:has(.gl-l) dt { padding-right: 2.2em; }
.gl-links { display: flex; flex-wrap: wrap; gap: 2px var(--s-4); margin-top: var(--s-2); font-size: var(--fs-note); }
.gl-see { color: var(--ink-2); }
.gl-k { margin-right: 4px; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink); }
.faq-list { margin: 0; border-top: 1px solid var(--ink); }
.faq-item { padding: var(--s-4) 0; border-bottom: 1px solid var(--rule); scroll-margin-top: var(--s-4); }
.faq-item h3 { margin: 0 0 var(--s-2); font-family: var(--font-display); font-size: 1.5rem; font-weight: 400; line-height: 1.2; }
.faq-item p { margin: 0 0 var(--s-2); max-width: 80ch; }
.faq-item .faq-src { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; color: var(--ink-2); }
.faq-item:target { background: var(--target); outline: 8px solid var(--target); }
/* the count of questions beside each section in "On this page" */
.faq-toc-n { margin-left: auto; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; color: var(--ink-2); }
/* a figure inside an answer, where it makes a method clearer, and its note */
.faq-item .ck-units { max-width: 44rem; margin: var(--s-3) 0 var(--s-2); }
.faq-item .faq-fig-n { margin: 0 0 var(--s-2); color: var(--ink-2); font-size: var(--fs-note); line-height: 1.5; }
.faq-toc { columns: 2 22rem; margin: 0; padding-left: 1.4em; }
.faq-toc li { margin: 3px 0; break-inside: avoid; }
@media (max-width: 640px) {
  .gl-list { grid-template-columns: minmax(0, 1fr); }
}

/* ---- [explainers, search and site pages] Search: the masthead's control, the dialog (web/search.js) and /search/ ---- */
/* the control: a field-like box in the masthead, a link to /search/ without script; a square on phones */
.sr-open { flex: none; display: inline-flex; align-items: center; gap: 9px; height: 30px; margin: 0 0 1px; padding: 0 5px 0 9px; border: 1px solid var(--ink); background: transparent; color: var(--ink); font-size: var(--fs-note); line-height: 1; text-decoration: none; transition: background-color var(--t-fast) linear, color var(--t-fast) linear; }
.sr-open:hover { background: var(--ink); color: var(--paper); }
.sr-open:hover .sr-kbd { border-color: currentColor; color: inherit; }
.sr-glyph { position: relative; flex: none; width: 10px; height: 10px; margin: -2px 2px 0 0; border: 1.5px solid currentColor; border-radius: 50%; }
.sr-glyph::after { content: ""; position: absolute; right: -5px; bottom: -3px; width: 6px; height: 1.5px; background: currentColor; transform: rotate(45deg); }
.sr-kbd { padding: 3px 5px 2px; border: 1px solid var(--rule-2); font-family: var(--font-label); font-size: var(--fs-label); line-height: 1; color: var(--ink-2); }
/* the search control and the theme switch are one pair (span.mh-tools), which wraps as one; a square below 1100px, at
   the right of the wordmark's line on phones (where style.css gives the switch alone order 2) */
.mh-tools { flex: none; display: inline-flex; align-items: flex-end; gap: var(--s-2); }
@media (max-width: 1099px) {
  .sr-open { width: 30px; justify-content: center; padding: 0; }
  .sr-open-t, .sr-kbd { display: none; }
  .sr-open .sr-glyph { margin: -2px 3px 0 0; }
}
@media (max-width: 640px) {
  .mh-tools { order: 2; }
}
@media print {
  .sr-open { display: none !important; }
}
/* the dialog: a sheet under the masthead on a screen of dots, hard-edged, ink-bordered, no shadow */
dialog.sr { width: min(46rem, calc(100vw - 2 * var(--gutter))); max-width: none; max-height: calc(100dvh - 2 * var(--s-6)); margin: var(--s-6) auto auto; padding: 0; border: 1px solid var(--ink); background: var(--sheet); color: var(--ink); }
dialog.sr[open] { display: flex; flex-direction: column; overflow: hidden; }
dialog.sr::backdrop { background: color-mix(in srgb, var(--paper) 70%, transparent) radial-gradient(circle, color-mix(in srgb, var(--ink) 34%, transparent) 0.9px, transparent 1.4px) 0 0 / 6px 6px; }
html:has(dialog.sr[open]) { overflow: hidden; }
.sr-form { display: flex; flex-direction: column; min-height: 0; margin: 0; }
.sr-head { display: flex; align-items: center; justify-content: space-between; gap: var(--s-4); padding: var(--s-3) var(--s-4) 0; }
.sr-title { margin: 0; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); }
.sr-close { padding: 4px 6px 3px; border: 1px solid var(--ink); background: transparent; color: var(--ink); font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; cursor: pointer; }
.sr-close:hover { background: var(--ink); color: var(--sheet); }
.sr-field { display: flex; align-items: center; gap: var(--s-3); margin: var(--s-2) var(--s-4) 0; padding: 0 0 var(--s-1); border-bottom: 3px solid var(--ink); }
.sr-field .sr-glyph { width: 15px; height: 15px; border-width: 2px; }
.sr-field .sr-glyph::after { right: -6px; bottom: -4px; width: 8px; height: 2px; }
.sr-field .sr-q { flex: 1; min-width: 0; height: auto; padding: 6px 2px; border: 0; border-radius: 0; background: transparent; box-shadow: none; color: var(--ink); font-family: var(--font-display); font-size: clamp(1.375rem, 1.1rem + 1vw, 1.875rem); line-height: 1.2; }
/* the field's own rule turns lapis while it has focus, in place of the outline */
.sr-field:focus-within, .sr-pageform:focus-within .sr-pageq { border-bottom-color: var(--lapis); }
.sr-field .sr-q:focus-visible, .sr-pageform .sr-pageq:focus-visible { outline: none; }
.sr-q::placeholder { color: var(--ink-2); opacity: 0.75; }
.sr-q::-webkit-search-cancel-button, .sr-pageq::-webkit-search-cancel-button { display: none; }
.sr-status { margin: 0; padding: var(--s-2) var(--s-4) var(--s-1); color: var(--ink-2); font-size: var(--fs-note); }
.sr-list { list-style: none; margin: 0; padding: 0 var(--s-4); overflow-y: auto; overscroll-behavior: contain; }
.sr-list:empty { display: none; }
.sr-r { border-bottom: 1px solid var(--rule); }
.sr-a { display: grid; grid-template-columns: 9.5rem minmax(0, 1fr); column-gap: var(--s-4); align-items: baseline; padding: 8px 6px; color: var(--ink); text-decoration: none; background: none; }
.sr-k { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); }
.sr-t { font-weight: 600; }
.sr-m { grid-column: 2; overflow: hidden; color: var(--ink-2); font-size: var(--fs-note); text-overflow: ellipsis; white-space: nowrap; }
.sr-r.is-active > .sr-a, .sr-a:hover { background: var(--row-hover); }
.sr-r.is-active .sr-k::before { content: ""; display: inline-block; width: 6px; height: 6px; margin: 0 6px 1px 0; border-radius: 50%; background: var(--vermilion); }
.sr-foot { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: var(--s-1) var(--s-4); margin-top: auto; padding: var(--s-2) var(--s-4) var(--s-3); border-top: 1px solid var(--ink); }
.sr-help { flex: 1 1 24rem; margin: 0; color: var(--ink-2); font-size: var(--fs-note); line-height: 1.45; }
.sr-all { font-size: var(--fs-note); }
@media (max-width: 640px) {
  dialog.sr { margin-top: var(--s-3); max-height: calc(100dvh - 2 * var(--s-3)); }
  .sr-a { grid-template-columns: minmax(0, 1fr); row-gap: 2px; }
  .sr-m { grid-column: 1; }
}
/* /search/: the box (shown by the script) over the site index, a list per kind in columns */
.sr-pageform { display: grid; gap: var(--s-2); max-width: 34rem; margin: var(--s-5) 0 0; }
.sr-pageform[hidden] { display: none; }
.sr-pagelabel { font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink); }
.sr-pageform .sr-pageq { width: 100%; height: auto; padding: 6px 2px; border: 0; border-bottom: 3px solid var(--ink); border-radius: 0; background: transparent; box-shadow: none; color: var(--ink); font-family: var(--font-display); font-size: 1.5rem; line-height: 1.2; }
.sr-toc-n { margin-left: auto; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; color: var(--ink-2); }
.sr-pagestatus { margin: 0; color: var(--ink-2); font-size: var(--fs-note); }
.sr-pagestatus:empty { display: none; }
.sr-results { margin-top: var(--s-6); padding-top: var(--s-3); border-top: 1px solid var(--ink); }
.sr-results .sr-list { padding: 0; overflow: visible; }
.sr-index { list-style: none; margin: 0; padding: 0; columns: 3 17rem; column-gap: var(--col-gap); }
.sr-index li { break-inside: avoid; padding: 6px 0 7px; border-bottom: 1px solid var(--rule); }
.sr-meta { display: block; margin-top: 2px; color: var(--ink-2); font-size: var(--fs-note); line-height: 1.4; }
.sr-kind[hidden] { display: none; }

/* ---- [overview and live] Live (/live/): the Live panel at full width, the chains as a second row of choices, hourly bars per chain ---- */
.tk-full .tk-tools { align-items: flex-start; }
.tk-full .tk-filter-chains { flex-basis: 100%; }
.tk-full .tk-list { max-height: 44rem; }
.tk-rate { margin: 0; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: 0.04em; white-space: nowrap; }
.tk-more { margin: var(--s-2) 0 0; }
.tk-quiet { max-width: 96ch; line-height: 1.55; }
.tk-quiet[hidden] { display: none; }
.tk-quiet p { margin: 0; }
.tk-quiet ul { margin: 4px 0 0; padding-left: 1.2em; }
.hb-table { margin-top: var(--s-5); }
.hb-table caption { caption-side: bottom; padding: var(--s-2) 0 0; }
/* "Last 7 days" (web/live-view.mjs): a heat grid of the hours, a row a chain beside its name (18px rows), 168 dots a
   row, round at any width (zero-length strokes that do not scale), a rule at each midnight, the days named under it;
   on phones the grid scrolls inside its own box */
.hb-hours { margin: 0; }
.hb-hours .lv-lane { height: 18px; }
.hb-name { overflow: hidden; text-overflow: ellipsis; font-family: var(--font-label); font-size: var(--fs-label); line-height: 17px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--ink); }
a.hb-name { text-decoration: underline; text-decoration-color: var(--lapis); text-underline-offset: 0.25em; }
.hb-grid, .hb-axis { display: block; overflow: visible; }
.hb-axis { height: 16px; margin-top: 2px; }
.hb-dots { fill: none; stroke: var(--lapis); stroke-linecap: round; vector-effect: non-scaling-stroke; }
.hb-dots.hb-pin { stroke: var(--rule-2); }
.hb-sep { fill: none; stroke: var(--rule); stroke-width: 1px; vector-effect: non-scaling-stroke; }
.hb-day { fill: none; stroke: var(--rule-2); stroke-width: 1px; vector-effect: non-scaling-stroke; }
.hb-week-h { margin-top: var(--s-7); }
.lv-week { max-width: 820px; }
.prose-list { margin: 0 0 var(--s-3); padding-left: 1.2em; line-height: 1.6; }

/* the lanes at the head of the Live panel (web/live-field.mjs, src/ticker.mjs lanesHtml, web/live.js): the chains'
   names with their connection's state in the tags' marker shapes, one lane each beside them (22px, LANE_H), the time
   axis and the caption under the plot */
.lv-lanes { display: grid; grid-template-columns: minmax(7.5rem, 11rem) minmax(0, 1fr); column-gap: var(--s-4); margin: 0 0 var(--s-5); }
.lv-names { grid-column: 1; grid-row: 1; list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--ink); }
.lv-lane { display: flex; align-items: center; height: 22px; border-bottom: 1px solid var(--rule); white-space: nowrap; overflow: hidden; }
.lv-name { max-width: 100%; overflow: hidden; text-overflow: ellipsis; line-height: 21px; }
a.lv-name { text-decoration: underline; text-decoration-color: var(--lapis); text-underline-offset: 0.25em; }
.tk-pill.tk-st-none { --tag: var(--ink-2); }
.lv-plot { grid-column: 2; grid-row: 1; position: relative; min-width: 0; border-top: 1px solid var(--ink); }
.lv-svg { display: block; overflow: visible; }
.lv-plot.is-drawn > .lv-svg { visibility: hidden; }
.lv-canvas { position: absolute; left: 0; top: 0; width: 100%; height: 100%; display: block; }
.lv-unheld { fill: var(--tint); }
.lv-dot { fill: var(--ink); }
.lv-dot.lv-ring { fill: none; stroke: var(--ink); stroke-width: 1.2px; }
.lv-dot.lv-new { fill: var(--vermilion); }
.lv-axis { grid-column: 2; display: flex; justify-content: space-between; margin: 4px 0 0; font-family: var(--font-label); font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; color: var(--ink-2); }
.lv-cap { grid-column: 1 / -1; margin: var(--s-3) 0 0; max-width: 96ch; color: var(--ink-2); font-size: var(--fs-note); line-height: 1.55; }
@media (max-width: 640px) {
  .lv-lanes { grid-template-columns: 6.5rem minmax(0, 1fr); column-gap: var(--s-2); }
  .hb-plot { overflow-x: auto; }
  .hb-scroll { min-width: 560px; }
}

/* ---- [explainers, search and site pages] API (/api/), Feed status (/status/) and the signed snapshots ---- */
.api-ep { min-width: 0; }
.api-addr { margin: var(--s-1) 0 var(--s-2); overflow-wrap: anywhere; }
.api-cmd { overflow-wrap: anywhere; }
.api-ex, .ab-key { max-width: 100%; margin: var(--s-2) 0 0; padding: var(--s-3) var(--s-4); overflow: auto; background: var(--sheet); border-top: 1px solid var(--ink); border-bottom: 1px solid var(--rule); font-family: var(--font-label); font-size: var(--fs-label); line-height: 1.6; }
.api-ex { max-height: 28rem; white-space: pre; }
.api-log { margin: 0; padding-left: 1.2rem; }
.fs-use { display: block; margin-top: 2px; font-size: var(--fs-note); font-weight: 400; color: var(--ink-2); }
/* a last error can hold an address with no break in it: it wraps anywhere, so the table keeps to its column */
.fs-err { min-width: 11rem; overflow-wrap: anywhere; }
.fs-state { --tag: var(--ink-2); }
.fs-ok { --tag: var(--up); }
.fs-delayed { --tag: var(--ochre); }
.fs-failing { --tag: var(--down); }
.fs-fallback { --tag: var(--plum); }
.fs-fallback::before { background: linear-gradient(90deg, var(--tag) 50%, transparent 50%); }
.fs-fallback, .fs-not-run { color: var(--ink-2); }
/* the runs recorded each day for a collector or job (a sparkline per row), and the grid of the last 14 days */
.fs-spark { white-space: nowrap; }
.fs-spark .ck-spark { display: block; }
#days .ck-heat { max-width: none; }

/* ---- [explainers, search and site pages] The 404 page: the code set in dots ---- */
.nf { padding-top: clamp(40px, 6vw, 96px); }
/* the code set in dots (src/site-art.mjs): lit cells in ink over the faint screen, the last dot vermilion */
.nf-code .nf-art { display: block; width: auto; max-width: 100%; height: clamp(5.5rem, 2.5rem + 12vw, 12rem); overflow: visible; }
.nf-art .nf-off { fill: none; stroke: var(--rule-2); stroke-linecap: round; }
.nf-art .nf-on { fill: none; stroke: var(--ink); stroke-linecap: round; }
.nf-art .nf-dot { fill: var(--vermilion); }
.nf-code { margin: 0 0 var(--s-5); line-height: 1; }
.nf h1 { margin-bottom: var(--s-4); }
