/* Research paper styles. Lifted out of the first paper's <head> so every
   paper is set from one sheet rather than carrying its own copy. */
/* The horizontal clamp is on body alone, and html is put back to visible over
   site.css's html,body{overflow-x:hidden}. Hidden on html stops body's overflow
   propagating to the viewport, which makes body itself a scroll container that
   never scrolls — and .sidebar's position:sticky then resolves against that dead
   container instead of the viewport, so the contents rail sat 64px low and
   scrolled away with the paper. Clipping is unchanged: body's hidden still
   reaches the viewport. */
html{overflow-x:visible;max-width:100vw}body{overflow-x:hidden;max-width:100vw}@media(max-width:640px){.sidebar,.main,.hero,.toc-card,.highlight-card,.stats,.stat,.section-card,.question-card{max-width:calc(100vw - 32px)!important;box-sizing:border-box}.stats{display:grid!important;grid-template-columns:1fr!important;gap:10px}}

:root{--bg:#FAF8F4;--ink:#141414;--muted:#141414;--line:#DEDAD1;--navy:#141414;--blue:#141414;--soft:#FAF8F4;--soft2:#FAF8F4;--shadow:none;--radius:0;--max:1240px}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;font-family:'Source Serif 4',Georgia,'PT Serif',serif;background:var(--bg);color:var(--ink);line-height:1.68}.progress{position:fixed;top:0;left:0;height:3px;background:var(--ink);width:0;z-index:99}.shell{max-width:var(--max);margin:32px auto 48px;padding:0 24px;display:grid;grid-template-columns:290px minmax(0,1fr);gap:28px}/* pinned, the rail is taller than most windows (1144px against a 96px top offset), so it is capped to the viewport and scrolls within itself rather than running its lower cards off the bottom. Unpinned below 1060px, where the cap is lifted again. */.sidebar{position:sticky;top:96px;align-self:start;max-height:calc(100vh - 120px);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--line) transparent}.toc-card,.mini-card,.hero,.section-card,.figure-card,.references-card,.footer-card,.question-card{background:var(--bg);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:var(--radius)}.toc-card{padding:20px 18px}.toc-title{font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--blue);font-weight:800;margin:0 0 12px}.toc-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.toc-list a{display:flex;gap:10px;padding:10px 12px;border-radius:0;text-decoration:none;color:var(--muted);font-size:14px;line-height:1.35;transition:.2s ease}.toc-list a .num{font-weight:800;color:var(--blue);min-width:24px}.toc-list a:hover,.toc-list a.active{background:var(--soft);color:var(--navy)}.toc-list a.active{font-weight:700}.mini-stack{display:grid;gap:14px;margin-top:14px}.mini-card{padding:16px 18px}.mini-card h4{margin:0 0 7px;font-size:12px;text-transform:uppercase;letter-spacing:.12em;color:var(--blue)}.mini-card p{margin:0;color:var(--ink);font-size:14px;line-height:1.5}.main{display:grid;gap:24px}.hero{padding:34px;position:relative;overflow:hidden}.kicker{font-size:12px;letter-spacing:.12em;text-transform:uppercase;font-weight:800;color:var(--blue);margin-bottom:14px}.hero h1{font-size:clamp(34px,4vw,54px);line-height:1.08;margin:0 0 14px;color:var(--navy);letter-spacing:-.03em}.hero .subtitle{font-family:Georgia,"Times New Roman",serif;font-size:30px;line-height:1.16;color:var(--navy);margin:0 0 14px;max-width:18ch}.hero p.lead{margin:0 0 20px;font-size:20px;color:var(--muted);max-width:54ch}.meta{display:flex;flex-wrap:wrap;gap:10px 14px;color:var(--muted);font-size:14px}.meta-pill{padding:8px 12px;border-radius:0;background:var(--soft2);border:1px solid var(--line)}.hero-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:18px;margin-top:24px}.highlight-card{background:var(--ink);color:var(--bg);border-radius:0;padding:20px}.highlight-card h3{margin:0 0 8px;font-size:18px}.highlight-card p{margin:0;font-size:15px;line-height:1.62;color:var(--bg)}.stats{display:grid;grid-template-columns:1fr 1fr;gap:14px}.stat{padding:18px;background:var(--soft2);border-radius:0;border:1px solid var(--line)}.stat .label{font-size:12px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--blue);margin-bottom:8px}.stat .value{font-size:26px;font-weight:800;color:var(--navy);line-height:1.1}.stat .desc{font-size:14px;color:var(--muted);margin-top:6px}.section-card{padding:28px 30px}.section-card h2{margin:0 0 14px;font-size:14px;letter-spacing:.12em;text-transform:uppercase;color:var(--blue)}.section-card h3{margin:0 0 16px;font-size:30px;line-height:1.16;color:var(--navy);letter-spacing:-.02em}.section-card p{margin:0 0 15px;font-size:18px;color:var(--ink);font-family:Georgia,"Times New Roman",serif}/* No. 02 argues in named subsections and numbered conditions, which the first
   paper had no need of; h4 and the lists are set to sit under .section-card h3
   without competing with it. */
.section-card h4{margin:26px 0 10px;font-size:20px;line-height:1.3;color:var(--navy);letter-spacing:-.01em}
.section-card h4:first-child{margin-top:0}
.section-card ol,.section-card ul{margin:0 0 15px;padding-left:24px}
.section-card li{margin:0 0 13px;font-size:18px;line-height:1.68;color:var(--ink);font-family:Georgia,"Times New Roman",serif}
.section-card li:last-child{margin-bottom:0}
.abstract-box{background:var(--soft2);border:1px solid var(--line);border-radius:0;padding:22px 22px 6px}.abstract-box p{font-size:20px;line-height:1.72}.question-card{padding:24px 26px}.table-wrap{overflow:auto;border-radius:0;border:1px solid var(--line)}table{width:100%;border-collapse:separate;border-spacing:0;background:var(--bg)}th{padding:14px 16px;font-size:14px;text-align:left;color:var(--ink);border-bottom:1px solid var(--line)}th:first-child{border-top-left-radius:0}th:last-child{border-top-right-radius:0}td{padding:16px;border-top:1px solid var(--line);vertical-align:top;font-size:16px;color:var(--ink)}tr:nth-child(even) td{background:rgba(20,20,20,.025)}.figure-card{padding:24px 24px 20px}.figure-card .fig-kicker{font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--blue);font-weight:800;margin-bottom:10px}.figure-card h4{margin:0 0 6px;font-size:26px;color:var(--navy);letter-spacing:-.02em}.figure-card .fig-sub{margin:0 0 14px;font-size:15px;line-height:1.5;color:var(--muted)}.figure-media{border-radius:0;overflow:hidden;border:1px solid var(--line);background:var(--bg)}.figure-media img{display:block;width:100%;height:auto}.fig-note{font-size:15px;color:var(--muted);margin-top:14px}.fig-source{font-size:13px;color:var(--muted);margin-top:8px;padding-top:10px;border-top:1px dashed var(--line)}.quote-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.quote-box{padding:18px;border:1px solid var(--line);background:var(--soft2);border-radius:0}.quote-box h5{margin:0 0 6px;font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--blue)}.quote-box p{margin:0;font-family:'Source Serif 4',Georgia,'PT Serif',serif;font-size:15px;line-height:1.55;color:var(--ink)}.references-card{padding:28px 30px}.references-card ol{margin:0;padding-left:22px}.references-card li{margin:0 0 12px;font-family:Georgia,"Times New Roman",serif;font-size:17px;color:var(--ink)}.footer-card{padding:26px 30px}.footer-grid{display:grid;grid-template-columns:1.2fr 1fr;gap:22px}.foot-title{font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--blue);font-weight:800;margin:0 0 12px}.footer-card p,.footer-card li{margin:0 0 10px;color:var(--ink);font-size:16px}.footer-card .small{font-size:14px;color:var(--muted)}.reveal{opacity:0;transform:translateY(12px);transition:opacity .55s ease,transform .55s ease}.reveal.visible{opacity:1;transform:none}@media (max-width:1060px){.shell{grid-template-columns:1fr}.sidebar{position:relative;top:auto;max-height:none;overflow:visible}}@media (max-width:760px){.shell{padding-left:16px;padding-right:16px}.hero{padding:24px 20px}.hero-grid,.footer-grid,.quote-strip{grid-template-columns:1fr}.stats{grid-template-columns:1fr 1fr}.section-card,.references-card,.footer-card,.question-card,.figure-card{padding:20px 18px}.section-card p{font-size:17px}.hero .subtitle{font-size:24px}}

