/* ============================================================
   kaamos-research.css — shared research-page design system
   Extracted verbatim from aisc/index.html <style> block (T1,
   2026-06-12). Cascade order is load-bearing: base styles →
   Modern Fintech overlay → Space Grotesk display pass →
   refinement pass → v17 additions. Do not reorder.
   Blocks marked AISC-SPECIFIC are candidates for relocation
   once the equity template stabilizes. Used by: aisc, equity
   reports (research/<slug>/).
   ============================================================ */
:root{
  /* dark chrome (masthead / topnav / panel + exhibit headers) */
  --chrome:#0e0e12;--chrome-2:#16161c;--chrome-ink:#ececf1;--chrome-ink-2:#9c9ca6;--chrome-line:#24242c;
  /* light paper */
  --paper:#f6f7f9;--surface:#ffffff;--surface-2:#eef1f5;
  --ink:#1a1f2b;--ink-2:#5b6577;--ink-3:#8a94a6;
  --rule:#dfe3ea;--rule-2:#c8cfda;
  /* accent + semantics tuned for light paper */
  --tiffany:#0ABAB5;--tiffany-ink:#067f7b;--tiffany-bg:#e6f7f6;
  --up:#0a8f5b;--down:#c0392b;--amber:#b9770a;
  /* aliases used by legacy selectors */
  --ink1:var(--ink);--muted:var(--ink-2);--line:var(--rule);--bg:var(--paper);--card:var(--surface);
  --accent:var(--tiffany-ink);--green:var(--up);--red:var(--down);--hi:var(--up);
  --font-sans:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  --font-mono:'JetBrains Mono',ui-monospace,Menlo,monospace;}
