/* ══════════════════════════════════════════════════════════════════════════
   PARCAE — Observatory stylesheet
   The loom inside a dark observatory. Tokens are load-bearing (PARCAE_UI §2).
   Self-hosted type, one coherent system:
     · "Haffer XH" (100–800) — the official Bamboo typeface: display, body, UI,
       labels, and data, everywhere.
   Google Sans / Google Sans Flex remain only as a fallback stack behind Haffer.
   Numbers/tickers/tables use tabular figures ("tnum") so columns align. There
   is no monospaced family.
   ══════════════════════════════════════════════════════════════════════════ */
/* Haffer XH — the Bamboo typeface (weights mirror the main website). */
@font-face{font-family:"Haffer XH";src:url("/fonts/HafferXH-Thin.woff2") format("woff2");font-weight:100;font-style:normal;font-display:swap}
@font-face{font-family:"Haffer XH";src:url("/fonts/HafferXH-Light.woff2") format("woff2");font-weight:300;font-style:normal;font-display:swap}
@font-face{font-family:"Haffer XH";src:url("/fonts/HafferXH-Regular.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Haffer XH";src:url("/fonts/HafferXH-Medium.woff2") format("woff2");font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:"Haffer XH";src:url("/fonts/HafferXH-SemiBold.woff2") format("woff2");font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:"Haffer XH";src:url("/fonts/HafferXH-Bold.woff2") format("woff2");font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:"Haffer XH";src:url("/fonts/HafferXH-Heavy.woff2") format("woff2");font-weight:800;font-style:normal;font-display:swap}
@font-face{font-family:"Google Sans";src:url("/fonts/GoogleSans-400.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Google Sans";src:url("/fonts/GoogleSans-400-Italic.woff2") format("woff2");font-weight:400;font-style:italic;font-display:swap}
@font-face{font-family:"Google Sans";src:url("/fonts/GoogleSans-500.woff2") format("woff2");font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:"Google Sans";src:url("/fonts/GoogleSans-700.woff2") format("woff2");font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:"Google Sans Flex";src:url("/fonts/GoogleSansFlex-300.woff2") format("woff2");font-weight:300;font-style:normal;font-display:swap}
@font-face{font-family:"Google Sans Flex";src:url("/fonts/GoogleSansFlex-500.woff2") format("woff2");font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:"Google Sans Flex";src:url("/fonts/GoogleSansFlex-700.woff2") format("woff2");font-weight:700;font-style:normal;font-display:swap}
:root{
  /* Surfaces: Bamboo's Vault Green family, kept dark. The observatory now sits in
     the brand's vault-green depth (near --color-vault-darker #0c231a) instead of a
     neutral forest, bringing Parcae closer to the main site while staying dark. */
  --ink:#0b2018; --ink-2:#07160f; --panel:#102a20; --panel-2:#163427; --line:#264a3a;
  --bone:#ECE7D8; --muted:#8ca79b; --muted-dim:#6a857a;
  /* Gold thread — Parcae's signature, unchanged. It stays the color of the loom. */
  --thread:#C9A24B; --thread-soft:#9E8344; --thread-glow:rgba(201,162,75,.55);
  --bamboo:#46B083; --bamboo-dim:#2E6E50; --rumored:#C77B54;
  /* Bamboo CTA accents (Lemon / Lime Stone): a single high-emphasis pop for the
     primary action, so "act" reads in the brand color while the intelligence
     stays gold. Used sparingly, never competing with the thread. */
  --lemon:#e6ff55; --lime:#ccff00; --lime-ink:#08160e; --lime-glow:rgba(204,255,0,.28);
  --ease:cubic-bezier(.22,.61,.36,1);
  /* one type system — Haffer XH (the Bamboo typeface), Google Sans as fallback */
  --font-display:"Haffer XH","Google Sans Flex","Google Sans",system-ui,sans-serif;
  --font-body:"Haffer XH","Google Sans",system-ui,sans-serif;
  --tnum:"tnum" 1,"lnum" 1;
  /* modular scale (1.25), one rhythm everywhere */
  --t-xs:.72rem; --t-sm:.82rem; --t-base:.94rem; --t-md:1.05rem; --t-lg:1.2rem;
  --t-xl:1.5rem; --t-2xl:1.85rem; --t-3xl:2.3rem; --t-4xl:2.9rem;
  --space:8px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--ink);color:var(--bone);
  font-family:var(--font-body);font-size:15px;line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
  text-rendering:optimizeLegibility;font-kerning:normal;font-weight:400;overflow-x:hidden}
/* Display: Google Sans Flex, light by default for calm large headlines. */
.display{font-family:var(--font-display);font-weight:500;letter-spacing:-.01em}
/* Tabular figures for any numeric / ticker context (replaces the old mono). */
.mono{font-family:var(--font-body);font-feature-settings:var(--tnum);font-variant-numeric:tabular-nums}
/* One label/eyebrow treatment everywhere: uppercase Google Sans, gentle track. */
.caps{font-family:var(--font-body);font-weight:500;text-transform:uppercase;letter-spacing:.16em;font-size:var(--t-xs);color:var(--muted)}
.thread-c{color:var(--thread)} .bamboo-c{color:var(--bamboo)} .muted-c{color:var(--muted)} .rumored-c{color:var(--rumored)}
a{color:inherit;text-decoration:none}
::selection{background:rgba(201,162,75,.3)}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:var(--line);border-radius:5px}
::-webkit-scrollbar-track{background:transparent}

/* buttons */
.btn{display:inline-flex;align-items:center;gap:9px;font-family:var(--font-body);font-weight:500;text-transform:uppercase;letter-spacing:.12em;font-size:.72rem;border:1px solid var(--thread);color:var(--thread);background:none;padding:12px 22px;border-radius:6px;cursor:pointer;transition:background-color .25s var(--ease),border-color .25s var(--ease),color .25s var(--ease),box-shadow .25s var(--ease),transform .18s var(--ease),scale .12s var(--ease)}
.btn:active{scale:.96}
.btn svg{width:15px;height:15px;flex-shrink:0}
.btn:hover{background:rgba(201,162,75,.12);transform:translateY(-1px)}
.btn:disabled{opacity:.4;cursor:not-allowed;transform:none}
/* Primary action carries Bamboo's Lime Stone (the site's CTA color); the gold
   thread stays reserved for the loom and its accents. */
.btn.solid{background:var(--lime);border-color:var(--lime);color:var(--lime-ink);font-weight:600;box-shadow:0 6px 24px -8px var(--lime-glow)}
.btn.solid:hover{background:var(--lemon);border-color:var(--lemon);box-shadow:0 10px 30px -8px var(--lime-glow)}
.btn.ghost{border-color:var(--line);color:var(--muted)} .btn.ghost:hover{color:var(--bone);border-color:var(--muted-dim);background:rgba(255,255,255,.03)}
.btn.sm{padding:8px 14px;font-size:.64rem}
.btn.sm svg{width:13px;height:13px}

/* ════════════════ LANDING ════════════════ */
#landing{display:block}
body.app #landing{display:none}
.lnav{position:fixed;top:0;left:0;right:0;z-index:30;display:flex;align-items:center;gap:28px;padding:20px 48px;
  background:linear-gradient(180deg,rgba(12,21,18,.9),transparent);transition:background .3s}
.lnav.scrolled{background:rgba(10,18,15,.92);backdrop-filter:blur(10px);border-bottom:1px solid var(--line);padding:14px 48px}
.lnav .wm{font-family:var(--font-display);font-weight:700;letter-spacing:.22em;text-transform:uppercase;font-size:1.1rem;color:var(--thread)}
.lnav .lks{margin-left:auto;display:flex;gap:30px;align-items:center}
.lnav .lks a{color:var(--muted);font-size:.85rem;transition:color .2s}
.lnav .lks a:hover{color:var(--bone)}
@media(max-width:680px){.lnav{padding:14px 20px;gap:14px}.lnav .lks{gap:14px}.lnav .lks a:not(.btn){display:none}}

.hero{position:relative;min-height:100vh;display:grid;place-items:center;text-align:center;overflow:hidden}
#weave{position:absolute;inset:0;width:100%;height:100%;z-index:0}
.hero-glow{position:absolute;inset:0;z-index:1;pointer-events:none;
  background:radial-gradient(60% 50% at 50% 42%, rgba(201,162,75,.10), transparent 70%),
             radial-gradient(40% 40% at 50% 100%, rgba(70,176,131,.07), transparent 70%)}
.hero-inner{position:relative;z-index:2;max-width:880px;padding:0 28px}
.eyebrow{display:inline-flex;align-items:center;gap:14px;margin-bottom:26px;opacity:0;animation:rise .9s var(--ease) .1s forwards}
.eyebrow .rule{width:34px;height:1px;background:var(--thread)}
.hero h1{font-family:var(--font-display);font-weight:300;font-size:clamp(2.6rem,5.6vw,4.8rem);line-height:1.04;margin:0 0 22px;letter-spacing:-.02em}
.hero h1 .gold{color:var(--thread);font-weight:500;font-style:normal}
.hero h1 span{display:inline-block;opacity:0;animation:rise 1s var(--ease) forwards}
.hero .sub{font-size:1.12rem;color:var(--muted);max-width:60ch;margin:0 auto 36px;opacity:0;animation:rise 1s var(--ease) .9s forwards}
.hero .ctas{display:flex;gap:16px;justify-content:center;flex-wrap:wrap;opacity:0;animation:rise 1s var(--ease) 1.1s forwards}
.scrollcue{position:absolute;bottom:34px;left:50%;z-index:2;color:var(--muted-dim);font-size:1.4rem;opacity:0;animation:rise 1s var(--ease) 1.6s forwards,bob 2.2s ease-in-out 1.6s infinite}
@keyframes rise{from{opacity:0;transform:translateY(22px)}to{opacity:1;transform:translateY(0)}}
@keyframes bob{0%,100%{transform:translate(-50%,0)}50%{transform:translate(-50%,8px)}}