/* Research No. 03 keeps wide comparison tables scrollable within the article.
   Figure links open the original PNG so small exhibit labels remain readable. */
.liquidity-paper .main,.liquidity-paper .section-card{min-width:0}
.liquidity-paper .table-wrap{max-width:100%;margin:22px 0}
.liquidity-paper .table-wrap:focus-visible{outline:2px solid var(--ink);outline-offset:4px}
.liquidity-paper .research-table-wide{min-width:760px}
.liquidity-paper .research-table-six{min-width:1000px}
.liquidity-paper .publication-table th{width:28%;vertical-align:top}
.liquidity-paper .figure-card{margin:26px 0}
.liquidity-paper .figure-card h4{margin:0 0 18px;font-size:24px}
.liquidity-paper .figure-media{display:block;cursor:zoom-in}
.liquidity-paper .figure-media:focus-visible{outline:2px solid var(--ink);outline-offset:4px}
.liquidity-paper .figure-card .fig-source{font-size:13px;margin:12px 0 0}
.liquidity-paper .section-card{overflow-wrap:anywhere;scroll-margin-top:100px}
@media(max-width:760px){
  .liquidity-paper .figure-card{padding:16px 10px}
  .liquidity-paper .figure-card h4{font-size:20px}
  .liquidity-paper td,.liquidity-paper th{padding:12px;font-size:14px}
}

