/* ============================================================
   phyllotaxis.life — v2 · site stylesheet (m03 design language)
   Registers: default (paper) · t-mist (Stone & Crane) · t-substrate (tools)
   Loads on every page. Header/footer/ribbon markup injected by scripts/includes.js
   ============================================================ */
:root{
  --paper:#f5efe4; --paper-soft:#fbf7ef; --paper-deep:#ebe3d2;
  --ink:#1a1613; --ink-soft:#4a403a; --ink-mute:#7a6e64;
  --rule:#cdbfa8; --rule-soft:#e1d6bf;
  --quince:#c2603a; --indigo:#2a3c5f; --gold:#d4a23a; --ochre:#9a6d16;
  --desk:#e4dcc9;
  --serif:'Fraunces','Iowan Old Style',Georgia,serif;
  --reading:'Newsreader','Iowan Old Style',Georgia,serif;
  --mono:'JetBrains Mono',ui-monospace,Menlo,monospace;
}
body.t-mist{
  --paper:#c9cfc9; --paper-deep:#b8c0ba; --paper-soft:#e2e3dd;
  --ink:#2e3a36; --ink-soft:#5a6660; --ink-mute:#818b85;
  --rule:#8e9890; --rule-soft:#b6bdb6;
  --quince:#a25e3a; --indigo:#4d5e4f; --gold:#a25e3a; --ochre:#7f4a2c;
  --desk:#aab2ab;
}
body.t-substrate{
  --paper:#0f1620; --paper-deep:#0a0d12; --paper-soft:#1a2332;
  --ink:#ece1c7; --ink-soft:#b3a687; --ink-mute:#8a7e66;
  --rule:#2a3548; --rule-soft:#1a2332;
  --quince:#d4a23a; --indigo:#7d92bc; --gold:#d4a23a; --ochre:#d4a23a;
  --desk:#05070c;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:var(--desk);color:var(--ink);font-family:var(--serif);font-size:16px;line-height:1.55;font-variation-settings:"opsz" 14}
img{max-width:100%;display:block}
a{color:var(--quince)}
a:hover{color:var(--ochre)}
.page{max-width:1180px;margin:0 auto;background:var(--paper);box-shadow:0 24px 80px -50px rgba(20,15,8,.55);min-height:100vh;display:flex;flex-direction:column}
main{flex:1 0 auto}

/* ===== nameplate ===== */
.np{border-bottom:1px solid var(--rule);padding:22px 40px 20px;background:var(--paper);display:grid;grid-template-columns:32px 1fr auto;gap:16px;align-items:center}
.np-mark{width:32px;height:32px;color:var(--quince)}
.np-wm{font-family:var(--serif);font-size:19px;font-weight:500;line-height:1.1;color:var(--ink);font-variation-settings:"opsz" 36}
.np-wm a{color:inherit;text-decoration:none}
.np-wm em{font-style:normal;color:var(--quince)}
.np-wm .tld{color:var(--ink-mute);font-weight:400}
.np-wm .sub{display:block;font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);margin-top:4px;font-weight:400}
.np-nav{display:flex;gap:20px;align-items:center;flex-wrap:wrap;justify-content:flex-end;font-family:var(--mono);font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-soft)}
.np-nav a{color:inherit;text-decoration:none}
.np-nav a:hover{color:var(--quince)}
.np-nav a.here{color:var(--quince)}
.np-nav .sub-btn{border:1px solid var(--rule);padding:6px 10px;color:var(--ink)}
.np-nav .sub-btn:hover{border-color:var(--quince)}
@media (max-width:900px){.np{grid-template-columns:32px 1fr}.np-nav{grid-column:1/-1;justify-content:flex-start}}

/* ===== section ribbon ===== */
.section-ribbon{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:12px 40px;border-bottom:1px solid var(--rule);background:var(--paper-soft)}
.section-ribbon .sr-left{display:flex;align-items:center;gap:13px}
.section-ribbon .sr-glyph{width:20px;height:20px;color:var(--quince);flex:none}
.section-ribbon .sr-name{font-family:var(--serif);font-style:italic;font-size:17px;color:var(--ink);font-variation-settings:"opsz" 36}
.section-ribbon .sr-desc{font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);padding-left:13px;border-left:1px solid var(--rule)}
.section-ribbon .sr-nav{display:flex;gap:20px;font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft)}
.section-ribbon .sr-nav a{color:inherit;text-decoration:none}
.section-ribbon .sr-nav a:hover,.section-ribbon .sr-nav a.here{color:var(--quince)}
@media (max-width:720px){.section-ribbon .sr-desc{display:none}.section-ribbon .sr-nav{display:none}}

/* ===== footer ===== */
.mock-foot{flex-shrink:0;padding:22px 40px;border-top:1px solid var(--rule);background:var(--paper-soft);font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute);display:flex;justify-content:space-between;gap:24px;flex-wrap:wrap}
.mock-foot .engine{color:var(--quince)}
.mock-foot nav{display:flex;gap:18px;flex-wrap:wrap}
.mock-foot a{color:inherit;text-decoration:none}
.mock-foot a:hover{color:var(--quince)}

/* ===== page head + hero ===== */
.page-head{padding:40px 40px 30px;border-bottom:1px solid var(--rule)}
.page-head .ph-kicker{font-family:var(--mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--quince);margin:0 0 14px}
.page-head h1{font-family:var(--serif);font-weight:400;font-size:52px;line-height:1.02;letter-spacing:-.018em;margin:0 0 16px;max-width:20ch;font-variation-settings:"opsz" 144}
.page-head h1 em{font-style:italic;color:var(--ink-soft)}
.page-head .ph-dek{font-family:var(--serif);font-style:italic;font-size:21px;line-height:1.4;color:var(--ink-soft);margin:0;max-width:56ch}
.page-hero{position:relative;height:340px;background:#05080d;overflow:hidden;border-bottom:1px solid var(--rule)}
.page-hero img{width:100%;height:100%;object-fit:cover;opacity:.92}
.page-hero .ph-caption{position:absolute;left:40px;right:40px;bottom:16px;display:flex;justify-content:space-between;gap:16px;font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:rgba(239,231,214,.8)}

/* ===== prose column ===== */
.prose{max-width:64ch;margin:0 auto;padding:40px 40px 48px;font-family:var(--reading)}
.prose h2{font-family:var(--serif);font-weight:500;font-size:26px;line-height:1.2;margin:44px 0 14px;letter-spacing:-.005em;color:var(--ink);font-variation-settings:"opsz" 72}
.prose h2:first-child{margin-top:0}
.prose p{font-size:18px;line-height:1.7;color:var(--ink);margin:0 0 1.05em}
.prose p.lead{font-family:var(--serif);font-style:italic;font-size:22px;line-height:1.45;color:var(--ink-soft);margin-bottom:1.2em;font-variation-settings:"opsz" 36}
.prose a{color:var(--quince);text-decoration:none;border-bottom:1px solid var(--rule)}
.prose ul{padding-left:1.2em}
.prose .colophon{margin-top:36px;padding:22px 24px;background:var(--paper-soft);border:1px solid var(--rule);font-family:var(--mono);font-size:12px;line-height:1.7;letter-spacing:.02em;color:var(--ink-soft)}
.prose .colophon b{color:var(--ink);font-weight:500}

/* draft placeholders — text still to be written by the author */
.todo{color:var(--ink-mute)!important;font-style:italic}
.todo::before{content:"draft";font-family:var(--mono);font-style:normal;font-size:8.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--quince);border:1px solid color-mix(in srgb,var(--quince) 45%,transparent);padding:1px 5px;border-radius:2px;margin-right:9px;vertical-align:2px;white-space:nowrap}

