/* ============================================================
   m4th club — THE DARK ANNUAL · shared design system
   A product studio's annual report, rendered on a near-black
   instrument stage. Editorial bones · one warm-brass accent.
   Instrument Serif (display) / Instrument Sans (body) / Geist Mono (utility).
   This single sheet renders every page identically: landing,
   Carillon overview, and the four chapter pages.
   ============================================================ */

/* ---------- tokens ---------- */
:root{
  --bg:#08090B; --bg2:#0C0E12; --panel:#0D0F13;
  --ink:#F2F3F5; --body:#A6ABB6; --dim:#8B919D; --faint:#767C88;
  --line:rgba(255,255,255,.07); --line2:rgba(255,255,255,.13); --rule:rgba(255,255,255,.22);
  --brass:#E4A24E; --brass-hi:#F5C87C;
  --brass-06:rgba(228,162,78,.06); --brass-10:rgba(228,162,78,.10);
  --brass-16:rgba(228,162,78,.16); --brass-35:rgba(228,162,78,.35);
  --serif:'Instrument Serif',Georgia,serif;
  --sans:'Instrument Sans',ui-sans-serif,sans-serif;
  --mono:'Geist Mono',ui-monospace,SFMono-Regular,Menlo,monospace;
  --maxw:1200px;
  --gutter:clamp(20px,4.5vw,52px);
  --ease:cubic-bezier(.22,1,.36,1);
}

/* ---------- base ---------- */
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
html,body{overflow-x:clip}
body{
  background:var(--bg);color:var(--body);font-family:var(--sans);
  font-size:16.5px;line-height:1.62;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}
::selection{background:var(--brass);color:#14100A}
a{color:inherit;text-decoration:none}
:focus-visible{outline:2px solid var(--brass);outline-offset:3px;border-radius:2px}
img,svg,canvas{max-width:100%}
h1,h2,h3{text-wrap:balance}

/* atmosphere — cinematic light on a still stage */
.stage{position:fixed;inset:0;z-index:0;pointer-events:none;
  background:
    radial-gradient(110% 68% at 50% -14%, rgba(228,162,78,.07), transparent 55%),
    radial-gradient(66% 52% at 88% 6%, rgba(120,140,190,.05), transparent 60%),
    radial-gradient(90% 60% at 6% 100%, rgba(228,162,78,.028), transparent 55%)}
.stage.p{
  background:
    radial-gradient(100% 64% at 74% -12%, rgba(228,162,78,.085), transparent 55%),
    radial-gradient(66% 52% at 6% 8%, rgba(120,140,190,.045), transparent 60%),
    radial-gradient(90% 60% at 92% 100%, rgba(228,162,78,.028), transparent 55%)}
.grain{position:fixed;inset:0;z-index:0;pointer-events:none;opacity:.5;
  background-image:radial-gradient(rgba(255,255,255,.045) .5px, transparent .5px);background-size:3px 3px}
.shell{position:relative;z-index:1;max-width:var(--maxw);margin:0 auto;padding-inline:var(--gutter)}
main,header,footer{position:relative;z-index:1}

.skip{position:absolute;left:-9999px;top:0;z-index:99;background:var(--brass);color:#14100A;
  font-family:var(--mono);font-size:12px;padding:10px 16px;border-radius:0 0 8px 0}
.skip:focus-visible{left:0}

.kicker{font-family:var(--mono);font-size:.72rem;font-weight:500;letter-spacing:.22em;
  text-transform:uppercase;color:var(--dim)}
.kicker b{color:var(--brass);font-weight:500}

/* ---------- nav ---------- */
.nav{position:fixed;top:0;left:0;right:0;z-index:20;transition:background .4s,border-color .4s;border-bottom:1px solid transparent}
.nav.scrolled{background:rgba(8,9,11,.72);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-bottom-color:var(--line)}
/* fixed framing hairlines — pinned to the top & bottom edges of the viewport on every
   page; they stay put while scrolling. Sit above the nav (z30) so the top line stays
   crisp over the frosted header. Draw-in is added under the no-preference block below,
   so reduced-motion / no-JS users simply get static frame lines. */
body::before,
body::after{content:"";position:fixed;left:0;right:0;height:1px;background:var(--line2);z-index:30;pointer-events:none}
body::before{top:0}
body::after{bottom:0}
.nav-in{max-width:var(--maxw);margin:0 auto;padding:16px var(--gutter);
  display:flex;align-items:center;justify-content:space-between;gap:16px}
.brand{font-family:var(--serif);font-size:1.5rem;letter-spacing:0;color:var(--ink);
  display:inline-flex;align-items:baseline}
.brand .four{color:var(--brass);font-style:italic;transition:transform .45s var(--ease)}
.brand:hover .four{transform:translateY(-2px)}
.nav-links{display:flex;align-items:center;gap:clamp(14px,2.6vw,30px)}
.nav-links a{font-family:var(--mono);font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;
  color:var(--dim);position:relative;padding:5px 1px;transition:color .25s}
.nav-links a:not(.nav-cta)::after{content:"";position:absolute;left:0;bottom:1px;height:1px;width:100%;
  background:var(--brass);transform:scaleX(0);transform-origin:left;transition:transform .35s var(--ease)}
.nav-links a:hover{color:var(--ink)}
.nav-links a:not(.nav-cta):hover::after{transform:scaleX(1)}
/* home icon — jumps to the landing; brass on hover, no underline */
.nav-links a.home{display:inline-flex;align-items:center;padding:5px 2px}
.nav-links a.home svg{width:16px;height:16px;display:block;flex:none;max-width:none}
.nav-links a.home::after{display:none}
.nav-links a.home:hover{color:var(--brass)}
.nav-cta{color:var(--brass) !important;border:1px solid var(--brass-35);border-radius:8px;padding:7px 13px;
  transition:color .25s,background .25s,border-color .25s}
.nav-cta:hover{color:var(--brass-hi) !important;background:var(--brass-06);border-color:var(--brass)}
@media(max-width:600px){
  .nav-links{gap:13px}
  .nav-links a{font-size:.66rem;letter-spacing:.1em}
  .brand{font-size:1.3rem}
  .nav-links a.hide-s{display:none}
}
@media(max-width:410px){.nav-links a.hide-xs{display:none}}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;gap:10px;font-family:var(--mono);font-size:.76rem;
  letter-spacing:.1em;text-transform:uppercase;font-weight:500;border-radius:10px;padding:13px 22px;
  transition:transform .3s var(--ease),background .3s,border-color .3s,color .3s,box-shadow .3s}
