/* ============================================================================
   editorial.css  ·  research.appliedidentities.com — R2 content-type layer
   ----------------------------------------------------------------------------
   The LIGHT EDITORIAL SURFACE, ARCHIVE, and FRONT PAGE sections. Loaded AFTER
   estate.css, which supplies the dark chrome, the design tokens (--sans/--mono/
   --serif/--measure/--wrap/palette) and the self-hosted @font-face set. R1
   continuity: the dark estate header/footer bars wrap this light paper surface;
   no chrome color is redefined here. Scoped to <main class="editorial">.
   No JavaScript is required to read anything styled by this file.
   Source of record: docs/3jane-contentmodel-2026-07/assets/research-editorial.css
   (reference collapsed to estate.css + this addition, per BUILD-NOTE 2026-07-23).
   ============================================================================ */

/* ============================================================================
   LIGHT EDITORIAL SURFACE  ·  R2 content-type exception (adopted 2026-07-23)
   Scoped to <main class="editorial">. Full-bleed paper between the dark bars.
   ============================================================================ */
.editorial{
  /* light tokens override inside the editorial region only */
  --paper:#FBFAF7; --paper-2:#F4F2EC; --paper-3:#ECE9E1;
  --ink:#1B1E23; --ink-2:#3E444D; --ink-3:#767D88; --hair:#E4E0D7;
  /* on-light AAI category palette (jump prompt §2d; validated categorical) */
  --org:#0B6FB8; --brand:#8A6300; --product:#0A8A5A;
  --edit-action:#2F40FF;
  background:var(--paper); color:var(--ink);
  font-family:var(--sans); font-size:16px; line-height:1.65;
}
.editorial .sheet{max-width:940px; margin:0 auto; padding:44px 24px 88px;}
.editorial a{color:var(--ink); text-decoration:none; border-bottom:1.5px solid var(--edit-action); padding-bottom:.5px;}
.editorial a:hover{color:var(--edit-action);}
.editorial .eyebrow{font-family:var(--sans); font-size:12px; font-weight:600; letter-spacing:.1em; text-transform:uppercase; color:var(--ink-3);}
.editorial .mono{font-family:var(--mono); font-size:12.5px; letter-spacing:.02em;}
.editorial hr.rule{border:0; border-top:1px solid var(--hair); margin:36px 0;}

/* --- issue masthead (serif) --- */
.ed-masthead{border-bottom:2px solid var(--ink); padding-bottom:16px; margin-bottom:8px;}
.ed-masthead .kicker{font-family:var(--sans); font-size:12px; font-weight:600; letter-spacing:.14em; text-transform:uppercase; color:var(--org);}
.ed-masthead h1{font-family:var(--serif); font-weight:600; font-size:clamp(30px,5vw,46px); line-height:1.08; letter-spacing:-.01em; margin:.28em 0 .18em;}
.ed-masthead .standfirst{font-family:var(--serif); font-style:italic; font-size:19px; line-height:1.45; color:var(--ink-2); max-width:60ch; margin:0;}
.ed-dateline{display:flex; flex-wrap:wrap; align-items:center; gap:8px 16px; margin-top:16px; font-size:13px; color:var(--ink-3);}
.ed-dateline .mono{color:var(--ink-2);}
.ed-byline{font-size:14px; color:var(--ink-2); margin-top:4px;}
/* signed-record indicator — a designed row, NOT a link to raw JSON (verification-UX law) */
.signed-row{display:flex; flex-wrap:wrap; align-items:center; gap:8px 14px; margin-top:14px;
  background:var(--paper-2); border:1px solid var(--hair); border-radius:8px; padding:9px 14px; font-size:12.5px; color:var(--ink-2);}
.signed-row .dot{width:7px; height:7px; border-radius:50%; background:var(--product); flex:none;}
.signed-row .mono{color:var(--ink-3);}