.sect{max-width:1080px;margin:0 auto;padding:110px 28px}
.sect h2{font-family:var(--font-display);font-weight:300;font-size:clamp(1.9rem,3.4vw,2.7rem);line-height:1.1;letter-spacing:-.02em;margin:0 0 14px;text-align:center}
.sect .lede{color:var(--muted);text-align:center;max-width:62ch;margin:0 auto 56px;font-size:1.05rem}
.reveal{opacity:0;transform:translateY(28px);transition:opacity .8s var(--ease),transform .8s var(--ease)}
.reveal.in{opacity:1;transform:none}

.fates{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
@media(max-width:860px){.fates{grid-template-columns:1fr}}
.fate{position:relative;background:linear-gradient(180deg,var(--panel),rgba(20,33,28,.4));border:1px solid var(--line);border-radius:6px;padding:34px 28px;overflow:hidden;transition:transform .35s var(--ease),border-color .35s}
.fate:hover{transform:translateY(-6px);border-color:var(--thread-soft)}
.fate .num{font-family:var(--font-body);font-weight:500;color:var(--thread-soft);font-size:.66rem;letter-spacing:.18em;text-transform:uppercase}
.fate .ic{margin:14px 0 16px}
.fate h3{font-family:var(--font-display);font-weight:500;font-size:1.65rem;letter-spacing:-.01em;margin:0 0 4px}
.fate .verb{color:var(--thread);font-style:italic;font-family:var(--font-body);font-size:1rem;margin-bottom:14px}
.fate p{color:var(--muted);font-size:.94rem;margin:0}
.fate .plain{margin-top:14px;padding-top:14px;border-top:1px solid var(--line);color:var(--muted-dim);font-size:.84rem}
.fate .plain b{color:var(--bamboo);font-weight:500}

.tapestry-demo{position:relative;background:radial-gradient(120% 120% at 50% 0%, rgba(201,162,75,.06), transparent 60%);border:1px solid var(--line);border-radius:8px;padding:30px;overflow:hidden}
.howline{display:flex;gap:14px;justify-content:center;flex-wrap:wrap;margin-bottom:16px}
.step{display:flex;align-items:center;gap:12px;color:var(--muted)}
.step .b{width:26px;height:26px;border-radius:50%;border:1px solid var(--thread-soft);color:var(--thread);display:grid;place-items:center;font-family:var(--font-body);font-weight:500;font-size:.75rem;font-feature-settings:var(--tnum)}
.step .arr{color:var(--thread-soft);display:inline-flex;align-items:center}

.gets{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
@media(max-width:860px){.gets{grid-template-columns:1fr}}
.get{background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:26px;transition:border-color .3s}
.get:hover{border-color:var(--thread-soft)}
.get h4{font-family:var(--font-display);font-weight:500;font-size:1.25rem;letter-spacing:-.01em;margin:10px 0 6px}
.get p{color:var(--muted);font-size:.9rem;margin:0}

.trust{display:grid;grid-template-columns:1fr 1fr;gap:14px;max-width:840px;margin:0 auto}
@media(max-width:760px){.trust{grid-template-columns:1fr}}
.trust .t{display:flex;gap:14px;align-items:flex-start;background:rgba(20,33,28,.5);border:1px solid var(--line);border-radius:5px;padding:18px 20px}
.trust .t .x{color:var(--bamboo);line-height:1;flex-shrink:0;display:inline-flex}
.trust .t .x svg{width:17px;height:17px}
.trust .t b{font-weight:500} .trust .t p{margin:4px 0 0;color:var(--muted);font-size:.86rem}

.bigcta{text-align:center;padding:120px 28px 80px}
.bigcta h2{font-family:var(--font-display);font-weight:300;font-size:clamp(2.1rem,4.6vw,3.6rem);letter-spacing:-.02em;margin:0 0 10px}
.bigcta .motto{font-family:var(--font-body);font-style:italic;color:var(--thread);margin:34px 0 0;letter-spacing:.04em}
.lfoot{border-top:1px solid var(--line);padding:30px 48px;color:var(--muted-dim);font-size:.78rem;display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}

/* ════════════════ APP SHELL ════════════════ */
#app{display:none}
body.app #app{display:block}
.shell{display:grid;grid-template-columns:240px 1fr;min-height:100vh}
.sidebar{border-right:1px solid var(--line);padding:24px 0;position:sticky;top:0;height:100vh;display:flex;flex-direction:column;background:var(--ink-2);z-index:20}
.brand{padding:0 24px 20px;cursor:pointer}
.brand .wm{font-family:var(--font-display);font-weight:700;letter-spacing:.2em;text-transform:uppercase;font-size:1.05rem;color:var(--thread);margin:0}
.nav{flex:1;margin-top:10px;overflow-y:auto}
.nav .gl{padding:16px 24px 7px}
.nav a{display:flex;align-items:center;gap:12px;padding:9px 24px;color:var(--muted);font-size:.88rem;border-left:2px solid transparent;cursor:pointer;transition:color .2s,background-color .2s,border-left-color .2s}
.nav a .ic{width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;opacity:.7;flex-shrink:0}
.nav a .ic svg{width:17px;height:17px}
.nav a:hover .ic{opacity:1}
.nav a:hover{color:var(--bone);background:rgba(255,255,255,.02)}
.nav a.active{color:var(--bone);background:linear-gradient(90deg,rgba(201,162,75,.12),transparent);border-left-color:var(--thread)}
.nav a.active .ic{color:var(--thread);opacity:1}
.nav .act{font-family:var(--font-body);font-weight:500;font-size:.9rem}
.nav .as{margin-left:auto;font-family:var(--font-body);font-size:.58rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted-dim)}
.sidefoot{padding:16px 24px 0;border-top:1px solid var(--line)}
.userchip{display:flex;align-items:center;gap:10px}
.avatar{width:28px;height:28px;border-radius:50%;background:var(--panel-2);border:1px solid var(--line);display:grid;place-items:center;color:var(--bamboo);font-size:.7rem}

.menutoggle{display:none;background:none;border:none;color:var(--thread);cursor:pointer;padding:0;line-height:0}
.menutoggle svg{width:22px;height:22px}
@media(max-width:880px){
  .shell{grid-template-columns:1fr}
  .sidebar{position:fixed;top:0;left:0;width:240px;transform:translateX(-100%);transition:transform .3s var(--ease)}
  body.menu-open .sidebar{transform:none}
  .menutoggle{display:block}
}

.main{min-width:0;display:flex;flex-direction:column}
.topbar{display:flex;align-items:center;gap:16px;padding:14px 34px;border-bottom:1px solid var(--line);position:sticky;top:0;background:rgba(10,18,15,.86);backdrop-filter:blur(8px);z-index:8}
.runstamp{display:flex;align-items:center;gap:18px;font-family:var(--font-body);font-size:.74rem;font-feature-settings:var(--tnum);flex-wrap:wrap}
.runstamp>span{display:inline-flex;align-items:center;gap:7px;line-height:1}
.runstamp .k{color:var(--muted-dim);text-transform:uppercase;letter-spacing:.1em;font-size:.62rem} .runstamp .v{color:var(--thread)}
.runpick{background:none;border:1px solid var(--line);color:var(--thread);font-family:var(--font-body);font-size:.72rem;font-feature-settings:var(--tnum);border-radius:5px;padding:5px 8px;cursor:pointer;line-height:1.2}
.search{margin-left:auto;display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--line);padding:5px 6px;min-width:220px;color:var(--muted);position:relative}
.search svg{width:15px;height:15px;flex-shrink:0;opacity:.7}
.search input{background:none;border:none;color:var(--bone);outline:none;font-family:var(--font-body);font-size:.82rem;width:100%}
@media(max-width:760px){.search{min-width:120px}.runstamp{font-size:.6rem}}
.searchpop{position:absolute;top:32px;left:0;right:0;background:var(--ink-2);border:1px solid var(--line);border-radius:4px;max-height:340px;overflow-y:auto;z-index:30;box-shadow:0 20px 50px -20px #000}
.searchpop .si{padding:9px 12px;cursor:pointer;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;gap:10px}
.searchpop .si:hover{background:rgba(201,162,75,.08)}
.searchpop .si .lab{font-size:.82rem} .searchpop .si .meta{font-family:var(--font-body);font-feature-settings:var(--tnum);font-size:.66rem;color:var(--muted)}

.view{display:none;padding:36px 34px 40px;animation:fade .5s var(--ease)}
/* Full width by default so dashboards/lists/tables scale to the screen. The
   reading views re-cap below for a comfortable prose measure. */
#v-brief.active{max-width:1200px}
/* Home is a dashboard: full width, but keep its prose to a readable measure. */
#homeStandfirst{max-width:78ch}
/* The Read | Top candidates: size The Read to a readable width so its prose
   fills the card (no dead right gutter), let candidates take the rest, and stop
   the grid stretching the shorter card to match the taller one (no dead bottom). */
/* The Read + Top candidates read as a matched pair: equal height (stretch) so
   whichever has more content sets the height and the other fills to meet it. */
#v-home .g-2{grid-template-columns:minmax(0,640px) minmax(0,1fr);align-items:stretch}
#v-home .g-2 > .card{display:flex;flex-direction:column}
/* Insight detail is one uniform vertical column: every section card (Morta's
   take, what earned it, watchlist, radar, memory) stacks and stretches to the
   full content width with a consistent gap — no cramped sidebar, no dead gutter
   on the right. The narrative runs the full card width too. */
#v-insight .g-12.ins-dt-stack{grid-template-columns:minmax(0,1fr);gap:16px}
/* Deal-thread detail: the graph is a full-width banner on top; beneath it the
   meaty "Threads pulled" list takes the width and the compact reads (theme,
   source, terms, confidence) stack in a narrower rail beside it. */
#v-thread .g-12{grid-template-columns:minmax(0,1fr) minmax(0,360px)}
@media(max-width:1000px){#v-thread .g-12{grid-template-columns:1fr}}
.view.active{display:block}
.view.brief{max-width:880px;margin:0 auto}
@media(max-width:760px){.view{padding:24px 18px 30px}}
@keyframes fade{from{opacity:0;transform:translateY(10px)}to{opacity:1}}
.peyebrow{display:flex;align-items:center;gap:14px;margin-bottom:12px}
.peyebrow .rule{width:30px;height:1px;background:var(--thread)}
h1.title{font-family:var(--font-display);font-weight:300;font-size:var(--t-4xl);line-height:1.06;letter-spacing:-.02em;margin:0 0 .5rem}
.standfirst{font-family:var(--font-body);font-size:1.18rem;line-height:1.5;color:var(--muted);max-width:64ch;margin:0 0 1rem}
.lead{color:var(--muted);max-width:74ch;margin:0 0 1.2rem;font-size:var(--t-md)}
.hint{display:inline-flex;gap:8px;align-items:center;background:rgba(70,176,131,.07);border:1px solid var(--bamboo-dim);color:var(--bamboo);border-radius:6px;padding:8px 14px;font-size:.82rem;margin:6px 0 18px}
.hint .i{font-weight:500;text-transform:uppercase;letter-spacing:.1em;font-size:.66rem}

.card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:22px 24px}
.card.primary{border-left:2px solid var(--thread)}
.grid{display:grid;gap:18px}
.g-2{grid-template-columns:1.5fr 1fr} .g-3{grid-template-columns:repeat(3,1fr)} .g-12{grid-template-columns:7fr 5fr} .g-4{grid-template-columns:repeat(4,1fr)}
@media(max-width:1000px){.g-2,.g-3,.g-12,.g-4{grid-template-columns:1fr}}
.sec-head{display:flex;align-items:baseline;justify-content:space-between;margin:32px 0 14px;gap:14px}
h2.sec{font-family:var(--font-display);font-weight:500;font-size:var(--t-xl);letter-spacing:-.01em;margin:0}

.metrics{display:flex;gap:34px;flex-wrap:wrap}
.metric .v{font-family:var(--font-display);font-weight:300;font-size:2.1rem;line-height:1;font-feature-settings:var(--tnum);letter-spacing:-.01em}
.metric .v.gold{color:var(--thread)} .metric .v.green{color:var(--bamboo)}
.metric .k{margin-top:6px}

/* cross-run memory strip — "the loom remembers" (Stage 1 knowledge layer) */
.memory{display:flex;align-items:center;gap:16px;flex-wrap:wrap;border:1px solid var(--line);border-left:2px solid var(--thread);border-radius:6px;padding:12px 18px;margin-bottom:22px;background:linear-gradient(90deg,rgba(201,162,75,.05),transparent)}
.memory .lab{display:inline-flex;align-items:center;gap:8px;font-family:var(--font-body);font-weight:500;text-transform:uppercase;letter-spacing:.1em;color:var(--thread);font-size:.7rem}
.memory .lab svg{width:14px;height:14px}
.memory .m{font-family:var(--font-body);font-feature-settings:var(--tnum);font-size:.74rem;color:var(--muted)} .memory .m b{color:var(--bone);font-weight:500;font-size:.85rem}
.memory .m.live{color:var(--bamboo)}

/* pills */
.pill{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-body);font-weight:500;font-size:.62rem;text-transform:uppercase;letter-spacing:.11em;padding:3px 8px;border-radius:4px;border:1px solid}
.pill.announced{color:var(--bamboo);border-color:var(--bamboo-dim);background:rgba(70,176,131,.10)}
.pill.pending{color:var(--thread);border-color:var(--thread-soft);background:rgba(201,162,75,.10)}
.pill.rumored{color:var(--rumored);border-color:#6b4632;background:rgba(199,123,84,.10)}
.pill.completed{color:var(--bamboo);border-color:var(--bamboo-dim);background:rgba(70,176,131,.16)}
.pill.terminated{color:var(--muted);border-color:var(--line);text-decoration:line-through}
.pill.earned{color:var(--bamboo);border-color:var(--bamboo-dim);background:rgba(70,176,131,.10)}
.pill.candidate{color:var(--muted);border-color:var(--line)}
.pill.dot::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor}
.statuschip{font-family:var(--font-body);font-weight:500;font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;padding:3px 7px;border-radius:4px}
.chip-new{color:var(--thread);background:rgba(201,162,75,.14)} .chip-watch{color:var(--muted);background:rgba(255,255,255,.04)}