.btn .arw{transition:transform .3s var(--ease)}
.btn:hover .arw{transform:translateX(4px)}
.btn-brass{background:var(--brass);color:#14100A;border:1px solid var(--brass)}
.btn-brass:hover{background:var(--brass-hi);border-color:var(--brass-hi);transform:translateY(-2px);box-shadow:0 14px 30px -18px rgba(228,162,78,.7)}
.btn-ghost{color:var(--ink);border:1px solid var(--line2)}
.btn-ghost:hover{border-color:var(--dim);transform:translateY(-2px)}
.btn-ghost:hover .arw{transform:translateY(3px)}
.quiet-link{font-family:var(--mono);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:var(--dim);
  border-bottom:1px solid var(--line2);padding-bottom:4px;transition:color .25s,border-color .25s}
.quiet-link:hover{color:var(--brass-hi);border-color:var(--brass)}
.proj-link{font-family:var(--mono);font-size:.72rem;font-weight:500;letter-spacing:.12em;text-transform:uppercase;
  display:inline-flex;align-items:center;gap:10px;color:var(--ink);
  border-bottom:1px solid var(--line2);padding-bottom:5px;transition:color .25s,border-color .25s}
.proj-link .arw{color:var(--brass);transition:transform .3s var(--ease)}
.proj-link:hover{color:var(--brass-hi);border-color:var(--brass)}
.proj-link:hover .arw{transform:translateX(5px)}

/* ---------- status pills ---------- */
.status{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);font-size:.7rem;font-weight:500;
  letter-spacing:.16em;text-transform:uppercase;color:var(--dim);border:1px solid var(--line2);
  padding:6px 12px;border-radius:999px;background:var(--bg2)}
