/* Nordstroms portal type layer - the single source of truth for Fraunces.
   Linked by EVERY page (after any Google css2 link, so these faces win the cascade).
   Standard: docs/control/fonts-selfhost-20260709/TYPE_STYLE_GUIDE_PROPOSAL_20260709.md
   Sanctioned Fraunces styles: 600 roman (display), 300 italic (editorial),
   600 italic (quotes/callouts), 700 roman (RESTRICTED: hero stats + brand mark only). */
:root{
  --f-display:600; --f-editorial:300; --f-quote:600; --f-stat:700;
}

/* Self-hosted Fraunces variable subset (latin, wght 300-900, opsz 9-144).
   Built 2026-07-09, see SUBSET_REPORT.md in the control dir. */
@font-face{
  font-family:'Fraunces';
  font-style:normal;
  font-weight:300 900;
  font-display:swap;
  src:url('fonts/fraunces-var-latin.woff2') format('woff2-variations'),url('fonts/fraunces-var-latin.woff2') format('woff2');
}
@font-face{
  font-family:'Fraunces';
  font-style:italic;
  font-weight:300 900;
  font-display:swap;
  src:url('fonts/fraunces-italic-var-latin.woff2') format('woff2-variations'),url('fonts/fraunces-italic-var-latin.woff2') format('woff2');
}

/* Self-hosted Spectral: static 400 + 700 + italic 400 (Google statics; the family
   has NO usable variable build - a varLib attempt from the productiontype UFO masters
   left 174/491 glyphs without deltas and was rejected by pixel QA 2026-07-10).
   Requests for 500 resolve to 400 and 600 to 700 via standard font matching;
   bold-italic stays synthetic, same as Google-hosted behavior. */
@font-face{font-family:'Spectral';font-style:normal;font-weight:400;font-display:swap;src:url('fonts/spectral-400-latin.woff2') format('woff2')}
@font-face{font-family:'Spectral';font-style:normal;font-weight:700;font-display:swap;src:url('fonts/spectral-700-latin.woff2') format('woff2')}
@font-face{font-family:'Spectral';font-style:italic;font-weight:400;font-display:swap;src:url('fonts/spectral-italic-400-latin.woff2') format('woff2')}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400 700;font-display:swap;src:url('fonts/jetbrains-mono-var-latin.woff2') format('woff2-variations'),url('fonts/jetbrains-mono-var-latin.woff2') format('woff2')}

/* Emphasis: 'bolder' from a 600 context computes 900 (off-standard); pin 700. */
strong,b{font-weight:700}

/* Optical size auto-tracks everywhere; "opsz" 144 is pinned only on the
   display-title role (h1.book-title), declared where that role is styled. */
:where(h1,h2,h3,h4,h5,.book-title,.book-subtitle,.lede,.pull-quote,figcaption,blockquote,.callout){font-optical-sizing:auto}

/* ---- Egg masthead component (merged from _kit/egg.css 2026-07-10) ----
   Inert on pages without the #egg-mark block. Cascade recipe per page:
   this stylesheet + the #egg-mark HTML block + _kit/egg-mark.js.
   Smoke is ink-grey for the paper background (the homepage uses white smoke on dark teal).
   Egg sized so the smoke column (rises ~96px above the egg) clears the top of the page. */
.egg-mark{position:relative;float:right;width:20%;max-width:145px;height:auto;margin:42px 0 12px 26px;shape-outside:margin-box;transform:scaleX(-1);cursor:pointer}
/* Headers vary in height across pages; contain the float so the header's bottom
   rule always clears the egg instead of the egg poking past it. */
