/* ============================================================
   REDDENDA MAIN — LANE B: the data publication estate
   Page-scoped layer on top of Lane A's "The Ledger" tokens.
   Owns: /atlas*, /rcri, /code*, /practice-atlas*, /ghost-rates,
   /newsroom*, /reports*. Lane B owns this file; never edited by
   other lanes. Every component reads main.css custom properties.
   Class namespace: .pub- / .inst- / .axis- / .print- / .cite-
   ============================================================ */

/* ---------- publication page hero ---------- */
.pub-hero{padding:clamp(64px,8vw,110px) 0 clamp(28px,4vw,44px);position:relative}
.pub-hero h1{margin-top:16px}
.pub-hero .lede{margin-top:18px}
.pub-hero .pub-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:26px}
.pub-kicker{display:flex;flex-wrap:wrap;gap:10px 18px;align-items:center;margin-top:22px;font-family:var(--f-mono);font-size:12px;color:var(--ink3)}

/* ---------- instrument register (dense, sell-nothing) ---------- */
.inst{background:var(--bg1);border:1px solid var(--line);border-radius:14px;overflow:hidden}
.inst-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:8px 18px;padding:14px 18px;border-bottom:1px solid var(--line)}
.inst-head h2,.inst-head h3{font-size:15px;font-weight:600;color:var(--ink);letter-spacing:-.005em}
.inst-asof{font-family:var(--f-mono);font-size:11px;letter-spacing:.06em;color:var(--ink4);text-transform:uppercase}
.inst-body{padding:6px 0}
.inst-foot{padding:12px 18px;border-top:1px solid var(--line);font-family:var(--f-mono);font-size:11.5px;line-height:1.55;color:var(--ink4)}
.inst-foot a{color:var(--ink3);text-decoration:underline;text-underline-offset:3px}

/* dense data table */
.tbl{width:100%;border-collapse:collapse;font-size:14px}
.tbl th{font-family:var(--f-mono);font-size:10.5px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--ink3);text-align:left;padding:10px 18px;border-bottom:1px solid var(--line);white-space:nowrap}
.tbl td{padding:9px 18px;border-bottom:1px solid var(--line);color:var(--ink2);vertical-align:middle}
.tbl tr:last-child td{border-bottom:0}
.tbl tbody tr{transition:background var(--t-micro)}
.tbl tbody tr:hover{background:var(--bg2)}
.tbl .num,.tbl td[data-num]{font-family:var(--f-mono);font-variant-numeric:tabular-nums;color:var(--ink);text-align:right;white-space:nowrap}
.tbl th.num,.tbl th[data-num]{text-align:right}
.tbl .dim{color:var(--ink4)}
.tbl a{color:var(--ink);border-bottom:1px solid var(--line-strong);transition:border-color var(--t-micro),color var(--t-micro)}
.tbl a:hover{color:var(--signal);border-color:var(--signal)}
.tbl-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.tbl-scroll .tbl{min-width:560px}

/* ---------- position-axis spread (money lives on an axis) ---------- */
.axis{position:relative;padding:26px 0 34px}
.axis-rail{position:relative;height:4px;border-radius:2px;background:var(--bg3)}
.axis-band{position:absolute;top:0;bottom:0;border-radius:2px;background:linear-gradient(90deg,rgba(44,230,196,.18),rgba(44,230,196,.42))}
.axis-tick{position:absolute;top:50%;width:2px;height:16px;transform:translate(-50%,-50%);background:var(--ink3);border-radius:1px}
.axis-tick.t-med{background:var(--info);height:22px}
.axis-tick.t-p50{background:var(--ink);height:22px}
.axis-tick.t-p90{background:var(--signal);height:22px;box-shadow:var(--glow)}
.axis-dot{position:absolute;top:50%;width:11px;height:11px;border-radius:50%;transform:translate(-50%,-50%);background:var(--signal);box-shadow:var(--glow)}
.axis-lab{position:absolute;top:calc(50% + 14px);transform:translateX(-50%);font-family:var(--f-mono);font-size:10.5px;letter-spacing:.05em;color:var(--ink3);white-space:nowrap}
.axis-lab b{color:var(--ink);font-weight:600}
.axis-minmax{display:flex;justify-content:space-between;margin-top:30px;font-family:var(--f-mono);font-size:11px;color:var(--ink4)}