.status i{width:6px;height:6px;border-radius:50%;background:var(--faint);flex:none}
.status.live{color:var(--brass);border-color:var(--brass-35)}
.status.live i{background:var(--brass)}
.status.hollow i{background:transparent;border:1px solid var(--faint)}

/* ---------- hero (landing) ---------- */
.hero{position:relative;padding-block:clamp(104px,12vh,140px) clamp(40px,6vw,64px);overflow:clip}
/* framing rule under the nav — matches every inner page's .ch-page-head border-top
   (1px var(--rule), content-width). Absolute so it never disturbs the hero flow/dial. */
.hero::before{content:"";position:absolute;left:var(--gutter);right:var(--gutter);
  top:calc(72px + clamp(6px,1vw,14px));height:1px;background:var(--rule)}
/* nav-clearance moved off the (removed) breadcrumb onto the first content shell */
#main>div.shell:first-child{padding-top:calc(72px + clamp(6px,1vw,14px))}
.hero-dial{position:absolute;right:max(-150px,-11vw);top:clamp(70px,10vw,120px);
  width:clamp(280px,38vw,520px);opacity:.6;pointer-events:none;
  -webkit-mask-image:radial-gradient(75% 75% at 50% 50%,#000 55%,transparent);
  mask-image:radial-gradient(75% 75% at 50% 50%,#000 55%,transparent)}
.hero-dial svg{width:100%;height:auto;display:block}
.hero-meta{display:flex;justify-content:space-between;gap:10px 24px;flex-wrap:wrap;
  margin-bottom:clamp(34px,5vw,58px)}
.hero h1{font-family:var(--serif);font-weight:400;font-size:clamp(2.9rem,8.4vw,7rem);
  line-height:.97;letter-spacing:-.02em;color:var(--ink)}
.hero h1 .l{display:block}
.hero h1 em{font-style:italic;color:var(--brass-hi)}
.hero-sub{margin-top:clamp(26px,3.6vw,40px)}
.hero-sub p{font-size:clamp(1.14rem,1.8vw,1.42rem);line-height:1.48;color:var(--body);max-width:46ch}
.hero-sub p b{color:var(--ink);font-weight:500}
.hero-cta{display:flex;align-items:center;gap:18px;flex-wrap:wrap;margin-top:clamp(30px,4vw,42px)}

/* ---------- section head ---------- */
.section{padding-block:clamp(38px,5vw,72px) 0}
.sec-head{border-top:1px solid var(--rule);padding-top:16px;
  display:flex;align-items:baseline;gap:clamp(14px,2.5vw,28px);flex-wrap:wrap}
.sec-head .no{font-family:var(--mono);font-size:.78rem;letter-spacing:.2em;color:var(--brass)}
.sec-head h2{font-family:var(--serif);font-weight:400;font-size:clamp(2rem,3.8vw,3rem);
  letter-spacing:-.01em;line-height:1.02;color:var(--ink)}
.sec-head .note{margin-left:auto;font-family:var(--mono);font-size:.72rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--dim)}
@media(max-width:640px){.sec-head .note{margin-left:0;width:100%}}

/* ---------- work index (numbered table of contents) ---------- */
.toc{margin-top:clamp(28px,4vw,44px);border-top:1px solid var(--line);
  display:grid;grid-template-columns:repeat(2,1fr)}
.toc a{padding:22px 18px 24px 2px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);
  display:flex;flex-direction:column;gap:8px;transition:background .3s;min-width:0}
.toc a:nth-child(even){border-right:0}
.toc a:nth-last-child(-n+2){border-bottom:0}
.toc a:hover{background:rgba(255,255,255,.018)}
.toc .no{font-family:var(--mono);font-size:.7rem;letter-spacing:.18em;color:var(--faint)}
.toc .nm{font-family:var(--serif);font-size:1.55rem;color:var(--ink);display:flex;align-items:baseline;gap:8px;line-height:1.1}
.toc .nm .arw{font-family:var(--sans);font-size:.85rem;color:var(--brass);
  transform:translateX(-4px);opacity:0;transition:transform .3s var(--ease),opacity .3s}
.toc a:hover .nm .arw{transform:none;opacity:1}
.toc .pr{font-family:var(--serif);font-style:italic;font-size:1.02rem;color:var(--brass-hi);line-height:1.25}
.toc .st{font-family:var(--mono);font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;color:var(--dim);
  display:inline-flex;align-items:center;gap:8px;margin-top:2px}
.toc .st i{width:5px;height:5px;border-radius:50%;background:var(--faint);flex:none}
.toc .st.live{color:var(--brass)}
.toc .st.live i{background:var(--brass)}
@media(max-width:640px){
  .toc{grid-template-columns:1fr}
  .toc a{border-right:0;border-bottom:1px solid var(--line);padding:18px 2px}
  .toc a:last-child{border-bottom:0}
}

/* ---------- studio (compact) ---------- */
.studio{padding:clamp(30px,4.4vw,52px) 0 clamp(6px,2vw,18px);
  display:grid;grid-template-columns:minmax(0,1.55fr) minmax(0,1fr);gap:clamp(24px,4vw,60px)}
.studio .big{font-family:var(--serif);font-size:clamp(1.55rem,2.9vw,2.4rem);line-height:1.28;
  letter-spacing:-.01em;color:var(--ink)}
.studio .big em{font-style:italic;color:var(--brass-hi)}
.studio aside p{color:var(--body);font-size:1rem;max-width:36ch}
.studio aside .proj-link{margin-top:20px}
@media(max-width:880px){.studio{grid-template-columns:1fr;gap:26px}}

/* ---------- scratchpad strip ---------- */
.scratch{border-top:1px solid var(--line);margin-top:clamp(28px,4vw,44px)}
.scratch a{display:grid;grid-template-columns:auto 1fr auto;align-items:baseline;gap:16px 22px;
  padding:22px 4px 22px 2px;border-bottom:1px solid var(--line);transition:background .3s;min-width:0}
.scratch a:hover{background:rgba(255,255,255,.018)}
.scratch .date{font-family:var(--mono);font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:var(--faint);white-space:nowrap}
.scratch .t{font-family:var(--serif);font-size:clamp(1.2rem,2.2vw,1.6rem);color:var(--ink);line-height:1.2;min-width:0}
.scratch .t span{color:var(--dim);font-style:italic;font-size:.82em}
.scratch .arw{font-family:var(--sans);color:var(--brass);transform:translateX(-4px);opacity:0;
  transition:transform .3s var(--ease),opacity .3s}
.scratch a:hover .arw{transform:none;opacity:1}
.scratch-all{margin-top:22px}
@media(max-width:560px){
  .scratch a{grid-template-columns:1fr auto;gap:6px 16px}
  .scratch .date{grid-column:1;order:2;grid-row:2}
  .scratch .t{grid-column:1;order:1}
}

/* ---------- breadcrumb ---------- */
.crumb{padding-top:calc(16px + 66px + clamp(20px,4vw,40px));display:flex;align-items:center;gap:10px;
  flex-wrap:wrap;font-family:var(--mono);font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:var(--dim)}
.crumb a{border-bottom:1px solid var(--line2);padding-bottom:2px;transition:color .25s,border-color .25s}
.crumb a:hover{color:var(--brass-hi);border-color:var(--brass)}
.crumb .sep{color:var(--faint)}
.crumb b{color:var(--brass);font-weight:500}
.crumb .here{color:var(--ink)}
.crumb .a{color:var(--brass);transition:transform .3s var(--ease);display:inline-block}
.crumb a:hover .a{transform:translateX(-3px)}

/* ---------- project hero (Carillon overview) ---------- */
.p-hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:clamp(28px,5vw,72px);align-items:start;padding:clamp(12px,2.2vw,26px) 0 clamp(40px,6vw,76px)}
.p-no{font-family:var(--serif);font-style:italic;font-size:clamp(3rem,6.5vw,5.2rem);line-height:.85;
  color:transparent;-webkit-text-stroke:1px rgba(255,255,255,.22);display:block;margin-bottom:16px;user-select:none}