/* --- AAI standing fixture: maturity band-position bar --- */
.fixture{background:var(--paper-2); border:1px solid var(--hair); border-radius:12px; padding:20px 22px; margin:26px 0;}
.fixture .fx-head{display:flex; justify-content:space-between; align-items:baseline; gap:12px; margin-bottom:16px;}
.fixture .fx-head h3{font-family:var(--sans); font-size:13px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--ink-2); margin:0;}
.fixture .fx-head .when{font-size:12px; color:var(--ink-3);}
/* The needle must land ON the band, not under it. Two rules make that true and
   keep it true regardless of how tall the label/value text renders:
     · the marker is anchored bottom:100% — its box ends exactly at the track's
       top edge, so the pin can start there with `top:100%` and run the track's
       own height. (The old `top:-26px` + fixed 44px pin assumed a text height;
       when the text ran taller the pin slid down and overshot the band.)
     · the marker gets a z-index above the track. Both are positioned and the
       track comes second in the DOM, so at z-index:auto the opaque segments
       painted over the pin and only the overshoot below the band stayed visible.
   CSS-only by design: every already-rendered issue in output/ picks this up
   without a re-render. */
.bandbar{position:relative; margin:46px 0 8px;}
.bandbar .track{position:relative; z-index:0; height:30px; border-radius:6px; overflow:hidden; display:flex;}
.bandbar .seg{flex:1; border-right:1px solid var(--paper);}
.bandbar .seg:last-child{border-right:0;}
.bandbar .seg.b1{background:#EDE7DD;} .bandbar .seg.b2{background:#E4DCCB;}
.bandbar .seg.b3{background:#D6E4DE;} .bandbar .seg.b4{background:#C7DBE8;} .bandbar .seg.b5{background:#BFD3EA;}
.bandbar .bandlabels{display:flex; margin-top:6px; font-size:10.5px; color:var(--ink-3); letter-spacing:.02em;}
.bandbar .bandlabels span{flex:1; text-align:center;}
.bandbar .marker{position:absolute; bottom:100%; z-index:2; padding-bottom:5px; transform:translateX(-50%); text-align:center; white-space:nowrap;}
.bandbar .marker .pin{position:absolute; top:100%; left:50%; transform:translateX(-50%);
  width:2px; height:30px; background:var(--ink);
  /* a hairline of paper so the needle reads against all five segment fills */
  box-shadow:0 0 0 1px rgba(251,250,247,.85);}
.bandbar .marker .lab{font-size:11px; font-weight:600; line-height:1.1;}
.bandbar .marker .val{font-family:var(--mono); font-size:12px; font-weight:500; line-height:1.25;}
.bandbar .marker.overall .pin{background:var(--ink); width:3px;}
.bandbar .marker.org .pin{background:var(--org);} .bandbar .marker.org .lab{color:var(--org);}
.bandbar .marker.brand .pin{background:var(--brand);} .bandbar .marker.brand .lab{color:var(--brand);}
.bandbar .marker.product .pin{background:var(--product);} .bandbar .marker.product .lab{color:var(--product);}
.fx-legend{display:flex; flex-wrap:wrap; gap:6px 18px; margin-top:20px; font-size:12.5px; color:var(--ink-2);}
.fx-legend .k{display:inline-flex; align-items:center; gap:7px;}
.fx-legend .sw{width:11px; height:11px; border-radius:2px; flex:none;}
/* three category composites as stacked mini band-bars (avoids pin crowding) */
.catbars{margin-top:22px; display:grid; gap:10px;}
.catbar{display:grid; grid-template-columns:96px 1fr 42px; align-items:center; gap:12px;}
.catbar .cb-lab{font-size:12.5px; font-weight:600;}
.catbar.org .cb-lab{color:var(--org);} .catbar.brand .cb-lab{color:var(--brand);} .catbar.product .cb-lab{color:var(--product);}
.catbar .cb-track{position:relative; height:10px; border-radius:5px; background:var(--paper-3); overflow:visible;}
.catbar .cb-fill{position:absolute; left:0; top:0; bottom:0; border-radius:5px;}
.catbar.org .cb-fill{background:var(--org);} .catbar.brand .cb-fill{background:var(--brand);} .catbar.product .cb-fill{background:var(--product);}
.catbar .cb-val{font-family:var(--mono); font-size:12.5px; font-weight:600; text-align:right; color:var(--ink-2);}
.catbar .cb-ticks{position:absolute; inset:0; display:flex;} .catbar .cb-ticks i{flex:1; border-right:1px solid var(--paper);} .catbar .cb-ticks i:last-child{border:0;}

/* --- 15-dimension heatmap (centerpiece) --- */
.heatmap{margin:8px 0 4px;}
.heatmap .hm-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:14px;}
.heatmap .col > .col-head{display:flex; align-items:baseline; justify-content:space-between; gap:8px; padding:0 0 8px; border-bottom:2px solid; margin-bottom:8px;}
.heatmap .col.org > .col-head{border-color:var(--org);} .heatmap .col.brand > .col-head{border-color:var(--brand);} .heatmap .col.product > .col-head{border-color:var(--product);}
.heatmap .col-head .cname{font-family:var(--sans); font-size:13px; font-weight:700; letter-spacing:.04em; text-transform:uppercase;}
.heatmap .col.org .cname{color:var(--org);} .heatmap .col.brand .cname{color:var(--brand);} .heatmap .col.product .cname{color:var(--product);}
.heatmap .col-head .composite{font-family:var(--mono); font-size:13px; font-weight:500; color:var(--ink-2);}
.heatmap .cell{display:flex; align-items:center; justify-content:space-between; gap:8px; border:1px solid var(--hair);
  border-radius:7px; padding:9px 11px; margin-bottom:7px;}
.heatmap .cell .dim{font-size:12.5px; line-height:1.25; color:var(--ink);}
.heatmap .cell .sc{font-family:var(--mono); font-size:13px; font-weight:600; flex:none;}
.heatmap .cell .bnd{font-size:9.5px; letter-spacing:.06em; text-transform:uppercase; color:var(--ink-3); display:block; margin-top:2px;}
.hm-scale{display:flex; align-items:center; gap:10px; margin-top:14px; font-size:11.5px; color:var(--ink-3);}
.hm-scale .ramp{display:flex; height:9px; width:180px; border-radius:3px; overflow:hidden;}
.hm-scale .ramp i{flex:1;}

/* --- editorial items (each addressable via #item-{slug}) --- */
.item{padding-top:30px; margin-top:30px; border-top:1px solid var(--hair); position:relative; scroll-margin-top:84px;}
.item:first-of-type{border-top:0;}
.item .item-eyebrow{display:inline-flex; align-items:center; gap:7px;}
.item .item-eyebrow .cat-dot{width:9px; height:9px; border-radius:2px; flex:none;}
.item .item-eyebrow.org .cat-dot{background:var(--org);} .item .item-eyebrow.brand .cat-dot{background:var(--brand);} .item .item-eyebrow.product .cat-dot{background:var(--product);}
.item h2{font-family:var(--serif); font-weight:600; font-size:clamp(23px,3.4vw,31px); line-height:1.14; letter-spacing:-.01em; margin:.3em 0 .25em;}
.item .dek{font-family:var(--serif); font-style:italic; font-size:18px; color:var(--ink-2); margin:0 0 14px; max-width:62ch;}
.item .prose{font-family:var(--serif); font-size:19px; line-height:1.62; color:var(--ink); max-width:var(--measure);}
.item .prose p{margin:0 0 1em;} .item .prose h3{font-family:var(--sans); font-size:16px; font-weight:700; margin:1.6em 0 .5em;}
.item .prose code{font-family:var(--mono); font-size:.82em; background:var(--paper-2); padding:1px 5px; border-radius:4px;}
.item-anchor{position:absolute; left:-26px; top:31px; font-size:18px; color:var(--ink-3); opacity:0; border:0; transition:opacity .12s;}
.item:hover .item-anchor,.item-anchor:focus{opacity:1;}
@media(max-width:720px){.item-anchor{position:static; opacity:.6; margin-bottom:6px; display:inline-block;}}
/* citation-as-source (never endorsement framing) */
.sources{margin:16px 0 0; padding:12px 0 0; border-top:1px dotted var(--hair); font-size:13px; color:var(--ink-3);}
.sources .lbl{font-family:var(--sans); font-weight:600; letter-spacing:.06em; text-transform:uppercase; font-size:10.5px; color:var(--ink-3); margin-right:8px;}
.sources ol{display:inline; margin:0; padding:0; list-style:none;}
.sources li{display:inline;} .sources li::after{content:" · ";} .sources li:last-child::after{content:"";}

/* --- movers (weekly change) --- */
.movers{display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:12px; margin-top:14px;}
.mover{border:1px solid var(--hair); border-radius:9px; padding:12px 14px; background:var(--paper);}
.mover .mv-top{display:flex; align-items:center; gap:8px; font-size:11px; letter-spacing:.06em; text-transform:uppercase; color:var(--ink-3);}
.mover .mv-arrow{font-family:var(--mono); font-weight:600;}
.mover .mv-up{color:var(--product);} .mover .mv-down{color:var(--brand);} .mover .mv-flat{color:var(--ink-3);}
.mover .mv-dim{font-family:var(--serif); font-size:16px; margin:6px 0 3px; color:var(--ink);}
.mover .mv-delta{font-family:var(--mono); font-size:13px; color:var(--ink-2);}
.mover .mv-why{font-size:12.5px; color:var(--ink-3); margin-top:5px; line-height:1.4;}

/* --- agent x402 rail (machine surface; no human CTA to raw JSON) --- */
.agent-rail{background:var(--paper-2); border:1px solid var(--hair); border-radius:12px; padding:20px 22px; margin:30px 0;}
.agent-rail h3{font-family:var(--sans); font-size:13px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--ink-2); margin:0 0 4px;}
.agent-rail .sub{font-size:13px; color:var(--ink-3); margin:0 0 14px; max-width:64ch;}
.agent-rail .route{display:flex; flex-wrap:wrap; align-items:center; gap:8px 12px; padding:9px 0; border-top:1px solid var(--hair); font-size:13px;}
.agent-rail .route:first-of-type{border-top:0;}
.agent-rail .route .path{font-family:var(--mono); font-size:12.5px; color:var(--ink); flex:none;}
.agent-rail .route .what{color:var(--ink-2); flex:1; min-width:150px;}
.agent-rail .route .price{font-family:var(--mono); font-weight:600; color:#7A6412;}
.agent-rail .free-note{margin-top:14px; font-size:13px; color:var(--product); display:flex; align-items:center; gap:8px;}
.agent-rail .free-note::before{content:""; width:8px; height:8px; border-radius:50%; background:var(--product);}

/* --- methodology --- */
.method{margin-top:30px; background:var(--paper-2); border:1px solid var(--hair); border-radius:12px; padding:24px;}
.method h3{font-family:var(--serif); font-size:22px; font-weight:600; margin:0 0 10px;}
.method p{font-size:14.5px; line-height:1.6; color:var(--ink-2); max-width:72ch;}
.method .band-key{display:flex; flex-wrap:wrap; gap:6px 10px; margin:14px 0;}
.method .band-key .bk{font-size:11.5px; padding:3px 9px; border-radius:999px; border:1px solid var(--hair); color:var(--ink-2);}
.method .attrib{font-size:12.5px; color:var(--ink-3); margin-top:12px; border-top:1px dotted var(--hair); padding-top:12px;}

/* ============================================================================
   ARCHIVE surface (Deliverable 2) — same editorial tokens
   ============================================================================ */
.archive-head{border-bottom:2px solid var(--ink); padding-bottom:14px; margin-bottom:22px;}
.archive-head .kicker{font-family:var(--sans); font-size:12px; font-weight:600; letter-spacing:.14em; text-transform:uppercase; color:var(--org);}
.archive-head h1{font-family:var(--serif); font-weight:600; font-size:clamp(28px,4.6vw,40px); line-height:1.08; margin:.24em 0 .12em;}
.archive-head .standfirst{font-family:var(--serif); font-style:italic; font-size:18px; color:var(--ink-2); margin:0; max-width:62ch;}
.arch-layout{display:grid; grid-template-columns:210px 1fr; gap:34px;}
@media(max-width:760px){.arch-layout{grid-template-columns:1fr; gap:20px;}}
.filter-rail{position:sticky; top:84px; align-self:start; font-size:13px;}
.filter-rail h4{font-family:var(--sans); font-size:11px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:var(--ink-3); margin:0 0 8px;}
.filter-rail .frgroup{margin-bottom:22px;}
.filter-rail a{display:block; color:var(--ink-2); border:0; padding:3px 0;}
.filter-rail a:hover{color:var(--edit-action);}
.filter-rail .sw{display:inline-block; width:9px; height:9px; border-radius:2px; margin-right:7px; vertical-align:baseline;}
@media(max-width:760px){.filter-rail{position:static;} .filter-rail .frgroup{margin-bottom:12px;} .filter-rail a{display:inline-block; margin-right:16px;}}
details.month{border-top:1px solid var(--hair); padding:2px 0;}
details.month > summary{cursor:pointer; list-style:none; display:flex; align-items:baseline; justify-content:space-between;
  padding:14px 2px; font-family:var(--sans); font-weight:600; font-size:15px; color:var(--ink);}
details.month > summary::-webkit-details-marker{display:none;}
details.month > summary .count{font-family:var(--mono); font-size:12px; font-weight:400; color:var(--ink-3);}
details.month > summary::before{content:"▸"; color:var(--ink-3); margin-right:10px; font-size:11px; transition:transform .12s;}
details.month[open] > summary::before{transform:rotate(90deg);}
.issue-row{display:flex; flex-wrap:wrap; align-items:baseline; gap:6px 14px; padding:11px 2px 11px 24px; border-top:1px dotted var(--hair);}
.issue-row .date{font-family:var(--mono); font-size:12px; color:var(--ink-3); width:96px; flex:none;}
.issue-row .headline{font-family:var(--serif); font-size:17px; color:var(--ink);}
.issue-row .headline a{border-bottom-color:transparent;} .issue-row .headline a:hover{border-bottom-color:var(--edit-action);}
.issue-row .tag{font-size:10.5px; letter-spacing:.05em; text-transform:uppercase; color:var(--ink-3); border:1px solid var(--hair); border-radius:999px; padding:1px 8px;}
.issue-row .items{width:100%; padding-left:110px; margin-top:2px; font-size:12.5px; color:var(--ink-3);}
.issue-row .items a{color:var(--ink-3); border:0;}
.issue-row .items a:hover{color:var(--edit-action);}
@media(max-width:720px){.issue-row .items{padding-left:0;}}
.url-legend{margin-top:34px; background:var(--paper-2); border:1px solid var(--hair); border-radius:10px; padding:18px 20px;}
.url-legend h4{font-family:var(--sans); font-size:11px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:var(--ink-3); margin:0 0 10px;}
.url-legend .row{display:flex; flex-wrap:wrap; gap:6px 12px; font-size:12.5px; padding:4px 0; color:var(--ink-2);}
.url-legend .row .u{font-family:var(--mono); color:var(--ink);}
.machine-feed{margin-top:16px; font-size:13px; color:var(--ink-3); display:flex; align-items:center; gap:9px;}
.machine-feed .pill-mf{font-family:var(--sans); font-size:10.5px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:#7A6412; background:rgba(248,210,41,.16); border-radius:999px; padding:2px 9px;}

/* ============================================================================
   FRONT PAGE (Deliverable / task a) — same editorial tokens, FT-markets density
   ----------------------------------------------------------------------------
   The landing is the newsletter front page (R5). Story-level decomposition:
   the strongest Daily Brief item leads, secondaries + a news rail sit beside a
   standing AAI data fixture (the FT markets-page pattern). Every module is
   datestamped; the AAI panel REUSES the .fixture/.bandbar/.catbar component from
   the issue page verbatim. Static-first: no JS to read anything. The front page
   uses a slightly wider sheet than an article and a denser type scale.
   ============================================================================ */
/* Top padding trimmed from 34px: the masthead now sits above .sheet rather than
   inside it, so the sheet no longer has to open with the publication name. */
.editorial.front-page .sheet{max-width:1080px; padding-top:22px;}

/* The front masthead (.front-masthead / .front-nav) moved to estate.css as
   .jane-mast — it stopped being a front-page-only component. Every research page
   renders it from partials/jane-masthead.ejs, so the front page can no longer
   drift away from the rest of the publication. */

/* --- top grid: lead package (wide) + AAI standing panel (rail) --- */
.front-grid{display:grid; grid-template-columns:minmax(0,1.7fr) minmax(0,1fr); gap:34px; align-items:start;}
@media(max-width:840px){.front-grid{grid-template-columns:1fr; gap:26px;}}
.front-grid .fixture{margin:0;}

/* lead package */
.lead-kicker{font-family:var(--sans); font-size:11.5px; font-weight:700; letter-spacing:.12em; text-transform:uppercase; color:var(--org); margin-bottom:6px;}
.lead-hed{font-family:var(--serif); font-weight:600; font-size:clamp(27px,3.9vw,38px); line-height:1.08; letter-spacing:-.01em; margin:0 0 10px;}
.lead-hed a{border:0; color:var(--ink);}
.lead-hed a:hover{color:var(--edit-action);}
.lead-dek{font-family:var(--serif); font-style:italic; font-size:18px; line-height:1.45; color:var(--ink-2); margin:0 0 6px; max-width:56ch;}
.lead-meta{font-family:var(--mono); font-size:12px; color:var(--ink-3); margin:8px 0 0;}
.secondaries{display:grid; grid-template-columns:1fr 1fr; gap:16px 22px; margin-top:16px; border-top:1px solid var(--hair); padding-top:14px;}
@media(max-width:520px){.secondaries{grid-template-columns:1fr;}}
.sec{display:block;}
.sec .sk{font-family:var(--sans); font-size:10.5px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--ink-3);}
.sec .sh{font-family:var(--serif); font-size:17px; line-height:1.2; color:var(--ink); margin:4px 0 0; display:block; border:0;}
.sec .sh:hover{color:var(--edit-action);}

/* --- news rail: 4-across dated brief items, Today / Yesterday --- */
.news-rail{margin-top:24px; border-top:1px solid var(--hair); padding-top:16px;}
.news-rail > h3{font-family:var(--sans); font-size:11px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:var(--ink-3); margin:0 0 12px;}
.news-rail .rail-grid{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:18px;}
@media(max-width:840px){.news-rail .rail-grid{grid-template-columns:1fr 1fr;}}
@media(max-width:460px){.news-rail .rail-grid{grid-template-columns:1fr;}}
.rail-item{display:block; border-left:2px solid var(--hair); padding-left:12px;}
.rail-item .when{font-family:var(--sans); font-size:9.5px; font-weight:700; letter-spacing:.09em; text-transform:uppercase; color:var(--ink-3);}
.rail-item .rh{font-family:var(--serif); font-size:15px; line-height:1.22; color:var(--ink); margin:4px 0 0; display:block; border:0;}
.rail-item .rh:hover{color:var(--edit-action);}
.rail-item .rd{font-family:var(--mono); font-size:11px; color:var(--ink-3); margin-top:5px;}

/* --- weekly feature band: two modules, labeled "This week" --- */
.feature-band{display:grid; grid-template-columns:1fr 1fr; gap:20px; margin-top:30px;}
@media(max-width:720px){.feature-band{grid-template-columns:1fr;}}
.feature{background:var(--paper-2); border:1px solid var(--hair); border-radius:12px; padding:18px 20px;}
.feature .fk{display:flex; flex-wrap:wrap; align-items:baseline; justify-content:space-between; gap:8px; font-family:var(--sans); font-size:10.5px; font-weight:700; letter-spacing:.09em; text-transform:uppercase; color:var(--ink-3);}
.feature .fk .when{font-family:var(--mono); font-weight:400; letter-spacing:.02em; color:var(--ink-3);}
.feature .fh{font-family:var(--serif); font-size:20px; line-height:1.15; color:var(--ink); margin:8px 0 0; display:block; border:0;}
.feature .fh:hover{color:var(--edit-action);}
.feature .fsupport{margin-top:10px; padding-top:10px; border-top:1px solid var(--hair); font-size:13px; color:var(--ink-2); line-height:1.5;}
.feature .fsupport .lbl{font-family:var(--sans); font-size:10px; font-weight:700; letter-spacing:.07em; text-transform:uppercase; color:var(--ink-3); display:block; margin-bottom:3px;}

/* --- publication footer band (in-sheet): archive · catalog · x402 machine rail --- */
.pub-footer{margin-top:34px; border-top:2px solid var(--ink); padding-top:16px;}
.pub-footer .pf-links{display:flex; flex-wrap:wrap; gap:8px 22px; font-family:var(--sans); font-size:13px; font-weight:600;}
.pub-footer .pf-x402{margin-top:16px; background:var(--paper-2); border:1px solid var(--hair); border-radius:10px; padding:14px 16px;}
.pub-footer .pf-x402 h4{font-family:var(--sans); font-size:10.5px; font-weight:700; letter-spacing:.09em; text-transform:uppercase; color:var(--ink-2); margin:0 0 3px;}
.pub-footer .pf-x402 .sub{font-size:12.5px; color:var(--ink-3); margin:0 0 10px; max-width:66ch;}
.pub-footer .pf-x402 .route{display:flex; flex-wrap:wrap; align-items:center; gap:8px 12px; padding:7px 0; border-top:1px solid var(--hair); font-size:12.5px;}
.pub-footer .pf-x402 .route:first-of-type{border-top:0;}
.pub-footer .pf-x402 .route .path{font-family:var(--mono); font-size:12px; color:var(--ink); flex:none;}
.pub-footer .pf-x402 .route .what{color:var(--ink-2); flex:1; min-width:150px;}
.pub-footer .pf-x402 .route .price{font-family:var(--mono); font-weight:600; color:#7A6412;}

/* --- sector-vs-baseline (SCAFFOLD; gated pending Daniel's claimability ruling) --- */
.sector-baseline{margin-top:26px; background:var(--paper-2); border:1px dashed var(--brand); border-radius:12px; padding:16px 20px; display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:14px;}
.sector-baseline .sb-k{font-family:var(--sans); font-size:10.5px; font-weight:700; letter-spacing:.09em; text-transform:uppercase; color:var(--brand);}
.sector-baseline .sb-h{font-family:var(--serif); font-size:17px; color:var(--ink); margin-top:4px;}

/* ============================================================================
   PAPER-BODY  ·  light surface for the BESPOKE editorial templates
   ----------------------------------------------------------------------------
   fashion / economy (and their -v2 / -acx / -quarterly variants) are human news
   products that predate the .editorial component layer: they lay themselves out
   with bespoke inline CSS that reads the ESTATE dark tokens (--text/--surface/
   --line…) and the estate-issue-styles bridge names (--charcoal/--dark-panel…)
   directly, never .editorial's own --paper/--ink. Rebuilding them isn't needed
   to change the background: because they use ZERO hard-coded colors, redefining
   those token *values* on <body class="paper-body"> flips the whole page to the
   light editorial palette in place — the masthead band, the panels, the tables,
   the chips — with one class per template and nothing structural touched.
   The dark estate chrome (R1) is re-asserted below so the nav bar and the footer
   sitemap stay dark, exactly like the .editorial surfaces (dark chrome, light
   paper between). On-light accents match the AAI category palette + editorial
   action blue; bright estate accents (mint/yellow/orange/sky) are darkened to
   stay legible on paper. No JavaScript required.
   ============================================================================ */
body.paper-body{
  /* estate surfaces → paper */
  --canvas:#FBFAF7; --surface:#F4F2EC; --elevated:#ECE9E1;
  /* estate text → ink */
  --text:#1B1E23; --text-2:#3E444D; --text-3:#767D88;
  /* strokes */
  --line:#E4E0D7;
  /* accents, remapped to on-light-safe values (keep semantic meaning) */
  --blue:#2F40FF; --action:#2F40FF;
  --mint:#0A8A5A; --verified:#0A8A5A;      /* success/verified — dark green */
  --yellow:#8A6300; --money:#8A6300;        /* money/pending — dark amber */
  --orange:#B42318; --error:#B42318;        /* error/urgent — dark red */
  --sky:#0B6FB8; --info:#0B6FB8;            /* info/tags — dark blue */
  /* estate-issue-styles bridge names (05-DESIGN-SYSTEM), same remap */
  --deep-navy:#1B1E23; --charcoal:#3E444D; --text-muted:#3E444D;
  --border-light:#E4E0D7; --light-gray:#ECE9E1; --dark-panel:#F4F2EC;
  --warm-amber:#2F40FF; --forest-green:#0A8A5A; --cream:#FBFAF7; --champagne-gold:#8A6300;
  background:var(--canvas); color:var(--text);
}
/* --- glossary term links (auto-linked framework terms → /glossary/) ---
   A dotted underline marks a definitional link, distinct from the solid-underline
   source/citation links. Higher-specificity selectors so it wins inside both the
   .editorial surface and the .paper-body bespoke pages. */
a.glossary-term,
.editorial a.glossary-term,
body.paper-body a.glossary-term{
  color:inherit; text-decoration:none;
  border-bottom:1px dotted #2F40FF; padding-bottom:.5px;
}
a.glossary-term:hover,
.editorial a.glossary-term:hover,
body.paper-body a.glossary-term:hover{
  color:#2F40FF; border-bottom-style:solid;
}

/* R1: keep the estate chrome dark on a light paper body (nav bar + footer sitemap) */
body.paper-body .estate-header,
body.paper-body .estate-footer{
  --canvas:#0D0F11; --surface:#191C21; --elevated:#262C36;
  --text:#FFFFFF; --text-2:#878C96; --text-3:#697180; --line:#262C36;
  --blue:#2F40FF; --action:#2F40FF; --mint:#29F894; --yellow:#F8D229; --orange:#F65930; --sky:#2FB6FF;
}