header:has(>.egg-mark)::after{content:"";display:block;clear:both}
@media (max-width:720px){.egg-mark{width:34%;max-width:118px;margin:34px 0 10px 14px}}
.egg-mark img.egg-img{width:100%;height:auto;display:block;filter:drop-shadow(0 6px 18px rgba(31,26,20,.25))}
.egg-mark:focus-visible{outline:2px solid var(--rust,#A63E1A);outline-offset:4px}
.egg-smoke{position:absolute;bottom:80%;left:53%;transform:translateX(-50%);width:56px;height:110px;pointer-events:none;z-index:2}
.egg-smoke .sp{position:absolute;bottom:0;left:50%;width:12px;height:12px;margin-left:-6px;border-radius:50%;background:radial-gradient(circle at 45% 45%,rgba(112,105,88,.6) 0%,rgba(112,105,88,.34) 45%,transparent 75%);filter:blur(1.5px);opacity:0;animation:eggPuff 3.6s linear infinite}
.egg-smoke .sp:nth-child(2){animation-delay:.3s;left:44%;width:10px;height:10px;margin-left:-5px}
.egg-smoke .sp:nth-child(3){animation-delay:.6s;left:56%;width:14px;height:14px;margin-left:-7px}
.egg-smoke .sp:nth-child(4){animation-delay:.9s;left:48%;width:11px;height:11px;margin-left:-5px}
.egg-smoke .sp:nth-child(5){animation-delay:1.2s;left:53%;width:13px;height:13px;margin-left:-6px}
.egg-smoke .sp:nth-child(6){animation-delay:1.5s;left:46%;width:12px;height:12px}
.egg-smoke .sp:nth-child(7){animation-delay:1.8s;left:55%;width:10px;height:10px;margin-left:-5px}
.egg-smoke .sp:nth-child(8){animation-delay:2.1s;left:50%;width:14px;height:14px;margin-left:-7px}
.egg-smoke .sp:nth-child(9){animation-delay:2.4s;left:45%;width:11px;height:11px;margin-left:-5px}
.egg-smoke .sp:nth-child(10){animation-delay:2.7s;left:54%;width:12px;height:12px}
.egg-smoke .sp:nth-child(11){animation-delay:3s;left:49%;width:10px;height:10px;margin-left:-5px}
.egg-smoke .sp:nth-child(12){animation-delay:3.3s;left:52%;width:13px;height:13px;margin-left:-6px}
@keyframes eggPuff{
  0%{opacity:0;transform:translate(0,0) scale(.5)}
  12%{opacity:.75}
  55%{opacity:.45;transform:translate(3px,-52px) scale(1.5)}
  100%{opacity:0;transform:translate(-4px,-96px) scale(2.3)}
}
.egg-burst{position:absolute;top:-4%;left:50%;transform:translateX(-50%);width:80%;height:55%;pointer-events:none;z-index:3;opacity:0}
.egg-burst.active{animation:eggBurst .85s ease-out forwards}
.egg-burst .bc{position:absolute;background:radial-gradient(ellipse at center,rgba(250,247,238,1) 0%,rgba(215,208,190,.85) 30%,rgba(150,142,120,.5) 60%,transparent 80%);border-radius:50%;filter:blur(9px)}
@keyframes eggBurst{
  0%{opacity:.9;transform:translateX(-50%) scale(.55)}
  18%{opacity:.85;transform:translateX(-50%) scale(1.1)}
  45%{opacity:.5;transform:translateX(-50%) translateY(-18px) scale(1.4)}
  100%{opacity:0;transform:translateX(-50%) translateY(-52px) scale(1.8)}
}
.egg-mark.egg-off .sp{animation-play-state:paused}
@media (prefers-reduced-motion:reduce){.egg-smoke,.egg-burst{display:none}}

/* ---- Portal book kit (merged from _kit/portal-kit.css 2026-07-10, owner: one css file) ----
   SCOPED with :where(.pk): applies only on pages whose <body> carries class "pk";
   :where keeps specificity at zero so page-local overrides keep winning. ----
   Component layer for kit pages. Loaded everywhere; book pages carry their own
   inline template styles which override these where both define a selector. */
/* Fraunces tokens + @font-face live in _kit/type.css (linked by every page, before this file).
   Kit rules reference var(--f-*) with literal fallbacks, so this file still degrades standalone. */
:root{
  --paper:#F2EBD8; --paper-2:#EAE2CB;
  --ink:#1F1A14; --ink-soft:#3A352B;
  --rule:#C4B898;
  --rust:#A63E1A; --rust-soft:#C7572F;
  --teal:#2E5959; --olive:#7C7843; --mustard:#C99012;
  --link:#A63E1A; --link-visited:#7A2E14;
  --strength:#2E5959;
  --weakness:#A63E1A;
  --opportunity:#7C7843;
  --threat:#7A2E14;
}
:where(.pk) *{box-sizing:border-box}
:where(.pk) html,body:where(.pk){margin:0;padding:0}
body:where(.pk){background:var(--paper);color:var(--ink);font-family:'Spectral',Georgia,serif;font-size:18px;line-height:1.65;background-image:radial-gradient(circle at 20% 10%,rgba(166,62,26,.04) 0%,transparent 40%),radial-gradient(circle at 80% 90%,rgba(46,89,89,.04) 0%,transparent 40%);background-attachment:fixed}
body:where(.pk)::before{content:'';position:fixed;inset:0;pointer-events:none;background-image:repeating-linear-gradient(0deg,transparent 0,transparent 2px,rgba(31,26,20,.012) 2px,rgba(31,26,20,.012) 3px),repeating-linear-gradient(90deg,transparent 0,transparent 2px,rgba(31,26,20,.012) 2px,rgba(31,26,20,.012) 3px);z-index:1}
:where(.pk) .wrap{max-width:880px;margin:0 auto;padding:0 28px;position:relative;z-index:2}

:where(.pk) header{border-bottom:2px solid var(--ink);padding:36px 0 0;position:relative}
:where(.pk) .title-block{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;flex-wrap:wrap}
:where(.pk) h1.book-title{font-family:'Fraunces',serif;font-weight:var(--f-display,600);font-size:54px;line-height:.95;margin:0 0 4px;letter-spacing:-.025em;font-variation-settings:"opsz" 144}
:where(.pk) .book-subtitle{font-family:'Fraunces',serif;font-style:italic;font-weight:var(--f-editorial,300);color:var(--ink-soft);font-size:21px;margin:0 0 16px;max-width:580px}
:where(.pk) .book-stamp{font-family:'JetBrains Mono',monospace;font-size:11px;text-transform:uppercase;letter-spacing:.18em;color:var(--rust);border:1.5px solid var(--rust);padding:6px 12px;align-self:flex-end;transform:rotate(-1.5deg);margin-bottom:18px;background:var(--paper)}

:where(.pk) nav.sections{position:sticky;top:0;background:var(--paper);border-bottom:1.5px solid var(--ink);padding:14px 0;z-index:10;margin-top:24px}
:where(.pk) nav.sections ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px 24px;font-family:'JetBrains Mono',monospace;font-size:11.5px;text-transform:uppercase;letter-spacing:.12em}
:where(.pk) nav.sections a{color:var(--ink-soft);text-decoration:none;border-bottom:1px solid transparent;padding-bottom:2px;transition:color .15s,border-color .15s}
:where(.pk) nav.sections a:hover{color:var(--rust);border-bottom-color:var(--rust)}

:where(.pk) section{padding:52px 0 32px;border-bottom:1px solid var(--rule)}
:where(.pk) section:last-of-type{border-bottom:none}
:where(.pk) h2{font-family:'Fraunces',serif;font-size:40px;font-weight:var(--f-display,600);line-height:1.05;margin:0 0 6px;letter-spacing:-.02em}
:where(.pk) h2 .num{font-family:'JetBrains Mono',monospace;font-size:13px;color:var(--rust);letter-spacing:.18em;display:block;margin-bottom:8px;font-weight:400}
:where(.pk) .lede{font-family:'Fraunces',serif;font-style:italic;font-weight:var(--f-editorial,300);font-size:21px;color:var(--ink-soft);line-height:1.4;margin:0 0 28px;max-width:660px}

:where(.pk) h3{font-family:'Fraunces',serif;font-size:24px;font-weight:var(--f-display,600);margin:36px 0 8px;letter-spacing:-.01em;scroll-margin-top:80px}
:where(.pk) h3 .anchor-mark{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--olive);letter-spacing:.15em;font-weight:400;margin-right:10px;text-transform:uppercase;vertical-align:middle}
:where(.pk) h4{font-family:'Fraunces',serif;font-size:17px;font-weight:var(--f-display,600);text-transform:uppercase;letter-spacing:.08em;margin:24px 0 6px;color:var(--teal)}
:where(.pk) p{margin:0 0 14px}