/* tables */
table{width:100%;border-collapse:collapse;font-size:.86rem;margin-top:6px}
th,td{text-align:left;padding:.6rem;border-bottom:1px solid var(--line);vertical-align:top}
th{font-family:var(--font-body);font-size:.62rem;text-transform:uppercase;letter-spacing:.11em;color:var(--muted);font-weight:500}
td.num,th.num{text-align:right;font-family:var(--font-body);font-feature-settings:var(--tnum);font-variant-numeric:tabular-nums} td.num{color:var(--thread)}
tr.low td:first-child::after{content:" ◦";color:var(--muted)}
.tick{font-family:var(--font-body);font-feature-settings:var(--tnum);font-weight:500;color:var(--bamboo);font-size:.8rem;letter-spacing:.02em} .tick.unres{color:var(--muted-dim)}
.delta-neg{color:var(--rumored)}
.scorebar{display:inline-block;width:42px;height:5px;background:var(--line);border-radius:2px;vertical-align:middle;margin-left:8px;position:relative;overflow:hidden}
.scorebar>i{position:absolute;left:0;top:0;bottom:0;background:var(--thread);transition:width 1s var(--ease)}
tbody tr{transition:background .2s} tbody tr:hover{background:rgba(255,255,255,.018)}
.clickrow{cursor:pointer}