*{box-sizing:border-box}
html,body{margin:0;font:15px/1.62 var(--font-sans);color:var(--ink);background:var(--paper);
  font-feature-settings:'cv11','ss01';-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
.wrap{max-width:1320px;margin:0 auto;padding:0 28px}
a{color:var(--tiffany-ink);text-decoration:none}a:hover{text-decoration:underline}
code{background:var(--surface-2);color:var(--ink);padding:1px 5px;border-radius:2px;font-size:.86em;font-family:var(--font-mono)}
b{color:#11161f}
/* ===== dark chrome: masthead ===== */
.hero{background:var(--chrome);color:var(--chrome-ink);border-bottom:2px solid var(--tiffany);padding:0}
.hero .wrap{display:flex;justify-content:space-between;align-items:flex-start;gap:32px;padding-top:24px;padding-bottom:20px}
/* Cap the headline column so the thesis subtitle never spans the full
   masthead width — leaves visual breathing room on the right and lets
   the wordmark live there. */
.hero .mhleft{min-width:0;max-width:880px;flex:1 1 auto}
.hero .subtitle{max-width:760px}
/* Wordmark — clickable, lives top-right of the hero, returns to /.
   Matches the canonical Kaamos brand wordmark: Inter (sans), 700,
   tracking 0.18em — identical to app/src/components/Logo.tsx
   (text-sm font-bold tracking-wide18). The mono treatment we had
   here before was wrong — Kaamos's brand mark is sans, not mono. */
.brand-wordmark{display:inline-flex;align-items:center;gap:10px;flex:0 0 auto;color:var(--chrome-ink);text-decoration:none;font-family:var(--font-sans);font-weight:700;font-size:14px;letter-spacing:.18em;padding-top:4px;opacity:.95;transition:opacity .15s}
.brand-wordmark:hover{opacity:1;text-decoration:none}
.brand-wordmark .kms-logo-svg{flex:0 0 auto}
.brand-wordmark .bw-name{font-weight:700}
@media(max-width:680px){.brand-wordmark .bw-name{display:none}}
.hero .kicker{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.16em;font-size:11px;color:var(--tiffany)}
.hero h1{margin:6px 0 3px;font-size:30px;letter-spacing:-.4px;color:var(--chrome-ink);font-weight:700}
.hero .subtitle{color:var(--chrome-ink-2);font-size:14px}
.hero .snap{margin-top:9px;font-size:12px;color:var(--chrome-ink-2)}
.hero code{background:#22222a;color:#dfe7ff}
.ratingbox{flex:0 0 auto;border:1px solid var(--chrome-line);background:var(--chrome-2);min-width:240px;border-radius:2px;align-self:stretch}
.ratingbox .rb-h{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--chrome-ink-2);padding:7px 12px;border-bottom:1px solid var(--chrome-line)}
.ratingbox .rb-row{display:flex;justify-content:space-between;gap:14px;padding:5px 12px;font-size:12px}
.ratingbox .rb-row .k{color:var(--chrome-ink-2)}.ratingbox .rb-row .v{font-family:var(--font-mono);color:var(--chrome-ink)}
.ratingbox .rb-call{padding:8px 12px;border-top:1px solid var(--chrome-line);font-size:12px;color:var(--chrome-ink)}
.ratingbox .rb-call b{color:var(--tiffany)}
/* ===== dark chrome: sticky topnav ===== */
.topnav{position:sticky;top:0;z-index:50;background:rgba(14,14,18,.97);backdrop-filter:blur(8px);border-bottom:1px solid var(--chrome-line)}
.topnav .wrap{display:flex;flex-wrap:wrap;gap:3px 13px;align-items:center;padding-top:9px;padding-bottom:9px;font-size:12.5px}
.topnav a{padding:3px 7px;border-radius:2px;color:var(--chrome-ink-2);font-weight:600}
.topnav a:hover{background:#22222b;color:var(--chrome-ink);text-decoration:none}
.topnav a.active{background:var(--tiffany);color:#07070a}
.topnav .sep{color:#5b5b66;font-size:11px;text-transform:uppercase;letter-spacing:.08em;margin-left:6px}
.langsw{margin-left:auto;display:inline-flex;align-items:center;gap:0;border:1px solid var(--chrome-line);border-radius:3px;overflow:hidden}
.langsw a{padding:3px 9px;color:var(--chrome-ink-2);font-weight:600;font-size:11.5px;border-radius:0;border-right:1px solid var(--chrome-line)}
.langsw a:last-child{border-right:none}
.langsw a:hover{background:#22222b;color:var(--chrome-ink);text-decoration:none}
.langsw a.active{background:var(--tiffany);color:#07070a}
.readprog{position:fixed;top:0;left:0;height:2px;background:var(--tiffany);width:0;z-index:60}
/* ===== layout: rail + content grid ===== */
main.wrap{display:grid;grid-template-columns:208px minmax(0,1fr);gap:36px;padding-top:10px;padding-bottom:60px;align-items:start}
/* Sticky sidebar — the rail can grow taller than the viewport (8 nav
   links + view chip + 5-row key figures), which used to clip the bottom
   (DCF row). Cap to viewport-minus-topnav and let the rail scroll
   independently. The scrollbar is hidden on hover-capable devices to
   keep the visual quiet; mobile gets the standard scrollbar. */
.tocrail{position:sticky;top:54px;align-self:start;font-size:12.5px;max-height:calc(100vh - 64px);overflow-y:auto;overflow-x:hidden;padding-right:6px;scrollbar-width:thin}
.tocrail::-webkit-scrollbar{width:4px}
.tocrail::-webkit-scrollbar-thumb{background:var(--rule-2);border-radius:4px}
.tocrail::-webkit-scrollbar-thumb:hover{background:var(--ink-3)}
/* Rail brand link — sits above CONTENTS in the sidebar; mirrors the
   masthead wordmark. Inter sans 700, tracking 0.18em (canonical brand). */
.tocrail .rail-brand{display:flex;align-items:center;gap:9px;font-family:var(--font-sans);font-weight:700;font-size:12.5px;letter-spacing:.18em;color:var(--ink);padding:0 0 12px;margin-bottom:6px;border-bottom:1px solid var(--rule);text-decoration:none}
.tocrail .rail-brand:hover{color:var(--tiffany-ink);text-decoration:none}
.tocrail .rail-brand .kms-logo-svg{flex:0 0 auto}
.tocrail .t-h{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);margin-bottom:8px;padding-bottom:6px;border-bottom:1px solid var(--rule)}
.tocrail a{display:flex;gap:8px;padding:3px 0;color:var(--ink-2)}
.tocrail a:hover{color:var(--ink)}
.tocrail a.active{color:var(--tiffany-ink);font-weight:600}
.tocrail a .tn{font-family:var(--font-mono);color:var(--ink-3);min-width:24px}
.tocrail a.active .tn{color:var(--tiffany-ink)}
.doc{min-width:0;max-width:900px}
@media(max-width:1040px){main.wrap{grid-template-columns:1fr}.tocrail{display:none}}
/* ===== document typography ===== */
main{padding:0}
h2{font-size:23px;margin:38px 0 10px;padding-top:10px;letter-spacing:-.3px;color:var(--ink);border-top:2px solid var(--ink)}
h3{font-size:17px;margin:22px 0 8px;color:var(--ink)}
h4{font-size:13px;margin:0 0 7px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-2)}
section{scroll-margin-top:56px}
.layer{margin-top:30px}
.lead{font-size:16.5px;line-height:1.55;color:#2b3240}
.who,.how{background:var(--surface);border:1px solid var(--rule);border-left:3px solid var(--tiffany);padding:9px 13px;border-radius:0 2px 2px 0;font-size:14px;color:#2b3240}
.note{color:var(--ink-2);font-size:13px}
.whatsnew{background:var(--surface);border:1px solid var(--rule);border-left:3px solid var(--up);border-radius:2px;padding:14px 18px;margin:16px 0}
.whatsnew h3{margin:0 0 6px;color:var(--up)}
.whatsnew ul{margin:0;padding-left:18px}.whatsnew li{margin:3px 0;font-size:13.5px;color:#2b3240}
/* three-up */
.three{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:16px 0}
.three .cell{border:1px solid var(--rule);border-radius:2px;padding:12px 14px;background:var(--surface)}
.three .bn{border-left:3px solid var(--down)}.three .ms{border-left:3px solid var(--tiffany)}.three .va{border-left:3px solid var(--up)}
.three ul{margin:0;padding-left:17px}.three li{margin:5px 0;font-size:13px;color:#2b3240}
.sevtag{font-size:10px;padding:2px 8px;border-radius:2px;color:#fff;letter-spacing:.04em;font-weight:600;font-family:var(--font-mono)}
.sev-extreme{background:var(--down)}.sev-high{background:#e06a1a}.sev-med{background:var(--amber)}.sev-low{background:var(--up)}
.subseg ul{columns:2;column-gap:26px;padding-left:18px;margin:6px 0}.subseg li{margin:3px 0;font-size:13px;color:#2b3240}
/* tables */
.tablewrap{overflow-x:auto;border:1px solid var(--rule);border-radius:2px;margin:14px 0;background:var(--surface)}
table.comp{border-collapse:collapse;width:100%;font-size:12.5px;min-width:1080px}
table.comp th,table.comp td{padding:7px 10px;border-bottom:1px solid var(--rule);text-align:left;vertical-align:top}
table.comp thead th{position:sticky;top:0;background:var(--surface-2);z-index:3;font-size:10px;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-2);border-bottom:2px solid var(--rule-2);font-family:var(--font-mono)}
table.comp td.tk{font-weight:700;font-family:var(--font-mono);font-size:12px;white-space:nowrap;position:sticky;left:0;background:var(--surface);z-index:2;color:var(--ink)}
table.comp thead th:first-child{position:sticky;left:0;z-index:4}
td.co{min-width:130px;font-weight:600;color:var(--ink)}
td.seg{min-width:300px;max-width:380px;color:var(--ink-2);font-size:12px;line-height:1.45}
td.bk{min-width:160px;max-width:220px;font-size:12px;color:var(--ink-2)}
td.num{white-space:nowrap;text-align:right;font-variant-numeric:tabular-nums;font-family:var(--font-mono);color:var(--ink)}
td .sub{display:block;font-size:10.5px;color:var(--ink-3);font-weight:400}
.num.hi{color:var(--up);font-weight:600}.num.mid{color:#2c7a4d}.num.lo{color:var(--ink-3)}
.num.neg{color:var(--down)}
tr.subhdr td{background:var(--surface-2);font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#34406b;position:sticky;left:0}
.badge{font-size:9.5px;padding:1px 6px;border-radius:2px;vertical-align:middle}
.badge.pure{background:var(--tiffany-bg);color:var(--tiffany-ink);border:1px solid #b7e3e1}
td.priv{color:var(--ink-3);font-style:italic}
/* callouts / deals / glossary */
.callout{background:var(--surface);border:1px solid var(--rule);border-left:3px solid var(--tiffany);border-radius:2px;padding:14px 18px;margin:16px 0}
.callout.warn{border-left-color:var(--down)}
.callout h4{color:var(--tiffany-ink)}.callout.warn h4{color:var(--down)}
.deals{margin:14px 0}.deals p{font-size:14px;margin:8px 0;padding-left:13px;border-left:2px solid var(--rule);color:#2b3240}
.chipcards{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:12px 0}
.chipcard{background:var(--surface);border:1px solid var(--rule);border-radius:2px;padding:13px}
.chipcard h5{margin:0 0 2px;font-size:15px;color:var(--ink)}.chipcard .tagline{font-size:11.5px;color:var(--ink-2);margin-bottom:8px;text-transform:uppercase;letter-spacing:.05em}
.chipcard p{font-size:12.5px;line-height:1.5;color:var(--ink-2)}.chipcard .val{color:var(--up)}
.uses ul{margin:6px 0;padding-left:18px}.uses li{font-size:13.5px;margin:3px 0;color:#2b3240}
.gloss{margin:12px 0;background:var(--surface);border:1px solid var(--rule);border-radius:2px;padding:6px 14px}
.gloss summary{cursor:pointer;font-weight:600;color:var(--tiffany-ink);font-size:13px;padding:5px 0}
.gl{font-size:13px;padding:5px 0;border-top:1px solid var(--rule);color:var(--ink-2)}
.obs li{margin:7px 0}
table.overview{border-collapse:collapse;width:100%;margin:12px 0;font-size:14px}
table.overview th,table.overview td{padding:7px 11px;border-bottom:1px solid var(--rule);text-align:left;color:var(--ink)}
table.overview th{color:var(--ink-2);font-size:11px;text-transform:uppercase;letter-spacing:.03em}
table.overview .lcode{font-weight:700;font-family:var(--font-mono);color:var(--tiffany-ink)}
table.overview .num,table.overview th.num{text-align:right;font-variant-numeric:tabular-nums;font-family:var(--font-mono)}
.risks{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
.risk{border:1px solid var(--rule);border-left:3px solid var(--down);border-radius:2px;padding:12px 15px;background:var(--surface)}
.risk h4{color:var(--down)}.risk p{font-size:13.5px;margin:0;color:#2b3240}
.stacks{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin:12px 0}
.stack{border:1px solid var(--rule);border-radius:2px;padding:12px 15px;background:var(--surface)}
.stack ul{margin:6px 0;padding-left:17px}.stack li{font-size:13px;margin:5px 0;color:#2b3240}
footer{margin-top:44px;padding-top:18px;border-top:1px solid var(--rule);color:var(--ink-3);font-size:12px}
/* analyst take + stance + keyrisk */
.take{background:var(--surface);border:1px solid var(--rule);border-left:3px solid var(--tiffany);border-radius:0 2px 2px 0;padding:13px 16px;margin:13px 0}
.take h4{color:var(--tiffany-ink);margin-bottom:6px}
.take p{font-size:14px;margin:0;color:#2b3240}
.stance{margin-top:9px;font-size:13px;font-weight:600;color:#1f2733;background:var(--surface-2);border:1px solid var(--rule);border-radius:2px;padding:7px 11px}
.stance .stag{display:inline-block;font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;font-weight:700;color:#fff;background:var(--tiffany-ink);padding:2px 8px;border-radius:2px;margin-right:8px;vertical-align:middle;font-family:var(--font-mono)}
.keyrisk{background:var(--surface);border:1px solid var(--rule);border-left:3px solid var(--down);border-radius:0 2px 2px 0;padding:12px 16px;margin:12px 0}
.keyrisk h4{color:var(--down);margin-bottom:6px}
.keyrisk p{font-size:13.5px;margin:0;color:var(--ink-2)}
.capexslice{background:var(--surface-2);border:1px dashed var(--rule-2);border-radius:2px;padding:8px 10px;margin:0 0 9px;font-size:12.5px;color:#2b3240}
.capexslice .cstag{display:block;font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;font-weight:700;color:var(--tiffany-ink);margin-bottom:3px;font-family:var(--font-mono)}
/* citations / refs */
sup.cite{font-size:10px;line-height:0;margin-left:1px}
sup.cite a{color:var(--tiffany-ink);font-weight:700;text-decoration:none}
sup.cite a:hover{text-decoration:underline}
.src{color:var(--ink-2);font-size:12px;font-style:italic;margin:6px 0}
.refs{list-style:none;margin:14px 0;padding:0}
.refs li{display:flex;gap:10px;padding:8px 0;border-top:1px solid var(--rule);font-size:13px;color:var(--ink-2)}
.refs li:target{background:var(--tiffany-bg);border-radius:2px;padding:8px}
.refs .rnum{font-weight:700;color:var(--tiffany-ink);min-width:34px;font-family:var(--font-mono)}
.refs .rbody{color:var(--ink-2)}
/* charts */
.charts{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin:16px 0}
.chart{margin:0;border:1px solid var(--rule);border-radius:2px;padding:0;background:var(--surface);overflow:hidden}
.chart figcaption{font-size:12.5px;font-weight:600;color:var(--chrome-ink);margin:0;background:var(--chrome);padding:8px 14px;border-bottom:1px solid var(--chrome-line)}
.chart figcaption::before{content:"Exhibit \00b7 ";color:var(--tiffany);font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase}
.chartbody{display:flex;gap:14px;align-items:center;flex-wrap:wrap;padding:13px 15px}
.tablewrap>.ex-h{display:flex;justify-content:space-between;gap:10px;background:var(--chrome);color:var(--chrome-ink);padding:8px 14px;border-bottom:1px solid var(--chrome-line);position:sticky;left:0}
.tablewrap>.ex-h .lbl{font-family:var(--font-mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--tiffany);font-weight:600}
.tablewrap>.ex-h .cap{font-size:12.5px;font-weight:600;color:var(--chrome-ink)}
.chartviz{flex:0 0 auto}
.donut{width:150px;height:150px}
.bars{width:100%;max-width:440px;height:auto}
.bars .barlbl{font-size:11px;fill:var(--ink-2)}
.bars .barval{font-size:11px;fill:var(--ink);font-variant-numeric:tabular-nums}
.stackcol{width:100%;max-width:460px;height:auto}
.stackcol .coltot{font-size:10.5px;fill:var(--ink);font-weight:700}
.stackcol .collbl{font-size:11px;fill:var(--ink-2)}
figure.chart [data-k]{cursor:pointer}
figure.chart svg [data-k]{transition:opacity .12s ease}
figure.chart.dim svg [data-k]{opacity:.30}
figure.chart.dim svg [data-k].hi{opacity:1}
figure.chart.dim svg rect[data-k].hi{stroke:var(--ink);stroke-width:1.5}
figure.chart .legend tr[data-k]{transition:background .12s}
figure.chart .legend tr[data-k].hi{background:var(--surface-2)}
/* Tooltip — explicit hex (no CSS-var indirection) + !important on color so
   neither the global `b{color:#11161f}` (line 32) nor any later overlay can
   make the label render dark-on-dark. The visual is white text on near-black
   chrome bg; matches the .kc-caption + .chart figcaption surfaces. */
.charttip{position:fixed;z-index:9999;background:#0f172a !important;color:#ffffff !important;font-size:12px;font-weight:600;padding:6px 10px;border-radius:3px;pointer-events:none;border:1px solid #26314d;max-width:280px;display:none;line-height:1.45}
.charttip *{color:#ffffff !important}
/* Generic <table> rendered from markdown section content. Without these
   rules tables come out as borderless rows that blend into the page. We
   wrap them inside a horizontal-scroll container so a wide DCF or comp
   table doesn't blow out the column on mobile. */
section table:not(.comp){border-collapse:collapse;width:100%;margin:14px 0 18px;font-size:13px;background:var(--surface);box-shadow:var(--shadow);border-radius:6px;overflow:hidden}
section table:not(.comp) th,section table:not(.comp) td{padding:8px 12px;border-bottom:1px solid var(--rule);text-align:left;vertical-align:top;font-variant-numeric:tabular-nums}
section table:not(.comp) thead th{background:var(--surface-2);font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-2);font-family:var(--font-mono);border-bottom:1.5px solid var(--rule-2)}
section table:not(.comp) tbody tr:last-child td{border-bottom:none}
section table:not(.comp) tbody tr:nth-child(even){background:var(--surface-2)}
section table:not(.comp) td:not(:first-child),section table:not(.comp) th:not(:first-child){text-align:right;font-family:var(--font-mono);font-size:12px}
section table:not(.comp) td:first-child{font-weight:600;color:var(--ink)}
/* kc-figure: the wrapper render_page.py's kchart() macro emits around every
   d3 mount point. Carries Figure number + title above the chart so the reader
   never has to scroll back to the prose to know what they're looking at. */
.kc-figure{margin:18px 0 22px;border-radius:6px;overflow:hidden;background:var(--surface);box-shadow:var(--shadow);scroll-margin-top:64px}
.kc-caption{background:var(--chrome);color:var(--chrome-ink);font-size:12.5px;font-weight:600;padding:9px 14px;border-bottom:1px solid var(--chrome-line);display:flex;gap:10px;align-items:baseline}
.kc-caption .kc-num{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--tiffany);font-weight:700;flex:0 0 auto}
.kc-figure>.kchart{margin:0;border-radius:0;padding:6px 8px 4px}
/* Chart grid — pack simple charts 2-up so a section with 7 figures doesn't
   eat 7 screens of vertical space. Wraps the chart slots inside sections
   3 / 4 / 6 (post-Lab) / 8. The Valuation Lab itself stays full-width
   above its grid because the slider controls + heatmap want the room.
   Collapses to a single column under 760px so figcaptions stay readable. */
.chart-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin:14px 0 18px}
.chart-grid>.kc-figure{margin:0}
@media(max-width:760px){.chart-grid{grid-template-columns:1fr;gap:14px}}
/* Float-right inline chart: lone chart floats at ~45% width, the preceding
   paragraph and subsequent paragraphs flow around it on the left. This gives
   the packed-magazine feel of serious financial editorial (FT / Economist /
   Stratechery) — no vertical whitespace gaps when text is shorter than the
   chart. `clear:right` keeps two adjacent floats from glomming together.
   Replaces the grid-based .kc-row that left awkward voids beside short paras. */
.kc-figure-float{
  float:right;width:46%;
  margin:4px 0 14px 22px;
  clear:right;
}
/* Establish a new block-formatting context wherever a major prose container
   lives, so a float can't escape into the next section or into the lab/bands
   block. `flow-root` is the modern clean clearfix — supported everywhere we
   ship. `details` + `.sd-body` cover §7's collapsible sub-sections (where the
   competition c17 float was previously bleeding past the panel boundary). */
section, details, .sd-body{display:flow-root}
/* Structural blocks must NEVER tangle with a float — they always start on a
   fresh line. Headings demarcate prose, tables are atomic, the lab / bands
   blocks are complex grids that break entirely if a float pushes into them. */
h2, h3, h4,
.kc-pair, .chart-grid, .biz-mix-row,
.lab, .bands-block, .bands-snapshot,
.sumfin-wrap, table.sumfin, table,
.risk3, .three{clear:both}
@media(max-width:760px){
  .kc-figure-float{float:none;width:100%;margin:14px 0;clear:none}
}
/* kc-pair: two consecutive [[chart:cNN]] tokens auto-form a 2-up grid so the
   author can place a complementary pair (e.g. GM + EBITDA margin) side by side.
   Grid block clears any outstanding float so the pair always starts on its own row. */
.kc-pair{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin:14px 0 18px;clear:both}
.kc-pair>.kc-figure{margin:0}
@media(max-width:760px){.kc-pair{grid-template-columns:1fr;gap:14px}}
/* kc-label-table: a bold-only "section label" paragraph + its immediately
   following table travel together as one block. Clears any active float so
   the heading isn't ripped from the table when a still-floating chart pushes
   content. */
.kc-label-table{clear:both;margin:12px 0 18px}
.kc-label-table>p{margin:0 0 6px}
.kc-label-table>table{margin-top:0}
/* kc-chart-table-row: a chart + an adjacent kc-label-table (heading+table)
   render as a side-by-side 2-up grid. Used in §6 valuation where a chart
   illustrates a specific method's range table (PEG scatter ↔ implied-values
   table, football field ↔ method-vs-range table, FV-by-scenario ↔ scenario
   probability table). The float modifier is stripped on the figure inside
   so the grid container handles layout. */
.kc-chart-table-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:18px;align-items:start;margin:14px 0 18px;clear:both}
.kc-chart-table-row>.kc-figure{margin:0;float:none;width:auto}
.kc-chart-table-row>.kc-label-table{margin:0}
@media(max-width:760px){.kc-chart-table-row{grid-template-columns:1fr;gap:14px}}
/* Cap floated chart height so a tall SVG doesn't extend below the paragraph
   it's paired with — that's what creates the "empty space to the left of
   the chart" effect when prose is shorter than the chart. ~260px is enough
   for the kit's default chart frames to remain readable. */
.kc-figure-float .kchart{max-height:260px;overflow:hidden}
.kc-figure-float .kchart>svg{max-height:260px;width:100%;height:auto}
/* Biz-mix block in §7 Company — divisional table (left) + c50 share-over-time
   chart (right) share a row so the reader sees the mix-shift narrative and
   the per-division numbers without scrolling between them. */
.biz-mix-row{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:18px;align-items:start;margin:10px 0 18px;clear:both}
.biz-mix-row>.kc-figure{margin:0}
.biz-mix-row .sumfin-wrap{margin:0}
@media(max-width:760px){.biz-mix-row{grid-template-columns:1fr;gap:14px}}
/* Range picker for the dense-history time series (currently c01 only).
   Compact pill row above the SVG; the active range gets a chrome fill.
   Lives inside .kchart so layout / shimmer are unaffected. */
.kc-rangepicker{display:flex;gap:4px;justify-content:flex-end;padding:6px 4px 0;flex-wrap:wrap}
.kc-range{font-family:var(--font-mono);font-size:10.5px;font-weight:700;letter-spacing:.04em;color:var(--ink-2);background:transparent;border:1px solid var(--rule-2);border-radius:4px;padding:3px 8px;cursor:pointer;transition:color .12s,background .12s,border-color .12s}
.kc-range:hover{color:var(--ink);border-color:var(--ink-3)}
.kc-range.on{background:var(--chrome);color:var(--chrome-ink);border-color:var(--chrome)}
.legend{border-collapse:collapse;flex:1 1 240px;font-size:12px}
.legend td{padding:3px 6px;border-bottom:1px solid var(--rule);vertical-align:top;color:var(--ink)}
.legend td.num{text-align:right;font-variant-numeric:tabular-nums;font-weight:600;white-space:nowrap;font-family:var(--font-mono)}
.legend td.cnote{color:var(--ink-2);font-size:11px}
.legend .dot{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:6px;vertical-align:middle}
/* layer head + info cards */
.layerhead{display:grid;grid-template-columns:1.05fr 0.95fr;gap:14px;margin:0;align-items:stretch}
.lhleft{display:flex;flex-direction:column;gap:10px}
.lhright{display:flex;flex-direction:column;gap:10px}
.infocard{border:1px solid var(--rule);border-radius:2px;padding:11px 14px;background:var(--surface)}
.infocard h4{margin:0 0 5px}.infocard p{margin:0;font-size:13px;line-height:1.5;color:#2b3240}
.metricmargin{margin-top:9px;background:var(--surface-2);border:1px solid var(--rule);border-left:3px solid var(--up);border-radius:2px;padding:7px 10px;font-size:12.5px;color:#2b3240}
.metricmargin .mmtag{display:block;font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;font-weight:700;color:var(--up);margin-bottom:2px;font-family:var(--font-mono)}
.metricval{margin-top:7px;background:var(--surface-2);border:1px solid var(--rule);border-left:3px solid var(--tiffany);border-radius:2px;padding:7px 10px;font-size:12.5px;color:#2b3240}
.metricval .mvtag{display:block;font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;font-weight:700;color:var(--tiffany-ink);margin-bottom:2px;font-family:var(--font-mono)}
.lhright .take{margin:0;flex:1}.lhright .keyrisk{margin:0}
/* sub-segment cards */
.subseg h4{margin:0 0 8px}
.sscards{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.sscard{border:1px solid var(--rule);border-radius:2px;padding:10px 12px;background:var(--surface);font-size:12.5px;line-height:1.45}
.sscard .sshead{font-weight:700;color:#27313f;margin-bottom:3px}
.sscard .ssbody{color:var(--ink-2)}
td.ai{min-width:120px;max-width:150px;font-size:12px;font-weight:600;color:var(--ink);white-space:normal}
table.comp th.mfocus{background:var(--tiffany-bg);color:var(--tiffany-ink);border-bottom-color:#9ad7d4}
table.comp td.num.mfocus{background:var(--tiffany-bg);font-weight:700;box-shadow:inset 2px 0 0 var(--tiffany),inset -2px 0 0 var(--tiffany)}
.xtable{margin:16px 0}.xtable h4{margin:0 0 8px}
table.comp.facts{min-width:520px}table.comp.facts td.lbl{font-weight:600;color:#34406b}
/* feature box */
.feature{background:var(--surface);color:var(--ink);border:1px solid var(--rule);border-radius:2px;padding:18px 20px;margin:18px 0}
.feature h4{color:var(--tiffany-ink)}.feature .flead{font-size:14.5px;color:var(--ink-2)}.feature p{font-size:14px;color:#2b3240}.feature b{color:var(--ink)}
.feature .chipcard{background:var(--surface-2);border:1px solid var(--rule);border-radius:2px;padding:13px}
.feature .chipcard h5{margin:0 0 2px;font-size:15px;color:var(--ink)}
.feature .chipcard .tagline{font-size:11.5px;color:var(--ink-2);margin-bottom:8px;text-transform:uppercase;letter-spacing:.05em}
.feature .chipcard p{font-size:12.5px;line-height:1.5;color:var(--ink-2)}.feature .chipcard .val{color:var(--up)}
.feature .replace{background:var(--surface-2);border:1px solid var(--rule);border-radius:2px;padding:11px 14px;margin:12px 0;font-size:13.5px;color:#2b3240}
.feature .uses ul{margin:6px 0;padding-left:18px}.feature .uses li{font-size:13.5px;margin:3px 0;color:var(--ink-2)}
/* ===== research-document components (panel + exhibit) ===== */
.lprofile{border:1px solid var(--rule-2);border-radius:2px;background:var(--surface);margin:14px 0}
.lprofile>.ph{display:flex;justify-content:space-between;align-items:center;background:var(--chrome);color:var(--chrome-ink);padding:8px 15px;font-family:var(--font-mono);font-size:11px;letter-spacing:.07em}
.lprofile>.ph .pn{color:var(--tiffany)}
.lprofile>.ph .pr{color:var(--chrome-ink-2)}
.lprofile>.pb{padding:15px}
.exhibit{background:var(--surface);border:1px solid var(--rule);border-radius:2px;margin:14px 0;overflow:hidden}
.exhibit>.ex-h{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:8px 14px;background:var(--chrome);border-bottom:1px solid var(--chrome-line)}
.exhibit>.ex-h .lbl{font-family:var(--font-mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--tiffany);font-weight:600}
.exhibit>.ex-h .cap{font-size:12.5px;font-weight:600;color:var(--chrome-ink)}
.exhibit>.ex-body{padding:13px}
.exhibit>.ex-body .charts{margin:0}
.exhibit>.ex-body .tablewrap,.exhibit>.ex-body .chart{border:none;margin:0}
.exhibit>.ex-src{padding:6px 14px;border-top:1px solid var(--rule);font-size:10.5px;color:var(--ink-3);font-style:italic}
.subh{font-family:var(--font-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);margin:18px 0 7px}
@media(max-width:900px){.layerhead{grid-template-columns:1fr}.sscards{grid-template-columns:repeat(2,1fr)}}
@media(max-width:820px){.three,.chipcards,.risks,.stacks,.charts,.sscards{grid-template-columns:1fr}.subseg ul{columns:1}
  .hero .wrap{flex-direction:column;align-items:flex-start}.hero h1{font-size:25px}.chartbody{flex-direction:column;align-items:flex-start}}

/* ===== Modern Fintech overlay (light + depth) ===== */
:root{
  --paper:#eef1f6;--surface:#ffffff;--surface-2:#f4f6fa;
  --ink:#0f172a;--ink-2:#5b6678;--ink-3:#94a0b3;
  --rule:#e7ebf2;--rule-2:#dfe4ee;
  --tiffany:#0e9f93;--tiffany-ink:#0b7d73;--tiffany-bg:#e3f6f3;
  --up:#0b9a5b;--down:#dc2b2b;--amber:#d97706;
  --chrome:#0f172a;--chrome-2:#16203a;--chrome-ink:#eef2f8;--chrome-ink-2:#9fb0c7;--chrome-line:#26314d;
  --shadow:0 1px 2px rgba(16,24,40,.06),0 4px 14px rgba(16,24,40,.05);
}
html,body{background:var(--paper)}
.topnav{background:rgba(15,23,42,.97)}
.readprog{background:var(--tiffany)}
/* depth + rounded on card-like containers */
.infocard,.three .cell,.callout,.feature,.chipcard,.risk,.stack,.take,.keyrisk,.sscard,.gloss,.exhibit,.tablewrap,.lprofile,.whatsnew,.who,.how{border-radius:12px;box-shadow:var(--shadow)}
.ratingbox{border-radius:12px;box-shadow:0 12px 34px rgba(2,8,23,.30)}
.exhibit,.lprofile{overflow:hidden}
.tablewrap{overflow-x:auto;overflow-y:hidden}/* horizontal scroll for wide comp tables */
.metricmargin,.metricval,.capexslice,.stance,.chip{border-radius:9px}
.badge,.sevtag,.stance .stag,.badge.pure{border-radius:20px}
/* soften the section rule */
h2{border-top:1px solid var(--rule);padding-top:16px}
.sechead{}
/* bright teal exhibit labels on navy headers */
.exhibit>.ex-h .lbl,.tablewrap>.ex-h .lbl,.lprofile>.ph .pn,.hero .kicker{color:#5fe3d6}
.chart figcaption::before{color:#5fe3d6}
.ratingbox .rb-call b{color:#5fe3d6}
/* active rail item as a soft pill */
.tocrail a.active{background:var(--tiffany-bg);border-radius:8px;padding:2px 8px;margin-left:-8px}
/* tiffany-tinted metric chip backgrounds for a touch of color */
.metricval{background:var(--tiffany-bg)}
.take{border-radius:12px}
/* display typeface: Space Grotesk on headlines/section titles/captions */
:root{--display:'Space Grotesk',var(--font-sans)}
.hero h1,h2,h3,.exhibit>.ex-h .cap,.tablewrap>.ex-h .cap,.chart figcaption,.lprofile>.ph .pn,.sscard .sshead,.chipcard h5{font-family:var(--display);font-weight:700;letter-spacing:-.01em}
.hero h1{font-weight:700}
/* ===== refinement pass: heading scale, accent, depth+rhythm ===== */
/* headings: bigger, more confident, tighter tracking */
.hero h1{font-size:38px;letter-spacing:-.8px;line-height:1.04}
.hero .kicker{font-size:11px;letter-spacing:.22em}
h2{font-size:27px;letter-spacing:-.6px}
.lprofile>.ph .pn,.exhibit>.ex-h .cap,.tablewrap>.ex-h .cap{font-size:13px;letter-spacing:-.01em}
.chart figcaption{font-size:13px}
/* accent: slightly punchier teal + brighter labels on navy */
:root{--tiffany:#0ea5a0;--tiffany-ink:#0a7d78;--tiffany-bg:#e0f5f3}
.exhibit>.ex-h .lbl,.tablewrap>.ex-h .lbl,.lprofile>.ph .pn,.hero .kicker,.chart figcaption::before,.ratingbox .rb-call b{color:#34e3d6}
/* depth: lift cards a touch, more generous radius on big panels */
:root{--shadow:0 1px 2px rgba(16,24,40,.05),0 6px 20px rgba(16,24,40,.07)}
.lprofile,.exhibit,.tablewrap{border-radius:14px}
.lprofile{box-shadow:0 2px 6px rgba(16,24,40,.06),0 14px 36px rgba(16,24,40,.10)}
/* rhythm: more breathing room between major blocks */
.lprofile>.pb{padding:18px}
.three{margin:20px 0;gap:14px}
.subh{margin:24px 0 9px}
.layerhead{gap:16px}
.lhleft,.lhright{gap:12px}
section.layer{margin-top:38px}
/* ===== polish pass: kaamos-black chrome, visible separators, CTA, icons ===== */
/* chrome navy -> kaamos polar-night black */
:root{--chrome:#0e0e12;--chrome-2:#16161c;--chrome-ink:#ececf1;--chrome-ink-2:#9c9ca6;--chrome-line:#26262e}
.topnav{background:rgba(14,14,18,.97)}
.hero{background:var(--chrome)}
/* teal labels on black: kaamos tiffany-bright */
.exhibit>.ex-h .lbl,.tablewrap>.ex-h .lbl,.lprofile>.ph .pn,.hero .kicker,
.chart figcaption::before,.ratingbox .rb-call b,.brand .small{color:#2fd4c8}
/* visible section separation: strong rule + accent tick before each layer/major section */
h2{border-top:none;padding-top:0;position:relative}
section.layer{border-top:2px solid var(--rule-2);padding-top:30px;margin-top:44px}
section.layer::before{content:"";position:absolute;margin-top:-32px;width:46px;height:3px;background:var(--tiffany);border-radius:2px}
#capex,#connect,#dealnetwork,#references{border-top:2px solid var(--rule-2);padding-top:30px;margin-top:40px}
/* per-layer themed icon badge beside the section title */
.layer-ico{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;
  border-radius:11px;background:var(--tiffany-bg);border:1px solid #bfe6e2;color:var(--tiffany-ink);
  flex:0 0 auto;box-shadow:var(--shadow);vertical-align:middle}
.layer-ico svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.6;
  stroke-linecap:round;stroke-linejoin:round}
section.layer h2{display:flex;align-items:center;gap:13px}
.lprofile>.ph{position:relative;z-index:1}
.lprofile>.pb{position:relative;z-index:1}
/* ===== fixed full-page ambient backdrop (scroll-reactive) ===== */
/* one fixed layer behind everything; each layer's themed motif crossfades in
   as that section becomes active (driven by JS adding .on to the matching motif). */
#ambient{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden}
#ambient .amf{position:absolute;inset:0;opacity:0;transition:opacity 1.1s ease;color:var(--tiffany)}
#ambient .amf.on{opacity:1}
#ambient svg{position:absolute;top:50%;left:0;transform:translateY(-50%);
  height:120vh;width:auto;min-width:62vw}
#ambient .stk{stroke:currentColor;fill:none;stroke-width:1.1;stroke-linecap:round;stroke-linejoin:round;opacity:.22}
#ambient .fil{fill:currentColor;opacity:.055}
#ambient .dot{fill:currentColor;opacity:.36}
/* Reveal the backdrop in the page's empty zones: html keeps the paper colour,
   body goes transparent so the fixed #ambient (behind body) shows through wherever
   no surface paints. The reading column + rail paint their own paper, so only the
   gutters/margins/inter-block gaps reveal the motion. */
html{background:var(--paper)}
body{background:transparent;position:relative}
.hero,.topnav{position:relative;z-index:1}
main.wrap{position:relative;z-index:1}
.tocrail{background:var(--paper);border-radius:10px}
.doc{position:relative}
/* soft paper halo behind the reading column so text never sits on raw motif */
.doc::before{content:"";position:absolute;inset:-10px -22px;background:var(--paper);
  opacity:.72;z-index:-1;border-radius:14px}
@media (prefers-reduced-motion:reduce){#ambient .amf{transition:none}}
/* --- motion primitives (slow, GPU-friendly: opacity/transform only) --- */
@keyframes lbDrift{0%{transform:translateX(0)}100%{transform:translateX(-40px)}}
@keyframes lbPulse{0%,100%{opacity:.10}50%{opacity:.28}}
@keyframes lbDash{to{stroke-dashoffset:-220}}
@keyframes lbFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-14px)}}
@keyframes lbSpin{to{transform:rotate(360deg)}}
@keyframes lbFlow{to{stroke-dashoffset:-300}}
.lb-drift{animation:lbDrift 26s linear infinite alternate}
.lb-pulse{animation:lbPulse 5.5s ease-in-out infinite}
.lb-pulse2{animation:lbPulse 7s ease-in-out infinite .8s}
.lb-pulse3{animation:lbPulse 6.2s ease-in-out infinite 1.6s}
.lb-dash{stroke-dasharray:7 13;animation:lbDash 9s linear infinite}
.lb-flow{stroke-dasharray:5 16;animation:lbFlow 6s linear infinite}
.lb-float{animation:lbFloat 9s ease-in-out infinite}
.lb-float2{animation:lbFloat 11s ease-in-out infinite 1.2s}
.lb-spin{transform-box:fill-box;transform-origin:center;animation:lbSpin 60s linear infinite}
@media (prefers-reduced-motion:reduce){
  .lb-drift,.lb-pulse,.lb-pulse2,.lb-pulse3,.lb-dash,.lb-flow,.lb-float,.lb-float2,.lb-spin{animation:none}
}
/* modern/elegant CTA button (replaces the flat tag look) */
.netcta{display:inline-flex;align-items:center;gap:10px;background:var(--chrome);color:#fff;
  font-family:var(--display);font-weight:600;font-size:.92rem;letter-spacing:-.01em;
  padding:.7rem 1.25rem;border-radius:8px;text-decoration:none;border:1px solid #26262e;
  box-shadow:0 1px 2px rgba(16,24,40,.10),0 8px 22px rgba(16,24,40,.16);
  transition:transform .14s ease,box-shadow .14s ease,background .14s ease}
.netcta:hover{transform:translateY(-1px);background:#16161c;text-decoration:none;
  box-shadow:0 2px 6px rgba(16,24,40,.14),0 14px 32px rgba(16,24,40,.22)}
.netcta .nc-ico{display:inline-flex;color:#2fd4c8}
.netcta .nc-arrow{transition:transform .14s ease}
.netcta:hover .nc-arrow{transform:translateX(3px)}
/* ===== v17 additions: deal-stack lead + §2.1 capex Sankey (restyle owns the <style> block, so these must live here to survive) ===== */
.stacklead{font-size:12.5px;line-height:1.5;color:var(--ink-2);margin:2px 0 8px}
:is(#capexsankey,#flowsankey){margin:18px 0}
:is(#capexsankey,#flowsankey) .skwrap{width:100%;overflow-x:auto}
:is(#capexsankey,#flowsankey) svg.sankey{width:100%;min-width:600px;height:auto;display:block}
:is(#capexsankey,#flowsankey) .skhint{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--tiffany-ink);border:1px solid var(--rule-2);border-radius:20px;padding:1px 8px;margin-left:6px;vertical-align:middle}
:is(#capexsankey,#flowsankey) .sflow{opacity:.6;transition:opacity .12s}
:is(#capexsankey,#flowsankey).dim .sflow{opacity:.13}:is(#capexsankey,#flowsankey).dim .sflow.hi{opacity:.92}
:is(#capexsankey,#flowsankey).dim .snode{opacity:.3}:is(#capexsankey,#flowsankey).dim .snode.hi{opacity:1}
:is(#capexsankey,#flowsankey).dim .slabel{opacity:.4}:is(#capexsankey,#flowsankey).dim .slabel.hi{opacity:1}
:is(#capexsankey,#flowsankey) .ssrc{fill:var(--chrome)}
:is(#capexsankey,#flowsankey) .sk-srctop{font-size:12px;fill:var(--ink-2)}
:is(#capexsankey,#flowsankey) .sk-srcbig{font-size:18px;font-weight:700;fill:var(--ink);font-family:var(--display,inherit)}
:is(#capexsankey,#flowsankey) .sk-cat{font-size:13px;font-weight:600;fill:var(--ink)}
:is(#capexsankey,#flowsankey) .sk-badge{font-size:11px;font-weight:700;font-family:var(--font-mono,monospace)}
:is(#capexsankey,#flowsankey) .sk-sub{font-size:11.5px;fill:var(--ink-2)}
#flowsankey svg.sankey{min-width:760px}
:is(#capexsankey,#flowsankey) .sflow.casc{opacity:.78}
/* unify Analyst's Take + Key risk body text with the left-column (.infocard) size */
.take p,.take li,.keyrisk p,.keyrisk li{font-size:13px;line-height:1.5}
/* per-sub-sector comp-table header: sub-sector name + the margin/multiple to watch */
.tablewrap>.ex-h{flex-wrap:wrap;gap:3px 14px;align-items:baseline}
.tablewrap>.ex-h .cap.subnote{font-family:var(--font-sans);font-weight:500;font-size:11.5px;
  letter-spacing:0;text-transform:none;color:var(--chrome-ink-2);text-align:right;flex:1 1 320px;line-height:1.45}
.tablewrap>.ex-h .cap.subnote b{color:var(--chrome-ink)}
/* ===== §4 forward growth-vs-valuation scatter ===== */
.scatterfig{max-width:none}
.scatterfig .chartbody{display:block}
.scatterfig .chartviz{width:100%;overflow-x:auto}
svg.scatter{width:100%;height:auto;display:block;font-family:var(--font-sans,inherit)}
svg.scatter .scbg{fill:var(--surface)}
svg.scatter .scgrid{stroke:var(--rule);stroke-width:1}
svg.scatter .sctick{font-size:11px;fill:var(--ink-3)}
svg.scatter .scaxis{font-size:12.5px;font-weight:600;fill:var(--ink-2)}
svg.scatter .sclbl{font-size:10.5px;font-weight:600;fill:var(--ink);paint-order:stroke;stroke:var(--surface);stroke-width:2.6px;stroke-linejoin:round}
svg.scatter .sclead{stroke:var(--ink-3);stroke-width:.8;opacity:.55}
svg.scatter .sclegh{font-size:12px;font-weight:700;fill:var(--ink)}
svg.scatter .scleg{font-size:11px;fill:var(--ink-2)}
svg.scatter .scfoot{font-size:10px;fill:var(--ink-3)}
svg.scatter circle{transition:fill-opacity .12s,stroke-width .12s;cursor:default}
figure.chart.dim svg.scatter circle[data-k]{fill-opacity:.07;stroke-opacity:.25}
figure.chart.dim svg.scatter circle[data-k].hi{fill-opacity:.4;stroke-opacity:1;stroke-width:2.4}
/* legend-click layer filter */
svg.scatter .scleghint{font-size:9px;fill:var(--ink-3)}
svg.scatter .sclegitem{cursor:pointer}
svg.scatter .sclegitem.active .scleg{font-weight:700;fill:var(--ink)}
svg.scatter.filtered circle[data-group]{fill-opacity:.05;stroke-opacity:.15}
svg.scatter.filtered circle[data-group].ghi{fill-opacity:.42;stroke-opacity:1;stroke-width:2.4}
svg.scatter.filtered .sclbl{display:none}
svg.scatter .gl-lbl{display:none;font-size:10px;font-weight:600;fill:var(--ink);paint-order:stroke;stroke:var(--surface);stroke-width:2.6px;stroke-linejoin:round}
svg.scatter .gl-lbl.show{display:block}
/* per-layer growth-vs-valuation block + valuation read */
.layerval{margin:14px 0 6px}
.layerval .scatterfig{max-width:760px}
.valread{background:var(--surface);border:1px solid var(--rule);border-left:4px solid var(--tiffany);
  border-radius:0 12px 12px 0;padding:13px 17px;margin:12px 0;box-shadow:var(--shadow)}
.valread h4{margin:0 0 6px;font-family:var(--display);font-size:15px;color:var(--ink);display:flex;align-items:center;gap:9px}
.valread .vrtag{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--tiffany-ink);
  background:var(--tiffany-bg);border-radius:20px;padding:2px 9px}
.valread p{font-size:13px;line-height:1.55;margin:0;color:var(--ink-2)}
.valread p b{color:var(--ink)}
/* ===== Kaamos branding overlay ===== */
.kms-hero{display:inline-flex;align-items:center;gap:9px;color:var(--chrome-ink);font-weight:700;letter-spacing:.18em;font-size:13px;align-self:flex-start;padding-top:4px;transition:opacity .15s}
.kms-hero:hover{opacity:.75;text-decoration:none;color:var(--chrome-ink)}
.kms-hero svg{flex:0 0 auto}
.tocrail .kms-toc{display:flex;align-items:center;gap:8px;padding:6px 0;margin-bottom:6px;border-bottom:1px solid var(--rule);color:var(--ink-2);font-family:var(--font-mono);font-size:11px;letter-spacing:.10em;text-transform:uppercase;font-weight:600}
.tocrail .kms-toc:hover{color:var(--tiffany-ink);text-decoration:none}
.tocrail .kms-toc svg{flex:0 0 auto}
/* Footer — full-width band, inner row constrained to .wrap so the brand
   and meta line up with the rest of the page content. The flex row pushes
   brand left + meta right; min-width:0 + a gap of 24px prevents the two
   from running into each other (overlap was happening at intermediate
   widths where neither had wrapped yet but both were near full-text). */
.kms-footer{margin-top:36px;border-top:1px solid var(--rule);padding:18px 0 14px;background:var(--surface);font-size:12px;color:var(--ink-3)}
.kms-footer .kms-footer-row{display:flex;justify-content:space-between;align-items:center;gap:24px;flex-wrap:wrap;min-width:0}
.kms-footer .kms-brand{display:inline-flex;align-items:center;gap:9px;flex:0 0 auto;color:var(--ink-2);font-family:var(--font-sans);font-weight:700;letter-spacing:.18em;font-size:13px;text-decoration:none}
.kms-footer .kms-brand:hover{color:var(--tiffany-ink);text-decoration:none}
.kms-footer .kms-brand .kms-logo-svg{flex:0 0 auto}
.kms-footer .kms-meta{flex:0 1 auto;color:var(--ink-3);font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;white-space:nowrap}
@media(max-width:520px){.kms-footer .kms-footer-row{flex-direction:column;align-items:flex-start;gap:8px}}

/* ============================================================
   EQUITY-REPORT COMPONENTS (added 2026-06-14 for T4)
   These extend the shared sheet with the patterns specific to
   equity research reports under /research/<slug>/. Locked by
   /plan-design-review (variant-D-remix). Page-local overrides
   may still tweak --kc-accent for per-stock theming.
   ============================================================ */

/* per-stock accent: default to equity amber; pages can override via :root or body */
body.equity-report{--kc-accent:#c9883a}

/* Semantic data-view colors — drives the masthead badge, sidebar chip, and
   mobile strip accent. Positive = green (above current price → upside);
   Neutral = amber; Cautious = red. Same accent slot, neutral vocabulary. */
[data-view="positive"]{--rating-color:#0b9a5b}
[data-view="neutral"] {--rating-color:#d97706}
[data-view="cautious"]{--rating-color:#dc2b2b}
/* Two-row badge in the masthead h1: the colored VIEW chip carries the
   stance; a separator and a small "Scenario value $820" label sit next to
   it. The label uses chrome-ink so it lives against the dark masthead. */
.view-badge{display:inline-flex;align-items:center;gap:7px;vertical-align:middle;margin-left:12px;font-family:var(--font-mono);font-size:11px;letter-spacing:.04em}
.view-badge .vb-view{display:inline-block;font-weight:700;padding:2px 9px;border-radius:3px;color:#07070a;background:var(--rating-color)}
.view-badge .vb-sep{display:inline-block;width:1px;height:12px;background:var(--chrome-line)}
.view-badge .vb-label{color:var(--chrome-ink-2);font-weight:600;text-transform:uppercase;letter-spacing:.08em;font-size:10px}
.view-badge .vb-val{color:var(--chrome-ink);font-weight:700;font-size:12px}
@media(max-width:680px){.view-badge{display:inline-flex;margin-left:0;margin-top:6px}}

/* left rail components */
.rail-rating{border:1px solid var(--rule-2);border-radius:10px;background:var(--surface);padding:10px 12px;margin-top:4px;box-shadow:var(--shadow)}
.rail-rating .rr-lbl{font-family:var(--font-mono);font-size:11px;color:var(--rating-color,var(--ink-2));font-weight:700;letter-spacing:.06em}
.rail-rating .rr-pt-lbl{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);margin-top:6px}
.rail-rating .rr-pt{font-family:var(--font-mono);font-size:22px;font-weight:700;color:var(--ink);line-height:1.05;margin-top:1px}
.rail-rating .rr-imp{font-family:var(--font-mono);font-size:11px;color:var(--down);margin-top:3px}
.rail-rating .rr-imp.up{color:var(--up)}

/* dark stat box — moves B-variant stat strip into the rail (the user's remix) */
.rail-stats{margin-top:12px;background:var(--chrome);border-radius:10px;padding:11px 12px 9px;box-shadow:var(--shadow);color:#eef2f8}
.rail-stats .rs-h{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:#34e3d6;font-weight:600;padding-bottom:6px;border-bottom:1px solid var(--chrome-line);margin-bottom:5px}
.rail-stats .rs-row{padding:4px 0;border-bottom:1px solid var(--chrome-line);display:flex;justify-content:space-between;align-items:flex-start;gap:8px}
.rail-stats .rs-row:last-child{border-bottom:none}
.rail-stats .rs-l{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:#9fb0c7;padding-top:2px;flex:0 0 auto;max-width:54%}
.rail-stats .rs-vbox{text-align:right;min-width:0}
.rail-stats .rs-v{font-family:var(--font-mono);font-size:14px;font-weight:700;color:#eef2f8;line-height:1.15}
/* Sub-line YoY delta below the headline figure. Red by default (FY26E in
   memory could conceivably be down YoY), green for the .up modifier set
   when the YoY value is non-negative. */
.rail-stats .rs-d{font-family:var(--font-mono);font-size:9.5px;font-weight:600;letter-spacing:.04em;color:#fca5a5;line-height:1.15;margin-top:1px}
.rail-stats .rs-d.up{color:#5fe3d6}

/* mobile sticky rating strip (when rail hides) */
.mobile-rating{display:none;position:sticky;top:36px;z-index:40;background:var(--chrome);color:#eef2f8;padding:6px 16px;font-family:var(--font-mono);font-size:11.5px;letter-spacing:.04em;border-bottom:1px solid var(--chrome-line);justify-content:space-between;align-items:center;gap:14px}
.mobile-rating .mr-rating{font-weight:700;color:var(--rating-color,#d97706)}
.mobile-rating .mr-pt{font-weight:700}
.mobile-rating .mr-delta{color:var(--down)}
.mobile-rating .mr-delta.up{color:var(--up)}
@media(max-width:1040px){.mobile-rating{display:flex}}

/* highlights — bullet-style list with ■ accent (matches mockup) */
.kms-highlights p{margin:9px 0;font-size:13.5px;color:#2b3240;line-height:1.55}
.kms-highlights p .hl-mark{color:var(--kc-accent);font-weight:700;margin-right:6px}
.kms-highlights p b{color:var(--ink)}

/* summary financials — production version of mockup .sumfin (now in shared sheet) */
.sumfin-wrap{margin:14px 0;overflow-x:auto}
table.sumfin{border-collapse:collapse;width:100%;min-width:560px;font-size:12.5px;margin:0}
table.sumfin th,table.sumfin td{padding:6px 10px;border-bottom:1px solid var(--rule);text-align:right;font-variant-numeric:tabular-nums}
table.sumfin td:first-child,table.sumfin th:first-child{text-align:left;font-weight:600;color:var(--ink);position:sticky;left:0;background:var(--surface);z-index:2}
table.sumfin thead th{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;color:var(--ink-2);border-bottom:2px solid var(--rule-2)}
table.sumfin thead th.est{background:var(--surface-2)}
table.sumfin thead th.est::after{content:" E";color:var(--ink-3);font-weight:500}
table.sumfin tbody td{font-family:var(--font-mono);color:var(--ink)}
table.sumfin tbody td.est{background:rgba(0,0,0,0.012)}

/* three-risk callout strip */
.risk3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:14px 0}
.risk3 .r{border:1px solid var(--rule);border-left:3px solid var(--down);border-radius:10px;background:var(--surface);padding:10px 13px;box-shadow:var(--shadow)}
.risk3 .r h5{margin:0 0 4px;font-size:12.5px;color:var(--down)}
.risk3 .r p{margin:0;font-size:12px;color:var(--ink-2);line-height:1.45}
@media(max-width:820px){.risk3{grid-template-columns:1fr}}

/* valuation lab */
.lab{border:1px solid var(--rule-2);border-radius:12px;background:var(--surface);overflow:hidden;box-shadow:var(--shadow);margin:18px 0}
.lab .lab-h{display:flex;justify-content:space-between;align-items:baseline;background:var(--chrome);padding:10px 16px;gap:14px;flex-wrap:wrap}
.lab .lab-h .lbl{font-family:var(--font-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:#34e3d6;font-weight:600}
.lab .lab-h .cap{font-size:13px;font-weight:600;color:var(--chrome-ink);font-family:var(--display)}
.lab-body{padding:16px}
.lab-grid{display:grid;grid-template-columns:300px 1fr;gap:20px;align-items:start}
@media(max-width:820px){.lab-grid{grid-template-columns:1fr}}
.lab .ctl{margin:14px 0}
.lab .ctl label{display:flex;justify-content:space-between;font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-2);margin-bottom:6px}
.lab .ctl label .val{color:var(--kc-accent);font-weight:700;font-size:13px}
.lab .ctl input[type=range]{width:100%;accent-color:var(--kc-accent);height:26px}
.lab .scen{display:flex;gap:6px;margin:14px 0}
.lab .scen button{flex:1;padding:7px 0;border:1px solid var(--rule-2);background:var(--surface-2);border-radius:8px;font-family:var(--font-mono);font-size:11.5px;font-weight:600;color:var(--ink-2);cursor:pointer;transition:background var(--d-fast,.12s) ease,color var(--d-fast,.12s) ease}
.lab .scen button.on{background:var(--chrome);color:#fff;border-color:var(--chrome)}
.lab .readout{text-align:center;padding:12px;background:var(--surface-2);border-radius:10px;margin:12px 0}
.lab .readout .ro-l{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3)}
.lab .readout .ro-v{font-family:var(--font-mono);font-size:34px;font-weight:700;color:var(--ink);letter-spacing:-1px}
.lab .readout .ro-d{font-size:11.5px;color:var(--down);font-family:var(--font-mono)}
.lab .readout .ro-d.up{color:var(--up)}
/* Reset button — outline style so it doesn't compete with the colored
   scenario chips above it. Active state pulses on click for tactile
   feedback that "something happened" since the visual change is
   subtle when defaults were close to where you were. */
.lab-actions{margin-top:10px}
.lab-reset{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:11.5px;font-weight:600;letter-spacing:.04em;color:var(--ink-2);background:transparent;border:1px solid var(--rule-2);border-radius:8px;padding:5px 11px;cursor:pointer;transition:color .12s,border-color .12s,background .12s}
.lab-reset:hover{color:var(--ink);border-color:var(--ink-3);background:var(--surface-2)}
.lab-reset:active{background:var(--tiffany-bg);color:var(--tiffany-ink);border-color:var(--tiffany)}
.lab-note{font-size:11px;color:var(--ink-3);font-style:italic;margin-top:8px}
/* heatmap-slider crosshair (T5b — Lab JS adds these classes on slider
   change). Row + col rects get a dashed tiffany outline; the cell at
   the intersection gets a solid thicker outline + drop-shadow so the
   reader's eye snaps to it. Short transitions keep the drag feel live. */
.lab svg.kc rect[data-row],.lab svg.kc rect[data-col]{transition:stroke .14s ease,stroke-width .14s ease}
.lab svg.kc rect.hl-row,.lab svg.kc rect.hl-col{stroke:var(--tiffany);stroke-width:2.5;stroke-dasharray:3,2}
.lab svg.kc rect.hl-cell{stroke:var(--tiffany);stroke-width:3.5;stroke-dasharray:none;filter:drop-shadow(0 0 4px rgba(10,186,181,.55))}
/* Lab JS-error fallback (per E1/E3 contract): replaces controls column */
.lab-fallback .callout.warn{margin:0;border-left-color:var(--down);background:var(--surface)}
.lab-fallback .lab-grid{display:block}
.lab-fallback .lab-body img{max-width:100%;height:auto;display:block;margin:8px 0}

/* chart container loading shimmer (zero JS) */
.kchart{min-height:200px;position:relative;background:linear-gradient(90deg,var(--surface) 0,var(--surface-2) 50%,var(--surface) 100%);background-size:200% 100%;animation:kc-shimmer 1.4s ease-in-out infinite;border-radius:6px}
.kchart:has(svg.kc),.kchart:has(img){background:none;animation:none}
@keyframes kc-shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}

/* section-details: collapsible h2-weight section (distinct from .gloss) */
details.section-details{margin:18px 0;border-top:2px solid var(--ink)}
details.section-details>summary{cursor:pointer;list-style:none;padding:14px 0 10px;display:flex;align-items:baseline;gap:10px;font-family:var(--display);font-size:21px;font-weight:700;letter-spacing:-.3px;color:var(--ink)}
details.section-details>summary::-webkit-details-marker{display:none}
details.section-details>summary::before{content:"▸";color:var(--ink-3);font-size:14px;transition:transform var(--d-fast,.12s) ease;display:inline-block;width:14px}
details.section-details[open]>summary::before{transform:rotate(90deg)}
details.section-details>summary .sd-teaser{margin-left:auto;font-family:var(--font-sans);font-size:13px;font-weight:400;color:var(--ink-2);max-width:50%;text-align:right}
details.section-details>.sd-body{padding-top:6px}

/* compliance disclaimer block — sits at end of doc */
.compliance{margin-top:36px;border:1px solid var(--rule);border-left:3px solid var(--ink-2);border-radius:0 2px 2px 0;padding:14px 18px;background:var(--surface);font-size:12px;color:var(--ink-2);line-height:1.55}
.compliance h4{margin:0 0 6px;color:var(--ink);font-size:12.5px;text-transform:uppercase;letter-spacing:.06em;font-family:var(--font-mono);font-weight:600}
.compliance p{margin:6px 0}
.compliance .definitions{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:8px 0;font-size:11.5px}
.compliance .definitions div{padding:6px 10px;background:var(--surface-2);border-radius:4px}
.compliance .definitions b{color:var(--ink);font-family:var(--font-mono)}
@media(max-width:600px){.compliance .definitions{grid-template-columns:1fr}}

/* PRINT CSS — Lab controls hidden, all details open, no nav */
@media print{
  .topnav,.readprog,.tocrail,.mobile-rating,.kms-footer{display:none!important}
  main.wrap{display:block;max-width:none;padding:0;margin:0}
  .doc{max-width:none}
  details[open]>summary{break-after:avoid}
  details{display:block}
  details:not([open])>summary~*,details:not([open])>summary{display:block!important}
  details:not([open])>summary::before{content:"▾"}
  .lab .lab-body>.lab-grid{display:block}
  .lab .ctl,.lab .scen{display:none}
  .lab .readout{break-inside:avoid}
  .lab svg.kc{break-inside:avoid}
  .lab-print-summary{display:block!important;margin-top:8px;font-family:var(--font-mono);font-size:11px;color:var(--ink-2)}
  .hero{background:transparent;color:var(--ink);border-bottom:1px solid var(--ink)}
  .hero h1,.hero .subtitle,.hero .snap,.hero .kicker{color:var(--ink)!important}
  a{color:var(--ink)!important;text-decoration:none}
  table,figure,.exhibit,.lab{break-inside:avoid}
  body{background:#fff;font-size:11pt}
  h2,h3{color:var(--ink)!important;border-color:var(--ink)!important}
}
.lab-print-summary{display:none}

/* ── Historical valuation bands ─────────────────────────────────────────
   Two surfaces:
     .bands-snapshot — compact strip on Section 1 (3 chips + summary line)
     .bands-block    — full per-multiple analysis inside Section 6
   Z-score tone uses the same green/amber/red language as the rest of the
   page (up/amber/down vars), thresholded at |z|<0.75 / <1.5 / ≥1.5.       */
.bands-snapshot{
  margin:18px 0 16px;border:1px solid var(--rule);border-radius:12px;
  background:var(--surface);padding:14px 16px;box-shadow:var(--shadow);
}
.bands-snapshot .bs-head{
  display:flex;justify-content:space-between;align-items:baseline;gap:12px;
  margin-bottom:6px;flex-wrap:wrap;
}
.bands-snapshot .bs-title{font-weight:700;color:var(--ink);font-size:13.5px}
.bands-snapshot .bs-asof{
  font-family:var(--font-mono);font-size:11px;color:var(--ink-3);
}
.bands-snapshot .bs-summary{
  margin:6px 0 12px;font-size:13px;color:var(--ink-2);line-height:1.55;
}
.bands-snapshot .bs-chips{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;
}
.bands-snapshot .bs-chip{
  border:1px solid var(--rule);border-left:3px solid var(--ink-3);
  border-radius:8px;padding:10px 12px;background:#fafbfc;
}
.bands-snapshot .bs-chip.bs-ok{border-left-color:var(--up)}
.bands-snapshot .bs-chip.bs-warn{border-left-color:var(--amber)}
.bands-snapshot .bs-chip.bs-hot{border-left-color:var(--down)}
.bands-snapshot .bs-chip-label{
  font-size:11.5px;color:var(--ink-2);font-weight:600;letter-spacing:.02em;
  text-transform:uppercase;margin-bottom:4px;
}
.bands-snapshot .bs-chip-num{
  display:flex;align-items:baseline;gap:8px;
  font-family:var(--font-mono);
}
.bands-snapshot .bs-chip-num .bs-cur{
  font-size:18px;font-weight:700;color:var(--ink);
}
.bands-snapshot .bs-chip-num .bs-vs{
  font-size:11px;color:var(--ink-3);
}
.bands-snapshot .bs-chip-z{
  margin-top:4px;font-family:var(--font-mono);font-size:11.5px;
  color:var(--ink-2);font-weight:600;
}
.bands-snapshot .bs-chip.bs-ok .bs-chip-z{color:var(--up)}
.bands-snapshot .bs-chip.bs-warn .bs-chip-z{color:var(--amber)}
.bands-snapshot .bs-chip.bs-hot .bs-chip-z{color:var(--down)}
.bands-snapshot .bs-foot{
  margin:12px 0 0;font-size:11.5px;color:var(--ink-3);
}
.bands-snapshot .bs-foot a{color:var(--kc-accent);text-decoration:none}
.bands-snapshot .bs-foot a:hover{text-decoration:underline}
@media (max-width:760px){
  .bands-snapshot .bs-chips{grid-template-columns:1fr;}
}

.bands-block{margin:18px 0 6px}
.bands-block .bands-intro{
  font-size:13.5px;color:var(--ink-2);line-height:1.6;margin:6px 0 14px;
}
.bands-block .bands-ratios{display:flex;flex-direction:column;gap:18px}
.bands-block .bands-row{
  display:grid;grid-template-columns:minmax(280px, 1fr) 2fr;gap:18px;
  align-items:start;border-top:1px solid var(--rule);padding-top:14px;
}
.bands-block .bands-row:first-child{border-top:none;padding-top:0}
.bands-block .bands-meta h4{
  margin:0 0 6px;font-size:14.5px;color:var(--ink);
  display:flex;align-items:center;gap:8px;
}
.bands-block .bands-weight{
  font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;
  padding:2px 7px;border-radius:10px;font-family:var(--font-mono);
}
.bands-block .bands-weight-primary{
  background:var(--tiffany-bg);color:var(--tiffany-ink);
}
.bands-block .bands-weight-secondary{
  background:var(--rule);color:var(--ink-2);
}
.bands-block .bands-rationale{
  font-size:12.5px;color:var(--ink-2);line-height:1.55;margin:0 0 10px;
}
/* Plain 3-column table — uppercase mono header row + a single data row.
   Selectors include `.bands-ratios` to win specificity over the generic
   `section table:not(.comp) td:not(:first-child)` rule (which would
   otherwise force columns 2-3 to font-size:12px) and over the
   `section table:not(.comp)` rule (which would apply a white card
   background + shadow + alternating row stripes). Override every facet
   explicitly so nothing leaks through. */
.bands-block .bands-ratios table.bands-readout{
  width:100%;border-collapse:collapse;margin:0 0 6px;
  background:transparent;box-shadow:none;border-radius:0;overflow:visible;
  table-layout:fixed;
}
.bands-block .bands-ratios table.bands-readout th,
.bands-block .bands-ratios table.bands-readout td{
  padding:6px 8px;background:transparent;text-align:left;
  font-variant-numeric:normal;
}
.bands-block .bands-ratios table.bands-readout thead th,
.bands-block .bands-ratios table.bands-readout thead th:not(:first-child){
  background:transparent;border-bottom:1px solid var(--rule);
  font-family:var(--font-mono);font-size:10.5px;font-weight:700;
  letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);
  text-align:left;
}
.bands-block .bands-ratios table.bands-readout tbody tr,
.bands-block .bands-ratios table.bands-readout tbody tr:nth-child(even){
  background:transparent;
}
.bands-block .bands-ratios table.bands-readout tbody td,
.bands-block .bands-ratios table.bands-readout tbody td:not(:first-child){
  font-family:var(--font-mono);font-size:16px;font-weight:700;
  color:var(--ink);letter-spacing:-.01em;white-space:nowrap;
  border-bottom:none;text-align:left;
}
.bands-block .bands-chart .kc-figure{margin:0}
.bands-block .bands-excluded{
  margin-top:14px;font-size:12.5px;color:var(--ink-2);
}
.bands-block .bands-excluded summary{
  cursor:pointer;color:var(--ink);font-weight:600;
}
.bands-block .bands-excluded ul{margin:8px 0 0;padding-left:20px}
.bands-block .bands-excluded li{margin:4px 0;line-height:1.5}
@media (max-width:760px){
  .bands-block .bands-row{grid-template-columns:1fr}
}
/*AISC3D-START*/
/* ===== interactive 3D supply-chain overview (injected) ===== */
.scene3d{position:relative;width:100%;height:86vh;min-height:540px;max-height:900px;margin:0;overflow:hidden;
  background:radial-gradient(120% 90% at 50% -10%,#16161e 0%,#0e0e13 55%,#0a0a0d 100%);
  border-bottom:1px solid var(--chrome-line);isolation:isolate}
.scene3d canvas{display:block;position:absolute;inset:0;width:100%!important;height:100%!important;touch-action:none}
.s3-grain{position:absolute;inset:0;pointer-events:none;z-index:2;
  background:radial-gradient(70% 65% at 50% 42%,transparent 58%,rgba(0,0,0,.42) 100%)}
.s3-head{position:absolute;left:0;right:0;top:0;z-index:5;padding:24px 0;pointer-events:none}
.s3-head .wrap{pointer-events:none}
.s3-kicker{font:600 11px/1 var(--font-mono);letter-spacing:.18em;text-transform:uppercase;color:var(--tiffany)}
.s3-title{margin:7px 0 0;font:600 clamp(26px,3.4vw,44px)/1.05 'Space Grotesk',var(--font-sans);color:var(--chrome-ink);letter-spacing:-.015em}
.s3-sub{margin:8px 0 0;font:400 13.5px/1.55 var(--font-sans);color:var(--chrome-ink-2);max-width:54ch}
.s3-labels{position:absolute;inset:0;z-index:3;pointer-events:none}
.s3-label{position:absolute;left:0;top:0;transform:translate(-50%,-50%);white-space:nowrap;cursor:pointer;pointer-events:auto;
  font:600 12px/1 var(--font-sans);color:var(--chrome-ink);padding:4px 9px 4px 8px;border-radius:999px;
  background:rgba(13,13,18,.5);border:1px solid var(--chrome-line);backdrop-filter:blur(5px);
  opacity:.5;transition:opacity .2s,background .2s,border-color .2s;will-change:transform}
.s3-label:hover{opacity:1}
.s3-label .ln{color:var(--tiffany);font-family:var(--font-mono);font-size:10px;margin-right:6px}
.s3-label.on{opacity:1;background:rgba(10,186,181,.18);border-color:rgba(10,186,181,.55)}
.s3-label.dc{background:rgba(10,186,181,.14);border-color:rgba(10,186,181,.42);opacity:.92}
.s3-label.dc .ln{font-size:11px}
.s3-label.comp{font-size:11px;padding:3px 8px}
.s3-label.hide{opacity:0!important;pointer-events:none}
.s3-panel{position:absolute;left:max(28px,calc((100% - 1320px)/2 + 28px));bottom:28px;z-index:6;width:min(366px,calc(100% - 56px));
  background:rgba(16,16,22,.84);border:1px solid var(--chrome-line);border-radius:13px;backdrop-filter:blur(9px);
  padding:16px 18px 17px;color:var(--chrome-ink);box-shadow:0 18px 50px -18px rgba(0,0,0,.7);
  opacity:0;transform:translateY(12px);transition:opacity .26s,transform .26s;pointer-events:none}
.s3-panel.on{opacity:1;transform:none;pointer-events:auto}
.s3-crumb{font:600 10px/1.4 var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--chrome-ink-2);margin-bottom:9px}
.s3-crumb b{color:var(--tiffany)}
.s3-pname{font:600 17px/1.2 'Space Grotesk',var(--font-sans);margin:0 0 4px}
.s3-psub{font:400 13px/1.5 var(--font-sans);color:var(--chrome-ink-2);margin:0 0 14px}
.s3-actions{display:flex;gap:8px;flex-wrap:wrap}
.s3-btn{appearance:none;cursor:pointer;font:600 12.5px/1 var(--font-sans);border-radius:8px;padding:9px 13px;border:1px solid transparent;transition:.15s;text-decoration:none}
.s3-btn.primary{background:var(--tiffany);color:#04201f}
.s3-btn.primary:hover{background:#34cfca;text-decoration:none}
.s3-btn.ghost{background:transparent;color:var(--chrome-ink-2);border-color:var(--chrome-line)}
.s3-btn.ghost:hover{color:var(--chrome-ink);border-color:var(--chrome-ink-2)}
.s3-btn.ghost[hidden]{display:none}
.s3-hint{position:absolute;right:30px;bottom:32px;z-index:5;font:500 12px/1.6 var(--font-sans);color:var(--chrome-ink-2);text-align:right;pointer-events:none;transition:opacity .5s}
.s3-hint.fade{opacity:0}
.s3-hint kbd{font:600 11px/1 var(--font-mono);background:rgba(255,255,255,.05);border:1px solid var(--chrome-line);border-radius:4px;padding:2px 5px;color:var(--chrome-ink)}
.s3-scroll{position:absolute;left:50%;bottom:15px;transform:translateX(-50%);z-index:5;color:var(--chrome-ink-2);
  font:600 9px/1 var(--font-mono);letter-spacing:.2em;text-transform:uppercase;display:flex;flex-direction:column;align-items:center;gap:6px;pointer-events:none;opacity:.65}
.s3-scroll svg{width:15px;height:15px;animation:s3bob 1.9s ease-in-out infinite}
@keyframes s3bob{0%,100%{transform:translateY(0)}50%{transform:translateY(4px)}}
.s3-ctrls{position:absolute;right:30px;top:24px;z-index:6;display:flex;flex-direction:column;gap:7px}
.s3-cbtn{width:38px;height:38px;display:grid;place-items:center;cursor:pointer;background:rgba(16,16,22,.72);border:1px solid var(--chrome-line);border-radius:9px;color:var(--chrome-ink);font:600 18px/1 var(--font-sans);backdrop-filter:blur(6px);transition:.15s;padding:0}
.s3-cbtn:hover{background:rgba(10,186,181,.16);border-color:rgba(10,186,181,.55);color:#fff}
.s3-cbtn svg{width:17px;height:17px;display:block}
.s3-fallback{display:none}
.scene3d.is-fallback{height:auto;min-height:0;max-height:none}
.scene3d.is-fallback>canvas,.scene3d.is-fallback .s3-head,.scene3d.is-fallback .s3-labels,.scene3d.is-fallback .s3-panel,.scene3d.is-fallback .s3-hint,.scene3d.is-fallback .s3-scroll,.scene3d.is-fallback .s3-grain,.scene3d.is-fallback .s3-ctrls{display:none!important}
.scene3d.is-fallback .s3-fallback{display:block}
.s3fwrap{padding:22px 22px 20px;max-width:760px;margin:0 auto}
.s3f-bar{display:flex;align-items:center;gap:11px;margin:4px 0;padding:10px 13px;border-radius:9px;
  border:1px solid var(--chrome-line);background:rgba(255,255,255,.022);color:var(--chrome-ink);text-decoration:none;transition:.14s}
.s3f-bar:hover{background:rgba(10,186,181,.1);border-color:rgba(10,186,181,.42);text-decoration:none;transform:translateX(3px)}
.s3f-dot{width:9px;height:9px;border-radius:50%;flex:0 0 auto;box-shadow:0 0 0 3px rgba(255,255,255,.04)}
.s3f-n{font:700 11px/1 var(--font-mono);width:30px;color:var(--tiffany)}
.s3f-nm{font:600 13.5px/1.2 var(--font-sans)}
.s3f-tag{font:600 9px/1 var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:#04201f;background:var(--tiffany);border-radius:4px;padding:3px 5px;margin-left:8px}
.s3f-sb{font:400 12px/1.3 var(--font-sans);color:var(--chrome-ink-2);margin-left:auto;text-align:right}
@media(max-width:600px){.s3f-sb{display:none}}
@media(prefers-reduced-motion:reduce){.s3-scroll svg{animation:none}}
/* ===== end interactive 3D overview ===== */
/*AISC3D-END*/