/* ---------- state spread ladder (50-state rows) ---------- */
.ladder{display:flex;flex-direction:column}
.ladder-row{display:grid;grid-template-columns:52px 1fr 110px;align-items:center;gap:14px;padding:8px 18px;border-bottom:1px solid var(--line);text-decoration:none;transition:background var(--t-micro)}
.ladder-row:last-child{border-bottom:0}
.ladder-row:hover{background:var(--bg2)}
.ladder-st{font-family:var(--f-mono);font-size:12.5px;font-weight:600;color:var(--ink2);letter-spacing:.06em}
.ladder-track{position:relative;height:6px;border-radius:3px;background:var(--bg3);overflow:visible}
.ladder-bar{position:absolute;top:0;bottom:0;left:0;border-radius:3px;background:linear-gradient(90deg,var(--signal-deep),var(--signal));transform-origin:left center;transform:scaleX(0);transition:transform .7s var(--ease-out)}
.in .ladder-bar,.ladder-row.in .ladder-bar{transform:scaleX(1)}
.ladder-val{font-family:var(--f-mono);font-variant-numeric:tabular-nums;font-size:13.5px;color:var(--ink);text-align:right;white-space:nowrap}
.ladder-val .vs{display:block;font-size:10.5px;color:var(--ink4)}
.ladder-row.is-thin .ladder-st{color:var(--ink4)}
.ladder-row.is-thin .ladder-val{color:var(--ink4);font-size:12px}