/* deal cards */
.deal{position:relative;margin-bottom:16px}
.deal .dl{display:flex;justify-content:space-between;gap:24px;flex-wrap:wrap;align-items:flex-start}
.deal .dl-main{min-width:0;flex:1}
.deal .mr{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}
.deal .actor{font-family:var(--font-display);font-weight:500;font-size:1.35rem;letter-spacing:-.01em;overflow-wrap:anywhere}
.deal .target{overflow-wrap:anywhere}
.deal .arrow{display:inline-flex;align-items:center;gap:6px;color:var(--thread);font-family:var(--font-body);font-weight:500;font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;margin:.4rem 0 .1rem}
.deal .arrow svg{width:13px;height:13px}
.deal .target{font-size:1.05rem}
.dealbox{display:flex;gap:24px;background:var(--panel-2);border:1px solid var(--line);border-radius:6px;padding:12px 18px;align-self:flex-start}
.dealbox .k{font-family:var(--font-body);font-weight:500;font-size:.58rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.dealbox .v{font-family:var(--font-display);font-weight:300;font-size:1.3rem;font-feature-settings:var(--tnum)} .dealbox .v.gold{color:var(--thread)}
.comps{min-width:200px;margin-top:14px;border-top:1px solid var(--line);padding-top:12px}
.comps .ttl{display:inline-flex;align-items:center;gap:7px;margin-bottom:6px}
.comps .ttl svg{width:13px;height:13px;color:var(--thread)}
.comps .row{display:flex;align-items:baseline;justify-content:space-between;gap:14px;padding:5px 0;border-bottom:1px solid rgba(38,57,47,.5);cursor:pointer} .comps .row:last-child{border:none} .comps .row:hover .co-name{color:var(--thread)}
/* Truncate long company names; keep a clear gap before the type label. */
.co-name{font-family:var(--font-body);font-weight:500;color:var(--bamboo);font-size:.84rem;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
.typ-label{flex-shrink:0;color:var(--muted);text-transform:capitalize;letter-spacing:.02em;white-space:nowrap}
.note{display:flex;gap:10px;color:var(--muted);font-style:italic;font-family:var(--font-body);font-size:.98rem;line-height:1.45;border-left:1px solid var(--thread-soft);padding-left:14px;margin-top:14px}
.tag{font-family:var(--font-body);font-weight:500;font-size:.58rem;letter-spacing:.1em;text-transform:uppercase;color:var(--thread);border:1px solid var(--thread-soft);border-radius:4px;padding:2px 7px}
/* Evidence chips: WHY a name is on the watchlist. A principal (the direct trade)
   reads in the living emerald; a read-across adjacency is muted, so the row shows
   the reason at a glance without the old loud gold badge. */
.ev-chips{display:inline-flex;gap:5px;margin-left:8px;vertical-align:middle}
.ev-chip{display:inline-flex;align-items:center;font-family:var(--font-body);font-weight:500;font-size:.55rem;letter-spacing:.07em;text-transform:uppercase;border-radius:4px;padding:1px 6px;white-space:nowrap}
.ev-chip.ev-principal{color:var(--bamboo);border:1px solid rgba(70,176,131,.35);background:rgba(70,176,131,.08)}
.ev-chip.ev-read{color:var(--muted);border:1px solid var(--line)}
.wl-role{color:var(--bamboo);text-transform:uppercase;font-size:.62rem;letter-spacing:.08em}

/* graphs */
.graphwrap{position:relative;background:radial-gradient(120% 120% at 50% 35%, rgba(201,162,75,.05), transparent 60%);border:1px solid var(--line);border-radius:4px;padding:10px}
.threadgraph .thread{fill:none;stroke:var(--thread);stroke-width:1.1;opacity:.7;stroke-dasharray:var(--len,560);stroke-dashoffset:var(--len,560);animation:draw 1.5s var(--ease) forwards}
.threadgraph .thread.weak{opacity:.32;stroke-dasharray:4 4;animation:none}
.threadgraph .thread.sec{stroke:var(--bamboo);opacity:.22;stroke-width:.8}
.threadgraph .thread{pointer-events:none}
.threadgraph .thread-hit{fill:none;stroke:transparent;stroke-width:14;pointer-events:stroke;cursor:pointer}
.threadgraph .thread-hit:hover{stroke:var(--thread);opacity:.16}
@keyframes draw{to{stroke-dashoffset:0}}
.threadgraph.howgraph{display:block;width:100%;height:300px}
.threadgraph .knot{fill:var(--panel-2);stroke:var(--thread);stroke-width:1.5;filter:drop-shadow(0 0 6px var(--thread-glow));cursor:pointer}
.threadgraph .knot.pulse{animation:knotpulse 2.6s ease-in-out infinite}
@keyframes knotpulse{0%,100%{filter:drop-shadow(0 0 5px var(--thread-glow))}50%{filter:drop-shadow(0 0 13px var(--thread-glow))}}
.threadgraph .node{fill:var(--panel-2);stroke:var(--muted-dim);stroke-width:1;cursor:pointer;transition:r .2s} .threadgraph .node.hot{stroke:var(--bamboo)} .threadgraph .node:hover{r:8}
.threadgraph text{fill:var(--bone);font-family:var(--font-body);font-size:11px;pointer-events:none}
.threadgraph .tk{fill:var(--bamboo);font-family:var(--font-body);font-weight:500;font-size:10px;font-feature-settings:var(--tnum);pointer-events:none}
.threadgraph .ct{fill:var(--thread);font-family:var(--font-body);font-weight:500;font-size:10px;text-transform:uppercase;letter-spacing:.08em;pointer-events:none}
.legend{display:flex;gap:18px;padding:8px 6px 2px;color:var(--muted);font-size:.62rem;flex-wrap:wrap}
.legend i{display:inline-block;width:18px;border-top:1.5px solid var(--thread);vertical-align:middle;margin-right:6px} .legend i.weak{border-top:1.5px dashed var(--muted-dim)} .legend i.sec{border-top:1.5px solid var(--bamboo)}
.threadgraph .more-note{fill:var(--muted-dim);font-family:var(--font-body);font-size:10px;font-style:italic;pointer-events:none}
.gtip{position:fixed;z-index:60;pointer-events:none;background:var(--ink-2);border:1px solid var(--thread-soft);border-radius:4px;padding:8px 11px;font-size:.74rem;max-width:240px;opacity:0;transition:opacity .15s;box-shadow:0 12px 30px -12px #000}
/* live-tapestry hover tooltip: describes the link under the cursor */
#tapTip{position:fixed;z-index:70;pointer-events:none;background:var(--ink-2);border:1px solid var(--thread-soft);border-radius:7px;padding:9px 12px;font-family:var(--font-body);font-size:.82rem;max-width:280px;opacity:0;transition:opacity .12s;box-shadow:0 14px 34px -14px #000;color:var(--bone)}
#tapTip.show{opacity:1}
#tapTip b{color:var(--bone);font-weight:500}
#tapTip .arr{color:var(--thread);margin:0 3px}
#tapTip .rel{color:var(--thread);text-transform:uppercase;letter-spacing:.08em;font-size:.6rem;margin-top:4px}
#tapTip .why{color:var(--muted);margin-top:5px;font-style:italic;line-height:1.4}
#tapTip .sub{color:var(--muted-dim);font-size:.68rem;margin-top:3px}

/* ── source badge + announcement link (Nona cards, deal thread, run log) ── */
.srcbadge{display:inline-flex;align-items:center;gap:5px;font-family:var(--font-body);font-weight:500;font-size:.58rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);border:1px solid var(--line);border-radius:4px;padding:2px 7px;white-space:nowrap}
.srcbadge svg{width:11px;height:11px;opacity:.8;flex-shrink:0}
.srcbadge.sm{font-size:.55rem;padding:2px 6px}
.srclink{display:inline-flex;align-items:center;gap:4px;font-family:var(--font-body);font-weight:500;font-size:.58rem;letter-spacing:.06em;text-transform:uppercase;color:var(--thread);border-bottom:1px solid transparent;transition:border-color .2s}
.srclink:hover{border-bottom-color:var(--thread-soft)}
.srclink svg{width:11px;height:11px;flex-shrink:0}
.runs-tbl .srccell,.srccell{white-space:normal}
.srccell .srcbadge{margin:1px 2px 1px 0}
/* Deal date chip — provenance "when", styled like the source badge but quieter. */
.datechip{display:inline-flex;align-items:center;gap:5px;font-family:var(--font-body);font-weight:500;font-size:.58rem;letter-spacing:.04em;color:var(--muted);border:1px solid var(--line);border-radius:4px;padding:2px 7px;white-space:nowrap;font-feature-settings:var(--tnum);font-variant-numeric:tabular-nums}
.datechip svg{width:11px;height:11px;opacity:.7;flex-shrink:0}
/* ── ingestion audit panel ── */
.aud-head{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.aud-stat{font-size:.74rem;color:var(--muted)} .aud-stat b{color:var(--bone);font-feature-settings:var(--tnum);font-variant-numeric:tabular-nums}
.aud-funnel{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}
.aud-step{font-size:.74rem;color:var(--muted)} .aud-step b{color:var(--thread);font-size:1.05rem;font-feature-settings:var(--tnum);font-variant-numeric:tabular-nums;margin-right:3px}
.aud-arr{color:var(--muted-dim);font-size:.9rem}
.aud-notes{margin-top:10px;color:var(--muted);line-height:1.5}
.aud-cols{display:grid;grid-template-columns:minmax(260px,360px);gap:14px}
.aud-srctable{margin:0} .aud-srctable td{padding:.4rem .3rem;border-bottom:1px solid var(--line)} .aud-srctable tr:last-child td{border-bottom:none}
.aud-ledger summary{cursor:pointer;display:flex;align-items:baseline;gap:10px;padding:6px 0;list-style:none}
.aud-ledger summary::-webkit-details-marker{display:none}
.aud-ledger summary::before{content:"▸";color:var(--muted);margin-right:4px;transition:transform .2s}
.aud-ledger[open] summary::before{content:"▾"}
.aud-ledger summary:hover .caps{color:var(--thread)}
.aud-table{table-layout:auto;font-size:.78rem;width:100%}
.aud-table th,.aud-table td{padding:.42rem .5rem;white-space:nowrap}
.aud-table td:nth-child(6){white-space:normal}
.aud-table tbody tr:hover{background:rgba(255,255,255,.03);cursor:pointer}

/* ── deal-thread headline (one transaction, spelled out) ── */
.t-sep{font-family:var(--font-body);font-weight:400;font-size:1.2rem;color:var(--muted);font-style:italic;text-transform:none;letter-spacing:0}
.deal-headline{background:var(--panel-2);border:1px solid var(--line);border-left:2px solid var(--thread);border-radius:8px;padding:18px 22px}
.deal-headline .dh-row{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.deal-headline .party{display:flex;flex-direction:column;gap:3px;min-width:0;max-width:24em}
.deal-headline .pl{font-size:.56rem;color:var(--muted-dim)}
.deal-headline .pn{font-family:var(--font-display);font-weight:500;font-size:1.15rem;letter-spacing:-.01em;overflow-wrap:anywhere}
.deal-headline .party .tick{align-self:flex-start;margin-top:2px}
.deal-headline .dh-arrow{color:var(--thread);flex-shrink:0;display:inline-flex}
.deal-headline .dh-arrow svg{width:18px;height:18px}
.deal-headline .dh-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}
.deal-headline .dh-val{font-family:var(--font-display);font-weight:300;font-size:1.25rem;color:var(--thread);font-feature-settings:var(--tnum)}

/* Threads overview — every deal-knot in the run as a card */
.threadgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px;margin-top:6px}
.threadcard{cursor:pointer;transition:border-color .2s,transform .2s}
.threadcard:hover{border-color:var(--thread-soft);transform:translateY(-2px)}
/* The badges flow left and may wrap; the value is pinned top-right so it always
   sits in the same place regardless of how many/wide the badges are or how long
   the title is. padding-right reserves room so wide badges never slide under it. */
.threadcard .tc-top{position:relative;display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px;padding-right:64px;min-height:24px}
.threadcard .tc-val{position:absolute;top:0;right:0;height:24px;display:flex;align-items:center;font-family:var(--font-display);font-weight:300;font-size:1.05rem;color:var(--thread);font-feature-settings:var(--tnum);font-variant-numeric:tabular-nums}
.threadcard .tc-title{font-size:1.15rem;line-height:1.25;overflow-wrap:anywhere}
.threadcard .tc-rel{color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-size:.58rem;margin-top:4px}
.threadcard .tc-listed{margin-top:14px;border-top:1px solid var(--line);padding-top:12px}
.threadcard .tc-listed .caps{display:block;margin-bottom:8px;font-size:.56rem}
.knotchips{display:flex;flex-wrap:wrap;gap:6px}
.knotchip{font-family:var(--font-body);font-feature-settings:var(--tnum);font-weight:500;font-size:.68rem;letter-spacing:.02em;color:var(--bamboo);border:1px solid var(--bamboo-dim);background:rgba(70,176,131,.08);border-radius:4px;padding:3px 8px;cursor:pointer;transition:color .2s,border-color .2s,background-color .2s,scale .12s var(--ease);max-width:12em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.knotchip:not(.more):active{scale:.96}
.knotchip:hover{border-color:var(--bamboo);background:rgba(70,176,131,.16)}
.knotchip.weak{color:var(--muted);border-color:var(--line);background:none}
.knotchip.more{color:var(--muted-dim);border-style:dashed;cursor:default}
.knotchip.more:hover{background:none}
.threadcard .th-themes{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
.th-badge-link{cursor:pointer;transition:opacity .15s,transform .15s}
.th-badge-link:hover{opacity:.8;transform:translateY(-1px)}
.thfgroup{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap;margin-right:14px}
.thfgroup .small{margin-right:2px}
.thfgroup.thview{margin-left:auto;margin-right:0}

/* Dense deal feed — one scannable row per deal, sortable, built to scroll for alpha. */
.threadgrid.feed-mode{display:block}
.feed-card{padding:0;overflow:hidden}
.feed-scroll{overflow-x:auto}
.feed-table{margin:0;font-size:.82rem;table-layout:auto}
.feed-table th,.feed-table td{padding:.5rem .7rem;white-space:nowrap;vertical-align:middle}
.feed-table thead th{position:sticky;top:0;background:var(--panel);z-index:1}
.feed-table th.sortable{cursor:pointer;user-select:none;transition:color .15s}
.feed-table th.sortable:hover{color:var(--bone)}
.feed-table th.sortable.on{color:var(--thread)}
.feed-arrow{margin-left:3px;font-size:.7em}
.feed-table tbody tr{cursor:pointer;transition:background-color .15s}
.feed-table tbody tr:hover{background:rgba(201,162,75,.06)}
.feed-date{color:var(--muted);white-space:nowrap}
.feed-deal{font-family:var(--font-display);font-weight:400;font-size:.98rem;white-space:normal;min-width:16em}
.feed-deal .t-sep{color:var(--muted-dim);font-style:italic;font-family:var(--font-body);font-size:.82rem;margin:0 3px}
.feed-type{color:var(--muted);text-transform:capitalize}
.feed-val{color:var(--thread);font-feature-settings:var(--tnum);font-variant-numeric:tabular-nums}
.feed-threads{color:var(--bamboo);font-feature-settings:var(--tnum)}
.feed-themecell{white-space:normal;max-width:16em}
.feed-theme{display:inline-block;color:var(--thread);border-bottom:1px dotted var(--thread-soft);margin-right:6px;line-height:1.5}
.feed-src{white-space:nowrap}

/* Grounded deal breakdown — the press-release-style read on the deal page. */
.breakdown-card .bd-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.breakdown-card .bd-sub{font-style:italic}
.bd-summary{margin:0 0 12px;font-size:var(--t-md);line-height:1.55;color:var(--bone);text-wrap:pretty}
.bd-loading{margin:0}
.bd-points{margin:0 0 12px;padding-left:1.1rem;display:flex;flex-direction:column;gap:5px}
.bd-points li{color:var(--muted);font-size:.9rem;line-height:1.45}
.bd-watch{display:flex;gap:10px;align-items:baseline;border-top:1px solid var(--line);padding-top:10px;margin-top:2px;color:var(--bone);font-size:.9rem}
.bd-watch .caps{flex-shrink:0;color:var(--thread);font-size:.56rem}
.bd-sources{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:12px}
.bd-sources .caps{font-size:.56rem;margin-right:2px}
.bd-srclink{display:inline-flex;align-items:center;gap:5px;font-family:var(--font-body);font-size:.68rem;letter-spacing:.02em;color:var(--thread);border:1px solid var(--thread-soft);border-radius:4px;padding:3px 8px;text-decoration:none;transition:background-color .15s,color .15s;scale:1}
.bd-srclink:hover{background:rgba(201,162,75,.12);color:var(--bone)}
.bd-srclink:active{scale:.96}
.bd-srclink svg{width:11px;height:11px;opacity:.8}
.bd-srclink.flat{color:var(--muted);border-color:var(--line);cursor:default}
.bd-note{margin:10px 0 0}

/* threads-pulled list on the deal thread page */
.thread-list{display:flex;flex-direction:column;gap:2px}
.tl-row{display:grid;grid-template-columns:1fr auto auto;align-items:baseline;gap:10px 12px;padding:8px 0;border-bottom:1px solid rgba(38,57,47,.5);cursor:pointer}
.tl-row:last-child{border:none}
.tl-row:hover .co-name{color:var(--thread)}
.tl-row .tl-why{grid-column:1 / -1;color:var(--muted);font-style:italic;margin-top:-2px;max-width:82ch;text-wrap:pretty}

/* Decima: threads + earned themes */
.dec-theme{border:1px solid var(--line);border-radius:6px;padding:12px 14px;margin-bottom:10px;cursor:pointer;transition:border-color .2s,background .2s}
.dec-theme:last-child{margin-bottom:0}
.dec-theme:hover{border-color:var(--thread-soft);background:rgba(201,162,75,.04)}
.dec-theme .dt-head{display:flex;justify-content:space-between;align-items:center;gap:10px}
.dec-theme .dt-meta{margin-top:6px;color:var(--muted)}

/* collapsed, de-emphasised read-across reference */
.ra-detail{margin-top:16px;border:1px solid var(--line);border-radius:8px;padding:0 18px;background:var(--panel)}
.ra-detail summary{cursor:pointer;padding:14px 0;font-family:var(--font-body);font-weight:500;text-transform:uppercase;letter-spacing:.1em;font-size:.66rem;color:var(--muted);list-style:none}
.ra-detail summary::-webkit-details-marker{display:none}
.ra-detail summary::before{content:"▸ ";color:var(--thread-soft)}
.ra-detail[open] summary::before{content:"▾ "}
.ra-detail[open]{padding-bottom:16px}
.gtip.show{opacity:1} .gtip .h{font-family:var(--font-display);font-weight:500;font-size:.92rem} .gtip .m{color:var(--muted);font-size:.7rem;margin-top:2px}

.conf{display:flex;align-items:center;gap:14px}
.confbar{flex:1;height:6px;background:var(--line);border-radius:3px;overflow:hidden}
.confbar>i{display:block;height:100%;background:linear-gradient(90deg,var(--thread-soft),var(--thread));width:0;transition:width 1.2s var(--ease)}
.kv-list .r{display:flex;justify-content:space-between;padding:9px 0;border-bottom:1px solid var(--line);gap:14px} .kv-list .r:last-child{border:none}
.kv-list .k{color:var(--muted)} .kv-list .v{font-family:var(--font-body);font-feature-settings:var(--tnum);color:var(--thread);text-align:right}
.callout{border-left:1px solid var(--thread-soft);padding:2px 0 2px 16px;color:var(--muted);font-family:var(--font-body);font-size:1.02rem;line-height:1.5;font-style:italic}
.callout b{color:var(--thread);font-style:normal;font-weight:500}
.filterbar{display:flex;gap:8px;align-items:center;margin:14px 0;flex-wrap:wrap}
.fchip{font-family:var(--font-body);font-weight:500;font-size:.64rem;letter-spacing:.08em;text-transform:uppercase;padding:6px 12px;border:1px solid var(--line);border-radius:5px;color:var(--muted);cursor:pointer;transition:color .2s,border-color .2s,background-color .2s,scale .12s var(--ease)}
.fchip:active{scale:.96}
.fchip.on{border-color:var(--thread);color:var(--thread);background:rgba(201,162,75,.08)}
hr.soft{border:none;border-top:1px solid var(--line);margin:28px 0}
.small{font-size:.78rem;color:var(--muted)}

/* brief */
.brief .masthead{border-bottom:1px solid var(--line);padding-bottom:24px;margin-bottom:8px}
.brief p.body{margin:0 0 1rem}
.brief .footer{margin-top:46px;border-top:1px solid var(--line);padding-top:20px;color:var(--muted);font-size:.82rem}
.brief .motto{font-family:var(--font-body);font-style:italic;color:var(--thread);margin-top:12px}

/* ════════════════ RUN SCAN ════════════════ */
.scan-config{max-width:680px}
.field{margin-bottom:22px}
.field .fl{display:block;margin-bottom:10px}
.opts{display:flex;gap:10px;flex-wrap:wrap}
.opt{font-family:var(--font-body);font-weight:500;font-size:.78rem;letter-spacing:.02em;font-feature-settings:var(--tnum);padding:10px 16px;border:1px solid var(--line);border-radius:6px;color:var(--muted);cursor:pointer;transition:color .2s,border-color .2s,background-color .2s,scale .12s var(--ease)}
.opt:not([style*="default"]):active{scale:.96}
.opt.on{border-color:var(--thread);color:var(--thread);background:rgba(201,162,75,.08)}
.opt:hover{color:var(--bone)}
.slider{appearance:none;width:100%;height:4px;background:var(--line);border-radius:2px;outline:none;margin-top:6px}
.slider::-webkit-slider-thumb{appearance:none;width:16px;height:16px;border-radius:50%;background:var(--thread);cursor:pointer;box-shadow:0 0 10px var(--thread-glow)}
textarea.src{width:100%;min-height:120px;background:var(--ink-2);border:1px solid var(--line);border-radius:6px;color:var(--bone);font-family:var(--font-body);font-size:.82rem;padding:12px;resize:vertical;outline:none}
textarea.src:focus{border-color:var(--thread-soft)}

/* scan running — the loom */
#scanRun{display:none;text-align:center;padding:10px 0}
#scanRun.show{display:block}
.scan-elapsed{margin:0 0 12px;color:var(--muted-dim)}
.scan-elapsed #scanElapsed{font-family:var(--font-body);font-feature-settings:var(--tnum);color:var(--thread);font-size:1.25rem;letter-spacing:.04em}
.scan-elapsed .caps{font-size:.62rem;letter-spacing:.16em}
.loomwrap{position:relative;max-width:1140px;margin:6px auto 0;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:radial-gradient(120% 120% at 50% 0%, rgba(201,162,75,.07), transparent 62%)}
#loom{display:block;width:100%;height:340px}
/* interactive accreting tapestry (canvas) — sits over the subtle loom backdrop.
   Pan by dragging, zoom by scrolling; it also drifts and flies between knots. */
.livetapestry{position:absolute;inset:0;width:100%;height:100%;z-index:2;cursor:grab;touch-action:none}
.livetapestry.grabbing{cursor:grabbing}
.tap-controls{position:absolute;top:10px;right:10px;z-index:4;display:flex;flex-direction:column;gap:10px}
.tapbtn{position:relative;width:30px;height:30px;border-radius:7px;border:1px solid var(--line);background:rgba(15,24,19,.74);color:var(--thread);font-family:var(--font-body);font-size:1.05rem;line-height:1;cursor:pointer;display:grid;place-items:center;backdrop-filter:blur(4px);transition:border-color .2s,background-color .2s,color .2s,scale .12s var(--ease)}
/* engine toggle lit = Pixi glow renderer active (opt-in A/B; canvas is default) */
.tapbtn.on{color:var(--bamboo);border-color:var(--bamboo-dim);background:rgba(70,176,131,.12)}
/* extend the 30px visible button to a 40px hit target (skill: min 40×40); the
   10px control gap keeps adjacent targets touching, never overlapping. */
.tapbtn::after{content:"";position:absolute;inset:-5px}
.tapbtn:hover{border-color:var(--thread);background:rgba(20,32,25,.92)}
.tapbtn:active{scale:.96}
.tap-hint{position:absolute;bottom:9px;left:13px;z-index:4;pointer-events:none;color:var(--muted-dim);font-family:var(--font-body);font-size:.62rem;letter-spacing:.04em;opacity:.6}
.tap-empty{position:absolute;inset:0;z-index:3;display:flex;align-items:center;justify-content:center;color:var(--muted-dim);font-style:italic;font-family:var(--font-body);font-size:.92rem;pointer-events:none}
@media(prefers-reduced-motion:reduce){.tap-hint{display:none}}

/* live activity — a single current line that BLINKS on each update, with a thin
   faded trail beneath. Fixed height so the Fate cards never get pushed offscreen. */
.activitywrap{max-width:1140px;margin:12px auto 0;border:1px solid var(--line);border-radius:8px;background:var(--panel);padding:12px 18px;text-align:left}
.activitywrap .lh{display:flex;align-items:center;gap:9px;margin-bottom:8px}
.activitywrap .lh svg{width:15px;height:15px;color:var(--thread);flex-shrink:0}
.activitywrap .lh .t{font-family:var(--font-body);font-weight:500;text-transform:uppercase;letter-spacing:.1em;font-size:.66rem;color:var(--muted)}
.activitystream{display:flex;flex-direction:column;gap:4px}
.actnow{display:flex;align-items:baseline;gap:10px;min-height:1.45em;border-radius:5px;padding:3px 8px;margin:0 -8px}
.actnow.flash{animation:actflash .9s var(--ease)}
@keyframes actflash{0%{background:rgba(201,162,75,.22)}100%{background:transparent}}
.acttrail{display:flex;flex-direction:column;gap:1px;min-height:2.2em}
.acttrail .actline{display:flex;align-items:baseline;gap:9px;opacity:.5;font-size:.78rem}
.actfate{flex-shrink:0;font-family:var(--font-body);font-weight:500;font-size:.6rem;letter-spacing:.09em;text-transform:uppercase;width:4.4em;color:var(--thread-soft)}
.tone-nona .actfate{color:var(--thread-soft)}
.tone-decima .actfate{color:var(--bamboo)}
.tone-morta .actfate{color:var(--thread)}
.acttext{color:var(--bone);font-size:.92rem;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}
.acttext.lempty{color:var(--muted-dim);font-style:italic;font-size:.85rem;padding:0}
.acttrail .acttext{color:var(--muted);font-size:.78rem}
/* live counters — a clean bar BELOW the tapestry, never overlapping the threads */
.loomstats{display:flex;justify-content:center;gap:38px;flex-wrap:wrap;max-width:1140px;margin:12px auto 0;padding:12px 0 0;border-top:1px solid var(--line)}
.loomstats .ls{text-align:center}
.loomstats .ls .v{font-family:var(--font-display);font-weight:300;font-size:1.55rem;color:var(--thread);line-height:1;font-feature-settings:var(--tnum)}
.loomstats .ls .k{font-family:var(--font-body);font-weight:500;font-size:.54rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-top:3px}
/* halt / stop indicator — unmistakable when a scan does not finish */
.scan-halt{display:none}
.scan-halt.show{display:flex;align-items:center;justify-content:center;gap:12px;max-width:1140px;margin:12px auto 0;padding:13px 18px;border-radius:8px;font-family:var(--font-body);font-size:.92rem;text-align:left}
.scan-halt .hi{font-size:1.2rem;line-height:1}
.scan-halt.fail{background:rgba(190,72,72,.12);border:1px solid var(--rumored);color:#f0c9c0}
.scan-halt.fail .hi{color:var(--rumored)}
.scan-halt.stop{background:rgba(201,162,75,.1);border:1px solid var(--thread-soft);color:var(--bone)}
.scan-halt.stop .hi{color:var(--thread)}
#scanRun.is-halted .loomwrap{border-color:var(--rumored);box-shadow:0 0 0 1px rgba(190,72,72,.25)}
#scanRun.is-halted .scan-nowline .dot,#scanRun.is-stopped .scan-nowline .dot{animation:none;background:var(--rumored);box-shadow:none}
#scanRun.is-stopped .scan-nowline .dot{background:var(--thread)}
.scan-stage-wrap{max-width:760px;margin:20px auto 0;display:flex;flex-direction:column;gap:14px}
.sstage{display:flex;align-items:center;gap:18px;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:16px 22px;text-align:left;opacity:.4;transition:opacity .4s,border-color .4s}
.sstage.active{opacity:1;border-color:var(--thread-soft)} .sstage.done{opacity:1;border-color:var(--bamboo-dim)}
.sstage .badge{width:34px;height:34px;border-radius:50%;border:1px solid var(--line);display:grid;place-items:center;color:var(--muted);font-family:var(--font-display);font-weight:500;font-size:1rem;flex-shrink:0}
.sstage .badge svg{width:16px;height:16px}
.sstage.active .badge{border-color:var(--thread);color:var(--thread);animation:pulse 1.2s ease-in-out infinite}
.sstage.done .badge{border-color:var(--bamboo);color:var(--bamboo)}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(201,162,75,.4)}50%{box-shadow:0 0 0 8px rgba(201,162,75,0)}}
.sstage .body{flex:1;min-width:0}
.sstage .name{font-family:var(--font-display);font-weight:500;font-size:1.1rem;letter-spacing:-.01em}
.sstage .stat{font-family:var(--font-body);font-size:.74rem;color:var(--muted);margin-top:2px}
.sprog{height:2px;background:var(--line);border-radius:1px;margin-top:9px;overflow:hidden}
.sprog>i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--thread-soft),var(--thread));transition:width .25s linear}
.sstage.active .sprog>i{background:linear-gradient(90deg,var(--thread-soft),var(--thread),var(--thread-soft));background-size:200% 100%;animation:flow 1.6s linear infinite}
.sstage.done .sprog>i{background:var(--bamboo)}
@keyframes flow{to{background-position:-200% 0}}
.scan-tip{color:var(--muted);font-style:italic;font-family:var(--font-body);font-size:1.05rem;margin-top:24px;min-height:1.4em;transition:opacity .4s}