@supports not (-webkit-text-stroke:1px black){.p-no{color:var(--line2)}}
.p-hero h1{font-family:var(--serif);font-weight:400;font-size:clamp(3.2rem,8vw,6.2rem);
  line-height:.94;letter-spacing:-.02em;margin:14px 0 16px;color:var(--ink)}
.p-hero .promise{font-family:var(--serif);font-style:italic;font-size:clamp(1.5rem,2.6vw,2.1rem);
  color:var(--brass-hi);margin-bottom:18px;letter-spacing:-.01em}
.p-sum{color:var(--body);max-width:46ch;font-size:clamp(1.02rem,1.3vw,1.14rem)}
.p-cta{margin-top:30px;display:flex;align-items:center;gap:20px;flex-wrap:wrap}
@media(max-width:920px){
  .p-hero{grid-template-columns:1fr;gap:40px}
  .p-hero .orrery{order:-1}
}

/* the orrery plate — the living signature (Carillon only) */
.orrery{position:relative}
.orrery-canvas{width:100%;aspect-ratio:1/1;display:block}
.legend{display:flex;align-items:center;gap:18px;flex-wrap:wrap;margin-top:16px;padding-top:12px;
  border-top:1px solid var(--line);font-family:var(--mono);font-size:.64rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--dim)}