/* ---------- choropleth atlas map ---------- */
.map-wrap{position:relative;background:var(--bg1);border:1px solid var(--line);border-radius:16px;padding:clamp(14px,2.5vw,28px)}
.map-svg{display:block;width:100%;height:auto}
.map-svg .cell{stroke:var(--bg0);stroke-width:.5;transition:opacity var(--t-micro)}
.map-svg .cell:hover{opacity:.82;cursor:pointer}
.map-svg .cell.nodata{fill:url(#hatch);stroke:var(--line)}
.map-legend{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin-top:16px;font-family:var(--f-mono);font-size:11px;color:var(--ink3)}
.map-legend .swatches{display:flex;height:10px;border-radius:5px;overflow:hidden}
.map-legend .swatches i{width:34px;height:10px;display:block}
.map-legend .hatchkey{width:22px;height:10px;border-radius:3px;border:1px solid var(--line);background:repeating-linear-gradient(45deg,transparent 0 3px,var(--line) 3px 4px)}
.map-tip{position:absolute;pointer-events:none;background:var(--bg2);border:1px solid var(--line-strong);border-radius:10px;padding:10px 13px;font-size:12.5px;color:var(--ink2);box-shadow:var(--paper-shadow);opacity:0;transform:translateY(4px);transition:opacity var(--t-micro),transform var(--t-micro);z-index:5;max-width:240px}
.map-tip.on{opacity:1;transform:none}
.map-tip b{display:block;color:var(--ink);font-size:13px;margin-bottom:2px}
.map-tip .num{color:var(--signal)}

/* ---------- coverage + confidence chips ---------- */
.cov{display:inline-flex;align-items:center;gap:7px;font-family:var(--f-mono);font-size:11px;letter-spacing:.06em;color:var(--ink3)}
.cov .bar{width:64px;height:5px;border-radius:3px;background:var(--bg3);overflow:hidden}
.cov .bar i{display:block;height:100%;border-radius:3px;background:var(--signal-deep);transform-origin:left center}
.conf{display:inline-flex;align-items:center;gap:6px;font-family:var(--f-mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;padding:3px 9px;border-radius:6px;border:1px solid var(--line)}
.conf-a{color:var(--good);border-color:rgba(61,220,151,.35)}
.conf-b{color:var(--warn);border-color:rgba(245,180,74,.35)}
.conf-c{color:var(--ink3)}

/* ---------- honest empty state ---------- */
.empty{border:1px dashed var(--line-strong);border-radius:14px;padding:26px;text-align:center;color:var(--ink3);font-size:14.5px;background:repeating-linear-gradient(45deg,transparent 0 10px,rgba(27,36,48,.28) 10px 11px)}
.empty b{display:block;color:var(--ink2);font-size:15px;margin-bottom:6px;font-weight:600}
.empty .cov{justify-content:center;margin-top:10px}

/* ---------- the RCRI exchange print ---------- */
.print-stage{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);gap:clamp(24px,4vw,56px);align-items:center}
@media(max-width:880px){.print-stage{grid-template-columns:1fr}}
.print-obj{background:var(--bg1);border:1px solid var(--line-strong);border-radius:20px;padding:clamp(24px,3.5vw,44px);position:relative;overflow:hidden}
.print-obj::after{content:"";position:absolute;inset:auto -20% -55% -20%;height:70%;background:radial-gradient(50% 100% at 50% 100%,rgba(44,230,196,.08),transparent 70%);pointer-events:none}
.print-series{font-family:var(--f-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink3);display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap}
.print-num{font-family:var(--f-mono);font-variant-numeric:tabular-nums;font-size:clamp(64px,10vw,124px);font-weight:600;letter-spacing:-.04em;line-height:1;color:var(--ink);margin-top:18px;display:flex;align-items:baseline;gap:16px;flex-wrap:wrap}
.print-delta{font-family:var(--f-mono);font-size:clamp(15px,1.6vw,20px);font-weight:500;display:inline-flex;align-items:center;gap:7px}
.print-delta.up{color:var(--good)} .print-delta.down{color:var(--risk)} .print-delta.flat{color:var(--ink3)}
.print-delta .arr{font-size:.85em}
.print-sub{margin-top:14px;font-family:var(--f-mono);font-size:12px;color:var(--ink3);line-height:1.6}
.print-meta{display:flex;flex-wrap:wrap;gap:8px 22px;margin-top:22px;padding-top:18px;border-top:1px solid var(--line);font-family:var(--f-mono);font-size:11px;color:var(--ink4)}
.print-meta b{color:var(--ink2);font-weight:500}

/* ---------- series chart (inline SVG line) ---------- */
.series{background:var(--bg1);border:1px solid var(--line);border-radius:16px;padding:22px}
.series svg{display:block;width:100%;height:auto}
.series .grid line{stroke:var(--line);stroke-width:1}
.series .lab{font-family:var(--f-mono);font-size:10px;fill:var(--ink4)}
.series .line{fill:none;stroke:var(--signal);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.series .area{fill:url(#seriesFade);opacity:.5}
.series .pt{fill:var(--signal)}
.series .ctx{fill:none;stroke:var(--ink4);stroke-width:1.5;stroke-dasharray:2 5}
.js .series .line{stroke-dasharray:1200;stroke-dashoffset:1200;transition:stroke-dashoffset .9s var(--ease-inout)}
.js .in .series .line,.js .series.in .line{stroke-dashoffset:0}

/* ---------- cite / embed blocks ---------- */
.cite{background:var(--bg1);border:1px solid var(--line);border-radius:14px;padding:18px 20px}
.cite h4{font-family:var(--f-mono);font-size:10.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--ink3);margin-bottom:10px}
.cite code,.cite .cite-text{display:block;font-family:var(--f-mono);font-size:12.5px;line-height:1.65;color:var(--ink2);word-break:break-word}
.cite .row{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}
.copy-btn{flex:none;font-family:var(--f-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--signal);background:none;border:1px solid var(--line-strong);border-radius:8px;padding:7px 12px;transition:border-color var(--t-micro),background var(--t-micro)}
.copy-btn:hover{border-color:var(--signal);background:var(--bg2)}
.copy-btn.done{color:var(--good);border-color:rgba(61,220,151,.4)}
.embed-preview{margin-top:14px;border:1px dashed var(--line-strong);border-radius:10px;padding:14px;display:flex;justify-content:center}

/* ---------- paper editions (reports shelf + frozen editions) ---------- */
.edition-rail{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:22px}
@media(max-width:980px){.edition-rail{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:640px){.edition-rail{grid-template-columns:1fr}}
.edition{background:var(--paper);color:var(--paper-ink);border-radius:12px;box-shadow:var(--paper-shadow);padding:24px;display:flex;flex-direction:column;gap:10px;min-height:230px;position:relative;transition:transform var(--t-hover) var(--ease-out)}
.edition:hover{transform:translateY(-3px)}
.edition .paper-meta{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:#8a8677;display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap}
.edition h3{font-family:var(--f-display);font-size:21px;line-height:1.18;color:var(--paper-ink);letter-spacing:-.01em}
.edition p{font-size:13.5px;line-height:1.55;color:#4a4f57}
.edition .ed-foot{margin-top:auto;padding-top:12px;border-top:1px solid var(--paper-line);display:flex;justify-content:space-between;align-items:center;font-family:var(--f-mono);font-size:11px;color:#8a8677}
.edition .ed-foot a{color:var(--paper-accent);font-weight:600}
.edition.is-future{background:transparent;border:1px dashed var(--line-strong);box-shadow:none;color:var(--ink3)}
.edition.is-future h3{color:var(--ink2)}
.edition.is-future p{color:var(--ink3)}
.edition.is-future .paper-meta,.edition.is-future .ed-foot{color:var(--ink4);border-color:var(--line)}

/* full paper document (report reading view) */
.paper-doc{background:var(--paper);color:var(--paper-ink);border-radius:14px;box-shadow:var(--paper-shadow);padding:clamp(26px,5vw,64px);max-width:860px;margin:0 auto}
.paper-doc h1,.paper-doc h2,.paper-doc h3{color:var(--paper-ink);font-family:var(--f-display)}
.paper-doc h1{font-size:clamp(28px,4vw,44px);line-height:1.1;letter-spacing:-.014em}
.paper-doc h2{font-size:clamp(20px,2.4vw,28px);margin-top:40px}
.paper-doc p{color:#3c424b;font-size:15.5px;line-height:1.7;margin-top:14px}
.paper-doc .paper-meta{margin-bottom:18px}
.paper-doc .rule{border-top:1px solid var(--paper-line);margin:26px 0}
.paper-doc .methods{background:#F1EFE8;border:1px solid var(--paper-line);border-radius:10px;padding:18px 20px;font-size:13.5px;line-height:1.65;color:#4a4f57;margin-top:26px}
.paper-doc .methods h4{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:#8a8677;margin-bottom:8px}
.paper-doc .num{color:var(--paper-ink)}
.paper-doc .tbl th{color:#8a8677;border-color:var(--paper-line)}
.paper-doc .tbl td{color:#3c424b;border-color:var(--paper-line)}
.paper-doc .tbl .num,.paper-doc .tbl td[data-num]{color:var(--paper-ink)}
.paper-doc .tbl tbody tr:hover{background:#F1EFE8}
.anchor-h{position:relative}
.anchor-h .hlink{position:absolute;left:-22px;top:50%;transform:translateY(-50%);opacity:0;color:var(--paper-accent);font-weight:400;transition:opacity var(--t-micro)}
.anchor-h:hover .hlink{opacity:.8}

/* ---------- newsroom story cards ---------- */
.story-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px}
@media(max-width:820px){.story-grid{grid-template-columns:1fr}}
.story{display:flex;flex-direction:column;gap:12px;background:var(--bg1);border:1px solid var(--line);border-radius:16px;padding:24px;transition:transform var(--t-hover) var(--ease-out),border-color var(--t-hover),box-shadow var(--t-hover)}
.story:hover{transform:translateY(-2px);border-color:rgba(44,230,196,.25);box-shadow:var(--glow)}
.story .st-kicker{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink3);display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap}
.story h3{font-family:var(--f-display);font-size:clamp(19px,2vw,24px);line-height:1.2;letter-spacing:-.01em}
.story p{font-size:14px;line-height:1.6;color:var(--ink2)}
.story .st-stat{font-family:var(--f-mono);font-variant-numeric:tabular-nums;font-size:clamp(26px,3vw,36px);font-weight:600;color:var(--signal);letter-spacing:-.02em}

/* ---------- share / OG preview strip ---------- */
.share-strip{display:flex;flex-wrap:wrap;gap:12px;align-items:center}
.share-strip .btn{padding:10px 16px;font-size:13.5px}

/* ---------- breadcrumbs + lattice links ---------- */
.crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:7px;font-family:var(--f-mono);font-size:11.5px;color:var(--ink4);letter-spacing:.04em}
.crumbs a{color:var(--ink3);transition:color var(--t-micro)}
.crumbs a:hover{color:var(--signal)}
.crumbs .sep{opacity:.5}
.lattice{display:flex;flex-wrap:wrap;gap:8px}
.lattice a{font-family:var(--f-mono);font-size:12px;color:var(--ink3);border:1px solid var(--line);border-radius:999px;padding:6px 13px;transition:color var(--t-micro),border-color var(--t-micro),background var(--t-micro)}
.lattice a:hover{color:var(--ink);border-color:var(--signal);background:var(--bg2)}

/* ---------- section rhythm helpers ---------- */
.pub-section{padding:clamp(44px,6vw,84px) 0;position:relative}
.pub-section + .pub-section{border-top:1px solid var(--line)}
.pub-grid-side{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:clamp(22px,3.5vw,44px);align-items:start}
@media(max-width:980px){.pub-grid-side{grid-template-columns:1fr}}
.side-stack{display:flex;flex-direction:column;gap:18px;position:sticky;top:84px}
@media(max-width:980px){.side-stack{position:static}}

/* ---------- qualifier line (rides with every dollar) ---------- */
.qual{font-family:var(--f-mono);font-size:11px;line-height:1.6;color:var(--ink4);letter-spacing:.02em}

/* ---------- fingerprint small multiples ---------- */
.fp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.fp-cell{background:var(--bg1);border:1px solid var(--line);border-radius:12px;padding:13px 14px;display:flex;flex-direction:column;gap:8px}
.fp-cell .fp-payer{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fp-cell .fp-val{font-family:var(--f-mono);font-variant-numeric:tabular-nums;font-size:19px;font-weight:600;color:var(--ink)}
.fp-cell .fp-bar{position:relative;height:4px;border-radius:2px;background:var(--bg3)}
.fp-cell .fp-bar i{position:absolute;top:0;bottom:0;left:0;border-radius:2px;background:var(--signal-deep)}
.fp-cell .fp-bar em{position:absolute;top:-3px;width:2px;height:10px;background:var(--ink3)}
.fp-cell.is-hot{border-color:rgba(44,230,196,.35)}
.fp-cell.is-hot .fp-val{color:var(--signal)}
.fp-cell .fp-n{font-family:var(--f-mono);font-size:10px;color:var(--ink4)}

/* ---------- sticky sub-nav (long publication pages) ---------- */
.subnav{position:sticky;top:64px;z-index:40;background:rgba(5,8,13,.88);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}
.subnav .wrap{display:flex;gap:2px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.subnav .wrap::-webkit-scrollbar{display:none}
.subnav a{flex:none;font-family:var(--f-mono);font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink3);padding:12px 13px;border-bottom:2px solid transparent;transition:color var(--t-micro),border-color var(--t-micro)}
.subnav a:hover,.subnav a.on{color:var(--ink);border-color:var(--signal)}

/* ---------- mobile ---------- */
@media(max-width:640px){
  .ladder-row{grid-template-columns:42px 1fr 92px;gap:10px;padding:8px 14px}
  .tbl th,.tbl td{padding:8px 12px}
  .print-num{font-size:clamp(56px,17vw,84px)}
  .pub-kicker{gap:8px 12px}
  .edition{min-height:0}
}
@media(prefers-reduced-motion:reduce){
  .ladder-bar{transform:scaleX(1)!important;transition:none}
  .js .series .line{stroke-dasharray:none;stroke-dashoffset:0;transition:none}
  .edition:hover,.story:hover{transform:none}
}