/* "what is happening now" line under the loom */
.scan-nowline{max-width:860px;margin:14px auto 0;display:flex;align-items:center;justify-content:center;gap:10px;min-height:1.3em;color:var(--bone);font-size:.92rem}
.scan-nowline .dot{width:7px;height:7px;border-radius:50%;background:var(--thread);box-shadow:0 0 8px var(--thread-glow);animation:pulse 1.4s ease-in-out infinite}
.scan-nowline.is-done .dot{background:var(--bamboo);box-shadow:none;animation:none}

/* node pop-in, shared by the live tapestry beads */
@keyframes nodepop{from{opacity:0;r:0}to{opacity:1}}
.lempty{color:var(--muted-dim);font-size:.82rem;font-style:italic;padding:8px 2px}
@media(prefers-reduced-motion:reduce){
  .scan-nowline .dot{animation:none}
}

.disclaimer{margin:40px 34px 0;border-top:1px solid var(--line);padding:18px 0 36px;color:var(--muted-dim);font-size:.74rem;max-width:1200px}
.disclaimer .motto{font-family:var(--font-body);font-style:italic;color:var(--thread-soft);margin-top:8px;font-size:.95rem}
.empty{text-align:center;padding:80px 20px;color:var(--muted)}
.empty .big{font-family:var(--font-display);font-weight:300;font-size:1.5rem;letter-spacing:-.01em;color:var(--bone);margin-bottom:10px}