:where(.pk) a.term,:where(.pk) a.term:link{color:var(--link);text-decoration:none;border-bottom:1px dotted var(--link);transition:color .15s,border-bottom-color .15s,background .15s}
:where(.pk) a.term:visited{color:var(--link-visited);border-bottom-color:var(--link-visited)}
:where(.pk) a.term:hover{color:var(--paper);background:var(--rust);border-bottom-color:var(--rust);padding:0 2px}
:where(.pk) span.t{color:var(--ink);border-bottom:1px dotted var(--rule)}

:where(.pk) .callout{background:var(--paper-2);border-left:3px solid var(--rust);padding:18px 22px;margin:24px 0;font-size:17px}
:where(.pk) .callout .label{font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--rust);display:block;margin-bottom:8px}
:where(.pk) .callout p:last-child{margin-bottom:0}

:where(.pk) .pull-quote{font-family:'Fraunces',serif;font-size:24px;font-style:italic;font-weight:var(--f-quote,600);color:var(--ink);line-height:1.35;margin:32px 0;padding:22px 28px 22px 30px;border-left:4px solid var(--rust);background:linear-gradient(90deg,rgba(166,62,26,.04) 0%,transparent 100%)}
:where(.pk) .pull-quote::before{content:'"';font-size:54px;float:left;margin:-8px 8px -8px -10px;color:var(--rust);font-weight:var(--f-display,600);line-height:.7}

:where(.pk) table{width:100%;border-collapse:collapse;margin:18px 0 24px;font-size:16px}
:where(.pk) th{text-align:left;font-family:'JetBrains Mono',monospace;font-size:11px;text-transform:uppercase;letter-spacing:.12em;color:var(--ink-soft);padding:10px 14px 10px 0;border-bottom:1.5px solid var(--ink);font-weight:500}
:where(.pk) td{padding:12px 14px 12px 0;border-bottom:1px solid var(--rule);vertical-align:top}
:where(.pk) td:first-child{font-weight:var(--f-display,600);font-family:'Fraunces',serif;color:var(--rust)}

:where(.pk) figure{margin:32px 0;padding:0}
:where(.pk) figure svg{display:block;width:100%;height:auto;background:var(--paper-2);border:1px solid var(--rule);padding:18px;border-radius:2px}
:where(.pk) figcaption{font-family:'Fraunces',serif;font-style:italic;font-weight:var(--f-editorial,300);color:var(--ink-soft);font-size:15.5px;margin-top:10px;padding-left:14px;border-left:2px solid var(--rule)}
:where(.pk) figcaption .figno{font-family:'JetBrains Mono',monospace;font-style:normal;font-size:11px;color:var(--rust);letter-spacing:.15em;margin-right:8px}

:where(.pk) ul.simple{padding-left:22px;margin:8px 0 18px}
:where(.pk) ul.simple li{margin-bottom:8px}

:where(.pk) dl.gloss{margin:8px 0}
:where(.pk) dl.gloss dt{font-family:'Fraunces',serif;font-weight:var(--f-display,600);font-size:18px;color:var(--ink);margin-top:18px;scroll-margin-top:80px}
:where(.pk) dl.gloss dd{margin:4px 0 8px;color:var(--ink-soft)}

:where(.pk) code{font-family:'JetBrains Mono',monospace;font-size:.92em;background:var(--paper-2);padding:1px 5px;border-radius:2px;color:var(--rust);overflow-wrap:anywhere}

/* SWOT grid */
:where(.pk) .swot{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin:24px 0}
:where(.pk) .swot-cell{background:var(--paper-2);padding:20px 22px;border-top:3px solid var(--rule);position:relative}
:where(.pk) .swot-cell h5{font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:.18em;text-transform:uppercase;margin:0 0 10px;font-weight:500}
:where(.pk) .swot-cell ul{margin:0;padding-left:18px}
:where(.pk) .swot-cell li{margin-bottom:8px;font-size:15.5px;line-height:1.5}
:where(.pk) .swot-s{border-top-color:var(--strength)}
:where(.pk) .swot-s h5{color:var(--strength)}
:where(.pk) .swot-w{border-top-color:var(--weakness)}
:where(.pk) .swot-w h5{color:var(--weakness)}
:where(.pk) .swot-o{border-top-color:var(--opportunity)}
:where(.pk) .swot-o h5{color:var(--opportunity)}
:where(.pk) .swot-t{border-top-color:var(--threat)}
:where(.pk) .swot-t h5{color:var(--threat)}