.legend span{display:inline-flex;align-items:center;gap:8px}
.sw{width:8px;height:8px;border-radius:50%;flex:none}
.sw-you{background:var(--brass-hi);box-shadow:0 0 0 3px var(--brass-16)}
.sw-p{background:rgba(255,255,255,.78)}
.sw-c{background:var(--brass)}
.sw-t{width:16px;height:1px;border-radius:0;background:rgba(255,255,255,.36)}

/* ---------- plates (framed technical figures) ---------- */
.plate{position:relative;background:
    radial-gradient(85% 90% at 50% 28%, rgba(255,255,255,.022), transparent 74%),
    linear-gradient(180deg,rgba(255,255,255,.015),rgba(255,255,255,0));
  border:1px solid var(--line);padding:clamp(16px,2.2vw,28px)}
.plate::before,.plate::after{content:"";position:absolute;width:13px;height:13px;pointer-events:none}
.plate::before{top:-1px;left:-1px;border-top:1px solid var(--brass);border-left:1px solid var(--brass)}
.plate::after{bottom:-1px;right:-1px;border-bottom:1px solid var(--brass);border-right:1px solid var(--brass)}
.plate svg{width:100%;height:auto;display:block}
.plate figcaption{margin-top:14px;padding-top:10px;border-top:1px solid var(--line);
  font-family:var(--mono);font-size:.66rem;letter-spacing:.16em;text-transform:uppercase;color:var(--dim);
  display:flex;justify-content:space-between;gap:6px 12px;flex-wrap:wrap}
.plate figcaption b{color:var(--brass);font-weight:500}
/* svg stroke vocabulary (dark) */
.sk{stroke:rgba(255,255,255,.52);fill:none}
.sk-2{stroke:rgba(255,255,255,.32);fill:none}
.sk-f{stroke:rgba(255,255,255,.16);fill:none}
.sk-r{stroke:rgba(255,255,255,.09);fill:none}
.sk-a{stroke:var(--brass);fill:none}
.fl-a{fill:var(--brass)}
.fl-hi{fill:var(--brass-hi)}
.fl-i{fill:rgba(255,255,255,.82)}
.fl-p{fill:var(--bg)}
.svg-lbl{font-family:'Geist Mono',monospace;font-size:10.5px;letter-spacing:.2em;
  fill:var(--dim);paint-order:stroke;stroke:var(--bg);stroke-width:5px}
.svg-lbl.a{fill:var(--brass)}
.svg-lbl.big{font-size:12px}

/* ---------- overview "contents" list ---------- */
.contents{margin-top:clamp(50px,7vw,96px)}
.contents-list{margin-top:clamp(20px,3vw,30px);border-top:1px solid var(--line)}
.contents-list a{display:grid;grid-template-columns:auto 1fr auto;align-items:baseline;gap:6px 22px;
  padding:22px 4px 22px 2px;border-bottom:1px solid var(--line);transition:background .3s;min-width:0}