/* loading shimmer */
.skel{background:linear-gradient(90deg,var(--panel) 25%,var(--panel-2) 37%,var(--panel) 63%);background-size:400% 100%;animation:shim 1.4s ease infinite;border-radius:4px;height:14px;margin:8px 0}
@keyframes shim{0%{background-position:100% 0}100%{background-position:-100% 0}}

/* toast */
#toast{position:fixed;bottom:26px;left:50%;transform:translate(-50%,20px);z-index:80;background:var(--ink-2);border:1px solid var(--thread-soft);color:var(--bone);padding:12px 20px;border-radius:4px;font-size:.85rem;opacity:0;pointer-events:none;transition:opacity .3s var(--ease),transform .3s var(--ease);box-shadow:0 16px 40px -16px #000}
#toast.show{opacity:1;transform:translate(-50%,0)}
#toast.err{border-color:var(--rumored)}

/* modal */
.modal{position:fixed;inset:0;z-index:90;display:none;place-items:center;background:rgba(8,14,11,.7);backdrop-filter:blur(3px)}
.modal.show{display:grid}
.modal .box{background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:28px;max-width:420px;width:90%}
.modal .box h3{font-family:var(--font-display);font-weight:500;font-size:1.4rem;letter-spacing:-.01em;margin:0 0 6px}
.modal input{width:100%;background:var(--ink-2);border:1px solid var(--line);border-radius:6px;color:var(--bone);font-family:var(--font-body);padding:10px;margin:12px 0;outline:none}

