/* Studio shared component system, Oct 24, 2026. One system, themed per site via [data-site]. */
@font-face{font-family:"Source Serif 4";src:url(fonts/source-serif-4-400.woff2) format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"Source Serif 4";src:url(fonts/source-serif-4-700.woff2) format("woff2");font-weight:700 800;font-display:swap}
@font-face{font-family:"Inter Tight";src:url(fonts/inter-tight-500.woff2) format("woff2");font-weight:500;font-display:swap}
@font-face{font-family:"Inter Tight";src:url(fonts/inter-tight-600.woff2) format("woff2");font-weight:600 700;font-display:swap}
@font-face{font-family:"Bricolage Grotesque";src:url(fonts/bricolage-grotesque-700.woff2) format("woff2");font-weight:700;font-display:swap}
@font-face{font-family:"Literata";src:url(fonts/literata-400.woff2) format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"Literata";src:url(fonts/literata-700.woff2) format("woff2");font-weight:700;font-display:swap}
@font-face{font-family:"IBM Plex Mono";src:url(fonts/ibm-plex-mono-400.woff2) format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"IBM Plex Sans Condensed";src:url(fonts/ibm-plex-sans-condensed-700.woff2) format("woff2");font-weight:700;font-display:swap}
@font-face{font-family:"IBM Plex Sans";src:url(fonts/ibm-plex-sans-400.woff2) format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"IBM Plex Sans";src:url(fonts/ibm-plex-sans-600.woff2) format("woff2");font-weight:600;font-display:swap}

/* ---------- 1. Core tokens (shared) ---------- */
:root{
  --step--1:clamp(.84rem,.82rem + .1vw,.9rem);
  --step-0:clamp(1.0rem,.97rem + .15vw,1.08rem);
  --step-1:clamp(1.19rem,1.12rem + .3vw,1.35rem);
  --step-2:clamp(1.42rem,1.28rem + .6vw,1.75rem);
  --step-3:clamp(1.7rem,1.45rem + 1.1vw,2.35rem);
  --step-4:clamp(2.05rem,1.6rem + 2vw,3.25rem);
  --step-5:clamp(2.4rem,1.7rem + 3.2vw,4.25rem);
  --sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:24px;--sp-6:32px;--sp-7:48px;--sp-8:64px;--sp-9:96px;
  --wrap:1240px;--measure:68ch;--gutter:clamp(16px,3vw,32px);
  --r-0:0;--r-1:4px;--r-2:8px;--r-pill:999px;
  --dur-1:120ms;--dur-2:200ms;--ease:cubic-bezier(.2,.7,.2,1);
  --target:44px;
  --focus-w:3px;
}
@media (prefers-reduced-motion:reduce){:root{--dur-1:0ms;--dur-2:0ms}}