/* ===== volume head (homepage) ===== */
.volume{padding:36px 40px 30px;border-bottom:1px solid var(--rule);display:grid;grid-template-columns:1fr auto;gap:24px;align-items:end}
.volume .v-label{font-family:var(--mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--quince);margin-bottom:8px}
.volume h2{font-family:var(--serif);font-weight:400;font-size:36px;line-height:1.08;letter-spacing:-.012em;margin:0;max-width:28ch;font-variation-settings:"opsz" 96}
.volume h2 em{font-style:italic;color:var(--ink-soft)}
.volume .v-meta{font-family:var(--mono);font-size:10px;letter-spacing:.16em;color:var(--ink-mute);text-transform:uppercase;line-height:1.7;text-align:right}
@media (max-width:800px){.volume{grid-template-columns:1fr}.volume .v-meta{text-align:left}}

/* ===== series hero (homepage feature) ===== */
.series-hero{display:grid;grid-template-columns:360px 1fr;gap:36px;padding:32px 40px 36px;border-bottom:1px solid var(--rule)}
.series-img{position:relative;background:#05080d;height:380px;overflow:hidden}
.series-img img{width:100%;height:100%;object-fit:cover;opacity:.9}
.series-img-caption{position:absolute;left:14px;right:14px;bottom:10px;display:flex;justify-content:space-between;gap:12px;font-family:var(--mono);font-size:9.5px;letter-spacing:.18em;text-transform:uppercase;color:rgba(239,231,214,.72)}
.series-text{display:flex;flex-direction:column}
.series-label{font-family:var(--mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--quince);margin-bottom:10px;display:flex;gap:16px;justify-content:space-between}
.series-label .progress{color:var(--ink-mute)}
.series-text h3{font-family:var(--serif);font-weight:400;font-size:32px;line-height:1.08;letter-spacing:-.012em;margin:0 0 10px;max-width:24ch;font-variation-settings:"opsz" 72}
.series-text h3 a{color:inherit;text-decoration:none}
.series-text h3 em{font-style:italic;color:var(--ink-soft)}
.series-text .series-dek{font-style:italic;color:var(--ink-soft);font-size:16px;line-height:1.5;max-width:56ch;margin:0 0 18px}
.installments{list-style:none;padding:0;margin:0 0 18px;display:grid;gap:0;border-top:1px solid var(--rule)}
.installments li{display:grid;grid-template-columns:50px 1fr auto;gap:16px;align-items:baseline;padding:9px 4px 9px 0;border-bottom:1px dashed var(--rule-soft);color:var(--ink-mute)}
.installments .num{font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--quince)}
.installments .ttl{font-family:var(--serif);font-size:15px;line-height:1.35;font-style:italic;font-variation-settings:"opsz" 14;color:var(--ink)}
.installments .ttl a{color:inherit;text-decoration:none}
.installments .ttl a:hover{color:var(--quince)}
.installments .meta{font-family:var(--mono);font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute);white-space:nowrap}
.read-link{font-family:var(--mono);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--quince);text-decoration:none;border-bottom:1px solid var(--quince);padding-bottom:2px;align-self:start;margin-top:auto}
@media (max-width:900px){.series-hero{grid-template-columns:1fr}.series-img{height:240px}}