@media(prefers-reduced-motion:reduce){
  *{animation-duration:.001s!important;animation-iteration-count:1!important;transition-duration:.001s!important;scroll-behavior:auto!important}
  .threadgraph .thread{stroke-dashoffset:0!important}
  .reveal{opacity:1;transform:none}
}

/* ── Compact scan-running view: fit one viewport, use the full width, no scroll.
   The scan screen is a live dashboard, not a scrolling document. ── */
#v-scan.active{max-width:none;padding:16px 30px 22px}
#scanRun .title{font-size:1.5rem!important;margin:0 0 2px}
#scanRun .peyebrow{margin-bottom:6px}
.scan-elapsed{margin:0 0 6px}
/* the tapestry is the centerpiece: full width, trimmed so the three-act stage
   cards clear the fold at 100% zoom without scrolling */
.loomwrap{max-width:none;margin:6px 0 0}
#loom{height:236px}
.loomstats{max-width:none;padding:10px 0 0}
.loomstats .ls .v{font-size:1.5rem}
.scan-nowline{max-width:none;margin:9px auto 0}
.scan-halt.show{max-width:none}
/* Fates feed is a single auto-updating line: the trail (two faded prior lines)
   costs ~3 rows the scan view can't spare, so the three-act cards stay below the
   fold. The current line still flashes on every deal — the live signal is kept,
   only the backlog is dropped. JS still demotes into #actTrail; it's just hidden. */
.activitywrap{max-width:none;margin:9px 0 0;padding:9px 16px}
.activitywrap .lh{margin-bottom:5px}
.acttrail{display:none}
.scan-stage-wrap{max-width:none;margin:12px 0 0;flex-direction:row;gap:10px}
.scan-stage-wrap .sstage{flex:1;padding:10px 14px;gap:11px}
.sstage .stat{display:none}
.scan-tip{display:none}
#scanDone{margin-top:14px!important}
@media(max-width:760px){.scan-stage-wrap{flex-direction:column}#loom{height:300px}}

/* ══════════════════════════ SCAN DETAIL ══════════════════════════ */
.scan-det-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}
.scan-det-thread{padding:14px 16px!important;cursor:pointer}
.scan-det-thread:hover{border-color:var(--thread-soft)}
#v-scan-detail.active{max-width:none}

/* ══════════════════════════ INSIGHTS FEED & DETAIL ══════════════════════════ */

/* insight cards on the feed */
.ins-card{display:flex;flex-direction:column;padding:14px 16px!important}
.ins-card-top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:5px}
.ins-card-num{font-size:.6rem;color:var(--muted)}
.ins-card-label{font-size:1.15rem;line-height:1.2;letter-spacing:-.02em;min-height:2.4em}
.ins-card-prose{margin:5px 0 0;color:var(--muted);line-height:1.45;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;min-height:4.35em}
.ins-card-foot{margin-top:auto;padding-top:12px}
.ins-card-pending{opacity:.85}
/* Living-memory cards: quieter than earned cards; the change line is accented. */
.ins-card-living{opacity:.92}
.ins-card-change{color:var(--bone);border-left:2px solid var(--thread-soft);padding-left:10px}

/* Cross-run state badge: at a glance, is this theme newly generated, seen-before-
   and-strengthened, or seen-before-and-steady? Green=new, gold=strengthened,
   muted=steady — echoed by a matching left-edge accent on the card. */
.ins-state{display:inline-flex;align-items:center;gap:5px;flex-shrink:0;font-family:var(--font-body);font-weight:500;text-transform:uppercase;letter-spacing:.07em;font-size:.58rem;padding:3px 9px;border-radius:20px;border:1px solid var(--line);white-space:nowrap}
.ins-state-new{color:var(--bamboo);border-color:var(--bamboo-dim);background:rgba(70,176,131,.1)}
.ins-state-strengthened{color:var(--thread);border-color:var(--thread-soft);background:rgba(201,162,75,.1)}
.ins-state-steady{color:var(--muted);border-color:var(--line)}
.ins-state-card-new{border-left:2px solid var(--bamboo)}
.ins-state-card-strengthened{border-left:2px solid var(--thread)}
.ins-state-card-steady{border-left:2px solid var(--line)}

/* insight detail */
.ins-dt-header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-top:16px;flex-wrap:wrap}
.ins-dt-section .ins-dt-sec-head{display:flex;align-items:center;gap:8px}
.ins-dt-sec-head svg{width:15px;height:15px;flex-shrink:0;color:var(--thread)}
.ins-dt-sec-head .caps{font-size:.6rem}
.ins-dt-no-prose{opacity:.7}

/* deals inside insight detail */
.ins-deal-row{padding:10px 0;border-bottom:1px solid var(--line);cursor:pointer}
.ins-deal-row:last-child{border-bottom:none}
.ins-deal-row:hover{background:rgba(255,255,255,.018)}
.ins-deal-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:4px}
.ins-deal-val{margin-left:auto;font-family:var(--font-body);font-feature-settings:var(--tnum);font-variant-numeric:tabular-nums;color:var(--thread);font-size:.85rem}
.ins-deal-title{color:var(--bone)}