@media (max-width:720px){
  :where(.pk) h1.book-title{font-size:38px}
  :where(.pk) .book-subtitle{font-size:18px}
  :where(.pk) h2{font-size:28px}
  :where(.pk) .lede{font-size:18px}
  body:where(.pk){font-size:17px}
  :where(.pk) .swot{grid-template-columns:1fr}
  :where(.pk) figure svg{padding:10px}
  :where(.pk) .pull-quote{font-size:20px;padding:18px 22px}
}

:where(.pk) footer{padding:32px 0 64px;font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--ink-soft);letter-spacing:.1em;text-transform:uppercase;border-top:2px solid var(--ink);margin-top:32px}

:where(.pk) .numbers{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:18px;margin:24px 0}
:where(.pk) .num-card{background:var(--paper-2);padding:18px 20px;border-left:3px solid var(--teal)}
:where(.pk) .num-card .big{font-family:'Fraunces',serif;font-size:28px;font-weight:var(--f-display,600);color:var(--ink);line-height:1;display:block}
:where(.pk) .num-card .lab{font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.15em;text-transform:uppercase;color:var(--ink-soft);display:block;margin-top:6px}

/* ---- playbook additions ---- */
:where(.pk) hr{border:none;border-top:1px solid var(--rule);margin:30px 0}
:where(.pk) h5{font-family:'Fraunces',serif;font-size:16px;font-weight:var(--f-display,600);margin:20px 0 4px;color:var(--ink);scroll-margin-top:84px}:where(.pk) h6{font-family:'JetBrains Mono',monospace;font-size:11px;text-transform:uppercase;letter-spacing:.12em;color:var(--ink-soft);margin:16px 0 4px;scroll-margin-top:84px}
:where(.pk) h4{scroll-margin-top:84px}
:where(.pk) blockquote{margin:18px 0;padding:14px 22px;border-left:3px solid var(--rust);background:rgba(166,62,26,.045)}
:where(.pk) blockquote p{margin:0 0 8px}
:where(.pk) blockquote p:last-child{margin-bottom:0}
:where(.pk) pre{background:var(--paper-2);border-left:3px solid var(--teal);padding:18px 22px;margin:20px 0;white-space:pre-wrap;word-wrap:break-word;font-family:'Spectral',Georgia,serif;font-size:16px;line-height:1.62;border-radius:2px}
:where(.pk) pre code{background:none!important;color:var(--ink)!important;padding:0;font-family:inherit;font-size:inherit}
/* raw system-output blocks (QA evidence): monospace so columns align and it reads as machine output */
:where(.pk) pre.sysout{font-family:'JetBrains Mono',monospace;font-size:12.5px;line-height:1.55;letter-spacing:0;tab-size:2}
:where(.pk) pre.sysout code{font-family:'JetBrains Mono',monospace!important}
:where(.pk) .group-lede{margin-bottom:30px}
:where(.pk) .overview-table td:first-child{white-space:nowrap}

/* reserved-gutter contents rail
   Width math is driven by JS (it measures viewport vs content width and adds
   .has-rail to <html> when there is room for a non-overlapping gutter). The rail
   sits in the empty space to the right of the centered content column; content
   never reflows under it. Without .has-rail, the rail collapses to the compact
   Contents button + overlay. With JS off, neither the rail nor the button shows,
   so nothing ever covers the content. */
:root{--rail-w:238px;--rail-gap:34px;--toc-top:96px;--content-w:880px}
/* TOC panel = the Contents-button color (rust) so the button-to-panel link is obvious.
   Text flips to the paper tone (paper-on-rust is 5.3:1, AA). The scrollspy active item
   gets a paper pill with rust text (high contrast, reinforces the rust association). */
:where(.pk) .floating-toc .toc-head{font-family:'JetBrains Mono',monospace;font-size:10.5px;text-transform:uppercase;letter-spacing:.2em;color:var(--paper);border-bottom:1.5px solid rgba(242,235,216,.4);padding-bottom:8px;margin-bottom:8px}
:where(.pk) .floating-toc ul{list-style:none;margin:0;padding:0}
:where(.pk) .floating-toc .toc-group{font-family:'JetBrains Mono',monospace;font-size:10px;text-transform:uppercase;letter-spacing:.14em;color:var(--paper);margin:14px 0 3px;font-weight:700}
:where(.pk) .floating-toc .toc-group:first-child{margin-top:2px}
:where(.pk) .floating-toc li a{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:'Spectral',Georgia,serif;font-size:12.5px;color:var(--paper);text-decoration:none;padding:3px 6px 3px 11px;border-left:2px solid transparent;border-radius:2px;line-height:1.3;transition:color .12s,background .12s,border-color .12s}
:where(.pk) .floating-toc li a:hover{color:var(--paper);background:rgba(242,235,216,.16);border-left-color:var(--paper)}
:where(.pk) .floating-toc li a.active{color:var(--ink);background:var(--paper);border-left-color:var(--paper);font-weight:700}
/* in-nav Contents button (lives in the sticky sub-nav, opens the overlay) */
:where(.pk) .toc-btn{background:var(--paper);color:var(--ink-soft);border:1.5px solid var(--ink);border-radius:3px;font-family:'JetBrains Mono',monospace;font-size:10.5px;text-transform:uppercase;letter-spacing:.1em;padding:7px 11px;line-height:1;cursor:pointer;white-space:nowrap}
:where(.pk) .toc-btn:hover{color:var(--rust);border-color:var(--rust)}
:where(.pk) .toc-btn .toc-btn-mini{display:none}
/* legacy floating FAB (no longer emitted; kept harmless) */
:where(.pk) .toc-toggle{display:none}
/* JS off: no floating panel and no dead toggle button; the TOC simply is not shown */
:where(.pk) html:not(.js-enabled) .toc-btn{display:none}
:where(.pk) html:not(.js-enabled) .floating-toc{display:none}
/* when the gutter rail is showing, the in-nav button is redundant */
:where(.pk) html.has-rail .toc-btn{display:none}
/* base panel styling; shared by overlay and rail modes. Rust ground matches the
   Contents button. The overlay fades/slides in smoothly; it is position:fixed so
   opening or closing never shifts the content flow (no content jump). */