/* ===== section head row + cards ===== */
.os-head{display:grid;grid-template-columns:auto 1fr auto;gap:18px;align-items:baseline;padding:28px 40px 0}
.os-head .label{font-family:var(--mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--quince)}
.os-head .name{font-family:var(--serif);font-style:italic;font-size:17px;color:var(--ink-soft);font-variation-settings:"opsz" 36}
.os-head .all{font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute);text-decoration:none;text-align:right}
.os-head .all:hover{color:var(--quince)}
.os-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;padding:18px 40px 36px}
.os-card{display:grid;grid-template-rows:130px auto;background:var(--paper);border:1px solid var(--rule);color:var(--ink);text-decoration:none;transition:border-color .2s ease}
.os-card.noimg{grid-template-rows:auto}
.os-card:hover{border-color:var(--quince)}
.os-card:hover h4{color:var(--quince)}
.os-card h4{transition:color .2s ease}
.os-card .os-img{background:#05080d;overflow:hidden;position:relative}
.os-card .os-img img{width:100%;height:100%;object-fit:cover;opacity:.84}
.os-card .os-body{padding:14px 16px 16px}
.os-card .os-meta{font-family:var(--mono);font-size:9.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:7px}
.os-card .os-meta .cat{color:var(--quince)}
.os-card h4{font-family:var(--serif);font-weight:500;font-size:17px;line-height:1.25;letter-spacing:-.005em;margin:0 0 7px;font-variation-settings:"opsz" 36}
.os-card h4 em{font-style:italic;color:var(--ink-soft)}
.os-card p{font-family:var(--serif);font-size:14px;line-height:1.55;color:var(--ink-soft);margin:0;font-style:italic}
@media (max-width:900px){.os-cards{grid-template-columns:1fr}}

/* ===== series header page ===== */
.series-header{display:grid;grid-template-columns:1fr 380px;gap:44px;padding:40px 40px 36px;border-bottom:1px solid var(--rule);align-items:center}
.series-header .sh-text .label{font-family:var(--mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--quince);margin-bottom:14px;display:flex;gap:16px}
.series-header .sh-text .label .status{color:var(--ink-mute)}
.series-header .sh-text h1{font-family:var(--serif);font-weight:400;font-size:56px;line-height:1.0;letter-spacing:-.02em;margin:0 0 18px;font-variation-settings:"opsz" 144}
.series-header .sh-text h1 em{font-style:italic;color:var(--ink-soft)}
.series-header .sh-text .dek{font-family:var(--serif);font-style:italic;font-size:20px;line-height:1.45;color:var(--ink-soft);margin:0 0 20px;max-width:52ch}
.series-header .sh-text .meta{font-family:var(--mono);font-size:11px;letter-spacing:.1em;color:var(--ink-mute);display:flex;gap:20px;flex-wrap:wrap}
.series-header .sh-text .meta b{color:var(--ink);font-weight:500}
.series-header .sh-plate{position:relative;height:360px;background:#05080d;overflow:hidden}
.series-header .sh-plate img{width:100%;height:100%;object-fit:cover;opacity:.9}
.series-header .sh-plate .cap{position:absolute;left:14px;right:14px;bottom:10px;display:flex;justify-content:space-between;font-family:var(--mono);font-size:9.5px;letter-spacing:.18em;text-transform:uppercase;color:rgba(239,231,214,.72)}
@media (max-width:900px){.series-header{grid-template-columns:1fr}.series-header .sh-plate{height:240px}}

/* ===== rich essay list ===== */
.essay-list{list-style:none;padding:0;margin:0}
.essay-list>li{display:grid;grid-template-columns:64px 1fr 170px;gap:26px;align-items:baseline;padding:22px 40px;border-bottom:1px solid var(--rule-soft)}
.essay-list>li:last-child{border-bottom:0}
.essay-list .el-num{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--quince)}
.essay-list .el-main h3{font-family:var(--serif);font-weight:500;font-size:22px;line-height:1.22;margin:0 0 6px;letter-spacing:-.005em;color:var(--ink);font-variation-settings:"opsz" 36}
.essay-list .el-main h3 a{color:inherit;text-decoration:none}
.essay-list .el-main h3 a:hover{color:var(--quince)}
.essay-list .el-main h3 em{font-style:italic;font-weight:400;color:var(--ink-soft)}
.essay-list .el-main .excerpt{font-family:var(--serif);font-style:italic;font-size:15px;line-height:1.5;color:var(--ink-soft);margin:0;max-width:60ch}
.essay-list .el-meta{font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-mute);text-align:right;line-height:1.7}
.essay-list .el-meta .forth{color:var(--quince)}
@media (max-width:720px){.essay-list>li{grid-template-columns:1fr;gap:6px}.essay-list .el-meta{text-align:left}}