/* Research No. 04 shares the No. 03 shell and adds what a rates paper needs:
   two numbered equations, multi-series charts and a grouped monitor table.
   The charts are traced from the PDF of record and drawn in ink; series are
   told apart by weight, tone and dash rather than by colour, so the palette
   holds and dark mode follows the tokens. */
.policy-rate-paper .qgrid{stroke:var(--line)}
.policy-rate-paper .qline-thin{fill:none;stroke:var(--navy);stroke-width:1.6}
.policy-rate-paper .qline-soft{fill:none;stroke:#92a3b6;stroke-width:2.4}
.policy-rate-paper .qline-dash{fill:none;stroke:var(--navy);stroke-width:2;stroke-dasharray:7 5}
.policy-rate-paper .qarea,.policy-rate-paper .qbar{fill:var(--navy)}
.policy-rate-paper .qarea-soft,.policy-rate-paper .qbar-soft{fill:#92a3b6}
.policy-rate-paper .qbar-mid{fill:var(--navy);fill-opacity:.55}
.policy-rate-paper .qbar-out{stroke:var(--navy);stroke-width:1}
.policy-rate-paper .qhatch{stroke:var(--navy);stroke-width:1.5}
.policy-rate-paper .qmark{stroke:var(--navy);stroke-width:1;stroke-dasharray:2 4}
.policy-rate-paper .qconnector{stroke:var(--blue);stroke-width:1}
.policy-rate-paper .qleader{stroke:var(--blue);stroke-width:1}
.policy-rate-paper .qstem{stroke:var(--navy);stroke-width:1.5}
.policy-rate-paper .qlabel{fill:var(--ink);font-size:14px;font-family:inherit}
.policy-rate-paper .qval{fill:var(--navy);font-weight:700}
.policy-rate-paper .qann.qann-rev{fill:var(--bg)}
.policy-rate-paper .quant-chart-narrow svg{max-width:640px}
.policy-rate-paper .eq{display:flex;align-items:baseline;justify-content:center;gap:24px;margin:22px 0 26px;padding:14px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);font-size:20px;overflow-x:auto}
.policy-rate-paper .eq-no{margin-left:auto;font-size:14px;color:var(--blue)}
.policy-rate-paper .nref{font-size:.7em;line-height:0}
.policy-rate-paper .nref a{text-decoration:none;border-bottom:1px solid var(--line)}
.policy-rate-paper .notes li{scroll-margin-top:100px}
/* Exhibit 3: four separate cards, headings outside them, as in the PDF. The
   episode already past is tinted; the present one is set in reverse. */
.policy-rate-paper .regime{display:grid;grid-template-columns:150px 1fr 1fr;gap:10px;margin:24px 0}
.policy-rate-paper .regime-col,.policy-rate-paper .regime-row{font:600 11px/1.45 "Source Serif 4",Georgia,"PT Serif",serif;letter-spacing:.14em;text-transform:uppercase;color:var(--blue)}
.policy-rate-paper .regime-col{align-self:end;padding:0 0 2px 2px}
.policy-rate-paper .regime-row{align-self:center;padding-right:12px}
.policy-rate-paper .regime-cell{border:1px solid var(--line);padding:18px 20px 22px}
.policy-rate-paper .regime-cell em{display:block;margin-bottom:8px;font:700 11px/1.4 "Source Serif 4",Georgia,"PT Serif",serif;font-style:normal;letter-spacing:.12em;text-transform:uppercase;color:var(--blue)}
.policy-rate-paper .regime-cell b{display:block;margin-bottom:8px;font-size:18px;line-height:1.3;color:var(--navy)}
.policy-rate-paper .regime-cell span{display:block;font-size:15px;line-height:1.55}
.policy-rate-paper .regime-past{border-color:var(--ink);background:rgba(var(--ink-rgb),.04)}
.policy-rate-paper .regime-now{border-color:var(--ink);background:var(--ink)}
.policy-rate-paper .regime-now,.policy-rate-paper .regime-now b,.policy-rate-paper .regime-now em{color:var(--bg)}
.policy-rate-paper .regime-now em{opacity:.75}
/* dark: the ink tint vanishes on a dark ground, and a full reverse would be a
   bright slab, so both take the paper tint the dark highlight-card uses */
:root[data-theme="dark"] .policy-rate-paper .regime-past{background:rgba(var(--paper-rgb),.05)}
:root[data-theme="dark"] .policy-rate-paper .regime-now{background:rgba(var(--paper-rgb),.13);border-color:var(--navy)}
:root[data-theme="dark"] .policy-rate-paper .regime-now,:root[data-theme="dark"] .policy-rate-paper .regime-now b,:root[data-theme="dark"] .policy-rate-paper .regime-now em{color:var(--navy)}
.policy-rate-paper .mech.stages{grid-template-columns:repeat(3,1fr)}
.policy-rate-paper .mech.stages em{display:block;margin-top:10px;font-style:normal;font-weight:700;font-size:14px}
/* Exhibit 8 sets each value at the end of its own bar rather than in a far
   column; bars are scaled to 85% of the track so the longest value still fits */
.policy-rate-paper .compare-inline .crow{grid-template-columns:240px 1fr}
.policy-rate-paper .compare-inline .ctrack{display:flex;align-items:center}
.policy-rate-paper .compare-inline .cval{flex:none;margin-left:10px;text-align:left}
/* Tables wrap between words, never inside one; No. 03's anywhere-break is
   for long URLs in prose and was splitting scenario names mid-word */
.policy-rate-paper td,.policy-rate-paper th{overflow-wrap:normal;word-break:normal}
/* The four scenarios, one card each, in the setting of the Exhibit 3 cards */
.policy-rate-paper .scenarios{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:24px 0}
.policy-rate-paper .scenario{border:1px solid var(--line);border-top:2px solid var(--ink);padding:18px 20px 6px}
.policy-rate-paper .scenario-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 14px;padding-bottom:12px;margin-bottom:12px;border-bottom:1px solid var(--line)}
.policy-rate-paper .scenario-head b{font-size:18px;line-height:1.3;color:var(--navy)}
.policy-rate-paper .scenario-head span{font-size:14px;color:var(--blue)}
.policy-rate-paper .scenario-head strong{color:var(--navy)}
.policy-rate-paper .scenario dl{margin:0}
.policy-rate-paper .scenario dt{font:600 11px/1.45 "Source Serif 4",Georgia,"PT Serif",serif;letter-spacing:.12em;text-transform:uppercase;color:var(--blue)}
.policy-rate-paper .scenario dd{margin:3px 0 14px;font-size:15px;line-height:1.55}
.policy-rate-paper .loops{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin:24px 0}
.policy-rate-paper .loops ol{margin:0 0 12px;padding-left:22px}
.policy-rate-paper .loops li{font-size:16px;margin:0 0 8px}
.policy-rate-paper .monitor .group td{padding-top:20px;font:700 11px/1.4 "Source Serif 4",Georgia,"PT Serif",serif;letter-spacing:.08em;text-transform:uppercase;color:var(--blue);background:none}
.policy-rate-paper .house-view li{margin-bottom:14px}
/* scaled to a phone, the chart labels fall to five or six pixels; below 760px
   each chart keeps a legible width and pans sideways within its own frame */
