/* kanchi.org — The Register */
:root{
  --ink:#14161A; --ink-2:#22252B; --body:#2C2F35;
  --paper:#F6F3EE; --paper-2:#EFEBE2; --paper-3:#FBF9F5; --black:#0E1013;
  --rust:#B33F12; --rust-dark:#8E3110;
  --rule:#C9C2B6; --rule-2:#DAD3C7; --muted:#5C584F; --muted-2:#6E6A62; --dim:#8C887F;
  --sans:'Archivo',system-ui,-apple-system,'Segoe UI',sans-serif;
  --serif:'Newsreader',Georgia,'Times New Roman',serif;
  --fs-body:1.1875rem;      /* 19px */
  --fs-read:1.3125rem;      /* 21px article prose */
  --measure:68ch;
  --band:clamp(40px,6vw,76px);
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;background:var(--paper);color:var(--body);
  font-family:var(--serif);font-size:var(--fs-body);line-height:1.6;
  font-optical-sizing:auto;text-rendering:optimizeLegibility;
}
img{max-width:100%;height:auto;display:block}
body{overflow-wrap:break-word}
code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;background:var(--paper-2);padding:1px 5px}
a{color:var(--rust);text-underline-offset:3px;text-decoration-thickness:1px}
a:hover{color:var(--ink)}
h1,h2,h3,h4{color:var(--ink);text-wrap:balance}
p{text-wrap:pretty}
hr{border:0;border-top:1px solid var(--rule);margin:var(--band) 0}
::selection{background:var(--rust);color:#fff}
:focus-visible{outline:3px solid var(--rust);outline-offset:2px}
.skip{position:absolute;left:-9999px;top:0;background:var(--ink);color:#F6F3EE;padding:12px 18px;z-index:99}
.skip:focus{left:0}
.wrap{max-width:1240px;margin:0 auto;padding-inline:clamp(20px,4vw,44px)}
.wrap-narrow{max-width:900px;margin:0 auto;padding-inline:clamp(20px,4vw,44px)}
.band{padding-block:var(--band)}
.kicker{font-family:var(--sans);font-size:.8125rem;letter-spacing:.16em;text-transform:uppercase;color:var(--muted-2);margin:0 0 14px}
.kicker--rust{color:var(--rust)}
.claim{font-family:var(--serif);font-style:italic;font-weight:400;font-size:clamp(1.375rem,2.4vw,1.875rem);line-height:1.3;color:var(--ink);margin:0 0 18px;max-width:34ch}
.quantified{border-top:3px solid var(--rust)}
.section-head{display:flex;flex-wrap:wrap;gap:12px 32px;align-items:baseline;justify-content:space-between;border-top:2px solid var(--ink);padding-top:16px;margin-bottom:26px}
.section-head h2{font-family:var(--sans);font-size:clamp(1.25rem,2vw,1.5rem);font-weight:700;letter-spacing:-.01em;margin:0}
.section-head .aside{font-family:var(--serif);font-style:italic;color:var(--muted);font-size:1.0625rem;margin:0}

/* ---------- masthead ---------- */
.masthead{background:var(--ink);color:#F6F3EE}
.masthead a{color:inherit;text-decoration:none}
.mast-top{display:flex;flex-wrap:wrap;gap:10px 36px;align-items:flex-end;justify-content:space-between;padding-top:20px}
.wordmark{font-family:var(--sans);font-weight:800;font-size:clamp(1.75rem,3.4vw,2.25rem);letter-spacing:-.035em;line-height:1;display:inline-block}
.wordmark .dot{color:var(--rust)}
.disambig{font-family:var(--serif);font-style:italic;font-size:1rem;color:#A9A59C;margin:0}
.mast-note{font-family:var(--sans);font-size:.75rem;letter-spacing:.16em;text-transform:uppercase;color:var(--dim)}
.mast-nav{display:flex;flex-wrap:wrap;gap:8px 26px;border-top:1px solid #2E3138;margin-top:16px;padding:12px 0 14px;font-family:var(--sans);font-size:.9375rem}
.mast-nav a{padding:4px 0;border-bottom:3px solid transparent;color:#C6C2B9}
.mast-nav a:hover{color:#F6F3EE}
.mast-nav a[aria-current]{color:#F6F3EE;border-bottom-color:var(--rust);font-weight:600}
.mast-nav .all{margin-left:auto;color:#F6F3EE}

/* ---------- hero ---------- */
.hero{border-bottom:2px solid var(--ink)}
.hero-line{font-family:var(--serif);font-weight:500;font-size:clamp(2.25rem,6.2vw,4.5rem);line-height:1.02;letter-spacing:-.025em;color:var(--ink);margin:0 0 22px;max-width:20ch}
.hero-sub{font-size:clamp(1.125rem,1.6vw,1.375rem);line-height:1.5;max-width:62ch;margin:0 0 26px;color:var(--ink-2)}
.hero-actions{display:flex;flex-wrap:wrap;gap:14px 36px;margin:0 0 28px;font-family:var(--sans);font-size:1.0625rem;line-height:1.4}
.hero-actions a{text-decoration:none;border-bottom:2px solid var(--rust);padding-bottom:4px;color:var(--ink);font-weight:500}
.hero-actions a:first-child{font-size:1.1875rem}
.hero-actions a em{font-family:var(--serif);font-style:italic;font-size:1.1em}
.hero-actions a:hover{color:var(--rust)}
.hero-meta{display:flex;flex-wrap:wrap;gap:14px 40px;border-top:1px solid var(--rule);padding-top:18px;font-family:var(--sans);font-size:.9375rem;color:var(--muted)}

/* ---------- ledger ---------- */
.ledger{width:100%;border-collapse:collapse;font-family:var(--serif);font-size:1.125rem}
.ledger caption{text-align:left;font-family:var(--sans);font-size:.8125rem;letter-spacing:.16em;text-transform:uppercase;color:var(--muted-2);padding-bottom:12px}
.ledger th{font-family:var(--sans);font-size:.75rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted-2);font-weight:600;text-align:left;padding:10px 18px 10px 0;border-top:2px solid var(--ink);border-bottom:1px solid var(--rule);vertical-align:bottom}
.ledger td{padding:15px 18px 15px 0;border-bottom:1px solid var(--rule-2);vertical-align:top;color:var(--ink-2)}
.ledger td:first-child{color:var(--ink);font-size:1.1875rem;padding-right:28px}
.ledger td:first-child a{color:var(--ink);text-decoration-color:var(--rust)}
.ledger td:first-child a:hover{color:var(--rust)}
.ledger tr:last-child td{border-bottom:2px solid var(--ink)}
.ledger .cost-nil{color:var(--rust);font-weight:600}
.ledger-foot{font-family:var(--sans);font-size:.875rem;color:var(--muted);margin-top:14px}

/* ---------- section tiles ---------- */
.tiles{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:2px;background:var(--rule)}
@media (max-width:1080px){.tiles{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:620px){.tiles{grid-template-columns:1fr}}
.tile{background:var(--paper);border-top:4px solid var(--accent,var(--rust));padding:22px 22px 26px;display:flex;flex-direction:column;text-decoration:none}
.tile:hover{background:var(--paper-3)}
.tile .t-no{font-family:var(--sans);font-size:.75rem;letter-spacing:.14em;color:var(--muted-2)}
.tile h3{font-family:var(--sans);font-size:1.25rem;font-weight:700;letter-spacing:-.01em;margin:8px 0 10px;color:var(--ink)}
.tile p{margin:0;font-size:1rem;line-height:1.5;color:var(--muted)}
.tile .t-count{margin-top:auto;padding-top:16px;font-family:var(--sans);font-size:.875rem;color:var(--rust)}

/* ---------- featured ---------- */
.featured{background:var(--ink);color:#E8E4DB}
.featured .f-grid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:0}
.featured .f-img{min-height:100%}
.featured .f-img img{width:100%;height:100%;object-fit:cover;aspect-ratio:4/3}
.featured .f-body{padding:clamp(26px,3.2vw,48px)}
.featured h2{color:#F6F3EE;font-family:var(--serif);font-weight:500;font-size:clamp(1.875rem,3.6vw,3rem);line-height:1.05;letter-spacing:-.02em;margin:0 0 16px}
.featured h2 a{color:inherit;text-decoration:none}
.featured h2 a:hover{color:#fff;text-decoration:underline;text-decoration-color:var(--rust)}
.featured .f-dek{font-size:1.1875rem;line-height:1.55;color:#C0BCB3;margin:0 0 22px;max-width:52ch}
.featured .f-meta{font-family:var(--sans);font-size:.875rem;letter-spacing:.06em;text-transform:uppercase;color:var(--dim);border-top:1px solid #2E3138;padding-top:14px}
.figcredit{font-family:var(--sans);font-size:.8125rem;color:var(--dim);padding:8px 0 0}

/* ---------- article cards ---------- */
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:32px}
.card{display:flex;flex-direction:column;background:transparent;text-decoration:none;border-top:3px solid var(--rust);padding-top:16px}
.card .c-img{aspect-ratio:3/2;overflow:hidden;background:var(--paper-2);margin-bottom:14px}
.card .c-img img{width:100%;height:100%;object-fit:cover}
.card .c-cat{font-family:var(--sans);font-size:.75rem;letter-spacing:.14em;text-transform:uppercase;color:var(--rust);margin-bottom:8px}
.card h3{font-family:var(--serif);font-weight:500;font-size:1.5rem;line-height:1.15;letter-spacing:-.015em;margin:0 0 10px;color:var(--ink);min-height:2.3em}
.card p{margin:0 0 14px;font-size:1.0625rem;line-height:1.5;color:var(--muted)}
.card .c-meta{margin-top:auto;font-family:var(--sans);font-size:.8125rem;color:var(--muted-2);letter-spacing:.04em}
.card:hover h3{color:var(--rust)}

/* ---------- supporters ---------- */
.supporters{background:var(--black);color:#B6B2A9}
.supporters .section-head{border-top-color:#33373E}
.supporters .section-head h2{color:#F6F3EE}
.supporters .section-head .aside{color:var(--dim)}
.supporters .s-intro{max-width:74ch;font-size:1.0625rem;line-height:1.55;color:#9C988F;margin:0 0 30px}
.s-group{margin-bottom:34px}
.s-group > h3{font-family:var(--sans);font-size:.75rem;letter-spacing:.16em;text-transform:uppercase;color:var(--dim);font-weight:600;margin:0 0 14px;padding-bottom:10px;border-bottom:1px solid #23262B}
.sponsors{display:flex;flex-wrap:wrap;gap:20px;align-items:flex-start}
.sponsor{flex:1 1 240px;min-width:min(240px,100%);text-decoration:none;color:inherit;display:block}
.sponsor--wide{flex:2.2 1 400px}
.sponsor .s-box{background:#1B1E23;border:1px solid #33373E;width:100%;height:96px;display:flex;align-items:center;justify-content:center;padding:12px 18px}
.sponsor--quiet .s-box{height:72px}
.sponsor img{max-height:52px;max-width:100%;width:auto;height:auto;object-fit:contain}
.sponsor--quiet img{max-height:34px}
.sponsor:hover .s-box{border-color:var(--rust)}
.sponsor-blurb{display:block;width:100%;min-height:52px;margin-top:12px;padding-top:11px;border-top:1px solid #23262B;font-family:var(--serif);font-size:1rem;line-height:1.45;color:#C0BCB3}
.sponsor-name{display:block;width:100%;min-height:1.7em;margin-top:10px;font-family:var(--serif);font-size:1.0625rem;color:#E8E4DB;border-top:1px solid #23262B;padding-top:9px}
.supporters .s-foot{font-family:var(--sans);font-size:.8125rem;letter-spacing:.06em;color:#6F6B63;border-top:1px solid #23262B;padding-top:16px;margin:0}

/* ---------- footer ---------- */
.site-foot{background:var(--ink);color:var(--dim);padding-block:40px 48px}
.site-foot a{color:#C6C2B9;text-decoration:none}
.site-foot a:hover{color:#F6F3EE;text-decoration:underline}
.foot-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr));gap:32px 40px;align-items:start}
.foot-grid h4{font-family:var(--sans);font-size:.75rem;letter-spacing:.16em;text-transform:uppercase;color:var(--dim);margin:0 0 12px;font-weight:600}
.foot-links{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;font-size:1.0625rem}
.foot-disclaim{border-top:1px solid #2E3138;margin-top:34px;padding-top:20px;font-size:1rem;line-height:1.6;max-width:80ch}
.foot-wordmark{font-family:var(--sans);font-weight:800;font-size:1.5rem;letter-spacing:-.03em;color:#F6F3EE;display:block;margin-bottom:12px}

/* ---------- article ---------- */
.crumbs{font-family:var(--sans);font-size:.875rem;color:var(--muted);padding-top:22px}
.crumbs a{color:var(--muted);text-decoration:none}
.crumbs a:hover{color:var(--rust);text-decoration:underline}
.art-head{padding-block:26px 8px}
.art-title{font-family:var(--serif);font-weight:500;font-size:clamp(2.125rem,5.2vw,3.75rem);line-height:1.03;letter-spacing:-.025em;margin:0 0 20px;max-width:22ch}
.lead{font-family:var(--serif);font-size:clamp(1.25rem,2vw,1.625rem);line-height:1.42;color:var(--ink);margin:0 0 26px;max-width:52ch;font-weight:400}
.byline{font-family:var(--sans);font-size:.9375rem;letter-spacing:.04em;color:var(--muted);border-top:1px solid var(--rule);padding-top:14px;margin:0}
.entry-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(210px,100%),1fr));gap:1px;background:var(--rule);border-top:3px solid var(--rust);margin-block:30px}
.entry-strip > div{background:var(--paper);padding:16px 20px 18px}
.entry-strip dt{font-family:var(--sans);font-size:.75rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted-2);margin-bottom:6px}
.entry-strip dd{margin:0;font-size:1.125rem;line-height:1.35;color:var(--ink)}
.art-body{font-size:var(--fs-read);line-height:1.62;color:var(--ink-2)}
.art-body > *{max-width:var(--measure)}
.art-body p{margin:0 0 22px}
.art-body h2{font-family:var(--sans);font-size:clamp(1.375rem,2.4vw,1.75rem);font-weight:700;letter-spacing:-.015em;line-height:1.2;margin:44px 0 16px;padding-top:18px;border-top:1px solid var(--rule)}
.art-body h3{font-family:var(--sans);font-size:1.25rem;font-weight:700;margin:32px 0 12px}
.art-body ul,.art-body ol{margin:0 0 24px;padding-left:1.15em}
.art-body li{margin-bottom:10px}
.art-body strong{color:var(--ink)}
.art-body a{color:var(--rust-dark)}
.art-body .full{max-width:none}
.article-figure{margin:34px 0;max-width:none}
.article-figure img{width:100%;aspect-ratio:16/9;object-fit:cover}
.article-figure figcaption{font-family:var(--sans);font-size:.9375rem;line-height:1.5;color:var(--muted);padding-top:10px;border-top:1px solid var(--rule);margin-top:10px;max-width:70ch}
.gallery{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr));gap:16px;margin:30px 0;max-width:none}
.gallery figure{margin:0}
.gallery img{aspect-ratio:4/3;object-fit:cover;width:100%}
.gallery figcaption{font-family:var(--sans);font-size:.875rem;color:var(--muted);padding-top:8px}

/* break-out panels inside articles */
.panel{max-width:none;margin:40px 0;background:var(--paper-2);border-top:3px solid var(--rust);padding:clamp(20px,2.6vw,32px)}
.panel > h3{font-family:var(--sans);font-size:1.125rem;letter-spacing:.02em;font-weight:700;margin:0 0 4px;color:var(--ink)}
.panel > .p-kicker{font-family:var(--sans);font-size:.75rem;letter-spacing:.16em;text-transform:uppercase;color:var(--rust);margin:0 0 10px}
.panel .datatable,.panel .versus{margin-top:16px}
.panel ul{margin:14px 0 0;padding-left:1.1em;font-size:1.0625rem;line-height:1.55;columns:2;column-gap:44px}
.panel ul li{margin-bottom:12px;break-inside:avoid}
@media (max-width:820px){.panel ul{columns:1}}
.callout{max-width:none;background:var(--ink);color:#E8E4DB;padding:clamp(20px,2.6vw,30px);margin:36px 0;border-top:3px solid var(--rust)}
.callout p{margin:0;font-size:1.25rem;line-height:1.45;color:#EFEBE2;max-width:56ch}
.callout p + p{margin-top:14px}
.pullquote{margin:38px 0;padding:0 0 0 24px;border-left:4px solid var(--rust);max-width:60ch}
.pullquote p{font-family:var(--serif);font-style:italic;font-size:clamp(1.375rem,2.4vw,1.75rem);line-height:1.3;color:var(--ink);margin:0}
.blockquote{margin:34px 0;padding:20px 24px;background:var(--paper-2);max-width:64ch}
.blockquote p{margin:0 0 10px;font-size:1.1875rem;line-height:1.5}
.blockquote cite{font-family:var(--sans);font-style:normal;font-size:.9375rem;color:var(--muted)}
.note{font-family:var(--sans);font-size:1rem;line-height:1.55;color:var(--muted);border-left:3px solid var(--rule);padding:6px 0 6px 16px;margin:26px 0;max-width:64ch}

/* tables */
.datatable,.versus{width:100%;border-collapse:collapse;font-size:1.0625rem;max-width:none;background:var(--paper-3)}
.datatable caption,.versus caption{text-align:left;font-family:var(--sans);font-size:.75rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted-2);padding-bottom:10px}
.datatable th,.versus th{font-family:var(--sans);font-size:.75rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted-2);text-align:left;font-weight:600;padding:10px 16px;border-bottom:1px solid var(--rule);background:var(--paper-2)}
.datatable td,.versus td{padding:13px 16px;border-bottom:1px solid var(--rule-2);vertical-align:top;line-height:1.5}
.datatable td:first-child,.versus td:first-child{color:var(--ink);font-weight:500;width:34%}
.versus td:first-child{background:var(--paper-2)}
.datatable tr:last-child td,.versus tr:last-child td{border-bottom:1px solid var(--rule)}

/* stats + timeline + charts */
.statrow{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(190px,100%),1fr));gap:1px;background:var(--rule);margin:32px 0;max-width:none}
.statblock{background:var(--paper);padding:20px 22px 22px;display:flex;flex-direction:column;gap:8px}
.stat-num{font-family:var(--serif);font-size:clamp(2.25rem,4.4vw,3.25rem);line-height:1;color:var(--rust);letter-spacing:-.02em}
.stat-label{font-family:var(--sans);font-size:.9375rem;line-height:1.4;color:var(--muted)}
.timeline{list-style:none;margin:30px 0;padding:0;max-width:none;border-top:2px solid var(--ink)}
.timeline li{display:grid;grid-template-columns:minmax(140px,26%) minmax(0,1fr);gap:8px 28px;padding:14px 0;border-bottom:1px solid var(--rule-2)}
.t-when{font-family:var(--sans);font-size:.9375rem;font-weight:600;letter-spacing:.02em;color:var(--rust);line-height:1.4}
.t-what{font-size:1.0625rem;line-height:1.5}
@media (max-width:600px){.timeline li{grid-template-columns:1fr}}
.chart{margin:32px 0;max-width:none}
.chart svg{width:100%;height:auto;display:block;overflow:visible}
.chart figcaption{font-family:var(--sans);font-size:.9375rem;color:var(--muted);padding-top:12px;border-top:1px solid var(--rule);margin-top:12px}
.chart .c-bar{fill:var(--rust)}
.chart .c-bar-alt{fill:var(--ink)}
.chart .c-label{font-family:var(--sans);font-size:13px;fill:var(--muted)}
.chart .c-value{font-family:var(--sans);font-size:13px;font-weight:600;fill:var(--ink)}
.chart .c-axis{stroke:var(--rule)}

/* cards / refs */
.profile-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:20px;margin:28px 0;max-width:none}
.profile-card{background:var(--paper-3);border-top:3px solid var(--ink);padding:20px}
.profile-card .p-photo{width:88px;height:88px;object-fit:cover;margin-bottom:12px}
.profile-card h3{font-family:var(--sans);font-size:1.125rem;margin:0 0 4px}
.profile-card .p-role{font-family:var(--sans);font-size:.875rem;letter-spacing:.06em;text-transform:uppercase;color:var(--rust);margin:0 0 10px}
.profile-card p{font-size:1rem;line-height:1.5;margin:0 0 10px}
.profile-card .p-links a{font-family:var(--sans);font-size:.9375rem}
.profile-card .p-attr{font-family:var(--sans);font-size:.8125rem;color:var(--muted-2);margin:0}
.org-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(230px,100%),1fr));gap:14px;margin:26px 0;max-width:none}
.org-card{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto auto;column-gap:14px;align-items:center;background:var(--paper-3);border:1px solid var(--rule);padding:14px 16px;text-decoration:none}
.org-card:hover{border-color:var(--rust)}
.org-logo{grid-row:1/3;width:46px;height:46px;object-fit:contain}
.org-card.no-logo .org-name{grid-column:1/3}
.org-card.no-logo .org-host{grid-column:1/3}
.org-name{font-family:var(--sans);font-weight:600;color:var(--ink);line-height:1.3}
.org-host{font-family:var(--sans);font-size:.875rem;color:var(--muted)}
.entity-ref{font-family:var(--sans);font-size:.95em;white-space:nowrap}
.further-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:2px;background:var(--rule);margin:0;max-width:none}
.further-grid a{background:var(--paper);padding:18px 20px 20px;text-decoration:none;color:var(--ink);font-family:var(--serif);font-size:1.1875rem;line-height:1.3;display:block}
.further-grid a:hover{background:var(--paper-3);color:var(--rust)}
.related-links{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:2px;background:var(--rule)}
.related-links li{background:var(--paper)}
.related-links a{display:block;padding:18px 20px 20px;text-decoration:none;color:var(--ink);font-family:var(--serif);font-size:1.1875rem;line-height:1.3}
.related-links a:hover{background:var(--paper-3);color:var(--rust)}
.related-links .r-cat{display:block;font-family:var(--sans);font-size:.75rem;letter-spacing:.14em;text-transform:uppercase;color:var(--rust);margin-bottom:8px}

/* category list */
.cat-list{list-style:none;margin:0;padding:0;border-top:2px solid var(--ink)}
.cat-list li{border-bottom:1px solid var(--rule-2)}
.cat-list > li > a{display:grid;grid-template-columns:180px minmax(0,1fr) auto;gap:8px 28px;align-items:start;padding:22px 0;text-decoration:none;color:inherit}
.cat-list .cl-img{aspect-ratio:3/2;object-fit:cover;width:100%;background:var(--paper-2)}
.cat-list .cl-noimg{aspect-ratio:3/2;background:var(--paper-2);border:1px solid var(--rule);display:flex;align-items:flex-end;padding:10px;font-family:var(--sans);font-size:.75rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted-2)}
.cat-list h3{font-family:var(--serif);font-weight:500;font-size:clamp(1.375rem,2.2vw,1.75rem);line-height:1.15;margin:0 0 8px;letter-spacing:-.015em}
.cat-list p{margin:0;color:var(--muted);font-size:1.0625rem;line-height:1.5;max-width:68ch}
.cat-list .cl-meta{font-family:var(--sans);font-size:.8125rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted-2);white-space:nowrap;padding-top:6px}
.cat-list > li > a:hover h3{color:var(--rust)}
@media (max-width:760px){
  .cat-list > li > a{grid-template-columns:1fr;gap:14px}
  .cat-list .cl-img,.cat-list .cl-noimg{max-width:320px}
}

/* expander (CSS-only) */
.expander{border-top:1px solid var(--rule);margin-top:8px}
.expander summary{font-family:var(--sans);font-size:.9375rem;letter-spacing:.04em;color:var(--rust);cursor:pointer;padding:14px 0;list-style:none}
.expander summary::-webkit-details-marker{display:none}
.expander summary::after{content:" +"}
.expander[open] summary::after{content:" –"}

/* generic pages */
.page-body{font-size:var(--fs-read);line-height:1.62;color:var(--ink-2)}
.page-body > *{max-width:var(--measure)}
.page-body h2{font-family:var(--sans);font-size:1.5rem;margin:38px 0 14px}
.page-body p{margin:0 0 22px}
.form-row{display:flex;flex-direction:column;gap:8px;margin-bottom:20px;max-width:var(--measure)}
.form-row label{font-family:var(--sans);font-size:.9375rem;letter-spacing:.04em;color:var(--ink)}
.form-row input,.form-row textarea{font-family:var(--serif);font-size:1.0625rem;padding:12px 14px;border:1px solid var(--rule);background:var(--paper-3);color:var(--ink)}
.btn{font-family:var(--sans);font-size:1rem;font-weight:600;letter-spacing:.04em;background:var(--ink);color:#F6F3EE;border:0;padding:14px 24px;cursor:pointer}
.btn:hover{background:var(--rust)}

@media (max-width:900px){
  .featured .f-grid{grid-template-columns:1fr}
  .featured .f-img img{aspect-ratio:16/9}
}
@media (max-width:720px){
  .ledger thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
  .ledger tr{display:block;border-top:2px solid var(--ink);padding:14px 0}
  .ledger tr:last-child td{border-bottom:0}
  .ledger td{display:grid;grid-template-columns:minmax(120px,38%) minmax(0,1fr);gap:14px;padding:6px 0;border-bottom:0}
  .ledger td::before{content:attr(data-label);font-family:var(--sans);font-size:.6875rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted-2);padding-top:4px}
  .ledger td:first-child{font-size:1.25rem;padding-bottom:10px}
}
@media (max-width:600px){
  .datatable,.versus,.datatable tbody,.versus tbody,.datatable tr,.versus tr,.datatable td,.versus td{display:block;width:auto}
  .datatable thead,.versus thead{display:none}
  .datatable tr,.versus tr{border-bottom:1px solid var(--rule);padding:8px 0}
  .datatable td,.versus td{border-bottom:0;padding:5px 14px}
  .datatable td:first-child,.versus td:first-child{font-weight:600;padding-top:10px;background:transparent}
  .entry-strip{grid-template-columns:1fr}
  .art-body h2{margin-top:34px}
  .panel{margin-inline:0}
}
@media print{
  .masthead,.site-foot,.supporters{background:#fff;color:#000}
  a{text-decoration:none}
}

/* sp-blurb-unhide: every supporter slot shows its text — no half-texted grids */
.sponsor-blurb:not(:empty){display:block!important;line-height:1.5}

/* sp-blurb-link: money-link anchors in blurbs must inherit the blurb colour (readable on dark OR light tiles) */
.sponsor-blurb a{color:inherit;text-decoration:underline;text-underline-offset:2px}

/* op-flat-marks: operator asked for the marks to sit on the ground in BOTH tiers. The design gave
   its quiet tier a plate (.s-box background+border) and its featured tier none, so one band read as
   two. Keep the box's height so the row still aligns; drop only the plate. */
.sponsor .s-box{background:none;border:0;padding:0}

/* op-even-grid: the band had no math because `.sponsors` was a wrap-flex and `.sponsor` was
   `flex:1 1 240px` — every tile sized itself to its own content, so one row came out 253 / 429 /
   566px. Marks were already a uniform height; the TILES were the ragged part. A real grid gives
   equal columns and an even last row. */
.sponsors{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:20px;align-items:start}
.sponsor{flex:none;min-width:0}
.sponsor .s-box{height:auto;min-height:64px}

/* op-centre-tier1: the featured tier is `display:block`, so its mark (an inline <img>) sat hard
   left — 185px off the tile centre — while the quiet tier centred inside its .s-box. And our own
   sp-blurb-unhide left margin pushed the copy 20px right. Centre both tiers the same way. */
.sponsor{text-align:center}
.sponsor > .sponsor-blurb:not(:first-child),
.sponsor > *:not(.sponsor-blurb) + .sponsor-blurb{margin-left:0}

/* the .sp-logo anchor is inline and collapses to 0 width, so text-align on the tile never reaches
   the mark inside it — the image sat 185px left of centre. Give the anchor a box and centre the
   mark within it. */
.sponsor .sp-logo{display:block;text-align:center}
.sponsor .sp-logo img{display:inline-block;margin:0 auto}

/* sp-mark-frame: a uniform plate for the money mark, in the tiers where Design sized the plate
   to the artwork instead. Operator's rule: the dark ground is unified whatever the logo's
   size. width:100% (or one fixed width where copy shares the row) + one height for the tier
   + object-fit:contain, so the plate is the same box everywhere and the artwork fits inside
   it. A ground and an inset are added ONLY where none exists — adding a second ground gives
   co-cure's rectangle-inside-a-rectangle. Design's framed tiers are not touched at all. */
.sponsors .sponsor .s-box.s-box{display:block!important;width:100%!important}
.sponsors .sponsor .sp-logo.sp-logo{display:block!important;width:100%!important}
.sponsors .sponsor.sponsor img{box-sizing:border-box!important;height:52px!important;display:block!important;width:100%!important;padding:8px 14px!important;background:#121013!important;box-sizing:border-box!important}

/* op-quiet-marks-larger: the quiet tier carries a name and no sentence, so the plate has room the
   featured tier does not — operator asked for the marks there to use it. Height only; the plate
   stays the same width as every other, and the artwork still fits inside with object-fit. */
/* ⚠️ max-height:34px on .sponsor--quiet img caps `height` whatever the !important says —
   the same trap as every other mark resize. Release the cap, then set the height. */
.sponsors .sponsor--quiet.sponsor img{height:78px!important;max-height:none!important;padding:10px 18px!important}

/* op-footer-compact: the footer printed 5 rows for 5 link(s) in
   1 list(s) — 841px at 390, 8% of the whole page. Design's own
   good case (evbb) has no list at all: its footer links simply flow inline, 479px in total.
   Here the lists flow inline too,
   measured 841 -> 661px (21% shorter) with no new overflow. Both shapes were
   tried and the shorter one kept — two columns helps a wide group set and hurts a narrow one.
   Phone widths only; the desktop footer is untouched. */
@media (max-width:640px){
  footer ul,footer ol{display:flex!important;flex-direction:row!important;flex-wrap:wrap!important;column-gap:clamp(8px,2.78vw,40px)!important;row-gap:4px!important}
  footer ul > li,footer ol > li{width:auto!important;flex:0 0 auto;max-width:100%}
}

/* op-money-columns: the supporters block ran one tile per row — 10 tiles,
   1454px at 390, 14% of the whole page. Two columns bring it to
   972px (33% shorter). Checked before writing: no new overflow, smallest mark still
   168px wide, longest blurb 1 lines, tile heights 124-196px.
   A block that fails any of those is left in one column — two narrow columns can make a block
   TALLER once the copy rewraps, which is the case the operator warned about.
   An odd tile count means the lead tile spans the whole row, so the block does not end on an empty cell. Only the tier(s) that were one-per-row are touched (.sponsors), never the section
   that holds several tiers: forcing a grid on that would put a featured row and a regulars run
   side by side. Phone widths only. */
@media (max-width:640px){
  .sponsors{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;column-gap:20px!important}
    .sponsors > *{min-width:0!important;max-width:100%;width:auto!important;flex:0 1 auto!important}
    .sponsors > * *{min-width:0!important;max-width:100%}
    .sponsors img,.sponsors svg{max-width:100%;height:auto}

}

/* op-blurb-rows: money blurbs ran to 5 rows at 390, 556px of tier across
   5 tiles. Operator: blurbs should show "2-3 rows max" on mobile —
   a blurb that long eats the screen and, in a two-column grid, rewraps into more height than
   the columns save. Held to three rows at phone width; the copy stays in the markup and
   desktop is untouched. Only the tier(s) measured past three rows are clamped. */
@media (max-width:640px){
  .sponsors .sponsor-blurb{display:-webkit-box!important;-webkit-line-clamp:3!important;-webkit-box-orient:vertical;max-height:84px!important;min-height:0!important;overflow:hidden!important}
}

/* op-odd-tier-lead: .sponsors (5 tiles), .sponsors (5 tiles) lay out two per row with an ODD tile count, so the
   block ended on a lone tile beside an empty cell. The lead tile takes the whole row instead —
   operator: "the 1st item in such rows to be 100% width, then split" — so the grid reads as
   complete. These tiers were already two-per-row, which is why the column pass never wrote the
   rule for them. Checked before writing: no new horizontal overflow, block not more than 15%
   taller. Phone widths only; desktop keeps Design's layout. */
@media (max-width:640px){
  .sponsors:has(> *:nth-child(odd):last-child) > *:first-child{grid-column:1 / -1!important}
  .sponsors:has(> *:nth-child(odd):last-child) > *:first-child{grid-column:1 / -1!important}
}

/* op-article-width: the article column was capped at 789px (94 characters per line) at every desktop width. Operator: "it should utilize more space". Widened through Design's own measure --measure (declared in .art-body > *) to ~102 characters per line in this build's own prose font, never past the edge Design's own content already reaches beside it. Above 1600 the column and the prose type grow together (up to 1.2x). Nothing below 1024 changes. Originals: migration/_backups/article_width/. */
@media (min-width:1024px){
  div.art-body{--measure:min(73.999ch, 100%)!important}
}
@media (min-width:1600px){
  div.art-body > :is(p:not([class])){font-size:clamp(21px,1.4583vw,25.2px)!important}
}
/* op-article-width:end */

/* op-article-head: the article header followed the text column (789px) and was left behind when the text went to 859px. Operator: "article header page with title + meta info that are super shrinked". Its containers now follow the text again by the text's own factor. */
@media (min-width:1024px){
  h1.art-title{max-width:min(859px, 100%)!important}
  p.lead{max-width:min(820px, 100%)!important}
}
@media (min-width:1600px){
  h1.art-title{max-width:min(calc(clamp(859px, 59.653vw, 1031px) + 0px), 100%)!important}
  p.lead{max-width:min(calc(clamp(820px, 56.944vw, 984px) + 0px), 100%)!important}
}
/* op-article-head:end */

/* op-img-dims — intrinsic width/height reserve image space; the proven height:auto guard (zero specificity) */
:where(a.card > span.c-img > img,
  div.f-grid > div.f-img > img,
  div.wrap > figure.article-figure > img,
  li > a > img.cl-img){height:auto}
/* op-img-dims:end */
.sponsors.sponsors > [data-partner][data-partner] img{background:transparent!important}
@media (min-width:1024px){.sponsors.sponsors:has(> .sponsor--quiet){grid-template-columns:repeat(4,minmax(0,1fr))!important}}