/* ===== archive groups + rows ===== */
.archive-head{padding:40px 40px 26px;border-bottom:1px solid var(--rule)}
.archive-head .label{font-family:var(--mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--quince);margin:0 0 12px}
.archive-head h1{font-family:var(--serif);font-weight:400;font-size:52px;line-height:1.0;letter-spacing:-.018em;margin:0 0 14px;font-variation-settings:"opsz" 144}
.archive-head h1 em{font-style:italic;color:var(--ink-soft)}
.archive-head .dek{font-family:var(--serif);font-style:italic;font-size:19px;line-height:1.45;color:var(--ink-soft);margin:0;max-width:58ch}
.archive-head .dek.spaced{margin-bottom:22px}
.archive-filters{display:flex;gap:10px;flex-wrap:wrap;font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase}
.archive-filters button{font:inherit;letter-spacing:.14em;text-transform:uppercase;cursor:pointer;border:1px solid var(--rule);background:transparent;color:var(--ink-soft);padding:7px 13px;transition:border-color .15s ease,color .15s ease}
.archive-filters button.on{border-color:var(--quince);color:var(--quince);background:color-mix(in srgb,var(--quince) 8%,transparent)}
.archive-filters button:hover{color:var(--quince)}
.arch-group{border-bottom:1px solid var(--rule)}
.arch-group:last-of-type{border-bottom:0}
.arch-group .ag-head{display:grid;grid-template-columns:auto 1fr auto;gap:18px;align-items:baseline;padding:26px 40px 14px}
.arch-group .ag-head .g-name{font-family:var(--serif);font-weight:500;font-size:22px;color:var(--ink);font-variation-settings:"opsz" 36}
.arch-group .ag-head .g-rule{height:1px;background:var(--rule);transform:translateY(-6px)}
.arch-group .ag-head .g-count{font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute)}
.arch-series-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;padding:6px 40px 30px}
.arch-series-cards .asc{display:grid;grid-template-rows:120px auto;border:1px solid var(--rule);text-decoration:none;color:var(--ink);background:var(--paper);transition:border-color .2s ease}
.arch-series-cards .asc:hover{border-color:var(--quince)}
.arch-series-cards .asc .im{background:#05080d;overflow:hidden}
.arch-series-cards .asc .im img{width:100%;height:100%;object-fit:cover;opacity:.84}
.arch-series-cards .asc .bd{padding:13px 15px 15px}
.arch-series-cards .asc .m{font-family:var(--mono);font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:6px}
.arch-series-cards .asc .m .c{color:var(--quince)}
.arch-series-cards .asc h3{font-family:var(--serif);font-weight:500;font-size:17px;line-height:1.22;margin:0;font-variation-settings:"opsz" 36}
.arch-series-cards .asc h3 em{font-style:italic;font-weight:400;color:var(--ink-soft)}
.asc.placeholder{background:repeating-linear-gradient(135deg,var(--paper) 0 8px,var(--paper-soft) 8px 16px);display:flex;align-items:center;justify-content:center;text-align:center;padding:18px;min-height:170px;border:1px solid var(--rule)}
.asc.placeholder .ph-text{font-family:var(--serif);font-style:italic;font-size:14px;color:var(--ink-mute);line-height:1.5;max-width:24ch}
.asc.placeholder .ph-text b{color:var(--quince);font-style:normal;font-weight:500}
@media (max-width:900px){.arch-series-cards{grid-template-columns:1fr}}
.arch-rows{list-style:none;padding:0 40px 30px;margin:0}
.arch-rows li{display:grid;grid-template-columns:110px 96px 1fr;gap:22px;align-items:baseline;padding:14px 0;border-bottom:1px dashed var(--rule-soft)}
.arch-rows li:last-child{border-bottom:0}
.arch-rows .r-date{font-family:var(--mono);font-size:10px;letter-spacing:.1em;color:var(--ink-mute);text-transform:uppercase}
.arch-rows .r-cat{font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase}
.arch-rows .r-cat.essay{color:var(--quince)}
.arch-rows .r-cat.series{color:var(--quince)}
.arch-rows .r-cat.note{color:var(--indigo)}
.arch-rows .r-cat.query{color:var(--gold)}
.arch-rows .r-cat.reading{color:var(--indigo)}
.arch-rows .r-title{font-family:var(--serif);font-size:16.5px;line-height:1.4;color:var(--ink);font-variation-settings:"opsz" 14}
.arch-rows .r-title a{color:inherit;text-decoration:none}
.arch-rows .r-title a:hover{color:var(--quince)}
.arch-rows .r-title em{font-style:italic;color:var(--ink-soft)}
.arch-rows .r-title .sub{display:block;font-style:italic;color:var(--ink-mute);font-size:14.5px}
@media (max-width:720px){.arch-rows li{grid-template-columns:1fr;gap:4px}}

/* ===== reading view ===== */
.reader{max-width:1180px;margin:0 auto;padding:40px 40px 64px}
.reader .crumb{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:26px}
.reader .crumb a{color:var(--ink-mute);text-decoration:none}
.reader .crumb a:hover{color:var(--quince)}
.reader .crumb .here{color:var(--quince)}
.reader .head{max-width:62ch;margin-bottom:34px}
.reader .post-kicker{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--quince);margin:0 0 16px;display:flex;gap:12px;flex-wrap:wrap}
.reader .post-kicker .sep{color:var(--rule)}
.reader h1.post-title{font-family:var(--serif);font-weight:400;font-size:52px;line-height:1.02;letter-spacing:-.018em;margin:0 0 16px;max-width:20ch;font-variation-settings:"opsz" 144}
.reader h1.post-title em{font-style:italic;color:var(--ink-soft)}
.reader .post-dek{font-family:var(--serif);font-style:italic;font-size:21px;line-height:1.4;color:var(--ink-soft);margin:0 0 22px;max-width:52ch}
.reader .post-meta{font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;color:var(--ink-mute);display:flex;gap:12px;flex-wrap:wrap;align-items:center}
.reader .post-meta b{color:var(--ink);font-weight:500}
.reader .post-meta .sep{color:var(--rule)}
.reader .body{max-width:60ch;font-family:var(--reading)}
.reader .body p{margin:0 0 1.05em;font-size:19px;line-height:1.72;color:var(--ink)}
.reader .body p.lead{font-family:var(--serif);font-style:italic;font-size:23px;line-height:1.48;color:var(--ink-soft);margin-bottom:1.2em;font-variation-settings:"opsz" 36}
.reader .body p.dropcap::first-letter{font-family:var(--serif);font-weight:500;float:left;font-size:74px;line-height:.82;padding:8px 12px 0 0;color:var(--quince);font-variation-settings:"opsz" 144}
.reader .body h2{font-family:var(--serif);font-weight:500;font-size:28px;line-height:1.2;margin:52px 0 16px;letter-spacing:-.005em;font-variation-settings:"opsz" 72}
.reader .body blockquote{margin:30px 0 30px -22px;padding:4px 0 4px 20px;border-left:2px solid var(--quince);font-family:var(--serif);font-style:italic;color:var(--ink-soft);font-size:21px;line-height:1.45}
.reader .foot{max-width:62ch;margin-top:64px;padding-top:32px;border-top:1px solid var(--rule)}
.reader .foot .label{font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:10px}
.reader .foot h3{font-family:var(--serif);font-weight:500;font-size:24px;line-height:1.2;margin:0 0 6px}
.reader .foot h3 a{color:inherit;text-decoration:none}
.reader .foot h3 a:hover{color:var(--quince)}
.reader .foot h3 em{font-style:italic;font-weight:400;color:var(--ink-soft)}
.reader .foot .dek{font-family:var(--serif);font-style:italic;color:var(--ink-soft);margin:0}

/* ===== notes & queries stream ===== */
.note-entry{max-width:64ch;margin:0 auto;padding:34px 40px;border-bottom:1px dashed var(--rule-soft);font-family:var(--reading)}
.note-entry:last-of-type{border-bottom:0}
.note-entry .ne-meta{font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:10px}
.note-entry .ne-meta .cat{color:var(--indigo)}
.note-entry h2{font-family:var(--serif);font-weight:500;font-size:24px;line-height:1.2;margin:0 0 12px;letter-spacing:-.005em;font-variation-settings:"opsz" 72}
.note-entry p{font-size:17.5px;line-height:1.68;color:var(--ink);margin:0 0 1em}
.note-entry .ne-source{font-family:var(--mono);font-size:11px;letter-spacing:.03em;color:var(--ink-mute);margin:14px 0 0;padding-top:12px;border-top:1px solid var(--rule-soft)}