.contents-list a:hover{background:rgba(255,255,255,.018)}
.contents-list .cn{font-family:var(--mono);font-size:.7rem;letter-spacing:.18em;color:var(--faint);white-space:nowrap;padding-top:6px}
.contents-list .cw{min-width:0}
.contents-list .ct{font-family:var(--serif);font-size:clamp(1.3rem,2.4vw,1.85rem);color:var(--ink);line-height:1.15;
  display:flex;align-items:baseline;gap:10px}
.contents-list .ct .arw{font-family:var(--sans);font-size:.9rem;color:var(--brass);transform:translateX(-4px);opacity:0;
  transition:transform .3s var(--ease),opacity .3s}
.contents-list a:hover .ct .arw{transform:none;opacity:1}
.contents-list .cd{display:block;margin-top:5px;color:var(--dim);font-size:.96rem;max-width:56ch}
.contents-list .cg{align-self:center;font-family:var(--mono);font-size:.64rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--faint);white-space:nowrap}
@media(max-width:560px){
  .contents-list a{grid-template-columns:auto 1fr;gap:4px 16px}
  .contents-list .cg{display:none}
}

/* ---------- chapter contents rail ---------- */
.rail{display:flex;flex-wrap:wrap;margin-top:clamp(18px,3vw,28px);
  border-top:1px solid var(--rule);border-bottom:1px solid var(--line)}
.rail a{display:flex;align-items:baseline;gap:9px;padding:13px clamp(12px,2vw,20px) 13px 0;min-width:0;
  font-family:var(--mono);font-size:.66rem;letter-spacing:.13em;text-transform:uppercase;color:var(--dim);
  transition:color .25s}
.rail a+a{padding-left:clamp(12px,2vw,20px);border-left:1px solid var(--line)}
.rail .rn{color:var(--faint)}
.rail a:hover{color:var(--ink)}
.rail a.here{color:var(--brass);pointer-events:none}
.rail a.here .rn{color:var(--brass)}
@media(max-width:640px){
  .rail a{font-size:.62rem;letter-spacing:.1em;padding:11px 12px 11px 0}
  .rail a+a{padding-left:12px}
}

/* ---------- chapter page head ---------- */
.ch-page{padding-top:clamp(6px,1.2vw,14px)}
.ch-page-head{border-top:1px solid var(--rule);padding-top:clamp(13px,2vw,19px);margin-bottom:clamp(18px,2.8vw,30px)}
.ch-mark{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;
  font-family:var(--mono);font-size:.72rem;letter-spacing:.2em;text-transform:uppercase;color:var(--brass)}
.ch-mark .sub{color:var(--dim)}
.ch-page-head h1{font-family:var(--serif);font-weight:400;font-size:clamp(2.4rem,6vw,4rem);
  line-height:.98;letter-spacing:-.02em;margin-top:clamp(14px,2.4vw,22px);color:var(--ink)}
/* shared intro line under a page h1 (Scratchpad, Work) */
.lead{margin-top:clamp(18px,2.6vw,26px);color:var(--body);max-width:60ch;
  font-size:clamp(1.06rem,1.5vw,1.22rem);line-height:1.5}
/* the hero's own ch-mark sits above the H1 with the same rhythm .ch-page-head gives it */
.hero .ch-mark{margin-bottom:clamp(14px,2.4vw,22px)}

/* ---------- chapter columns (copy + figure) ---------- */
.ch-cols{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(28px,5vw,72px);align-items:center}
.ch-cols.rev .ch-copy{order:2}
.ch-cols.rev .ch-fig{order:1}
@media(max-width:920px){
  .ch-cols{grid-template-columns:1fr;gap:34px}
  .ch-cols .ch-fig{order:-1}
  .ch-cols.rev .ch-copy{order:1}
  .ch-cols.rev .ch-fig{order:-1}
}
.ch-copy .lede{font-family:var(--serif);font-size:clamp(1.4rem,2.2vw,1.85rem);line-height:1.32;
  letter-spacing:-.01em;margin-bottom:18px;color:var(--ink)}
