/* Editorial surfaces share the site's palette; course and research typography stays independent. */
/* Article body face, self-hosted (SIL OFL, fonts/SourceSerif4-OFL.txt); Georgia remains the fallback. */
@font-face{font-family:"Source Serif 4";src:url("../fonts/source-serif-4-400.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}
.stream-nav{display:flex;gap:28px;flex-wrap:wrap;border-block:1px solid var(--line);margin:0 0 32px;font:500 13px/1.5 var(--sans)}
.stream-nav a{display:block;color:var(--ink-soft);padding:14px 0;border-bottom:2px solid transparent;text-decoration:none}
.stream-nav a:hover,.stream-nav a[aria-current=page]{color:var(--blue-strong);border-bottom-color:var(--blue)}
.editorial{background:var(--paper);font-family:var(--sans);line-height:1.65}
.editorial .editorial-header{position:relative;display:flex;align-items:center;max-width:1240px;height:auto;min-height:var(--site-header-height);gap:28px;margin:0 auto;padding:20px 40px;background:var(--paper);border-bottom:1px solid var(--line)}
.editorial-header .editorial-brand{flex-shrink:0}
.editorial .editorial-header>.theme-toggle{margin-left:0;flex-shrink:0}
.editorial-main,.editorial-footer{width:min(100%,1240px);margin:auto;padding:0 40px}
.editorial .editorial-main{max-width:1240px}
.editorial-intro{padding:60px 0 32px;display:grid;grid-template-columns:1.3fr 1fr;column-gap:80px;align-items:end}
.editorial .eyebrow{font:500 10px/1.6 var(--sans);letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin:0 0 16px}
.editorial-intro>.eyebrow{grid-column:1/-1}
.editorial h1,.editorial h2,.editorial h3{color:var(--heading);font-family:var(--sans)}
.editorial-intro h1{font-size:clamp(38px,4.6vw,64px);line-height:1.08;letter-spacing:-.05em;font-weight:500;margin:0}
.editorial-intro h1 span{color:var(--muted)}
.editorial-intro>p:last-child{color:var(--ink-soft);font-size:16px;line-height:1.75;max-width:430px;margin:0 0 3px}
.editorial-intro.compact{display:block}
.editorial-intro.compact>p:last-child{max-width:680px;margin-top:22px}
.editorial .feature{display:grid;grid-template-columns:1.4fr 1fr;gap:72px;padding:24px 0 56px;align-items:center;border-bottom:1px solid var(--line)}
.editorial .story-label{font:500 10px/1.7 var(--sans);letter-spacing:.1em;text-transform:uppercase;color:var(--blue-strong);margin:0 0 18px}
.story-label span{color:var(--muted);padding:0 6px}
.editorial .lead-story h2{font-size:clamp(28px,3.3vw,44px);line-height:1.16;letter-spacing:-.035em;font-weight:550;margin:0 0 22px}
.editorial :is(.lead-story,.story-card,.paper-digest) h2 a,.editorial :is(.story-card,.paper-digest) h3 a{color:inherit;text-decoration:none}
.editorial :is(.lead-story,.story-card,.paper-digest) a:hover{color:var(--blue-strong);text-decoration:underline;text-underline-offset:5px}
.editorial .story-summary{font-size:16px;color:var(--ink-soft);margin:0 0 22px;line-height:1.7}
.editorial .story-meta{display:flex;flex-wrap:wrap;gap:8px 20px;font:12px/1.6 var(--sans);color:var(--muted);margin:0}
.editorial .story-read{display:inline-flex;gap:24px;margin-top:24px;color:var(--blue-strong);font-size:13px;font-weight:600}
.signal-art{position:relative;aspect-ratio:1;background:var(--surface);border:1px solid var(--line);padding:20px 24px 34px;color:var(--blue);max-width:390px;width:100%;justify-self:end}
.signal-art svg{display:block;width:100%;height:auto;stroke:var(--line-strong);stroke-width:1}
.signal-art .signal-bars{stroke:var(--blue);stroke-linecap:round}
.signal-art>span{position:absolute;bottom:18px;left:24px;font:9px/1.5 ui-monospace,monospace;letter-spacing:.16em;color:var(--muted)}
.editorial .section-top{display:flex;align-items:end;justify-content:space-between;gap:24px;margin-bottom:28px}
.editorial .section-top h2,.editorial .related-stories>h2{font-size:28px;line-height:1.3;letter-spacing:-.03em;font-weight:500;margin:0}
.editorial .section-top .eyebrow{margin-bottom:10px}
.editorial .section-top>a{font:500 12px/1.5 var(--sans);white-space:nowrap}
.latest-stories,.paper-digest,.related-stories{padding:44px 0 52px}
.story-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:48px;row-gap:36px}
.editorial .story-card{padding:24px 0 0;border-top:1px solid var(--line);min-width:0}
.editorial .story-card h3{font-size:24px;line-height:1.3;font-weight:500;letter-spacing:-.025em;margin:0 0 14px}
.editorial .story-card .story-summary{font-size:14px;line-height:1.8}
.editorial .story-card .story-label{margin-bottom:14px}
.explore-paths{display:grid;grid-template-columns:1.2fr 1fr 1fr 1fr;gap:34px;border-block:1px solid var(--line);padding:32px 0}
.editorial .explore-paths h2{font:500 24px/1.35 var(--sans);letter-spacing:-.03em;margin:0}
.editorial .explore-paths>a{display:block;color:var(--ink);padding-left:24px;border-left:1px solid var(--line);text-decoration:none}
.explore-paths>a span{display:block;font-size:11px;color:var(--muted);margin-bottom:10px}
.explore-paths>a strong{font-size:16px;font-weight:500}
.explore-paths>a p{font-size:13px;line-height:1.7;color:var(--ink-soft);margin:8px 0 0}
.explore-paths>a:hover strong{color:var(--blue-strong);text-decoration:underline}
.editorial .section-intro{font-size:14px;color:var(--ink-soft);margin:-10px 0 28px}
.paper-digest ol{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:30px}
.paper-digest li{border-top:1px solid var(--line);padding-top:22px}
.editorial .paper-digest h3{font-size:18px;font-weight:500;line-height:1.45;margin:0 0 12px}
.editorial .paper-digest li>p:last-child{font-size:13px;line-height:1.75;color:var(--ink-soft);margin:0}
.editorial .editorial-footer{padding-block:30px;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:28px;font-size:12px;color:var(--muted)}
.editorial-footer strong{font-weight:500;color:var(--heading)}
.editorial-footer p{margin:6px 0 0}
.editorial-footer nav{display:flex;flex-wrap:wrap;gap:12px 22px;align-items:center;align-content:start;max-width:440px}
.editorial-footer .footer-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--muted);transition:color .15s}
.editorial-footer .footer-icon:hover{color:var(--blue-strong);text-decoration:none}
.editorial-footer .footer-icon svg{display:block;width:15px;height:15px}
.article-filters{display:grid;grid-template-columns:2fr 1fr 1fr;gap:18px;margin:32px 0}
.article-filters label{font-size:12px;color:var(--ink-soft)}
.article-filters :is(input,select){display:block;width:100%;min-width:0;margin:8px 0 0;padding:12px;background:var(--paper);color:var(--ink);border:1px solid var(--field-border);border-radius:3px;font:14px var(--sans)}
#article-count{grid-column:1/-1;font-size:12px;color:var(--muted);margin:0}
.article-list{padding-bottom:64px}
.editorial [hidden]{display:none!important}
.editorial .general-article{max-width:680px;margin:40px auto 64px}
.general-article .breadcrumbs{margin-bottom:36px}
.editorial .general-article h1{font-size:clamp(32px,4vw,52px);line-height:1.15;letter-spacing:-.04em;font-weight:550;margin:0 0 24px}
.editorial .article-deck{font-size:20px;line-height:1.65;color:var(--ink-soft);margin:0 0 24px}
.editorial .general-article .story-meta a{color:var(--blue-strong);font-weight:600}
.editorial .key-points{border-top:1px solid var(--line);padding-top:18px;margin:0 0 24px}
.editorial .key-points h2{margin:0 0 10px}
.key-points ul{margin:0;padding-left:1.2em;font:15px/1.7 var(--sans);color:var(--ink)}
.key-points li{margin-bottom:6px}
.article-toc{margin-top:28px}
.article-toc ol{font:13px/1.6 var(--sans);margin:0}
.article-toc li{margin-bottom:6px}
.editorial .article-toc a{color:var(--ink-soft);text-decoration:none}
.editorial .article-toc a:hover{color:var(--blue-strong);text-decoration:underline}
/* Wide screens: the contents list sits in the left margin and stays in view; the text column keeps its place. */
@media(min-width:1280px){
 .has-toc .article-layout{display:grid;grid-template-columns:200px 680px;column-gap:40px;margin-left:-240px}
 .has-toc .article-toc{position:sticky;top:24px;align-self:start;max-height:calc(100vh - 48px);overflow-y:auto;margin-top:36px}
}
.article-prose{max-width:680px;margin:36px auto 0;font:18px/1.85 "Source Serif 4",var(--reading-font)}
.article-prose sup.cite{font:600 11px/1 var(--sans);margin-left:3px;color:var(--muted);white-space:nowrap}
.editorial .article-prose sup.cite a{text-decoration:none;padding:0 1px}
.editorial .article-prose sup.cite a:hover{text-decoration:underline}
.editorial .article-prose h2{font:500 24px/1.4 var(--sans);letter-spacing:-.025em;margin:36px 0 16px}
.article-prose p{margin:0 0 22px}
.article-prose mjx-container[display="true"]{overflow-x:auto;overflow-y:hidden;max-width:100%;padding:2px 0}
.article-sources{margin-top:42px;padding-top:8px;border-top:1px solid var(--line)}
.article-sources :is(ul,ol){padding-left:20px;font:14px/1.8 var(--sans)}
.article-sources li{margin-bottom:12px;overflow-wrap:anywhere}
.related-stories{border-top:1px solid var(--line)}
.general-article~.related-stories{max-width:680px;margin-inline:auto}
.related-stories>.story-grid{margin-top:28px}
@media(max-width:800px){
 .editorial .editorial-header{padding:20px 24px;gap:18px;flex-wrap:wrap}
 .editorial .editorial-nav{gap:22px;order:3;flex-basis:100%;margin:0}
 .editorial .editorial-header>.theme-toggle{margin-left:auto}
 .editorial-main,.editorial-footer{padding-inline:24px}
 .editorial-intro{grid-template-columns:1fr;padding-top:36px;gap:18px}
 .editorial-intro>p:last-child{max-width:580px}
 .editorial .feature{gap:28px;grid-template-columns:1.3fr 1fr}
 .signal-art{padding:8px 12px 30px}
 .signal-art>span{font-size:7px;left:12px}
 .story-grid{gap:32px}
 .explore-paths{grid-template-columns:repeat(3,1fr)}
 .explore-paths>div{grid-column:1/-1}
 .editorial .explore-paths>a{padding-left:0;border-left:0}
 .paper-digest ol{grid-template-columns:1fr}
 .editorial .editorial-footer{display:block}
 .editorial-footer nav{margin-top:22px}
}
@media(max-width:520px){
 .editorial .feature{grid-template-columns:1fr;padding-top:10px;gap:30px}
 .signal-art{max-width:none;aspect-ratio:auto;height:180px;overflow:hidden;padding:0}
 .signal-art svg{height:270px;width:270px;position:absolute;left:50%;top:-50px;transform:translateX(-50%)}
 .signal-art>span{bottom:12px;left:16px}
 .stream-nav{gap:22px;font-size:12px;margin-bottom:24px}
 .feature>.card-figure{max-width:none}
 .story-grid,.explore-paths,.article-filters{grid-template-columns:1fr}
 .editorial .section-top{align-items:start;flex-direction:column;gap:14px}
 .latest-stories,.paper-digest{padding:32px 0}
 .editorial .story-card h3{font-size:23px}
 .editorial .article-deck{font-size:18px}
 .article-prose{font-size:17px}
}
@media print{
 .editorial .editorial-header,.stream-nav,.article-filters,.signal-art,.editorial-footer{display:none}
 .editorial-main{padding:0;max-width:none}
 .editorial .general-article{margin:0;max-width:none}
}