/* ===== section landing ===== */
.section-hero{position:relative;height:480px;overflow:hidden;background:#05080d;border-bottom:1px solid var(--rule);display:flex;align-items:flex-end}
.section-hero img.bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.96}
.section-hero .scrim{position:absolute;inset:0;background:linear-gradient(to top,rgba(0,0,0,.72) 0%,rgba(0,0,0,.15) 45%,rgba(0,0,0,.28) 100%)}
.section-hero .sh-inner{position:relative;padding:44px 44px 40px;max-width:64ch}
.section-hero .sh-kicker{font-family:var(--mono);font-size:10px;letter-spacing:.24em;text-transform:uppercase;color:rgba(239,231,214,.82);margin:0 0 16px;display:flex;align-items:center;gap:12px}
.section-hero .sh-kicker .em-glyph{width:18px;height:18px}
.section-hero h1{font-family:var(--serif);font-weight:400;font-size:72px;line-height:.94;letter-spacing:-.02em;margin:0 0 18px;color:#f3ece0;font-variation-settings:"opsz" 144}
.section-hero h1 em{font-style:italic}
.section-hero .sh-sub{font-family:var(--serif);font-style:italic;font-size:22px;line-height:1.4;color:rgba(243,236,224,.9);margin:0;max-width:48ch}
.section-hero .sh-sub.todo{color:rgba(243,236,224,.62)!important}
@media (max-width:720px){.section-hero{height:380px}.section-hero h1{font-size:48px}}
.section-body{display:grid;grid-template-columns:1fr 300px;gap:48px;padding:44px 40px;align-items:start}
.section-body .sb-rail{position:sticky;top:24px}
@media (max-width:900px){.section-body{grid-template-columns:1fr}.section-body .sb-rail{position:static}}
.sb-main h2{font-family:var(--serif);font-weight:500;font-size:28px;line-height:1.2;letter-spacing:-.005em;margin:0 0 16px;color:var(--ink);font-variation-settings:"opsz" 72}
.sb-main h2:not(:first-child){margin-top:44px;padding-top:36px;border-top:1px solid var(--rule)}
.sb-main p{font-family:var(--reading);font-size:18px;line-height:1.72;color:var(--ink);margin:0 0 1.05em;max-width:62ch}
.sb-main p.lead{font-family:var(--serif);font-style:italic;font-size:22px;line-height:1.45;color:var(--ink-soft);margin-bottom:1.2em;font-variation-settings:"opsz" 36}
.sb-emblem{border:1px solid var(--rule);background:var(--paper-soft);padding:0 0 16px;margin-bottom:22px}
.sb-emblem .im{height:150px;background:#05080d;overflow:hidden}
.sb-emblem .im img{width:100%;height:100%;object-fit:cover;opacity:.9}
.sb-emblem .cap{padding:12px 15px 0}
.sb-emblem .cap .t{font-family:var(--mono);font-size:9.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--quince);margin-bottom:6px}
.sb-emblem .cap p{font-family:var(--serif);font-style:italic;font-size:14px;line-height:1.5;color:var(--ink-soft);margin:0}
.sb-facts{list-style:none;padding:0;margin:0}
.sb-facts li{display:grid;gap:2px;padding:11px 0;border-top:1px solid var(--rule)}
.sb-facts li:first-child{border-top:0}
.sb-facts .k{font-family:var(--mono);font-size:9.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute)}
.sb-facts .v{font-family:var(--serif);font-size:15px;color:var(--ink)}
.sb-facts .v em{font-style:italic;color:var(--ink-soft)}
.sb-facts .v.todo{font-size:14px}
.progress-log{list-style:none;padding:0;margin:0}
.progress-log li{display:grid;grid-template-columns:120px 1fr;gap:24px;padding:16px 0;border-bottom:1px dashed var(--rule-soft)}
.progress-log li:last-child{border-bottom:0}
.progress-log .pl-date{font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--quince);padding-top:3px}
.progress-log .pl-body h4{font-family:var(--serif);font-weight:500;font-size:17px;margin:0 0 5px;color:var(--ink)}
.progress-log .pl-body p{font-family:var(--serif);font-size:15px;line-height:1.55;color:var(--ink-soft);margin:0;max-width:60ch;font-style:italic}
.gazetteer{display:grid;grid-template-columns:repeat(2,1fr);gap:18px}
.gazetteer .gz{border:1px solid var(--rule);background:var(--paper-soft);padding:18px 20px 20px}
.gazetteer .gz .gz-type{font-family:var(--mono);font-size:9px;letter-spacing:.18em;text-transform:uppercase;color:var(--quince);margin-bottom:8px}
.gazetteer .gz h4{font-family:var(--serif);font-weight:500;font-size:19px;margin:0 0 8px;color:var(--ink);font-variation-settings:"opsz" 36}
.gazetteer .gz h4 em{font-style:italic;font-weight:400;color:var(--ink-soft)}
.gazetteer .gz p{font-family:var(--serif);font-size:14.5px;line-height:1.56;color:var(--ink-soft);margin:0}
@media (max-width:720px){.gazetteer{grid-template-columns:1fr}}

/* ===== placeholder frames (missing screenshots / covers) ===== */
.ph-frame{border:1px solid var(--rule);background:repeating-linear-gradient(135deg,var(--paper) 0 8px,var(--paper-soft) 8px 16px);display:grid;place-items:center;text-align:center;min-height:200px;padding:20px}
.ph-frame.tall{min-height:280px}
.ph-frame .ph-text{font-family:var(--serif);font-style:italic;font-size:14px;color:var(--ink-mute);line-height:1.5;max-width:26ch}
.ph-frame .ph-text b{color:var(--quince);font-style:normal;font-weight:500;display:block;font-family:var(--mono);font-size:9px;letter-spacing:.18em;text-transform:uppercase;margin-bottom:8px}
.plate-strip{display:grid;gap:18px;margin:8px 0 0}
.plate-strip figure{margin:0}
.plate-strip img{width:100%;border:1px solid var(--rule)}
.plate-strip figcaption{font-family:var(--mono);font-size:9.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);margin-top:8px}

/* ===== forms ===== */
.form{display:grid;gap:16px;max-width:480px}
.form label{font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);display:grid;gap:7px}
.form input,.form textarea{font-family:var(--serif);font-size:16px;color:var(--ink);background:var(--paper-soft);border:1px solid var(--rule);padding:11px 13px;width:100%}
.form input:focus,.form textarea:focus{outline:none;border-color:var(--quince)}
.form textarea{min-height:130px;resize:vertical}
.btn-quince{font-family:var(--mono);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--quince);background:transparent;border:1px solid var(--quince);padding:11px 20px;cursor:pointer;justify-self:start;transition:background .15s ease}
.btn-quince:hover{background:color-mix(in srgb,var(--quince) 10%,transparent)}
.inline-row{display:flex;gap:10px;flex-wrap:wrap}
.inline-row input{flex:1;min-width:220px}
.social-row{display:flex;gap:18px;flex-wrap:wrap;font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase}
.social-row a{color:var(--ink-soft);text-decoration:none;border-bottom:1px solid var(--rule);padding-bottom:2px}
.social-row a:hover{color:var(--quince);border-color:var(--quince)}

/* ===== contact two-col ===== */
.contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:48px;padding:44px 40px;align-items:start}
@media (max-width:800px){.contact-grid{grid-template-columns:1fr}}
.contact-grid h2{font-family:var(--serif);font-weight:500;font-size:24px;margin:0 0 16px;font-variation-settings:"opsz" 72}