.ch-copy .lede em{color:var(--brass-hi);font-style:italic}
.ch-copy p.body{color:var(--body);max-width:50ch}
.ch-copy p.body+p.body{margin-top:14px}
.ch-copy p.body b{color:var(--ink);font-weight:500}
.ch-copy .p-cta{margin-top:26px}

/* ledger — editorial capability table */
.ledger{margin-top:28px;border-top:1px solid var(--line2)}
.ledger-row{display:grid;grid-template-columns:minmax(120px,170px) 1fr;gap:10px 24px;
  padding:16px 0;border-bottom:1px solid var(--line)}
.ledger-row dt{font-family:var(--mono);font-size:.7rem;font-weight:500;letter-spacing:.16em;text-transform:uppercase;
  color:var(--brass);padding-top:4px}
.ledger-row dd{color:var(--body);font-size:.98rem;max-width:52ch}
@media(max-width:560px){.ledger-row{grid-template-columns:1fr;gap:4px}}

/* ---------- emphasis band (full-bleed, "private by design") ---------- */
.emphasis{position:relative;border-block:1px solid var(--brass-16)}
.emphasis::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  background:
    radial-gradient(120% 150% at 50% -20%, var(--brass-06), transparent 55%),
    radial-gradient(80% 120% at 12% 120%, rgba(228,162,78,.05), transparent 60%)}
.emphasis .em-in{position:relative;z-index:1;padding-block:clamp(44px,6.5vw,84px)}
.emphasis .ch-page-head{border-top:0;padding-top:0}
.emphasis .ch-page-head h1{color:var(--brass-hi)}

/* ---------- status/access band ---------- */
.band{margin-top:clamp(50px,7vw,96px);border-top:1px solid var(--rule);
  padding:clamp(40px,6vw,72px) 0 clamp(10px,2vw,20px);
  display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:clamp(24px,4vw,64px);align-items:center}
.band h2{font-family:var(--serif);font-weight:400;font-size:clamp(2rem,4vw,3rem);
  letter-spacing:-.01em;margin:16px 0 14px;line-height:1.04;color:var(--ink)}
.band p{color:var(--body);max-width:46ch}
.band-cta{display:flex;flex-direction:column;align-items:flex-start;gap:18px}
@media(max-width:880px){.band{grid-template-columns:1fr}}

/* ---------- prev / next chapter pager ---------- */
.pager{margin-top:clamp(44px,6vw,82px);border-top:1px solid var(--rule);
  display:grid;grid-template-columns:1fr 1fr;gap:0}
.pager a{padding:24px 2px 26px;display:flex;flex-direction:column;gap:7px;transition:background .3s;min-width:0}
.pager a.prev{padding-right:18px;border-right:1px solid var(--line)}
.pager a.next{padding-left:18px;text-align:right;align-items:flex-end}
.pager a:hover{background:rgba(255,255,255,.018)}
.pager .dir{font-family:var(--mono);font-size:.66rem;letter-spacing:.18em;text-transform:uppercase;color:var(--faint);
  display:inline-flex;align-items:center;gap:8px}
.pager .dir .a{color:var(--brass);display:inline-block;transition:transform .3s var(--ease)}
.pager a.prev:hover .dir .a{transform:translateX(-4px)}
.pager a.next:hover .dir .a{transform:translateX(4px)}
.pager .pt{font-family:var(--serif);font-size:clamp(1.2rem,2.4vw,1.7rem);color:var(--ink);line-height:1.15}
.pager a:hover .pt{color:var(--brass-hi)}
@media(max-width:560px){
  .pager{grid-template-columns:1fr}
  .pager a.prev{border-right:0;border-bottom:1px solid var(--line);padding-right:2px}
  .pager a.next{padding-left:2px;text-align:left;align-items:flex-start}
}