/* Article figures: inline SVG drawn with these classes so marks follow the light/dark theme.
   Series colours are the validated categorical pair (blue, orange); text stays in ink tokens. */
.article-figure{margin:30px 0 34px;--fig-1:#2a78d6;--fig-2:#eb6834}
html[data-theme=dark] .article-figure{--fig-1:#3987e5;--fig-2:#d95926}
.article-figure .figure-scroll{overflow-x:auto}
.article-figure .figure-scroll>svg{display:block;width:100%;min-width:300px;height:auto;font-family:var(--sans)}
/* Thumbnails reuse an article's first figure, without its caption. */
.card-figure{margin:0 0 20px}
.card-figure>svg{display:block;width:100%;height:auto;max-height:220px;font-family:var(--sans)}
.feature>.card-figure{margin:0;width:100%;max-width:460px;justify-self:end}
.feature>.card-figure>svg{max-height:none}
.article-figure figcaption{font:13px/1.6 var(--sans);color:var(--muted);margin-top:10px}
.article-figure .fig-text{fill:var(--ink-soft);font-size:13px}
.article-figure .fig-label{fill:var(--ink);font-size:13px;font-weight:600}
.article-figure .fig-muted{fill:var(--muted);font-size:12px}
.article-figure .fig-axis{stroke:var(--line-strong);stroke-width:1;fill:none}
.article-figure .fig-grid{stroke:var(--line);stroke-width:1;fill:none}
.article-figure .fig-ref{stroke:var(--muted);stroke-width:1.5;fill:none;stroke-dasharray:5 4}
.article-figure .fig-line-1{stroke:var(--fig-1);stroke-width:2.5;fill:none}
.article-figure .fig-line-2{stroke:var(--fig-2);stroke-width:2.5;fill:none}
.article-figure .fig-fill-1{fill:var(--fig-1)}
.article-figure .fig-fill-2{fill:var(--fig-2)}
.article-figure .fig-fill-muted{fill:var(--line-strong)}
.article-figure .fig-box{fill:var(--surface);stroke:var(--line-strong);stroke-width:1}
.article-figure .fig-box-claimed{fill:var(--surface);stroke:var(--fig-1);stroke-width:2}
.article-figure .fig-box-open{fill:var(--surface);stroke:var(--fig-2);stroke-width:2;stroke-dasharray:5 4}
.article-figure .fig-node{fill:var(--paper);stroke:var(--ink-soft);stroke-width:1.5}
.article-figure .fig-hollow{fill:var(--paper);stroke:var(--fig-2);stroke-width:2.5}
.article-figure .fig-link{stroke:var(--ink-soft);stroke-width:1.5;fill:none}
.article-figure .fig-cross{stroke:var(--fig-2);stroke-width:1.5;fill:none}
.article-figure .fig-measure{stroke:var(--fig-1);stroke-width:1.5;fill:none;stroke-dasharray:4 3}
/* Banner marks: a flat panel and translucent washes of the two series colours (no gradients). */
.article-figure .fig-bg{fill:var(--surface)}
.article-figure .fig-wash-1{fill:var(--fig-1);opacity:.14}
.article-figure .fig-wash-2{fill:var(--fig-2);opacity:.16}
.article-figure .fig-fill-muted-soft{fill:var(--line-strong);opacity:.35}
/* Banners: 3:1 under the summary; cards and the lead story crop the same drawing (preserveAspectRatio slice). */
.editorial .article-banner{margin:0 0 26px}
.article-banner>svg,.card-banner>svg{display:block;width:100%;height:auto;aspect-ratio:3/1;font-family:var(--sans)}
.card-banner{border-radius:6px;overflow:hidden}
.feature>.card-banner>svg{aspect-ratio:4/3;max-height:none}
@media(max-width:520px){.article-banner>svg,.feature>.card-banner>svg{aspect-ratio:5/2}}
.article-prose .cite-tail{white-space:nowrap}
/* Structured article parts (NEWS.md): kicker, key numbers, tables and "What to ask" lists.
   Typography and thin rules only; no boxes or shadows (site style). */
.editorial .article-prose section.has-kicker{margin-top:52px}
.editorial .article-prose .section-kicker{font:600 11px/1.4 var(--sans);letter-spacing:.14em;text-transform:uppercase;color:var(--blue-strong);margin:0 0 6px}
.editorial .article-prose .section-kicker+h2{margin-top:0}
.editorial .article-prose section.has-kicker h2{font-size:28px;line-height:1.3;letter-spacing:-.025em}
.article-toc .toc-kicker{display:block;font:600 10px/1.5 var(--sans);letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.editorial .article-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:0 28px;margin:26px 0 30px;padding:18px 0 4px;border-block:1px solid var(--line)}
.article-stats>div{display:flex;flex-direction:column-reverse;margin-bottom:14px}
.article-stats dd{margin:0;font:600 30px/1.15 var(--sans);letter-spacing:-.02em;color:var(--heading)}
.article-stats dt{font:13px/1.5 var(--sans);color:var(--ink-soft);margin-top:6px}
.editorial .article-table{margin:28px 0 32px;overflow-x:auto}
.article-table table{width:100%;min-width:520px;border-collapse:collapse;font:14px/1.55 var(--sans);color:var(--ink)}
.article-table caption{caption-side:bottom;text-align:left;font:13px/1.6 var(--sans);color:var(--muted);padding-top:10px}
.article-table th,.article-table td{text-align:left;vertical-align:top;padding:11px 14px 11px 0;border-bottom:1px solid var(--line)}
.article-table thead th{font:600 11px/1.4 var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--line-strong)}
.article-table tbody th{font-weight:600;color:var(--heading)}
.editorial .article-asks{margin:28px 0 8px;padding:2px 0 2px 18px;border-left:2px solid var(--blue)}
.article-asks .asks-label{font:600 11px/1.4 var(--sans);letter-spacing:.14em;text-transform:uppercase;color:var(--blue-strong);margin:0 0 8px}
.article-asks ul{margin:0;padding-left:1.1em;font:15.5px/1.65 var(--sans);color:var(--ink)}
.article-asks li{margin-bottom:6px}
@media(max-width:520px){.article-stats dd{font-size:26px}.editorial .article-prose section.has-kicker h2{font-size:24px}}

/* Curated claim index: attribution and scope remain visible without interaction. */
.problem-claims{margin:64px 0;padding:32px 0;border-block:1px solid var(--line-strong)}
.problem-intro{max-width:850px;color:var(--ink-soft);font:16px/1.7 var(--sans);margin:0 0 28px}
.problem-claims-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;list-style:none;margin:0;padding:0}
.problem-claim{display:flex;flex-direction:column;min-width:0;padding:24px;border:1px solid var(--line);border-radius:8px;background:var(--card)}
.problem-claim .problem-field{color:var(--blue-strong);font:600 11px/1.5 var(--sans);letter-spacing:.06em;text-transform:uppercase;margin:0 0 10px}
.problem-claim h3{font:600 22px/1.3 var(--reading-font);color:var(--heading);margin:0 0 12px}
.problem-question{font:15px/1.65 var(--sans);margin:0 0 18px;color:var(--ink)}
.problem-claim .problem-status{align-self:flex-start;padding:4px 9px;background:var(--blue-wash);color:var(--blue-strong);font:600 11px/1.5 var(--sans);border-radius:4px;margin:0 0 9px}
.problem-scope{font:13px/1.65 var(--sans);color:var(--ink-soft);margin:0 0 18px}
.problem-attribution{font:12px/1.6 var(--sans);color:var(--muted);margin:auto 0 12px}
.problem-links{display:flex;flex-wrap:wrap;gap:10px 18px;font:600 13px/1.6 var(--sans)}
.problem-links a{text-decoration:underline;text-underline-offset:3px}
.problem-review{font:12px/1.7 var(--sans);color:var(--muted);margin:20px 0 0;max-width:850px}
@media(max-width:1000px){.problem-claims-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:620px){.problem-claims-grid{grid-template-columns:1fr}.problem-claims{margin:36px 0;padding:24px 0}.problem-claim{padding:20px}}

/* Concept cards: a run of short, self-contained sections in a tutorial article. Plain border, no shadow. */
.editorial .article-prose section.concept-card{margin:16px 0;padding:22px 26px 6px;border:1px solid var(--line-strong);border-radius:8px;background:var(--card)}
.editorial .article-prose section.concept-card:not(.concept-card+.concept-card){margin-top:36px}
.editorial .article-prose section.concept-card h2{margin:0 0 12px;font-size:21px;line-height:1.35}
.editorial .article-prose section.concept-card .article-figure{margin-inline:0}
@media(max-width:520px){.editorial .article-prose section.concept-card{padding:18px 16px 4px;margin-inline:-4px}}