:where(.pk) .floating-toc{position:fixed;display:none;top:var(--toc-top);width:var(--rail-w);max-height:calc(100vh - var(--toc-top) - 24px);overflow-y:auto;background:var(--rust);border:1.5px solid var(--ink);padding:16px 16px 18px;z-index:39;box-shadow:5px 5px 0 rgba(31,26,20,.22)}
/* default (no rail room): hidden until the Contents button opens it as an overlay */
:where(.pk) .floating-toc.open{display:block;top:var(--toc-top);right:10px;left:10px;width:auto;max-height:calc(100vh - var(--toc-top) - 16px)}
/* smooth open/close for the overlay (skipped under reduced motion) */
:where(.pk) .js-enabled .floating-toc.open{animation:tocIn .2s ease}
@keyframes tocIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){:where(.pk) .js-enabled .floating-toc.open{animation:none}}
/* rail room (JS-set): reserve a right gutter so content never overlaps the rail.
   body padding-right shrinks the centered content column away from the right
   strip; the rail is pinned into that reserved strip. The wide rail is persistent
   (no collapse-on-scroll) so the content column never reflows while scrolling. */
:where(.pk) html.has-rail body{padding-right:calc(var(--rail-w) + 2 * var(--rail-gap))}
:where(.pk) html.has-rail .toc-toggle{display:none}
:where(.pk) html.has-rail .floating-toc{display:block;right:var(--rail-gap);left:auto;width:var(--rail-w);box-shadow:none;border-color:rgba(31,26,20,.25)}
:where(.pk) html.has-rail .floating-toc.open{right:var(--rail-gap);left:auto;width:var(--rail-w)}
:where(.pk) html.has-rail .floating-toc.open{animation:none}

/* "Montclair pages" global menu: a TEAL top-bar button opens a teal dropdown/overlay
   (teal = distinct from the rust TOC; the teal button and teal panel are color-linked).
   Panel content is the 4 category accordions (each .menu-group header expands/collapses
   its <ul>, collapsed by default). Closed by default; JS toggles .open. */