/* ---------- 2. Site themes (light) ---------- */
[data-site="news"]{
  --f-head:"Source Serif 4",Georgia,serif;--f-body:"Source Serif 4",Georgia,serif;--f-ui:"Inter Tight",system-ui,sans-serif;--f-mono:"IBM Plex Mono",ui-monospace,monospace;
  --body-size:1.1875rem;--head-weight:800;
  --bg:#F7F5F0;--surface:#FFFFFF;--surface-2:#EFECE4;--ink:#14171A;--ink-2:#4A4F55;--rule:#D9D4CA;--rule-strong:#14171A;
  --brand:#1F3A5F;--brand-ink:#FFFFFF;--accent:#C2410C;--link:#1F3A5F;--focus:#C2410C;
  --ok:#166534;--warn:#92400E;--err:#B42318;--r-card:0;
}
[data-site="cannabis"]{
  --f-head:"Bricolage Grotesque",system-ui,sans-serif;--f-body:"Literata",Georgia,serif;--f-ui:"Bricolage Grotesque",system-ui,sans-serif;--f-mono:"IBM Plex Mono",ui-monospace,monospace;
  --body-size:1.125rem;--head-weight:700;
  --bg:#F4F1E8;--surface:#FFFDF7;--surface-2:#E9E4D4;--ink:#17231B;--ink-2:#4C5A50;--rule:#D6CFBB;--rule-strong:#1F3D2B;
  --brand:#1F3D2B;--brand-ink:#F4F1E8;--accent:#8A5A00;--link:#1F3D2B;--focus:#9C4A2F;
  --ok:#1F6B3A;--warn:#8A5A00;--err:#9C4A2F;--r-card:var(--r-2);
}
[data-site="health"]{
  --f-head:"IBM Plex Sans Condensed","Arial Narrow",sans-serif;--f-body:"IBM Plex Sans",system-ui,sans-serif;--f-ui:"IBM Plex Sans",system-ui,sans-serif;--f-mono:"IBM Plex Mono",ui-monospace,monospace;
  --body-size:1.125rem;--head-weight:700;
  --bg:#FFFFFF;--surface:#FFFFFF;--surface-2:#F3F6F8;--ink:#0B1B2B;--ink-2:#46566A;--rule:#D5DDE3;--rule-strong:#0B2545;
  --brand:#0B2545;--brand-ink:#FFFFFF;--accent:#0E7C7B;--link:#0B5F5E;--focus:#0E7C7B;
  --ok:#166534;--warn:#B45309;--err:#B42318;--r-card:var(--r-1);
}
/* ---------- 2b. Dark themes: OS setting unless the reader picked one ---------- */
@media (prefers-color-scheme:dark){
 html:not([data-theme="light"]) [data-site="news"],html:not([data-theme="light"])[data-site="news"]{--bg:#121417;--surface:#1A1D21;--surface-2:#22262B;--ink:#ECE9E2;--ink-2:#B5B1A8;--rule:#33383E;--rule-strong:#ECE9E2;--brand:#9DB7DA;--brand-ink:#0E1520;--accent:#F08A5D;--link:#A9C3E6;--focus:#F08A5D;--ok:#6FD39A;--warn:#F2B66B;--err:#FF8A80}
 html:not([data-theme="light"])[data-site="cannabis"]{--bg:#121A15;--surface:#18221B;--surface-2:#203027;--ink:#ECE8DB;--ink-2:#B9C2B5;--rule:#2F3E34;--rule-strong:#ECE8DB;--brand:#A9C9A9;--brand-ink:#0F1A13;--accent:#E3B04B;--link:#B7D6B7;--focus:#E3A07F;--ok:#7FD39A;--warn:#E3B04B;--err:#F29C80}
 html:not([data-theme="light"])[data-site="health"]{--bg:#0B1724;--surface:#0F1E2E;--surface-2:#15283B;--ink:#E7EEF4;--ink-2:#A9BACB;--rule:#24384D;--rule-strong:#E7EEF4;--brand:#8EC5FF;--brand-ink:#08121C;--accent:#4FD1C5;--link:#7FDCD3;--focus:#4FD1C5;--ok:#6FD39A;--warn:#F2B66B;--err:#FF8A80}
}
html[data-theme="dark"][data-site="news"]{--bg:#121417;--surface:#1A1D21;--surface-2:#22262B;--ink:#ECE9E2;--ink-2:#B5B1A8;--rule:#33383E;--rule-strong:#ECE9E2;--brand:#9DB7DA;--brand-ink:#0E1520;--accent:#F08A5D;--link:#A9C3E6;--focus:#F08A5D;--ok:#6FD39A;--warn:#F2B66B;--err:#FF8A80}
html[data-theme="dark"][data-site="cannabis"]{--bg:#121A15;--surface:#18221B;--surface-2:#203027;--ink:#ECE8DB;--ink-2:#B9C2B5;--rule:#2F3E34;--rule-strong:#ECE8DB;--brand:#A9C9A9;--brand-ink:#0F1A13;--accent:#E3B04B;--link:#B7D6B7;--focus:#E3A07F;--ok:#7FD39A;--warn:#E3B04B;--err:#F29C80}
html[data-theme="dark"][data-site="health"]{--bg:#0B1724;--surface:#0F1E2E;--surface-2:#15283B;--ink:#E7EEF4;--ink-2:#A9BACB;--rule:#24384D;--rule-strong:#E7EEF4;--brand:#8EC5FF;--brand-ink:#08121C;--accent:#4FD1C5;--link:#7FDCD3;--focus:#4FD1C5;--ok:#6FD39A;--warn:#F2B66B;--err:#FF8A80}
html{color-scheme:light dark;scroll-padding-top:16px;scroll-padding-bottom:var(--obscured,0px)}

/* ---------- 3. Base ---------- */
*,*::before,*::after{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:400 var(--body-size)/1.6 var(--f-body);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
h1,h2,h3,h4{font-family:var(--f-head);font-weight:var(--head-weight);line-height:1.12;letter-spacing:-.01em;margin:0 0 var(--sp-3);text-wrap:balance}
p{margin:0 0 var(--sp-4)}
a{color:var(--link);text-decoration-thickness:1px;text-underline-offset:.18em}
a:hover{text-decoration-thickness:2px}
img,svg{max-width:100%;display:block}
:focus-visible{outline:var(--focus-w) solid var(--focus);outline-offset:2px;border-radius:2px}
.wrap{max-width:var(--wrap);margin:0 auto;padding:0 var(--gutter)}
.skip{position:absolute;left:8px;top:-60px;z-index:100;background:var(--brand);color:var(--brand-ink);padding:12px 16px;font:600 1rem var(--f-ui)}
.skip:focus{top:8px}
.ui{font-family:var(--f-ui)}
.mono{font-family:var(--f-mono);font-size:.86em}
.kicker{display:inline-block;font:600 .78rem/1.2 var(--f-ui);letter-spacing:.08em;text-transform:uppercase;color:var(--accent);margin-bottom:var(--sp-2)}
.meta{font:500 var(--step--1)/1.4 var(--f-ui);color:var(--ink-2)}
.sample-tag{display:inline-block;font:600 .72rem/1 var(--f-ui);letter-spacing:.06em;text-transform:uppercase;border:1px dashed var(--ink-2);color:var(--ink-2);padding:4px 6px;margin:0 0 var(--sp-2);border-radius:var(--r-1)}
.vh{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- 4. Preview bar + header/nav ---------- */
.preview-bar{background:var(--ink);color:var(--bg);font:500 .82rem/1.3 var(--f-ui);text-align:center;padding:6px 12px}
.site-head{border-bottom:1px solid var(--rule);background:var(--bg)}
.head-row{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);min-height:64px}
.brand{display:flex;align-items:center;gap:10px;color:var(--ink);text-decoration:none;font:var(--head-weight) 1.35rem/1 var(--f-head)}
.brand .mark{width:32px;height:32px}
.brand i{font-style:normal;color:var(--accent)}
.nav{display:flex;gap:var(--sp-1);flex-wrap:wrap}
.nav a{display:inline-flex;align-items:center;min-height:var(--target);padding:0 12px;font:600 .95rem var(--f-ui);color:var(--ink);text-decoration:none;border-bottom:2px solid transparent}
.nav a:hover{border-bottom-color:var(--rule-strong)}
.nav a[aria-current="page"]{border-bottom-color:var(--accent)}
.head-tools{display:flex;gap:var(--sp-2);align-items:center}
.icon-btn{min-width:var(--target);min-height:var(--target);display:inline-grid;place-items:center;background:transparent;border:1px solid var(--rule);color:var(--ink);border-radius:var(--r-pill);cursor:pointer;font:600 .85rem var(--f-ui);padding:0 12px}
.icon-btn:hover{border-color:var(--ink)}
.icon-btn:active{transform:translateY(1px)}
.menu-btn{display:none}
/* news masthead variant */
[data-site="news"] .masthead{text-align:center;padding:var(--sp-5) 0 var(--sp-3);border-bottom:3px double var(--rule-strong)}
[data-site="news"] .masthead .brand{justify-content:center;font-size:clamp(2rem,1.4rem + 2.6vw,3.4rem);letter-spacing:-.02em}
[data-site="news"] .dateline{display:flex;justify-content:space-between;font:500 .82rem var(--f-ui);color:var(--ink-2);border-top:1px solid var(--rule);margin-top:var(--sp-4);padding-top:var(--sp-2)}
@media (max-width:767px){
 .menu-btn{display:inline-grid}
 .nav{display:none;width:100%;flex-direction:column;padding-bottom:var(--sp-3)}
 .nav.open{display:flex}
 .head-row{flex-wrap:wrap}
 [data-site="news"] .dateline{flex-direction:column;gap:2px;text-align:center}
}

/* ---------- 5. Buttons, inputs and the 8 interaction states ---------- */
.btn{--b:var(--brand);--bi:var(--brand-ink);display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:var(--target);padding:0 20px;border:2px solid var(--b);background:var(--b);color:var(--bi);font:600 1rem/1 var(--f-ui);border-radius:var(--r-card);cursor:pointer;text-decoration:none;transition:filter var(--dur-1) var(--ease),transform var(--dur-1) var(--ease)}
.btn:hover,.btn.is-hover{filter:brightness(1.12)}
.btn:active,.btn.is-active{transform:translateY(1px);filter:brightness(.92)}
.btn:focus-visible,.btn.is-focus{outline:var(--focus-w) solid var(--focus);outline-offset:3px}
.btn:disabled,.btn.is-disabled{background:var(--surface-2);border-color:var(--rule);color:var(--ink-2);cursor:not-allowed;filter:none;transform:none}
.btn[aria-busy="true"],.btn.is-loading{cursor:progress}
.btn[aria-busy="true"]::before,.btn.is-loading::before{content:"";width:14px;height:14px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin .8s linear infinite}
.btn.is-error{--b:var(--err);--bi:#fff}
.btn.is-success{--b:var(--ok);--bi:#fff}
html[data-theme="dark"] .btn.is-error,html[data-theme="dark"] .btn.is-success{--bi:#111}
.btn.ghost{background:transparent;color:var(--b)}
.btn.ghost:hover{background:var(--surface-2)}
@keyframes spin{to{transform:rotate(360deg)}}
.field{display:flex;flex-direction:column;gap:6px}
.field label{font:600 .92rem var(--f-ui)}
.input{min-height:var(--target);padding:0 14px;border:2px solid var(--ink-2);background:var(--surface);color:var(--ink);font:400 1rem var(--f-ui);border-radius:var(--r-card)}
.input:hover{border-color:var(--ink)}
.input:focus-visible,.input.is-focus{outline:var(--focus-w) solid var(--focus);outline-offset:1px;border-color:var(--ink)}
.input:disabled{background:var(--surface-2);color:var(--ink-2);border-color:var(--rule)}
.input[aria-invalid="true"]{border-color:var(--err)}
.msg{font:500 .92rem/1.4 var(--f-ui);min-height:1.4em;margin:6px 0 0}
.msg.err{color:var(--err)}.msg.ok{color:var(--ok)}
.check{display:flex;gap:10px;align-items:flex-start;font:500 .95rem/1.4 var(--f-ui)}
.check input{width:24px;height:24px;margin:0;accent-color:var(--brand);flex:none}

/* ---------- 6. Hero (16:9, 1200px+) ---------- */
.hero{margin:0}
.plate{position:relative;aspect-ratio:16/9;width:100%;background:var(--surface-2);border:1px solid var(--rule);overflow:hidden;border-radius:var(--r-card);display:grid;place-items:center}
.plate svg{width:100%;height:100%}
.hero figcaption,.cap{font:500 .82rem/1.4 var(--f-ui);color:var(--ink-2);padding-top:var(--sp-2)}

/* ---------- 7. Cards and grids ---------- */
.lead{display:grid;grid-template-columns:1.5fr 1fr;gap:var(--sp-6);padding:var(--sp-6) 0;border-bottom:1px solid var(--rule)}
.lead h2{font-size:var(--step-3)}
.lead .dek{font-size:var(--step-1);color:var(--ink-2)}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:0}
.grid3>.card{padding:var(--sp-5);border-right:1px solid var(--rule)}
.grid3>.card:nth-child(3n){border-right:0}
.grid3>.card:nth-child(3n+1){padding-left:0}
.card{position:relative;background:transparent}
.card h3{font-size:var(--step-2);margin-bottom:var(--sp-2)}
.card h3 a{color:var(--ink);text-decoration:none}
.card h3 a:hover{text-decoration:underline}
.card h3 a::after{content:"";position:absolute;inset:0}
.card h3 a:focus-visible{outline:none}
.card:has(h3 a:focus-visible){outline:var(--focus-w) solid var(--focus);outline-offset:2px}
.card p{color:var(--ink-2);font-size:1rem}
[data-site="cannabis"] .card,[data-site="health"] .card{background:var(--surface);border:1px solid var(--rule);border-radius:var(--r-card);padding:var(--sp-5)}
[data-site="cannabis"] .grid3,[data-site="health"] .grid3{gap:var(--sp-4)}
[data-site="cannabis"] .grid3>.card,[data-site="health"] .grid3>.card{padding:var(--sp-5);border-right:1px solid var(--rule)}
.card:hover{border-color:var(--ink-2)}
.section-head{display:flex;align-items:baseline;justify-content:space-between;border-top:3px solid var(--rule-strong);padding-top:var(--sp-3);margin:var(--sp-7) 0 var(--sp-4)}
.section-head h2{font-size:var(--step-3);margin:0}
.section-head a{font:600 .95rem var(--f-ui);min-height:var(--target);display:inline-flex;align-items:center}
.list{list-style:none;margin:0;padding:0}
.list li{border-bottom:1px solid var(--rule);padding:var(--sp-4) 0}
@media (max-width:1023px){.lead{grid-template-columns:1fr}.grid3{grid-template-columns:repeat(2,1fr)}.grid3>.card{border-right:0;padding-left:0}}
@media (max-width:767px){.grid3{grid-template-columns:1fr}.grid3>.card{border-bottom:1px solid var(--rule)}}

/* ---------- 8. Layout shells ---------- */
.home-cols{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:var(--sp-7)}
.art-cols{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:var(--sp-7);align-items:start}
.rail{position:sticky;top:16px;display:flex;flex-direction:column;gap:var(--sp-5)}
@media (max-width:1023px){.home-cols,.art-cols{grid-template-columns:1fr}.rail{position:static}}

/* ---------- 9. Article body ---------- */
.article h1{font-size:var(--step-5);max-width:22ch}
[data-site="health"] .article h1{max-width:26ch}
.article .dek{font-size:var(--step-1);color:var(--ink-2);max-width:60ch}
.byline{display:flex;flex-wrap:wrap;gap:4px 16px;align-items:center;font:500 .95rem var(--f-ui);color:var(--ink-2);border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);padding:var(--sp-3) 0;margin:var(--sp-5) 0}
.byline a{font-weight:600}
.chip{display:inline-flex;align-items:center;gap:6px;font:600 .8rem/1 var(--f-ui);padding:6px 10px;border-radius:var(--r-pill);background:var(--surface-2);color:var(--ink);border:1px solid var(--rule)}
.body{max-width:var(--measure)}
.body h2{font-size:var(--step-3);margin-top:var(--sp-7)}
.body ul{padding-left:1.2em}.body li{margin-bottom:var(--sp-2)}
.body table{border-collapse:collapse;width:100%;font:400 .95rem var(--f-ui)}
.body th,.body td{border-bottom:1px solid var(--rule);padding:8px;text-align:left;vertical-align:top}
.tbl{overflow-x:auto}
.sources{background:var(--surface-2);padding:var(--sp-5);border-left:4px solid var(--accent);margin-top:var(--sp-7);border-radius:var(--r-card)}
.sources h2{font-size:var(--step-2);margin-top:0}
.sources .claims{font:400 .98rem/1.5 var(--f-ui);padding-left:1.1em}
.answer{font-size:var(--step-1);border-left:4px solid var(--brand);padding:var(--sp-2) 0 var(--sp-2) var(--sp-4);margin:var(--sp-5) 0}
.note{font:500 .9rem/1.45 var(--f-ui);background:var(--surface-2);border:1px solid var(--rule);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-card)}

/* ---------- 10. Each side says (Whole Read) ---------- */
.sides{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--rule-strong);margin:var(--sp-6) 0;background:var(--surface)}
.sides>header{grid-column:1/-1;padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--rule-strong);display:flex;justify-content:space-between;gap:var(--sp-3);flex-wrap:wrap;align-items:baseline}
.sides>header h2{font-size:var(--step-2);margin:0}
.side{padding:var(--sp-4) var(--sp-5)}
.side+.side{border-left:1px solid var(--rule)}
.side h3{font:700 .8rem/1.2 var(--f-ui);letter-spacing:.08em;text-transform:uppercase;margin-bottom:var(--sp-3)}
.side p{font-size:1rem}
@media (max-width:767px){.sides{grid-template-columns:1fr}.side+.side{border-left:0;border-top:1px solid var(--rule)}}

/* ---------- 11. Rating badges (six) + meter ---------- */
.rating{display:inline-flex;align-items:center;gap:8px;font:700 .82rem/1 var(--f-ui);letter-spacing:.02em;padding:6px 10px 6px 6px;border:1.5px solid currentColor;border-radius:var(--r-1);background:var(--surface)}
.rating svg{width:18px;height:18px;flex:none}
.r-accurate{color:#14532D}.r-mostly{color:#1E5631}.r-context{color:#7A4A00}.r-misleading{color:#9A3412}.r-false{color:#991B1B}.r-unproven{color:#3F4650}
html[data-theme="dark"] .r-accurate,html[data-theme="dark"] .r-mostly{color:#86EFAC}html[data-theme="dark"] .r-context{color:#FCD34D}html[data-theme="dark"] .r-misleading{color:#FDBA74}html[data-theme="dark"] .r-false{color:#FCA5A5}html[data-theme="dark"] .r-unproven{color:#CBD5E1}
@media (prefers-color-scheme:dark){html:not([data-theme="light"]) .r-accurate,html:not([data-theme="light"]) .r-mostly{color:#86EFAC}html:not([data-theme="light"]) .r-context{color:#FCD34D}html:not([data-theme="light"]) .r-misleading{color:#FDBA74}html:not([data-theme="light"]) .r-false{color:#FCA5A5}html:not([data-theme="light"]) .r-unproven{color:#CBD5E1}}
.legend{list-style:none;padding:0;margin:0;display:grid;gap:var(--sp-3)}
.legend li{display:grid;gap:4px;font:400 .92rem/1.45 var(--f-ui);color:var(--ink-2)}
.meter{border:1px solid var(--rule);padding:var(--sp-4);background:var(--surface);border-radius:var(--r-card)}
.meter h3{font-size:var(--step-1)}
.meter .bars{display:grid;gap:var(--sp-2);margin:var(--sp-3) 0}
.meter .bar{display:grid;grid-template-columns:5.5rem 1fr;align-items:center;gap:var(--sp-3);font:600 .88rem var(--f-ui)}
.meter .track{height:14px;background:var(--surface-2);border:1px solid var(--rule)}
.meter .fill{height:100%;background:repeating-linear-gradient(45deg,var(--ink-2) 0 4px,transparent 4px 8px)}
.meter[hidden]{display:none}

/* ---------- 12. Embed-first video ---------- */
.video{margin:var(--sp-6) 0}
.video .frame{aspect-ratio:16/9;background:var(--ink);color:var(--bg);display:grid;place-items:center;border-radius:var(--r-card);overflow:hidden}
.video button.play{display:flex;flex-direction:column;align-items:center;gap:var(--sp-3);background:transparent;border:0;color:inherit;font:600 1rem var(--f-ui);cursor:pointer;min-width:var(--target);min-height:var(--target);padding:var(--sp-5)}
.video button.play .disc{width:72px;height:72px;border-radius:50%;border:2px solid currentColor;display:grid;place-items:center}
.video button.play:hover .disc{background:color-mix(in srgb,currentColor 15%,transparent)}
.video button.play:focus-visible{outline:var(--focus-w) solid var(--focus);outline-offset:-6px}
.video .frame[aria-busy="true"]::after{content:"Loading the source post…";font:500 .95rem var(--f-ui)}
.video .credit{font:500 .85rem var(--f-ui);color:var(--ink-2);padding-top:var(--sp-2)}

/* ---------- 13. Signup ---------- */
.signup{background:var(--brand);color:var(--brand-ink);padding:var(--sp-6);border-radius:var(--r-card)}
.signup h2,.signup h3{color:inherit;font-size:var(--step-3)}
.signup p{opacity:.95}
.signup form{display:grid;grid-template-columns:1fr auto;gap:var(--sp-3);align-items:end;max-width:640px}
.signup .field label{color:inherit}
.signup .input{border-color:transparent}
.signup .btn{--b:var(--bg);--bi:var(--ink)}
.signup .fine{grid-column:1/-1;font:500 .88rem/1.4 var(--f-ui);margin:0}
.signup .check{grid-column:1/-1}
.signup .msg{grid-column:1/-1;color:inherit;font-weight:600}
.signup .msg.err::before{content:"⚠ "}.signup .msg.ok::before{content:"✓ "}
.signup.band{border-radius:0}
.signup.compact{padding:var(--sp-5)}
.signup.compact form{grid-template-columns:1fr}
@media (max-width:767px){.signup form{grid-template-columns:1fr}}

/* ---------- 14. Push prompt (design only) ---------- */
.push{position:fixed;right:16px;bottom:16px;max-width:360px;background:var(--surface);color:var(--ink);border:1px solid var(--rule-strong);box-shadow:0 8px 30px rgba(0,0,0,.18);padding:var(--sp-4);z-index:50;border-radius:var(--r-card)}
.push h2{font-size:var(--step-1);margin-bottom:var(--sp-2)}
.push p{font:400 .92rem/1.45 var(--f-ui)}
.push .row{display:flex;gap:var(--sp-2);flex-wrap:wrap}
@media (max-width:767px){.push{left:8px;right:8px;bottom:8px;max-width:none}}

/* ---------- 15. Ad slots: reserved height, never shift ---------- */
.ad{display:grid;place-items:center;background:var(--surface-2);border:1px dashed var(--rule);color:var(--ink-2);font:600 .72rem/1 var(--f-ui);letter-spacing:.1em;text-transform:uppercase;contain:size layout}
.ad-leader{height:90px;max-width:728px;margin:var(--sp-5) auto}
.ad-rail{height:600px}
.ad-inline{height:280px;margin:var(--sp-6) 0}
@media (max-width:767px){.ad-leader{height:100px}.ad-rail{height:250px}}

/* ---------- 16. Footer ---------- */
.site-foot{border-top:3px solid var(--rule-strong);margin-top:var(--sp-8);padding:var(--sp-7) 0 var(--sp-6);background:var(--surface-2)}
.foot-grid{display:grid;grid-template-columns:1.2fr 2fr;gap:var(--sp-6)}
.foot-links{list-style:none;padding:0;margin:0;columns:3 160px}
.foot-links a{display:inline-flex;min-height:var(--target);align-items:center;font:500 .95rem var(--f-ui);color:var(--ink)}
.fine{font:500 .85rem/1.5 var(--f-ui);color:var(--ink-2)}
.publisher{font:600 .9rem var(--f-ui);color:var(--ink);border-top:1px solid var(--rule);padding-top:var(--sp-4);margin-top:var(--sp-5);grid-column:1/-1}
@media (max-width:767px){.foot-grid{grid-template-columns:1fr}}

/* ---------- 17. Site-specific modules ---------- */
.alerts{background:var(--surface-2);border-bottom:1px solid var(--rule);font:500 .92rem var(--f-ui)}
.alerts .wrap{display:flex;gap:var(--sp-4);align-items:center;min-height:48px;flex-wrap:wrap}
.status{display:inline-flex;align-items:center;gap:6px;font:700 .78rem/1 var(--f-ui);text-transform:uppercase;letter-spacing:.05em;padding:5px 8px;border-radius:var(--r-1);border:1.5px solid currentColor}
.st-warn{color:var(--warn)}.st-ok{color:var(--ok)}.st-err{color:var(--err)}.st-info{color:var(--link)}
.board{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--sp-4)}
@media (max-width:1023px){.board{grid-template-columns:repeat(2,1fr)}}
@media (max-width:480px){.board{grid-template-columns:1fr}}
.changed{border:2px solid var(--accent);padding:var(--sp-4) var(--sp-5);border-radius:var(--r-card);background:var(--surface)}
.changed h2{font-size:var(--step-1);margin-top:0}
.glance{border-top:4px solid var(--accent);background:var(--surface-2);padding:var(--sp-4) var(--sp-5);border-radius:var(--r-card)}
.glance h2{font-size:var(--step-1);margin-top:0}

/* ---------- 18. Age gate (Highline) ---------- */
dialog.gate{border:0;padding:0;max-width:520px;width:calc(100% - 32px);background:var(--surface);color:var(--ink);border-radius:var(--r-2)}
dialog.gate::backdrop{background:rgba(10,20,14,.82)}
dialog.gate .in{padding:var(--sp-6)}
dialog.gate .row{display:flex;gap:var(--sp-3);flex-wrap:wrap;margin-top:var(--sp-4)}

/* ---------- 19. Component specimen page ---------- */
.spec{border-top:1px solid var(--rule);padding:var(--sp-6) 0}
.spec h2{font-size:var(--step-3)}
.states{display:flex;flex-wrap:wrap;gap:var(--sp-4);align-items:flex-start}
.states figure{margin:0;display:grid;gap:6px;justify-items:start}
.states figcaption{font:500 .78rem var(--f-mono);color:var(--ink-2)}
.swatches{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:var(--sp-3)}
.sw{border:1px solid var(--rule);border-radius:var(--r-1);overflow:hidden;font:500 .78rem/1.3 var(--f-mono)}
.sw i{display:block;height:56px}
.sw span{display:block;padding:6px 8px}

/* PROOF fixes Oct 24, 2026 */
.band .fine,.band .fine a{color:var(--brand-ink);opacity:1}
.byline a,.list a,.meta a{display:inline-block;min-height:24px;padding-block:2px}
.list li>a{display:block;min-height:24px}
.signup .fine,.signup .fine a{color:inherit}
@media (prefers-color-scheme:dark){html:not([data-theme="light"]) .btn.is-error,html:not([data-theme="light"]) .btn.is-success{--bi:#111}}
.alerts a{display:inline-flex;align-items:center;min-height:var(--target)}