/* ===== index (two-col link lists) ===== */
.index{display:grid;grid-template-columns:1fr 1fr}
.index .col{padding:28px 40px 34px;border-right:1px solid var(--rule)}
.index .col:last-child{border-right:0}
.index .col-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:18px;border-bottom:1px solid var(--rule);padding-bottom:10px}
.index .col-head .name{font-family:var(--serif);font-weight:500;font-size:18px;color:var(--ink)}
.index .col-head .count{font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute)}
.index ul{list-style:none;padding:0;margin:0;display:grid;gap:12px}
.index li{display:grid;gap:2px}
.index li .meta{font-family:var(--mono);font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute)}
.index li .meta .cat{color:var(--quince)}
.index li .ttl{font-family:var(--serif);font-size:15.5px;line-height:1.35;color:var(--ink-soft);font-style:italic;font-variation-settings:"opsz" 14}
.index li .ttl a{color:inherit;text-decoration:none}
.index li .ttl a:hover{color:var(--quince)}
@media (max-width:720px){.index{grid-template-columns:1fr}.index .col{border-right:0;border-bottom:1px solid var(--rule)}}

/* ===== text classes =====*/
.tbd {opacity:.4;color:var(--ink-mute)}
.disabled {opacity: 0.4;}

/* ===== series hero (leading image header w/ overlay) ===== */
.series-hero{position:relative;min-height:420px;overflow:hidden;
  /*background:#05080d;*/
  border-bottom:1px solid var(--rule);display:flex;align-items:flex-end}
.series-hero img.bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.96}
.series-hero .scrim{position:absolute;inset:0;
  /*background: linear-gradient(to top,rgba(0,0,0,.78) 0%,rgba(0,0,0,.22) 50%,rgba(0,0,0,.25) 100%);*/
  background: linear-gradient(to top,rgba(255,255,255,.48) 0%,rgba(255,255,255,.12) 50%,rgba(255,255,255,.15) 100%);
}
.series-hero .hero-cap{position:absolute;
  top:16px;right:18px;
  margin:0;font-family:var(--mono);font-size:9.5px;letter-spacing:.18em;text-transform:uppercase;color:rgba(239,231,214,.6);display:flex;gap:16px}
.series-hero .sh-inner{
  position:relative;
  padding:120px 44px 38px;
  width:100%;
}
.series-hero .label{
  font-family:var(--mono);
  font-size:10px;letter-spacing:.22em;text-transform:uppercase;
  color:rgba(239,231,214,.62);margin:0 0 14px;display:flex;gap:16px}