/* ---------- footer ---------- */
footer{margin-top:clamp(42px,6vw,80px)}
.foot-min{max-width:var(--maxw);margin:0 auto;padding:16px var(--gutter) clamp(22px,3vw,32px);display:flex;justify-content:space-between;align-items:center;gap:10px 24px;flex-wrap:wrap;border-top:1px solid var(--line);font-family:var(--mono);font-size:.68rem;letter-spacing:.1em;color:var(--faint)}
.foot-min a{color:var(--faint);transition:color .25s}
.foot-min a:hover{color:var(--body)}
.foot-min .four{color:var(--brass)}
.foot-in{max-width:var(--maxw);margin:0 auto;padding:36px var(--gutter) 40px}
.foot-top{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,2fr);gap:32px 48px;
  padding-bottom:30px;border-bottom:1px solid var(--line)}
.foot-brand .b{font-family:var(--serif);font-size:1.6rem;color:var(--ink);display:inline-flex;align-items:baseline}
.foot-brand .b .four{color:var(--brass);font-style:italic}
.foot-brand p{margin-top:12px;font-size:.94rem;color:var(--dim);max-width:34ch}
.foot-map{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.foot-map h4{font-family:var(--mono);font-size:.66rem;letter-spacing:.18em;text-transform:uppercase;
  color:var(--faint);margin-bottom:14px;font-weight:500}
.foot-map a{display:block;font-size:.92rem;color:var(--body);padding:4px 0;transition:color .25s}
.foot-map a:hover{color:var(--brass-hi)}
.foot-bottom{display:flex;justify-content:space-between;gap:12px 26px;flex-wrap:wrap;padding-top:22px}
.foot-bottom span,.foot-bottom a{font-family:var(--mono);font-size:.68rem;letter-spacing:.1em;color:var(--faint)}
.foot-bottom a:hover{color:var(--body)}
.foot-bottom .four{color:var(--brass)}
.colophon{margin-top:16px;font-family:var(--mono);font-size:.66rem;letter-spacing:.08em;color:var(--faint)}
@media(max-width:760px){
  .foot-top{grid-template-columns:1fr;gap:28px}
  .foot-map{grid-template-columns:repeat(3,1fr);gap:16px}
}
@media(max-width:460px){.foot-map{grid-template-columns:1fr 1fr}}

/* ============================================================
   MOTION — disciplined, gated behind no-preference
   ============================================================ */
@media(prefers-reduced-motion:no-preference){
  .js [data-reveal]{opacity:0;transform:translateY(20px);
    transition:opacity .8s var(--ease),transform .8s var(--ease);transition-delay:var(--d,0ms)}
  .js [data-reveal].in{opacity:1;transform:none}
  .js .plate .draw{stroke-dasharray:1;stroke-dashoffset:1;transition:stroke-dashoffset 1.6s ease .25s}
  .js .plate.in .draw{stroke-dashoffset:0}
  .ring-a,.ring-b,.ring-c,.dial-spin{transform-box:view-box}
  .ring-a{animation:spin 120s linear infinite;transform-origin:280px 280px}
  .ring-b{animation:spin 92s linear infinite reverse;transform-origin:280px 280px}
  .ring-c{animation:spin 150s linear infinite;transform-origin:280px 280px}
  .dial-spin{animation:spin 180s linear infinite;transform-origin:230px 230px}
  @keyframes spin{to{transform:rotate(360deg)}}
  .pip{animation:pip 2.8s ease-in-out infinite}
  @keyframes pip{0%,100%{opacity:1}50%{opacity:.35}}
  .flow{stroke-dasharray:5 8;animation:flow 3.2s linear infinite}
  @keyframes flow{to{stroke-dashoffset:-26}}
  /* framing hairlines draw in from the centre — gated on .frames-lit, which JS adds via
     rAF only after a live paint. rAF is deferred in a background tab, so a hidden tab
     (and no-JS, and reduced motion) shows the lines STATICALLY rather than collapsed to
     invisible. Structure never depends on the animation completing — same discipline as
     the orrery's synchronous static first frame. */
  html.frames-lit body::before,html.frames-lit body::after{transform-origin:50% 50%;animation:frame-in 1s var(--ease) both}
  @keyframes frame-in{from{transform:scaleX(0)}to{transform:scaleX(1)}}
  html.paused *{animation-play-state:paused !important}
}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