:where(.pk) .pages-btn{display:inline-flex;align-items:center;gap:6px;background:var(--teal);color:var(--paper);border:1.5px solid var(--teal);border-radius:3px;font-family:'JetBrains Mono',monospace;font-size:10.5px;text-transform:uppercase;letter-spacing:.1em;padding:7px 11px;line-height:1;cursor:pointer;white-space:nowrap}
:where(.pk) .pages-btn:hover{background:#264a4a;border-color:#264a4a}
:where(.pk) .pages-btn .pages-btn-caret{font-size:8px;transition:transform .15s}
:where(.pk) .pages-btn[aria-expanded="true"] .pages-btn-caret{transform:rotate(180deg)}
:where(.pk) .pages-btn .pages-btn-mini{display:none}
:where(.pk) html:not(.js-enabled) .pages-btn{display:none}
:where(.pk) .allpages-menu{position:fixed;display:none;top:var(--toc-top);left:max(10px,calc((100vw - var(--content-w,880px))/2 - 8px));width:300px;max-width:calc(100vw - 20px);max-height:calc(100vh - var(--toc-top) - 16px);overflow-y:auto;background:var(--teal);color:var(--paper);border:1.5px solid var(--ink);border-radius:3px;padding:10px 12px 14px;z-index:42;box-shadow:6px 6px 0 rgba(31,26,20,.24)}
:where(.pk) .allpages-menu.open{display:block}
:where(.pk) .js-enabled .allpages-menu.open{animation:menuIn .18s ease}
@keyframes menuIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){:where(.pk) .js-enabled .allpages-menu.open{animation:none}}
:where(.pk) html:not(.js-enabled) .allpages-menu{display:none}
:where(.pk) .allpages-menu .menu-group{font-family:'JetBrains Mono',monospace;font-size:11px;text-transform:uppercase;letter-spacing:.12em;color:var(--paper);font-weight:700;margin:0;padding:9px 22px 9px 6px;border-top:1px solid rgba(242,235,216,.22);cursor:pointer;position:relative;user-select:none}
:where(.pk) .allpages-menu .menu-group:first-child{border-top:none}
:where(.pk) .allpages-menu .menu-group:hover{color:#fff}
:where(.pk) .allpages-menu .menu-group:focus-visible{outline:2px solid var(--paper);outline-offset:2px}
:where(.pk) .allpages-menu .menu-group::after{content:"";position:absolute;right:7px;top:50%;width:6px;height:6px;border-right:2px solid var(--paper);border-bottom:2px solid var(--paper);transform:translateY(-70%) rotate(45deg);transition:transform .15s;opacity:.85}
:where(.pk) .allpages-menu .menu-group.open::after{transform:translateY(-30%) rotate(-135deg)}
/* each category <ul> follows its header; collapsed by default, shown when header.open */
:where(.pk) .allpages-menu .menu-group + ul{list-style:none;margin:0;padding:0;display:none}
:where(.pk) .allpages-menu .menu-group.open + ul{display:block;padding:2px 0 6px}
:where(.pk) .allpages-menu li{display:flex;align-items:center;gap:7px;padding:0}
:where(.pk) .allpages-menu li a{flex:1 1 auto;font-family:'Spectral',Georgia,serif;font-size:13px;color:var(--paper);text-decoration:none;padding:4px 6px 4px 14px;border-left:2px solid transparent;border-radius:2px;line-height:1.3;transition:background .12s,border-color .12s}
:where(.pk) .allpages-menu li a:hover{background:rgba(242,235,216,.16);border-left-color:var(--paper)}
:where(.pk) .allpages-menu li.here a{background:var(--paper);color:var(--teal);font-weight:600;border-left-color:var(--paper)}
/* status dot: registry taxonomy colors, with a paper ring so the teal "good" dot stays
   visible on the teal panel. st-good=teal, st-partial=mustard, st-placeholder=muted. */
:where(.pk) .st-dot{flex:none;width:9px;height:9px;border-radius:50%;box-shadow:0 0 0 1.5px var(--paper);margin-right:8px}
:where(.pk) .st-good{background:var(--strength)}
:where(.pk) .st-partial{background:var(--mustard)}
:where(.pk) .st-placeholder{background:var(--rule)}
:where(.pk) .allpages-menu li.here .st-dot{box-shadow:0 0 0 1.5px var(--teal)}

/* level toggle (Brief / Detailed) */
:where(.pk) nav.sections{display:flex;justify-content:space-between;align-items:center;gap:10px 24px;flex-wrap:wrap}
:where(.pk) .level-toggle{display:inline-flex;border:1.5px solid var(--ink);border-radius:3px;overflow:hidden;flex:none}
:where(.pk) .level-toggle button{font-family:'JetBrains Mono',monospace;font-size:10.5px;text-transform:uppercase;letter-spacing:.1em;padding:7px 13px;border:none;background:var(--paper-2);color:var(--ink-soft);cursor:pointer;line-height:1;transition:background .12s,color .12s}
:where(.pk) .level-toggle button + button{border-left:1.5px solid var(--ink)}
:where(.pk) .level-toggle button:not(.active):hover{background:var(--paper);color:var(--ink)}
:where(.pk) .level-toggle button.active{background:var(--ink);color:var(--paper);font-weight:700}
:where(.pk) .level-note{font-family:'Spectral',Georgia,serif;color:var(--ink-soft);font-size:15px;margin:-4px 0 22px}
/* Level filtering only applies with JS on. JS-off shows everything (progressive enhancement). */
:where(.pk) .js-enabled body.level-c .detail-only{display:none}
:where(.pk) .js-enabled body.level-c .floating-toc li.detail-only{display:none}
:where(.pk) .js-enabled body.level-detail .c-only{display:none}
:where(.pk) html:not(.js-enabled) .level-toggle{display:none}

/* ---- requirements / stack components: accordions + priority pills ---- */
:where(.pk) details{background:var(--paper-2);border:1px solid var(--rule);border-radius:6px;margin:10px 0;overflow:hidden;transition:border-color .15s}
:where(.pk) details[open]{border-color:#cdbf9c;box-shadow:0 10px 26px -20px rgba(31,26,20,.5)}
:where(.pk) details:target{border-color:var(--teal);box-shadow:0 0 0 2px rgba(46,89,89,.25),0 10px 26px -20px rgba(31,26,20,.5)}
:where(.pk) details>summary{position:relative;cursor:pointer;padding:13px 16px;list-style:none;display:flex;flex-wrap:wrap;align-items:baseline;gap:5px 11px;font-family:'Spectral',Georgia,serif;font-size:16.5px;line-height:1.45}
:where(.pk) details>summary::-webkit-details-marker{display:none}
:where(.pk) details>summary::before{content:"";flex:none;align-self:center;width:7px;height:7px;margin-right:2px;border-right:2px solid var(--rust);border-bottom:2px solid var(--rust);transform:rotate(-45deg);transition:transform .18s}
:where(.pk) details[open]>summary::before{transform:rotate(45deg)}
:where(.pk) details>summary:hover{background:#e3dabd}
:where(.pk) details>summary .dec{font-weight:700;color:var(--ink)}
:where(.pk) details>summary .dec .star{color:var(--rust)}
:where(.pk) details>summary .dec .num-tag{font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--rust);letter-spacing:.04em;margin-right:4px}
:where(.pk) details>summary .why{font-weight:400;color:var(--ink-soft);font-size:14px;font-style:italic}
:where(.pk) .hashlink{flex:none;margin-left:auto;padding:0 2px;color:var(--teal);font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:700;text-decoration:none;opacity:0;transition:opacity .15s}
:where(.pk) summary:hover .hashlink,:where(.pk) summary:focus-within .hashlink,:where(.pk) .hashlink:focus{opacity:.8}
:where(.pk) .hashlink:hover{opacity:1;text-decoration:underline}
:where(.pk) details summary{cursor:pointer;padding:13px 16px;list-style:none;display:flex;flex-wrap:wrap;align-items:baseline;gap:5px 9px;font-family:'Spectral',Georgia,serif;font-size:16.5px;line-height:1.42}
:where(.pk) details summary::-webkit-details-marker{display:none}
:where(.pk) details summary::before{content:"\25B8";color:var(--rust);font-size:12px;align-self:center;flex:none;transition:transform .15s}
:where(.pk) details[open]>summary::before{transform:rotate(90deg)}
:where(.pk) details summary:hover{background:#e3dabd}
:where(.pk) details summary .dec{font-weight:600;color:var(--ink)}
:where(.pk) details summary .why{font-weight:400;color:var(--ink-soft);font-size:14px;font-style:italic}
:where(.pk) .body{padding:6px 18px 16px 34px;font-size:16px;line-height:1.6;color:var(--ink-soft);border-top:1px solid var(--rule)}
:where(.pk) .body p{margin:9px 0}
:where(.pk) .body table{margin:10px 0;font-size:15px}
:where(.pk) .body table td{padding:8px 12px 8px 0}
:where(.pk) .body table th{padding:8px 12px 8px 0}
:where(.pk) .js-enabled details .body{will-change:height}
:where(.pk) .js-enabled .reveal{opacity:0;transform:translateY(14px);transition:opacity .55s ease,transform .55s ease;will-change:opacity,transform}
:where(.pk) .js-enabled .reveal.revealed{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){:where(.pk) .js-enabled .reveal,:where(.pk) .js-enabled .reveal.revealed{opacity:1!important;transform:none!important;transition:none!important}}
:where(.pk) .opts{list-style:none;padding:0;margin:10px 0}
:where(.pk) .opts li{padding:7px 0;border-bottom:1px dotted var(--rule)}
:where(.pk) .opts li:last-child{border-bottom:none}
:where(.pk) .opts .nm{font-weight:700;color:var(--ink)}
:where(.pk) .opts .star{color:var(--rust)}
:where(.pk) .opts .px{font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--teal)}
:where(.pk) .opts.avoid .nm{color:var(--ink-soft)}
:where(.pk) .ev{display:block;font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--teal);margin:10px 0 2px}
:where(.pk) .pill{font-family:'JetBrains Mono',monospace;font-size:9.5px;font-weight:700;letter-spacing:.05em;padding:2px 7px;border-radius:9px;color:#fff;align-self:center;flex:none}
:where(.pk) .p0{background:var(--rust)}
:where(.pk) .p1{background:var(--mustard)}
:where(.pk) .p2{background:var(--olive)}
:where(.pk) .pill.proposed{background:var(--teal)}
:where(.pk) .verdict{background:var(--paper-2);border:1px solid var(--rule);border-left:4px solid var(--rust);padding:16px 20px;margin:22px 0;font-size:17px;border-radius:4px}
:where(.pk) .verdict b{color:var(--rust)}
:where(.pk) .caveat{font-family:'JetBrains Mono',monospace;font-size:12.5px;line-height:1.5;color:var(--ink-soft);background:#f4eee0;border:1px dashed var(--rule);padding:11px 14px;margin:16px 0;border-radius:3px}
:where(.pk) .tag{display:inline-block;font-family:'JetBrains Mono',monospace;font-size:10px;text-transform:uppercase;letter-spacing:.1em;padding:3px 7px;border:1px solid var(--rule);margin:2px 3px 2px 0;color:var(--olive);border-color:var(--olive)}
@media(max-width:720px){:where(.pk) .body{padding-left:22px}:where(.pk) details summary{font-size:15.5px}}

/* ===== Green-eggs masthead (brand bar, top of every page) ===== */
:where(.pk) .masthead{display:flex;align-items:center;gap:12px;padding:16px 0 14px;border-bottom:1px solid var(--rule)}
:where(.pk) .masthead-logo{width:40px;height:40px;object-fit:contain;flex:0 0 auto}
:where(.pk) .masthead-word{font-family:'Fraunces',serif;font-weight:var(--f-display,600);font-size:20px;letter-spacing:-.01em;color:var(--ink)}
:where(.pk) .masthead-tag{font-family:'JetBrains Mono',monospace;font-size:10.5px;text-transform:uppercase;letter-spacing:.18em;color:var(--teal);margin-left:auto;border:1px solid var(--teal);padding:4px 9px;border-radius:4px}

/* ===== Contest switcher + insights ===== */
:where(.pk) .sample-banner{background:var(--rust);color:var(--paper);padding:8px 14px;border-radius:6px;font-family:'JetBrains Mono',monospace;font-size:12px;letter-spacing:.04em;margin:18px 0 22px}
:where(.pk) .sw{border:1px solid var(--rule);border-radius:10px;margin:18px 0 26px;overflow:hidden;background:var(--paper)}
:where(.pk) .sw-head{display:flex;justify-content:space-between;align-items:center;gap:12px;background:var(--paper-2);padding:12px 16px;border-bottom:1px solid var(--rule)}
:where(.pk) #switchers{min-height:100vh}
:where(.pk) .sw-sec{font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--ink-soft);letter-spacing:.03em}
:where(.pk) .sw-maker{font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--ink);font-weight:700}
:where(.pk) .sw-body{padding:16px 18px}
:where(.pk) .sw-text{font-family:'Spectral',Georgia,serif;font-size:16px;line-height:1.6;color:var(--ink);margin:0 0 14px}
:where(.pk) .sw-composite{display:inline-block;font-family:'JetBrains Mono',monospace;font-weight:700;font-size:13px;color:var(--paper);background:var(--teal);border-radius:5px;padding:3px 9px}
:where(.pk) .sw-composite.win{background:var(--rust)}
:where(.pk) .scorecard{width:100%;border-collapse:collapse;margin:12px 0 4px;font-size:13.5px}
:where(.pk) .scorecard td{border-top:1px solid var(--rule);padding:7px 8px;vertical-align:top}
:where(.pk) .scorecard .dim{font-family:'JetBrains Mono',monospace;font-size:11.5px;color:var(--ink-soft);white-space:nowrap;width:96px}
:where(.pk) .scorecard .wt{font-family:'JetBrains Mono',monospace;font-size:10px;color:#6B6450}
:where(.pk) .sc-pill{display:inline-block;font-family:'JetBrains Mono',monospace;font-weight:700;font-size:11.5px;border-radius:4px;padding:1px 7px;color:var(--ink)}
:where(.pk) .reason{color:var(--ink-soft);font-family:'Spectral',serif;font-size:14px}
:where(.pk) .judge{font-family:'JetBrains Mono',monospace;font-size:10.5px;color:#6B6450}
:where(.pk) .traj{background:var(--paper-2);border-left:3px solid var(--teal);padding:8px 12px;margin:10px 0 0;font-size:13px;color:var(--ink-soft);font-family:'Spectral',serif}
:where(.pk) .sw-foot{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:12px 18px;border-top:1px solid var(--rule);background:var(--paper-2)}
:where(.pk) button.sw-btn{font-family:'JetBrains Mono',monospace;font-size:12px;border:1px solid var(--ink);background:var(--paper);color:var(--ink);border-radius:5px;padding:6px 12px;cursor:pointer}
:where(.pk) button.sw-btn:hover{background:var(--ink);color:var(--paper)}
:where(.pk) button.sw-btn.saved{background:var(--teal);color:var(--paper);border-color:var(--teal)}
:where(.pk) .sw-count{font-family:'JetBrains Mono',monospace;font-size:11px;color:#6B6450;margin-left:auto}
:where(.pk) .panel{border:1px solid var(--rule);border-radius:10px;padding:18px 20px;margin:22px 0;background:var(--paper)}
:where(.pk) .panel h3{font-family:'Fraunces',Georgia,serif;font-size:19px;margin:0 0 10px;color:var(--ink)}
:where(.pk) .insight{font-family:'Spectral',serif;font-size:15px;line-height:1.55;color:var(--ink);margin:6px 0}
:where(.pk) .coach{width:100%;border-collapse:collapse;margin:8px 0;font-size:13px}
:where(.pk) .coach th,:where(.pk) .coach td{border:1px solid var(--rule);padding:6px 9px;text-align:left;font-family:'JetBrains Mono',monospace;font-size:11.5px}
:where(.pk) .coach th{background:var(--paper-2);color:var(--ink)}
:where(.pk) .lift{font-weight:700}:where(.pk) .lift.hi{color:var(--teal)}:where(.pk) .lift.lo{color:var(--rust)}
:where(.pk) #compileOut{font-family:'Spectral',serif;font-size:16px;line-height:1.6}
/* ===== Contest switcher: real-data extensions (flags, trajectory, md tables) ===== */
:where(.pk) .sw-prose p.sw-text:last-child{margin-bottom:0}
:where(.pk) .sw-flags{display:flex;flex-wrap:wrap;gap:7px;margin:0 0 14px}
:where(.pk) .sw-flag{font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.06em;text-transform:uppercase;padding:3px 9px;border-radius:5px;font-weight:700;line-height:1.3}
:where(.pk) .sw-flag.win{background:var(--rust);color:var(--paper)}
:where(.pk) .sw-flag.veto{background:#7A1F0A;color:var(--paper)}
:where(.pk) .sw-flag.cite{background:var(--mustard);color:var(--ink)}
:where(.pk) .sw-composite.veto{background:#7A1F0A}
:where(.pk) .scorecard thead th{font-family:'JetBrains Mono',monospace;font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;color:#6B6450;text-align:left;padding:0 8px 6px;border-bottom:1.5px solid var(--rule);font-weight:500;white-space:nowrap}
:where(.pk) .scorecard .sc{width:46px}
:where(.pk) .traj-cell{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--ink-soft);white-space:nowrap;width:120px}
:where(.pk) .t-r1{color:#6B6450}:where(.pk) .t-arrow{margin:0 3px;color:#6B6450}:where(.pk) .t-fin{color:var(--ink);font-weight:700}
:where(.pk) .t-delta{margin-left:5px;font-weight:700}
:where(.pk) .t-delta.up{color:var(--teal)}:where(.pk) .t-delta.down{color:var(--rust)}:where(.pk) .t-delta.flat{color:#6B6450}
:where(.pk) .t-delta.mover{background:var(--teal);color:var(--paper);border-radius:4px;padding:1px 5px}
:where(.pk) .t-delta.down.mover{background:var(--rust)}
:where(.pk) .sw-md-table{width:100%;border-collapse:collapse;margin:6px 0 14px;font-size:13px}
:where(.pk) .sw-md-table th{font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:.06em;text-transform:uppercase;text-align:left;color:var(--ink-soft);background:var(--paper-2);padding:7px 9px;border:1px solid var(--rule);font-weight:500}
:where(.pk) .sw-md-table td{font-family:'Spectral',serif;font-size:13.5px;line-height:1.45;color:var(--ink-soft);padding:7px 9px;border:1px solid var(--rule);vertical-align:top}
:where(.pk) .compile-sec{margin:0 0 18px;padding:0 0 14px;border-bottom:1px solid var(--rule)}
:where(.pk) .compile-sec:last-child{border-bottom:none}
:where(.pk) .compile-h{font-family:'JetBrains Mono',monospace;font-size:12px;margin:0 0 8px}
@media(max-width:600px){
  :where(.pk) .scorecard thead{display:none}
  :where(.pk) .scorecard tr{display:block;border-top:1px solid var(--rule);padding:8px 0}
  :where(.pk) .scorecard td{display:block;border-top:none;padding:2px 0}
  :where(.pk) .scorecard .dim{width:auto}
  :where(.pk) .scorecard .sc,:where(.pk) .traj-cell{width:auto}
  :where(.pk) .traj-cell{font-size:12px}
}

/* Egg masthead component moved to _kit/egg.css (2026-07-09). */

/* Self-hosted Fraunces @font-face moved to _kit/type.css (2026-07-09). */