/* memory stats grid */
.ins-mem-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:4px}
.ins-mem-stat{display:flex;flex-direction:column;gap:2px}
.ins-mem-stat b{font-size:1.5rem;font-family:var(--font-display);font-weight:500;color:var(--bone)}
.ins-mem-stat span{font-size:.65rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.ins-mem-stat.live b{color:var(--bamboo)}

/* multi-run insights feed layout */
.ins-feed{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px;align-items:stretch}
/* Keep the anchor (deal) cell compact, and give the rationale plenty of width
   so it stops wrapping into tall blocks. */
/* Fixed layout so columns respect the card width and the rationale wraps
   inside it instead of pushing the table past the card's right edge.
   A touch smaller + tighter padding so eight columns fit cleanly. */
   The rationale moved into a click-to-expand drawer; the freed column now
   carries provenance (where the theme is seen + where the anchor was found). */
.wl-table{table-layout:fixed;font-size:.8rem}
.wl-table th,.wl-table td{padding:.5rem .5rem}
/* Eight columns — the "Seen in" scope moved into the drawer, and its width was
   redistributed so name, theme and anchor read without cramping. */
.wl-table th:nth-child(1),.wl-table td:nth-child(1){width:4%}    /* # */
.wl-table th:nth-child(2),.wl-table td:nth-child(2){width:21%}   /* name */
.wl-table th:nth-child(3),.wl-table td:nth-child(3){width:9%}    /* ticker */
.wl-table th:nth-child(4),.wl-table td:nth-child(4){width:11%}   /* score */
.wl-table th:nth-child(5),.wl-table td:nth-child(5){width:17%}   /* theme */
.wl-table th:nth-child(6),.wl-table td:nth-child(6){width:22%}   /* anchor */
.wl-table th:nth-child(7),.wl-table td:nth-child(7){width:11%}   /* status */
.wl-table th:nth-child(8),.wl-table td:nth-child(8){width:5%}    /* expand */
/* Compact columns must never wrap: ranks, tickers, scores and the status pill. */
.wl-table td:nth-child(1),.wl-table td:nth-child(3),.wl-table td:nth-child(4),.wl-table td:nth-child(7){white-space:nowrap}
/* One chip system for the whole watchlist. Status, scope, source and
   fundamentals share a single radius, padding and rhythm so the surface reads
   as one language regardless of which chips a given candidate carries. Colour
   and iconography still differentiate — geometry no longer does. */
.wl-table .pill,.wl-table .srcbadge,.wl-drawer .pill,.wl-drawer .srcbadge,.wl-scope{
  font-size:.56rem;letter-spacing:.07em;padding:3px 8px;border-radius:5px;white-space:nowrap;line-height:1.5}
.wl-anchor{max-width:300px;overflow-wrap:break-word;word-break:break-word}
.wl-name{font-weight:500}

/* A whole row is the hit target; the chevron just signals it.
   Middle-align every cell so the row reads as one fixed line regardless of how
   tall its content grows — a wrapping name or a two-chip "Seen in" no longer
   drags the rest of the row to the top. */
.wl-row{cursor:pointer}
.wl-row td{transition:background .18s var(--ease);vertical-align:middle}
.wl-row.open td{background:rgba(201,162,75,.05)}
.wl-exp{text-align:center;color:var(--muted-dim)}
.wl-chev{transition:transform .25s var(--ease),color .18s var(--ease);transform-origin:center}
.wl-row:hover .wl-chev{color:var(--thread)}
.wl-row.open .wl-chev{transform:rotate(180deg);color:var(--thread)}

/* "Seen in" scope chip — lives in the drawer's facts panel. */
.wl-scope{display:inline-flex;align-items:center;font-family:var(--font-body);font-weight:500;text-transform:uppercase;border:1px solid}
.wl-scope.both{color:var(--thread);border-color:var(--thread-soft);background:rgba(201,162,75,.1)}
.wl-scope.public{color:var(--muted);border-color:var(--line)}
.wl-scope.none{color:var(--muted-dim);border-color:var(--line);border-style:dashed}

/* The drawer row: a CSS-grid height animation (0fr → 1fr) keeps it interruptible
   and collapses fully, padding and all, when closed. */
.wl-detail td{padding:0;border-bottom:0}
.wl-drawer{display:grid;grid-template-rows:0fr;transition:grid-template-rows .3s var(--ease)}
.wl-detail.open .wl-drawer{grid-template-rows:1fr}
.wl-detail.open td{border-bottom:1px solid var(--line)}
.wl-drawer-in{overflow:hidden;min-height:0}
.wl-draw-grid{display:grid;grid-template-columns:1.7fr 1fr;gap:26px;padding:16px 18px 18px;background:rgba(255,255,255,.018);border-left:2px solid var(--thread-soft)}
/* Grid children default to min-width:auto, so one long unbroken string (a
   tweet excerpt, a URL) blows the track out past the viewport and crushes the
   other column. min-width:0 keeps every track honest; long values wrap inside
   their card instead of stretching it. */
.wl-why-col,.wl-facts{min-width:0}
.wl-dlabel{font-family:var(--font-body);font-weight:500;font-size:.6rem;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);margin-bottom:6px}
.wl-why-text{margin:0;color:var(--bone);line-height:1.55;text-wrap:pretty}
/* A hairline sets the descriptive "Business" prose apart from the analytical
   "Why it's here" read above it. */
.wl-biz-block{margin-top:16px;padding-top:16px;border-top:1px solid var(--line)}
.wl-biz{margin:0 0 4px;color:var(--muted);line-height:1.5;font-size:.82rem;text-wrap:pretty}
/* Fundamentals read as small metric cards: a muted-gold label over a bright,
   larger value, so the numbers carry the weight and the panel has some colour. */
.wl-fund-grid{display:flex;flex-wrap:wrap;gap:8px}
.wl-fund{display:inline-flex;flex-direction:column;align-items:flex-start;gap:2px;border:1px solid var(--line);border-radius:7px;padding:7px 11px;background:rgba(201,162,75,.04);white-space:normal}
.wl-fund .fk{font-family:var(--font-body);font-weight:500;font-size:.52rem;text-transform:uppercase;letter-spacing:.09em;color:var(--thread-soft)}
.wl-fund .fv{font-family:var(--font-body);font-weight:500;font-size:.9rem;color:var(--bone);font-feature-settings:var(--tnum);font-variant-numeric:tabular-nums}
.wl-open{margin-top:14px}
/* Provenance & signals panel: a contained card that sizes to its content
   (align-self:start) rather than stretching to the rationale's full height. */
.wl-facts{display:flex;flex-direction:column;gap:11px;align-self:start;border:1px solid var(--line);border-radius:8px;padding:14px 16px;background:rgba(255,255,255,.015)}
.wl-fact{display:flex;flex-direction:column;gap:5px;min-width:0}
.wl-fact .k{font-family:var(--font-body);font-weight:500;font-size:.56rem;text-transform:uppercase;letter-spacing:.1em;color:var(--muted-dim)}
.wl-fact .v{font-size:.82rem;color:var(--bone);display:flex;align-items:center;gap:7px;flex-wrap:wrap;min-width:0;overflow-wrap:anywhere}
.warn-c{color:var(--rumored)}
/* Corroboration details: one itemized section. Each item is a row — kind chip
   (+ priority tag when it earns attention), the evidence text (wrapping —
   never widening — its card), then a quiet source/date caption. Chips share
   the watchlist chip geometry; the excerpt uses text-wrap:pretty so a long
   tweet reads as prose, not debris. */
.corr-item{display:flex;flex-direction:column;gap:3px;min-width:0}
.corr-item + .corr-item{margin-top:7px}
.corr-line{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.corr-kind{display:inline-flex;align-items:center;font-family:var(--font-body);font-weight:500;font-size:.56rem;letter-spacing:.07em;text-transform:uppercase;padding:3px 8px;border-radius:5px;line-height:1.5;white-space:nowrap;color:var(--bamboo);border:1px solid var(--bamboo-dim);background:rgba(70,176,131,.08)}
.corr-pri{font-family:var(--font-body);font-weight:500;font-size:.54rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.corr-pri.hot{color:var(--rumored)}
.corr-text{font-size:.8rem;line-height:1.5;color:var(--bone);text-wrap:pretty;overflow-wrap:anywhere;min-width:0}
a.corr-text{color:var(--bamboo);text-decoration:none}
a.corr-text:hover{text-decoration:underline}
.corr-meta{font-size:.68rem;color:var(--muted-dim)}
/* "+N more" folds behind a native details element — enter soft, exit softer. */
.corr-more summary{cursor:pointer;list-style:none;font-size:.68rem;color:var(--muted);padding:2px 0}
.corr-more summary::-webkit-details-marker{display:none}
.corr-more summary:hover{color:var(--bone)}
.corr-more[open] summary{margin-bottom:7px}
@media (max-width:760px){.wl-draw-grid{grid-template-columns:1fr;gap:16px}}
@media (prefers-reduced-motion:reduce){.wl-drawer{transition:none}.wl-chev{transition:none}}
.ins-feed.ins-earlier{opacity:.75}
.ins-earlier-divider{display:flex;align-items:center;gap:10px}
.ins-earlier-divider::before,.ins-earlier-divider::after{content:"";flex:1;height:1px;background:var(--line)}

/* watchlist rows in insight detail — rich card layout */
.ins-watch-row{padding:10px 0;border-bottom:1px solid var(--line)}
.ins-watch-row:last-child{border-bottom:none}
.ins-watch-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ins-watch-rank{font-size:.6rem;color:var(--muted);min-width:18px}
.ins-watch-score{margin-left:auto}

/* living-insight changelog on the insight detail page */
.ins-changelog{margin:14px 0 22px;padding:14px 16px;border:1px solid var(--line);border-left:2px solid var(--thread-soft);border-radius:8px;background:var(--panel)}
.ins-changelog .caps{margin-bottom:8px}
.ins-changelog ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px}
.ins-changelog li{display:flex;align-items:baseline;gap:10px;font-size:.84rem;color:var(--muted);line-height:1.4}
.ins-changelog .cl-when{flex-shrink:0;color:var(--muted-dim);font-size:.72rem;min-width:5.5em}
.ins-changelog .cl-kind{flex-shrink:0;font-weight:500;text-transform:uppercase;letter-spacing:.06em;font-size:.6rem;min-width:7.5em}
.ins-changelog li.cl-emerged .cl-kind{color:var(--bamboo)}
.ins-changelog li.cl-strengthened .cl-kind{color:var(--thread)}
.ins-changelog li.cl-steady .cl-kind{color:var(--muted)}
.ins-changelog .cl-sum{color:var(--bone)}

/* "On the radar": names the embedding map places near a theme, no deal named them */
.ins-adjacent{margin:14px 0 6px;padding:14px 16px;border:1px solid var(--line);border-left:2px solid var(--bamboo-dim);border-radius:8px;background:var(--panel)}
.ins-adjacent .caps{margin-bottom:10px}
.ins-adj-grid{display:flex;flex-wrap:wrap;gap:8px}
.ins-adj{display:inline-flex;align-items:baseline;gap:6px;padding:5px 10px;border:1px solid var(--line);border-radius:6px;background:var(--ink-2);font-size:.82rem;color:var(--muted)}
.ins-adj b{color:var(--bamboo);font-weight:500;font-feature-settings:var(--tnum)}
.ins-adj i{color:var(--muted-dim);font-style:normal;font-size:.7rem}

/* ════════════════ TYPOGRAPHY POLISH ════════════════
   Headings balance their line lengths (no lonely last word); body prose avoids
   single-word orphans. Progressive enhancement — ignored by older engines, and
   skips elements that single-line-truncate (those keep white-space:nowrap). */
.hero h1,h1.title,.sect h2,.bigcta h2,h2.sec,.fate h3,.get h4,
.modal .box h3,.empty .big,.ins-card-label,.deal .actor,.threadcard .tc-title{text-wrap:balance}
.standfirst,.lead,.hero .sub,.sect .lede,.fate p,.get p,.trust .t p,
.ins-card-prose,.callout,.note{text-wrap:pretty}