@media(max-width:760px){
  .policy-rate-paper .quant-chart{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .policy-rate-paper .quant-chart svg{min-width:680px}
  .policy-rate-paper .quant-chart-narrow svg{min-width:520px}
  .policy-rate-paper .compare-inline .crow{grid-template-columns:1fr;gap:6px}
  .policy-rate-paper .scenarios{grid-template-columns:1fr}
  .policy-rate-paper .regime{grid-template-columns:1fr 1fr;gap:8px}
  .policy-rate-paper .regime-corner{display:none}
  .policy-rate-paper .regime-row{grid-column:1/-1;padding:10px 0 0}
  .policy-rate-paper .regime-cell{padding:14px 12px 16px}
  .policy-rate-paper .regime-cell b{font-size:16px}
  .policy-rate-paper .regime-cell span{font-size:14px}
  .policy-rate-paper .loops,.policy-rate-paper .mech.stages{grid-template-columns:1fr}
  .policy-rate-paper .eq{font-size:17px;justify-content:flex-start}
}

/* Supplied publication master adapted to the site's existing palette and
   Source Serif reading face. */
.publication-master{display:grid;gap:24px;min-width:0;color:var(--ink)}
.main.is-locked .publication-master{display:none}
.publication-revision{margin-top:22px;padding:13px 0;border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);font:600 12px/1.5 "Source Serif 4",Georgia,"PT Serif",serif;color:var(--blue)}
.publication-master .no,.publication-master .fn{font:700 11px/1.4 "Source Serif 4",Georgia,"PT Serif",serif;letter-spacing:.16em;text-transform:uppercase;color:var(--blue)}
.publication-master h1,.publication-master h2,.publication-master h3,.publication-master h4,.publication-master h5,.publication-master h6{font-family:inherit}
.publication-master .no,.publication-master .fn,.publication-master .clock h4{font-family:inherit}
.publication-master table{width:100%;border-collapse:collapse;margin:24px 0}
.publication-master th,.publication-master td{padding:13px 11px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.publication-master th{font:700 11px/1.4 "Source Serif 4",Georgia,"PT Serif",serif;letter-spacing:.08em;text-transform:uppercase;color:var(--blue)}
.publication-master .table-scroll{overflow-x:auto}
.publication-master .table-scroll table{min-width:760px;margin:0}
.publication-master .fig{margin:42px 0 28px;padding-top:16px;border-top:1px solid var(--ink)}
.publication-master .src{max-width:none;border-top:1px solid var(--line);padding-top:11px;margin-top:18px;font:12px/1.55 "Source Serif 4",Georgia,"PT Serif",serif;color:var(--blue)}
.publication-master .mech,.publication-master .metrics,.publication-master .case-strip{display:grid;grid-template-columns:repeat(5,1fr);border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);margin:24px 0}
.publication-master .mech div,.publication-master .metrics .metric,.publication-master .case-strip div{padding:16px;border-right:1px solid var(--line)}
.publication-master .mech div:last-child,.publication-master .metrics .metric:last-child,.publication-master .case-strip div:last-child{border-right:0}
.publication-master .mech b,.publication-master .case-strip b{display:block;font:700 11px/1.35 "Source Serif 4",Georgia,"PT Serif",serif;letter-spacing:.07em;text-transform:uppercase;margin-bottom:5px}
.publication-master .mech span,.publication-master .metrics span,.publication-master .case-strip span{font-size:14px;color:var(--blue)}
.publication-master .metrics{grid-template-columns:repeat(3,1fr)}
.publication-master .metrics strong{display:block;font-size:34px;line-height:1.05;margin-bottom:8px}
.publication-master .flowline,.publication-master .bars,.publication-master .compare{display:grid;gap:14px;margin:24px 0}
.publication-master .flowline{grid-template-columns:repeat(5,1fr)}
.publication-master .flowbox{border-top:2px solid var(--ink);padding:13px 10px;font:600 13px/1.4 "Source Serif 4",Georgia,"PT Serif",serif}
.publication-master .flowbox small{display:block;font-weight:400;color:var(--blue);margin-top:5px}
.publication-master .br,.publication-master .crow{display:grid;grid-template-columns:240px 1fr 85px;gap:15px;align-items:center}
.publication-master .bl,.publication-master .clabel{font:600 13px "Source Serif 4",Georgia,"PT Serif",serif}
.publication-master .track,.publication-master .ctrack{height:20px;border-bottom:1px solid #8793a0}
.publication-master .ctrack{position:relative;height:24px}
.publication-master .fill,.publication-master .cfill{height:100%;background:var(--navy)}
.publication-master .fill.light,.publication-master .cfill2{height:100%;background:#92a3b6}
.publication-master .bv,.publication-master .cval{font:700 15px "Source Serif 4",Georgia,"PT Serif",serif;text-align:right}
.publication-master .visual-map{display:grid;grid-template-columns:minmax(0,1fr) max-content minmax(0,1fr);gap:18px;align-items:stretch;margin:24px 0}
.publication-master .versus{display:flex;align-items:center;justify-content:center;white-space:nowrap;overflow-wrap:normal;word-break:normal}
.publication-master .clock{border-top:2px solid var(--ink);border-bottom:1px solid var(--line);padding:18px}
.publication-master .clock h4{margin:0 0 12px;font:700 11px "Source Serif 4",Georgia,"PT Serif",serif;letter-spacing:.1em;text-transform:uppercase}
.publication-master .quant-chart,.publication-master .depth-chart{overflow:hidden;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:14px 0}
.publication-master .figure-sub,.publication-master .evidence-note{font-size:16px;line-height:1.55;color:var(--muted)}
.publication-master .source-link{font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;text-decoration:none;border-bottom:1px solid var(--line)}
.publication-master .update{border-left:2px solid var(--ink);padding-left:22px;margin:28px 0}
.publication-master .update>b{font-size:11px;font-weight:600;letter-spacing:.09em;text-transform:uppercase}
.publication-master .pull{max-width:900px;margin:40px 0;padding:26px 0;border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);font-size:30px;line-height:1.4}
.publication-master svg{max-width:100%;height:auto}
.publication-master .quant-chart svg{display:block;width:100%;height:auto}
.publication-master .qgrid{stroke:#d0d5db;stroke-width:.8}
.publication-master .qaxisline{stroke:#6f7a89;stroke-width:1}
.publication-master .qaxis{fill:var(--muted);font-size:12px;font-family:inherit}
.publication-master .qline{fill:none;stroke:var(--navy);stroke-width:3}
.publication-master .qpoint{fill:var(--navy)}
.publication-master .qann{fill:var(--navy);font-size:16px;font-weight:bold;font-family:inherit}
.publication-master .statline{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:28px;border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);padding:18px 0;margin:24px 0}
.publication-master .statline div{min-width:0}
.publication-master .statline strong{display:block;white-space:nowrap;font-size:32px;line-height:1.05}
.publication-master .statline span{font-size:13px;line-height:1.4;color:var(--muted)}
@media(max-width:900px){.publication-master .statline{grid-template-columns:repeat(2,minmax(0,1fr))}}
.publication-master .matrix{display:grid;grid-template-columns:120px 1fr 1fr;border-top:1px solid var(--ink);border-left:1px solid var(--line)}
.publication-master .matrix>div{padding:16px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}
.publication-master .matrix .mh{font:700 11px "Source Serif 4",Georgia,"PT Serif",serif;letter-spacing:.08em;text-transform:uppercase}
.publication-master .matrix .good{background:rgba(var(--paper-rgb),.5)}
.publication-master .matrix .fragile{background:rgba(var(--paper-rgb),.8)}
@media(max-width:760px){.publication-master .mech,.publication-master .metrics,.publication-master .case-strip,.publication-master .flowline,.publication-master .visual-map{grid-template-columns:1fr}.publication-master .mech div,.publication-master .metrics .metric,.publication-master .case-strip div{border-right:0;border-bottom:1px solid var(--line)}.publication-master .br,.publication-master .crow{grid-template-columns:1fr}.publication-master .bv,.publication-master .cval{text-align:left}.publication-master .matrix{grid-template-columns:90px 1fr 1fr}}

/* email gate
   Two states on one page: the access view (hero, executive summary, form) and
   the paper itself. Locked, every section below the gate is withheld and the
   contents rail with it, so the access view reads as its own page rather than
   as a paper with holes in it. */
.main.is-locked > section:not(.hero):not(.gate){display:none}
.main:not(.is-locked) > .gate{display:none}
.shell:has(.main.is-locked) .sidebar{display:none}
.shell:has(.main.is-locked){grid-template-columns:minmax(0,1fr)}
.gate{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(330px,.85fr);
  gap:64px;padding:34px 30px 38px;border-top:1px solid var(--line);
  border-bottom:1px solid var(--line)}
.gate-label{font-size:12px;font-weight:700;letter-spacing:.12em;
  text-transform:uppercase;color:var(--ink);margin-bottom:14px}
.gate ul{margin:0;padding-left:22px}
.gate li{font-size:17px;line-height:1.55;margin:0 0 14px;padding-left:4px;
  font-family:Georgia,"Times New Roman",serif}
/* the paper's physical facts, set apart from the argument by a hairline */
.gate-facts{display:flex;gap:10px 22px;flex-wrap:wrap;margin-top:24px;
  padding-top:18px;border-top:1px solid var(--line);font-size:12px;
  letter-spacing:.06em;text-transform:uppercase;color:var(--ink)}
/* the form is a column of its own, divided from the summary by a single rule */
.gate-form{border-left:1px solid var(--line);padding-left:42px;align-self:start}
.gate-form h3{margin:0;font-size:26px;line-height:1.2;letter-spacing:-.02em}
.gate-copy{margin:12px 0 22px;font-size:15px;line-height:1.55}
.gate-field{width:100%;border:0;border-bottom:1px solid var(--ink);
  background:transparent;padding:12px 2px 10px;outline:none;font:inherit;
  font-size:15px;color:var(--ink);border-radius:0}
.gate-submit{margin-top:22px;border:0;background:transparent;padding:0 0 4px;
  border-bottom:1px solid var(--ink);font:inherit;font-size:14px;
  font-weight:700;cursor:pointer;color:var(--ink)}
.gate-submit:hover{opacity:.6}
/* its own hover outranks the site-wide press rule, so the press is stated here */
.gate-submit:active{opacity:.4;transform:translateY(1px)}
/* consent: the Privacy Notice acknowledgement is required, the research list
   is not, so the two sit either side of a rule under an Optional heading */
.gate-check{display:flex;align-items:flex-start;gap:11px;margin-top:22px;
  font-size:13px;line-height:1.55;cursor:pointer}
/* the same box the correspondence form uses (.fcheck input, site.css) — the
   platform control, reset out of the site-wide input rule that would otherwise
   stretch it. site.css sets padding:12px 0 on every input, and with
   box-sizing:border-box in force here that padding overran the box's own height
   and rendered it as a tall rectangle rather than a square. */
.gate-check input{width:auto;flex:none;margin:4px 0 0;padding:0;cursor:pointer}
.gate-check a,.gate-note a{border-bottom:1px solid var(--ink)}
.gate-check a:hover,.gate-note a:hover{opacity:.6}
.gate-req{font-size:12px}
.gate-rule{margin-top:22px;border-top:1px solid var(--line)}
.gate-sublabel{margin:22px 0 0}
.gate-note{margin:12px 0 0 26px;font-size:12px;line-height:1.55}
.gate-status{min-height:18px;margin-top:12px;font-size:13px}
/* shown once, on the visit that opened the paper */
.confirmation{margin:0 0 4px;padding:16px 18px;border-left:2px solid var(--ink);
  font-size:13px;line-height:1.55;max-width:720px}
@media(max-width:1000px){
  .gate{grid-template-columns:1fr;gap:32px;padding:28px 22px 30px}
  .gate-form{border-left:0;border-top:1px solid var(--line);
    padding-left:0;padding-top:28px}
}

/* The contents fold. One control in two placements: .toc-fold, which paper.njk
   builds inside the sidebar's .toc-card, and the .pm-toc clone below. Folding
   matters on desktop because the pinned rail is taller than the window — folded,
   the mini-cards come into view. The summary carries .toc-title's setting; the
   chevron is two borders rotated, so it needs no glyph and takes its colour from
   the text. */
.toc-fold>summary,.pm-toc>details>summary{list-style:none;cursor:pointer;
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  font-size:12px;letter-spacing:.12em;text-transform:uppercase;
  font-weight:800;color:var(--blue)}
.toc-fold>summary::-webkit-details-marker,
.pm-toc>details>summary::-webkit-details-marker{display:none}
.toc-fold>summary::after,.pm-toc>details>summary::after{content:"";
  flex:0 0 auto;width:8px;height:8px;
  border-right:2px solid currentColor;border-bottom:2px solid currentColor;
  transform:translateY(-2px) rotate(45deg);transition:transform .2s ease}
.toc-fold[open]>summary::after,
.pm-toc>details[open]>summary::after{transform:translateY(2px) rotate(-135deg)}
/* the 12px .toc-title used to hold under its heading */
.toc-fold[open]>.toc-list{margin-top:12px}

/* Mobile reading order. The .pm-* sections are clones built by paper.njk; they
   exist in the DOM at every width but are inert above 760px, so the desktop
   sidebar column is unaffected. Kept in this order — base rule first, then the
   query — because both are single-class selectors and the later one wins.
   .main.is-locked > section:not(.hero):not(.gate) already hides both behind the
   gate at (0,4,1), so no extra locked-state rule is needed. */
.pm-mini,.pm-toc{display:none}
@media (max-width:760px){
  .sidebar{display:none}
  .pm-mini,.pm-toc{display:block}
  /* site.css sets a bare section{padding:72px 0}; .pm-toc escapes it via
     .toc-card's own padding, .pm-mini has to opt out. Spacing is left to
     .main's 24px grid gap so the clones keep the page's rhythm. */
  .pm-mini{padding:0}
  .pm-mini .mini-stack{margin-top:0}
  .pm-toc>details>.toc-list{margin-top:14px}
}

/* ── Dark mode ───────────────────────────────────────────────
   The palette moved to site.css, which every page loads — declared here it
   reached the notes and nothing else, so a reader in dark got a dark article
   and a cream site around it. What stays below is only what is particular to
   an article: the two blocks that take their emphasis by inverting, and the
   raster exhibits, none of which exist anywhere but on a paper. */
:root[data-theme="dark"] .highlight-card{background:rgba(var(--paper-rgb),.055);
  border:1px solid rgba(var(--paper-rgb),.22);color:var(--ink)}
:root[data-theme="dark"] .highlight-card h3{color:var(--navy)}
:root[data-theme="dark"] .highlight-card p{color:var(--ink)}
:root[data-theme="dark"] th{background:rgba(var(--paper-rgb),.085);color:var(--navy)}
:root[data-theme="dark"] tr:nth-child(even) td{background:rgba(var(--paper-rgb),.03)}
/* The exhibits are raster PNGs drawn on white. Inverting them would recolour
   the data, so each keeps its own light plate — an exhibit pasted onto the
   page — held just off full white so it does not glare against the ground. */
:root[data-theme="dark"] .figure-media{background:#FAF8F4;
  border-color:rgba(var(--paper-rgb),.22)}
:root[data-theme="dark"] .figure-media img{filter:brightness(.93) contrast(1.02)}
:root[data-theme="dark"] ::selection{background:rgba(var(--paper-rgb),.22)}

/* ══ MOBILE — the paper's opening ══════════════════════════════════════════
   The hero measured 1,490px on a phone: nearly two screens of front matter
   before the reader reaches the gate, let alone the argument. 943px of that
   was .hero-grid — the standing highlight and the four figures — which is
   supporting apparatus rather than the opening, and it was running in a single
   column because the 640px clamp at the head of this sheet forces 1fr on
   .stats to stop the cards overflowing.

   The clamp is the wrong instrument at 380px and up: two columns fit there
   comfortably, and the figures read better as a block of four than as a list.
   Restated with !important because that is what the rule it has to outrank
   carries; below 380px the original stack is left alone. */
@media(max-width:900px) and (min-width:380px){
  .hero .stats{grid-template-columns:1fr 1fr!important}
}
@media(max-width:900px){
  /* the figures are a summary, not the argument — they are set a step down
     from the reading sizes so four of them cost the opening less */
  .hero .stat{padding:14px 15px}
  .hero .stat .value{font-size:21px}
  .hero .stat .label{margin-bottom:6px}
  .hero .stat .desc{margin-top:5px;line-height:1.45}
  .hero .highlight-card{padding:17px 18px}
  .hero .highlight-card h3{font-size:17px}
  .hero .highlight-card p{font-size:14.5px;line-height:1.55}
  .hero-grid{gap:12px;margin-top:20px}
  .hero .stats{gap:12px}
  /* the pills wrapped to three rows at this width; the rule between them is
     enough to separate them without a box around each */
  .hero .meta{gap:8px 12px}
  .hero .meta-pill{padding:6px 10px;font-size:13px}
}

/* ── RESPONSE ──────────────────────────────────────────────────────────────
   The paper answered nothing: the contents hover set --soft, which is the page
   colour itself, and the headings were inert. Contents rows now darken under
   the pointer and darken further while pressed; headings lift a step under
   the pointer and sink on a tap. The tints are mixed from --ink so they hold in
   both themes. Scaling is a transform, so nothing around a heading reflows. */
.toc-list a:hover{background:color-mix(in srgb,var(--ink) 8%,transparent);color:var(--ink)}
.toc-list a:active{background:color-mix(in srgb,var(--ink) 14%,transparent)}
#paper :is(h1,h2,h3,h4,h5):not(.gate *){transform-origin:left center;transition:transform .22s ease}
@media(hover:hover){
  #paper :is(h1,h2,h3,h4,h5):not(.gate *):hover{transform:scale(1.02)}
}
#paper :is(h1,h2,h3,h4,h5):not(.gate *):active{transform:scale(.99)}