.series-hero .label .status{color:rgba(239,231,214,.62)}
.series-hero h1{font-family:var(--serif);font-weight:400;font-size:60px;line-height:.98;letter-spacing:-.02em;margin:0 0 16px;color:#f3ece0;font-variation-settings:"opsz" 144}
.series-hero h1 em{font-style:italic;color:rgba(243,236,224,.82)}
.series-hero .dek{font-family:var(--serif);font-style:italic;font-size:21px;line-height:1.42;color:rgba(243,236,224,.9);margin:0 0 20px;max-width:50ch}
.series-hero .meta{font-family:var(--mono);font-size:11px;letter-spacing:.1em;color:rgba(239,231,214,.62);display:flex;gap:20px;flex-wrap:wrap;margin:0}
.series-hero .meta b{color:#f3ece0;font-weight:500}

@media (max-width:720px){.series-hero{min-height:340px}.series-hero .sh-inner{padding:90px 22px 30px}.series-hero h1{font-size:42px}}
/* ===== post hero (accent-bar image header) ===== */
.post-hero{position:relative;min-height:200px;overflow:hidden;
  background:#05080d;
  border-bottom:1px solid var(--rule);display:flex;align-items:flex-end}
.post-hero img.bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.96}
.post-hero .scrim{position:absolute;inset:0;background:linear-gradient(to top,rgba(0,0,0,.78) 0%,rgba(0,0,0,.25) 60%,rgba(0,0,0,.2) 100%)}
.post-hero .ph-inner{position:relative;padding:56px 44px 26px;width:100%}
.post-hero .post-kicker{
  font-family:var(--mono);
  font-size:11px;
  letter-spacing:.16em;
  text-transform:uppercase;
  color:rgba(239,231,214,.62);
  /*color:#d4a23a;*/
  margin:0 0 12px;display:flex;gap:12px;flex-wrap:wrap}
.post-hero .post-kicker .sep{color:rgba(239,231,214,.35)}
.reader .post-kicker a {text-decoration: none;}
.post-hero h1.post-title{font-family:var(--serif);font-weight:400;font-size:42px;line-height:1.04;letter-spacing:-.018em;margin:0;max-width:26ch;color:#f3ece0;font-variation-settings:"opsz" 144}
.post-hero h1.post-title a {color:#f3ece0; text-decoration: none;}
.post-hero h1.post-title a:hover, .post-hero h1.post-title a:active {color:#ffffff;}
.post-hero h1.post-title em{font-style:italic;color:rgba(243,236,224,.82)}
.post-hero .post-meta{font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;color:rgba(239,231,214,.62);display:flex;gap:12px;flex-wrap:wrap;margin:14px 0 0}
.post-hero .post-meta .sep{color:rgba(239,231,214,.35)}
.post-hero .todo{color:rgba(239,231,214,.55)!important}
@media (max-width:720px){.post-hero .ph-inner{padding:48px 22px 22px}.post-hero h1.post-title{font-size:32px}}


/* ---- active work cluster (homepage WIP band) ---- */

/*
<a class="os-card os-bio" href="tools-detail-ocean.html"><div class="os-body"><div class="os-meta"><span class="cat">Tools</span></div><h4>Ocean</h4><p>Disentangling federated genomic research tool from commercial software suite.</p></div></a>
<a class="os-card os-mind-embed" href="research-detail-koan.html"><div class="os-body"><div class="os-meta"><span class="cat">Research</span></div><h4>Koan</h4><p>Preparing study construction and expected result reregistration.</p></div></a>
<a class="os-card os-stone-crane" href="fiction-stone-and-crane.html"><div class="os-body"><div class="os-meta"><span class="cat">Fiction</span></div><h4>Stone and Crane</h4><p>Writing second draft of ~60K word novella.</p></div></a>
*/
/* ---- active-work card registers ----
   PATH NOTE: these three background images are referenced relative to this
   stylesheet. The mockup keeps them in html/img/ next to html/css/, so it
   writes `../img/…`. This engine serves the stylesheet from /assets/ and the
   images from /assets/plates/, so the same path resolves to /img/ — which
   404s, leaving the cards with a flat colour and no plate. Written relative to
   this file (`plates/…`) it resolves correctly in both layouts.
   This is the only intentional divergence from the mockup's site.css. */
.os-bio {
  --paper:      #c9cfc9;
  --paper-soft: #e2e3dd;
  --paper-deep: #b8c0ba;
  --ink:        #2e3a36;
  --ink-soft:   #5a6660;
  --ink-mute:   #818b85;
  --rule:       #8e9890;
  --quince:     #a25e3a;
  --gold:       #a25e3a;
/*--fog: #FAFFFA;
    --paper: #EFF4EF;
    --rice: oklch(0.978 0.006 142);
    --mist: oklch(0.62 0.030 130);
    --hairline: oklch(0.26 0.030 145 / 0.16);
    --moss: oklch(0.50 0.090 140);
    --ember: #cccecc;
    --hero-text: oklch(0.988 0.008 142);
    --hero-veil: linear-gradient(180deg, oklch(0.22 0.030 145 / 0.40) 0%, oklch(0.22 0.030 145 / 0.10) 35%, oklch(0.22 0.030 145 / 0.50) 100%);*/
  background:
    linear-gradient(105deg,
      rgba(201, 207, 201, 0.94) 0%,
      rgba(201, 207, 201, 0.82) 50%,
      rgba(201, 207, 201, 0.384) 100%),
    url('plates/ocean-background.jpg') center 30% / cover no-repeat;
}

.os-mind-embed {
  --paper:      #0f1620;
  --paper-soft: #1a2332;
  --paper-deep: #0a0d12;
  --ink:        #ece1c7;
  --ink-soft:   #b3a687;
  --ink-mute:   #8a7e66;
  --rule:       #2a3548;
  --quince:     #d4a23a;
  --gold:       #d4a23a;

  background:
    linear-gradient(105deg,
      rgba(15, 22, 32, 0.92) 0%,
      rgba(15, 22, 32, 0.78) 50%,
      rgba(15, 22, 32, 0.55) 100%),
    url('plates/spiral-substrate.jpg') center / cover no-repeat;
}
.os-stone-crane {
  --paper:      #c9cfc9;
  --paper-soft: #e2e3dd;
  --paper-deep: #b8c0ba;
  --ink:        #2e3a36;
  --ink-soft:   #5a6660;
  --ink-mute:   #818b85;
  --rule:       #8e9890;
  --quince:     #a25e3a;
  --gold:       #a25e3a;
  
  background:
  linear-gradient(105deg,
  rgba(201, 207, 201, 0.94) 0%,
  rgba(201, 207, 201, 0.82) 50%,
  rgba(201, 207, 201, 0.55) 100%),
  url('plates/sc-fog-figure.png') center 30% / cover no-repeat;
}


/*
.os-head{display:grid;grid-template-columns:auto 1fr auto;gap:18px;align-items:baseline;padding:28px 40px 0}
.os-head .label{font-family:var(--mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--quince)}
.os-head .name{font-family:var(--serif);font-style:italic;font-size:17px;color:var(--ink-soft);font-variation-settings:"opsz" 36}
.os-head .all{font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute);text-decoration:none;text-align:right}
.os-head .all:hover{color:var(--quince)}
.os-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;padding:18px 40px 36px}
.os-card{display:grid;grid-template-rows:130px auto;background:var(--paper);border:1px solid var(--rule);color:var(--ink);text-decoration:none;transition:border-color .2s ease}
.os-card.noimg{grid-template-rows:auto}
.os-card:hover{border-color:var(--quince)}
.os-card:hover h4{color:var(--quince)}
.os-card h4{transition:color .2s ease}
.os-card .os-img{background:#05080d;overflow:hidden;position:relative}
.os-card .os-img img{width:100%;height:100%;object-fit:cover;opacity:.84}
.os-card .os-body{padding:14px 16px 16px}
.os-card .os-meta{font-family:var(--mono);font-size:9.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:7px}
.os-card .os-meta .cat{color:var(--quince)}
.os-card h4{font-family:var(--serif);font-weight:500;font-size:17px;line-height:1.25;letter-spacing:-.005em;margin:0 0 7px;font-variation-settings:"opsz" 36}
.os-card h4 em{font-style:italic;color:var(--ink-soft)}
.os-card p{font-family:var(--serif);font-size:14px;line-height:1.55;color:var(--ink-soft);margin:0;font-style:italic}
*/

/*

/* ---- coming cluster (homepage WIP band) ----
   The header (.cc-head) lives on the active register's paper. Each card
   below carries its own palette via locally-scoped CSS variables, so the
   register tokens (--paper, --ink, --quince, etc.) inside that card
   resolve to substrate-night / mist-cedar values regardless of the
   ambient theme. Same mechanism as theme-*.css, just element-scoped.
*
.coming-cluster {
  max-width: 1100px; margin: 0 auto;
  border-top: 1px solid var(--rule);
  border-bottom: 1px solid var(--rule);
}
.coming-cluster .cc-head {
  display: grid; grid-template-columns: auto 1fr auto;
  gap: 18px; align-items: baseline;
  padding: 18px 28px 12px;
  border-bottom: 1px dashed var(--rule);
}
.coming-cluster .cc-head .label {
  font-family: var(--mono); font-size: 10px; letter-spacing: .22em;
  text-transform: uppercase; color: var(--quince);
}
.coming-cluster .cc-head .name {
  font-family: var(--serif); font-style: italic;
  font-size: 17px; color: var(--ink-soft);
  font-variation-settings: "opsz" 36;
}
.coming-cluster .cc-head .meta {
  font-family: var(--mono); font-size: 10px; letter-spacing: .16em;
  text-transform: uppercase; color: var(--ink-mute);
}
.cc-cols { display: grid; grid-template-columns: 1fr 1fr; }
.cc-col {
  padding: 22px 28px 26px;
  background: var(--paper);
  color: var(--ink);
}
.cc-col .cc-name {
  font-family: var(--serif); font-weight: 500; font-size: 19px;
  color: var(--ink); margin: 0 0 8px;
}
.cc-col .cc-name a { color: inherit; border: 0; }
.cc-col .cc-name a:hover { color: var(--quince); }
.cc-col .cc-msg {
  font-family: var(--serif); font-size: 14.5px; line-height: 1.55;
  color: var(--ink-soft); font-style: italic;
  max-width: 36ch; margin: 0;
}
.cc-col .cc-msg b { color: var(--ink); font-style: normal; font-weight: 500; }

/* Resonance card — substrate (night) register
   Plate image (spiral-substrate.png) sits under a same-color overlay
   so the cream text remains comfortably readable. Bump the alpha if
   the image starts to compete with the title. *
.cc-col.cc-substrate {
  --paper:      #0f1620;
  --paper-soft: #1a2332;
  --paper-deep: #0a0d12;
  --ink:        #ece1c7;
  --ink-soft:   #b3a687;
  --ink-mute:   #8a7e66;
  --rule:       #2a3548;
  --quince:     #d4a23a;
  --gold:       #d4a23a;

  background:
    linear-gradient(105deg,
      rgba(15, 22, 32, 0.92) 0%,
      rgba(15, 22, 32, 0.78) 50%,
      rgba(15, 22, 32, 0.55) 100%),
    url('spiral-substrate.png') center / cover no-repeat;
}

/* Stone & Crane card — mist (cedar fog) register *
.cc-col.cc-mist {
  --paper:      #c9cfc9;
  --paper-soft: #e2e3dd;
  --paper-deep: #b8c0ba;
  --ink:        #2e3a36;
  --ink-soft:   #5a6660;
  --ink-mute:   #818b85;
  --rule:       #8e9890;
  --quince:     #a25e3a;
  --gold:       #a25e3a;

  background:
    linear-gradient(105deg,
      rgba(201, 207, 201, 0.94) 0%,
      rgba(201, 207, 201, 0.82) 50%,
      rgba(201, 207, 201, 0.55) 100%),
    url('tsuru-luka.png') center 30% / cover no-repeat;
}

*/

/* ===== figures in the reading column =====
   Placement is written as a URL fragment in the markdown
   (![alt](/photo.png#right)) and turned into a class by
   plugins/rehype-figure-hints.mjs. Keep the names in step with that file.

   `float` is still the correct tool here — it is the only thing that makes
   text wrap around an element. What has moved on is everything around it:
   logical properties so the rule survives a right-to-left context, inline-size
   instead of width, and flow-root instead of a clearfix hack. */

/* Contain floated children: the modern one-line clearfix. Without this a tall
   figure escapes the bottom of its section and overlaps what follows. */
.reader .body, .note-entry { display: flow-root; }

.reader .body img, .note-entry img { max-width: 100%; height: auto; }

.reader .body img.fig-right,
.reader .body img.fig-left,
.note-entry img.fig-right,
.note-entry img.fig-left {
  /* ~a fifth of the column, never wider than 200px, never uselessly small */
  inline-size: clamp(120px, 20%, 200px);
  margin-block: .35rem 1rem;
}
.reader .body img.fig-right, .note-entry img.fig-right {
  float: inline-end;              /* logical `float: right` */
  margin-inline-start: 1.5rem;
}
.reader .body img.fig-left, .note-entry img.fig-left {
  float: inline-start;
  margin-inline-end: 1.5rem;
}

/* Full width of the reading column, no wrap. */
.reader .body img.fig-full, .note-entry img.fig-full {
  display: block; inline-size: 100%; margin-block: 1.6rem;
}

/* Breaks out past the reading measure, for a plate that deserves the room.
   Clamped so it can never exceed the page and cause a sideways scroll. */
.reader .body img.fig-wide, .note-entry img.fig-wide {
  display: block;
  inline-size: min(100vw - 2rem, 140%);
  margin-inline: 50%;
  transform: translateX(-50%);
  margin-block: 1.8rem;
}

/* A floated figure in a narrow column squeezes the text into a gutter, so the
   float drops away and the image simply sits in the flow. */
@media (max-width: 640px) {
  .reader .body img.fig-right, .reader .body img.fig-left,
  .note-entry img.fig-right, .note-entry img.fig-left {
    float: none; inline-size: 100%; margin-inline: 0;
  }
  .reader .body img.fig-wide, .note-entry img.fig-wide {
    inline-size: 100%; margin-inline: 0; transform: none;
  }
}

/* ===== plated page heads =====
   The mockup writes these as an inline `style` on each <section class="page-head">
   — same gradient every time, one image per section. Carried here as classes so
   the templates stay clean and the four images are declared once rather than
   copied into every page that wants one.

   The gradient is what makes the text readable: near-opaque at the left where
   the h1 and kicker sit, thinning to the right so the plate still shows. Keep
   it — dropping to a bare image puts dark serif type over photographic detail. */
.page-head.plate{
  background-position:center 30%;
  background-size:cover;
  background-repeat:no-repeat;
}
.page-head.plate .ph-kicker a{color:inherit;text-decoration:none;border:0}
.page-head.plate .ph-kicker a:hover{color:var(--quince)}

.page-head.plate-about{
  background-image:
    linear-gradient(105deg,
      rgba(201,207,201,.94) 0%,
      rgba(201,207,201,.82) 50%,
      rgba(201,207,201,.384) 100%),
    url('plates/about-branch.jpg');
}
.page-head.plate-tools{
  background-image:
    linear-gradient(105deg,
      rgba(201,207,201,.94) 0%,
      rgba(201,207,201,.82) 50%,
      rgba(201,207,201,.384) 100%),
    url('plates/ocean-background.jpg');
}
.page-head.plate-research{
  background-image:
    linear-gradient(105deg,
      rgba(201,207,201,.94) 0%,
      rgba(201,207,201,.82) 50%,
      rgba(201,207,201,.384) 100%),
    url('plates/spiral-substrate.jpg');
}
.page-head.plate-fiction{
  background-image:
    linear-gradient(105deg,
      rgba(201,207,201,.94) 0%,
      rgba(201,207,201,.82) 50%,
      rgba(201,207,201,.384) 100%),
    url('plates/fiction-toka.jpg');
}

/* ===== site index =====
   The old `.site-map` markup had no rules anywhere — the same failure as the
   project list. The index now uses `.arch-group` / `.arch-rows`, which the
   mockup's site-index.html uses and site.css already styles. Only the
   "page"-type date column needs a word here: it is a label, not a date. */
.arch-rows .r-date.is-label{font-style:italic;text-transform:none;letter-spacing:.04em}

/* The line under the contact form that reports what happened to a submission. */
.form-status{font-family:var(--serif);font-style:italic;font-size:15px;line-height:1.5;color:var(--ink-mute);margin:14px 0 0;min-height:1.2em}
