/* tokens.css */
/* Ducky design tokens: the one palette for every page (app shell, public pages, preview pages) and for Storybook
   (site/beta-ui loads this file through its preview head). Values: design-system/ducky-beta-ui/MASTER.md.
   Every template links this stylesheet first, so the first paint already has the final colours; no script switches
   palettes. Light is the default; dark follows the OS unless [data-theme=light]; an explicit [data-theme=dark]
   (Telegram's colour scheme, Storybook's toolbar) wins. Inside the Telegram Mini App, app.css maps Telegram's
   themeParams onto the canvas/paper/ink tokens below. */
@font-face{font-family:Manrope;src:url('/app-assets/c/fonts/Manrope-variable-d0639be4.481d49bfc147.woff2') format('woff2');font-style:normal;font-weight:200 800;font-display:swap}
@font-face{font-family:'Newsreader Variable';src:url('/app-assets/c/fonts/Newsreader-latin-wght-normal.62981321d9a3.woff2') format('woff2');font-style:normal;font-weight:200 800;font-display:swap}

:root,[data-theme=light]{
 color-scheme:light;
 --db-canvas:#e9ede6;--db-canvas-2:#eef1eb;--db-paper:#f7f6ef;--db-paper-2:#e3e9e2;--db-paper-strong:#fffefa;
 --db-ink:#172019;--db-muted:#566159;--db-faint:#748078;--db-line:#cbd2c9;--db-line-strong:#9ca99f;--db-control:#75837a;
 --db-accent:#4f8068;--db-accent-strong:#244b3c;--db-accent-soft:#dbe9df;--db-on-accent:#ffffff;
 --db-nav:#244b3c;--db-nav-hover:#2f5b49;--db-nav-strong:#19382d;--db-nav-ink:#fbf7e9;--db-nav-muted:#bed0c5;
 --db-duck:#e0b338;--db-duck-soft:#f4e8b9;--db-warm:#a95e2d;--db-warm-soft:#f1dfd0;--db-warning:#b54700;--db-caution:#8c5b00;
 --db-positive:#1d704f;--db-positive-soft:#dcece3;--db-negative:#a34139;--db-negative-soft:#f3e1de;
 --db-link:#205da8;--db-focus:#006edb;--db-context-soft:#e0eaf5;--db-skeleton:#dce2da;
 --db-overlay:rgb(23 32 25 / 58%);--db-shadow:0 18px 48px rgb(31 53 41 / 10%);
 --db-heat-neutral:#2b322d;--db-positive-fill:#1d704f;--db-negative-fill:#a34139;
 --db-series-1:#2f8a5c;--db-series-2:#3a6fc4;--db-series-3:#b8860b;--db-series-4:#00909f;--db-series-5:#cc5f33;--db-series-6:#8a5cc9;
 --db-series-other:#b4beb5;
 --db-logo-plate:#fffefa;--db-logo-plate-line:#cbd2c9;
}
@media(prefers-color-scheme:dark){
 :root:not([data-theme=light]){
  color-scheme:dark;
  --db-canvas:#151b17;--db-canvas-2:#19231d;--db-paper:#1e2721;--db-paper-2:#26332b;--db-paper-strong:#26322b;
  --db-ink:#f2f1e7;--db-muted:#b7c2ba;--db-faint:#8f9b92;--db-line:#39463d;--db-line-strong:#59685e;--db-control:#7d8c82;
  --db-accent:#7fbea0;--db-accent-strong:#b0dec5;--db-accent-soft:#253f32;--db-on-accent:#172019;
  --db-nav:#1b3b30;--db-nav-hover:#26503f;--db-nav-strong:#122a22;--db-nav-ink:#fbf7e9;--db-nav-muted:#b8ccc0;
  --db-duck:#efc94f;--db-duck-soft:#4a4122;--db-warm:#dfa06d;--db-warm-soft:#402f24;--db-warning:#f0883e;--db-caution:#d29922;
  --db-positive:#78c9a6;--db-positive-soft:#223b30;--db-negative:#f08c82;--db-negative-soft:#472c2b;
  --db-link:#8fbcff;--db-focus:#8ec5ff;--db-context-soft:#23364b;--db-skeleton:#303a33;
  --db-overlay:rgb(0 0 0 / 70%);--db-shadow:0 18px 48px rgb(0 0 0 / 24%);
  --db-series-1:#3a9a6b;--db-series-2:#5288d6;--db-series-3:#b5862c;--db-series-4:#1fa0ad;--db-series-5:#d6643c;--db-series-6:#9a72db;
  --db-series-other:#4a574e;
 --db-logo-plate:#ece9de;--db-logo-plate-line:#59685e;
 }
}
[data-theme=dark]{
 color-scheme:dark;
 --db-canvas:#151b17;--db-canvas-2:#19231d;--db-paper:#1e2721;--db-paper-2:#26332b;--db-paper-strong:#26322b;
 --db-ink:#f2f1e7;--db-muted:#b7c2ba;--db-faint:#8f9b92;--db-line:#39463d;--db-line-strong:#59685e;--db-control:#7d8c82;
 --db-accent:#7fbea0;--db-accent-strong:#b0dec5;--db-accent-soft:#253f32;--db-on-accent:#172019;
 --db-nav:#1b3b30;--db-nav-hover:#26503f;--db-nav-strong:#122a22;--db-nav-ink:#fbf7e9;--db-nav-muted:#b8ccc0;
 --db-duck:#efc94f;--db-duck-soft:#4a4122;--db-warm:#dfa06d;--db-warm-soft:#402f24;--db-warning:#f0883e;--db-caution:#d29922;
 --db-positive:#78c9a6;--db-positive-soft:#223b30;--db-negative:#f08c82;--db-negative-soft:#472c2b;
 --db-link:#8fbcff;--db-focus:#8ec5ff;--db-context-soft:#23364b;--db-skeleton:#303a33;
 --db-overlay:rgb(0 0 0 / 70%);--db-shadow:0 18px 48px rgb(0 0 0 / 24%);
 --db-series-1:#3a9a6b;--db-series-2:#5288d6;--db-series-3:#b5862c;--db-series-4:#1fa0ad;--db-series-5:#d6643c;--db-series-6:#9a72db;
 --db-series-other:#4a574e;
 --db-logo-plate:#ece9de;--db-logo-plate-line:#59685e;
}

/* The semantic names the site's stylesheets were written against. Each is a token above, never a second palette.
   Declared wherever a theme is set so a themed subtree (Storybook's decorator) resolves them against its own tokens. */
:root,[data-theme]{
 --bg:var(--db-canvas);--bg-2:var(--db-canvas-2);--surface:var(--db-paper);--surface-2:var(--db-paper-2);
 --border:var(--db-line);--control-border:var(--db-control);
 --text:var(--db-ink);--fg:var(--db-ink);--muted:var(--db-muted);--faint:var(--db-muted);
 --green:var(--db-positive);--red:var(--db-negative);--blue:var(--db-link);--orange:var(--db-warning);--yellow:var(--db-caution);
 --accent:var(--db-accent);--accent-2:var(--db-accent-strong);--accent-ink:var(--db-on-accent);
 --accent-text:var(--db-accent-strong);--accent-text-hover:var(--db-accent);--focus-ring:var(--db-focus);
 --neon:var(--db-accent);--bubble:var(--db-paper-strong);--bubble-ink:var(--db-ink);--phone:var(--db-nav-strong);
 --shadow:var(--db-shadow);
 --line:var(--db-line);--card:var(--db-paper);--heat-neutral:var(--db-heat-neutral);
}

:root{
 --db-font-ui:Manrope,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
 --db-font-display:'Newsreader Variable',Newsreader,Iowan Old Style,Baskerville,Georgia,serif;
 --db-font-ui-zh:'PingFang SC','Noto Sans SC','Microsoft YaHei',sans-serif;
 --db-font-display-zh:'Songti SC','Noto Serif SC',STSong,serif;
 --db-radius-sm:6px;--db-radius-md:10px;--db-radius-lg:16px;
 --db-space-1:4px;--db-space-2:8px;--db-space-3:12px;--db-space-4:16px;--db-space-5:24px;--db-space-6:32px;--db-space-7:48px;--db-space-8:64px;
 --db-control-h:44px;--db-control-lg:52px;--db-icon-target:44px;--db-surface-pad:24px;--db-surface-pad-compact:16px;
 --db-ease:cubic-bezier(.2,.7,.2,1);--db-fast:140ms;--db-medium:220ms;
}

/* site.css */
/* ducky-site — base styles for every page. Colours come from tokens.css (linked first by every template; light by
   default, dark via prefers-color-scheme or an explicit data-theme). No third-party CSS, no runtime fetches. */
:root {
  --font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "Noto Sans SC", sans-serif;
  --mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, "PingFang SC", "Microsoft YaHei", monospace;

  /* --- finding site.css:463 — radius scale (replaces the 19-value radius soup) --- */
  --r-sm: 8px;    /* chips, badges, .copy, small controls */
  --r-md: 12px;   /* inputs, buttons, compact cards */
  --r-lg: 16px;   /* cards, modals, sheets */
  --r-xl: 24px;   /* track card, big mockups */
  --r-pill: 999px;
  --radius: var(--r-lg);   /* legacy alias (was 14px → nearest token) */

  /* --- finding site.css:84 — type scale (replaces the ~30-size continuum) --- */
  --fs-2xs: .7rem;
  --fs-xs: .75rem;
  --fs-sm: .8rem;
  --fs-base: .9rem;
  --fs-md: 1rem;
  --fs-lg: 1.1rem;
  --fs-xl: 1.35rem;
  --fs-2xl: 1.9rem;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }
body {
  margin: 0;
  font-family: var(--font);
  font-size: 16px;
  line-height: 1.6;
  color: var(--text);
  background: var(--bg);
  overflow-x: clip; /* not `hidden`: that would make body the scroll container and break anchor jumps */
}
a { color: var(--blue); text-decoration: none; }
a:hover { text-decoration: underline; }
h1, h2, h3 { line-height: 1.2; margin: 0 0 .5em; letter-spacing: -.01em; }
h1 { font-size: clamp(2rem, 4.6vw, 3.1rem); font-weight: 800; }
h2 { font-size: clamp(1.5rem, 3vw, 2.1rem); font-weight: 750; }
h3 { font-size: var(--fs-lg); font-weight: 700; }
p { margin: 0 0 1em; }
small { font-size: .85em; }
.mono { font-family: var(--mono); font-feature-settings: "liga" 0; }
.mono-h2 { font-family: var(--mono); letter-spacing: 0; }
.center { text-align: center; }
.wrap { max-width: 1120px; margin: 0 auto; padding: 0 20px; }
.wrap.narrow { max-width: 760px; }
.section { padding: 72px 0; border-top: 1px solid var(--border); }
.lead { font-size: var(--fs-lg); color: var(--muted); max-width: 62ch; margin-bottom: 2rem; }
.caption, .footnote, .spec, .caveat, .tier-note, .under, .microfaq { color: var(--muted); font-size: var(--fs-base); }
.footnote { margin-top: 1.5rem; }

.skip { position: absolute; left: -999px; top: 0; background: var(--accent); color: var(--accent-ink); padding: 8px 12px; z-index: 100; }
.skip:focus { left: 8px; top: 8px; }

/* ---------- nav ---------- */
.nav { position: sticky; top: 0; z-index: 50; background: color-mix(in srgb, var(--bg) 82%, transparent); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); border-bottom: 1px solid var(--border); }
.nav-row { display: flex; align-items: center; gap: 20px; height: 58px; }
.brand { font-weight: 800; color: var(--text); font-size: var(--fs-md); white-space: nowrap; }
.brand:hover { text-decoration: none; }
.brand-duck { font-size: var(--fs-xl); vertical-align: -2px; }
.nav-links { display: flex; gap: 18px; margin-left: 8px; }
.nav-links a { color: var(--muted); font-size: var(--fs-base); }
.nav-links a:hover { color: var(--text); text-decoration: none; }
.nav-actions { margin-left: auto; display: flex; align-items: center; gap: 12px; }
.lang-toggle { color: var(--text); border: 1px solid var(--border); border-radius: var(--r-sm); padding: 4px 10px; font-size: var(--fs-sm); white-space:nowrap; flex-shrink:0; }
.brand-short { display:none; }
@media(max-width:480px) { .nav .brand-name { display:none; }.brand-short { display:inline; }.nav-actions .nav-signin { margin-right:0; } }
@media(max-width:360px) { .nav .brand-short { display:none; } }
.lang-toggle:hover { border-color: var(--accent); text-decoration: none; }
@media (max-width: 760px) {
  .nav-links { display: none; }                 /* hide ALL inline links incl. 战绩台账 — they overflowed the header */
  .nav-row { gap: 10px; height: 54px; }
  .nav-actions { gap: 8px; }
  .brand { font-size: var(--fs-base); gap: 6px; }
  .nav-actions .btn-sm { padding: 6px 10px; font-size: var(--fs-xs); white-space: nowrap; }
  .nav-actions .lang-toggle { padding: 5px 7px; }
  .nav-signin { margin-right: 0; }
}
@media (max-width: 380px) {
  .brand-name { display: none; }   /* very narrow: logo only, keep the CTAs */
}

/* ---------- buttons ---------- */
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 11px 18px; border-radius: var(--r-md); font-weight: 700; font-size: var(--fs-md); border: 1px solid transparent; cursor: pointer; white-space: nowrap; transition: transform .08s ease, background .15s ease; }
.btn:hover { text-decoration: none; transform: translateY(-1px); }
.btn-primary { background: var(--accent); color: var(--accent-ink); }
.btn-primary:hover { background: var(--accent-2); }
.btn-ghost { background: transparent; color: var(--text); border-color: var(--border); }
.btn-ghost:hover { border-color: var(--text); }
.btn-lg { padding: 14px 22px; font-size: var(--fs-md); }
.btn-sm { padding: 7px 12px; font-size: var(--fs-base); }
.cta-row { display: flex; flex-wrap: wrap; gap: 12px; margin: 1.4rem 0 1rem; }
.cta-row.center { justify-content: center; }

/* ---------- badges ---------- */
.badge { display: inline-block; align-self: flex-start; width: max-content; max-width: 100%; font-family: var(--mono); font-size: var(--fs-2xs); letter-spacing: .06em; padding: 2px 8px; border-radius: var(--r-sm); border: 1px solid; margin-bottom: 8px; vertical-align: middle; }
.badge-backtest { color: var(--yellow); border-color: var(--yellow); }
.badge-live { color: var(--green); border-color: var(--green); }
.badge-placeholder { color: var(--faint); border-color: var(--border); border-style: dashed; }
.receipt .badge + .badge { margin-top: -4px; }
.badge-inline { margin-bottom: 6px; }
.rate { font-weight: 700; }
.rate .n { font-weight: 400; color: var(--muted); font-size: .8em; }
.strip { font-size: var(--fs-sm); color: var(--muted); border-top: 1px dashed var(--border); padding-top: 12px; margin-top: 2rem; }

/* ---------- hero ---------- */
.hero { padding: 64px 0 56px; background: radial-gradient(1200px 500px at 80% -10%, color-mix(in srgb, var(--accent) 6%, transparent), transparent 60%), var(--bg); }
.hero-grid { display: grid; grid-template-columns: 1.15fr .85fr; gap: 48px; align-items: center; }
.eyebrow { color: var(--muted); font-size: var(--fs-sm); margin-bottom: 1rem; }
.sub { font-size: var(--fs-lg); color: var(--muted); max-width: 60ch; }
.try { color: var(--muted); font-size: var(--fs-base); }
.proof-strip { font-size: var(--fs-sm); color: var(--faint); border-top: 1px solid var(--border); padding-top: 12px; margin-top: 1.4rem; }
@media (max-width: 900px) { .hero-grid { grid-template-columns: 1fr; } .hero { padding-top: 40px; } }

/* CSS-only phone frame */
.hero-visual { position: relative; display: flex; justify-content: center; }
.phone { position: relative; width: 320px; max-width: 100%; background: var(--phone); border-radius: 44px; padding: 14px 12px 20px; box-shadow: var(--shadow), inset 0 0 0 2px #2b3340; }
.phone-notch { width: 110px; height: 26px; background: #000; border-radius: 0 0 18px 18px; margin: -14px auto 8px; }
.phone-head { display: flex; align-items: center; gap: 10px; padding: 6px 8px 10px; border-bottom: 1px solid #2b3340; color: #e6edf3; }
.phone-head-text { display: flex; flex-direction: column; line-height: 1.2; }
.phone-head-text small { color: #8b98a5; font-size: var(--fs-2xs); }
.avatar { width: 34px; height: 34px; border-radius: 50%; background: var(--accent); display: inline-flex; align-items: center; justify-content: center; font-size: var(--fs-lg); }
.phone-body { display: flex; flex-direction: column; gap: 10px; padding: 12px 4px 4px; background: linear-gradient(180deg, #0d1218, #0b0f14); border-radius: 0 0 30px 30px; min-height: 380px; }
.bubble { background: var(--bubble); color: var(--bubble-ink); border-radius: 14px 14px 14px 4px; padding: 10px 12px; font-family: var(--mono); font-size: var(--fs-xs); line-height: 1.5; border-left: 3px solid var(--border); box-shadow: 0 2px 8px rgba(0,0,0,.25); }
.phone .bubble { background: #1d2733; color: #dfe7ef; }
.bubble-insider { border-left-color: var(--green); }
.bubble-strategic { border-left-color: var(--blue); }
.bubble-kindex { border-left-color: var(--red); }
.bubble-line { word-break: break-word; }
.bubble-title { font-weight: 700; }
.bubble-quote { margin-top: 4px; font-style: italic; }
.bubble-cta { margin-top: 6px; color: var(--faint); }
.bubble-ts { display: block; text-align: right; font-size: var(--fs-2xs); color: #8b98a5; margin-top: 4px; }
.duck-peek { position: absolute; right: 2%; top: -26px; font-size: 3rem; transform: rotate(-12deg); filter: drop-shadow(0 4px 8px rgba(0,0,0,.4)); }

/* ---------- receipts ---------- */
.receipt-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr)); gap: 18px; }
.receipt { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 20px; display: flex; flex-direction: column; position: relative; }
.receipt-win { border-color: color-mix(in srgb, var(--green) 40%, var(--border)); }
.receipt-loss { border-color: color-mix(in srgb, var(--red) 55%, var(--border)); background: color-mix(in srgb, var(--red) 6%, var(--surface)); }
.receipt-kindex { border-color: color-mix(in srgb, var(--yellow) 50%, var(--border)); grid-column: span 1; }
.receipt h3 { font-size: var(--fs-md); margin-bottom: 2px; }
.receipt-meta { color: var(--muted); font-size: var(--fs-sm); margin-bottom: 10px; }
.receipt-ret { font-size: 2rem; font-weight: 800; margin: 0 0 6px; line-height: 1; }
.receipt-ret.pos { color: var(--green); }
.receipt-ret.neg { color: var(--red); }
.receipt-body { font-size: var(--fs-md); margin-bottom: .6rem; }
.receipt-foot { color: var(--muted); font-size: var(--fs-sm); }
.receipt-links { margin-top: auto; display: flex; flex-wrap: wrap; gap: 10px; font-size: var(--fs-sm); padding-top: 10px; border-top: 1px dashed var(--border); align-items: center; }
.receipt-links a.na { color: var(--faint); pointer-events: none; text-decoration: line-through; }
.copy { font: inherit; font-family: var(--mono); font-size: var(--fs-xs); color: var(--muted); background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--r-sm); padding: 3px 8px; cursor: pointer; margin-left: auto; }
.copy:hover { color: var(--text); }
.copy.done { color: var(--green); border-color: var(--green); }
.receipt-pair { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-bottom: 12px; }
.pane { height: 78px; border-radius: var(--r-sm); border: 1px solid var(--border); background: var(--surface-2); display: flex; align-items: flex-end; padding: 6px 8px; font-family: var(--mono); font-size: var(--fs-2xs); color: var(--muted); position: relative; overflow: hidden; }
.pane-alert { color: var(--red); font-weight: 700; }
.spark { position: absolute; left: 8px; right: 8px; bottom: 26px; height: 32px; background: linear-gradient(90deg, transparent 0 35%, color-mix(in srgb, var(--green) 45%, transparent) 35% 36%, transparent 36%), linear-gradient(to top right, transparent 49%, var(--green) 50%, transparent 51%); opacity: .9; }
.honesty { margin-top: 22px; background: var(--surface-2); border: 1px solid var(--border); border-left: 4px solid var(--faint); border-radius: var(--r-md); padding: 16px 18px; color: var(--muted); font-size: var(--fs-base); }
.honesty p { margin-bottom: .5rem; }

/* ---------- feed ---------- */
.feed-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
@media (max-width: 900px) { .feed-grid { grid-template-columns: 1fr; } }
.feed-item .spec { font-size: var(--fs-xs); margin-bottom: 10px; }
.feed-item .bubble { font-size: var(--fs-sm); }
.guardrail { margin-top: 1.5rem; color: var(--muted); font-size: var(--fs-base); border-left: 3px solid var(--border); padding-left: 12px; }

/* ---------- kindex ---------- */
.kindex-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; margin-bottom: 28px; align-items: start; }
.kindex-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
@media (max-width: 800px) { .kindex-grid, .kindex-cols { grid-template-columns: 1fr; } }
.ladder-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px; }
.band { padding: 12px 14px; border-radius: var(--r-md); border: 1px solid var(--border); background: var(--surface); border-left-width: 5px; font-family: var(--mono); font-size: var(--fs-base); }
.band-1 { border-left-color: var(--green); }
.band-2 { border-left-color: var(--yellow); }
.band-3 { border-left-color: var(--orange); }
.band-4 { border-left-color: var(--red); background: color-mix(in srgb, var(--red) 8%, var(--surface)); }
.backtest-box { background: var(--surface); border: 1px solid color-mix(in srgb, var(--yellow) 50%, var(--border)); border-radius: var(--radius); padding: 18px 20px; }
.bt-line { font-size: var(--fs-base); }
.bt-stop { font-size: var(--fs-base); color: var(--orange); margin-bottom: 0; }
.checks, .crosses { padding-left: 0; list-style: none; }
.checks li, .crosses li { position: relative; padding-left: 26px; margin-bottom: 8px; }
.checks li::before { content: "✓"; position: absolute; left: 0; color: var(--green); font-weight: 700; }
.crosses li::before { content: "✕"; position: absolute; left: 0; color: var(--red); font-weight: 700; }
.caveat { border-left: 3px solid var(--yellow); padding-left: 12px; }

/* ---------- boards ---------- */
.tile { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); padding: 16px; }
.tile h3 { font-size: var(--fs-md); }
.tile p { color: var(--muted); font-size: var(--fs-base); margin: 0; }

/* ---------- DM analyst ---------- */
.chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 1rem; }
.chip { font-family: var(--mono); font-size: var(--fs-sm); background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--r-pill); padding: 5px 12px; }
.kv { display: grid; grid-template-columns: max-content 1fr; gap: 6px 16px; margin: 0 0 1.2rem; font-size: var(--fs-base); }
.kv dt { color: var(--muted); font-weight: 600; }
.kv dd { margin: 0; }

/* ---------- local ---------- */
.stat { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); padding: 16px; display: flex; flex-direction: column; gap: 6px; }
.stat b { font-size: var(--fs-md); color: var(--accent); word-break: break-word; }
.stat span { color: var(--muted); font-size: var(--fs-base); }
.promises ol { padding-left: 1.2rem; }
.promises li { margin-bottom: 8px; font-weight: 600; }
.thin { border-left: 3px solid var(--faint); padding-left: 14px; color: var(--muted); }

/* ---------- pricing ---------- */
.billing-toggle { display: inline-flex; border: 1px solid var(--border); border-radius: var(--r-md); overflow: hidden; margin-bottom: 20px; }
.billing-toggle button { font: inherit; font-family: var(--mono); font-size: var(--fs-sm); background: transparent; color: var(--muted); border: 0; padding: 8px 16px; cursor: pointer; }
.billing-toggle button.on { background: var(--accent); color: var(--accent-ink); font-weight: 700; }
.tiers { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 16px; align-items: stretch; }
@media (max-width: 1000px) { .tiers { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 600px) { .tiers { grid-template-columns: 1fr; } .tier-signal { order: -1; } }
.tier { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 20px; display: flex; flex-direction: column; gap: 6px; }
.tier-signal { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent) inset; }
.tier h3 { font-size: var(--fs-lg); margin-bottom: 0; }
.price { font-size: var(--fs-2xl); font-weight: 800; margin: 0; line-height: 1.2; }
.price small { font-size: var(--fs-base); font-weight: 500; color: var(--muted); }
.price .save { font-style: normal; font-size: var(--fs-2xs); color: var(--green); font-weight: 600; margin-left: 4px; }
.price-note { font-size: var(--fs-2xs); color: var(--muted); margin: 0; }
.tiers[data-billing-mode="annual"] .price-monthly { display: none; }
.tiers[data-billing-mode="monthly"] .price-annual { display: none; }
.tier-pos { color: var(--text); font-weight: 600; margin: 4px 0 8px; }
.tier-rows { margin: 0 0 14px; font-size: var(--fs-base); }
.tier-rows dt { color: var(--faint); font-family: var(--mono); font-size: var(--fs-2xs); letter-spacing: .06em; text-transform: uppercase; margin-top: 8px; }
.tier-rows dd { margin: 2px 0 0; color: var(--muted); }
.roadmap-item { display: inline-block; margin-top: 4px; color: var(--faint); }
.tier .btn { margin-top: auto; }
.tier-alt { font-size: var(--fs-xs); text-align: center; margin-top: 8px; }
.picker { margin-top: 24px; background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--r-md); padding: 18px 20px; }
.picker ul { margin: 0 0 .8rem; padding-left: 1.2rem; }
.picker li { margin-bottom: 4px; }
.same-ledger { margin: 0; font-weight: 600; }
.under { margin-top: 1.2rem; }

/* ---------- final band / disclaimer anchor ---------- */
.disclaimer-anchor { padding: 24px 0 40px; }
.disclaimer-anchor .strip { margin-top: .6rem; }

/* ---------- footer ---------- */
.footer { border-top: 1px solid var(--border); background: var(--bg-2); padding: 40px 0 96px; }
.footer-disclaimer { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; font-size: 13px; line-height: 1.55; color: var(--muted); }
@media (max-width: 800px) { .footer-disclaimer { grid-template-columns: 1fr; } }
.footer-disclaimer p { margin-bottom: .6em; }
.footer-lines { color: var(--text); opacity: .85; }
.footer-row { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 12px; margin-top: 24px; padding-top: 16px; border-top: 1px dashed var(--border); font-size: var(--fs-sm); color: var(--faint); }
.footer-links { display: flex; flex-wrap: wrap; gap: 14px; }
.footer-links a { color: var(--muted); }

/* ---------- disclaimer / 404 pages ---------- */
.page-disclaimer h2 { font-size: var(--fs-xl); margin-top: 2rem; }
/* /credits/ (templates/credits.html): one line per picture — what it shows, then author · licence · source. */
.credits-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 330px), 1fr)); gap: 0 24px;
  margin: 0; padding: 0; list-style: none; }
.credits-list li { display: grid; align-content: start; gap: 2px; min-width: 0; padding: 8px 0;
  border-bottom: 1px solid var(--db-line); overflow-wrap: anywhere; }
.credits-list strong { font-size: 15px; line-height: 21px; font-weight: 650; }
.credits-meta { font-size: 13px; line-height: 19px; color: var(--db-muted); }
.credits-meta a { color: var(--db-link); }
.credits-trademarks { margin-top: 2rem; }
.page-404 { padding: 96px 0; }
.big-duck { font-size: 4rem; margin: 0; }

/* Shared transparent duck head, including its tuft. */
.avatar-mark { display: inline-block; width: 28px; height: 28px; border-radius: 0; object-fit: contain; vertical-align: middle; background: transparent; box-shadow: none; }
.brand .avatar-mark { margin-right: 4px; }
.avatar-md { width: 34px; height: 34px; }
.avatar-peek { position: absolute; right: 2%; top: -34px; width: 76px; height: 76px; transform: rotate(-8deg); box-shadow: 0 0 0 3px color-mix(in srgb, var(--neon) 75%, transparent), 0 0 28px 6px color-mix(in srgb, var(--neon) 45%, transparent), 0 10px 24px rgba(0,0,0,.45); z-index: 2; }
@media (max-width: 900px) { .avatar-peek { top: -28px; width: 64px; height: 64px; } }
.mascot { display: block; margin: 0 auto; }
.mascot-lg { width: 160px; height: 160px; margin-bottom: 8px; filter: drop-shadow(0 0 18px color-mix(in srgb, var(--neon) 40%, transparent)); }

/* ---------- 🌊 liquidity receipt: build-time sparkline ---------- */
.receipt-liq { border-color: color-mix(in srgb, var(--blue) 50%, var(--border)); }
.liq-spark { margin: 0 0 12px; }
.liq-spark svg { display: block; width: 100%; height: auto; border: 1px solid var(--border); border-radius: var(--r-sm); background: var(--surface-2); }
.liq-area { fill: color-mix(in srgb, var(--blue) 18%, transparent); stroke: none; }
.liq-line { fill: none; stroke: var(--blue); stroke-width: 1.4; stroke-linejoin: round; stroke-linecap: round; vector-effect: non-scaling-stroke; }
.liq-th { stroke: var(--green); stroke-width: 1; stroke-dasharray: 3 3; opacity: .7; vector-effect: non-scaling-stroke; }
.liq-dot { fill: var(--green); stroke: var(--surface); stroke-width: 1.5; }
.liq-dot-halo { fill: color-mix(in srgb, var(--green) 35%, transparent); }
.liq-spark figcaption { font-size: var(--fs-2xs); color: var(--faint); margin-top: 4px; }
.receipt-ret small { font-size: var(--fs-sm); font-weight: 500; color: var(--muted); display: block; margin-top: 4px; }
.receipt-disc { font-size: var(--fs-2xs); color: var(--faint); }

/* ---------- "每天复盘 / Reviewed daily" strip under the receipts ---------- */
.reviewed { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin-top: 18px; padding: 12px 16px; border: 1px solid color-mix(in srgb, var(--green) 45%, var(--border)); border-radius: var(--r-md); background: color-mix(in srgb, var(--green) 7%, var(--surface)); font-size: var(--fs-base); }
.reviewed b { color: var(--text); }
.reviewed span:not(.reviewed-pulse) { color: var(--muted); }
.reviewed-pulse { width: 10px; height: 10px; border-radius: 50%; background: var(--green); box-shadow: 0 0 0 0 color-mix(in srgb, var(--green) 60%, transparent); animation: pulse 2.4s ease-out infinite; flex: 0 0 auto; }
@keyframes pulse { 0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--green) 60%, transparent); } 70% { box-shadow: 0 0 0 10px transparent; } 100% { box-shadow: 0 0 0 0 transparent; } }
@media (prefers-reduced-motion: reduce) { .reviewed-pulse { animation: none; } }

/* --- UI polish 2026-08-30 --- */

.mono, .receipt-ret, .price { font-variant-numeric: tabular-nums; }
.receipt-ret { font-weight: 700; letter-spacing: -0.01em; }
.receipt-ret .tag { display: inline-block; font-size: var(--fs-2xs); font-weight: 600; letter-spacing: .04em; color: var(--muted); border: 1px solid var(--border); border-radius: var(--r-sm); padding: 2px 7px; vertical-align: middle; margin-left: 6px; }
.receipt-body { flex: 0 0 auto; }
.receipt-grid { grid-auto-rows: minmax(0, auto); align-items: stretch; }

/* examples library */
.examples .ex { border: 1px solid var(--border); border-radius: var(--r-lg); background: var(--surface); margin: 12px 0; overflow: hidden; }
.examples summary { list-style: none; cursor: pointer; display: grid; grid-template-columns: auto auto 1fr; gap: 12px; align-items: center; padding: 14px 18px; }
.examples summary::-webkit-details-marker { display: none; }
.examples summary::after { content: "+"; color: var(--muted); font-size: var(--fs-lg); justify-self: end; }
.examples details[open] summary::after { content: "−"; }
.examples .ex-emoji { font-size: var(--fs-xl); }
.examples .ex-title { font-weight: 700; font-size: var(--fs-md); }
.examples .ex-how { color: var(--muted); font-size: var(--fs-base); }
.examples .ex-body { padding: 4px 18px 18px; border-top: 1px solid var(--border); }
.examples .ex-grid { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: 18px; padding-top: 14px; }
.examples .ex-after { display: flex; flex-direction: column; gap: 6px; }
.examples .ex-after-num { font-size: var(--fs-2xl); font-weight: 700; margin: 2px 0; line-height: 1.1; }
.examples .ex-after-num small { display: block; font-size: var(--fs-xs); font-weight: 500; color: var(--muted); }
.examples .ex-after-rnow { margin: 0; font-size: var(--fs-sm); font-weight: 700; letter-spacing: -0.01em; }
.examples .ex-after-rnow.pos { color: var(--green); }
.examples .ex-after-rnow.neg { color: var(--red); }
.examples .ex-after-rnow small { color: var(--muted); font-weight: 500; margin-left: 6px; }
.examples .ex-after-txt { margin: 0; line-height: 1.55; }
.examples .muted { color: var(--muted); font-size: var(--fs-base); }
.bubble-user { background: #1f3b2f; color: #e8f5ee; border-left-color: var(--neon); border-radius: 14px 14px 4px 14px; margin-left: 20%; }
.receipt-grid { align-items: start; }
@media (max-width: 760px) { .examples summary { grid-template-columns: auto 1fr; } .examples .ex-how { grid-column: 1 / -1; } .examples .ex-grid { grid-template-columns: 1fr; } .bubble-user { margin-left: 0; } }

/* --- glossary (§13) --- */
abbr.term { text-decoration: underline dotted color-mix(in srgb, var(--neon) 70%, transparent); text-underline-offset: 3px; cursor: help; border: 0; }
abbr.term:hover, abbr.term:focus { background: color-mix(in srgb, var(--neon) 14%, transparent); border-radius: 3px; outline: none; }
.gl-backdrop { position: fixed; inset: 0; background: rgba(0,0,0,.55); opacity: 0; pointer-events: none; transition: opacity .18s; z-index: 60; }
.gl-sheet { position: fixed; left: 0; right: 0; bottom: 0; max-height: 78vh; overflow: auto; background: var(--surface); color: var(--text); border-top: 1px solid var(--border); border-radius: 16px 16px 0 0; padding: 16px 18px calc(18px + env(safe-area-inset-bottom)); transform: translateY(105%); transition: transform .22s ease; z-index: 61; box-shadow: 0 -10px 30px rgba(0,0,0,.4); }
@media (min-width: 760px) { .gl-sheet { left: auto; right: 24px; bottom: 24px; width: 420px; border-radius: var(--r-lg); border: 1px solid var(--border); } }
body.gl-open .gl-backdrop { opacity: 1; pointer-events: auto; } body.gl-open .gl-sheet { transform: translateY(0); }
.gl-head { display: flex; align-items: center; gap: 8px; } .gl-name { margin: 0; font-size: var(--fs-lg); flex: 1; }
.gl-lang, .gl-close { background: transparent; color: var(--muted); border: 1px solid var(--border); border-radius: var(--r-sm); padding: 4px 8px; cursor: pointer; font: inherit; }
.gl-short { margin: 10px 0 6px; font-size: var(--fs-md); } .gl-formula { color: var(--muted); font-size: var(--fs-sm); margin: 4px 0; } .gl-example { color: var(--muted); font-size: var(--fs-base); margin: 6px 0; } .gl-label { color: var(--green); }
.gl-long summary { cursor: pointer; color: var(--muted); font-size: var(--fs-sm); } .gl-long p { font-size: var(--fs-base); line-height: 1.55; }
.gl-see { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; } .gl-foot { color: var(--faint); font-size: var(--fs-xs); margin: 12px 0 0; }
.warn { color: var(--yellow); }
#basket-chart, .chart-box { min-height: 220px; }

/* --- landing redesign v2 (§5.3): nav track link, proof stats band, hero carousel, folded receipts, why/who strip --- */
.nav-links a.nav-strong { color: var(--accent-text); font-weight: 700; }
.nav-links a.nav-strong:hover { color: var(--accent-text-hover); }

.stats-band { padding: 26px 0; }
.stats-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; }
@media (max-width: 900px) { .stats-grid { grid-template-columns: repeat(2, 1fr); } }
.stat-tile { display: flex; flex-direction: column; gap: 4px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); padding: 14px 16px; color: var(--text); transition: transform .08s ease, border-color .15s ease; }
.stat-tile:hover { text-decoration: none; border-color: var(--accent); transform: translateY(-1px); }
.stat-tile b { font-size: var(--fs-xl); line-height: 1.2; font-variant-numeric: tabular-nums; }
.stat-tile b.pos { color: var(--green); }
.stat-tile > span { color: var(--muted); font-size: var(--fs-sm); line-height: 1.4; }

.hero-visual { flex-direction: column; align-items: center; }
.hero-slide { flex: 0 0 100%; min-width: 100%; scroll-snap-align: center; scroll-snap-stop: always; display: flex; justify-content: center; align-items: stretch; }

.track-card { width: 320px; max-width: 100%; background: var(--phone); border: 1px solid var(--border); border-radius: var(--r-xl); box-shadow: var(--shadow); padding: 20px 18px; display: flex; flex-direction: column; gap: 10px; color: #e6edf3; }
.track-card-head { font-weight: 700; font-size: var(--fs-base); margin: 0; }
.track-mini { margin: 0; }
.track-mini svg { display: block; width: 100%; height: auto; background: #0d0d0d; border: 1px solid var(--border); border-radius: var(--r-md); }
.eq-nav { fill: none; stroke: var(--green); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; vector-effect: non-scaling-stroke; }
.eq-spy { fill: none; stroke: #8b98a5; stroke-width: 1.4; stroke-dasharray: 4 3; vector-effect: non-scaling-stroke; }
.track-mini figcaption { font-size: var(--fs-2xs); color: #8b98a5; margin-top: 5px; }
.eq-nav-key { color: var(--green); }
.eq-spy-key { color: #8b98a5; }
.track-card-note { font-size: var(--fs-2xs); color: #8b98a5; margin: 0; }
.track-card .btn { margin-top: 4px; }

.ex-more { margin-top: 16px; border-top: 1px dashed var(--border); padding-top: 12px; }
.ex-more-title { font-family: var(--mono); font-size: var(--fs-2xs); letter-spacing: .08em; text-transform: uppercase; color: var(--faint); margin: 0 0 10px; }
.ex-more .receipt { margin-bottom: 10px; }
.ex-more .receipt:last-child { margin-bottom: 0; }
.ex-more .receipt h4 { margin: 0 0 2px; font-size: var(--fs-md); }
.receipt-row { padding: 14px 16px; }
.receipt-row-head { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; }
.receipt-row-head h4 { margin: 0; }
.receipt-row-head .badge { margin-bottom: 0; }
.receipt-row-head .receipt-meta { margin: 0; }
.receipt-row-head .receipt-ret { font-size: var(--fs-xl); margin: 0 0 0 auto; }
.receipt-row-head .receipt-ret small { display: inline; margin-top: 0; }
.receipt-row .receipt-body { margin: 6px 0 0; font-size: var(--fs-base); }
.receipt-row .receipt-links { margin-top: 10px; }

/* ── login v2: QR + password (§5.4) ─────────────────────────────────────────── */
.qr-block .qr-host { display: flex; justify-content: center; margin: 10px 0 4px; }
.qr-svg { width: 184px; height: 184px; background: #fff; padding: 8px; border-radius: var(--r-lg); display: block; }
.qr-meta { display: flex; flex-direction: column; gap: 8px; align-items: stretch; }
.login-h2 { font-size: 15px; margin: 0 0 2px; }
.pw-form { display: flex; flex-direction: column; gap: 8px; }
details.login-other { margin-top: 14px; }
details.login-other summary { cursor: pointer; color: var(--muted, #8b949e); font-size: 13px; }
.pwsec { margin-top: 18px; }

/* ── polish v2: rounder type, softer edges (owner feedback 2026-08-30) ─────── */
body { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; }
h1, h2, h3, .btn, .login-h2 { font-family: ui-rounded, var(--font); }
/* finding site.css:463 — the polish-v2 radius overrides (.input/.btn 14px, .card/.stat-tile 18px) that made
   the landing diverge from the app were removed; both now inherit the shared --r-* scale (buttons/inputs
   → --r-md, cards → --r-lg). */

/* ── copy v3 (2026-08-30): two-line hero, CTA microcopy, WHO strip, stats/pricing rework ── */
.hero-line2 { font-size: var(--fs-lg); font-weight: 600; color: var(--muted); margin: .15rem 0 .35rem; max-width: 52ch; }
.cta-note { font-size: 12px; line-height: 1.6; color: var(--faint); max-width: 56ch; margin-top: .55rem; }
.track-card-caption { font-size: var(--fs-xs); line-height: 1.5; color: #b7c2cc; margin: 0; }
.band-note { margin: 0 0 14px; color: var(--muted); font-size: var(--fs-base); max-width: 72ch; }
/* zh pricing: ¥ annual card sits in slot 2 and carries the highlight; the USD Signal card hands it over */
.lang-zh .tiers .tier-free { order: 1; }
.lang-zh .tiers .tier-cn { order: 2; }
.lang-zh .tiers .tier-signal { order: 3; }
.lang-zh .tiers .tier-pro { order: 4; }
.lang-zh .tier-signal { border-color: var(--border); box-shadow: none; }
.lang-zh .tier-cn { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent) inset; }

/* ── 信息差 edge line under the examples lead ─────────────────────────────── */
.examples .edge { margin: 4px 0 18px; padding: 12px 14px; border-left: 3px solid var(--accent);
  background: color-mix(in srgb, var(--accent) 7%, transparent); border-radius: 0 12px 12px 0;
  font-size: var(--fs-base); line-height: 1.6; color: var(--ink); }

/* ══════════════════════════════════════════════════════════════════════════════════════════════
   a11y + interaction polish (2026-08-30, CSS/UX cluster)
   ══════════════════════════════════════════════════════════════════════════════════════════════ */

/* finding app.css:87 — keyboard focus was styled on only .input and .hero-carousel. One consistent
   focus-visible ring on every interactive element (buttons, tabs, dots, links, summary), shared site + app. */
:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }
summary:focus-visible { outline-offset: 0; }

/* finding site.css:126 — long-form sentences (compliance strips, hero proof strip, backtest explanation)
   were set in JetBrains Mono, causing ransom-note CJK/latin mixing at tiny sizes. Reserve --mono for
   tickers/prices/timestamps; these sentence-level strips render in the sans stack (higher specificity than .mono). */
.strip, .proof-strip, .bt-line, .bt-stop { font-family: var(--font); }

/* finding site.css:413 — sub-44px tap targets. Grow hit areas; keep the visuals identical.
   Hero carousel dots stay a 9px dot but gain a ~45×29 transparent hit area (content-box padding). */
@media (pointer: coarse) {
  .copy, .btn-sm { min-height: 44px; }
}

/* ══════════════════════════════════════════════════════════════════════════════════════════════
   honesty / 最诚实的投资伴侣 — "我们故意不做什么" (templates/_partials/honesty.html)
   Positioning-through-refusal block above pricing. Uses the shared .section rhythm (72px) + .lead so
   it lines up with its siblings; orange = brand/actions (✕ chips, payoff accent), green/red stay data.
   ══════════════════════════════════════════════════════════════════════════════════════════════ */
.refuse-eyebrow { color: var(--accent); font-size: var(--fs-xs); letter-spacing: .08em; text-transform: uppercase; margin: 0 0 .5rem; }
.refuse-list { list-style: none; margin: 0 0 1.6rem; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
@media (max-width: 760px) { .refuse-list { grid-template-columns: 1fr; } }
.refuse-row { display: flex; gap: 14px; align-items: flex-start; background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-lg); padding: 16px 18px; }
.refuse-x { flex: 0 0 auto; width: 30px; height: 30px; display: inline-flex; align-items: center; justify-content: center; border-radius: var(--r-sm); font-weight: 800; font-size: var(--fs-md); line-height: 1; color: var(--accent); background: color-mix(in srgb, var(--accent) 14%, transparent); border: 1px solid color-mix(in srgb, var(--accent) 40%, var(--border)); }
.refuse-txt { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.refuse-txt b { color: var(--text); font-size: var(--fs-md); line-height: 1.35; }
.refuse-txt span { color: var(--muted); font-size: var(--fs-base); line-height: 1.55; }
.refuse-ledger-link { color: var(--accent); font-weight: 600; white-space: nowrap; }
.refuse-ledger-link:hover { color: var(--accent-2); }
.refuse-payoff { margin: 0; padding: 16px 18px; border-left: 3px solid var(--accent); background: color-mix(in srgb, var(--accent) 7%, var(--surface)); border-radius: 0 var(--r-md) var(--r-md) 0; font-size: var(--fs-lg); line-height: 1.6; color: var(--text); }
.refuse-payoff b { color: var(--accent); font-weight: 700; }

/* entrance: scroll-driven fade-up, progressive (only where supported) and reduced-motion-safe.
   Browsers without animation-timeline (older Telegram WebView) simply render the block visible. */
@keyframes refuse-in { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    .refuse-row, .refuse-payoff { animation: refuse-in linear both; animation-timeline: view(); animation-range: entry 0% cover 26%; }
  }
}

/* polish: footer links were the one link cluster with no hover feedback (nav-links, stat-tile, etc.
   all have one) — add the same muted→text lift for consistency. */
.footer-links a:hover { color: var(--text); }

/* ── redesign (owner brief, 2026-08-30): source chips, obvious tap-to-explain, live-demo motion, visual proof ──
   Palette rule (§5.3.3) held throughout: orange = actions & brand (chips, tap-to-explain, accent bars),
   green/red = market data (LIVE dot, gains). All motion is gated by prefers-reduced-motion. */

/* 1) source chips — the scannable row that replaced the dense acronym proof-strip (hero) */
.chip-src-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 1.5rem; border-top: 1px solid var(--border); padding-top: 1.1rem; }
.chip-src-lead { width: 100%; margin: 0 0 4px; font-size: var(--fs-sm); color: var(--faint); letter-spacing: .01em; }
.chip-src { display: inline-flex; align-items: center; gap: 6px; font: inherit; font-family: var(--font); font-size: var(--fs-sm); font-weight: 600; line-height: 1.2; color: var(--text); background: color-mix(in srgb, var(--accent) 8%, var(--surface)); border: 1px solid color-mix(in srgb, var(--accent) 34%, var(--border)); border-radius: var(--r-pill); padding: 7px 11px; cursor: pointer; transition: background .12s ease, border-color .12s ease, transform .08s ease; }
.chip-src:hover { background: color-mix(in srgb, var(--accent) 16%, var(--surface)); border-color: var(--accent); transform: translateY(-1px); text-decoration: none; }
.chip-src:active { transform: translateY(0); }
.chip-src:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }
.chip-src .chip-ico { font-size: 1.02em; line-height: 1; }
.chip-src .chip-q { display: inline-flex; align-items: center; justify-content: center; width: 15px; height: 15px; border-radius: 50%; font-size: .66em; font-weight: 800; color: var(--accent-ink); background: var(--accent); }
.chip-src.chip-plain { cursor: default; }
.chip-src.chip-plain:hover { background: color-mix(in srgb, var(--accent) 8%, var(--surface)); border-color: color-mix(in srgb, var(--accent) 34%, var(--border)); transform: none; }
@media (pointer: coarse) { .chip-src { min-height: 44px; padding: 9px 14px; } }

/* 2) obvious tap-to-explain — glossary jargon reads as tappable: orange dotted underline + superscript "?" */
abbr.term { text-decoration: underline dotted var(--accent); text-decoration-thickness: 1.5px; text-underline-offset: 3px; cursor: pointer; border: 0; }
abbr.term::after { content: "?"; font-size: .62em; font-weight: 800; color: var(--accent-text); vertical-align: super; line-height: 0; margin-left: 1px; }
abbr.term:hover, abbr.term:focus { background: color-mix(in srgb, var(--accent) 15%, transparent); border-radius: 3px; outline: none; }
abbr.term:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 1px; }

/* 3) live-demo feel — pulsing green LIVE dot on the top push + staggered bubble entrance (motion-gated) */
.phone-live { display: inline-block; width: 7px; height: 7px; margin-right: 5px; border-radius: 50%; background: var(--green); vertical-align: middle; box-shadow: 0 0 0 0 color-mix(in srgb, var(--green) 60%, transparent); animation: pulse 2.4s ease-out infinite; }
@keyframes heroBubbleIn { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
  .phone-live { animation: none; }
}

/* 4) more visual proof — stats band: glyph + thin accent bar + bolder number; example outcomes: accent bar */
.stat-ico { width: 20px; height: 20px; color: var(--accent); flex: 0 0 auto; }
.stat-tile.tile-pos .stat-ico { color: var(--green); }
.stat-tile b { font-size: clamp(1.4rem, 4.6vw, 1.75rem); font-weight: 800; letter-spacing: -0.01em; }
.stat-bar { height: 3px; width: 26px; border-radius: 2px; background: var(--accent); opacity: .85; }
.stat-tile.tile-pos .stat-bar { background: var(--green); }
.examples .ex-after-num { font-size: clamp(1.9rem, 6vw, 2.35rem); font-weight: 800; letter-spacing: -0.02em; padding-left: 10px; border-left: 3px solid currentColor; }
/* the landing doesn't load _data_style.html, so the global .pos/.neg colors never reach these return numbers —
   scope-color them here (green/red = market data, §5.3.3) so the number and its currentColor accent bar read as data. */
.examples .ex-after-num.pos { color: var(--green); }
.examples .ex-after-num.neg { color: var(--red); }

/* ── example caveats collapsed to one tap (novice sees the result first) ────── */
.ex-honest { margin-top: 6px; }
.ex-honest > summary { cursor: pointer; list-style: none; color: var(--faint); font-size: .82rem;
  padding: 4px 0; min-height: 32px; display: inline-flex; align-items: center; }
.ex-honest > summary::-webkit-details-marker { display: none; }
.ex-honest > summary:hover { color: var(--accent); }
.ex-honest[open] > summary { color: var(--muted); }
.ex-honest .ex-after-txt { margin-top: 6px; }

/* Scroll-driven entrance shared by the cards below (reduced-motion safe). */
@keyframes whydiff-in { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
/* ══════════════════════════════════════════════════════════════════════════════════════════════
   hero carousel slides 3 & 4 (§5.3.5): 本周前瞻 Week Ahead (sample) + 大盘总结/市场天气 (real regime).
   Same shell as .track-card so all four slides read as one deck. Dark in both themes (phone-mockup
   aesthetic, matching slides 1–2); no motion beyond the shared reduced-motion-safe carousel behavior.
   ══════════════════════════════════════════════════════════════════════════════════════════════ */
.mw-card { width: 320px; max-width: 100%; background: var(--phone); border: 1px solid var(--border); border-radius: var(--r-xl); box-shadow: var(--shadow); padding: 20px 18px; display: flex; flex-direction: column; gap: 12px; color: #e6edf3; }
.wa-head, .mw-head { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; font-weight: 700; font-size: var(--fs-base); margin: 0; }
.mw-note { margin: 0; font-size: var(--fs-2xs); color: #8b98a5; line-height: 1.5; }
.mw-asof { color: #8b98a5; font-size: var(--fs-2xs); font-weight: 400; }
.mw-rows { margin: 0; display: flex; flex-direction: column; gap: 9px; }
.mw-row { display: grid; grid-template-columns: 52px 1fr; gap: 12px; align-items: baseline; font-size: var(--fs-sm); }
.mw-row dt { margin: 0; color: #8b98a5; font-size: var(--fs-2xs); letter-spacing: .04em; }
.mw-row dd { margin: 0; color: #e6edf3; line-height: 1.4; }
.mw-wx { font-weight: 700; }
.mw-theme { color: #cdd6df; }

/* ── "我们是谁 / Who we are" (owner brief 2026-08-30): warm from-one-investor-to-another intro + the
   "one meal a month" price + goal, a FAIR competitor comparison ("为什么我们这样决定" — never names a
   competitor), and a clearly-marked KOL / 财经博主 roadmap teaser. Sits between honesty and pricing.
   §5.1 palette rule held: orange = brand/actions; green/red stay reserved for market data, so this
   positioning block uses the accent only. Shares the .section rhythm (72px) + .wrap.narrow. ── */
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

.whoweare .lead { margin-bottom: 1.6rem; }
.wwa-eyebrow { color: var(--accent); font-size: var(--fs-xs); letter-spacing: .08em; text-transform: uppercase; margin: 0 0 .5rem; }

/* two punch cards */
.wwa-punch { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin: 0 0 1.5rem; }
@media (max-width: 640px) { .wwa-punch { grid-template-columns: 1fr; } }
.wwa-punch-card { background: var(--surface); border: 1px solid var(--border); border-top: 3px solid var(--accent); border-radius: var(--r-lg); padding: 18px 20px; }
.wwa-punch-big { display: block; color: var(--accent); font-weight: 800; font-size: var(--fs-xl); line-height: 1.15; }
.wwa-punch-sub { display: block; color: var(--muted); font-size: var(--fs-base); line-height: 1.55; margin-top: 6px; }

/* stance quote */
.wwa-stance { margin: 0 0 2rem; padding: 16px 18px; border-left: 3px solid var(--accent); background: color-mix(in srgb, var(--accent) 7%, var(--surface)); border-radius: 0 var(--r-md) var(--r-md) 0; font-size: var(--fs-lg); line-height: 1.6; color: var(--text); }

/* fair comparison table */
.cmp { margin: 0 0 1.8rem; }
.cmp-eyebrow { color: var(--accent); font-size: var(--fs-xs); letter-spacing: .06em; text-transform: uppercase; margin: 0 0 .35rem; }
.cmp-lead { color: var(--muted); font-size: var(--fs-base); margin: 0 0 1rem; }
.cmp-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; border: 1px solid var(--border); border-radius: var(--r-lg); }
.cmp-table { width: 100%; border-collapse: collapse; font-size: var(--fs-base); min-width: 480px; }
.cmp-table th, .cmp-table td { text-align: left; padding: 12px 14px; vertical-align: top; line-height: 1.5; border-top: 1px solid var(--border); }
.cmp-table thead th, .cmp-table thead td { border-top: 0; font-size: var(--fs-sm); letter-spacing: .02em; }
.cmp-table tbody th[scope="row"] { color: var(--text); font-weight: 700; white-space: nowrap; width: 1%; }
.cmp-table .cmp-us { color: var(--text); background: color-mix(in srgb, var(--accent) 7%, transparent); }
.cmp-table thead .cmp-us { color: var(--accent); font-weight: 800; }
.cmp-table .cmp-them { color: var(--muted); }
.cmp-table thead .cmp-them { color: var(--faint); font-weight: 600; }
.cmp-foot { color: var(--muted); font-size: var(--fs-sm); line-height: 1.6; margin: .9rem 0 .3rem; }
.wwa-ledger-link { display: inline-flex; align-items: center; color: var(--accent); font-weight: 600; }
.wwa-ledger-link:hover { color: var(--accent-2); }
@media (pointer: coarse) { .wwa-ledger-link { min-height: 44px; } }

/* KOL / 财经博主 roadmap teaser — clearly not-live */
.wwa-kol { margin-top: .4rem; background: var(--surface); border: 1px solid var(--border); border-left: 4px solid var(--accent); border-radius: var(--r-lg); padding: 18px 20px; display: flex; flex-direction: column; gap: 8px; }
.wwa-kol-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.wwa-kol-head .badge { margin-bottom: 0; }
.wwa-kol-head b { color: var(--text); font-size: var(--fs-md); }
.wwa-kol-body { color: var(--muted); font-size: var(--fs-base); line-height: 1.6; margin: 0; }
.wwa-kol-note { color: var(--faint); font-size: var(--fs-sm); margin: 0; }

@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: view()) {
    .wwa-punch-card, .wwa-stance, .cmp-scroll, .wwa-kol { animation: whydiff-in linear both; animation-timeline: view(); animation-range: entry 0% cover 24%; }
  }
}

/* track-record: collapsible "how to read the insider rows" note — the core-advantage framing */
.insider-note { margin: 4px 0 14px; border: 1px solid var(--border); border-radius: 10px; padding: 8px 12px; background: color-mix(in srgb, var(--accent) 5%, transparent); }
.insider-note > summary { cursor: pointer; font-weight: 600; color: var(--text); }
.insider-note > p { margin: 8px 0 2px; line-height: 1.55; }

/* track-record: SEC-verified insider-conviction highlights band (distinct from the auto-ledger below) */
.insider-highlights { margin: 8px 0 22px; }
.ih-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 12px; margin-top: 10px; }
.ih-card { display: flex; flex-direction: column; gap: 5px; padding: 12px 14px; border: 1px solid var(--border); border-radius: 12px; background: color-mix(in srgb, var(--green, #3fb950) 6%, transparent); text-decoration: none; color: var(--text); transition: border-color .15s, transform .15s; }
.ih-card:hover { border-color: var(--green, #3fb950); transform: translateY(-1px); text-decoration: none; }
.ih-top { display: flex; align-items: baseline; justify-content: space-between; }
.ih-tk { font-size: var(--fs-lg); letter-spacing: .02em; }
.ih-ret { font-size: var(--fs-lg); font-variant-numeric: tabular-nums; }
.ih-ret.pos { color: var(--green, #3fb950); }
.ih-who { color: var(--text); font-size: 0.9em; }
.ih-buy { color: var(--muted); font-size: 0.82em; }

/* 财经博主 (finance creators) section */
.creators-view .cr-sub { color: var(--muted); margin: 22px 0 10px; font-size: var(--fs-base); }
.cr-grid { display: flex; flex-wrap: wrap; gap: 8px; }
.cr-chip { display: inline-flex; align-items: center; padding: 6px 12px; border: 1px solid var(--border); border-radius: 999px; background: color-mix(in srgb, var(--accent) 5%, transparent); color: var(--text); font-size: 0.9em; text-decoration: none; }
a.cr-chip:hover { border-color: var(--accent); text-decoration: none; }
.cr-chip.cr-skel { opacity: .5; }
.cr-feed { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr)); gap: 12px; }
.cr-post { border: 1px solid var(--border); border-radius: 12px; padding: 12px 14px; background: color-mix(in srgb, var(--accent) 4%, transparent); }
.cr-post-head { display: flex; align-items: baseline; flex-wrap: wrap; gap: 8px; }
.cr-who { color: var(--text); }
.cr-take { font-size: .8em; padding: 1px 8px; border-radius: 999px; }
.cr-take.cr-bull { color: var(--green, #3fb950); border: 1px solid color-mix(in srgb, var(--green,#3fb950) 45%, transparent); }
.cr-take.cr-bear { color: var(--red, #f85149); border: 1px solid color-mix(in srgb, var(--red,#f85149) 45%, transparent); }
.cr-take.cr-neutral { color: var(--muted); border: 1px solid var(--border); }
.cr-tks { color: var(--muted); font-size: .85em; }
.cr-sum { margin: 8px 0 6px; line-height: 1.55; color: var(--text); }
.cr-orig { font-size: .85em; color: var(--accent); }
.cr-disclaimer { margin: 14px 0 12px; font-size: .86em; line-height: 1.5; }

/* creators follow toggle — clear flip: followed = accent-filled, unfollowed = neutral outline */
button.cr-chip { cursor: pointer; transition: background .15s, border-color .15s, color .15s; }
button.cr-chip:not(.on) { background: transparent; }
button.cr-chip.on { background: var(--accent); border-color: var(--accent); color: var(--accent-ink); font-weight: 600; }
button.cr-chip.on:hover { background: var(--accent-2, var(--accent)); border-color: var(--accent-2, var(--accent)); }
button.cr-chip:not(.on):hover { border-color: var(--accent); color: var(--text); }
button.cr-chip[disabled] { opacity: .55; cursor: default; }

/* creators view — Pro upsell banner */
.cr-pro-banner { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 12px 0 16px; padding: 10px 14px; border: 1px solid color-mix(in srgb, var(--accent) 45%, var(--border)); border-radius: 12px; background: color-mix(in srgb, var(--accent) 8%, transparent); }
.cr-pro-badge { font-weight: 700; color: var(--accent-ink); background: var(--accent); padding: 2px 9px; border-radius: 999px; font-size: .85em; }

/* 投资日历 (calendar view) */
.cal-bar { display: flex; flex-wrap: wrap; gap: 8px; margin: 14px 0 16px; }
.cal-fchip { padding: 5px 12px; border: 1px solid var(--border); border-radius: 999px; background: transparent; color: var(--muted); cursor: pointer; font-size: .9em; transition: border-color .15s, color .15s, background .15s; }
.cal-fchip:hover { border-color: var(--accent); color: var(--text); }
.cal-fchip.on { background: var(--accent); border-color: var(--accent); color: var(--accent-ink); font-weight: 600; }
.cal-mine.on { background: color-mix(in srgb, var(--accent) 20%, transparent); color: var(--accent); border-color: var(--accent); }
.cal-day-h { position: sticky; top: 0; background: color-mix(in srgb, var(--bg) 88%, transparent); backdrop-filter: blur(6px); padding: 8px 2px 6px; color: var(--muted); font-size: .9em; z-index: 1; border-bottom: 1px solid var(--border); }
.cal-ev { display: flex; gap: 10px; padding: 10px 4px; border-bottom: 1px solid color-mix(in srgb, var(--border) 60%, transparent); }
.cal-ico { font-size: 1.1em; line-height: 1.4; }
.cal-main { flex: 1; min-width: 0; }
.cal-title { display: flex; align-items: center; flex-wrap: wrap; gap: 7px; color: var(--text); font-weight: 600; }
.cal-tk { font-size: .82em; padding: 1px 6px; border-radius: 6px; background: color-mix(in srgb, var(--muted) 18%, transparent); color: var(--muted); font-weight: 400; }
.cal-tk.on { background: color-mix(in srgb, var(--accent) 22%, transparent); color: var(--accent); }
.cal-mine-badge { font-size: .72em; padding: 1px 7px; border-radius: 999px; background: var(--accent); color: var(--accent-ink); font-weight: 700; }
.cal-note { margin-top: 3px; font-size: .88em; line-height: 1.45; }
.cal-mine-ev { background: color-mix(in srgb, var(--accent) 5%, transparent); border-radius: 8px; }
.cal-t-earnings .cal-title { color: var(--green, #3fb950); }
.cal-t-witching .cal-title, .cal-t-opex .cal-title { color: var(--accent); }

/* ── entry: 两种用法,一次登录 (what this is + why Telegram) ──────────────── */
.nav-signin { margin-right: 8px; }

/* KOL per-ticker call chips — the stance/target gist dug out of each video (creators.js callChips) */
.cr-calls { display: flex; flex-wrap: wrap; gap: 6px; margin: 4px 0 8px; }
.cr-call { display: inline-flex; align-items: center; gap: 5px; padding: 3px 9px; border-radius: 999px;
  font-size: .82em; border: 1px solid var(--border); background: color-mix(in srgb, var(--card, #fff) 92%, transparent); }
.cr-call-sym { font-weight: 700; }
.cr-call-arrow { font-size: .9em; line-height: 1; }
.cr-call-tgt { color: var(--muted); }
.cr-call-note { color: var(--muted); max-width: 15em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cr-call-bull { border-color: color-mix(in srgb, var(--green,#3fb950) 45%, transparent); }
.cr-call-bull .cr-call-arrow, .cr-call-bull .cr-call-sym { color: var(--green, #3fb950); }
.cr-call-bear { border-color: color-mix(in srgb, var(--red,#f85149) 45%, transparent); }
.cr-call-bear .cr-call-arrow, .cr-call-bear .cr-call-sym { color: var(--red, #f85149); }
.cr-call-neutral .cr-call-arrow { color: var(--muted); }

/* Website-first product story: workflow, visual evidence, then pricing. */
.revamp-hero { padding: 72px 0 64px; }
.revamp-hero h1 { white-space: pre-line; font-size: clamp(34px, 4.4vw, 56px); line-height: 1.2; letter-spacing: -.04em; }
.revamp-hero .sub { max-width: 34em; font-size: 18px; line-height: 1.75; margin: 24px 0; }
.review-preview { background: var(--surface); border: 1px solid var(--border); border-radius: 24px; padding: 26px; box-shadow: 0 16px 60px #0002; }
.review-preview-head { display: flex; gap: 12px; align-items: center; padding-bottom: 20px; border-bottom: 1px solid var(--border); }
.review-preview-head img { border-radius: 50%; }
.review-preview-head small { display: block; color: var(--muted); font-size: 12px; margin-top: 3px; }
.review-flow { list-style: none; padding: 0; margin: 12px 0 22px; }
.review-flow li { display: flex; gap: 16px; align-items: baseline; padding: 15px 0; }
.review-step { color: var(--accent-text); font-size: 13px; }
.review-flow p { color: var(--muted); margin: 5px 0 0; font-size: 14px; line-height: 1.65; }
.workflow-grid { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 18px; margin: 30px 0; }
.workflow-card { padding: 24px; border: 1px solid var(--border); border-radius: 18px; background: var(--surface); }
.workflow-card h3 { margin: 12px 0; }
.workflow-card p { line-height: 1.8; color: var(--muted); margin-bottom: 20px; }
.proof-workspace { display: grid; grid-template-columns: 1fr 1fr; align-items: start; gap: 28px; margin-top: 32px; }
.proof-curve { border: 1px solid var(--border); background: var(--surface); border-radius: 20px; padding: 28px; }
.proof-curve h3 { margin: 16px 0 22px; }
.proof-curve .track-mini svg { width: 100%; height: auto; min-height: 160px; }
.proof-curve figcaption { color: var(--muted); font-size: 12px; }
.proof-values { display: flex; gap: 40px; margin: 24px 0; }
.proof-values small { display: block; color: var(--muted); margin-bottom: 6px; }
.proof-values b { font-size: 28px; }
.proof-curve .small { font-size: 13px; line-height: 1.7; }
.proof-case { border: 1px solid var(--border); border-radius: 16px; padding: 20px; margin-bottom: 12px; background: var(--surface); }
.proof-case-head { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; }
.proof-case-head time { margin-left: auto; font-size: 12px; color: var(--muted); }
.proof-case h3 { margin: 14px 0 8px; font-size: 17px; }
.case-result { display: flex; align-items: baseline; flex-wrap: wrap; gap: 12px; }
.case-result strong { font-size: 25px; }
.case-result span { color: var(--muted); font-size: 12px; }
.proof-case details { margin-top: 12px; font-size: 13px; line-height: 1.7; }
.proof-case summary { color: var(--muted); cursor: pointer; }
.proof-case blockquote { border-left: 2px solid var(--border); margin: 10px 0; padding-left: 12px; }
@media (max-width: 760px) {
 .workflow-grid, .proof-workspace { grid-template-columns: 1fr; }
 .revamp-hero { padding-top: 36px; }
 .review-preview, .proof-curve { padding: 22px; }
 .workflow-card p { margin-bottom: 14px; }
}
.proof-workspace > *, .proof-cases, .proof-case, .workflow-card, .tier { min-width: 0; }
.proof-curve svg { max-width: 100%; }
.tier dl { min-width: 0; }
.tier dt, .tier dd { overflow-wrap: anywhere; min-width: 0; }
@media (max-width: 600px) {
 .tiers, .proof-workspace { grid-template-columns: minmax(0,1fr); }
 .tier .btn { white-space: normal; }
}
.proof-curve .btn { max-width: 100%; white-space: normal; }
.proof-selected { display: block; }
.benefit-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 28px; }
.benefit-card { min-width: 0; padding: 24px 0; border-top: 1px solid var(--border); }
.benefit-card .ui-icon { width: 28px; height: 28px; color: var(--accent); fill: none; stroke: currentColor; }
.benefit-card h3 { font-size: 20px; margin: 14px 0 10px; }
.benefit-card p { color: var(--muted); margin: 0; line-height: 1.7; }
.benefit-link { display: inline-block; margin-top: 16px; padding: 6px 0; color: var(--orange); font-weight: 600; }
@media(max-width: 640px) { .benefit-grid { grid-template-columns: minmax(0,1fr); gap: 8px; } }
.proof-selected .proof-cases { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 20px; }
.proof-archive { margin-top: 24px; }
.proof-archive .btn { max-width: 100%; white-space: normal; }
.legacy-method > summary { cursor: pointer; font-weight: 600; padding: 16px 0; }
@media(max-width: 760px) { .proof-selected .proof-cases { grid-template-columns: minmax(0,1fr); } }
.case-result .pos { color: var(--green); }
.case-result .neg { color: var(--red); }

/* Frozen-rule research: theme tokens, dated evidence and readable touch controls. */
.oversold-study { padding: clamp(16px,4vw,36px); margin: 28px 0; border: 1px solid var(--border); border-radius: var(--r-xl); background: var(--surface); }
.oversold-study h3 { font-size: clamp(23px,3vw,34px); margin: 16px 0 10px; }
.os-stats { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 16px; margin: 24px 0; }
.os-stats > div { min-width: 0; }
.os-stats small { display: flex; align-items: center; gap: 8px; color: var(--muted); }
.os-stats strong { display: block; font-size: clamp(22px,4vw,40px); line-height: 1.4; letter-spacing: -.04em; }
.os-nav { color: var(--orange); }
.os-spy { color: var(--muted); }
.os-qqq { color: var(--blue); }
.os-swatch { display: inline-block; width: 22px; border-top: 3px solid var(--orange); flex-shrink: 0; }
.os-swatch-spy { border-color: var(--muted); border-top-style: dashed; }
.os-swatch-qqq { border-color: var(--blue); border-top-style: dotted; }
.oversold-study .os-figure { margin: 24px 0; }
.os-chart-heading { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 6px 20px; margin-bottom: 12px; }
.os-line { fill: none; stroke-width: 1.8; vector-effect: non-scaling-stroke; stroke-linejoin: round; stroke-linecap: round; }
.os-line-nav { stroke: var(--orange); stroke-width: 2.5; }
.os-line-spy { stroke: var(--muted); stroke-dasharray: 5 4; }
.os-line-qqq { stroke: var(--blue); stroke-dasharray: 2 3; }
.os-cursor[hidden] { display: none; }
.os-crosshair { stroke: var(--muted); stroke-width: 1; stroke-dasharray: 3 4; }
.os-dot { stroke: var(--surface); stroke-width: 2; }
.os-dot-nav { fill: var(--orange); }
.os-dot-spy { fill: var(--muted); }
.os-dot-qqq { fill: var(--blue); }
.os-inspector { padding: 16px 0 4px; }
.os-inspector-heading { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 8px; font-size: 13px; }
.os-inspector-heading label { color: var(--muted); }
.os-readings { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 12px; font-size: 13px; }
.os-readings > span { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 4px 8px; }
.os-readings > span > span { color: var(--muted); }
.os-inspector p { margin: 10px 0 0; font-size: 12px; }
.os-figure figcaption { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 6px 20px; margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--border); }
.os-risk { padding: 16px 18px; border-left: 3px solid var(--orange); background: var(--surface-2); border-radius: 0 var(--r-sm) var(--r-sm) 0; font-size: 14px; line-height: 1.8; }
.oversold-study details > summary { cursor: pointer; color: var(--orange); padding: 12px 0; min-height: 44px; }
.os-table-wrap { overflow-x: auto; margin: 18px 0; border: 1px solid var(--border); border-radius: var(--r-sm); }
.os-table-wrap table { width: 100%; border-collapse: collapse; font-size: 14px; }
.os-table-wrap caption { text-align: left; padding: 12px; color: var(--muted); }
.os-table-wrap td, .os-table-wrap th { padding: 12px; text-align: right; border-bottom: 1px solid var(--border); white-space: nowrap; }
.os-table-wrap th { background: var(--surface-2); }
.os-table-wrap td:first-child, .os-table-wrap th:first-child { text-align: left; }
.os-table-wrap tr:last-child td { border-bottom: 0; }
.os-table-wrap:focus-visible { outline: 2px solid var(--orange); outline-offset: 3px; }
@media (max-width: 480px) {
 .os-stats { gap: 8px; }
 .os-stats small { gap: 5px; font-size: 12px; }
 .os-swatch { width: 14px; }
 .os-readings > span { flex-direction: column; }
}
@media (max-width: 380px) {
 .os-stats { grid-template-columns: 1fr; gap: 8px; }
 .os-stats > div { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
 .os-stats strong { font-size: 25px; }
}

/* Long translated archive labels must remain tappable on small phones. */
.proof-archive .btn { max-width: 100%; white-space: normal; overflow-wrap: anywhere; text-align: center; }

/* Public examples contain decorative placeholders; paid reports are API gated. */
.video-example-card { min-width:0; padding:28px; border:1px solid var(--border); border-radius:20px; background:var(--surface); }
.video-example-card { margin-top:28px; max-width:900px; }
.video-example-meta { display:flex; flex-wrap:wrap; align-items:center; gap:12px 20px; color:var(--muted); font-size:13px; }
.video-example-card h3 { font-size:clamp(23px,3vw,32px); line-height:1.3; margin:24px 0 16px; }
.video-takeaway { line-height:1.8; }
.video-source-points { border-block:1px solid var(--border); margin:24px 0; }
.video-source-points summary, .records-method summary { cursor:pointer; padding:16px 0; color:var(--orange); }
.video-source-points ol { list-style:none; margin:0; padding:0; }
.video-source-points li { display:grid; grid-template-columns:72px minmax(0,1fr); gap:16px; padding:16px 0; border-top:1px solid var(--border); }
.video-source-points a { color:var(--orange); padding:4px 0; font-size:13px; }
.video-source-points p { margin:0; line-height:1.8; }
.records-back { display:inline-block; margin-bottom:28px; color:var(--muted); }
.research-records h1 { font-size:clamp(30px,4vw,48px); margin:14px 0; }
.records-summary { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:20px; margin:28px 0; }
.records-summary span { display:block; color:var(--muted); font-size:14px; }
.records-summary strong { display:block; font-size:clamp(24px,4vw,40px); }
.research-records .pos { color:var(--green); }.research-records .neg { color:var(--red); }
.records-positions { margin:40px 0; scroll-margin-top:100px; }
.records-period { border:1px solid var(--border); border-radius:16px; background:var(--surface); overflow:hidden; }
.records-period > summary { cursor:pointer; padding:20px; font-weight:600; }
.records-period > summary span.mono, .records-period > summary small { display:block; color:var(--muted); font-size:13px; font-weight:400; margin:8px 0 0; }
.records-filter { display:flex; align-items:end; gap:16px; flex-wrap:wrap; padding:0 20px 20px; }
.records-filter[hidden] { display:none; }
.records-filter label { display:grid; gap:8px; font-size:13px; }
.records-filter select { min-height:44px; padding:8px 12px; color:var(--text); background:var(--bg); border:1px solid var(--border); border-radius:8px; font:inherit; }
.records-table-wrap { max-width:100%; overflow-x:auto; border:1px solid var(--border); border-radius:8px; }
.records-table { width:100%; border-collapse:collapse; font-size:14px; }
.records-table caption { text-align:left; padding:16px; color:var(--muted); }
.records-table th, .records-table td { padding:14px 16px; text-align:right; white-space:nowrap; border-bottom:1px solid var(--border); }
.records-table th { background:var(--surface-2); }
.records-table th:first-child { text-align:left; }
.records-table tbody th { position:sticky; left:0; }
.records-table tr[hidden] { display:none; }
.records-period .data-notice { margin:20px; }
.records-method { margin-top:20px; border-top:1px solid var(--border); }
.records-method p { line-height:1.8; }
.records-method a { color:var(--orange); }
.records-table-wrap:focus-visible, .records-filter select:focus-visible { outline:2px solid var(--orange); outline-offset:3px; }
@media(max-width:640px) {
 .video-example-card { padding:20px; }
 .video-source-points li { grid-template-columns:minmax(0,1fr); gap:8px; }
 .records-summary { grid-template-columns:minmax(0,1fr); gap:12px; }
 .records-summary > div { display:flex; align-items:baseline; justify-content:space-between; }
 .records-filter { padding:0 12px 16px; gap:12px; }
}

/* One free tier and one full research plan. */
.tiers.tiers-unified { grid-template-columns: repeat(2, minmax(0,1fr)); max-width: 920px; margin-inline: auto; }
@media (max-width: 600px) { .tiers.tiers-unified { grid-template-columns: minmax(0,1fr); } }

/* Stock-first public workspace. Match text and surfaces to the active theme. */
.pricing-compact .price-intro{display:flex;justify-content:space-between;align-items:center;gap:24px}.pricing-compact h2{font-size:25px}.pricing-compact .price-intro p{color:var(--muted,#a5acb8);font-size:15px}.plan-details{border-top:1px solid #343b44;padding-top:20px;margin-top:20px}.plan-details>summary{cursor:pointer;display:list-item;font-size:15px}.plan-details>summary span{margin-left:16px;color:var(--muted,#a5acb8)}.plan-details .tiers{margin-top:24px}.pricing-compact .tier .price{font-size:32px}
@media(max-width:720px){.pricing-compact .price-intro{display:block}.pricing-compact .price-intro .btn{margin-top:10px}}

/* Product walkthrough: load the recording only on explicit playback. */
.product-demo { scroll-margin-top:100px; padding-top:32px; }
.product-demo-heading { display:flex; align-items:end; justify-content:space-between; gap:24px; margin-bottom:22px; }
.product-demo-heading h2 { margin-bottom:0; }
.product-demo-player { display:block; width:100%; height:auto; aspect-ratio:16/9; border:1px solid var(--border); border-radius:20px; background:#090d0a; }
.product-demo-player::cue { color:#fff; background:rgba(0,0,0,.86); font-size:clamp(14px, 2vw, 28px); line-height:1.3; }
#product-demo-video::cue { font-size:clamp(16px, 2vw, 28px); }
@media(max-width:700px) and (orientation:portrait){.product-demo-player{aspect-ratio:4/3;object-fit:contain}}
.product-demo-caption { display:flex; align-items:start; justify-content:space-between; gap:24px; margin-top:18px; }
.product-demo-caption p { max-width:780px; margin:0; }
.product-demo-caption a { white-space:nowrap; }
.product-demo-transcript { margin-top:16px; color:var(--muted); }
.product-demo-transcript summary { cursor:pointer; width:fit-content; padding:6px 0; }
.product-demo-transcript li { margin:10px 0; max-width:900px; line-height:1.7; }
@media(max-width:700px){.product-demo-heading,.product-demo-caption{display:block}.product-demo-heading .small{margin-top:12px}.product-demo-caption a{display:inline-block;margin-top:14px}.product-demo-player{border-radius:12px}}

/* Product video guide: visible instructions with separate seek and dashboard actions. */
.product-demo-tutorial { scroll-margin-top:85px; margin-top:16px; border:1px solid var(--border); border-radius:var(--r-lg); background:var(--surface); overflow:hidden; }
.product-demo-tutorial > summary { cursor:pointer; padding:20px 24px; min-height:44px; font-weight:600; line-height:1.6; }
.product-demo-tutorial > summary:focus-visible { outline:2px solid var(--orange); outline-offset:-4px; }
.product-demo-tutorial-body { padding:0 24px 24px; }
.product-demo-tutorial-body > p { margin:0 0 18px; line-height:1.7; }
.product-demo-tutorial-body > video + p { margin-top:16px; }
.product-demo-tutorial-player { display:block; width:100%; height:auto; aspect-ratio:16/9; border:1px solid var(--border); border-radius:12px; background:#090e15; }
.product-demo-tutorial-player::cue { color:#fff; background:rgba(0,0,0,.86); font-size:clamp(14px,2vw,28px); line-height:1.3; }
.product-demo-tutorial-link { display:inline-flex; align-items:center; min-height:44px; }
@media(max-width:700px) and (orientation:portrait){.product-demo-tutorial-player{aspect-ratio:4/3;object-fit:contain}}
@media(max-width:560px){.product-demo-tutorial > summary{padding:18px 16px}.product-demo-tutorial-body{padding:0 16px 18px}}
.product-demo-guide { margin-top:28px; border:1px solid var(--border); border-radius:var(--r-lg); background:var(--surface); overflow:hidden; }
.product-demo-guide-heading { display:flex; align-items:baseline; justify-content:space-between; gap:16px; padding:22px 24px 18px; }
.product-demo-guide-heading h3 { margin:0; font-size:1.15rem; }
.product-demo-guide-heading p { margin:0; }
details.product-demo-guide > summary { display:list-item; cursor:pointer; font-weight:600; font-size:1.05rem; min-height:44px; }
.product-demo-guide-hint { padding-inline:24px; }
.product-demo-video-chapters { display:flex; flex-wrap:wrap; gap:10px; list-style:none; margin:0; padding:0 24px 22px; }
.product-demo-video-chapters .product-demo-seek { white-space:normal; text-align:left; }
.product-demo-video-chapters .product-demo-seek span { margin-right:6px; }
.product-demo-chapters { list-style:none; padding:0; margin:0; }
.product-demo-chapter { display:grid; grid-template-columns:76px minmax(144px,.85fr) minmax(0,2fr) minmax(116px,auto); gap:18px; align-items:center; padding:19px 24px; border-top:1px solid var(--border); }
.product-demo-chapter h4 { margin:0; font-size:.95rem; line-height:1.5; }
.product-demo-chapter-number { display:block; color:var(--faint); font-size:.7rem; font-weight:400; letter-spacing:.1em; margin-bottom:3px; }
.product-demo-chapter p { margin:0; font-size:.875rem; color:var(--muted); line-height:1.7; }
.product-demo-seek { min-height:44px; padding:7px 9px; border:1px solid var(--border); border-radius:var(--r-sm); background:var(--surface-2); color:var(--text); font:inherit; font-family:var(--mono); font-size:.8rem; white-space:nowrap; cursor:pointer; }
.product-demo-seek span { color:var(--orange); }
.product-demo-interactive { color:var(--muted); font-size:.72rem; line-height:1.5; }
.product-demo-seek:hover:not(:disabled),.product-demo-seek[aria-current=true] { border-color:var(--orange); background:var(--bg); color:var(--orange); }
.product-demo-seek:disabled { cursor:default; opacity:.55; }
.product-demo-guide-link { display:inline-flex; justify-content:flex-end; align-items:center; gap:6px; min-height:44px; font-size:.85rem; font-weight:600; line-height:1.5; text-decoration:none; }
.product-demo-guide-link:hover { text-decoration:underline; }
.product-demo-seek:focus-visible,.product-demo-guide-link:focus-visible { outline:2px solid var(--orange); outline-offset:4px; }
.product-demo-guide-status { margin:0; padding:0 24px; color:var(--text); }
.product-demo-guide-status:not(:empty) { padding-top:14px; }
.product-demo-guide-access { margin:0; border-top:1px solid var(--border); padding:18px 24px 0; line-height:1.65; }
.product-demo-guide > .product-demo-guide-access:last-child { padding-bottom:18px; }
@media(max-width:950px) {
 .product-demo-guide-heading { display:block; }
 .product-demo-guide-heading p { margin-top:8px; }
 .product-demo-chapter { grid-template-columns:76px minmax(0,1fr) auto; gap:8px 16px; }
 .product-demo-chapter h4 { grid-column:2; grid-row:1; }
 .product-demo-chapter-number { display:inline; margin-right:9px; }
 .product-demo-chapter p { grid-column:2 / 4; grid-row:2; }
 .product-demo-seek { grid-column:1; grid-row:1 / 3; }
 .product-demo-guide-link { grid-column:3; grid-row:1; }
}
@media(max-width:560px) {
 .product-demo-guide-heading { padding:20px 16px 16px; }
 .product-demo-chapter { grid-template-columns:70px minmax(0,1fr); padding:16px; gap:8px 12px; }
 .product-demo-chapter h4 { grid-column:2; }
 .product-demo-chapter-number { display:none; }
 .product-demo-seek { grid-row:1; }
 .product-demo-chapter p { grid-column:1 / 3; grid-row:2; }
 .product-demo-guide-link { grid-column:1 / 3; grid-row:3; justify-content:flex-start; width:fit-content; }
 .product-demo-guide-status { padding-left:16px; padding-right:16px; }
 .product-demo-guide-access { padding:16px 16px 0; }
}

.outcome-review { min-width:90px; max-width:260px; white-space:normal; text-align:left; }
.outcome-review[open] { min-width:240px; }
.outcome-review summary { cursor:pointer; font-weight:650; }
.outcome-review p { margin:6px 0; font-size:12px; overflow-wrap:anywhere; }

@media(max-width:700px){.records-filter select{font-size:16px}}

/* app.css */
/* app.css — /app/ shell (website dashboard + Telegram Mini App). Mobile-first; colours come from tokens.css.
   Telegram theme: tg.js sets html[data-theme] + --tg-theme-* (themeParams) + --tg-safe-top/bottom. */

/* Change-direction tokens (T-12, owner 2026-10-11). --pos / --neg colour a numeric rise / fall and swap under
   html[data-change-colors="red-up"] (红涨绿跌, opt-in; green-up is the default in both languages since 2026-10-13). --bull / --bear
   colour a stance or a buy / sell and swap WITH --pos / --neg, so a rise, a buy and a bullish call always share one colour. The heat map's neutral is --heat-neutral (tokens.css). */
html { --pos: var(--green); --neg: var(--red); --bull: var(--green); --bear: var(--red); }
html[data-change-colors="red-up"] { --pos: var(--red); --neg: var(--green); --bull: var(--red); --bear: var(--green); }
/* Telegram Mini App: tg.js sets html[data-theme] from the client's colour scheme and --tg-theme-* from its themeParams.
   The canvas, paper, ink and line tokens (tokens.css) follow the client's palette there; the Ducky values are the fallbacks. */
html[data-theme="dark"][data-tg]:not([data-tg="web"]) {
  --db-canvas: var(--tg-theme-bg-color, #151b17); --db-canvas-2: var(--tg-theme-secondary-bg-color, #19231d);
  --db-paper: var(--tg-theme-section-bg-color, var(--tg-theme-secondary-bg-color, #1e2721));
  --db-paper-2: var(--tg-theme-secondary-bg-color, #26332b);
  --db-ink: var(--tg-theme-text-color, #f2f1e7); --db-muted: var(--tg-theme-hint-color, #b7c2ba);
  --db-link: var(--tg-theme-link-color, #8fbcff);
  --db-line: color-mix(in srgb, var(--db-ink) 14%, var(--db-canvas));
  --db-line-strong: color-mix(in srgb, var(--db-ink) 30%, var(--db-canvas));
  --db-control: color-mix(in srgb, var(--db-ink) 45%, var(--db-canvas));
}
html[data-theme="light"][data-tg]:not([data-tg="web"]) {
  --db-canvas: var(--tg-theme-bg-color, #e9ede6); --db-canvas-2: var(--tg-theme-secondary-bg-color, #eef1eb);
  --db-paper: var(--tg-theme-section-bg-color, #f7f6ef);
  --db-paper-2: var(--tg-theme-secondary-bg-color, #e3e9e2);
  --db-ink: var(--tg-theme-text-color, #172019); --db-muted: var(--tg-theme-hint-color, #566159);
  --db-link: var(--tg-theme-link-color, #205da8);
  --db-line: color-mix(in srgb, var(--db-ink) 12%, var(--db-canvas));
  --db-line-strong: color-mix(in srgb, var(--db-ink) 28%, var(--db-canvas));
  --db-control: color-mix(in srgb, var(--db-ink) 45%, var(--db-canvas));
}

:root { --safe-top: max(env(safe-area-inset-top, 0px), var(--tg-safe-top, 0px)); --safe-bottom: max(env(safe-area-inset-bottom, 0px), var(--tg-safe-bottom, 0px)); }

html, body.page-app { height: 100%; }
body.page-app { overflow: hidden; overscroll-behavior: none; font-size: 15px; }
.app-shell { display: flex; flex-direction: column; height: 100vh; height: 100dvh; background: var(--bg); }
.hidden, [hidden] { display: none !important; }
.spacer { flex: 1 1 auto; }
.muted { color: var(--muted); }
.small { font-size: var(--fs-sm); }
.pos { color: var(--pos); }
.neg { color: var(--neg); }
.break { word-break: break-all; }

/* ---- top bar / bottom nav ---- */
.app-top { flex: 0 0 auto; display: flex; align-items: center; gap: 10px; padding: calc(8px + var(--safe-top)) 14px 8px; background: var(--surface); border-bottom: 1px solid var(--border); }
.app-top .brand { font-size: var(--fs-md); }
.tier-host:empty { display: none; }
.tier-badge { font-size: var(--fs-2xs); letter-spacing: .06em; padding: 2px 8px; border-radius: var(--r-sm); border: 1px solid var(--border); color: var(--muted); text-transform: uppercase; }
.tier-badge.tier-paid { color:var(--accent-text, var(--accent)); border-color: var(--accent); }
.tier-badge.tier-pro { color: var(--accent-ink); background: var(--accent); border-color: var(--accent); }
.app-main { flex: 1 1 auto; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch; padding: 14px 14px 28px; overscroll-behavior: contain; }
.app-view { max-width: 760px; margin: 0 auto; }
.app-foot { max-width: 760px; margin: 28px auto 0; color: var(--faint); font-size: var(--fs-xs); text-align: center; }
/* A compact desktop workspace; four daily destinations + an accessible mobile disclosure. */
.app-icon-defs { position:absolute; width:0; height:0; overflow:hidden; pointer-events:none; }
.app-icon { display: block; width: 20px; height: 20px; flex: 0 0 auto; }
.app-nav { position: relative; flex: 0 0 auto; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 3px; padding: 7px 8px calc(7px + var(--safe-bottom)); background: var(--surface); border-top: 1px solid var(--border); z-index: 20; }
.app-nav > a { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 5px; min-height: 52px; padding: 7px 3px; border-radius: 12px; color: var(--muted); font-size: 11px; font-weight: 550; line-height: 1.25; text-decoration: none; cursor: pointer; -webkit-tap-highlight-color: transparent; transition: color .16s, background .16s; }
.app-nav > a span { white-space: nowrap; }
.app-nav > a:hover { color: var(--text); background: var(--surface-2); }
.app-nav > a.on { color: var(--text); background: color-mix(in srgb, var(--accent) 12%, var(--surface)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 26%, transparent); }
.app-nav a.on > .app-icon { color:var(--accent-text, var(--accent)); }
body:is([data-route="login"],[data-route="forgot"],[data-route="reset"]) .app-nav{ display: none; }
/* Desktop: the five tabs sit in one centred pill under the header. */
@media (min-width: 1000px) {
  .app-top { order: -2; }
  .app-nav { order: -1; align-self: center; grid-template-columns: repeat(9, max-content); gap: 4px; padding: 5px; margin: 14px auto 0; border: 1px solid var(--border); border-radius: 16px; max-width: calc(100% - 32px); }
  .app-nav > a { display: flex; flex-direction: row; gap: 8px; min-height: 42px; padding: 9px 14px; font-size: 13px; border-radius: 11px; }
  .app-main { padding: 24px 20px 40px; }
}
@media (min-width: 1000px) and (max-width: 1200px) { .app-nav > a { padding: 9px 10px; gap: 6px; } }
@media (prefers-reduced-motion: reduce) { .app-nav a { transition: none; } }

/* ---- generic ---- */
h1 { font-size: var(--fs-xl); margin: 0; }
h2 { font-size: var(--fs-md); margin: 18px 0 8px; }
h3 { font-size: var(--fs-md); margin: 0 0 4px; }
.view-head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 12px; flex-wrap: wrap; }
.view-head .count { color: var(--muted); font-size: var(--fs-sm); }
.view-head .spot { margin-left: auto; font-weight: 700; }
.card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); padding: 12px 14px; margin-bottom: 10px; }
.cards { display: flex; flex-direction: column; gap: 10px; }
.add-row { display: flex; gap: 8px; margin-bottom: 12px; }
.add-row .input { flex: 1 1 auto; min-width: 0; }
.alerts-form { flex-wrap: wrap; }
.alerts-form .short { flex: 0 0 96px; }
.alerts-form .input:not(.short) { flex: 1 1 200px; }
.input { font: inherit; font-size: 16px; color: var(--text); background: var(--bg); border: 1px solid var(--border); border-radius: var(--r-md); padding: 9px 12px; outline: none; }
.input:focus { border-color: var(--focus-ring, var(--accent)); box-shadow: 0 0 0 2px var(--focus-ring, var(--accent)); }
.btn:disabled { opacity: .5; cursor: not-allowed; transform: none; }
.btn[data-soon] { border-style: dashed; color: var(--faint); }
.btn.danger:hover { color: var(--red); border-color: var(--red); }
.empty { color: var(--muted); text-align: center; padding: 28px 12px; margin: 0; }
.errbox { color: var(--red); background: color-mix(in srgb, var(--red) 8%, var(--surface)); border: 1px solid color-mix(in srgb, var(--red) 40%, var(--border)); border-radius: var(--r-md); padding: 10px 12px; font-size: var(--fs-base); display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin: 6px 0; }
.spinner-row { display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: var(--fs-sm); padding: 8px 0; }
.spinner { width: 14px; height: 14px; border: 2px solid var(--border); border-top-color: var(--accent); border-radius: 50%; animation: spin .8s linear infinite; flex: 0 0 auto; }
@keyframes spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .spinner { animation-duration: 2s; } }
.chip-red { color: var(--red); border-color: var(--red); }
.chip-dim { color: var(--faint); }

.chip-fired { color: var(--accent-ink); background: var(--accent); border-color: var(--accent); }
.seg { display: inline-flex; border: 1px solid var(--border); border-radius: var(--r-md); overflow: hidden; margin-bottom: 12px; }
.seg button { font: inherit; font-family: var(--mono); font-size: var(--fs-sm); background: transparent; color: var(--muted); border: 0; padding: 7px 14px; cursor: pointer; }
.seg button.on { background: var(--accent); color: var(--accent-ink); font-weight: 700; }
.kv-grid { display: grid; grid-template-columns: max-content 1fr; gap: 4px 12px; margin: 8px 0 0; font-size: var(--fs-base); }
.kv-grid dt { color: var(--muted); }
.kv-grid dd { margin: 0; text-align: right; }
.kv-grid .copy { margin-left: 6px; }

/* ---- lock overlay ---- */
.locked { position: relative; margin-top: 8px; border-radius: var(--r-md); overflow: hidden; min-height: 76px; }
.locked-content { filter: blur(5px); opacity: .55; pointer-events: none; user-select: none; }
.locked-veil { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 5px; padding: 6px 10px; text-align: center; color: var(--text); text-decoration: none; background: color-mix(in srgb, var(--surface) 35%, transparent); font-size: var(--fs-sm); line-height: 1.3; }
.locked-icon { display: none; }
.locked-text::before { content: "🔒 "; }
.locked-veil:hover { text-decoration: none; }
.locked-cta { color: var(--accent-ink); background: var(--accent); border-radius: var(--r-sm); padding: 3px 10px; font-size: var(--fs-xs); font-weight: 700; }

/* ---- watchlist ---- */
.snap-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ticker { font-weight: 800; font-size: var(--fs-md); color: var(--text); }
.ticker:hover { color:var(--accent-text, var(--accent)); text-decoration: none; }
.spot { font-weight: 600; }
.pro-rows { border-top: 1px dashed var(--border); padding-top: 6px; }

/* ---- alerts ---- */

.alert-row { display: flex; gap: 10px; align-items: center; margin: 0; }

.alert-row[data-state="error"] .cond { color: var(--muted); }
.alert-custom-panel .alert-row { flex-wrap: wrap; align-items: flex-start; }

.page-app .alert-custom-panel .btn { min-height: 44px; min-width: 44px; white-space: normal; }
.alert-custom-panel .screen-saved > .btn { margin-right: 8px; margin-bottom: 8px; }
.page-app .alert-custom-panel input, .page-app .alert-custom-panel textarea { font-size: 16px; }

/* ---- chart ---- */
.chart-host { position: relative; width: 100%; height: 440px; border: 1px solid var(--border); border-radius: var(--r-md); overflow: hidden; background: var(--surface); }
#chart-spot{text-align:right;min-width:0}#chart-spot time{display:block;font:400 .72rem/1.4 var(--font-sans, sans-serif);max-width:28ch;margin-top:4px}
.chart-company-name:empty{display:none}.chart-company-name{margin:-8px 0 12px;overflow-wrap:anywhere}.chart-snapshot-date{flex-basis:100%}
@media (max-width: 480px) { .chart-host { height: 400px; } }
.legend { display: flex; flex-wrap: wrap; gap: 6px 14px; align-items: center; margin: 0 0 10px; font-size: var(--fs-sm); color: var(--muted); min-height: 24px; }
.legend-item i { display: inline-block; width: 10px; height: 3px; border-radius: 2px; vertical-align: middle; margin-right: 5px; }
.legend-item b { color: var(--text); }
.legend .locked { flex: 1 1 100%; margin: 0; }
.legend-fake { padding: 10px 12px; font-size: var(--fs-sm); color: var(--muted); }
.chips .chip { color: var(--text); text-decoration: none; }

/* ---- billing ---- */
.picker { margin: 0 0 12px; padding: 12px 14px; font-size: var(--fs-base); }
.picker ul { margin: 6px 0 0; padding-left: 1.1rem; }
.picker li { margin-bottom: 3px; color: var(--muted); }
.tier-cards { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 6px; }
@media (max-width: 420px) { .tier-cards { grid-template-columns: 1fr; } }
.tier-card { display: flex; flex-direction: column; gap: 4px; margin: 0; }
.tier-card.on { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent) inset; }
.tier-card .price { font-size: var(--fs-xl); }
.tier-card .btn { margin-top: auto; }
.rails h2 { margin-top: 14px; }
.rail-row { display: flex; flex-wrap: wrap; gap: 8px; }
.pay-panel { margin-top: 14px; padding: 14px; border: 1px solid var(--accent); border-radius: var(--r-md); background: var(--surface); }
.order-head { display: flex; flex-wrap: wrap; gap: 6px 18px; font-size: var(--fs-base); margin-bottom: 10px; }
.qr-box { display: flex; justify-content: center; padding: 8px 0; }
.qr { width: 220px; max-width: 100%; height: auto; border-radius: var(--r-sm); background: #fff; padding: 6px; }
.paid-hint { margin-top: 10px; border-top: 1px dashed var(--border); padding-top: 10px; font-size: var(--fs-base); }
.paid-hint .cta-row { margin: 8px 0 0; }
.orders-list { display: flex; flex-direction: column; gap: 6px; }
.order-row { display: grid; grid-template-columns: max-content 1fr max-content max-content max-content; gap: 8px 10px; align-items: center; font-size: var(--fs-sm); padding: 8px 10px; border: 1px solid var(--border); border-radius: var(--r-md); background: var(--surface); }
@media (max-width: 520px) { .order-row { grid-template-columns: 1fr 1fr; } }
.billing-foot { margin-top: 20px; }

/* ---- login ---- */
.login { max-width: 460px; margin: 6vh auto 0; padding: 22px 20px; }
.login h1 { margin-bottom: 6px; }
.login-block { display: flex; flex-direction: column; gap: 10px; margin-top: 14px; }
.login-block .btn { width: 100%; }
.login-or { text-align: center; color: var(--faint); margin: 16px 0 2px; font-size: var(--fs-sm); }
.widget-host { display: flex; justify-content: center; min-height: 0; }
.widget-host iframe { max-width: 100%; }
.nonce-host { display: flex; flex-direction: column; gap: 8px; }
.nonce-host code { display: block; margin-top: 4px; padding: 6px 8px; background: var(--surface-2); border-radius: var(--r-sm); user-select: all; overflow-wrap: anywhere; }
.waiting { color: var(--muted); font-size: var(--fs-sm); }

/* ---- toast / modal ---- */
#toasts { position: fixed; top: calc(10px + var(--safe-top)); left: 0; right: 0; display: flex; flex-direction: column; align-items: center; gap: 6px; z-index: 120; pointer-events: none; padding: 0 12px; }
.toast { background: var(--bubble); color: var(--bubble-ink); border: 1px solid var(--border); border-radius: var(--r-md); padding: 8px 14px; font-size: var(--fs-base); box-shadow: var(--shadow); opacity: 0; transform: translateY(-8px); transition: opacity .2s ease, transform .2s ease; max-width: 100%; }
.toast.show { opacity: 1; transform: translateY(0); }
.toast.ok { border-color: var(--green); }
.toast.err { border-color: var(--red); }
#modal { position: fixed; inset: 0; z-index: 110; background: rgba(0, 0, 0, .55); display: flex; align-items: flex-end; justify-content: center; padding: 0; }
#modal[hidden] { display: none !important; }
.modal-box { width: 100%; max-width: 520px; background: var(--surface); border: 1px solid var(--border); border-radius: 16px 16px 0 0; padding: 18px 18px calc(18px + var(--safe-bottom)); box-shadow: var(--shadow); }
.modal-box h3 { margin-bottom: 8px; }
.modal-body p { margin-bottom: .5em; font-size: var(--fs-base); }
.modal-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
@media (min-width: 600px) { #modal { align-items: center; padding: 20px; } .modal-box { border-radius: var(--r-lg); padding-bottom: 18px; } }

/* ---- brand mark + empty states (canonical fluffy duck; SYSTEMDESIGN §5.2 C) ---- */
.app-top .brand { display: inline-flex; align-items: center; gap: 6px; }
.app-top .avatar-mark { width: 26px; height: 26px; box-shadow: none; }
.empty::before { content: ""; display: block; width: 72px; height: 72px; margin: 0 auto 8px; background: url("/duck-head-cutout-v1-192.webp") center / contain no-repeat; border-radius: 0; opacity: 1; }

/* §14 profile */
.card.profile .form { display: grid; gap: 12px; margin-top: 12px; }
.card.profile .field { display: grid; gap: 4px; } .card.profile .label { font-size: var(--fs-sm); color: var(--muted); }
.card.profile .check { display: flex; align-items: center; gap: 8px; font-size: var(--fs-base); }
.card.profile .verify { margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--border); }
.card.profile .danger { margin-top: 22px; color: var(--muted); } .card.profile .danger summary { cursor: pointer; }
.card.profile .notification-settings { margin-top:24px; padding-top:20px; border-top:1px solid var(--border); }
.notification-settings h2 { margin:0 0 8px; }
.notification-settings .notification-channel { padding:12px 14px; border:1px solid var(--border); border-radius:12px; }
.notification-channel p { margin:6px 0 0 24px; }
.notification-settings .cta-row { margin-top:14px; flex-wrap:wrap; }
.notification-settings .notification-receipt { margin-top:16px; padding:12px 14px; background:var(--surface2); border-radius:12px; }
.notification-receipt p { margin:6px 0; overflow-wrap:anywhere; }
/* Insider push preferences (2026-10-24): a switch, then one connected segmented control per preference; 44 px targets. */
.card.profile .notification-insider { margin-top:24px; padding-top:20px; border-top:1px solid var(--border); }
.notification-insider[hidden], .notification-insider-options[hidden], .notification-insider-channel[hidden] { display:none; }
.notification-insider-head { display:flex; align-items:center; justify-content:space-between; gap:12px; max-width:656px; }
.notification-insider h2 { min-width:0; margin:0; }
.notification-insider-note { margin:2px 0 0; max-width:62ch; }
.notification-switch { flex:none; display:inline-flex; align-items:center; gap:8px; min-height:44px; min-width:44px; padding:0 2px;
  border:0; background:transparent; color:var(--text); font:inherit; font-size:14px; font-weight:650; cursor:pointer; }
.notification-switch-track { position:relative; display:block; width:44px; height:26px; border-radius:13px;
  background:var(--db-muted, var(--muted)); transition:background-color .15s ease; }
.notification-switch-thumb { position:absolute; top:3px; left:3px; width:20px; height:20px; border-radius:50%;
  background:var(--db-paper-strong, #fff); transition:transform .15s ease; }
.notification-switch[aria-checked=true] .notification-switch-track { background:var(--db-accent, var(--accent)); }
.notification-switch[aria-checked=true] .notification-switch-thumb { transform:translateX(18px); }
.notification-switch-state { min-width:2em; text-align:left; }
.notification-insider [aria-disabled=true] { cursor:progress; }
.notification-insider-options { display:grid; gap:12px; margin-top:16px; }
.notification-insider-row { display:grid; grid-template-columns:minmax(96px,160px) minmax(0,480px); align-items:center; gap:6px 16px; }
.notification-insider-label { font-size:14px; font-weight:650; color:var(--text); }
.notification-segments { display:grid; grid-auto-flow:column; grid-auto-columns:minmax(0,1fr); min-width:0; }
.notification-segments>button { min-width:0; min-height:44px; margin:0 0 0 -1px; padding:8px 10px; border:1px solid var(--control-border, var(--border));
  border-radius:0; background:var(--db-paper, var(--surface)); color:var(--text); font:inherit; font-size:14px; font-weight:550; line-height:1.3;
  text-align:center; white-space:normal; overflow-wrap:anywhere; cursor:pointer; }
.notification-segments>button:first-child { margin-left:0; border-radius:6px 0 0 6px; }
.notification-segments>button:last-child { border-radius:0 6px 6px 0; }
.notification-segments>button[aria-pressed=true] { position:relative; z-index:1; border-color:var(--db-accent, var(--accent));
  background:var(--db-accent-soft, var(--surface-2)); color:var(--db-accent-strong, var(--text)); font-weight:750; }
.notification-segments>button:focus-visible { position:relative; z-index:2; }
.notification-insider-channel { box-sizing:border-box; max-width:656px; margin:12px 0 0; padding:10px 12px; border:1px solid var(--db-line, var(--border));
  border-radius:6px; background:var(--db-canvas, var(--surface2)); color:var(--text); }
.notification-insider-status { min-height:1.5em; margin:12px 0 0; color:var(--muted); }
.notification-insider-status.ok { color:var(--db-positive, var(--green)); }
.notification-insider-status.err { color:var(--db-negative, var(--red)); }
@media (max-width:600px) {
  .notification-insider-row { grid-template-columns:minmax(0,1fr); }
  .notification-segments>button { font-size:13px; padding:8px 6px; }
}
@media (prefers-reduced-motion:reduce) { .notification-switch-track, .notification-switch-thumb { transition:none; } }
.card.profile .account-settings { margin-top:24px; padding-top:18px; border-top:1px solid var(--border); }
.card.profile details > summary { cursor:pointer; }
.card.profile .account-settings > section { margin-top:18px; }
.btn-danger { background: #3a1216; color: #ff8a80; border: 1px solid #5a1c22; }
.ok { color: var(--green); }

/* ══════════════════════════════════════════════════════════════════════════════════════════════
   a11y + §18.2 loading polish (2026-08-30, CSS/UX cluster)
   ══════════════════════════════════════════════════════════════════════════════════════════════ */

/* finding site.css:413 — sub-44px tap targets in the app. Grow the touch hit areas (touch pointers only,
   so the desktop dashboard keeps its compact density). */
@media (pointer: coarse) {
  .app-nav a { min-height: 44px; justify-content: center; }
  .seg button, .btn-sm, .copy { min-height: 44px; }
  .snap-head .btn.danger,.add-row .btn{ min-height: 44px; }
}

/* finding chart.js:59 / watchlist.js:118 — §18.2 skeletons in place of bare spinners.
   One shimmer definition; reduced-motion falls back to a static placeholder. */
@keyframes shimmer { from { background-position: 200% 0; } to { background-position: -200% 0; } }
.skel { background: linear-gradient(90deg, var(--surface-2) 25%, var(--border) 50%, var(--surface-2) 75%);
  background-size: 200% 100%; animation: shimmer 1.2s linear infinite; border-radius: var(--r-sm); }

/* Chart host: while #chart-status still holds the loading spinner, shimmer over the 440px host so it is
   never a blank bordered void. The shimmer clears the instant bars arrive (spinner removed) and never shows
   on an error/no-data state (status then holds text, not a spinner) so it can't get stuck. */
.chart-host::after { content: ""; position: absolute; inset: 0; opacity: 0; pointer-events: none;
  background: linear-gradient(90deg, var(--surface-2) 25%, var(--border) 50%, var(--surface-2) 75%); background-size: 200% 100%; }
.app-view:has(#chart-status .spinner) .chart-host::after { opacity: 1; animation: shimmer 1.2s linear infinite; }

/* Watchlist snapshot card still fetching (holds a spinner-row): shimmer placeholder at ~kv-grid height so
   the list doesn't jump when data slots in. Clears automatically once the card re-renders with data. */
.card.snap:has(> .spinner-row)::after { content: ""; display: block; height: 92px; margin-top: 8px; border-radius: var(--r-sm);
  background: linear-gradient(90deg, var(--surface-2) 25%, var(--border) 50%, var(--surface-2) 75%); background-size: 200% 100%; animation: shimmer 1.2s linear infinite; }

/* finding watchlist.js:58 — the empty mascot state flashed before the first list() resolved. Delay its reveal
   so a fast L2-hit fetch replaces it before it ever paints; a genuinely empty list still shows it after ~0.45s.
   (Pure-CSS mitigation; the definitive fix is a JS loaded-flag, tracked on the JS cluster's watchlist.js:58.) */
.empty { animation: empty-reveal .01s linear .45s both; }
@keyframes empty-reveal { from { opacity: 0; } to { opacity: 1; } }

/* finding app.css:186 — the bottom sheet popped in with no transition. Animate backdrop + box on appearance
   (JS un-hides #modal and injects .modal-box), matching the toast / glossary-sheet feel. */
#modal:not([hidden]) { animation: modal-backdrop .18s ease; }
.modal-box { animation: modal-rise .22s ease; }
@keyframes modal-backdrop { from { opacity: 0; } }
@keyframes modal-rise { from { transform: translateY(14px); opacity: 0; } }

@media (prefers-reduced-motion: reduce) {
  .app-view:has(#chart-status .spinner) .chart-host::after,
  .card.snap:has(> .spinner-row)::after,
  .skel { animation: none; }
  #modal:not([hidden]), .modal-box, .toast { animation: none; transition: none; }
}

/* watchlist: a freshly-added ticker whose quote is still loading — a calm state, never a red error box
   (the add already succeeded, so it must not contradict the "已添加" toast). */
.snap-loading { display: flex; align-items: center; gap: 10px; padding: 6px 2px 2px; flex-wrap: wrap; }
.snap-loading .muted { color: var(--muted); }

/* ── investment calendar: month grid + two-week view (calendar.js) ───────── */
.calendar-view { --c-earn:#19579a; --c-macro:#994800; --c-opex:#6c3ca3; --c-rebal:#156745; --c-session:#86500b; --c-geo:#b3261e; }
@media (prefers-color-scheme:dark) {
  :root:not([data-theme="light"]) .calendar-view { --c-earn:#78b8ff; --c-macro:#ffb45d; --c-opex:#cca4ff; --c-rebal:#63d6ab; --c-session:#ffd17a; --c-geo:#ff8a80; }
}
:root[data-theme="dark"] .calendar-view { --c-earn:#78b8ff; --c-macro:#ffb45d; --c-opex:#cca4ff; --c-rebal:#63d6ab; --c-session:#ffd17a; --c-geo:#ff8a80; }
.cal-kind-geo { --cal-tone:var(--c-geo); }
.cal-kind-earnings { --cal-tone:var(--c-earn); }
.cal-kind-macro { --cal-tone:var(--c-macro); }
.cal-kind-expiry { --cal-tone:var(--c-opex); }
.cal-kind-rebal { --cal-tone:var(--c-rebal); }
.cal-kind-session { --cal-tone:var(--c-session); }
.cal-kind-other { --cal-tone:var(--muted); }

.cal-bar { display: flex; flex-wrap: wrap; gap: 6px; margin: 12px 0 4px; }
.cal-fchip { border: 1px solid var(--border); background: var(--surface); color: var(--muted); border-radius: 999px; padding: 6px 13px; font-size: var(--fs-xs); cursor: pointer; transition: border-color .15s, color .15s, background .15s; }
.cal-fchip:hover { border-color: var(--fg); color: var(--fg); }
.cal-fchip.on { border-color: var(--accent); background: var(--accent); color: var(--accent-ink); font-weight: 700; }
.cal-fchip.cal-mine.on { border-color: var(--accent); background: var(--accent); color: var(--accent-ink); }

.cal-modebar { display: inline-flex; gap: 3px; margin: 10px 0 16px; padding: 3px; border: 1px solid var(--border); border-radius: 11px; background: var(--surface); }
.cal-mode { border: 0; background: transparent; color: var(--muted); font-size: var(--fs-sm); padding: 6px 18px; border-radius: 8px; cursor: pointer; transition: background .15s, color .15s; }
.cal-mode.on { background: var(--surface-2); color: var(--fg); box-shadow: 0 1px 2px rgba(0,0,0,.35); font-weight: 600; }

.cal-mhead { display: flex; align-items: center; gap: 9px; margin: 2px 0 12px; }
.cal-mnav { width: 34px; height: 34px; border: 1px solid var(--border); background: var(--surface); color: var(--fg); border-radius: 9px; font-size: 18px; line-height: 1; cursor: pointer; transition: background .15s, border-color .15s; }
.cal-mnav:hover { background: var(--surface-2); border-color: var(--fg); }
.cal-mtitle { font-weight: 700; font-size: var(--fs-md); letter-spacing: .3px; }
.cal-today { margin-left: auto; border: 1px solid var(--border); background: var(--surface); color: var(--muted); border-radius: 9px; padding: 7px 14px; font-size: var(--fs-xs); cursor: pointer; transition: color .15s, border-color .15s; }
.cal-today:hover { color: var(--fg); border-color: var(--fg); }

.cal-wdrow { display: grid; grid-template-columns: repeat(7, 1fr); gap: 8px; margin-bottom: 8px; }
.cal-wd { text-align: center; font-size: var(--fs-2xs); font-weight: 600; letter-spacing: 2px; text-transform: uppercase; color: var(--muted); }

/* shared day-cell look (month + biweekly) */
.cal-grid, .cal-bigrid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 8px; }
.cal-cell, .cal-bicell { position: relative; border: 1px solid var(--border); border-radius: 12px; background: var(--surface);
  text-align: left; cursor: pointer; display: flex; flex-direction: column; gap: 5px; overflow: hidden; color: var(--fg); font: inherit;
  transition: transform .12s ease, border-color .12s ease, box-shadow .12s ease; }
.cal-cell { min-height: 92px; padding: 7px; }
.cal-bicell { min-height: 104px; padding: 8px; }
.cal-cell.cal-empty { border: 0; background: transparent; cursor: default; }
.cal-cell:not(.cal-empty):hover, .cal-bicell:hover { transform: translateY(-2px); border-color: color-mix(in srgb, var(--accent) 45%, var(--border)); box-shadow: 0 6px 18px rgba(0,0,0,.28); }
.cal-cell.cal-weekend, .cal-bicell.cal-weekend { opacity: .6; }
.cal-cell.cal-has { background: color-mix(in srgb, var(--accent) 5%, var(--surface)); }
.cal-cell.cal-is-today, .cal-bicell.cal-is-today { border-color: color-mix(in srgb, var(--accent) 60%, var(--border)); box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 35%, transparent) inset; }
.cal-cell.cal-sel, .cal-bicell.cal-sel { box-shadow: 0 0 0 2px var(--accent) inset; }
.cal-cell.cal-mine-cell::after, .cal-bicell.cal-mine-cell::after { content: "\2605"; position: absolute; top: 5px; right: 6px; font-size: 9px; color:var(--accent-text, var(--accent)); }

.cal-dnum, .cal-bidnum { font-size: var(--fs-xs); font-weight: 650; color: var(--muted); display: inline-flex; align-items: center; justify-content: center; min-width: 22px; height: 21px; padding: 0 5px; border-radius: 7px; align-self: flex-start; font-variant-numeric: tabular-nums; }
.cal-cell.cal-is-today .cal-dnum, .cal-bicell.cal-is-today .cal-bidnum { background: var(--accent); color: var(--accent-ink); }

/* biweekly event pills */
.cal-events { display: flex; flex-direction: column; gap: 4px; }
.pill { display: flex; align-items: center; gap: 6px; padding: 3px 8px 3px 5px; border-radius: 8px; font-size: var(--fs-xs); line-height: 1.4; border: 1px solid transparent; white-space: nowrap; overflow: hidden; letter-spacing: .1px; }
.pill-earn { background: color-mix(in srgb, var(--c-earn) 15%, var(--surface)); border-color: color-mix(in srgb, var(--c-earn) 34%, transparent); color: color-mix(in srgb, var(--c-earn) 78%, var(--fg)); }
.pill-earn.mine { background: color-mix(in srgb, var(--accent) 17%, var(--surface)); border-color: color-mix(in srgb, var(--accent) 42%, transparent); color: color-mix(in srgb, var(--accent) 82%, var(--fg)); }
.pill-geo { background: color-mix(in srgb, var(--c-geo) 14%, var(--surface)); border-color: color-mix(in srgb, var(--c-geo) 36%, transparent); color: color-mix(in srgb, var(--c-geo) 82%, var(--fg)); font-weight: 600; }
.cal-t-geo .cal-title { color: color-mix(in srgb, var(--c-geo) 72%, var(--fg)); }
.cal-tentative { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 0 0 12px; }
.cal-tentative-label { font-size: var(--fs-2xs); color: var(--muted); letter-spacing: 1px; text-transform: uppercase; }
.pill-macro { background: color-mix(in srgb, var(--c-macro) 13%, var(--surface)); border-color: color-mix(in srgb, var(--c-macro) 30%, transparent); color: color-mix(in srgb, var(--c-macro) 82%, var(--fg)); }
.pill-opex, .pill-witching { background: color-mix(in srgb, var(--c-opex) 15%, var(--surface)); border-color: color-mix(in srgb, var(--c-opex) 32%, transparent); color: color-mix(in srgb, var(--c-opex) 78%, var(--fg)); }
.pill-rebal { background: color-mix(in srgb, var(--c-rebal) 15%, var(--surface)); border-color: color-mix(in srgb, var(--c-rebal) 32%, transparent); color: color-mix(in srgb, var(--c-rebal) 74%, var(--fg)); }
.pill-logo { width: 18px; height: 18px; border-radius: 5px; object-fit: contain; background: #fff; flex: 0 0 auto; }
.pill-tk { font-family: var(--font); font-weight: 700; font-size: var(--fs-2xs); }
.pill-ic { flex: 0 0 auto; }
.pill-txt { overflow: hidden; text-overflow: ellipsis; }
.pill-txt.mine { color:var(--accent-text, var(--accent)); font-weight: 600; }
.pill-more { font-size: var(--fs-2xs); color: var(--muted); padding-left: 5px; }

/* month mini-bars */
.cal-mini { display: flex; flex-direction: column; gap: 3px; width: 100%; }
.mbar { display: flex; align-items: center; gap: 6px; font-size: var(--fs-xs); line-height: 1.35; white-space: nowrap; overflow: hidden; color: var(--fg); }
.mbar .bardot { width: 6px; height: 6px; border-radius: 50%; flex: 0 0 auto; }

/* selected-day detail */
.cal-detail { margin-top: 18px; border-top: 1px solid var(--border); padding-top: 14px; }
.cal-day-h { font-weight: 700; font-size: var(--fs-base); color: var(--text); margin-bottom: 10px; }
.cal-empty-day { padding: 12px 0; color: var(--muted); }
.cal-ev { display: flex; gap: 11px; align-items: flex-start; padding: 11px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); margin-bottom: 8px; }
.cal-ev.cal-mine-ev { border-color: color-mix(in srgb, var(--accent) 45%, var(--border)); background: color-mix(in srgb, var(--accent) 6%, var(--surface)); }
.cal-ev-logo { width: 38px; height: 38px; border-radius: 9px; object-fit: contain; background: #fff; flex: 0 0 auto; }
.cal-ico { width: 38px; height: 38px; border-radius: 9px; background: var(--surface-2); display: flex; align-items: center; justify-content: center; font-size: 19px; flex: 0 0 auto; }
.cal-main { flex: 1 1 auto; min-width: 0; }
.cal-kind-label { display:inline-block; margin-bottom:6px; padding:2px 8px; border-radius:6px; font-size:12px; font-weight:650; color:var(--cal-tone); background:color-mix(in srgb,var(--cal-tone) 8%,var(--surface)); }
.cal-ev { border-inline-start:3px solid var(--cal-tone,var(--border)); }
.cal-event-brief { margin:8px 0; line-height:1.6; color:var(--text); }
.cal-title { font-size: var(--fs-sm); font-weight: 650; display: flex; align-items: center; flex-wrap: wrap; gap: 7px; }
.cal-tk { font-family: var(--font); font-size: var(--fs-2xs); color: var(--muted); border: 1px solid var(--border); padding: 1px 6px; border-radius: 5px; }
.cal-tk.on { color:var(--accent-text, var(--accent)); border-color: var(--accent); }
.cal-mine-badge { font-size: var(--fs-2xs); color: var(--accent-ink); background: var(--accent); border-radius: 999px; padding: 1px 8px; font-weight: 700; }
.cal-note { font-size: var(--fs-xs); color: var(--muted); margin-top: 4px; line-height: 1.5; }
.cal-link { display: inline-block; margin-top: 6px; font-size: var(--fs-xs); color:var(--accent-text, var(--accent)); text-decoration: none; }
.cal-link:hover { text-decoration: underline; }
.cal-t-earnings .cal-title { color: color-mix(in srgb, var(--c-earn) 70%, var(--fg)); }
.cal-impact { display: flex; gap: 8px; align-items: baseline; margin-top: 8px; padding: 9px 11px; border-radius: 10px; background: color-mix(in srgb, var(--c-macro) 9%, var(--surface)); border: 1px solid color-mix(in srgb, var(--c-macro) 24%, transparent); }
.cal-impact-tag { flex: 0 0 auto; font-size: var(--fs-2xs); font-weight: 700; color: color-mix(in srgb, var(--c-macro) 80%, var(--fg)); white-space: nowrap; }
.cal-impact-txt { font-size: var(--fs-xs); line-height: 1.6; color: var(--fg); }

@media (max-width: 560px) {
  .cal-grid, .cal-bigrid, .cal-wdrow { gap: 5px; }
  .cal-cell { min-height: 74px; }
  .cal-bicell { min-height: 88px; }
  .pill-logo { width: 16px; height: 16px; }
}

/* ── 雷达 Radar: shared firehose boards (T-layout: wide top bar + grid below) — boards.js ── */
.brd-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 14px; }
.brd-wide { grid-column: 1 / -1; }
.brd-card { border: 1px solid var(--border); border-radius: 14px; background: var(--surface); padding: 13px 15px; min-width: 0; }
.brd-card.brd-wide { background: color-mix(in srgb, var(--accent) 5%, var(--surface)); border-color: color-mix(in srgb, var(--accent) 22%, var(--border)); }
.brd-head { display: flex; gap: 10px; align-items: flex-start; margin-bottom: 8px; min-width: 0; }
.brd-htext { min-width: 0; }
.brd-ico { font-size: 20px; line-height: 1.15; flex: 0 0 auto; }
.brd-title { font-weight: 700; font-size: var(--fs-base); }
.brd-desc { font-size: var(--fs-xs); margin-top: 2px; line-height: 1.4; }
.brd-list { display: flex; flex-direction: column; }
.brd-wide .brd-list { display: grid; grid-template-columns: 1fr 1fr; gap: 0 20px; align-items: start; }
.brd-itemw { border-top: 1px solid color-mix(in srgb, var(--border) 55%, transparent); min-width: 0; }
.brd-list > .brd-itemw:first-child { border-top: 0; }
.brd-wide .brd-list > .brd-itemw:nth-child(2) { border-top: 0; }
.brd-item { width: 100%; display: flex; align-items: flex-start; gap: 8px; padding: 8px 3px; background: none; border: 0; text-align: left; cursor: pointer; font: inherit; color: inherit; min-width: 0; border-radius: 7px; transition: background .12s; }
.brd-item:hover { background: color-mix(in srgb, var(--accent) 7%, transparent); }
.brd-tk { font-family: var(--font); font-weight: 700; color:var(--accent-text, var(--accent)); flex: 0 0 auto; font-size: var(--fs-xs); line-height: 1.4; }
.brd-txt { flex: 1 1 auto; min-width: 0; color: var(--fg); font-size: var(--fs-xs); line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.brd-dir { flex: 0 0 auto; font-size: .85em; line-height: 1.5; }
.brd-dir.bull { color: var(--bull, #3fb950); }
.brd-dir.bear { color: var(--bear, #f85149); }
.brd-time { flex: 0 0 auto; font-size: var(--fs-2xs); line-height: 1.8; }
.brd-caret { flex: 0 0 auto; color: var(--muted); font-size: var(--fs-xs); line-height: 1.5; transition: transform .15s; }
.brd-itemw.open .brd-caret { transform: rotate(180deg); }
.brd-detail { display: none; padding: 0 3px 10px 3px; }
.brd-itemw.open .brd-detail { display: block; }
.brd-full { font-size: var(--fs-xs); line-height: 1.55; color: var(--fg); margin-bottom: 8px; }
.brd-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.brd-kind { font-size: var(--fs-2xs); font-weight: 600; color: var(--muted); border: 1px solid var(--border); border-radius: 999px; padding: 1px 9px; }
.brd-when { font-size: var(--fs-2xs); }
.brd-chart { font-size: var(--fs-2xs); color:var(--accent-text, var(--accent)); text-decoration: none; font-weight: 700; }
.brd-chart:hover { text-decoration: underline; }
@media (max-width: 640px) { .brd-grid, .brd-wide .brd-list { grid-template-columns: 1fr; } .brd-wide .brd-list > .brd-itemw:nth-child(2) { border-top: 1px solid color-mix(in srgb, var(--border) 55%, transparent); } }

/* Week Ahead strip inside Radar (boards.js weekAheadCard) — scroll-snap day cards + ‹ › nav */
.wa-card { width: 100%; }
.wa-card .brd-head { align-items: center; }
.wa-navs { margin-left: auto; display: inline-flex; gap: 6px; flex: 0 0 auto; }
.wa-nav { width: 32px; height: 32px; border: 1px solid var(--border); background: var(--surface); color: var(--text); border-radius: 8px; cursor: pointer; font-size: 16px; line-height: 1; display: inline-flex; align-items: center; justify-content: center; transition: background .15s, border-color .15s, opacity .15s; }
.wa-nav:hover { background: var(--surface-2); border-color: var(--accent); }
.wa-nav:disabled { opacity: .35; cursor: default; }
.wa-strip { display: flex; gap: 10px; overflow-x: auto; scroll-behavior: smooth; scroll-snap-type: x mandatory; scroll-padding-left: 2px; padding: 2px 2px 8px; scrollbar-width: thin; scrollbar-color: var(--border) transparent; -webkit-overflow-scrolling: touch; }
.wa-strip::-webkit-scrollbar { height: 8px; }
.wa-strip::-webkit-scrollbar-thumb { background: var(--border); border-radius: 999px; }
.wa-day { flex: 0 0 202px; min-width: 0; scroll-snap-align: start; border: 1px solid color-mix(in srgb, var(--border) 70%, transparent); border-radius: 12px; padding: 9px 11px; background: color-mix(in srgb, var(--surface) 80%, transparent); }
.wa-dh { display: flex; align-items: baseline; justify-content: space-between; gap: 6px; margin-bottom: 8px; padding-bottom: 7px; border-bottom: 1px solid color-mix(in srgb, var(--border) 58%, transparent); }
.wa-dow { font-weight: 700; font-size: var(--fs-sm); color: var(--text); }
.wa-date { font-size: var(--fs-2xs); color: var(--muted); font-variant-numeric: tabular-nums; }
.wa-ev { display: block; padding: 6px 0; border-top: 1px solid color-mix(in srgb, var(--border) 45%, transparent); }
.wa-day .wa-ev:first-of-type { border-top: 0; }
.wa-et { display: block; font-size: var(--fs-2xs); color: var(--muted); letter-spacing: .2px; margin-bottom: 1px; line-height: 1.2; font-variant-numeric: tabular-nums; }
.wa-nm { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; white-space: normal; overflow-wrap: anywhere; font-size: var(--fs-xs); line-height: 1.3; }
.wa-macro .wa-nm { color: color-mix(in srgb, var(--accent) 78%, var(--text)); font-weight: 600; }
.wa-er .wa-nm { color: color-mix(in srgb, #4ea1ff 80%, var(--text)); font-weight: 700; }
.wa-more { margin-top: 6px; font-size: var(--fs-2xs); color: var(--muted); }
.wa-empty { font-size: var(--fs-xs); color: var(--muted); padding: 4px 0; }
@media (max-width: 560px) { .wa-day { flex: 0 0 78vw; } }

/* ── UI-audit polish: contrast, hierarchy, mobile tap-targets & month labels ── */
@media (pointer: coarse) {
  .cal-fchip, .cal-mode, .cal-today, .cr-chip { min-height: 44px; }
  .cal-mnav, .wa-nav { width: 44px; height: 44px; }
}
@media (max-width: 400px) {
  .cal-mini .pill-txt { display: none; }
  .cal-mini { flex-direction: row; flex-wrap: wrap; gap: 4px; }
  .cal-mini .bardot { width: 7px; height: 7px; }
}

/* Review workspace: clearer hierarchy without changing the market-data palette. */
.route-page { min-width: 0; }
.view-intro { margin: -4px 0 20px; max-width: 62ch; line-height: 1.65; }
.view-head h1 { font-size: clamp(22px, 3vw, 28px); letter-spacing: -.025em; }
.snap { padding: 18px 20px; }
.snap-head { flex-wrap: wrap; gap: 10px; padding-bottom: 14px; border-bottom: 1px solid var(--border); }
.snap .spot { font-size: 23px; font-weight: 700; letter-spacing: -.025em; }
.snap .kv-grid { grid-template-columns: minmax(110px, .8fr) minmax(0, 1.2fr); gap: 10px 20px; padding: 14px 0; margin: 0; }
.snap .kv-grid dd { overflow-wrap: anywhere; text-align: right; }
.snap .pro-rows { border-top: 1px solid var(--border); }
.snap-actions { display: flex; flex-wrap: wrap; gap: 8px; padding-top: 14px; border-top: 1px solid var(--border); }
.login-methods { display: flex; gap: 4px; padding: 4px; margin: 22px 0 12px; background: var(--bg); border: 1px solid var(--border); border-radius: 14px; }
.login-methods .btn { flex: 1; padding: 10px 6px; min-width: 0; font-size: 14px; border: 0; }
.login-methods [aria-pressed="true"] { background: var(--surface-2); color: var(--text); box-shadow: 0 1px 3px #0003; }
.login-label { display: flex; flex-direction: column; gap: 7px; text-align: left; color: var(--muted); font-size: 13px; }
.login-label .input { width: 100%; color: var(--text); }
.login-forgot { align-self: flex-end; padding: 8px 0; }
.recovery .login-block { display: grid; gap: 16px; }
.recovery-status { line-height: 1.6; }
.recovery-help { margin: 20px 0; text-align: left; }
.recovery > a { display: inline-block; margin: 12px 16px 0 0; }
.login .login-block { border: 0; padding-top: 8px; }
.data-notice { font-size: 14px; line-height: 1.6; padding: 12px 14px; border-left: 3px solid var(--accent); background: var(--surface-2); border-radius: 0 10px 10px 0; }
.page-app :is(a,button,summary):focus-visible{ outline: 2px solid var(--focus-ring, var(--accent)); outline-offset: 3px; }
.page-app .input, .page-app .btn { transition: border-color .15s, background-color .15s, box-shadow .15s; }
@media (max-width: 799px) {
  .app-main { padding: 20px 16px 28px; }
}
@media (max-width: 420px) {
  .snap { padding: 15px; }
  .snap .kv-grid { grid-template-columns: minmax(90px, .8fr) minmax(0, 1.2fr); gap: 10px; font-size: 13px; }
  .snap-head .spacer { display: none; }
  .snap-head .spot { font-size: 21px; }
  .app-top { gap: 7px; padding-left: 10px; padding-right: 10px; }
  .app-top .brand { font-size: 14px; }
}
@media (prefers-reduced-motion: reduce) {
  .page-app *, .page-app *::before, .page-app *::after { scroll-behavior: auto !important; transition: none !important; animation: none !important; }
}
.cr-feed { margin-top: 16px; }

.cr-evidence { flex-basis: 100%; font-size: 12px; line-height: 1.6; }
.cr-evidence summary { cursor: pointer; color: var(--muted); }
.cr-evidence blockquote { border-left: 2px solid var(--border); margin: 8px 0; padding-left: 10px; }
.event-review h2 { margin: 12px 0; font-size: 21px; }
.event-review-head { display: flex; flex-wrap: wrap; gap: 12px; color: var(--muted); }
.event-price-grid { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 12px; padding: 20px 0; border-block: 1px solid var(--border); }
.event-price-grid strong { display: block; font-size: 25px; margin: 10px 0; }
.event-price-grid small { display: block; }
@media (max-width: 420px) { .event-price-grid { gap: 8px; } .event-price-grid strong { font-size: 20px; } }

.profile-reminder{margin:0 0 16px;padding:12px 16px;border:1px solid var(--border);border-radius:12px;font-size:14px;line-height:1.5}.profile-reminder a{text-decoration:underline}
.cr-video-title{font-size:16px;line-height:1.5;margin:8px 0}

/* Keep the brand warm without a neon halo competing with navigation. */
.app-top .avatar-mark { width: 30px; height: 30px; box-shadow: none; }
.app-top .tier-badge.tier-pro { color:var(--accent-text, var(--accent)); background: color-mix(in srgb, var(--accent) 10%, var(--surface)); border-color: color-mix(in srgb, var(--accent) 25%, var(--border)); font-size: 10px; border-radius: 6px; padding: 3px 6px; }
.app-top .lang-toggle, .app-top #logout { font-size: 12px; min-height: 36px; padding: 8px 10px; border-radius: 10px; }
.profile-reminder { max-width: 760px; margin: 0 auto 20px; padding: 12px 16px; font-size: 13px; line-height: 1.6; }
@media (max-width: 380px) { .app-top .brand { font-size: 12px; gap: 5px; } .app-top .avatar-mark { width: 24px; height: 24px; } .app-top { gap: 5px; } .app-top #logout, .app-top .lang-toggle { padding: 8px; } }

/* Radar receipts share the navigation icon system and give the ticker a clear anchor. */
.brd-ico { display: grid; place-items: center; width: 38px; height: 38px; flex: 0 0 auto; border: 1px solid var(--border); border-radius: 11px; background: var(--surface-2); color:var(--accent-text, var(--accent)); }
.brd-item { display: grid; grid-template-columns: 1fr auto auto; gap: 7px; padding: 14px 4px; align-items: center; }
.brd-tk { font-size: 20px; line-height: 1.25; letter-spacing: -.03em; color: var(--text); grid-column: 1; }
.brd-txt { grid-column: 1; font-size: 13px; line-height: 1.6; -webkit-line-clamp: 3; }
.brd-time { grid-column: 2; grid-row: 1; font-size: 11px; }
.brd-caret { grid-column: 3; grid-row: 1; }
.brd-full { white-space: pre-wrap; overflow-wrap: anywhere; line-height: 1.75; }
.brd-archive-tag { display: inline-block; margin: 12px 4px 0; padding: 3px 7px; border: 1px solid var(--border); border-radius: 5px; color: var(--muted); font-size: 10px; }
.brd-receipt-note { padding-left: 10px; border-left: 2px solid var(--border); }

.snap-freshness { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 8px; }

.pill-ic .app-icon { width: 12px; height: 12px; }
.cal-ico .app-icon { width: 18px; height: 18px; }

.cr-chip.on { background: color-mix(in srgb, var(--accent) 10%, var(--surface)); color: var(--text); border-color: color-mix(in srgb, var(--accent) 28%, var(--border)); font-weight: 500; }

/* Mobile disclosures: long evidence must expand inside the page, not widen or clip it. */
.app-view,.cr-post,.cr-evidence,.brd-card,.cal-main{ min-width: 0; }

.cr-evidence { width: 100%; }
.cr-evidence blockquote, .cr-sum, .cr-video-title, .cal-note, .cal-title { overflow-wrap: anywhere; }
.cr-evidence summary, .cr-post summary { min-height: 44px; padding: 10px 0; }
.brd-txt { grid-column: 1 / -1; }
.brd-itemw.open .brd-txt { display: block; overflow: visible; }
.modal-box { max-height: calc(100dvh - var(--safe-top) - 16px); overflow-y: auto; overscroll-behavior: contain; }
.cal-event-count { display: none; }
.cal-mhead { flex-wrap: wrap; }
.cal-mtitle { min-width: 0; flex: 1 1 120px; }
.cal-mnav { flex: 0 0 34px; }
.cal-detail { scroll-margin-top: 12px; }
@media (max-width: 560px) {
  .cal-impact { flex-direction: column; align-items: flex-start; gap: 4px; }
  .cal-grid, .cal-bigrid, .cal-wdrow { grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 3px; }
  .cal-cell, .cal-bicell { padding: 4px 1px; min-width: 0; min-height: 56px; align-items: center; }
  .cal-dnum, .cal-bidnum { align-self: center; padding: 0; }
  .cal-cell .cal-mini, .cal-bicell .cal-events { display: none; }
  .cal-event-count { display: block; color:var(--accent-text, var(--accent)); font-size: 11px; line-height: 16px; }
  .cal-cell.cal-mine-cell::after, .cal-bicell.cal-mine-cell::after { right: 1px; top: 1px; font-size: 7px; }
}

.evidence-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;background:var(--border);border:1px solid var(--border);border-radius:14px;overflow:hidden;margin:22px 0}
.evidence-metric{display:flex;flex-direction:column;gap:8px;min-width:0;padding:18px;background:var(--surface)}.evidence-metric strong{font-size:24px;letter-spacing:-.035em;overflow-wrap:anywhere}

.creator-identity{display:flex;gap:12px;align-items:center}.creator-identity p{margin:4px 0 0}.creator-monogram{width:40px;height:40px;border-radius:12px;background:var(--surface-2);border:1px solid var(--border);display:grid;place-items:center;flex-shrink:0;color:var(--accent-text, var(--accent))}

.creator-about{font-size:13px;line-height:1.7;overflow-wrap:anywhere}.creator-about summary{color:var(--muted);cursor:pointer}.creator-about p{margin:8px 0}.creator-x{border:1px solid var(--border);border-radius:10px;padding:14px 18px;font-size:13px}.creator-x summary{cursor:pointer}.creator-x p{line-height:1.8;max-width:850px}
.evidence-controls{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin:20px 0}.evidence-controls [aria-pressed="true"]{color:var(--accent-text, var(--accent));border-color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,var(--surface))}.evidence-controls select{width:auto;max-width:100%;min-height:40px}.evidence-controls input{flex:1;min-width:160px}.evidence-controls button{min-height:40px}
.creators-view .cr-feed{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:start}.creators-view .cr-post{margin:0;border:1px solid var(--border);border-radius:16px;padding:24px;min-width:0}.cr-post .cr-sum{font-size:14px;line-height:1.85}.cr-post .cr-video-title{font-size:18px;line-height:1.55;margin:14px 0}.cr-evidence code{display:block;overflow-wrap:anywhere;white-space:normal;font-size:10px;color:var(--muted);margin:12px 0}
.research-method{border-left:3px solid var(--accent);padding:12px 16px;background:var(--surface-2);font-size:13px;line-height:1.8}.study-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.study-row{border:1px solid var(--border);border-radius:16px;padding:22px;min-width:0}.study-row h3{font-size:15px;line-height:1.6;margin:14px 0 8px}.study-heading{display:flex;gap:12px;align-items:center}.study-heading>a{font-size:22px;font-weight:650}.evidence-badge{margin-left:auto;font-size:10px;letter-spacing:.05em;border:1px solid var(--border);border-radius:5px;padding:4px 7px;color:var(--muted)}
.evidence-timeline{margin:18px 0;display:grid;gap:12px;padding-left:14px;border-left:1px solid var(--border)}.evidence-timeline>div{display:flex;justify-content:space-between;gap:12px}.evidence-timeline dt{font-size:11px;color:var(--muted)}.evidence-timeline dd{font-size:11px;margin:0;text-align:right}.study-results{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:var(--border);border:1px solid var(--border);border-radius:10px;overflow:hidden;margin:16px 0}.study-results .evidence-metric{padding:12px}.study-results strong{font-size:20px}.study-status{padding:12px;background:var(--surface-2);border-radius:8px;font-size:13px;line-height:1.7}
.signal-archive{scroll-margin-top:24px}.signal-archive:not(:empty){margin-top:32px;padding:24px;border:1px solid var(--border);border-radius:16px;background:var(--surface)}.signal-day{font-size:12px;color:var(--muted);letter-spacing:.03em;padding-top:20px}.signal-history-list .brd-itemw{border:1px solid var(--border);border-radius:12px;margin:10px 0;padding:8px 16px}.signal-history-list .brd-txt{-webkit-line-clamp:2}.brd-card>.btn{margin-top:16px}.brd-grid .brd-wide{grid-column:auto}.brd-wide .brd-list{grid-template-columns:1fr}
@media(max-width:900px){.creators-view .cr-feed,.study-list{grid-template-columns:1fr}.evidence-metric{padding:14px}.evidence-metric strong{font-size:22px}}
@media(max-width:480px){.evidence-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.creators-view .cr-post,.study-row{padding:17px}.study-results .evidence-metric{padding:9px}.study-results strong{font-size:18px}.study-results .small{font-size:10px}.evidence-timeline>div{display:block}.evidence-timeline dd{text-align:left;margin-top:4px}.signal-archive:not(:empty){padding:16px}.evidence-controls{gap:8px}.evidence-controls button{min-height:44px}}
.study-figure{margin:18px 0 8px;min-width:0}.study-chart{display:block;width:100%;height:auto;max-height:180px}.study-figure figcaption{font-size:10px;text-align:right}.brd-disclosure{grid-column:1 / -1;color:var(--accent-text, var(--accent));font-size:11px;text-align:left}

/* Google and email account entry */
body:is([data-route="register"],[data-route="oauth"]) .app-nav { display:none; }
.google-login-block { margin:1.5rem 0; }
.google-login { width:100%; background:#fff; color:#202124; border:1px solid #dadce0; font-weight:600; text-align:center; }
.google-login:hover { background:#f0f3f7; color:#202124; }
.google-login-block p { text-align:center; margin-top:.7rem; }
.login-signup { display:block; margin-top:1rem; }
.profile .field { min-width:0; }

/* Completed-month history stays separate from the dated event agenda. */
.seasonality-view { margin-top:24px; min-width:0; }
.seasonality-view h2 { font-size:23px; line-height:1.4; }
.season-macro { padding:20px; background:var(--surface-2); border:1px solid var(--border); border-radius:12px; margin-bottom:28px; }
.season-macro h3 { margin:0 0 10px; font-size:16px; }
.season-macro summary { cursor:pointer; font-weight:600; font-size:14px; line-height:1.6; color:var(--accent-text, var(--accent)); }
.season-macro p { line-height:1.8; }.season-macro ul { list-style:none; padding:0; margin:16px 0; }
.season-macro li { display:flex; flex-wrap:wrap; gap:8px 24px; font-size:13px; padding:10px 0; border-top:1px solid var(--border); }
.season-macro li .mono { min-width:190px; }.season-macro a { color:var(--accent-text, var(--accent)); }
.season-month { display:block; margin-top:24px; font-size:22px; font-weight:650; }
.seasonality-view .season-slider { display:block; width:100%; padding:0; min-height:44px; margin:8px 0 0; accent-color:var(--accent); cursor:ew-resize; }
.season-scale { display:flex; justify-content:space-between; color:var(--muted); font-size:11px; }
.season-controls { display:flex; align-items:center; gap:16px; flex-wrap:wrap; margin:24px 0 16px; }
.season-controls label { font-size:12px; display:grid; gap:6px; min-width:0; }.season-controls select { width:auto; max-width:100%; min-height:44px; }
.season-controls [aria-pressed="true"] { border-color:var(--accent); color:var(--accent-text, var(--accent)); background:color-mix(in srgb,var(--accent) 8%,var(--surface)); }
.season-metrics { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; margin:20px 0; }
.season-metrics article { padding:20px; border:1px solid var(--border); border-radius:12px; min-width:0; }
.season-metrics b,.season-metrics strong,.season-metrics span { display:block; }.season-metrics strong { font-size:32px; margin:12px 0 4px; }.season-metrics p { margin:14px 0 0; line-height:1.7; }
.season-legend { display:flex; gap:20px; align-items:center; font-size:12px; margin:18px 0 8px; }
.season-spy { color:var(--accent-text, var(--accent)); }.season-qqq { color:var(--blue,#4ea1ff); }
[data-theme="light"] .season-spy { color:#945000; } [data-theme="light"] .season-qqq { color:#255ca4; }
@media (prefers-color-scheme: light) {
  :root:not([data-theme="dark"]) .season-spy { color:#945000; }
  :root:not([data-theme="dark"]) .season-qqq { color:#255ca4; }
}
.season-chart-nav { display:flex; justify-content:space-between; gap:12px; margin-bottom:12px; }
.season-bars { display:flex; width:100%; overflow-x:auto; overscroll-behavior-x:contain; gap:12px; padding:12px 8px 20px; border:1px solid var(--border); border-radius:12px; scrollbar-color:var(--muted) var(--surface); }
.season-year { flex:0 0 64px; text-align:center; font-size:12px; }.season-year > span { display:block; font-size:11px; line-height:1.8; }
.season-pair { display:flex; justify-content:center; gap:6px; height:144px; position:relative; margin-bottom:12px; }
.season-pair::before { content:''; position:absolute; top:50%; inset-inline:0; border-top:1px solid var(--muted); }
.season-track { width:18px; position:relative; }.season-bar { position:absolute; left:0; width:100%; border-radius:2px; background:var(--accent); }.season-bar.qqq { background:var(--blue,#4ea1ff); }
.season-details { margin-top:20px; border-top:1px solid var(--border); }.season-details summary { cursor:pointer; color:var(--accent-text, var(--accent)); min-height:44px; padding:16px 0; }.season-details p { line-height:1.8; }.season-details a { font-size:12px; }
.season-table { width:100%; border-collapse:collapse; font-size:13px; }.season-table caption { text-align:left; color:var(--muted); padding:14px 0; }.season-table td,.season-table th { text-align:right; padding:12px 8px; border-bottom:1px solid var(--border); }.season-table th:first-child { text-align:left; }
.season-bars:focus-visible,.season-slider:focus-visible { outline:2px solid var(--focus-ring, var(--accent)); outline-offset:3px; }
@media(max-width:480px) { .seasonality-view h2 { font-size:20px; }.season-metrics { gap:10px; }.season-metrics article { padding:12px; }.season-metrics strong { font-size:27px; }.season-metrics .small { font-size:11px; }.season-macro { padding:14px; }.season-controls { align-items:stretch; }.season-controls label { width:100%; } }

/* Creator setup, evidence workspace and portfolio scenarios. */

.creator-onboarding{padding:24px;margin:14px 0 24px;border:1px solid var(--border);border-radius:16px;background:var(--surface2)}.creator-setup-heading h2{font-size:1.35rem;margin:2px 0 8px}.creator-find-form{display:flex;gap:12px;align-items:end;margin-top:20px}.creator-find-form label{display:grid;gap:7px;flex:1}.creator-find-form label>span{font-size:.8rem;color:var(--muted)}.creator-find-form input{width:100%}.creator-example{border:0;background:none;color:var(--accent-text, var(--accent));padding:12px 0 0;text-align:left;cursor:pointer;overflow-wrap:anywhere;font-size:.8rem}.creator-find-results:empty{display:none}.creator-find-results{margin-top:16px}.creator-candidate{display:flex;align-items:center;width:100%;gap:12px;text-align:left;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:14px;margin-top:8px;cursor:pointer}.creator-candidate>span:nth-child(2){flex:1;min-width:0}.creator-candidate small{display:block;overflow-wrap:anywhere;margin-top:4px}.creator-avatar{flex:none;width:44px;height:44px;border-radius:50%;object-fit:cover}.creator-selected{display:flex;align-items:center;justify-content:space-between;font-weight:600}.creator-analysis-state{font-size:.75rem;color:var(--accent-text, var(--accent));line-height:1.6}.creator-confirm{width:min(560px,calc(100vw - 32px));max-height:85dvh;overflow:auto;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:20px;padding:28px;box-shadow:0 24px 90px #0009}.creator-confirm::backdrop{background:#000b;backdrop-filter:blur(4px)}.creator-confirm h2{font-size:1.4rem;margin:8px 0 24px}.creator-confirm .creator-identity h3{margin:0}.creator-confirm p{line-height:1.7;overflow-wrap:anywhere}.creator-confirm-note{border-left:2px solid var(--accent);padding-left:14px;color:var(--muted);font-size:.85rem}.creator-confirm .evidence-controls{justify-content:flex-end;margin-top:24px}.creator-allocation{display:flex;height:26px;overflow:hidden;border-radius:6px;margin:16px 0 10px;font:10px var(--mono);color:#081510}.creator-allocation span{display:grid;place-items:center;min-width:0;flex-basis:0}
@media(max-width:720px){.creator-onboarding{padding:16px}.creator-find-form{flex-direction:column;align-items:stretch}.creator-confirm{padding:20px}.creator-confirm .evidence-controls{flex-direction:column}.creator-confirm .btn{width:100%}.creator-selected{align-items:start;gap:10px}}
.creator-confirm .evidence-controls{position:sticky;bottom:-28px;background:var(--surface);padding:14px 0;border-top:1px solid var(--border);margin-bottom:-28px}.creator-confirm .small{font-size:.8rem}
@media(max-width:720px){.creator-confirm .evidence-controls{bottom:-20px;margin-bottom:-20px}}

/* Creator starting points (the natural-language alert composer was retired 2026-10-07). */
.creator-pick:hover{border-color:var(--accent);color:var(--accent-text, var(--accent))}
.creator-pick:focus-visible{outline:2px solid var(--focus-ring, var(--accent));outline-offset:3px}
.creator-example-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:18px 0 24px}
.creator-pick{appearance:none;text-align:left;cursor:pointer;border:1px solid var(--border);border-radius:12px;padding:16px;background:var(--surface-2);color:var(--text);font:inherit;min-width:0}
.creator-pick strong,.creator-pick span{display:block;overflow-wrap:anywhere}.creator-pick strong{font-size:14px;margin-bottom:5px}.creator-pick span{font-size:12px;color:var(--muted)}
@media(max-width:560px){.creator-example-grid{grid-template-columns:1fr}.creator-pick{padding:14px}}

/* Creator search: shared directory suggestions and durable follow feedback. */
.creator-suggestions{margin-top:8px;border:1px solid var(--border);border-radius:12px;overflow:hidden;max-height:300px;overflow-y:auto}
.creator-suggestions[hidden]{display:none}
.creator-suggestion{display:flex;gap:12px;align-items:center;width:100%;padding:12px;text-align:left;border:0;border-bottom:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;font:inherit}
.creator-suggestion:last-child{border-bottom:0}.creator-suggestion:hover,.creator-suggestion[aria-selected=true]{background:var(--surface2);outline:2px solid var(--focus-ring, var(--accent));outline-offset:-2px}
.creator-suggestion>span{min-width:0}.creator-suggestion strong,.creator-suggestion small{display:block;overflow-wrap:anywhere}.creator-suggestion small{font-size:.75rem;margin-top:4px}

/* Company search: the one search box (js/app/search-box.js) is styled in app-search.css. */

/* Event dossiers keep the scan brief; evidence expands in place. */
.event-insight { margin-top:14px; }
.event-eyebrow { display:block; color:var(--accent-text, var(--accent)); font-size:.75rem; font-weight:650; margin-bottom:5px; }
.event-hint { border-left:2px solid var(--accent,#ff9800); padding:2px 0 2px 12px; }
.event-hint p,.event-relevance p { margin:4px 0 8px; font-size:.875rem; line-height:1.65; }
.event-schedule { margin:8px 0 14px; }
.event-relevance { padding:12px 0; border-top:1px solid #ffffff12; }
.event-related-chips { display:flex; flex-wrap:wrap; gap:7px; }
.event-related { display:flex; gap:5px 10px; flex-wrap:wrap; align-items:center; border:1px solid #ffffff20; border-radius:9px; padding:8px 10px; text-decoration:none; font-size:.8rem; }
.event-related .small { flex-basis:100%; font-size:.75rem; }
.event-basis { margin-top:9px; font-size:.75rem; color:var(--muted,#9098a2); }
.event-source-link { display:block; margin:6px 0; overflow-wrap:anywhere; }
.event-evidence { background:#ffffff04; border:1px solid #ffffff18; border-radius:10px; margin-top:6px; }
.event-evidence > summary { padding:12px 14px; font-size:.875rem; cursor:pointer; font-weight:600; }
.event-evidence[open] > summary { border-bottom:1px solid #ffffff12; }
.event-evidence-body { padding:0 14px 14px; }
.event-evidence-caption { font-size:.8rem; line-height:1.6; }
.event-evidence-toolbar { display:flex; flex-wrap:wrap; gap:10px; justify-content:space-between; }
.event-stock.input { width:auto; min-width:110px; padding:7px 10px; font-size:.85rem; }
.event-horizons { display:flex; gap:4px; }
.event-horizons .active { color:var(--accent-text, var(--accent)); border-color:var(--accent,#ff9800); }
.event-stats { display:grid; grid-template-columns:1fr 1fr 1.4fr; gap:10px; margin:14px 0; }
.event-stats strong { display:block; margin-top:4px; font-size:1.1rem; }
.event-distribution { height:6px; display:flex; overflow:hidden; border-radius:4px; }
.event-up { background:var(--pos,#4dbb77); }.event-down { background:var(--neg,#ec655a); }.event-flat { background:#888; }
.event-caveat { line-height:1.6; color:var(--muted,#a0a5ad); }
.event-table-scroll { overflow:auto; max-height:360px; margin-top:10px; }
.event-sample-table { font-size:.75rem; width:100%; border-collapse:collapse; white-space:nowrap; }
.event-sample-table th,.event-sample-table td { padding:9px 10px; border-bottom:1px solid #ffffff14; text-align:left; }
.event-sample-table th { background:var(--bg,#111); position:sticky; top:0; }
.event-samples summary { font-size:.8rem; cursor:pointer; }
.event-upgrade { display:inline-block; margin:10px 0; font-size:.8rem; }
.cal-main { min-width:0; }
@media(max-width:560px) {
 .event-stats { grid-template-columns:1fr 1fr; }
 .event-stats > :last-child { grid-column:1/-1; }
 .event-evidence-body { padding:0 10px 10px; }
 .event-related { max-width:100%; }
 .event-evidence-toolbar { align-items:flex-start; }
 .event-horizons .btn { padding:7px 8px; }
}
@media(max-width:560px) {
 .cal-ev { display:block; position:relative; }
 .cal-ev > .cal-ico,.cal-ev > .cal-ev-logo { position:absolute; top:11px; left:11px; width:28px; height:28px; }
 .cal-ev .cal-kind-label { margin-left:36px; min-height:28px; display:inline-flex; align-items:center; }
 .cal-ev .cal-title { padding-left:36px; min-height:30px; }
 .event-horizons { flex-wrap:wrap; }
 .event-stats strong { font-size:1rem; }
}

.event-recent-history{margin-top:1.5rem;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.7rem}
.event-recent-history h4{grid-column:1/-1;margin:0}
.event-past-card{border:1px solid var(--border);border-radius:10px;padding:.9rem;min-width:0;overflow-wrap:anywhere}
.event-past-card>div{display:flex;flex-direction:column;gap:.25rem}.event-past-card p{margin:.6rem 0}
.event-year-label{display:flex;align-items:center;gap:.8rem;margin:1rem 0}.event-year-label select{max-width:160px}
@media(max-width:680px){.event-recent-history{grid-template-columns:1fr}}
/* Dated market context shares evidence and calendar navigation across the app. */
.briefing-notes { margin-block: .75rem; }
.briefing-notes > summary { cursor: pointer; min-height: 44px; align-content: center; font-size: .9rem; color: var(--muted); }
.market-evidence-item a { overflow-wrap: anywhere; }
.prediction-contract summary { cursor: pointer; color:var(--accent-text, var(--accent)); padding-block: .45rem; }
.market-evidence-item { padding-block: .8rem; border-top: 1px solid var(--line,#303238); }
.prediction-panel { border-top: 1px solid var(--line,#303238); margin-top: 1rem; padding-top: .5rem; }
.prediction-panel h4 { margin-bottom: .5rem; }
.prediction-contract { padding: .8rem 0; border-bottom: 1px solid var(--line,#303238); }
.prediction-contract h5 { font-size: .94rem; margin: 0 0 .5rem; overflow-wrap: anywhere; }
.prediction-outcomes { display: flex; flex-wrap: wrap; gap: .5rem; }
.prediction-outcome { display: flex; gap: .75rem; align-items: baseline; border: 1px solid var(--line,#303238); border-radius: 8px; padding: .35rem .6rem; }
.prediction-outcome strong { color:var(--accent-text, var(--accent)); }
.prediction-rules { white-space: pre-wrap; overflow-wrap: anywhere; max-height: 18rem; overflow: auto; }

.billing-currency{margin:20px 0}.billing-currency label{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.billing-currency select{padding:10px 12px;max-width:100%;border:1px solid var(--line,#343b44);border-radius:10px;background:var(--card,#12161b);color:inherit}

/* The saved monitors list (the legacy screen builder and the raw hit history left on 2026-10-23; what the alerts caught is
   我的提醒). A row a link names (我的提醒's 提醒设置) is marked; `.page-app` keeps the mark above the Beta card colours. */
.screen-actions{display:flex;flex-wrap:wrap;gap:.6rem;margin:.8rem 0}
.page-app .screen-saved .btn{min-height:44px;min-width:44px}
.screen-check.is-selected,.page-app .screen-saved-row.is-selected{
  border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--surface));color:var(--text)}
.screen-field.is-selected .input{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,var(--surface))}
.screen-check:focus-within{outline:2px solid var(--accent);outline-offset:3px}
.screen-field{display:flex;flex-direction:column;gap:.45rem;font-size:.85rem;min-width:0}
.screen-field .input{width:100%;min-width:0}
.screen-check{display:flex;gap:.6rem;align-items:center;line-height:1.5;cursor:pointer;min-height:44px;padding:.5rem .7rem;border:1px solid var(--border);border-radius:8px;width:fit-content;max-width:100%}
.screen-check input{margin-top:.3rem;flex:0 0 auto;accent-color:var(--accent,#eda33b)}
.screen-check input{margin-top:0;width:16px;height:16px}
.screen-match{padding:1rem;min-width:0}
.screen-match p{margin:.5rem 0}
.screen-match-head{display:flex;justify-content:space-between;flex-wrap:wrap;gap:.6rem;align-items:center}
.screen-match-head>div{display:flex;gap:.6rem;flex-wrap:wrap;min-width:0;overflow-wrap:anywhere}
.screen-evidence{display:flex;flex-wrap:wrap;gap:.35rem .7rem;padding:.55rem 0;border-top:1px solid var(--border,#343434);font-size:.85rem}
.screen-hit summary{cursor:pointer;line-height:1.6;overflow-wrap:anywhere}
.screen-saved{margin-top:2rem;border-top:1px solid var(--border,#343434);padding-top:1rem}
.screen-saved-list{display:grid;gap:.8rem;margin-top:1rem}
.screen-saved-row{padding:1rem;overflow-wrap:anywhere}
.screen-saved-row h3{margin:0 0 .5rem}
/* 条件提醒 management (owner 2026-10-07): compact monitor rows, "⋯" actions, collapsed 口径, legacy rows at the bottom. */
.screen-saved-row.monitor-row{padding:.65rem .8rem;display:grid;gap:.3rem}
.monitor-row-head{display:flex;align-items:center;gap:.5rem;min-width:0}
.monitor-row-title{flex:1 1 8rem;min-width:0;margin:0;font-size:15px;line-height:1.35;overflow-wrap:anywhere}
.monitor-chip{font-family:inherit;font-size:12px;line-height:1.4;padding:2px 9px;white-space:nowrap;flex:0 0 auto}
.monitor-chip[data-monitor-chip=active]{color:var(--green,#3fa66b);border-color:color-mix(in srgb,var(--green,#3fa66b) 60%,transparent)}
.monitor-chip[data-monitor-chip=stopped],.monitor-chip[data-monitor-chip=access]{color:var(--muted)}
.monitor-chip[data-monitor-chip=waiting],.monitor-chip[data-monitor-chip=paused]{color:var(--yellow,#b58a12);border-color:color-mix(in srgb,var(--yellow,#b58a12) 60%,transparent)}
.monitor-chip[data-monitor-chip=draft],.monitor-chip[data-monitor-chip=trial]{color:var(--muted)}
.page-app .monitor-more{flex:0 0 auto;min-width:44px;min-height:44px;padding:0;font-size:20px;line-height:1}
.monitor-row-sentence{min-width:0}
.monitor-row-meta{margin:0}
.page-app .screen-saved .monitor-actions{margin:.2rem 0 0}
.page-app .screen-saved .monitor-actions .btn{min-height:44px;white-space:normal}
.monitor-row-basis{font-size:12px;color:var(--muted)}
.monitor-row-basis>summary{cursor:pointer;display:inline-flex;align-items:center;min-height:32px;padding:0 2px}
.monitor-row-basis .monitor-terms p{margin:.3rem 0;overflow-wrap:anywhere}
.alert-row.monitor-row-compact{flex-wrap:wrap;align-items:center}
.alert-row.monitor-row-compact>div{flex:1 1 10rem;min-width:0}
.alert-row.monitor-row-compact h3,.alert-row.monitor-row-compact p{margin:0}
.alerts-legacy{margin-top:.6rem}
.alerts-legacy>summary{cursor:pointer;display:flex;align-items:center;gap:.5rem;min-height:44px;font-weight:600}
.alerts-legacy[open]>summary{margin-bottom:.4rem}
.alerts-legacy .screen-saved-list{margin-top:.6rem}

.alert-custom-panel .screen-saved{margin-top:.4rem;border-top:0;padding-top:0}
.alert-custom-panel .screen-saved-list{margin-top:.4rem}
.screen-hit{padding:1rem;border:1px solid var(--border,#343434);border-radius:10px}
.screen-hit .screen-match{margin-top:.8rem}
@media(max-width:560px){.screen-actions>.btn{flex:1 1 130px;white-space:normal}.screen-match-head .btn{padding-left:0}.screen-field span{line-height:1.4}}

.creator-stock-filter{display:flex;align-items:flex-end;gap:.6rem;flex-basis:100%;margin-top:.4rem}
.creator-stock-filter label{display:grid;gap:.25rem;flex:1;min-width:0;max-width:360px}
.creator-stock-filter input{width:100%;min-width:0}
@media(max-width:480px){.creator-stock-filter{align-items:stretch;flex-direction:column}.creator-stock-filter label{max-width:none}}
.radar-access-note{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem 1rem;padding:.8rem 1rem;border:1px solid var(--border,#343434);border-radius:12px;margin:.7rem 0 1rem;font-size:.86rem}
.radar-access-note p{flex:1 1 280px;line-height:1.55;margin:0}
/* Macro evidence: accessible line charts, with separate units and explicit gaps. */
.macro-beta { margin-block: 1rem; --macro-green:#63d99b; --macro-blue:#8bafff; }
html[data-theme="light"] .macro-beta { --macro-green:#147443; --macro-blue:#345da6; }
@media (prefers-color-scheme: light) {
  :root:not([data-theme="dark"]) .macro-beta { --macro-green:#147443; --macro-blue:#345da6; }
}
.macro-heading h2 { margin: .35rem 0 .6rem; font-size: clamp(22px,2vw,28px); line-height:1.3; }
.macro-scores { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: .6rem; margin-block: 1.25rem; }
.macro-score { display: flex; flex-direction: column; gap: .35rem; padding: .7rem 1rem; border-left: 2px solid color-mix(in srgb,var(--macro-green) 45%,var(--border)); }
.macro-score strong { color: var(--macro-green); font-size: clamp(1.8rem,4vw,2.65rem); font-weight: 500; line-height: 1.1; }
.macro-annotation { border-left: 2px solid var(--macro-green); padding: .65rem 1rem; background: color-mix(in srgb,var(--macro-green) 8%,var(--surface)); }
.macro-controls,.macro-tabs,.macro-legend { display: flex; gap: .35rem; flex-wrap: wrap; }
.macro-controls { justify-content: space-between; margin-block: 1.2rem .5rem; }
.macro-tabs { max-width: 100%; }
.macro-readout { display: flex; align-items: baseline; gap: 1rem; flex-wrap: wrap; min-height: 2.1rem; padding: .5rem 0; }
.macro-readout>strong { color: var(--muted); }
.macro-chart svg { width: 100%; height: auto; min-height: 180px; display: block; touch-action: pan-y; }
.macro-date-label { display: flex; flex-direction: column; gap: .3rem; color: var(--muted); font-size: .78rem; }
.macro-date-slider { width: 100%; accent-color: var(--macro-green); margin: .2rem 0; min-height: 24px; }
.macro-legend { gap: 1rem; align-items: center; margin-block: .65rem 1.4rem; }
.macro-legend span { display: flex; align-items: center; gap: .4rem; }
.macro-legend i { width: 16px; height: 2px; display: inline-block; }
.macro-evidence,.macro-validation { border-top: 1px solid var(--border); padding-block: .75rem; }
.macro-evidence summary,.macro-validation summary { cursor: pointer; padding-block: .4rem; }
.macro-metrics { display: grid; grid-template-columns: repeat(auto-fit,minmax(180px,1fr)); gap: .8rem; margin-block: 1rem; }
.macro-metrics>div { display: flex; flex-direction: column; gap: .25rem; }
.macro-contributions { display: grid; grid-template-columns: 1fr auto; gap: .5rem 1rem; }
.macro-contributions dd { margin: 0; text-align: right; }
.macro-table-scroll { overflow-x: auto; }
.macro-validation-table { width: 100%; border-collapse: collapse; white-space: nowrap; font-size: .8rem; }
.macro-validation-table th,.macro-validation-table td { padding: .6rem .5rem; border-bottom: 1px solid var(--border); text-align: left; }
@media(max-width:560px) { .macro-score { padding: .5rem; }.macro-score>span {font-size:.72rem;}.macro-controls { gap:.8rem; }.macro-tabs .btn { padding:.4rem .6rem; }.macro-readout { gap:.6rem; font-size:.85rem; } }
.earnings-panel { border-block: 1px solid var(--line,#303238); padding: 1.25rem 0; margin-block: 1rem; }
.earnings-heading h3 { margin: .3rem 0; }
.earnings-columns { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 1rem; margin-block: 1rem; align-items: start; }
.earnings-card { border: 1px solid var(--line,#303238); border-radius: 12px; padding: 1rem; min-width: 0; }
.earnings-card h4 { margin: .5rem 0; }
.earnings-metrics { display: grid; gap: .65rem; margin: 1rem 0; }
.earnings-metrics > div { display: grid; grid-template-columns: 1fr auto; gap: .35rem .6rem; align-items: baseline; }
.earnings-metrics dt { font-size: .85rem; }
.earnings-metrics dd { font-size: 1.1rem; margin: 0; font-weight: 600; }
.earnings-metrics .small { grid-column: 1/-1; }
.earnings-panel p, .earnings-panel blockquote { overflow-wrap: anywhere; }
.earnings-panel summary { cursor: pointer; color:var(--accent-text, var(--accent)); padding-block: .6rem; }
.earnings-panel blockquote { border-left: 2px solid var(--line,#303238); margin: .6rem 0; padding-left: .8rem; color: var(--muted); font-size: .85rem; }
.earnings-context-groups { display: grid; grid-template-columns: repeat(auto-fit,minmax(min(100%,240px),1fr)); gap: 1rem; }
.earnings-context-groups h4 { margin-bottom: .2rem; }
.earnings-observation { margin-bottom: .8rem; }
.earnings-observation p { margin-bottom: .25rem; }
.earnings-citations summary { font-size: .8rem; padding-block: .15rem; }
.earnings-reaction-chips { display: flex; gap: 1rem; flex-wrap: wrap; }
.earnings-reaction-chips > div { display: grid; gap: .4rem; border: 1px solid var(--line,#303238); border-radius: 8px; padding: .7rem 1rem; min-width: 120px; }
.earnings-reaction-chips .mono { font-size: 1.15rem; }
.earnings-method { margin-block: 1rem; }
@media(max-width:640px) { .earnings-columns { grid-template-columns: 1fr; } .earnings-card { padding: .85rem; } .earnings-reaction-chips { gap: .5rem; } }

/* Source-linked business context */
.company-context{border:1px solid var(--border);border-radius:12px;padding:16px;margin:16px 0;min-width:0}.company-heading,.company-links{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.company-context p{line-height:1.6;overflow-wrap:anywhere}.company-links{margin:10px 0}.company-evidence summary{cursor:pointer;color:var(--accent-text, var(--accent))}.company-source{display:block;margin:8px 0;overflow-wrap:anywhere}.symbol-name small{display:block;white-space:normal}.company-context .chip{white-space:normal}

.company-flow{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:12px 0}.company-flow>div{padding:12px;border-radius:8px;background:var(--bg);border:1px solid var(--border)}.company-flow p{margin:6px 0 0}@media(max-width:520px){.company-flow{grid-template-columns:1fr}}

/* Creator notifications share the existing Alerts navigation and account boundary. */
.updates-entry { display:flex; align-items:center; justify-content:space-between; gap:18px; }
.updates-entry h2,.updates-entry p { margin:0 0 6px; }
.updates-layout { display:grid; grid-template-columns:minmax(270px,340px) minmax(0,1fr); gap:24px; align-items:start; }
.updates-settings,.updates-feed { min-width:0; }
.updates-settings .card { margin-bottom:16px; padding:20px; }
.updates-settings h2,.updates-feed h2 { font-size:1.1rem; margin:0 0 12px; }
.updates-settings h3 { margin:20px 0 10px; font-size:1rem; }
.updates-saved .updates-topic:first-of-type { border-top:0; padding-top:0; margin-top:0; }
.updates-watchlist { border-top:1px solid var(--border); border-bottom:1px solid var(--border); margin:16px 0; }
.updates-watchlist > summary { cursor:pointer; min-height:44px; padding:12px 0; font-size:.85rem; font-weight:600; }
.updates-watchlist > summary .count { margin-left:8px; font-size:.75rem; }
.updates-watchlist .updates-choices { margin:0 0 12px; }
.updates-watchlist legend { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap; }
.updates-add { display:flex; flex-wrap:wrap; gap:10px; margin:18px 0; }
.updates-add .search-box { flex:1 1 180px; min-width:0; }
.updates-add input { width:100%; }
.updates-choices { padding:0; border:0; margin:18px 0; min-width:0; }
.updates-choices legend { font-size:.85rem; color:var(--muted); padding:0 0 8px; }
.updates-choice,.updates-check { display:flex; align-items:center; gap:10px; min-height:44px; cursor:pointer; font-size:.9rem; }
.updates-choice input,.updates-check input { accent-color:var(--accent); width:18px; height:18px; flex-shrink:0; }
.updates-choice small { display:block; font-size:.75rem; margin-top:2px; }
.updates-topic { border-top:1px solid var(--border); padding:14px 0 0; margin-top:10px; }
.updates-topic-head,.updates-topic-actions,.updates-feed-head,.updates-item-top { display:flex; gap:12px; align-items:center; justify-content:space-between; flex-wrap:wrap; }
.updates-topic p { margin:8px 0; font-size:.75rem; }
.updates-topic-actions .updates-check { font-size:.8rem; }
.updates-push p { line-height:1.6; margin:10px 0; }
.updates-status:empty { display:none; }
.updates-status { padding:12px 16px; border-left:3px solid var(--accent); background:var(--surface-2); margin-bottom:18px; }
.updates-item { margin-top:16px; }
.updates-item[data-unread=true] { border-left:3px solid var(--accent); }
.updates-selected { outline:2px solid var(--focus-ring, var(--accent)); outline-offset:3px; }
.updates-item-top { justify-content:flex-start; }
.updates-author { font-weight:600; margin-right:auto; }
.updates-item h3 { font-size:1.1rem; line-height:1.5; margin:13px 0 8px; overflow-wrap:anywhere; }
.updates-reasons { display:flex; flex-wrap:wrap; gap:8px; margin-top:12px; }
.updates-reason { font-size:.75rem; padding:5px 9px; border-radius:var(--r-sm); border:1px solid var(--border); background:var(--surface-2); }
.updates-direct { color:var(--pos); }.updates-sector { color:var(--muted); }
.updates-detail { border-top:1px solid var(--border); margin-top:14px; }
.updates-detail summary { padding:14px 0; cursor:pointer; color:var(--text); min-height:44px; font-weight:600; font-size:.9rem; }
.updates-summary { white-space:pre-line; line-height:1.8; overflow-wrap:anywhere; }
.updates-dates { display:grid; grid-template-columns:auto minmax(0,1fr); gap:6px 16px; font-size:.8rem; margin:20px 0; }
.updates-dates dt { color:var(--muted); }.updates-dates dd { margin:0; }
.updates-evidence blockquote { margin:12px 0; border-left:2px solid var(--border); padding-left:12px; line-height:1.65; }
.updates-evidence a { display:inline-block; padding:8px 0; font-size:.85rem; }
.updates-item-actions { display:flex; flex-wrap:wrap; gap:8px; margin-top:12px; }
.updates-gate { max-width:760px; }.updates-gate li { line-height:1.7; margin:8px 0; }
.updates-gate a { margin:14px 10px 0 0; }
.updates-page button:focus-visible,.updates-page a:focus-visible,.updates-page summary:focus-visible,.updates-page input:focus-visible { outline:2px solid var(--focus-ring, var(--accent)); outline-offset:3px; }
@media(max-width:900px) { .updates-layout { grid-template-columns:1fr; }.updates-entry { align-items:start; flex-direction:column; } }
@media(max-width:480px) { .updates-dates { grid-template-columns:1fr; gap:4px; }.updates-dates dd { margin-bottom:9px; }.updates-layout { gap:12px; }.updates-item-actions .btn { min-height:44px; } }

.creator-page{max-width:860px;margin:22px auto}.creator-page-heading{margin-bottom:24px}.creator-page-heading h2{font-size:1.5rem;margin:0 0 5px}.creator-page-heading p{margin:0}.creator-page-heading .creator-avatar{width:54px;height:54px}.creator-page-visual{background:var(--surface2);border:1px solid var(--border);border-radius:18px;padding:22px}.creator-page-visual h3{font-size:1.05rem;margin:0 0 8px}.creator-visual-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}.creator-visual-heading .evidence-badge{white-space:nowrap}.creator-chart{margin:14px 0 0}.creator-price-chart{width:100%;height:auto;display:block}.creator-chart-range{width:calc(100% - 70px);margin:0 20px 0 50px;accent-color:var(--accent);cursor:ew-resize}.creator-chart-readout{text-align:center;color:var(--muted);font-family:var(--mono);margin:10px 0}.creator-page-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;border-top:1px solid var(--border);margin-top:18px;padding-top:16px}.creator-page-metrics .evidence-metric{padding:0;background:transparent}.creator-page-metrics strong{font-size:1.25rem}.creator-page-method{margin-top:20px;font-size:.8rem}.creator-page-method blockquote{margin:12px 0;padding-left:12px;border-left:2px solid var(--accent)}.creator-activity{margin:24px 0 18px}.creator-activity-bars{display:flex;gap:12px;align-items:end;min-height:134px;justify-content:center}.creator-activity-column{display:flex;flex-direction:column;align-items:center;justify-content:end;gap:7px;flex:1;max-width:100px}.creator-activity-track{width:70%;background:var(--border);border-radius:5px 5px 0 0;display:flex;align-items:end;min-height:2px}.creator-activity-track>div{width:100%;background:var(--accent);border-radius:5px 5px 0 0}.creator-activity figcaption{text-align:center;margin-top:20px}.creator-highlights{margin:28px 0}.creator-highlights h3{font-size:1.1rem}.creator-highlights article{padding:16px 0;border-bottom:1px solid var(--border)}.creator-highlights article p{margin:8px 0 10px;line-height:1.8;font-size:.95rem;max-width:72ch}.creator-mentions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:20px 0}.creator-page-about{padding:18px 0;line-height:1.8}.creator-page details>summary{cursor:pointer;color:var(--muted)}
@media(max-width:600px){.creator-page{margin-top:20px}.creator-page-heading h2{font-size:1.2rem}.creator-page-visual{padding:16px 12px}.creator-page-metrics{gap:8px}.creator-page-metrics strong{font-size:1.05rem}.creator-visual-heading{align-items:start;flex-direction:column;gap:4px}.creator-highlights article p{font-size:.9rem}.creator-activity-column{gap:5px}.creator-activity-column .small{font-size:.65rem}.creator-chart-readout{font-size:.65rem}}
.creators-view [hidden]{display:none!important}.creator-page-heading h1{font-size:1.5rem;margin:0 0 5px}.creator-page-coverage-mini{padding:18px;margin:24px 0}.creator-page-coverage-mini .creator-activity{max-width:420px;margin:12px 0}.creator-page-coverage-mini .creator-activity-bars{min-height:90px}.creator-page-coverage-mini .creator-activity-track{max-height:64px}.creator-page-coverage-mini .creator-activity figcaption{text-align:left;margin-top:10px}.creator-page-coverage-mini>p{margin:10px 0 0}@media(max-width:600px){.creator-page-heading h1{font-size:1.2rem}}

/* Calendar: a compact agenda, with exchange closures distinct from releases. */
.calendar-view > h1 { margin-bottom:8px; }
.calendar-view > p { margin-top:0; }
.cal-filters { margin:16px 0 10px; border-bottom:1px solid var(--border); }
.cal-filters > summary,.cal-research-more > summary,.cal-session-impact > summary { cursor:pointer; min-height:44px; padding:12px 0; font-size:13px; color:var(--accent-text, var(--accent)); }
.cal-filters .cal-bar { margin-top:0; }
.cal-research-more { margin-top:6px; }
.cal-research-more > summary { padding:8px 0; min-height:38px; }
.cal-ev.cal-t-holiday,.cal-ev.cal-t-early_close { border:1px solid color-mix(in srgb,var(--accent) 45%,var(--border)); background:color-mix(in srgb,var(--accent) 6%,var(--surface)); border-radius:12px; }
.cal-t-holiday .cal-title,.cal-t-early_close .cal-title { color:var(--accent-text, var(--accent)); }
.cal-holiday-brief { font-size:13px; line-height:1.75; margin:12px 0 0; }
.cal-session-impact { border-top:1px solid var(--border); margin-top:12px; }
.cal-session-impact > div { padding:12px 0; border-top:1px solid var(--border); }
.cal-session-impact strong { font-size:13px; }
.cal-session-impact p { line-height:1.8; margin:8px 0; }
.cal-closed { background:color-mix(in srgb,var(--accent) 8%,var(--surface))!important; }
.pill-holiday,.pill-early_close { color:var(--accent-text, var(--accent)); border:1px solid color-mix(in srgb,var(--accent) 30%,transparent); }
.cal-closed .mbar { color:var(--accent-text, var(--accent)); }
.seasonality-view .season-controls { align-items:end; gap:12px; margin:20px 0 12px; }
.seasonality-view .season-controls label { flex:1 1 150px; }
.seasonality-view .season-controls select { width:100%; }
.season-reading { border-left:3px solid var(--accent); padding:4px 0 4px 18px; margin:24px 0 18px; max-width:850px; }
.season-reading h3 { font-size:20px; margin:0 0 8px; }
.season-reading p { font-size:15px; line-height:1.9; margin:0; }
.season-metrics article { padding:18px; background:var(--surface-2); }
.season-metrics article > b { font-size:14px; margin-bottom:14px; }
.season-metrics strong { font-size:27px; margin:6px 0 18px; }
.season-metrics article > .small { font-size:12px; }
.season-distribution { display:flex; gap:3px; height:6px; overflow:hidden; border-radius:3px; }
.season-distribution i { height:100%; }.season-up { background:var(--pos,#33c793); }.season-down { background:var(--neg,#f47067); }.season-flat { background:var(--muted); }
.season-limit { line-height:1.7; }
.season-year-tools { display:flex; gap:12px; margin-top:4px; flex-wrap:wrap; }
.season-year-tools label { display:grid; gap:6px; flex:1 1 120px; font-size:12px; color:var(--muted); }
.season-year-tools select { width:100%; min-height:44px; }
.season-table .season-year { font-size:13px; }
.season-table td { font-variant-numeric:tabular-nums; white-space:nowrap; }
@media(max-width:560px) {
 .season-metrics { grid-template-columns:1fr; gap:10px; }
 .season-metrics article { padding:16px; }
 .season-metrics strong { font-size:25px; }
 .season-reading { padding-left:12px; }
 .season-reading h3 { font-size:18px; }
 .season-reading p { font-size:14px; }
 .season-table th,.season-table td { padding:12px 4px; font-size:12px; }
 .calendar-view .cal-note { font-size:14px; line-height:1.7; }
}
.season-controls select,.season-year-tools select { background:var(--surface-2); color:var(--text); border:1px solid var(--border); border-radius:9px; padding:10px 12px; font:inherit; font-size:13px; }
.cal-session-grid-label { display:none; }
@media(max-width:560px) {
 .cal-session-grid-label { display:block; font-size:9px; line-height:1.4; white-space:normal; color:var(--accent-text, var(--accent)); }
 .cal-closed .cal-event-count,.cal-early .cal-event-count { display:none; }
}
/* Source-grounded creator facts and distinct market-price anchors. */
.creator-claim-facts,.creator-price-context{display:grid;gap:.65rem;margin:1rem 0}
.creator-claim-facts>div,.creator-price-context>div{display:grid;grid-template-columns:minmax(100px,1fr) minmax(0,2fr);gap:1rem}
.creator-claim-facts dt,.creator-price-context dt{color:var(--muted);font-size:.85rem}
.creator-claim-facts dd,.creator-price-context dd{margin:0;overflow-wrap:anywhere;line-height:1.55}
.creator-price-anchors{padding:1rem;border:1px solid var(--border);border-radius:12px;margin:1rem 0}
.creator-price-anchors h4{margin:0 0 .75rem}
.study-list>.study-row:only-child{grid-column:1/-1}
@media(max-width:600px){.creator-claim-facts>div,.creator-price-context>div{grid-template-columns:1fr;gap:.2rem}}

/* Two-week overview: readable day cards on phones, horizontal weeks on desktop. */
.cal-biweeks { display:grid; gap:6px; }
.cal-biweek { min-width:0; }
/* two-week view: a legend of kinds, a week line to plan around, narrow weekend columns, today anchored */
.cal-legend { display:flex; flex-wrap:wrap; gap:6px 16px; margin:0 0 6px; font-size:var(--fs-2xs); color:var(--muted); }
.cal-legend-item { display:inline-flex; align-items:center; gap:6px; }
.cal-legend-item i { width:8px; height:8px; border-radius:50%; background:var(--cal-tone, var(--muted)); }
.cal-week-head { display:flex; align-items:baseline; flex-wrap:wrap; gap:4px 14px; margin:12px 0 6px; }
.cal-week-label { display:block; margin:0; font-size:var(--fs-2xs); font-weight:700; letter-spacing:1.2px; text-transform:uppercase; color:var(--muted); }
.cal-week-highlights { margin:0; font-size:var(--fs-xs); line-height:1.5; color:var(--fg); }
.cal-biweek .cal-bigrid { grid-template-columns:.6fr repeat(5, 1fr) .6fr; gap:6px; }
.cal-bicell { min-height:126px; padding:9px 9px 10px; gap:6px; }
.cal-bicell.cal-wknd { background:color-mix(in srgb, var(--surface-2) 60%, var(--surface)); opacity:.8; }
.cal-bicell.cal-wknd .cal-biquiet { display:none; }
.cal-bicell.cal-weekend { opacity:.8; }
.cal-bicell.cal-is-today { background:color-mix(in srgb, var(--accent) 8%, var(--surface)); border-color:color-mix(in srgb, var(--accent) 55%, var(--border)); box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 30%, transparent) inset, 0 8px 22px rgba(0,0,0,.2); opacity:1; }
.cal-bicell.cal-is-today::before { content:""; position:absolute; inset:0 0 auto 0; height:3px; background:var(--accent); }
.cal-biweekday { display:inline-block; font-size:var(--fs-2xs); letter-spacing:1.2px; text-transform:uppercase; font-weight:650; color:var(--muted); }
.cal-bicell.cal-is-today .cal-biweekday { color:var(--accent-text, var(--accent)); }
.cal-bisession { font-size:var(--fs-2xs); font-weight:650; color:var(--c-session); }
.cal-biquiet { font-size:var(--fs-2xs); color:color-mix(in srgb, var(--muted) 70%, transparent); }
.pill .pill-txt { flex:1 1 auto; min-width:0; }
.pill-when { flex:0 0 auto; font-family:var(--font); font-size:11px; opacity:1; }
.pill-major { border-inline-start-width:3px; font-weight:650; }
.cal-bidate { display:flex; align-items:center; justify-content:space-between; gap:8px; width:100%; }
.cal-bicell .cal-bidnum { font-size:20px; line-height:1.2; height:30px; min-width:30px; color:var(--text); }
.cal-bicell.cal-weekend { opacity:1; background:var(--surface-2); }
.cal-bicell:focus-visible { outline:3px solid var(--text); outline-offset:2px; }
.cal-biquiet { font-size:13px; line-height:1.4; color:var(--muted); }
.cal-bicell .cal-events { min-width:0; width:100%; }
.cal-bicell .pill { flex-wrap:wrap; gap:2px 5px; padding:5px 7px; border:0; border-inline-start:3px solid var(--cal-tone); border-radius:6px; background:color-mix(in srgb,var(--cal-tone) 8%,var(--surface)); font-size:13px; color:var(--cal-tone); }
.cal-bicell .pill-kind { flex-basis:100%; min-width:0; font-size:12px; font-weight:600; line-height:1.35; white-space:normal; overflow-wrap:anywhere; }
.cal-bicell .pill-ic { display:none; }
/* The legend and the tone name the kind; inside a two-week cell only earnings keep their word (after the ticker). */
.cal-bicell .pill:not(.pill-earn) .pill-kind { display:none; }
.cal-bicell .pill-geo .pill-ic { display:inline-flex; width:13px; height:13px; }
.cal-bicell .pill-geo .pill-ic .app-icon { width:13px; height:13px; }
.cal-bicell .pill-when { order:9; margin-left:auto; }
.cal-bicell.cal-wknd .cal-biweekday { font-size:9px; letter-spacing:.4px; white-space:nowrap; }
.cal-bicell .pill-txt { white-space:normal; overflow-wrap:anywhere; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; }
.cal-bicell .pill-tk { font-size:13px; overflow-wrap:anywhere; white-space:normal; }
.cal-bicell .pill-holiday, .cal-bicell .pill-early_close { font-weight:650; }
.cal-bicell .pill-more { font-size:13px; padding:0; color:var(--muted); }
@media (max-width:560px) {
  .calendar-view .cal-modebar { display:flex; margin:8px 0 12px; }
  .calendar-view .cal-mode { flex:1; min-height:44px; padding:8px 6px; font-size:15px; }
  .calendar-view .cal-grid-hint { font-size:14px; line-height:1.5; margin:0 0 14px; }
  .calendar-view .cal-mhead { display:grid; grid-template-columns:44px minmax(0,1fr) 44px; gap:8px; }
  .calendar-view .cal-mnav { width:44px; height:44px; }
  .calendar-view .cal-mtitle { text-align:center; font-size:16px; line-height:1.4; letter-spacing:0; }
  .calendar-view .cal-today { grid-column:1 / -1; justify-self:end; min-height:44px; font-size:14px; }
  .cal-bibox > .cal-wdrow { display:none; }
  .cal-biweeks { grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; }
  .cal-biweek { display:grid; grid-template-rows:auto 1fr; }
  .cal-week-label { display:block; margin:0 0 10px; font-size:14px; line-height:1.5; color:var(--text); letter-spacing:0; text-transform:none; }
  .cal-week-highlights { font-size:13px; }
  .cal-biweek .cal-bigrid { grid-template-columns:minmax(0,1fr); grid-auto-rows:1fr; gap:8px; }
  .cal-bicell.cal-wknd { opacity:1; }
  .cal-bicell.cal-wknd .cal-biquiet { display:inline; }
  .cal-biweek .cal-bicell { min-height:92px; padding:10px; align-items:stretch; gap:6px; border-radius:12px; }
  .cal-bicell .cal-bidnum { font-size:22px; padding:0; align-self:auto; }
  .cal-biweekday { display:block; font-size:14px; color:var(--muted); }
  .cal-bicell.cal-is-today .cal-biweekday { color:var(--text); }
  .cal-bicell .cal-events { display:flex; gap:5px; }
  .cal-bicell .pill, .cal-bicell .pill-tk, .cal-bicell .pill-more, .cal-biquiet { font-size:14px; line-height:1.4; }
  .cal-bicell.cal-mine-cell::after { font-size:12px; top:3px; right:5px; }
  .cal-bicell .pill { padding:5px 6px; }
  .cal-bicell .pill-logo { width:16px; height:16px; }
  .calendar-view .cal-title { font-size:16px; }
  .calendar-view .cal-research-more > summary, .calendar-view .cal-session-impact > summary { font-size:14px; }
}

/* Watchlist overview: one selected detail, faithful market-cap areas. */
.watch-controls {display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:22px 0 16px}
.watch-modes {display:flex;gap:3px;padding:3px;background:var(--surface);border:1px solid var(--border);border-radius:10px}
.watch-modes .btn {border-color:transparent;min-height:36px;padding:7px 13px;font-size:13px;border-radius:7px;color:var(--muted)}
.watch-modes [aria-pressed="true"] {background:var(--surface-2);color:var(--text);border-color:var(--border);box-shadow:0 1px 3px #00000012}
.watch-controls .watch-filter {font-size:14px;padding:10px 14px;background:var(--surface)}
.watch-filter {flex:1;min-width:160px}
.watch-layout {min-width:0}
.watch-layout.has-detail {display:grid;grid-template-columns:minmax(0,1fr) minmax(340px,.85fr);gap:18px;align-items:start}
.watch-overview,.watch-detail {min-width:0}
.watch-detail {position:sticky;top:0;max-height:calc(100dvh - 220px);overflow:auto;scroll-margin:20px}
.watch-close {margin:0 0 8px}
.watch-research {margin:10px 0}
.watch-table {border:1px solid var(--border);border-radius:14px;overflow:hidden;background:var(--surface)}
.watch-row {display:grid;grid-template-columns:minmax(160px,1fr) minmax(94px,.22fr) minmax(90px,.2fr) minmax(84px,.18fr);gap:20px;align-items:center;width:100%;min-height:78px;padding:15px 20px;background:transparent;color:var(--text);border:0;border-bottom:1px solid color-mix(in srgb,var(--border) 70%,transparent);font:inherit;text-align:right;cursor:pointer;transition:background .15s}
.watch-row:last-child {border-bottom:0}
.watch-row:hover {background:color-mix(in srgb,var(--surface-2) 65%,var(--surface))}
.watch-row[aria-pressed="true"] {background:color-mix(in srgb,var(--accent) 5%,var(--surface));box-shadow:inset 3px 0 0 var(--accent)}
.watch-row:focus-visible,.watch-tile:focus-visible {outline:3px solid var(--accent);outline-offset:-3px;z-index:2}
.watch-identity {display:grid;text-align:left;gap:5px;min-width:0}
.watch-identity-title {display:flex;gap:12px;align-items:center;min-width:0}
.watch-identity strong {font-size:15px;font-weight:700;letter-spacing:.01em}
.watch-industry {font-size:11px;color:var(--muted);background:var(--surface-2);padding:3px 7px;border-radius:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.watch-company {font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.watch-row-price,.watch-row-cap {font-size:14px;font-weight:550;white-space:nowrap}
.watch-row-cap {color:var(--muted);font-weight:500}
.watch-row .watch-change {justify-self:end;font-size:13px;font-weight:650;padding:5px 8px;border-radius:7px;white-space:nowrap}
.watch-row .watch-change.watch-up {background:color-mix(in srgb,var(--pos) 9%,transparent)}
.watch-row .watch-change.watch-down {background:color-mix(in srgb,var(--neg) 9%,transparent)}
.watch-columns {min-height:46px;font-size:12px;font-weight:500;color:var(--muted);background:color-mix(in srgb,var(--surface-2) 55%,var(--surface));cursor:default;padding-block:12px}
.watch-columns span:first-child {text-align:left}
.watch-up {color:var(--pos)} .watch-down {color:var(--neg)} .watch-flat,.watch-unknown {color:var(--muted)}
.watch-session {margin:8px 0 12px}
.watch-saved-note{display:block;font-family:inherit;font-size:11px;font-weight:500;line-height:1.4;color:var(--muted);white-space:normal}
.watch-retained-note{margin:4px 0 12px;line-height:1.5}
.watch-tile .watch-saved-note{color:inherit;opacity:.85}
.watch-map-panel {padding:20px;background:var(--surface);border:1px solid var(--border);border-radius:16px;box-shadow:0 5px 24px #00000008}
.watch-map-heading {display:flex;align-items:center;justify-content:space-between;gap:16px;margin:0 0 18px}
.watch-map-heading h2 {margin:0;font-size:16px;font-weight:650;letter-spacing:.01em}
.watch-map-heading .watch-session {margin:4px 0 0;font-size:12px}
.watch-breadth {min-width:180px}
.watch-breadth-labels {display:flex;justify-content:flex-end;flex-wrap:wrap;gap:12px;font-size:12px}
.watch-breadth-labels>span {display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.watch-breadth-labels i {width:5px;height:5px;border-radius:50%;background:currentColor}
.watch-breadth-bar {display:flex;height:3px;gap:3px;border-radius:3px;overflow:hidden;margin-top:9px}
.watch-breadth-bar span {background:currentColor;opacity:.6;border-radius:3px}
.watch-map-frame {position:relative;isolation:isolate}
.watch-treemap {position:relative;width:100%;height:clamp(280px,43dvh,420px);background:var(--surface);border-radius:9px;overflow:hidden}
.watch-tile {position:absolute;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;overflow:hidden;min-width:0;min-height:0;margin:0;padding:8px;border:2px solid var(--surface);border-radius:7px;cursor:pointer;color:var(--db-nav-ink);font:inherit;background:var(--tile-color,var(--heat-neutral));transition:filter .16s,box-shadow .16s}
.watch-tile:hover {filter:brightness(1.13);box-shadow:inset 0 0 0 1px #ffffff65;z-index:1}
/* Heat-map tiles and their scale are fills under light text in both themes: inside them the change-direction tokens
   are the deep positive/negative fills (tokens.css), swapped together by the red-up preference like --pos/--neg. */
.watch-treemap,.watch-color-scale {--pos:var(--db-positive-fill);--neg:var(--db-negative-fill)}
html[data-change-colors="red-up"] :is(.watch-treemap,.watch-color-scale) {--pos:var(--db-negative-fill);--neg:var(--db-positive-fill)}
.watch-tile.watch-unknown {background:repeating-linear-gradient(135deg,var(--heat-neutral) 0 7px,color-mix(in srgb,var(--heat-neutral) 86%,#fff) 7px 14px)}
.watch-tile strong {font-size:var(--tile-type,20px);font-weight:650;letter-spacing:.015em;line-height:1.2;white-space:nowrap;flex-shrink:0}
.watch-tile-change {font-size:clamp(12px,calc(var(--tile-type,20px)*.62),20px);line-height:1.4;font-weight:450}
.watch-tile-company {max-width:95%;font-size:11px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--db-nav-ink)}
.watch-tile-sector {display:none;position:absolute;top:14px;left:16px;right:16px;text-align:left;color:var(--db-nav-ink);font-size:11px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.watch-tile-cap {display:none;color:var(--db-nav-ink);font-size:11px;margin-top:8px}
.watch-tile.roomy .watch-tile-sector,.watch-tile.roomy .watch-tile-cap {display:block}
.watch-tile.roomy .watch-tile-company {font-size:12px;margin-top:3px}
.watch-tile.tiny>* {visibility:hidden}
.watch-tile[aria-pressed="true"] {box-shadow:inset 0 0 0 2px var(--accent);z-index:1}
.watch-legend {display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin:14px 2px 0;color:var(--muted)}
.watch-legend>.small {font-size:11px}
.watch-legend>span:first-child {margin-right:auto}
.watch-color-scale {display:flex;gap:2px;overflow:hidden;border-radius:4px}
.watch-color-scale>span {min-width:36px;text-align:center;color:var(--db-nav-ink);padding:3px 6px;font-size:10px;line-height:1.5}
.watch-legend-missing::before {content:'';display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:2px;background:repeating-linear-gradient(135deg,var(--heat-neutral) 0 3px,color-mix(in srgb,var(--heat-neutral) 70%,#fff) 3px 4px)}
.watch-small-tiles {margin:16px 0 0;padding:13px 2px 0;border-top:1px solid var(--border)}
.watch-small-tiles>summary {cursor:pointer;font-size:12px;color:var(--muted)}
.watch-small-count {font-size:10px;margin-left:4px;color:var(--faint)}
.watch-small-list {display:flex;min-width:0;flex-wrap:wrap;gap:2px 12px;margin-top:6px}
.watch-small-stock {display:inline-flex;align-items:center;gap:7px;min-height:36px;padding:5px 8px;margin:0 -4px;border:1px solid transparent;border-radius:7px;background:transparent;color:var(--text);font:inherit;font-size:12px;cursor:pointer}
.watch-small-stock strong {font-weight:600}
.watch-small-stock .mono {font-size:11px}
.watch-small-stock:hover,.watch-small-stock[aria-pressed="true"] {background:var(--surface-2);border-color:var(--border)}
.watch-small-stock:focus-visible {outline:2px solid var(--accent);outline-offset:1px}
.watch-small-dot {width:7px;height:7px;border-radius:2px;flex-shrink:0;box-shadow:0 0 0 1px #ffffff26}
.watch-map-tooltip {position:absolute;width:260px;max-width:calc(100% - 16px);z-index:5;padding:15px 16px;border:1px solid var(--border);border-radius:12px;background:var(--surface);color:var(--text);box-shadow:0 8px 32px #00000040;font-size:12px;overflow-wrap:anywhere}
.watch-tip-heading {display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:3px;font-size:16px}
.watch-tip-heading strong {font-weight:650}
.watch-tip-heading .mono {font-size:14px}
.watch-tip-company {font-weight:500;margin-bottom:3px}
.watch-map-tooltip .small {font-size:11px}
.watch-tip-facts {display:grid;grid-template-columns:1fr auto;gap:6px 10px;margin:12px 0 10px;padding-top:10px;border-top:1px solid var(--border)}
.watch-tip-facts dt {color:var(--muted)}
.watch-tip-facts dd {margin:0;text-align:right}
.watch-tip-date {color:var(--muted);font-size:10px}
.watch-unweighted h2 {font-size:16px;margin:20px 0 5px}
.watch-method {margin:16px 0;color:var(--muted);font-size:var(--fs-sm)}
.watch-method summary {cursor:pointer}
@media(max-width:1050px) {.watch-layout.has-detail {display:block}.watch-detail {position:static;max-height:none;margin-top:18px}}
@media(max-width:580px) {.watch-row {grid-template-columns:minmax(95px,1fr) 74px 75px;gap:7px;padding:12px 6px}.watch-row-cap,.watch-columns>span:last-child {display:none}.watch-controls {gap:8px;margin-top:16px}.watch-controls .watch-filter {order:3;flex-basis:100%}.watch-controls>.input {max-width:100%}.watch-filter {min-width:140px}.watch-identity .small {font-size:11px}.watch-map-panel {padding:14px 10px;border-radius:12px}.watch-map-heading {display:block;margin:0 3px 12px}.watch-map-heading h2 {font-size:15px}.watch-breadth {margin-top:12px;min-width:0}.watch-breadth-labels {justify-content:flex-start}.watch-treemap {height:320px}.watch-tile {padding:5px}.watch-tile-company {display:none}.watch-tile-sector {top:10px;left:10px;right:10px;font-size:10px}.watch-tile-cap {font-size:10px}.watch-legend {gap:10px;margin-top:12px}.watch-color-scale {margin-left:auto}.watch-color-scale>span {min-width:30px;padding:3px 5px}.watch-small-tiles {display:block;margin-top:12px;padding-top:12px}.watch-small-list {gap:1px 12px;margin-top:5px}.watch-small-stock {min-height:40px}}

.app-view.watchlist-view, .app-view:has(.watchlist-view) {max-width:1280px}
/* Keep the ticker when a compact cell cannot fit all three lines. Never shrink
   names below 12px or alter market-cap areas to make a label fit. The complete
   ticker and numeric change remain in the accessible buttons below the map. */
.watch-tile.compact>span {display:none}
.watch-tile.compact {padding:1px;border-radius:4px}
.watch-tile.compact>strong {font-size:12px;line-height:1.2;letter-spacing:0;font-weight:600}
@media(max-width:760px){.watch-identity-title{display:block}.watch-industry{display:none}.watch-row{gap:10px;padding:13px 14px}}
@media(max-width:580px){.watch-row{grid-template-columns:minmax(86px,1fr) 74px 80px;gap:8px;min-height:72px;padding:13px 10px}.watch-row-price{font-size:13px}.watch-row .watch-change{font-size:12px;padding:5px 6px}.watch-columns{min-height:42px;font-size:11px;padding-block:10px}.watch-identity strong{font-size:14px}.watch-company{font-size:11px}.watch-small-stock{min-height:44px}.watch-small-stock .mono{font-size:12px}}
@media(prefers-reduced-motion:reduce) {.watch-tile {transition:none}}

/* A readable default; exact market-cap areas remain a separate, labeled view. */
.watch-controls .watch-search {flex:1;min-width:180px}
.watch-controls .watch-search input {width:100%;min-height:44px;font-size:16px}
.watch-search-offer {display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 18px;margin:0 0 16px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}
.watch-search-offer[hidden] {display:none}
.watch-search-offer strong {margin-right:12px}
.watch-search-offer p {margin:5px 0 0;color:var(--muted);font-size:13px}
.watch-search-offer .btn {flex-shrink:0;min-height:44px}
.watch-map-scale {display:flex;gap:4px;margin:0 0 14px}
.watch-map-scale .btn {min-height:44px}
.watch-map-scale [aria-pressed="true"] {background:var(--surface-2);border-color:var(--border);color:var(--text)}
.watch-tile-price {display:none;font-size:12px;color:var(--db-nav-ink)}
.watch-tile.roomy .watch-tile-price {display:block}
.watch-treemap.is-equal {display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px;height:auto;overflow:visible}
.watch-treemap.is-equal .watch-tile {position:relative;min-height:124px;border:0;padding:14px 10px;gap:6px}
.watch-treemap.is-equal .watch-tile strong {font-size:18px}
.watch-treemap.is-equal .watch-tile-change {font-size:16px}
.watch-treemap.is-equal .watch-tile-price {display:block;font-size:13px}
.watch-overview.is-filtered .empty {padding:24px 12px}
.watch-overview.is-filtered .empty img {display:none}
@media(max-width:580px) {
  .watchlist-view>.view-head {gap:8px;margin-bottom:6px}
  .watchlist-view>.view-head h1 {font-size:18px}
  .watchlist-view>.view-head .count {font-size:12px}
  .watchlist-view .watch-controls {margin:8px 0 12px}
  .watchlist-view .watch-map-heading h2 {display:none}
  .watchlist-view .watch-map-panel {display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px}
  .watchlist-view .watch-map-heading {margin:0;min-width:0}
  .watchlist-view .watch-map-scale {margin:0;align-self:start}
  .watchlist-view .watch-map-scale .btn {padding-inline:8px;font-size:12px}
  .watchlist-view .watch-map-panel>:not(.watch-map-heading):not(.watch-map-scale) {grid-column:1 / -1}
  .watchlist-view .watch-breadth {margin-top:6px}
  .watchlist-view .watch-breadth-bar {display:none}
  .watch-controls .watch-search {order:3;flex-basis:100%;min-width:0}
  .watch-search-offer {align-items:flex-start;flex-direction:column;gap:12px;padding:14px}
  .watch-treemap.is-equal {grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}
  .watch-treemap.is-equal .watch-tile {min-height:108px}
  .watch-treemap.is-equal .watch-tile strong {font-size:16px}
  .watch-treemap.is-equal .watch-tile-change {font-size:15px}
}

/* Shared ticker evidence, progressively disclosed. */
.research-record-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:16px}.research-stream{min-width:0}.research-evidence{padding:12px 0;border-top:1px solid var(--border);overflow-wrap:anywhere}.research-facts{display:flex;gap:16px;flex-wrap:wrap}.research-facts dt{font-size:.8rem}.research-facts dd{margin:4px 0;font-weight:600}.research-change{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.research-record{margin-bottom:24px}
.social-history-plot{margin:12px 0}.social-history-plot svg{width:100%;max-height:200px;display:block}
/* Vibe is directional sentiment. Unavailable views have no colored gauge. */
.vibe-direction{margin:14px 0}.vibe-verdict{display:block;font-size:.95rem;line-height:1.5}.vibe-balance{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:12px 0}.vibe-balance dt{color:var(--muted);font-size:.8rem}.vibe-balance dd{margin:5px 0 0;font-size:1.25rem;font-weight:650}.vibe-direction>p{line-height:1.6;margin:10px 0}.vibe-attention-history>summary{min-height:44px;display:list-item;align-content:center;cursor:pointer}.vibe-general{padding:18px;border:1px solid var(--border);border-radius:14px;background:var(--surface);margin-bottom:22px}.vibe-general h2,.vibe-stocks-title{font-size:1.1rem;margin:0 0 12px}.vibe-general-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.vibe-scope{min-width:0}.vibe-scope h3{font-size:.9rem;margin:0 0 6px}.vibe-scope-state{font-size:.85rem;line-height:1.5;margin:0;color:var(--muted)}.vibe-general>p{line-height:1.6;margin:14px 0 0}.vibe-contrarian{border-top:1px solid var(--border);margin-top:12px;font-size:.85rem;line-height:1.7}.vibe-contrarian>summary{cursor:pointer;min-height:44px;align-content:center;font-weight:600}.vibe-contrarian p{margin:10px 0}.social-card .vibe-direction{margin:16px 0}.social-card>.btn{margin-bottom:16px}
@media(max-width:650px){.vibe-general{padding:16px;margin-bottom:20px}.vibe-general-grid{gap:12px}.vibe-direction .small{font-size:.8rem}.social-workspace .social-filters input,.social-workspace .social-filters select{font-size:16px}}
/* Shared stock briefs: a short judgment first, evidence on demand. */
.stock-briefs{display:grid;gap:16px;max-width:1100px}.stock-briefs>p{margin:0}
.stock-brief-search .btn{flex:0 0 auto;white-space:nowrap}
.stock-brief{min-width:0;border-left:3px solid var(--accent,#ff9700)}
.stock-brief-head,.stock-brief-links{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.stock-brief-head{justify-content:space-between}.stock-brief-head h2{margin:0}
.stock-brief-state{font-size:.82rem;font-weight:700;color:var(--accent,#ff9700);margin-bottom:8px}
.stock-brief-summary{font-size:1.08rem;line-height:1.7;max-width:72ch}
.stock-brief-actions{display:grid;grid-template-columns:1fr 1fr;gap:20px;padding:16px 0;border-top:1px solid var(--line,#27323e)}
.stock-brief-actions h3,.stock-brief-reasoning h3{font-size:.84rem;color:var(--muted,#9ca9b6);margin:0 0 7px}
.stock-brief-actions p{margin:0;line-height:1.65}.stock-brief-reasoning>section{padding:14px 0;border-bottom:1px solid var(--line,#27323e)}
.stock-brief-reasoning summary,.stock-brief-evidence summary,.stock-brief-more>summary{cursor:pointer;padding:12px 0;font-weight:600}
.stock-brief-fact{border-top:1px solid var(--line,#27323e);padding:12px 0;overflow-wrap:anywhere;scroll-margin-top:12px}.stock-brief-fact h4{margin:0}.stock-brief-fact p{margin:8px 0}
.stock-brief-fact:focus{outline:2px solid var(--accent,#ff9700);outline-offset:4px}
.brief-citation{font:inherit;font-size:.7rem;vertical-align:super;border:0;background:transparent;color:var(--accent,#ff9700);padding:4px 6px;cursor:pointer;min-width:24px;min-height:24px}
.stock-brief-history{display:grid;gap:12px;margin-top:18px}.stock-brief-history .stock-brief{border-left-width:1px}
.vibe-action{font-size:1rem;line-height:1.6;font-weight:600;margin:16px 0}.social-card>.social-metrics{grid-template-columns:repeat(3,minmax(0,1fr))}
@media(max-width:600px){.stock-brief-actions{grid-template-columns:1fr;gap:16px}.stock-brief-summary{font-size:1rem}.stock-brief-links{gap:8px}.stock-brief .btn{white-space:normal}.stock-brief-history .stock-brief{padding:12px}.brief-citation{min-height:32px;min-width:28px}}

/* Evidence map — a compact canvas with a stock at the centre and dated, openable branches. */
.evidence-view{--evidence-support:#107348;--evidence-counter:#b53c52;--evidence-context:#3d6e9c}
html[data-theme=dark] .evidence-view,html[data-theme=dark] .evidence-detail{--evidence-support:#47df98;--evidence-counter:#f18b9b;--evidence-context:#8cb6e7}
@media(prefers-color-scheme:dark){html:not([data-theme=light]) :is(.evidence-view,.evidence-detail){--evidence-support:#47df98;--evidence-counter:#f18b9b;--evidence-context:#8cb6e7}}
.evidence-detail{--evidence-support:#107348;--evidence-counter:#b53c52;--evidence-context:#3d6e9c}
.evidence-heading{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:12px}
.evidence-heading .view-head{margin:0}
.evidence-ticker{flex:0 1 310px;min-width:0;margin:0;gap:8px}
.evidence-ticker>.input{flex:1;min-width:0}.page-app .evidence-ticker>.btn{flex-shrink:0;white-space:nowrap;min-height:44px}
.page-app .evidence-view .input{min-height:44px;font-size:16px}
.evidence-watchlist{display:flex;flex-wrap:wrap;align-items:center;gap:6px;max-width:100%;padding:2px 1px 8px;margin-bottom:8px}
.evidence-watchlist .chip{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:6px 13px;border-radius:10px;text-decoration:none;background:transparent;color:var(--muted);border-color:transparent}
.evidence-watchlist .chip:hover{background:var(--surface-2);color:var(--text)}
.evidence-watchlist [aria-current=page]{background:color-mix(in srgb,var(--accent) 9%,var(--surface));border-color:color-mix(in srgb,var(--accent) 30%,var(--border));color:var(--text);font-weight:700}
.evidence-takeaway{display:flex;align-items:center;gap:14px;border:1px solid color-mix(in srgb,var(--accent) 20%,var(--border));border-radius:14px;padding:14px 18px;margin:0 0 18px;background:linear-gradient(100deg,color-mix(in srgb,var(--accent) 5%,var(--surface)),var(--surface))}
.evidence-summary-icon{display:grid;place-items:center;flex-shrink:0;width:36px;height:36px;border-radius:10px;background:color-mix(in srgb,var(--accent) 10%,transparent);color:var(--accent-text,var(--accent))}
.evidence-takeaway.is-pending .eyebrow{display:none}.evidence-takeaway.is-pending p{margin:0;color:var(--muted)}
.evidence-summary-copy{min-width:0}.evidence-takeaway .eyebrow{font-size:10px;letter-spacing:.08em;color:var(--muted);font-weight:650}
.evidence-takeaway p{margin:3px 0 0;font-size:1rem;line-height:1.6;overflow-wrap:anywhere}
.evidence-takeaway .brief-citation{font-size:11px;min-width:28px;min-height:28px;margin-left:3px;vertical-align:baseline;border:1px solid var(--border);border-radius:6px;background:var(--surface);color:var(--muted)}
.evidence-tools{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
.evidence-tools>.input{order:2;width:270px;min-width:0;background:transparent}
.evidence-filters{order:1;display:flex;gap:4px;flex-wrap:wrap}
.page-app .evidence-filters .btn{display:inline-flex;align-items:center;gap:8px;min-height:44px;border:1px solid transparent;background:transparent;color:var(--muted);padding:8px 12px;border-radius:10px;white-space:nowrap}
.evidence-filter-count{display:inline-grid;place-items:center;min-width:20px;height:20px;padding:0 4px;border-radius:5px;background:var(--surface-2);font-size:11px;color:var(--muted)}
.evidence-filters [aria-pressed=true]{background:var(--surface)!important;border-color:var(--border)!important;color:var(--text)!important;box-shadow:0 1px 3px #00000008}
.evidence-filters .is-support{--branch:var(--evidence-support)}.evidence-filters .is-counter{--branch:var(--evidence-counter)}.evidence-filters .is-context{--branch:var(--evidence-context)}
.evidence-filters :is(.is-support,.is-counter,.is-context)>span:first-child::before{content:'';display:inline-block;width:6px;height:6px;border-radius:50%;margin:0 7px 2px 0;background:var(--branch)}
.evidence-filter-select{display:none}
.evidence-map{--evidence-layout:stack;position:relative;isolation:isolate;display:flex;flex-direction:column;gap:32px;padding:24px 20px;margin:0;border:1px solid var(--border);border-radius:20px;background-color:color-mix(in srgb,var(--surface) 32%,var(--bg));background-image:radial-gradient(color-mix(in srgb,var(--muted) 16%,transparent) .8px,transparent .8px);background-size:18px 18px}
.evidence-connections{position:absolute;inset:0;width:100%;height:100%;overflow:hidden;pointer-events:none;z-index:-1}
.evidence-wire{fill:none;stroke:var(--branch);stroke-width:1.5;opacity:.65}
.evidence-port{fill:var(--branch);stroke:var(--surface);stroke-width:2}
.evidence-trunk{fill:none;stroke:var(--border);stroke-width:1.5}
.evidence-map .is-support,.evidence-stance.is-support{--branch:var(--evidence-support)}
.evidence-map .is-counter,.evidence-stance.is-counter{--branch:var(--evidence-counter)}
.evidence-map .is-context,.evidence-stance.is-context{--branch:var(--evidence-context)}
.evidence-center{position:relative;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:5px;align-self:center;grid-column:2;min-width:0;width:164px;min-height:164px;border:1px solid color-mix(in srgb,var(--accent) 48%,var(--border));border-radius:50%;background:radial-gradient(ellipse at 50% 0%,color-mix(in srgb,var(--accent) 10%,var(--surface)),var(--surface) 78%);box-shadow:0 0 0 7px color-mix(in srgb,var(--accent) 4%,transparent),0 8px 28px #0000000b;text-align:center;padding:16px}
.evidence-center-icon{color:var(--accent-text,var(--accent));margin-bottom:2px}.evidence-center-icon .app-icon{width:22px;height:22px}
.evidence-center>.mono{font-size:1.75rem;line-height:1.2;font-weight:750;letter-spacing:-.035em;overflow-wrap:anywhere;max-width:100%}
.evidence-center>strong{font-size:11px;font-weight:500;color:var(--muted)}.evidence-center>.small{font-size:10px}
.evidence-branches{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;min-width:0}
.evidence-node{position:relative;appearance:none;text-align:left;display:flex;flex-direction:column;gap:8px;min-width:0;padding:15px 17px;border:1px solid color-mix(in srgb,var(--branch) 22%,var(--border));border-radius:13px;background:linear-gradient(130deg,color-mix(in srgb,var(--branch) 5%,var(--surface)),var(--surface) 65%);color:var(--text);font:inherit;cursor:pointer;box-shadow:0 3px 9px #00000008;transition:box-shadow .18s,border-color .18s,background .18s}
.evidence-node:hover,.evidence-node:focus-visible{border-color:var(--branch);box-shadow:0 4px 20px color-mix(in srgb,var(--branch) 12%,transparent)}
.evidence-node:focus-visible{outline:2px solid var(--branch);outline-offset:3px}
.evidence-node>strong{font-size:.9375rem;font-weight:650;line-height:1.6;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
.comparison-label{display:block;color:var(--muted);font-size:12px;line-height:1.5;overflow-wrap:anywhere}
.comparison-context{border-left:2px solid var(--border);padding-left:12px;margin:12px 0;overflow-wrap:anywhere}
.comparison-context p{margin:6px 0;line-height:1.6}.comparison-context .comparison-label{font-weight:600;color:var(--text)}
.comparison-source{display:flex;align-items:center;min-height:44px;width:fit-content;max-width:100%;font-size:13px}
.evidence-node-label{display:flex;align-items:center;gap:8px;font-size:10px;font-weight:550;line-height:1.5;color:var(--branch)}
.evidence-category{display:flex;align-items:center;gap:6px}.evidence-category::before{content:'';width:6px;height:6px;flex-shrink:0;border-radius:50%;background:currentColor}
.evidence-condition{font-size:9px;color:var(--muted);padding:1px 5px;border:1px solid var(--border);border-radius:4px}
.evidence-node-number{margin-left:auto;font-size:10px;letter-spacing:.04em;color:var(--faint);opacity:.8}
.evidence-node-author{display:flex;align-items:center;gap:6px;font-size:11px;line-height:1.4;color:var(--muted);min-width:0;margin-top:auto}
.evidence-node-author .app-icon{width:13px;height:13px;opacity:.75}.evidence-node-author>span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.evidence-node-footer{display:flex;justify-content:space-between;flex-wrap:wrap;gap:6px;font-size:10px;color:var(--muted);padding-top:6px;border-top:1px solid color-mix(in srgb,var(--border) 60%,transparent)}
.evidence-node-footer>span:last-child{color:var(--branch)}
.evidence-map-footer{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:12px 0 22px}.evidence-map-footer>p{margin:0;font-size:12px}
.page-app .evidence-map-footer .btn{min-height:44px}
.evidence-map.is-empty .evidence-center{display:none}.evidence-map.is-empty .evidence-branches{display:block;grid-column:1/-1;margin-left:0}.evidence-map .empty{margin:0;padding:24px 12px;text-align:center;animation:none}.evidence-map .empty::before{display:none}
.evidence-coverage{border-top:1px solid var(--border);color:var(--muted);font-size:13px;line-height:1.7}
.evidence-coverage>summary{display:list-item;cursor:pointer;color:var(--text);padding:14px 0;min-height:44px;font-weight:550}
.evidence-links,.evidence-history{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}.page-app .evidence-links .btn,.page-app .evidence-history .btn{min-height:44px}
.evidence-stance{display:inline-flex;align-items:center;gap:7px;color:var(--branch);font-size:12px;font-weight:650;background:color-mix(in srgb,var(--branch) 8%,transparent);padding:5px 9px;border-radius:7px;margin:0 0 8px}
.evidence-stance::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--branch)}
.evidence-source{padding:18px 0;border-top:1px solid var(--border);overflow-wrap:anywhere}.evidence-source>h3{margin:0 0 10px;font-size:.9375rem}.evidence-source>p{line-height:1.7}.evidence-source>.small{font-size:12px;margin:6px 0}
.evidence-source>details{margin-top:16px;font-size:12px}.evidence-source summary{cursor:pointer;min-height:44px;display:list-item;padding:12px 0}
.evidence-detail>p{line-height:1.7}
@media(min-width:1100px){
 .evidence-map{--evidence-layout:radial;display:grid;grid-template-columns:minmax(0,1fr) 164px minmax(0,1fr);column-gap:44px;row-gap:18px;padding:24px}
 .evidence-branches{display:contents}
}
@media(min-width:601px) and (max-width:1099px){
 .evidence-heading{gap:16px}
 .evidence-ticker{flex-basis:255px}.evidence-tools>.input{width:215px}
 .evidence-center{width:auto;min-height:0;border-radius:14px;padding:12px 22px;display:grid;grid-template-columns:auto auto;gap:3px 12px;text-align:left}
 .evidence-center-icon{grid-row:1/3;margin:0}.evidence-center>.mono{font-size:1.3rem}.evidence-center>strong{display:none}.evidence-center>.small{grid-column:2}
 .evidence-node{grid-column:auto!important;grid-row:auto!important}
}
/* Shared nodes retain one source action; phone grouping does not duplicate evidence. */
.evidence-group,.evidence-group-nodes{display:contents}
.evidence-group-heading,.evidence-node-mobile-meta,.evidence-mobile-actions,.evidence-mobile-state{display:none}
.evidence-center-info>.small{font-size:10px}
.evidence-reset-filter{appearance:none;background:none;border:0;color:var(--accent-text,var(--accent));font:inherit;font-size:12px;min-height:44px;cursor:pointer;text-align:left;padding:0 4px;text-decoration:underline;text-underline-offset:3px;margin-bottom:6px}
.evidence-picker-form{display:flex;gap:8px;margin:0 0 16px}.page-app .evidence-picker-form .input{font-size:16px;min-height:44px;min-width:0;flex:1}.page-app .evidence-picker-form .btn{min-height:44px;flex-shrink:0}
.evidence-picker-list{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.evidence-picker-list .chip{display:flex;align-items:center;justify-content:center;min-height:44px;min-width:0;overflow-wrap:anywhere;border-radius:9px;text-decoration:none;padding:6px;font-size:12px}.evidence-picker-list [aria-current=page]{border-color:var(--accent);color:var(--text)}
@media(max-width:600px){
 .evidence-heading{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:0 0 8px}.evidence-heading .view-head{margin:0;flex:1;min-width:0}.page-app .evidence-heading h1{font-size:20px}
 .evidence-heading>.evidence-ticker,.evidence-watchlist{display:none}
 .evidence-mobile-actions{display:flex;gap:6px;align-items:center}.evidence-search-toggle,.evidence-empty-picker{display:inline-flex;align-items:center;justify-content:center;gap:6px;appearance:none;border:1px solid var(--border);border-radius:10px;background:transparent;color:var(--muted);font:inherit;min-height:44px;min-width:44px;padding:8px;cursor:pointer}
 .evidence-search-toggle[aria-expanded=true],.evidence-view:has(.evidence-reset-filter:not([hidden])) .evidence-search-toggle{color:var(--accent-text,var(--accent));border-color:color-mix(in srgb,var(--accent) 40%,var(--border))}
 .evidence-search-glyph{display:block;position:relative;width:18px;height:18px}.evidence-search-glyph::before{content:'';position:absolute;left:1px;top:1px;width:10px;height:10px;border:1.7px solid currentColor;border-radius:50%}.evidence-search-glyph::after{content:'';position:absolute;left:11px;top:12px;width:7px;height:1.7px;background:currentColor;transform:rotate(45deg);transform-origin:left center;border-radius:2px}
 .evidence-view:has(.evidence-center) .evidence-empty-picker,.evidence-view:not(:has(.evidence-tools)) .evidence-search-toggle{display:none}
 .evidence-takeaway{margin:0 0 12px;padding:10px 12px;border-radius:10px}.evidence-summary-icon,.evidence-takeaway .eyebrow{display:none}.evidence-takeaway p{font-size:.875rem;line-height:1.6;margin:0}
 .evidence-takeaway.is-pending{padding:0 2px;border:0;background:none;margin:0 0 12px}.evidence-takeaway.is-pending p{font-size:12px;line-height:18px}.evidence-workspace:has(.evidence-center) .evidence-takeaway.is-pending{display:none}
 .evidence-tools{display:none;margin-bottom:8px}.evidence-search-open .evidence-tools{display:flex;gap:8px}.evidence-tools>.input{order:0;flex:1 1 0;width:auto;min-width:0}.evidence-tools>.evidence-filter-select{display:block;flex:0 0 120px;width:120px;padding-left:8px;padding-right:4px}.evidence-filters{display:none}
 .evidence-reset-filter{margin:0 0 6px;min-height:44px}
 .evidence-map{--evidence-layout:tree;gap:22px;padding:0;border:0;border-radius:0;background:none}
 .evidence-center{flex-direction:row;justify-content:center;gap:16px;width:fit-content;min-width:210px;max-width:100%;min-height:58px;border-radius:14px;padding:6px 14px;box-shadow:none;text-align:left;background:linear-gradient(110deg,color-mix(in srgb,var(--accent) 7%,var(--surface)),var(--surface))}
 .evidence-center-icon,.evidence-center>strong{display:none}.evidence-center>.mono{font-size:1.25rem}.evidence-center-info{display:flex;flex-direction:column;gap:3px;max-width:115px}.evidence-center-info>.small{font-size:11px;line-height:1.5}.evidence-mobile-state{display:block;font-size:10px;color:var(--faint);line-height:1.5}
 .evidence-branches{display:flex;flex-direction:column;gap:18px;margin:0 0 0 28px}
 .evidence-group{display:block;min-width:0}.evidence-group-heading{display:flex;align-items:center;gap:8px;color:var(--branch);font-size:12px;font-weight:650;line-height:20px;margin:0 0 8px}
 .evidence-group-count{display:inline-grid;place-items:center;min-width:22px;min-height:20px;padding:0 5px;border-radius:5px;background:color-mix(in srgb,var(--branch) 10%,transparent);font-size:11px}
 .evidence-group-nodes{display:flex;flex-direction:column;gap:4px;margin-left:20px}
 .evidence-node{grid-column:auto!important;grid-row:auto!important;position:relative;padding:10px 25px 10px 12px;gap:7px;min-height:66px;border:0;border-radius:8px;background:color-mix(in srgb,var(--branch) 3%,var(--surface));box-shadow:none}
 .evidence-node::after{content:'›';position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:20px;font-weight:400;color:var(--muted)}
 .evidence-node:hover,.evidence-node:focus-visible{background:color-mix(in srgb,var(--branch) 8%,var(--surface));box-shadow:none}
 .evidence-node>strong{font-size:15px;line-height:1.55;font-weight:600;-webkit-line-clamp:2}
 .evidence-node-label,.evidence-node-author,.evidence-node-footer{display:none}
 .evidence-node-mobile-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:11px;line-height:16px;color:var(--muted)}
 .evidence-mobile-author{min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.evidence-mobile-count{margin-left:auto}.evidence-node-mobile-meta .evidence-condition{font-size:10px}
 .evidence-leaf-trunk{opacity:.28}.evidence-map-footer{margin:10px 0 14px}.evidence-map-footer>p{font-size:11px}.evidence-coverage{font-size:12px}
 .evidence-map.is-empty .evidence-branches{margin-left:0}.evidence-map.is-empty .evidence-center{display:flex}
}
@media(prefers-reduced-motion:reduce){.evidence-node{transition:none}}

/* Platform icons identify the source; a verified direction takes color priority. */
:is(.evidence-view,.evidence-detail){--source-youtube:#bd3040;--source-mono:#343c47}
html[data-theme=dark] :is(.evidence-view,.evidence-detail){--source-youtube:#f18f99;--source-mono:#c3cbd5}
@media(prefers-color-scheme:dark){html:not([data-theme=light]) :is(.evidence-view,.evidence-detail){--source-youtube:#f18f99;--source-mono:#c3cbd5}}
.evidence-node{--source-tone:var(--muted);isolation:isolate;overflow:hidden;border:1px solid var(--border);border-inline-start:2px solid color-mix(in srgb,var(--source-tone) 45%,var(--border));background:linear-gradient(135deg,color-mix(in srgb,var(--source-tone) 3%,var(--surface)),var(--surface) 70%)}
.evidence-node.source-youtube{--source-tone:var(--source-youtube)}
.evidence-node.source-x{--source-tone:var(--source-mono)}
.evidence-node:hover,.evidence-node:focus-visible{border-color:color-mix(in srgb,var(--source-tone) 65%,var(--border));background:linear-gradient(135deg,color-mix(in srgb,var(--source-tone) 5%,var(--surface)),var(--surface) 70%);box-shadow:0 6px 20px #0000000c}
.evidence-node:focus-visible{outline-color:var(--text)}
.evidence-source-watermark{position:absolute;z-index:-1;pointer-events:none;right:12px;bottom:28px;width:108px;height:80px;color:var(--source-tone);opacity:.075;display:grid;place-items:center}
.evidence-source-watermark>svg{width:100%;height:100%}
.evidence-node .evidence-node-label{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-bottom:2px}
.evidence-source-badge{display:inline-flex;align-items:center;gap:5px;flex-shrink:0;width:fit-content;max-width:100%;font-size:11px;line-height:18px;font-weight:650;color:var(--muted)}
.evidence-source-badge.source-youtube{color:var(--source-youtube)}
.evidence-source-badge :is(.evidence-brand-mark,.app-icon){width:17px;height:17px;flex-shrink:0}
.evidence-source-badge.source-x{color:var(--text)}
.evidence-source-badge.source-x .evidence-brand-mark{box-sizing:content-box;width:12px;height:12px;padding:3px;border-radius:5px;background:#101318;color:#f8fafc;border:1px solid #58616b}
.evidence-node .evidence-category{margin-left:auto;padding:2px 7px;border:1px solid color-mix(in srgb,var(--branch) 35%,transparent);border-radius:6px;background:color-mix(in srgb,var(--branch) 7%,var(--surface));font-size:10px;line-height:16px;white-space:nowrap;flex-shrink:0}
.evidence-node .evidence-category::before{width:5px;height:5px}
.evidence-node-flags{display:flex;align-items:center;gap:7px;flex-wrap:wrap;color:var(--muted);font-size:10px;line-height:16px}
.evidence-node-footer>span:last-child{color:var(--muted)}
.evidence-node-footer .evidence-node-number{margin-left:auto}
.evidence-source>.evidence-source-badge{margin-bottom:9px}
@media(max-width:600px){
 .evidence-node{border-radius:10px;padding:10px 24px 10px 11px}
 .evidence-node .evidence-node-label{gap:6px;margin-bottom:0}
 .evidence-source-watermark{width:76px;height:58px;right:12px;bottom:19px;opacity:.065}
 .evidence-node-flags{display:none}
}

/* Price dates, candle size and option expiries are three distinct controls. */
.chart-controls{display:flex;gap:20px;align-items:flex-end;flex-wrap:wrap;margin:4px 0 20px}
.chart-control{display:flex;flex-direction:column;gap:7px}
.chart-controls .seg{margin:0;font-family:inherit}
.chart-controls .seg button{padding:9px 14px;min-height:42px;font-size:13px}
.chart-controls .input,.chart-option-controls .input{width:auto;min-height:42px;font-size:14px}
.chart-help-button{display:inline-grid;place-items:center;width:32px;height:32px;border:1px solid var(--border);border-radius:50%;background:var(--surface);color:var(--muted);font-weight:600;cursor:pointer;flex-shrink:0}
.chart-help-button:hover,.chart-help-button:focus-visible{color:var(--accent);border-color:var(--accent)}
.chart-controls>.chart-help-button{margin-bottom:5px}
.chart-workspace{border:1px solid var(--border);border-radius:20px;padding:16px 18px;background:color-mix(in srgb,var(--surface) 52%,var(--bg))}
.chart-workspace .chart-host{height:480px;border:0;border-radius:0;background:transparent}
.chart-ohlc{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;min-height:30px;margin:0 0 10px;font-size:12px}
.chart-option-controls{display:flex;align-items:center;gap:10px 16px;flex-wrap:wrap;padding-top:16px;border-top:1px solid var(--border);margin:0 0 14px}
.chart-option-controls>label:first-child{display:flex;align-items:center;gap:10px}
.chart-extra-toggle{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:6px;margin-left:auto;cursor:pointer}
.chart-workspace .legend{gap:10px 22px;font-size:13px}
.chart-wall-position{font-size:13px;margin:14px 0 8px;line-height:1.65}
.chart-option-notes>.small{font-size:11px;margin:5px 0;overflow-wrap:anywhere}
.chart-expiries{margin-top:14px;padding-top:14px;border-top:1px solid var(--border)}
.chart-expiries summary{font-size:12px;cursor:pointer;color:var(--muted)}
.chart-expiry-rows{display:grid;margin-top:10px}
.chart-expiry-row{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:12px;text-align:left;background:transparent;border:0;border-top:1px solid var(--border);padding:12px 6px;color:var(--text);cursor:pointer}
.chart-expiry-row:hover{background:var(--surface)}
.chart-expiry-row span{display:flex;flex-direction:column;gap:4px;font-size:13px}
.chart-expiry-row small{font-size:11px;color:var(--muted)}
.chart-help h3{margin:20px 0 6px;font-size:15px}.chart-help p{line-height:1.75;font-size:14px}
@media(max-width:600px){
 .chart-controls{gap:10px;align-items:center;margin-bottom:14px}.chart-control:first-child{flex-basis:100%}
 .chart-controls .seg{display:flex;width:100%}.chart-controls .seg button{padding:8px 5px;flex:1;font-size:12px;min-height:44px}
 .chart-controls .chart-control:nth-child(2){flex-direction:row;align-items:center;gap:10px}
 .chart-controls .input,.chart-option-controls .input{font-size:16px;min-height:44px;max-width:210px}
 .chart-controls>.chart-help-button{margin:0}.chart-help-button{width:44px;height:44px}
 .chart-workspace{padding:12px 8px;border-radius:14px}.chart-workspace .chart-host{height:410px}
 .chart-ohlc{gap:4px;font-size:10px}.chart-ohlc time{flex-basis:100%;font-size:10px}
 .chart-option-controls{gap:8px}.chart-extra-toggle{margin:0;min-height:36px;flex-basis:100%}
 .chart-workspace .legend{font-size:12px;gap:8px 16px}.chart-wall-position{font-size:12px}
 .chart-expiry-row{gap:5px;grid-template-columns:1.4fr 1fr 1fr 1fr;padding:12px 2px}.chart-expiry-row span{font-size:11px}.chart-expiry-row small{font-size:9px}
}

/* A dated quote anchors the evidence. The liquid depicts range position only. */
.evidence-center{overflow:hidden;isolation:isolate;min-height:194px;width:190px;border-color:color-mix(in srgb,var(--water-color,var(--muted)) 40%,var(--border));box-shadow:0 0 0 7px color-mix(in srgb,var(--water-color,var(--muted)) 5%,transparent);background:var(--surface)}
.evidence-water{position:absolute;z-index:-1;left:0;right:0;bottom:0;height:var(--water-height,0);max-height:100%;background:linear-gradient(0deg,color-mix(in srgb,var(--water-color) 22%,transparent),color-mix(in srgb,var(--water-color) 8%,transparent));border-top:1px solid color-mix(in srgb,var(--water-color) 45%,transparent);pointer-events:none}
.evidence-water::before{content:'';position:absolute;inset:-5px -20px auto;height:13px;border-radius:50%;background:color-mix(in srgb,var(--water-color) 13%,transparent);transform:rotate(-3deg)}
.evidence-center>.mono{font-size:22px}.evidence-price{display:flex;flex-direction:column;align-items:center;gap:5px;border:0;background:transparent;color:var(--text);padding:5px 0;cursor:pointer;min-height:44px}
.evidence-price strong{font-size:23px;letter-spacing:-.04em}.evidence-price span{font-size:9px;color:var(--muted);white-space:nowrap}
.evidence-water-caption{font:inherit;font-size:9px;padding:5px 0;border:0;background:transparent;color:var(--muted);cursor:pointer}
.evidence-center-info>.small{font-size:9px}.evidence-market-price{font-size:32px;font-weight:700;margin:0 0 8px}.evidence-market-detail h3{margin:24px 0 8px;font-size:15px}.evidence-market-detail p{line-height:1.7}
.evidence-priority{font-size:9px;color:var(--muted)}.evidence-ordering{border:0;background:transparent;padding:10px 0;color:var(--muted);font:inherit;font-size:12px;cursor:pointer;text-decoration:underline;text-underline-offset:4px}
.evidence-queue-note{line-height:1.7;margin:10px 0}
@media(min-width:1100px){.evidence-map{grid-template-columns:minmax(0,1fr) 190px minmax(0,1fr);column-gap:30px}}
@media(min-width:601px) and (max-width:1099px){.evidence-center{display:flex;flex-direction:row;gap:18px;width:auto;min-height:0;padding:12px 20px;border-radius:16px}.evidence-center-info{display:none}.evidence-water-caption{max-width:80px}}
@media(max-width:600px){
 .evidence-center{width:100%;max-width:340px;min-width:0;min-height:84px;display:grid;grid-template-columns:1fr auto;gap:0 12px;padding:7px 14px;border-radius:14px;text-align:left;box-shadow:none}
 
 .evidence-price{grid-column:2;grid-row:1;align-items:flex-end;padding:0;min-height:42px;gap:2px}.evidence-price strong{font-size:21px}.evidence-price span{font-size:11px}
 .evidence-center-info{grid-column:1;grid-row:2;max-width:none;gap:0}.evidence-center-info>.small{font-size:11px}.evidence-mobile-state{font-size:11px;color:var(--muted)}
 .evidence-water-caption{grid-column:2;grid-row:2;font-size:10px;text-align:right;max-width:130px;padding:5px 0;min-height:36px}
 .evidence-queue-note{font-size:11px}.evidence-ordering{min-height:44px}.evidence-price:focus-visible,.evidence-water-caption:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}
}
.evidence-original-title {display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;color:var(--muted);font-size:12px;line-height:1.55;text-align:left}
.evidence-original p {margin:6px 0 16px;overflow-wrap:anywhere}

.creator-reviewed-spans{margin:18px 0;padding:14px 16px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}
.creator-reviewed-spans h3{margin:0;font-size:15px}.creator-reviewed-spans>p{line-height:1.6}
.creator-reviewed-spans article{padding:12px 0;border-top:1px solid var(--border)}.creator-reviewed-spans article p{margin:6px 0;font-size:14px;line-height:1.6}
.creator-reviewed-spans article>a{display:inline-flex;align-items:center;min-height:44px;margin-right:16px}

.creator-spans-more>summary{min-height:44px;align-content:center;cursor:pointer;color:var(--accent-text);font-size:13px}

/* Exact evidence links retain a readable source context on narrow screens. */
.creator-reviewed-spans article.is-focused{outline:2px solid var(--accent);outline-offset:3px;scroll-margin:100px 0 100px}
.creator-reviewed-spans article.is-support{border-left:3px solid var(--green)}
.creator-reviewed-spans article.is-counter{border-left:3px solid var(--red)}
.creator-reviewed-spans.is-inline{border:0;background:transparent;padding:0;margin:16px 0}
.creator-reviewed-spans.is-inline article{padding:14px;border:1px solid var(--border);border-radius:12px;margin:12px 0;background:var(--bg)}
.creator-reviewed-spans.is-inline article.is-support{border-left:3px solid var(--green)}
.creator-reviewed-spans.is-inline article.is-counter{border-left:3px solid var(--red)}
.creator-reviewed-spans article>.cr-take{display:inline-flex;margin:0 8px 6px 0}

.creator-reviewed-spans blockquote{margin:12px 0;padding-left:12px;border-left:2px solid var(--border);overflow-wrap:anywhere}

/* Saved analysis is a local disclosure; citations use the existing source dialog. */
/* Saved analysis is readable on arrival; only its supporting detail is collapsed. */
.evidence-analysis{margin:0 0 20px;padding:18px 20px 6px;border:1px solid color-mix(in srgb,var(--accent) 24%,var(--border));border-radius:16px;background:linear-gradient(110deg,color-mix(in srgb,var(--accent) 4%,var(--surface)),var(--surface) 65%);max-width:100%;overflow-wrap:anywhere}
.evidence-analysis-heading{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:6px 16px}
.evidence-analysis-heading h2{display:flex;align-items:center;gap:8px;margin:0;font-size:13px;font-weight:650;letter-spacing:.01em}
.evidence-analysis-heading .app-icon{width:16px;height:16px;color:var(--accent-text,var(--accent))}
.evidence-analysis-time{margin:0;font-size:11px;line-height:1.6;color:var(--muted)}
.evidence-analysis-overview{margin:10px 0 8px;max-width:90ch;font-size:16px;line-height:1.8;color:var(--text)}
/* The summary's citations name their sources in words ("Sources · Jose Najarro Stocks · Sep 30"), on a line of their own. */
.evidence-analysis-citations{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:8px;font-size:12px;line-height:1.4}
.evidence-analysis-citations-label{color:var(--muted)}
.page-app .evidence-analysis .brief-citation{display:inline-flex;align-items:center;min-height:32px;padding:4px 10px;margin:0;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--text);font:inherit;font-size:12px;line-height:1.35;text-align:left;cursor:pointer}
.evidence-analysis .brief-citation:hover,.evidence-analysis .brief-citation:focus-visible{color:var(--accent-text,var(--accent));border-color:var(--accent)}
.evidence-analysis-details>summary{width:fit-content;min-height:44px;align-content:center;cursor:pointer;font-size:12px;color:var(--muted);padding:10px 0}
.evidence-analysis-details>summary:hover,.evidence-analysis-details>summary:focus-visible{color:var(--text)}
.evidence-analysis-details[open]>summary{color:var(--text)}
.evidence-analysis-body{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:20px;padding:16px 0;border-top:1px solid var(--border)}
.evidence-analysis-body h3{font-size:12px;font-weight:650;margin:0 0 6px;color:var(--muted)}
.evidence-analysis-body p{font-size:13px;line-height:1.8;margin:0}
.evidence-analysis-body .is-risks h3{color:var(--evidence-counter)}
.evidence-analysis-status{font-size:13px;line-height:1.7;color:var(--muted);margin:8px 0 12px}
.evidence-analysis.is-pending{padding:14px 18px 2px;border-color:var(--border);background:var(--surface)}
/* Direction remains source-owned. Color and text make it legible together. */
.evidence-node.is-context{border-color:var(--border);border-inline-start-color:color-mix(in srgb,var(--branch) 40%,var(--border));background:linear-gradient(125deg,color-mix(in srgb,var(--branch) 3%,var(--surface)),var(--surface))}
.evidence-node.is-context:is(:hover,:focus-visible){border-color:var(--branch);background:color-mix(in srgb,var(--branch) 5%,var(--surface))}
.evidence-node.is-context .evidence-source-watermark{color:var(--branch)}
.evidence-node:is(.is-support,.is-counter){--source-tone:var(--branch);border-color:color-mix(in srgb,var(--branch) 60%,var(--border));border-inline-start:3px solid var(--branch);background:linear-gradient(125deg,color-mix(in srgb,var(--branch) 18%,var(--surface)),color-mix(in srgb,var(--branch) 7%,var(--surface)))}
.evidence-node:is(.is-support,.is-counter):is(:hover,:focus-visible){border-color:var(--branch);background:linear-gradient(125deg,color-mix(in srgb,var(--branch) 23%,var(--surface)),color-mix(in srgb,var(--branch) 10%,var(--surface)));box-shadow:0 4px 18px color-mix(in srgb,var(--branch) 10%,transparent)}
.evidence-node:is(.is-support,.is-counter) .evidence-source-badge{color:var(--branch)}
.evidence-node:is(.is-support,.is-counter) .evidence-source-badge.source-x .evidence-brand-mark{color:var(--branch);background:color-mix(in srgb,var(--branch) 12%,var(--surface));border-color:color-mix(in srgb,var(--branch) 50%,var(--border))}
.evidence-node:is(.is-support,.is-counter) .evidence-source-watermark{color:var(--branch);opacity:.1}
.evidence-node:is(.is-support,.is-counter) .evidence-category{padding:3px 7px;border-radius:5px;background:color-mix(in srgb,var(--branch) 15%,transparent);font-size:11px;font-weight:700}
.evidence-wire:is(.is-support,.is-counter){stroke-width:2;opacity:.9}
.evidence-filters :is(.is-support,.is-counter){color:var(--branch)}
.evidence-filters :is(.is-support,.is-counter)[aria-pressed=true]{border-color:var(--branch);background:color-mix(in srgb,var(--branch) 12%,var(--surface))}
@media(max-width:700px){
 .evidence-analysis{padding:14px 14px 4px;border-radius:12px;margin-bottom:16px}
 .evidence-analysis-heading{align-items:flex-start;flex-direction:column;gap:4px}
 .evidence-analysis-overview{font-size:15px;line-height:1.7;margin:8px 0 2px}
 .evidence-analysis-body{grid-template-columns:1fr;gap:16px;padding:12px 0 16px}
 .page-app .evidence-analysis .brief-citation{min-width:36px;min-height:36px}
 .evidence-analysis.is-pending{padding:12px 14px 2px}
 .evidence-node:is(.is-support,.is-counter) .evidence-node-label{display:flex}
 .evidence-node:is(.is-support,.is-counter) .evidence-node-label :is(.evidence-node-number,.evidence-condition){display:none}
}

/* Stock navigation stays visible, including names beyond the quick links. */
.evidence-all-stocks{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:44px;padding:8px 13px;border:1px solid var(--border);border-radius:10px;background:var(--surface);color:var(--text);font:inherit;font-size:13px;cursor:pointer}
.evidence-all-stocks{color:var(--accent-text,var(--accent));background:transparent;border-color:transparent}
.evidence-all-stocks:hover{background:var(--surface-2);border-color:var(--border)}
.evidence-picker-caption{margin:0 0 10px;font-size:13px;color:var(--muted)}
.evidence-stock-picker .evidence-picker-list{max-height:42dvh;overflow-y:auto;overscroll-behavior:contain;padding:2px;margin-bottom:20px;scrollbar-width:thin}
.evidence-stock-picker .evidence-picker-list .chip{font-size:14px;min-height:48px;background:var(--surface-2)}
.evidence-stock-picker .evidence-picker-list [aria-current=page]{background:color-mix(in srgb,var(--accent) 12%,var(--surface));font-weight:700}
.evidence-stock-picker .evidence-picker-form{margin-bottom:0}
.watch-overview{container-type:inline-size}
.watch-row-entry{display:grid;grid-template-columns:minmax(0,1fr) 106px;align-items:stretch;border-bottom:1px solid var(--border)}
.watch-row-entry:last-child{border-bottom:0}
.watch-row-entry>.watch-row{min-width:0;border-bottom:0;grid-template-columns:minmax(100px,1fr) 82px 76px 76px;gap:12px;padding-inline:16px}
.watch-row-entry>.research-map-pill{align-self:center;justify-self:center;margin:6px 10px 6px 0}
.watch-columns-entry{background:color-mix(in srgb,var(--surface-2) 55%,var(--surface))}
.watch-map-column{align-self:center;text-align:center;color:var(--muted);font-size:12px;padding-right:10px}
@container(max-width:640px){
 .watch-row-entry{grid-template-columns:minmax(0,1fr) 76px}
 .watch-row-entry>.watch-row{grid-template-columns:minmax(0,1fr) 78px;gap:4px 10px;min-height:80px;padding:10px 12px}
 .watch-row-entry .watch-identity{grid-row:1/3}.watch-row-entry .watch-industry{display:none}
 .watch-row-entry .watch-row-price{grid-column:2;grid-row:1;font-size:13px}.watch-row-entry .watch-change{grid-column:2;grid-row:2;font-size:12px;padding:3px 5px}
 .watch-row-entry .watch-row-cap,.watch-columns-entry{display:none}
 .watch-row-entry>.research-map-pill{flex-direction:column;gap:2px;padding:4px 6px;border-radius:14px;margin-right:8px;font-size:11px}
}
@media(max-width:600px){
 .evidence-heading{flex-wrap:nowrap}
 .evidence-stock-picker .evidence-picker-list{grid-template-columns:repeat(3,minmax(0,1fr));max-height:36dvh;margin-bottom:14px}
}

/* Creator studies: published-price snapshot stays visible before +20 matures. */
.study-row{--study-bull:#107348;--study-bear:#b53c52}
html[data-theme=dark] .study-row{--study-bull:#47df98;--study-bear:#f18b9b}
.study-row.study-bull{border-top:3px solid var(--study-bull)}
.study-row.study-bear{border-top:3px solid var(--study-bear)}
.study-row .cr-bull{color:var(--study-bull);background:color-mix(in srgb,var(--study-bull) 12%,transparent)}
.study-row .cr-bear{color:var(--study-bear);background:color-mix(in srgb,var(--study-bear) 12%,transparent)}
.study-row .cr-take{font-size:12px;padding:4px 9px}
.study-row .cr-neutral{color:var(--text);border-color:var(--border)}
.study-price-snapshot{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;padding:16px 0;margin-top:8px;border-block:1px solid var(--border)}
.study-price-snapshot>div{display:flex;flex-direction:column;gap:5px;min-width:0}
.study-price-snapshot strong{font-size:clamp(16px,2vw,22px);overflow-wrap:anywhere}
.study-price-snapshot .small{font-size:11px;line-height:1.4}
.study-condition{font-size:13px;line-height:1.7;color:var(--text)}
.study-window{font-size:13px;margin:14px 0}
@media(max-width:480px){.study-row{padding:16px}.study-price-snapshot{gap:8px}.study-heading{gap:8px}}

.social-risk{display:inline-flex;width:fit-content;justify-self:start;color:var(--red);font-size:12px;border:1px solid currentColor;border-radius:6px;padding:4px 7px;line-height:1.4}
.social-history-row>.event-price-comparison{grid-column:1 / -1;width:100%}
.social-card .event-price-comparison{margin-top:12px}

html[lang^=en] .study-price-snapshot>div>.small:first-child{min-height:2.8em}

/* Saved creator views: one expandable stock group, individual observations inside. */
.study-groups{align-items:start}
.study-list>.study-group:only-child{grid-column:1/-1}
.study-group{min-width:0;border:1px solid var(--border);border-radius:12px;background:var(--surface);overflow:hidden;--study-bull:#107348;--study-bear:#b53c52}
html[data-theme=dark] .study-group{--study-bull:#47df98;--study-bear:#f18b9b}
@media(prefers-color-scheme:dark){html:not([data-theme=light]) :is(.study-row,.study-group){--study-bull:#47df98;--study-bear:#f18b9b}}
.study-group-summary{display:block;list-style:none;padding:18px;cursor:pointer;border-top:3px solid transparent}
.study-group-summary::-webkit-details-marker{display:none}
.study-group-summary.study-bull{border-top-color:var(--study-bull)}
.study-group-summary.study-bear{border-top-color:var(--study-bear)}
.study-group-summary:focus-visible{outline:2px solid var(--accent);outline-offset:-3px}
.study-group-heading{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.study-group-heading>strong{font-size:21px;letter-spacing:-.025em}

.study-group .cr-take{font-size:11px;padding:3px 8px}
.study-group .cr-bull{color:var(--study-bull);background:color-mix(in srgb,var(--study-bull) 10%,transparent)}
.study-group .cr-bear{color:var(--study-bear);background:color-mix(in srgb,var(--study-bear) 10%,transparent)}
.study-group :is(.cr-neutral,.study-group-note){color:var(--text)}
.study-group-time,.study-group-note,.study-group-mixed,.study-group-conditional{display:block}
.study-group-time{margin-top:8px;font-size:11px}
.study-group-note{font-size:14px;font-weight:550;line-height:1.6;margin-top:12px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
.study-group-mixed,.study-group-conditional{font-size:11px;line-height:1.5;margin-top:6px}
.study-group .study-price-snapshot{padding:12px 0;margin-top:12px}
.study-group .study-price-snapshot strong{font-size:18px}
.study-group-expand{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:12px;color:var(--muted);padding-top:12px}
.study-group[open]>.study-group-summary .study-group-expand>span:last-child{transform:rotate(180deg)}
.study-group-views{display:grid;gap:12px;padding:16px;border-top:1px solid var(--border);background:var(--bg)}
.study-group-views .study-row{background:var(--surface)}
.study-group-views [data-point-id].is-focused-study{outline:2px solid var(--accent);outline-offset:2px}
@media(max-width:480px){.study-group-summary{padding:14px}.study-group-views{padding:12px;gap:12px}.study-group-heading{gap:8px}.study-group .study-price-snapshot strong{font-size:17px}}

/* The same account limits stay readable on a phone and on a desktop. */
.free-guide{padding:14px 16px;border:1px solid var(--line);border-radius:12px;margin:0 0 14px}
.free-guide-heading,.experience-quota{display:flex;align-items:center;gap:10px 16px;flex-wrap:wrap}
.free-guide-heading{justify-content:space-between;margin-bottom:10px}
.free-guide-links{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.free-guide-links>a{padding:10px;border:1px solid var(--line);border-radius:8px;text-decoration:none;font-size:14px}
.experience-quota{font-size:14px;margin:8px 0 14px;line-height:1.6}
.experience-quota>a{margin-left:auto}
.evidence-examples,.evidence-selections{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:10px 0}
.evidence-examples>strong{font-size:14px;font-weight:500}
.evidence-selection{display:flex;align-items:center;gap:4px;border:1px solid var(--line);border-radius:8px;padding-left:12px}
.evidence-selection>button{min-width:44px;min-height:44px;border:0;background:none;color:inherit;cursor:pointer}
.experience-comparison{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:20px}
.experience-comparison article{min-width:0}.experience-comparison p{line-height:1.65}
@media(max-width:600px){.free-guide-links{grid-template-columns:1fr 1fr}.experience-comparison{grid-template-columns:1fr}.experience-quota>a{margin-left:0}.evidence-examples>strong{width:100%}}

/* Account identity stays distinct from the Ducky brand and fits narrow headers. */
.app-top .account-avatar { position:relative; display:inline-flex; flex:0 0 36px; width:36px; height:36px; align-items:center; justify-content:center; border-radius:50%; overflow:hidden; border:1px solid var(--border); background:var(--surface-2); color:var(--text); font-size:14px; font-weight:700; text-decoration:none; }
.app-top .account-avatar[hidden] { display:none; }
.account-avatar img { position:absolute; inset:1px; width:32px; height:32px; border-radius:50%; object-fit:cover; }
.account-avatar:focus-visible { outline:2px solid var(--accent); outline-offset:3px; }
.x-login { justify-content:center; }

/* Watchlist comparison: analytical fields occupy the former identity-column gap. */
.watch-rich-entry{grid-template-columns:minmax(0,1fr)104px}
.watch-rich-entry>.watch-row{grid-template-columns:minmax(158px,1.8fr) repeat(6,minmax(80px,1fr)) minmax(94px,1.1fr);gap:12px;padding:16px;align-items:center}
.watch-rich-entry .watch-identity-title{flex-wrap:wrap;gap:5px 8px}
.watch-rich-entry .watch-identity strong{font-size:16px;letter-spacing:.025em}
.watch-rich-entry .watch-industry{font-size:12px;padding:3px 5px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.watch-rich-entry .watch-company{font-size:11px;line-height:1.45}
.watch-stock-cap{color:var(--muted);font-size:11px;line-height:1.5}
.watch-metric,.watch-quote{display:flex;flex-direction:column;align-items:flex-end;gap:5px;min-width:0;text-align:right}
.watch-metric-value{font-size:16px;font-weight:600;line-height:1.25;font-variant-numeric:tabular-nums;letter-spacing:-.025em;white-space:nowrap}
.watch-metric-label{display:none;color:var(--muted);font-size:11px;font-weight:400;line-height:1.4}
.watch-metric-note{color:var(--muted);font-size:12px;line-height:1.4;overflow-wrap:anywhere}
.watch-metric-status{color:var(--muted);font-size:12px;line-height:1.4}
.watch-metric-date{display:block;white-space:nowrap}
.watch-rich-entry .watch-row-price{font-size:16px;line-height:1.3}
.watch-rich-entry .watch-change{font-size:11px;line-height:1.35;padding:3px 6px;align-self:flex-end}
.watch-rich-entry .watch-columns{min-height:44px;font-size:12px;line-height:1.5;padding-block:12px}
.watch-rich-entry .watch-columns>span:not(:first-child){text-align:right}
.watch-attention-high{color:var(--orange)}
.watch-metric[data-status=stale] .watch-metric-value,.watch-metric[data-status=expired] .watch-metric-value,.watch-metric[data-status=outside_latest_sample] .watch-metric-value{color:var(--muted)}
.watch-metric-method{margin:18px 0 12px;color:var(--muted);font-size:12px}
.watch-metric-method>summary,.watch-metric-source>summary{min-height:36px;display:list-item;align-content:center;cursor:pointer}
.watch-metric-method p{max-width:90ch;line-height:1.7;margin:8px 0}
.watch-metric-source{padding:4px 12px;border-top:1px solid var(--border)}
.watch-metric-source dl{display:grid;grid-template-columns:130px 1fr;gap:8px 16px;font-size:11px;overflow-wrap:anywhere}
.watch-metric-source dd{margin:0}
.watch-metric-source>a{display:inline-block;margin:8px 0;font-size:12px}
@container(max-width:980px){
  .watch-rich-entry{grid-template-columns:minmax(0,1fr)96px}
  .watch-rich-entry>.watch-row{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px 20px;padding:16px;min-height:0}
  .watch-rich-entry .watch-identity{grid-column:1/3;grid-row:1}
  .watch-rich-entry .watch-quote{grid-column:3;grid-row:1}
  .watch-rich-entry .watch-metric{align-items:flex-start;text-align:left;padding-top:10px;border-top:1px solid var(--border);gap:4px}
  .watch-rich-entry .watch-metric-label{display:block}
  .watch-rich-entry .watch-industry{display:inline}
  .watch-rich-entry .watch-stock-cap{display:block}
  .watch-rich-entry.watch-columns-entry{display:none}
  .watch-rich-entry>.research-map-pill{align-self:start;margin-top:20px}
}
@container(max-width:620px){
  .watch-rich-entry{grid-template-columns:minmax(0,1fr)}
  .watch-rich-entry>.watch-row{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px 10px;padding:14px;min-height:0}
  .watch-rich-entry .watch-identity{grid-column:1/3;grid-row:1}
  .watch-rich-entry .watch-quote{grid-column:3;grid-row:1}
  .watch-rich-entry .watch-identity strong{font-size:16px}
  .watch-rich-entry .watch-identity-title{display:flex;align-items:flex-start;flex-direction:column}
  .watch-rich-entry .watch-metric-value{font-size:16px}
  .watch-rich-entry .watch-metric-note,.watch-rich-entry .watch-metric-status{font-size:11px}
  .watch-rich-entry>.research-map-pill{flex-direction:row;justify-self:end;align-self:auto;margin:0 14px 14px;padding:0 14px 0 6px}
  .watch-metric-source dl{grid-template-columns:1fr;gap:5px}
  .watch-metric-source dd{margin-bottom:8px}
}

@container(max-width:320px){
 .watch-rich-entry>.watch-row{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
 .watch-rich-entry .watch-identity{grid-column:1;grid-row:1}
 .watch-rich-entry .watch-quote{grid-column:2;grid-row:1}
}

/* Keep the map title readable alongside its two source/navigation actions. */
@media(max-width:380px){.page-app .evidence-heading{flex-wrap:wrap}.page-app .evidence-heading>.view-head{flex:1 0 100%}}

.mcp-connections{margin-block:24px;border-block:1px solid var(--border,#cbd2c9);padding-block:6px}.mcp-connections>summary{cursor:pointer;min-height:44px;padding-block:12px;font-weight:650}.mcp-connections-body{padding-block:8px 20px}.mcp-connection-row{padding-block:16px;border-top:1px solid var(--border,#cbd2c9)}.mcp-connection-row h3{overflow-wrap:anywhere;margin:0}.mcp-connection-row li{overflow-wrap:anywhere}.mcp-connections .btn{min-height:44px}

/* radar.css */
body[data-route="boards"] .app-view{max-width:1160px}
.social-workspace{max-width:1060px;margin:auto}
.social-eyebrow,.social-platforms{font-size:.8rem;letter-spacing:.02em}
.social-platforms{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:20px}
.social-platforms span{border:1px solid var(--border);border-radius:999px;padding:7px 12px}
.social-method{border:1px solid var(--border);border-radius:12px;padding:14px 18px;margin-bottom:24px;font-size:.875rem;line-height:1.7}
.social-method summary,.social-evidence summary{cursor:pointer;font-weight:600}
.social-summary{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;padding:16px 0}
.social-filters{display:grid;grid-template-columns:2fr 1fr;gap:14px;margin:12px 0}
.social-filters label{display:grid;gap:6px;font-size:.8rem;color:var(--muted);min-width:0}
.social-filters .input{width:100%;min-width:0;min-height:44px}
.social-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.social-card{border:1px solid var(--border);border-radius:14px;background:var(--surface);padding:22px;min-width:0}
.social-card[data-state=overheated]{border-color:#b87730}
.social-card-heading{display:flex;justify-content:space-between;gap:12px;align-items:start}
.social-ticker{font-size:1.25rem;font-weight:750;text-decoration:none;color:var(--text)}
.social-company{display:block;color:var(--muted);font-size:.8rem;line-height:1.5;margin-top:4px;overflow-wrap:anywhere}
.social-state{font-size:.75rem;border-radius:6px;padding:5px 8px;background:var(--surface-2);flex-shrink:0}
.social-card[data-state=overheated] .social-state{background:color-mix(in srgb,#cf852e 18%,var(--surface));color:var(--text)}
.social-index{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:20px 0}
.social-index strong{font-size:2.7rem;line-height:1;font-variant-numeric:tabular-nums;letter-spacing:-.05em}
.social-index span{font-size:.75rem;color:var(--muted)}
.social-index meter{width:100%;height:10px;accent-color:#bf873f}
.social-index meter::-webkit-meter-optimum-value{background:var(--muted)}
.social-index meter::-moz-meter-bar{background:var(--muted)}
.social-card[data-state=overheated] meter::-webkit-meter-optimum-value{background:#bf873f}
.social-card[data-state=overheated] meter::-moz-meter-bar{background:#bf873f}
.social-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:16px 0}
.social-fact dt{font-size:.75rem;color:var(--muted);line-height:1.5}
.social-fact dd{margin:6px 0 0;font-size:1rem;font-weight:600;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.social-meaning{font-size:.875rem;line-height:1.6;min-height:2.8em}
.social-evidence{padding-top:14px;border-top:1px solid var(--border);font-size:.8rem;line-height:1.7}
.social-evidence>.btn{margin-top:14px}
.social-record-id{font-size:.7rem;overflow-wrap:anywhere;white-space:normal}
.social-links{display:flex;gap:18px;flex-wrap:wrap}
.social-empty{grid-column:1/-1;padding:30px 20px;line-height:1.7}
.social-empty h2{font-size:1.15rem}
.social-stale{border-left:3px solid #b87730;padding:10px 14px;font-size:.875rem;line-height:1.6}
.social-history-row{display:grid;grid-template-columns:1fr auto;gap:5px 10px;padding:12px 0;border-bottom:1px solid var(--border);font-size:.75rem}
.social-history-row code{grid-column:1/-1}
@media(max-width:650px){.social-grid{grid-template-columns:1fr}.social-card{padding:18px}.social-workspace .radar-heading{align-items:start;flex-direction:column;gap:14px}.social-workspace .radar-heading h1{font-size:1.8rem}.social-filters{grid-template-columns:1fr}.social-index strong{font-size:2.4rem}.social-summary{font-size:.875rem}}
/* Radar: compact category navigation and a dated, searchable reading workspace. */
.radar-workspace{--radar-accent:var(--accent);font-size:1rem}
.radar-workspace [hidden]{display:none!important}
.radar-heading{display:flex;justify-content:space-between;align-items:center;gap:24px;margin:8px 0 24px}
.radar-heading h1{margin:0 0 8px;font-size:2rem;letter-spacing:-.04em}
.radar-heading p{margin:0;line-height:1.6}
.radar-heading>.btn{flex:none;display:flex;gap:8px;align-items:center}
.radar-starters{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:28px}
.radar-starter{display:flex;align-items:center;gap:12px;min-width:0;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:12px;padding:18px;text-align:left;font:inherit;cursor:pointer}
.radar-starter>.app-icon{flex:none;color:var(--radar-accent)}
.radar-starter>span:nth-child(2){flex:1;min-width:0}
.radar-starter strong,.radar-starter .muted{display:block;font-size:.875rem;line-height:1.6}
.radar-starter .muted{font-size:.8125rem;margin-top:4px}
.radar-starter:hover{border-color:var(--radar-accent);background:var(--surface-2)}
.radar-layout{display:grid;grid-template-columns:222px minmax(0,1fr);gap:28px;align-items:start}
.radar-sidebar{position:sticky;top:20px;min-width:0}
.radar-sidebar h2{font-size:.875rem;color:var(--muted);font-weight:500;margin:0 0 12px;padding-left:12px}
.radar-categories{display:grid;gap:4px}
.radar-category{display:flex;align-items:center;gap:10px;min-height:48px;padding:11px 12px;background:transparent;border:1px solid transparent;border-radius:9px;color:var(--muted);text-align:left;cursor:pointer;font:inherit;font-size:.875rem}
.radar-category>.app-icon{width:18px;height:18px;flex:none}
.radar-category>span:nth-child(2){flex:1}
.radar-category:hover{background:var(--surface)}
.radar-category[aria-pressed=true]{color:var(--text);background:color-mix(in srgb,var(--radar-accent) 10%,var(--surface));border-color:color-mix(in srgb,var(--radar-accent) 35%,var(--border));font-weight:650}
.radar-category[aria-pressed=true]>.app-icon{color:var(--radar-accent)}
.radar-count{font: .8125rem ui-monospace,monospace;color:var(--muted);font-weight:400}
.radar-main{min-width:0}
.radar-tabs{display:flex;gap:20px;border-bottom:1px solid var(--border);margin-bottom:20px}
.radar-tabs button{font:inherit;font-size:.9375rem;font-weight:600;padding:0 0 13px;background:none;border:0;border-bottom:2px solid transparent;cursor:pointer;color:var(--muted)}
.radar-tabs button[aria-pressed=true]{border-bottom-color:var(--radar-accent);color:var(--text)}
.radar-guide{border-left:2px solid var(--radar-accent);padding:0 0 0 14px;margin:0 0 22px}
.radar-guide strong{font-size:1rem}
.radar-guide p{font-size:.875rem;line-height:1.7;color:var(--muted);margin:5px 0 0}
.radar-filters{display:grid;grid-template-columns:minmax(0,2fr) minmax(90px,1fr) minmax(110px,1fr);gap:14px 12px;padding:18px;background:var(--surface);border:1px solid var(--border);border-radius:12px;margin:0 0 20px}
.radar-field{display:flex;flex-direction:column;gap:7px;min-width:0}
.radar-field>span{font-size:.8125rem;color:var(--muted)}
.radar-field .input{width:100%;min-width:0;max-width:100%;height:44px;font-size:.875rem;padding:9px 10px;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:7px}
.radar-dates{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;grid-column:span 2}
.radar-filter-actions{display:flex;gap:8px;align-items:end;grid-column:span 2;justify-content:flex-end}
.radar-filter-actions .btn{min-height:44px;padding:8px 14px;font-size:.875rem}
.radar-result-summary{font-size:.875rem;font-weight:650}
.radar-scope-note{font-size:.8125rem;line-height:1.7;margin:6px 0 18px}
.radar-day{font: .8125rem ui-monospace,monospace;display:flex;align-items:center;gap:12px;color:var(--muted);margin:24px 0 12px;font-weight:400}
.radar-day:first-child{margin-top:8px}
.radar-day:after{content:'';height:1px;background:var(--border);flex:1}
.radar-record{border:1px solid var(--border);border-radius:12px;background:var(--surface);margin-bottom:10px;overflow:hidden;min-width:0}
.radar-record.open{border-color:color-mix(in srgb,var(--radar-accent) 45%,var(--border))}
.radar-record-toggle{width:100%;border:0;background:none;color:var(--text);font:inherit;text-align:left;padding:18px 20px;cursor:pointer;display:grid;gap:12px}
.radar-record-toggle:hover{background:var(--surface-2)}
.radar-record-meta{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;min-width:0}
.radar-ticker{font-size:1.125rem;font-weight:700;letter-spacing:-.02em}
.radar-kind{font-size:.75rem;padding:3px 8px;border:1px solid var(--border);border-radius:5px;color:var(--muted)}
.radar-record-meta time{margin-left:auto;font-size:.8125rem;font-variant-numeric:tabular-nums}
.radar-record-title{font-size:1rem;line-height:1.7;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
.radar-record-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:.8125rem;color:var(--muted)}
.radar-disclosure{color:var(--orange,var(--radar-accent));font-weight:550;flex:none}
.radar-detail{border-top:1px solid var(--border);padding:20px}
.radar-detail h4{font-size:.9375rem;margin:0 0 12px}
.radar-message{white-space:pre-wrap;overflow-wrap:anywhere;font-size:1rem;line-height:1.85;margin-bottom:20px}
.radar-detail p{font-size:.875rem;line-height:1.7}
.radar-detail-facts{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:8px 16px;padding:16px 0;border-top:1px solid var(--border);font-size:.8125rem;color:var(--muted)}
.radar-detail-facts strong{font-weight:500;color:var(--text);overflow-wrap:anywhere}
.radar-detail .radar-time-note{font-size:.8125rem;line-height:1.7}
.radar-record-actions{display:flex;gap:8px;flex-wrap:wrap;padding-top:12px}
.radar-record-actions .btn{font-size:.8125rem;min-height:40px}
.radar-detail .study-results .small{font-size:.8125rem}
.radar-receipt-note{border-left:2px solid var(--radar-accent);padding-left:12px;color:var(--muted)}
.radar-empty{padding:32px 20px;border:1px dashed var(--border);border-radius:12px;margin:18px 0;text-align:center}
.radar-empty>.app-icon{width:30px;height:30px;color:var(--muted)}
.radar-empty h3{font-size:1.1rem}
.radar-empty p{font-size:.875rem;line-height:1.7}
.radar-more{width:100%;margin:16px 0;min-height:44px}
.radar-workspace button:focus-visible,.radar-workspace a:focus-visible,.radar-workspace input:focus-visible,.radar-workspace select:focus-visible{outline:2px solid var(--focus-ring, var(--radar-accent));outline-offset:3px}
@media(max-width:1000px){.radar-layout{grid-template-columns:190px minmax(0,1fr);gap:18px}.radar-starter{padding:14px;gap:10px}.radar-starter>span:last-child{display:none}.radar-filters{grid-template-columns:repeat(2,minmax(0,1fr))}.radar-filter-actions{grid-column:auto}.radar-dates{grid-column:1/-1}.radar-category{padding:10px 8px}}
@media(max-width:720px){.radar-heading{align-items:start;gap:12px;margin-bottom:18px}.radar-heading h1{font-size:1.6rem}.radar-heading p{font-size:.875rem}.radar-heading>.btn{font-size:.8125rem;padding:8px}.radar-heading>.btn>.app-icon{display:none}.radar-starters{grid-template-columns:1fr;gap:8px;margin-bottom:22px}.radar-starter{padding:11px 13px}.radar-starter .muted{display:none}.radar-starter>span:last-child{display:block}.radar-layout{grid-template-columns:1fr;gap:22px}.radar-sidebar{position:static}.radar-sidebar h2{padding-left:0}.radar-categories{grid-template-columns:repeat(2,minmax(0,1fr));gap:5px}.radar-category{border-color:var(--border);padding:9px;gap:7px;min-height:44px;font-size:.8125rem}.radar-category>.app-icon{width:16px;height:16px}.radar-tabs{gap:16px}.radar-tabs button{font-size:.875rem}.radar-guide{margin-bottom:18px}.radar-filters{padding:14px;gap:12px}.radar-field:first-child{grid-column:1/-1}.radar-filter-actions{grid-column:1/-1;justify-content:stretch}.radar-filter-actions>.btn{flex:1}.radar-record-toggle{padding:15px}.radar-detail{padding:15px}.radar-record-meta{gap:8px}.radar-record-meta time{font-size:.75rem}.radar-kind{font-size:.75rem}.radar-record-footer{font-size:.75rem}.radar-record-title,.radar-message{font-size:1rem}.radar-detail-facts{grid-template-columns:1fr;gap:5px}.radar-detail-facts strong{margin-bottom:8px}}
@media(prefers-reduced-motion:reduce){.radar-workspace *{scroll-behavior:auto!important;transition:none!important}}

.radar-background{margin-top:22px;padding-top:18px;border-top:1px solid var(--border)}
.radar-background>summary{font-size:.9375rem;font-weight:600;cursor:pointer;color:var(--muted);min-height:44px}
.radar-background>p{font-size:.875rem;line-height:1.7;margin:0 0 16px}
.radar-empty .btn{margin:6px}
@media(max-width:720px){.radar-starters{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin-bottom:18px}.radar-starter{padding:10px 8px;gap:6px;align-items:start}.radar-starter strong{font-size:.8125rem}.radar-starter>.app-icon,.radar-starter>span:last-child{display:none}.radar-categories{grid-template-columns:none;grid-template-rows:repeat(2,auto);grid-auto-flow:column;grid-auto-columns:48%;overflow-x:auto;padding-bottom:5px;scroll-snap-type:x proximity}.radar-category{scroll-snap-align:start}.radar-sidebar h2{margin-bottom:8px}.radar-layout{gap:16px}.radar-filters{margin-bottom:14px}.radar-heading{margin-top:0}.radar-scope-note{margin-bottom:12px}}

.radar-heading{margin-bottom:18px}.radar-starters{margin-bottom:20px}.radar-starter{padding:12px 16px}.radar-starter .muted{margin-top:2px}.radar-tabs{margin-bottom:16px}
.radar-extra{display:contents}.radar-filter-toggle{display:none}
@media(min-width:1100px){.radar-filters{grid-template-columns:minmax(160px,2fr) 100px 130px 160px auto;gap:10px;padding:14px}.radar-filter-actions{grid-column:auto}.radar-dates{grid-column:2/span 3}.radar-extra:has(.radar-dates:not([hidden]))+.radar-filter-actions{grid-column:5;grid-row:1/span 2;align-items:end}.radar-field .input{padding:8px}.radar-filter-actions .btn{padding:8px 10px}}
@media(max-width:720px){.radar-filter-toggle{display:block;background:none;border:1px solid var(--border);border-radius:7px;padding:8px;color:var(--text);font:inherit;font-size:.8125rem;min-height:44px;order:1}.radar-extra{display:none}.radar-filters.filters-expanded .radar-extra{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;grid-column:1/-1;order:3}.radar-extra .radar-field:first-child{grid-column:auto}.radar-filter-actions{grid-column:auto;order:2;gap:6px}.radar-filter-actions .btn{padding:8px;font-size:.8125rem}.radar-filters{grid-template-columns:minmax(0,1fr) minmax(0,1.25fr)}.radar-heading{margin-bottom:14px}.radar-starter{padding:10px 8px}.radar-starters{margin-bottom:18px}}
.radar-starter .starter-mobile{display:none}@media(max-width:720px){.radar-starter .starter-mobile{display:block}.radar-starter .starter-desktop{display:none}}

.radar-coverage{margin:20px 0 26px}.radar-coverage-title{display:flex;gap:16px;align-items:baseline;flex-wrap:wrap;margin-bottom:12px}.radar-coverage-title .muted{font-size:13px}.radar-coverage-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:10px}.radar-coverage-card{display:flex;flex-direction:column;gap:7px;text-align:left;padding:16px;border:1px solid var(--border);border-radius:14px;background:var(--surface);color:var(--text);font:inherit;cursor:pointer}.radar-coverage-card:hover{border-color:var(--accent)}.radar-coverage-card span:not(.radar-coverage-number),.radar-coverage-card small{font-size:12px}.radar-coverage-number{font-size:22px;font-weight:700;font-variant-numeric:tabular-nums}@media(max-width:640px){.radar-coverage-grid{grid-template-columns:1fr}.radar-coverage-card{display:grid;grid-template-columns:1fr auto;gap:7px 12px;padding:12px}.radar-coverage-number{font-size:17px}.radar-coverage-card span:not(.radar-coverage-number),.radar-coverage-card small{grid-column:1/-1}.radar-coverage-title{gap:6px}}

.radar-coverage{padding:12px 16px;border:1px solid var(--border);border-radius:12px;margin:16px 0 10px}.radar-coverage-title{margin:0;cursor:pointer;list-style:revert}.radar-coverage[open] .radar-coverage-title{margin-bottom:12px}

.radar-company-name{display:block;font-size:1rem;font-weight:600;color:var(--fg);margin-top:.5rem}
.radar-reporter,.radar-company-meta{display:block;font-size:.82rem;color:var(--muted);margin-top:.3rem}
.radar-quick-links{display:flex;gap:1.2rem;flex-wrap:wrap;padding:0 1.25rem 1rem;font-size:.82rem}
.radar-company-facts{display:grid;grid-template-columns:minmax(110px,.35fr) 1fr;gap:.6rem 1rem;margin:1.25rem 0}
.radar-company-facts dt{color:var(--muted)}.radar-company-facts dd{margin:0;overflow-wrap:anywhere}
.radar-purchase-rule{font-size:.82rem;line-height:1.65;color:var(--muted);border-left:2px solid var(--accent);padding-left:.8rem}
.radar-venue-evidence{margin:1rem 0}.radar-venue-evidence p{overflow-wrap:anywhere}
@media(max-width:480px){.radar-company-facts{grid-template-columns:1fr;gap:.25rem}.radar-company-facts dd{margin-bottom:.5rem}.radar-quick-links{padding-left:1rem}}

/* Community ranking: compact figures first, source details on expansion. */
.social-communities{display:flex;gap:8px;overflow-x:auto;padding:4px 0 10px;margin:0 0 12px;scrollbar-width:thin}
.social-communities .btn{flex:none;white-space:nowrap;min-height:44px;font-size:.8rem}
.social-communities [aria-pressed=true]{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--surface));color:var(--text)}
.social-ranking-heading{display:flex;justify-content:space-between;align-items:center;gap:12px}.social-ranking-heading p{margin:0}
.social-ranking{border:1px solid var(--border);border-radius:14px;overflow:hidden;background:var(--surface)}
.social-rank-columns,.social-rank-summary{display:grid;grid-template-columns:50px minmax(120px,2fr) repeat(3,minmax(70px,1fr)) 130px;align-items:center;gap:14px;padding:14px 20px}
.social-rank-columns{color:var(--muted);font-size:.75rem;border-bottom:1px solid var(--border)}
.social-rank-row{position:relative;border-bottom:1px solid var(--border);min-width:0}.social-rank-row:last-child{border-bottom:0}
.social-rank-summary{padding-bottom:4px;font-variant-numeric:tabular-nums;min-height:74px}
.social-rank-number{display:grid;gap:3px}.social-rank-number small{font-size:.7rem}
.social-rank-stock{display:grid;gap:4px;min-width:0}.social-rank-stock a{font-weight:650;width:fit-content}.social-rank-stock span{font-size:.75rem;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.social-rank-value>small{display:none}.social-rank-value{font-size:.9rem}
.social-rank-trend{display:grid;gap:2px;font-size:.75rem;color:var(--muted)}.social-rank-trend svg{width:120px;height:36px;color:var(--accent)}.social-rank-trend small{font-size:.65rem}
.social-ranking-details>summary{width:fit-content;min-height:44px;align-content:center;cursor:pointer;font-size:.75rem;margin-left:84px;color:var(--muted)}
.social-ranking-details>.social-card{margin:0 20px 16px;border-radius:10px}.social-rank-map{position:absolute;right:20px;top:76px;font-size:.75rem}.social-rank-map a{min-height:44px;display:inline-flex;align-items:center}
.social-general-details{margin-top:20px}.social-general-details>summary{cursor:pointer;min-height:44px;align-content:center}.social-general-details .vibe-general{margin-top:10px}
@media(max-width:900px){.social-rank-columns,.social-rank-summary{grid-template-columns:32px minmax(90px,1.5fr) repeat(3,minmax(45px,1fr)) 90px;gap:10px;padding-left:14px;padding-right:14px}.social-rank-trend svg{width:80px}.social-ranking-details>summary{margin-left:56px}}
@media(max-width:650px){
 .social-ranking-heading{display:block}.social-ranking-heading p{font-size:.7rem;margin-bottom:8px}.social-ranking-heading h2{font-size:1rem;margin-bottom:6px}
 .social-workspace .social-filters{grid-template-columns:minmax(0,1.7fr) minmax(0,1fr);gap:8px}.social-filters label>span{font-size:.7rem}
 .social-rank-columns{display:none}.social-rank-summary{grid-template-columns:22px minmax(70px,1.3fr) minmax(55px,1fr) minmax(58px,1fr);gap:8px;padding:12px 12px 0;min-height:70px}
 .social-rank-number{align-self:start;font-size:.8rem}.social-rank-stock a{font-size:.9rem}.social-rank-stock span{font-size:.65rem}.social-rank-value{font-size:.8rem;display:grid;gap:5px}.social-rank-value>small{display:block;color:var(--muted);font-size:.6rem}
 .social-rank-votes{grid-column:3;grid-row:2;display:flex;align-items:center;gap:4px;font-size:.7rem}.social-rank-votes>small{font-size:.6rem}
 .social-rank-trend{grid-column:2;grid-row:2;font-size:.6rem}.social-rank-trend svg{width:60px;height:20px}.social-rank-trend small{display:none}
 .social-ranking-details>summary{margin-left:42px;font-size:.7rem}.social-rank-map{right:12px;top:auto;bottom:0;font-size:.7rem}.social-ranking-details[open]+.social-rank-map{position:static;margin:0 12px 10px}
 .social-ranking-details>.social-card{margin:0 8px 8px;padding:12px}.social-communities .btn{padding:8px 10px}.social-workspace .radar-heading h1{font-size:1.5rem}
}

.social-workspace>.radar-heading{margin-bottom:12px}
@media(max-width:650px){
 .social-communities{margin-bottom:8px}.social-ranking-heading p{font-size:12px}
 .social-workspace .social-filters label>span{display:none}
 .social-rank-value>small,.social-rank-votes>small,.social-rank-trend{font-size:11px}
 .social-rank-stock span{font-size:11px}.social-ranking-details>summary{font-size:12px}
}

.social-rank-map{top:auto;bottom:0}.social-ranking-details[open]+.social-rank-map{position:static;margin:0 20px 10px}
@media(max-width:650px){.social-rank-votes{grid-column:3 / 5;white-space:nowrap}.social-ranking-details>summary{max-width:120px}.social-rank-value>small,.social-rank-votes>small{font-size:12px}.social-rank-value{line-height:1.4}}

/* workspace.css */
/* Application workspace: stable navigation, compact controls, progressive reading. */
@font-face{font-family:Manrope;src:url('/app-assets/c/fonts/Manrope-variable-d0639be4.481d49bfc147.woff2') format('woff2');font-style:normal;font-weight:200 800;font-display:swap}
body.page-app{--font:Manrope,-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC",sans-serif;--mono:var(--font);--r-sm:7px;--r-md:12px;--fs-sm:.875rem;--fs-base:1rem;font-size:15px;font-family:var(--font);font-variant-numeric:tabular-nums lining-nums;font-optical-sizing:auto}
.page-app :is(h1,h2,h3,.btn,.input){font-family:var(--font)}
.page-app .mono{font-family:var(--font);font-variant-numeric:tabular-nums lining-nums;font-feature-settings:"tnum";letter-spacing:0}
.page-app :is(pre,code,kbd){font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.page-app .app-main{scrollbar-gutter:stable;scroll-padding-top:24px}
.chart-zoom{display:flex;justify-content:flex-end;gap:6px;margin-top:8px}
.chart-zoom .btn{min-width:44px;min-height:44px}
.chart-zoom[hidden]{display:none}
.page-app .app-top{order:1}.page-app .app-main{order:2}.page-app .app-nav{order:3}
.page-app .app-view{max-width:1120px}
.page-app h1{font-size:1.75rem;letter-spacing:-.035em;line-height:1.3}
.page-app h2{line-height:1.4}
.page-app .card{padding:22px;margin-bottom:16px}
.page-app .btn{min-height:38px;padding:8px 14px;font-size:.875rem;line-height:1.35;border-radius:8px;align-self:center;max-width:100%;white-space:normal;text-decoration:none}
.page-app .btn-sm{min-height:34px;padding:6px 11px;font-size:.8125rem}
.page-app .cta-row{align-items:end;gap:10px;margin:16px 0}
.page-app .cta-row>.btn{align-self:flex-end;flex-grow:0}
.page-app .input{min-height:40px;padding:9px 11px;font-size:.9375rem;border-radius:8px;max-width:100%}
.page-app :is(button,a,input,select,textarea,summary):focus-visible{outline:2px solid var(--focus-ring);outline-offset:3px}
.page-app .app-top{min-height:62px;padding-inline:24px;gap:12px}
.app-top .brand{font-size:.9375rem;font-weight:700;white-space:nowrap}
.app-top .avatar-mark{width:40px;height:40px;box-shadow:none}
.page-app .tier-badge{border-radius:5px;letter-spacing:.04em}
.page-app .app-foot{font-size:.75rem;margin-top:32px;opacity:.85}
body:is([data-route=profile],[data-route=billing],[data-route=alerts]) .app-view{max-width:940px}
body:is([data-route=login],[data-route=register],[data-route=forgot],[data-route=reset],[data-route=oauth]) .app-view{max-width:540px}
body:is([data-route=login],[data-route=register],[data-route=forgot],[data-route=reset],[data-route=oauth]) .app-nav{display:none}
@media(min-width:1000px){
 .page-app .app-shell{display:grid;grid-template-columns:196px minmax(0,1fr);grid-template-rows:auto minmax(0,1fr)}
 .page-app .app-top{grid-column:1/-1;grid-row:1;order:0;background:var(--surface)}
 .page-app .app-nav{grid-column:1;grid-row:2;display:flex;flex-direction:column;align-self:stretch;gap:5px;margin:0;padding:24px 14px;border:0;border-right:1px solid var(--border);border-radius:0;max-width:none;overflow-y:auto;background:var(--surface)}
 .page-app .app-nav>a{flex:none;display:flex;justify-content:flex-start;flex-direction:row;gap:12px;min-height:44px;padding:10px 13px;font-size:.9375rem;border-radius:8px;position:relative}
 .page-app .app-nav>a.on{background:color-mix(in srgb,var(--accent) 9%,var(--surface));box-shadow:none;font-weight:650}
 .page-app .app-nav>a.on:before{content:"";position:absolute;left:0;top:12px;bottom:12px;width:3px;background:var(--accent);border-radius:3px}
 .page-app .app-nav>a[data-route=profile]{margin-top:auto}
 .page-app .app-nav>a[data-route=billing]{font-size:.875rem}
 .page-app .app-main{grid-column:2;grid-row:2;padding:30px clamp(24px,3vw,52px) 40px}
 body:is([data-route=login],[data-route=register],[data-route=forgot],[data-route=reset],[data-route=oauth]) .app-main{grid-column:1/-1}
 .page-app .app-view .route-page{min-width:0}
}
/* Focused overlays never move the underlying reading surface. */
.page-app #modal{padding:24px;background:rgb(0 0 0 / .56);backdrop-filter:blur(5px);align-items:center}
.page-app .modal-box{display:flex;flex-direction:column;max-height:calc(100dvh - 48px);max-width:640px;overflow:hidden;border-radius:16px;padding:0;box-shadow:0 24px 90px rgb(0 0 0 / .38)}
.modal-heading{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:20px 24px;border-bottom:1px solid var(--border);flex:none}
.modal-heading h2{margin:0;font-size:1.125rem;letter-spacing:-.02em}
.modal-close{display:grid;place-items:center;flex:none;width:36px;height:36px;border:1px solid var(--border);border-radius:8px;background:var(--surface-2);color:var(--text);font-size:24px;cursor:pointer}
.page-app .modal-body{overflow:auto;overscroll-behavior:contain;padding:22px 24px;min-height:0}
.page-app .modal-actions{flex:none;border-top:1px solid var(--border);padding:14px 24px;margin:0;justify-content:flex-end}
.page-app.modal-open .app-main{overflow:hidden}
.page-app .modal-box.calendar-dialog{max-width:800px}
.calendar-dialog .cal-detail{margin:0;padding:0;border:0}
.calendar-dialog .cal-day-h{display:none}
.calendar-dialog .cal-ev:first-of-type{margin-top:0}
.calendar-dialog .cal-ev{display:flex;align-items:start;gap:12px;padding:16px}
.calendar-dialog .cal-main{display:block;flex:1;min-width:0}
.calendar-dialog .cal-ico{flex:none}
.calendar-dialog .cal-title{font-size:1rem;line-height:1.5;margin:4px 0 8px}
.calendar-dialog .cal-note{font-size:.875rem;line-height:1.65}
.calendar-dialog .cal-ev:last-child{border-bottom:0}
.radar-market-panel:has(.spinner){min-height:100px}
.page-app .radar-heading{margin:0 0 22px}
.page-app .radar-heading h1{font-size:1.75rem}
.radar-heading p{font-size:.9375rem}
.page-app .radar-starter{border-radius:9px;background:none;padding:10px 12px}
.page-app .radar-starters{margin-bottom:16px}
.page-app .radar-layout{grid-template-columns:180px minmax(0,1fr);gap:24px}
.page-app .radar-category{min-height:40px;font-size:.8125rem;gap:8px;padding:8px}
.page-app .radar-record{border-radius:10px}
.page-app .radar-filters{padding:14px}
.page-app .radar-guide{margin-bottom:16px}
.page-app .radar-coverage{margin:0 0 12px}
.page-app .radar-coverage>summary{min-height:32px;font-size:.8125rem}
.radar-browse{margin:0 0 18px}
.radar-browse>summary{cursor:pointer;color:var(--muted);font-size:.8125rem;min-height:32px;align-content:center}
.radar-browse .radar-starters{margin:8px 0 0}
.page-app .radar-guide[data-board=all]{border:0;padding:0;margin:0 0 10px}
.radar-guide[data-board=all]>strong,.radar-guide[data-board=all]>p{display:none}
.page-app .radar-guide .radar-purchase-rule{margin:0}
.page-app .radar-filters{display:grid;grid-template-columns:minmax(0,1fr) 100px auto auto;align-items:end;gap:10px}
.page-app .radar-filter-toggle{display:block;align-self:end;min-height:40px;background:none;border:1px solid var(--border);border-radius:8px;padding:8px 12px;color:var(--text);font:inherit;font-size:.8125rem;cursor:pointer}
.page-app .radar-extra{display:none}
.page-app .filters-expanded .radar-extra{display:grid;grid-column:1/-1;grid-row:2;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;padding-top:10px;border-top:1px solid var(--border)}
.page-app .radar-filter-actions{grid-column:4;grid-row:1;align-items:end}
.page-app .radar-extra:has(.radar-dates:not([hidden]))+.radar-filter-actions{grid-column:4;grid-row:1}
.page-app .radar-extra .radar-dates{grid-column:1/-1}
/* Calendar controls share one compact header; grid dates open details in a dialog. */
.page-app .calendar-view{padding:24px}
.calendar-heading{display:flex;align-items:start;justify-content:space-between;gap:20px}
.calendar-heading p{margin:6px 0 0;font-size:.9375rem}
.page-app .calendar-heading .btn{flex:none;align-self:flex-start}
.calendar-view .event-scope-note{font-size:.8125rem;margin:12px 0 8px}
.page-app .cal-filters{margin:8px 0;padding-bottom:8px}
.page-app .cal-filters>summary{min-height:32px;font-size:.875rem;align-content:center}
.page-app .cal-modebar{margin:12px 0 8px}
.cal-toolbar{display:flex;align-items:start;justify-content:space-between;gap:16px;margin-top:12px;flex-wrap:wrap}
.page-app .cal-toolbar .cal-modebar{margin:0}
.page-app .cal-toolbar .cal-filters{margin:0;padding:0;border:0}
.cal-toolbar .cal-filters[open]{flex-basis:100%;order:2}
.cal-toolbar .cal-filters>summary{font-size:.8125rem;padding:6px 0}
.page-app .cal-grid-hint{font-size:.8125rem;margin:8px 0 14px}
.page-app .cal-mhead{margin:10px 0 14px;gap:10px}
.page-app .cal-mtitle{font-size:1.0625rem}
.page-app .cal-mnav,.page-app .cal-today{min-height:36px;border-radius:8px}
.page-app .cal-bicell{min-height:116px;border-radius:10px;padding:11px;gap:8px}
.page-app .cal-bidnum{font-size:1.35rem}
.page-app .cal-bicell.cal-sel{outline:none;box-shadow:inset 0 0 0 1px var(--accent);border-color:var(--accent)}
.page-app .cal-bicell.cal-is-today .cal-bidnum{background:var(--accent);color:var(--accent-ink);border-radius:6px;padding:2px 6px}
.page-app .cal-bicell .pill-kind{font-size:.6875rem;opacity:.85}
.page-app .cal-bicell .pill{border-left-width:2px;border-radius:6px;padding:5px 7px}
.page-app .cal-biquiet{font-size:.75rem;color:var(--faint)}
.page-app .cal-bicell.cal-weekend{background:color-mix(in srgb,var(--bg) 70%,var(--surface))}
.page-app .cal-bicell.cal-closed{background:color-mix(in srgb,var(--accent) 6%,var(--surface))}
/* Earnings keep their identity in compact previews, including phone month cells. */
.page-app .cal-bicell .pill-earn .pill-kind{display:inline;flex-basis:auto;order:2;font-weight:500}
.page-app .cal-bicell .pill-earn .pill-tk{order:1;font-weight:650}
.page-app .cal-bicell .pill-earn .pill-logo{order:0}
.page-app .cal-month-earnings{display:none}
@media(max-width:560px){
 .page-app .cal-month-earnings{display:flex;flex-direction:column;gap:2px;width:100%;font-size:12px;line-height:1.3;letter-spacing:-.02em;font-weight:650;color:var(--text);overflow-wrap:anywhere}
}
.page-app .seasonality-view{margin-top:24px}
/* Reading feed: author, publication time, one preview, then optional evidence. */
.page-app .creators-view{padding:0;border:0;background:none}

.creator-stock-options{flex-basis:100%;margin:0}
.creator-stock-options>summary{cursor:pointer;color:var(--muted);font-size:.8125rem;min-height:30px;align-content:center}
.creator-stock-options .creator-stock-filter{margin:8px 0 12px}

.page-app .cr-feed{display:grid;grid-template-columns:minmax(0,1fr);gap:0;margin-top:14px}
.page-app .cr-post{border:0;border-bottom:1px solid var(--border);border-radius:0;background:none;padding:22px 0;margin:0}
.page-app .cr-post:first-child{padding-top:8px}
.page-app .cr-post-head{margin-bottom:6px;gap:12px}
.page-app .cr-post time{font-size:.75rem}
.page-app .cr-video-title{font-size:1.0625rem;line-height:1.55;margin:10px 0 6px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.page-app .cr-sum{font-size:.9375rem;line-height:1.7;margin:6px 0 10px;max-width:78ch}

.page-app .study-row{padding:18px;border-radius:10px}
.page-app .study-row h3{font-size:1rem;line-height:1.6;margin:12px 0 6px}
.page-app .study-detail>summary{font-size:.8125rem;cursor:pointer;min-height:36px;padding:8px 0}
.page-app .study-detail[open]{border-top:1px solid var(--border);margin-top:12px}
.page-app .profile .form{gap:14px}
.page-app .profile .form>p{margin:0}
.page-app .profile .form>.cta-row{margin:2px 0 0}
@media(min-width:721px){.page-app .profile .form{grid-template-columns:repeat(2,minmax(0,1fr))}.page-app .profile .form>:is(.check,p,.cta-row){grid-column:1/-1}}
.page-app .profile .pwsec{border-top:1px solid var(--border);padding-top:18px;margin-top:20px}
.page-app .profile .pwsec h2{margin:0 0 6px}
.page-app .profile .pwsec>.small{margin-top:6px}
.page-app .profile .pwsec .cta-row{margin:14px 0}
.page-app .profile .pwsec .field{flex:1 1 200px;max-width:320px;min-width:0}
.page-app .profile .pwsec .btn{flex:none;min-height:40px;align-self:flex-end}
.page-app .add-row>.btn{align-self:flex-start;min-height:44px}
.page-app .creator-find-form>.btn{align-self:flex-end;min-height:44px}
.page-app .app-top #logout{white-space:nowrap;flex:none}
@media(max-width:999px){
 .page-app .app-main{padding:22px 18px 30px}
 .page-app .app-top{padding-inline:18px;min-height:56px}
 .page-app .app-nav>a{font-size:.75rem;border-radius:9px;min-height:52px}
 .page-app .radar-layout{grid-template-columns:150px minmax(0,1fr);gap:18px}
 .page-app .app-nav{padding-bottom:max(7px,var(--safe-bottom))}
}
@media(max-width:720px){
 .page-app .app-main{padding:20px 14px 28px}
 .page-app h1,.page-app .radar-heading h1{font-size:1.5rem}
 .page-app .card{padding:18px}
 .page-app .app-top{padding-inline:14px;gap:8px}
 .page-app .app-top .brand{font-size:.875rem}
 .page-app .app-top .avatar-mark{width:34px;height:34px}
 .page-app .app-top .btn-sm{font-size:.75rem;padding:5px 8px}
 .page-app .tier-badge{padding:2px 5px;font-size:.6875rem}
 .page-app .radar-layout{grid-template-columns:1fr}
 .page-app .radar-filters{grid-template-columns:minmax(0,1fr) 90px}
 .page-app .radar-filters>.radar-field:first-child{grid-column:1}
 .page-app .radar-filter-toggle{grid-row:2;grid-column:1;justify-self:start}
 .page-app .radar-filter-actions,.page-app .radar-extra:has(.radar-dates:not([hidden]))+.radar-filter-actions{grid-row:2;grid-column:2;justify-self:end}
 .page-app .radar-filter-actions>.btn{flex:none}
 .page-app .filters-expanded .radar-extra{grid-row:3;grid-template-columns:repeat(2,minmax(0,1fr))}
 .page-app .calendar-view{padding:16px}
 .calendar-heading{gap:10px;flex-wrap:wrap}
 .calendar-heading p{font-size:.875rem}
 .page-app .calendar-heading .btn{font-size:.75rem;min-height:32px}
 .page-app .cal-bicell{min-height:102px;padding:10px}
 .page-app .cal-bicell .pill-kind{font-size:.75rem}
 .page-app .cal-biquiet{font-size:.8125rem}
 .page-app .cal-mtitle{font-size:.9375rem}
 .page-app .cal-mhead{gap:7px}
 .page-app #modal{padding:12px;align-items:center}
 .page-app .modal-box{max-height:calc(100dvh - 24px);border-radius:14px;padding:0}
 .modal-heading{padding:14px 16px}
 .page-app .modal-body{padding:16px}
 .page-app .modal-actions{padding:12px 16px}
 .page-app .creators-view{padding:0}

 .page-app .cr-post{padding-block:18px}
 .page-app .cr-post .evidence-controls{flex-wrap:wrap}

 .page-app .profile .pwsec .field{max-width:none;flex-basis:100%}
}
@media(max-width:560px){
 .page-app .calendar-heading{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px}
 .page-app .calendar-heading>div{display:contents}
 .page-app .calendar-heading p{grid-column:1/-1;font-size:.75rem;line-height:1.5;margin:0}
 .page-app .calendar-heading .btn{grid-column:2;grid-row:1;font-size:.6875rem;padding:6px 8px}
 .page-app .calendar-view .event-scope-note{font-size:.75rem;line-height:1.5;margin:8px 0}
 .page-app .calendar-view>.data-notice{font-size:12px;line-height:1.5;padding:8px 10px;margin:8px 0}
 .page-app .cal-toolbar{gap:6px;align-items:center;margin-top:8px}
 .page-app .cal-toolbar .cal-modebar{flex:1;max-width:none;min-width:0}
 .page-app .calendar-view .cal-mode{font-size:.75rem;padding:6px;white-space:nowrap}
 .page-app .cal-toolbar .cal-filters{flex:0 0 auto;order:0}
 .page-app .cal-toolbar .cal-filters[open]{flex-basis:100%;order:2}
 .page-app .cal-toolbar .cal-filters>summary{font-size:.6875rem;padding:6px 0}
 .page-app .calendar-view .cal-mhead{grid-template-columns:44px minmax(0,1fr) 44px 52px;gap:4px;margin:8px 0 10px;align-items:center}
 .page-app .calendar-view .cal-mtitle{font-size:.75rem;line-height:1.4}
 .page-app .calendar-view .cal-today{grid-column:auto;justify-self:stretch;font-size:.6875rem;padding:4px;line-height:1.3}
 .page-app .cal-grid-hint{display:none}
 .page-app .cal-biweeks{gap:8px}
 .page-app .cal-biweek{grid-template-rows:auto auto;align-content:start}
 .page-app .cal-week-label{font-size:.75rem;line-height:1.4;margin-bottom:6px}
 .page-app .cal-biweek .cal-bigrid{grid-auto-rows:minmax(68px,auto);gap:6px;align-content:start}
 .page-app .cal-biweek .cal-bicell{min-height:68px;padding:7px;gap:4px;border-radius:9px}
 .page-app .cal-bidate{gap:6px}
 .page-app .cal-bicell .pill-kind{display:none}
 .page-app .cal-bicell .pill{padding:3px 5px;line-height:1.4}
 .page-app .cal-bicell .cal-events{gap:3px}
 .page-app .cal-bicell .cal-bidnum{height:23px;min-width:23px;font-size:18px}
 .page-app .cal-bicell .pill-tk,.page-app .cal-bicell .pill-more{font-size:12px}
 .page-app .cal-bicell .cal-biquiet{font-size:11px;line-height:1.4}
 .page-app .cal-bicell .pill-logo{width:14px;height:14px}
}
@media(max-width:360px){.page-app .app-top .brand{font-size:.75rem;gap:6px}.page-app .app-top .avatar-mark{width:30px;height:30px}}
@media(pointer:coarse){.page-app .btn,.page-app .btn-sm,.page-app .cal-mnav,.page-app .cal-today,.page-app .modal-close{min-height:44px}.page-app .input{font-size:16px}}
.page-app .billing-currency select{background:var(--surface);border-color:var(--border);color:var(--text);font:inherit}

.radar-category-toggle{display:none}
@media(max-width:720px){
 body.page-app{--fs-base:.9375rem}
 .page-app .app-main{padding:14px 12px 24px;scroll-padding-block:16px;scrollbar-gutter:auto}
 .page-app .app-view,.page-app .route-page{min-width:0}
 .page-app h1,.page-app .radar-heading h1{font-size:1.25rem}
 .page-app .card{padding:14px;margin-bottom:12px}
 .page-app .calendar-view{padding:12px}
 .page-app .creators-view{padding:0}
 .page-app .input{font-size:16px;min-height:44px}
 .page-app .billing-currency select{font-size:16px;min-height:44px}
 .page-app .route-page>.chips{gap:6px;margin:8px 0 12px}
 .page-app .route-page>.chips>a{display:flex;align-items:center;justify-content:center;flex:1 1 120px;min-height:44px;font-size:.75rem;line-height:1.4;white-space:normal;text-align:center}
 .page-app[data-route=chart] .view-head{margin-bottom:8px}
 .page-app .chart-company-name{margin:0 0 8px;font-size:12px;line-height:1.5}
 .page-app[data-route=chart] .add-row{margin:8px 0 12px}
 .page-app .chart-controls{gap:8px;margin-bottom:10px}
 .page-app .chart-control>.small{font-size:12px}
 .page-app :is(.btn,.btn-sm,.lang-toggle,.cal-mnav,.cal-today,.cal-mode,.radar-category,.radar-filter-toggle,.radar-starter,.radar-tabs button,.seg button,summary){min-height:44px}
 .page-app .profile .pwsec .btn,.page-app .calendar-heading .btn,.page-app .calendar-view .cal-mode,.page-app .radar-guide summary{min-height:44px}
 .page-app .modal-close{width:44px;height:44px}
 .page-app .cal-mnav{min-width:44px}
 .page-app .cal-biweekday,.page-app .cal-bicell .pill{font-size:12px}
 .page-app .radar-heading{margin-bottom:14px}
 .page-app .radar-categories{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:none;grid-auto-flow:row;grid-auto-columns:auto;overflow:visible;gap:6px}
 .page-app .radar-sidebar>h2{display:none}
 .page-app .radar-category-toggle{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;min-height:44px;padding:10px 12px;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:8px;font:inherit;font-size:.875rem;text-align:left;cursor:pointer}
 .page-app .radar-sidebar:not(.categories-open) .radar-categories{display:none}
 .page-app .categories-open .radar-categories{margin-top:8px}
 .page-app .radar-filter-actions{gap:6px}
 .page-app .radar-filters{grid-template-columns:minmax(0,1fr) minmax(90px,1fr);gap:10px}
 .page-app :is(.radar-browse,.radar-coverage,.cal-filters,.study-detail,.creator-stock-options)>summary{min-height:44px;align-content:center}

 .page-app #modal{padding:max(12px,var(--safe-top)) max(12px,env(safe-area-inset-right)) max(12px,var(--safe-bottom)) max(12px,env(safe-area-inset-left))}
 .page-app .modal-box{max-height:calc(100dvh - max(12px,var(--safe-top)) - max(12px,var(--safe-bottom)))}
 .page-app .modal-heading{padding:10px 14px;gap:10px}
 .page-app .modal-body{padding:14px;overflow-wrap:anywhere}
 .page-app .modal-actions{padding:10px 14px;flex-wrap:wrap}
 .page-app :is(.btn,.seg button,.cal-mnav,.cal-today,.cal-mode,.radar-category){touch-action:manipulation}
}
@media(max-width:580px){
 .page-app .watch-controls{display:grid;grid-template-columns:minmax(0,1fr) auto}
 .page-app .watch-controls .watch-modes{grid-column:1;grid-row:1;justify-self:start}
 .page-app .watch-controls .watch-modes .btn{white-space:nowrap;padding-inline:9px}
 .page-app .watch-controls>button{grid-column:2;grid-row:1}
 .page-app .watch-controls .watch-filter{grid-column:1/-1}
 .page-app .watch-controls .watch-search{grid-column:1/-1;grid-row:2;width:100%}
 .page-app .watch-controls>select{grid-column:1/-1;grid-row:3;min-width:0;width:100%}
}
@media(max-width:580px){
 .page-app .watch-map-heading,.page-app .watch-map-heading>div:first-child{display:contents}
 .page-app .watch-map-heading .watch-session{grid-column:1;grid-row:1;align-self:center;margin:0}
 .page-app .watch-map-panel .watch-map-scale{grid-column:2;grid-row:1}
 .page-app .watch-map-heading .watch-breadth{grid-column:1/-1;grid-row:2;margin:0}
 .page-app .watch-small-stock{min-height:44px}
}
@media(prefers-reduced-motion:reduce){.page-app *, .page-app *:before{scroll-behavior:auto!important;animation:none!important;transition:none!important}}

/* Outer sidebar sizing. */
@media(min-width:1000px){
 .page-app .app-shell{grid-template-columns:218px minmax(0,1fr)}
 .page-app .app-nav{padding:16px 12px;gap:3px;scrollbar-width:thin}
 .page-app .app-nav>a{min-height:40px;padding:8px 12px;font-size:.875rem}
 .page-app .app-nav>a[data-route=opportunities]{margin-top:15px}

 .page-app .app-nav>a[data-route=profile]{margin-top:auto}
 .page-app .radar-sidebar{display:none}
 .page-app .radar-layout{grid-template-columns:minmax(0,1fr)}
}
.opportunity-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.page-app .opportunity-card{margin:0;padding:20px;min-width:0}
.opportunity-heading{display:flex;justify-content:space-between;gap:12px;align-items:start}
.opportunity-heading .ticker{font-size:1.25rem;font-weight:700;color:var(--text);text-decoration:none}
.opportunity-heading p{font-size:.875rem;margin:4px 0 0}
.opportunity-heading .chip{font-size:.6875rem;white-space:normal;text-align:center}
.opportunity-metrics{display:grid;grid-template-columns:1fr 1fr;gap:18px 10px;padding:18px 0;border-bottom:1px solid var(--border);margin:0}
.opportunity-metrics>div:last-child{grid-column:1/-1}
.opportunity-metrics dt{font-size:.75rem;color:var(--muted)}
.opportunity-metrics dd{font-size:1.125rem;margin:5px 0 0}
.opportunity-reason{font-size:.875rem;color:var(--accent-text);margin:16px 0 6px}
.opportunity-evidence>summary,.opportunity-method>summary{cursor:pointer;min-height:40px;align-content:center}
.opportunity-evidence{font-size:.875rem}
.opportunity-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
.opportunity-filters{display:flex;gap:12px;flex-wrap:wrap;margin:22px 0 10px}
.opportunity-filters label{display:grid;gap:6px;flex:1;min-width:180px;font-size:.8125rem}
.ducky-empty img{border-radius:50%;margin-bottom:8px}
@media(max-width:720px){.opportunity-grid{grid-template-columns:minmax(0,1fr)}.opportunity-filters label{min-width:120px}}
@media(max-width:480px){
 .opportunity-filters{display:grid;grid-template-columns:minmax(0,1fr);gap:12px}
 .opportunity-filters label{min-width:0;width:100%}
 .opportunity-filters .input{width:100%;min-width:0}
}

.page-app .billing-benefits{font-size:.875rem;line-height:1.65;color:var(--muted);margin:8px 0 16px}
/* A list entry is a reference. The canonical reader owns the full body. */
.radar-record-toggle{text-decoration:none;color:var(--text);display:block}
.radar-record-title{font-size:.875rem;line-height:1.65;color:var(--muted)}
.radar-record-meta{align-items:baseline}
.radar-record-meta .radar-ticker{font-size:1rem;line-height:1.5}
.radar-record-footer{justify-content:flex-end}
.record-reader{max-width:900px;margin:0 auto}
.record-breadcrumb{display:flex;gap:12px;align-items:center;font-size:.8125rem;color:var(--muted);margin:0 0 20px}
.record-breadcrumb a{color:var(--muted);min-height:44px;display:flex;align-items:center}
.record-language{display:flex;gap:6px;justify-content:flex-end;margin-bottom:12px}
.record-language:empty{display:none}
.record-language [aria-pressed=true]{border-color:var(--accent);color:var(--accent-text)}
.record-reader .radar-record{border:0;background:transparent;border-radius:0}
.record-heading{padding:0 0 24px;border-bottom:1px solid var(--border)}
.record-heading .radar-record-meta{display:flex;flex-wrap:wrap;gap:10px}
.record-heading .radar-ticker{font-size:clamp(1.4rem,3vw,2rem);font-weight:700;flex-basis:100%;margin-bottom:8px;letter-spacing:-.025em}
.record-heading time{margin-left:auto;font-size:.8125rem}
.record-reader .radar-detail{padding:0;border:0}
.record-prose{max-width:72ch;padding:12px 0 24px}
.record-prose section{margin:20px 0 28px}
.record-prose h2{font-size:1rem;color:var(--text);line-height:1.6;margin:0 0 12px;font-weight:650}
.record-prose p{font-size:.9375rem;line-height:1.95;color:var(--text);margin:8px 0;overflow-wrap:anywhere}
.record-prose a{color:var(--accent-text)}
.record-original{border-top:1px solid var(--border);border-bottom:1px solid var(--border);margin:8px 0 24px;padding:8px 0}
.record-original summary{min-height:44px;display:flex;align-items:center;cursor:pointer;color:var(--muted);font-size:.8125rem}
.record-original pre{white-space:pre-wrap;overflow-wrap:anywhere;font:inherit;font-size:.8125rem;line-height:1.7;padding:16px;background:var(--surface-2)}
@media(max-width:600px){.record-breadcrumb{margin-bottom:8px}.record-reader .radar-record-meta .radar-kind{max-width:100%}.record-prose{padding-top:0}.record-prose section{margin:16px 0 24px}.record-prose p{font-size:.9375rem}}
.record-reader{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:12px}
.record-reader>.record-breadcrumb{grid-column:1;margin-bottom:12px}
.record-reader>.record-language{grid-column:2;margin-bottom:12px;align-items:center}
.record-reader>div:last-child{grid-column:1/-1}
@media(max-width:600px){
 .record-breadcrumb>span{display:none}
 .record-heading{padding-bottom:16px}
 .record-heading .radar-ticker{margin:0 0 4px}
 .page-app .radar-heading>a{display:none}
 .page-app .radar-heading>div{flex:1;min-width:0}
 .page-app .radar-tabs button{font-size:.75rem;padding:8px 4px;white-space:nowrap}
 .page-app .radar-filters:not(.filters-expanded){grid-template-columns:minmax(0,1fr) auto;padding:10px;gap:8px}
 .page-app .radar-filters:not(.filters-expanded)>.radar-field:nth-child(2),
 .page-app .radar-filters:not(.filters-expanded)>.radar-filter-actions{display:none}
 .page-app .radar-filters:not(.filters-expanded)>.radar-field:first-child>span{display:none}
 .page-app .radar-filters:not(.filters-expanded)>.radar-filter-toggle{grid-column:2;grid-row:1}
 .page-app .radar-day{margin:12px 0 8px}
 .page-app .radar-record-toggle{padding:14px}
}

/* The account avatar adds a fifth header control. Keep English logout inside 320px. */
@media (max-width:360px) {
 .page-app .app-top { padding-inline:10px; gap:6px; }
}
/* Daily discovery owns its compact evidence cards and accessible close-price plots. */
.opportunities-view .view-head p{max-width:760px}
.opportunities-view .opportunity-filter-panel{padding:16px;margin:12px 0}
.opportunities-view .opportunity-filters{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));margin:0;gap:12px}
.opportunities-view .opportunity-filters label{min-width:0;gap:5px}
.opportunities-view .opportunity-filters .input{width:100%;min-width:0;min-height:44px;font-size:16px}
.opportunity-filter-footer{display:flex;gap:12px;align-items:start;justify-content:space-between;margin-top:10px}
.opportunity-more-filters{flex:1;min-width:0}
.opportunity-more-filters>summary{cursor:pointer;min-height:44px;align-content:center;font-size:.875rem}
.opportunity-more-filters[open] .opportunity-filters{margin:10px 0 0;grid-template-columns:repeat(2,minmax(0,1fr))}

.opportunity-filter-footer .btn{min-height:44px;flex:none}
.opportunity-feedback{margin:14px 0}
.opportunity-feedback p{margin:5px 0}
.opportunities-view .opportunity-grid{align-items:start}
.opportunities-view .opportunity-card{border-top:2px solid var(--border);padding:20px}
.opportunity-identity{min-width:0}
.opportunity-identity p{overflow-wrap:anywhere}
.opportunity-badges{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.opportunity-recovery{font-size:.6875rem;line-height:1.5;color:var(--accent-text);border:1px solid var(--border);border-radius:6px;padding:2px 6px}
.opportunity-priority{display:grid;text-align:right;gap:5px;flex:0 0 auto;max-width:145px}
.opportunity-priority .small{font-size:.75rem}
.opportunity-stars{white-space:nowrap;color:var(--accent-text);font-size:1.125rem;letter-spacing:2px}
.opportunity-stars-empty{color:var(--muted)}
.opportunity-price{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-top:18px}
.opportunity-price strong{font-size:1.65rem;letter-spacing:-.025em}
.opportunity-price span{font-size:.75rem;text-align:right}
.opportunity-plot{margin:16px 0 0;min-width:0}
.opportunity-plot-heading{display:flex;gap:8px;justify-content:space-between;font-size:.75rem;color:var(--muted)}
.opportunity-plot-reading{font-variant-numeric:tabular-nums;text-align:right;color:var(--text)}
.opportunity-plot svg{display:block;width:100%;height:auto;overflow:visible}
.opportunity-plot-axis{font-size:11px;fill:var(--muted)}
.opportunity-plot-grid{stroke:var(--border);stroke-width:.7}
.opportunity-plot-price{stroke:var(--green);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}
.opportunity-plot-price[data-direction=down]{stroke:var(--red)}
.opportunity-plot-cursor{fill:var(--text);stroke:var(--bg);stroke-width:2}
.opportunity-plot-reference{stroke:var(--muted);stroke-width:1.2}
.opportunity-plot-slider{display:block;width:100%;margin:0;min-height:30px;accent-color:var(--accent);cursor:ew-resize}
.opportunity-plot-slider:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.opportunity-plot-legend,.opportunity-plot-basis{font-size:.6875rem;line-height:1.5;color:var(--muted);margin:3px 0}
.opportunity-plot-legend span{font-size:1rem;margin-right:6px}
.opportunities-view .opportunity-metrics{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px 12px;padding:18px 0}
.opportunities-view .opportunity-metrics>div:last-child{grid-column:auto}
.opportunities-view .opportunity-metrics dt{font-size:.75rem;line-height:1.4}
.opportunities-view .opportunity-metrics dd{font-size:1rem;line-height:1.35;overflow-wrap:anywhere}
.opportunity-context h3,.opportunity-evidence h3{font-size:.8125rem;margin:0 0 6px;font-weight:650}
.opportunity-context{margin:18px 0 12px}
.opportunity-context p,.opportunity-risk{font-size:.875rem;line-height:1.65;margin:0}
.opportunity-risk{padding:10px 12px;border-radius:8px;background:var(--surface-2,var(--bg));color:var(--muted)}
.opportunity-risk strong{color:var(--text);font-weight:500}
.opportunity-gaps{font-size:.75rem;line-height:1.6;margin:10px 0}
.opportunity-evidence{border-top:1px solid var(--border);margin-top:14px}
.opportunities-view .opportunity-evidence>summary,.opportunities-view .opportunity-method>summary,.opportunity-coverage summary{min-height:44px;cursor:pointer;align-content:center}
.opportunity-evidence-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px 16px;padding:12px 0}
.opportunity-evidence-grid section{min-width:0}
.opportunity-evidence-grid p{font-size:.75rem;line-height:1.6;margin:6px 0;overflow-wrap:anywhere}
.opportunity-fundamentals,.opportunity-factors{display:grid;gap:8px;margin:10px 0;font-size:.75rem}
.opportunity-fundamentals>div,.opportunity-factors>div{display:flex;justify-content:space-between;gap:10px}
.opportunity-fundamentals dt,.opportunity-factors dt{color:var(--muted)}
.opportunity-fundamentals dd,.opportunity-factors dd{margin:0;white-space:nowrap}
.opportunity-source{display:grid;gap:3px}
.opportunity-actions .btn{min-height:44px}
.opportunity-paging{display:flex;justify-content:center;margin:18px 0}
.opportunity-coverage{margin:20px 0 12px}
.opportunity-method{font-size:.875rem;line-height:1.7}
.opportunity-customize{margin:12px 0 24px}
@media(max-width:1000px){.opportunities-view .opportunity-card{padding:16px}.opportunity-priority{max-width:120px}.opportunity-evidence-grid{grid-template-columns:minmax(0,1fr)}}
@media(max-width:600px){
 .opportunities-view .opportunity-filters{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
 .opportunity-more-filters[open] .opportunity-filters{grid-template-columns:minmax(0,1fr)}
 .opportunity-plot-slider{min-height:44px}
 .opportunities-view .opportunity-metrics{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 10px}
 .opportunity-priority{max-width:110px}
 .opportunity-plot-heading{font-size:.6875rem}
 .opportunity-plot-reading{max-width:65%}
 .opportunity-price strong{font-size:1.5rem}
 .opportunities-view .opportunity-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
 .opportunity-actions .btn{text-align:center;justify-content:center;white-space:normal}
}

.opportunities-view .view-head p{margin-top:6px;margin-bottom:6px}
.opportunities-view .opportunity-filter-panel{margin-top:10px}

.opportunity-plot-dates{display:flex;justify-content:space-between;padding-left:8%;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
@media(max-width:600px){
 .opportunities-view .opportunity-heading{position:relative}
 .opportunities-view .opportunity-identity{width:100%}
 .opportunities-view .opportunity-identity>.ticker{display:block;padding-right:122px;min-height:48px}
 .opportunities-view .opportunity-priority{position:absolute;right:0;top:0}
}

@media(max-width:600px){.opportunity-plot svg{height:130px}.opportunity-plot-axis{display:none}}

/* Candidate history shares the evidence disclosure's touch target and spacing. */
.opportunity-history>summary{min-height:44px;cursor:pointer;align-content:center}
.opportunity-history p{overflow-wrap:anywhere;line-height:1.6}
.opportunity-history .btn{margin:4px 0 12px;min-height:44px}
/* Use the workspace width for side-by-side watchlist comparisons. */
body[data-route=watchlist] .app-view{max-width:1640px}

/* Calendar: company identities in compact groups; macro dates stay full-width. */
.page-app .calendar-view .cal-company-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px;align-content:start}
.page-app .calendar-view .cal-company-grid>.pill,.page-app .calendar-view .cal-company-grid>.pill-more{grid-column:1/-1}
.page-app .calendar-view .cal-company-blob{position:relative;display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:5px;min-width:0;min-height:32px;padding:4px 5px;border-radius:8px;background:color-mix(in srgb,var(--cal-tone,var(--accent)) 7%,var(--surface));border:1px solid color-mix(in srgb,var(--cal-tone,var(--accent)) 20%,var(--border));color:var(--text);font-size:11px;line-height:1.25;text-align:left}
.page-app .calendar-view .cal-company-mark{position:relative;display:grid;place-items:center;isolation:isolate;width:18px;height:18px;flex:0 0 18px;border-radius:5px;background:var(--db-nav-strong);color:#fff;font-weight:700;font-size:8px;overflow:hidden}
.page-app .calendar-view .cal-company-mark img{position:absolute;inset:0;object-fit:contain;width:18px;height:18px;background:var(--db-nav-strong)}
.page-app .calendar-view .cal-company-blob .ticker-symbol{font-weight:650;font-size:11px;white-space:nowrap;background:none;padding:0;color:var(--text)}
.page-app .calendar-view .cal-company-kind,.page-app .calendar-view .cal-company-when{font-size:12px;color:var(--muted)}
.page-app .calendar-view .cal-company-count{position:absolute;right:-3px;top:-4px;border-radius:50%;min-width:14px;height:14px;display:grid;place-items:center;background:var(--surface);border:1px solid var(--border);font-size:9px}
.page-app .calendar-view .cal-company-blob.mine{border-color:var(--accent)}
.page-app .calendar-view .cal-kind-company{--cal-tone:var(--c-geo)}
.page-app .calendar-view .cal-estimate-preview{display:flex;flex-wrap:wrap;gap:6px 16px;margin:10px 0;padding:10px 0;border-block:1px solid var(--border);font-size:14px}
.page-app .calendar-view .cal-estimate-preview>.small{flex-basis:100%}
.earnings-conditions{margin:16px 0}
.earnings-condition{border-bottom:1px solid var(--border);padding:4px 0}
.earnings-condition>summary{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:48px;cursor:pointer;font-weight:650;list-style:revert}
.earnings-condition>summary::after{content:'+';color:var(--muted)}
.earnings-condition[open]>summary::after{content:'−'}
.earnings-condition-bull>summary{color:var(--accent-text,var(--accent))}
.earnings-condition-bear>summary{color:var(--text)}
.earnings-condition .earnings-observation{padding:4px 0 12px}
.page-app .calendar-view .cal-company-grid .pill-more{white-space:normal}
@media(min-width:561px){.page-app .calendar-view .cal-bicell{padding:9px 7px}.page-app .calendar-view .cal-biweek .cal-bigrid{grid-template-columns:repeat(7,minmax(0,1fr))}}
@media(max-width:560px){.page-app .calendar-view .cal-company-grid{gap:5px}.page-app .calendar-view .cal-company-blob{padding:4px 5px}.page-app .calendar-view .cal-biweek .cal-bigrid{grid-auto-rows:auto}.page-app .calendar-view .cal-bicell{min-height:68px}}
@media(min-width:561px){
 .page-app .calendar-view .cal-biweek .cal-bigrid{align-items:stretch;grid-auto-rows:auto}
 .page-app .calendar-view .cal-bicell{min-height:180px;gap:7px}
 .page-app .calendar-view .cal-bidnum{font-size:20px}
 .page-app .calendar-view .cal-bicell .pill{padding:4px 6px;font-size:11px;line-height:1.4}
 .page-app .calendar-view .cal-company-blob .pill-tk{font-size:12px;background:none;padding:0;color:var(--text)}
}
.page-app .calendar-view .cal-company-blob .ticker-symbol{font-size:12px}
@media(max-width:560px){
 .page-app .calendar-view .cal-company-blob{gap:3px;padding:4px 3px}
 .page-app .calendar-view .cal-company-mark{width:14px;height:14px;flex-basis:14px}
 .page-app .calendar-view .cal-company-mark img{width:14px;height:14px}
 .page-app .calendar-view .cal-company-long .cal-company-mark{display:none}
}
/* modal(…, {layout:'sheet'}) (ui.js): on phones a bottom sheet — full width, rounded top, at most 88 % of the screen, its
   body scrolling inside and its actions at the thumb above the safe area; a centred dialog on wider screens. Focus trap,
   Esc, scrim tap and focus return are the shared dialog's. */
@media(max-width:600px){
 .page-app #modal:has(>.modal-box[data-modal-layout=sheet]){align-items:flex-end;padding:0}
 .page-app .modal-box[data-modal-layout=sheet]{width:100%;max-width:none;max-height:min(88dvh,calc(100dvh - var(--safe-top) - 24px));border-width:1px 0 0;border-radius:16px 16px 0 0}
 .page-app .modal-box[data-modal-layout=sheet] .modal-heading{padding:8px 8px 8px 16px}
 .page-app .modal-box[data-modal-layout=sheet] .modal-body{padding:14px 16px}
 .page-app .modal-box[data-modal-layout=sheet] .modal-actions{padding:10px 16px calc(10px + var(--safe-bottom))}
 .page-app .modal-box[data-modal-layout=sheet] .modal-actions>.btn{flex:1 1 auto;min-height:48px}
}

/* card-share.css */
/* The share button (card-share.js shareButton): the duck holding up a share card (img/share-duck-v1, 48 / 96 px) on a 44 px
   target, with a small lift on hover and a press; still under reduced motion. One component on every surface. */
.share-duck{display:inline-flex;align-items:center;justify-content:center;gap:6px;flex:none;min-width:44px;min-height:44px;margin:0;padding:4px;
 border:0;border-radius:12px;background:transparent;color:var(--text);font:inherit;font-size:13px;font-weight:650;line-height:1.2;cursor:pointer;
 -webkit-tap-highlight-color:transparent}
.share-duck-img{display:block;flex:none;width:36px;height:36px;transform-origin:50% 88%;transition:transform .2s cubic-bezier(.3,1.5,.5,1)}
.share-duck:hover,.share-duck:focus-visible{background:color-mix(in srgb,var(--text) 7%,transparent)}
.share-duck:hover .share-duck-img{transform:translateY(-2px) rotate(-7deg)}
.share-duck:active .share-duck-img{transform:scale(.88);transition-duration:.08s}
.share-duck:focus-visible{outline:3px solid var(--db-focus);outline-offset:2px}
.share-duck-text{white-space:nowrap;padding-right:6px}
@media(prefers-reduced-motion:reduce){.share-duck-img{transition:none}.share-duck:is(:hover,:active) .share-duck-img{transform:none}}

/* Where it sits: on a research-map card two sibling controls keep opening the card and sharing it independently. */
.evidence-node-open{position:absolute;inset:0;z-index:1;border:0;border-radius:inherit;background:transparent;color:inherit;cursor:pointer}
.evidence-node:focus-within{outline:2px solid var(--branch);outline-offset:3px}
.share-duck.evidence-share-trigger{position:absolute;right:4px;bottom:2px;z-index:2}
.evidence-node-footer,.evidence-node-mobile-meta{padding-right:56px}
.evidence-detail-share{margin-top:8px}
/* On a research-map card (research-map-card.js) the duck sits in the card's top corner, beside the card's own link. */
.research-card.has-share{position:relative}
.research-card>.share-duck{position:absolute;top:2px;right:2px;z-index:1}
.research-card>.share-duck .share-duck-img{width:30px;height:30px}
.research-card.has-share .research-card-meta{padding-right:34px}
/* In a line of byline text the target overhangs the line instead of making it taller. */
:is(.opinion-byline,.creator-views-meta)>.share-duck{margin:-12px -8px -12px auto}
:is(.opinion-byline,.creator-views-meta)>.share-duck .share-duck-img,.csim-opinion>.share-duck .share-duck-img{width:32px;height:32px}
.csim-opinion>.share-duck{margin:-10px -6px -10px -2px}

/* The share dialog: the image at 4:5 (its space kept while it is made), then Share image · Save image · New face. */
.share-preview{max-width:560px;margin:0 auto}
.share-frame{width:min(100%,calc(min(58dvh,640px) * .8));margin:0 auto;aspect-ratio:4/5;border-radius:18px;background:var(--surface-2)}
.share-frame[aria-busy=true]:not(:has(img:not([hidden]))){animation:share-wait 1.4s ease-in-out infinite alternate}
.share-frame[hidden]{display:none}
.share-image{display:block;width:100%;height:100%;object-fit:contain;border:1px solid var(--border);border-radius:18px;background:var(--db-paper-strong)}
.share-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin:14px 0 4px}
.share-actions[hidden]{display:none}
.share-actions .btn{min-height:44px}
.share-status:empty{display:none}
.share-status{margin:8px 0 0;text-align:center}
.share-hint{margin:8px 0 0;text-align:center}
@keyframes share-wait{from{opacity:.55}to{opacity:1}}
@media(prefers-reduced-motion:reduce){.share-frame{animation:none!important}}
@media(max-width:640px){.evidence-node::after{display:none}.evidence-node{padding-right:12px}.evidence-node-mobile-meta{min-height:28px}}

/* chart.css */
/* Chart palette is independent of the market-wide gain/loss colors. */
.page-app{--chart-up:#16836f;--chart-down:#bb556a;--chart-grid:var(--db-line);--chart-indicator:#6477bc;--chart-reference:#a46b24;--chart-hist-up:#8ac9bd;--chart-hist-down:#dfabb7}
@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .page-app{--chart-up:#55b6a4;--chart-down:#d68093;--chart-grid:var(--db-line);--chart-indicator:#9aa7d6;--chart-reference:#c7a16e;--chart-hist-up:#34695f;--chart-hist-down:#805363}}
:root[data-theme=dark] .page-app{--chart-up:#55b6a4;--chart-down:#d68093;--chart-grid:var(--db-line);--chart-indicator:#9aa7d6;--chart-reference:#c7a16e;--chart-hist-up:#34695f;--chart-hist-down:#805363}
.chart-heading{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:4px 16px;margin-bottom:18px}
.chart-identity{min-width:0;flex:1}
.page-app .chart-heading h1{font-size:28px;font-weight:750;letter-spacing:-.035em;margin:0;overflow-wrap:anywhere}
.chart-heading .chart-company-name{grid-column:1/-1;font-size:13px;line-height:1.5;margin:3px 0 0;overflow-wrap:anywhere}
.chart-company-name:empty{display:none}
.chart-heading #chart-spot{margin-left:auto;font-size:26px;letter-spacing:-.035em;flex-shrink:0;line-height:1.25}
.chart-heading #chart-spot time{font:400 12px/1.5 var(--font);letter-spacing:0;max-width:none;white-space:nowrap}
.page-app .chart-change{min-height:44px;min-width:44px;padding:8px 10px;font-size:12px}
.chart-search[hidden]{display:none}
.chart-controls{gap:16px;margin:0 0 16px}
.chart-controls .chart-control{gap:5px}
.chart-control>.small{font-size:11px}
:is(.chart-controls,.chart-calls) .seg{padding:3px;gap:3px;border-radius:10px;background:var(--surface-2);border-color:transparent}
:is(.chart-controls,.chart-calls) .seg button{border-radius:7px;min-height:44px;min-width:48px;padding:8px 17px;font-family:var(--font);font-size:13px;font-weight:550;transition:background .12s,color .12s}
:is(.chart-controls,.chart-calls) .seg button.on{background:var(--surface);color:var(--text);box-shadow:0 1px 4px rgb(0 0 0 / .09);font-weight:750}
:is(.chart-controls,.chart-calls) .seg button:not(:disabled):hover{color:var(--text);background:var(--surface)}
.chart-controls .seg button:disabled{opacity:.5;cursor:not-allowed}
.page-app .chart-help-button{width:auto;min-width:44px;height:44px;padding:0 12px;border-radius:8px;font:600 12px/1.4 var(--font)}
.chart-controls>.chart-help-button{margin-bottom:3px;margin-left:auto}
.chart-workspace{background:var(--surface);border-radius:16px;padding:16px 20px}
.page-app .chart-workspace[hidden]{display:none}
.chart-workspace .chart-host{height:470px}
.chart-ohlc{gap:8px 24px;margin-bottom:14px;align-items:center}
.chart-ohlc time{font-size:12px}
.chart-ohlc-values{display:flex;gap:24px;margin:0;font-size:12px;line-height:1.5}
.chart-ohlc-values>div{display:flex;gap:7px}
.chart-ohlc-values dt{color:var(--muted);font-weight:400}
.chart-ohlc-values dd{margin:0;font-weight:650}
.chart-tools{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:10px 0 14px}
.chart-tools .chart-zoom{flex-shrink:0;margin:0}
.page-app .chart-zoom .btn{height:44px;min-width:44px;font-size:14px}
.chart-option-controls{align-items:center;gap:8px 14px;padding-top:14px;margin-bottom:12px}
.chart-option-controls>label:first-child{gap:8px}
.chart-option-controls>label:first-child>span{font-size:12px}
.chart-extra-toggle{margin:0;min-height:44px;gap:8px;font-size:12px}
.chart-extra-toggle input{width:16px;height:16px;accent-color:var(--chart-up);flex-shrink:0}
.chart-option-notes>.small{font-size:12px;line-height:1.6}
.chart-expiries summary{min-height:44px;align-content:center;font-size:12px}
.chart-help-intro{margin:0 0 18px}
.chart-help-pair{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.chart-help-card{padding:16px;background:var(--surface-2);border:1px solid var(--border);border-radius:12px;min-width:0}
.chart-help .chart-help-card h3{margin:0 0 7px;font-size:14px;line-height:1.5}
.chart-help .chart-help-card p{margin:0;font-size:13px;line-height:1.7}
.chart-help-section{padding:20px 0 0;margin:20px 0 0;border-top:1px solid var(--border)}
.chart-help .chart-help-section h3{margin:0 0 8px;font-size:14px}
.chart-help-section p{margin:0 0 12px}
.chart-help-fact{font-weight:600;overflow-wrap:anywhere}
.chart-help>a{display:inline-block;padding:10px 0;font-size:13px;min-height:44px}
.chart-candle-example{display:flex;align-items:center;gap:14px}
.chart-candle-art{position:relative;width:24px;height:74px;flex-shrink:0;color:var(--chart-up)}
.chart-candle-art.down{color:var(--chart-down)}
.chart-candle-art:before{content:'';position:absolute;width:2px;top:0;bottom:0;left:11px;background:currentColor}
.chart-candle-art i{position:absolute;inset:17px 0 17px;background:currentColor;border-radius:2px}
.chart-candle-key{margin:20px 0 0;display:grid;gap:14px;font-size:13px;line-height:1.7}
.chart-candle-key>div{display:grid;grid-template-columns:52px 1fr;gap:12px}
.chart-candle-key dt{font-weight:650}.chart-candle-key dd{margin:0;color:var(--muted)}
@media(max-width:600px){
 .chart-heading{grid-template-columns:auto minmax(0,1fr) auto;gap:4px 10px;margin-bottom:12px;align-items:center}
 .page-app .chart-heading h1{font-size:22px;line-height:1.4;white-space:nowrap}
 .chart-heading .chart-company-name{font-size:11px;line-height:1.4}
 .chart-heading #chart-spot{font-size:22px;padding-top:2px;min-width:0;max-width:100%}
 .chart-heading #chart-spot time{font-size:10px;white-space:normal;overflow-wrap:normal}
 .page-app .chart-change{padding:7px;font-size:11px}
 .chart-controls{gap:8px 12px;margin:10px 0 12px}
 .chart-controls .chart-control:first-child{flex-basis:100%}
 .chart-controls .chart-control:first-child>span{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
 .chart-controls .chart-control:nth-child(2){flex-direction:row;gap:10px}
 :is(.chart-controls,.chart-calls) .seg button{min-width:44px;padding:7px 10px;font-size:12px}
 .chart-controls .chart-interval{width:auto}
 .chart-controls>.chart-help-button{margin:0 0 0 auto}
 .chart-workspace{padding:12px 10px;border-radius:12px}
 .chart-workspace .chart-host{height:380px}
 .chart-ohlc{gap:6px;margin:0 2px 12px}
 .chart-ohlc time{flex-basis:100%;font-size:11px}
 .chart-ohlc-values{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;width:100%;font-size:11px}
 .chart-ohlc-values>div{display:flex;flex-direction:column;gap:1px;min-width:0}
 .chart-ohlc-values dd{font-size:12px;overflow-wrap:anywhere}
 .chart-tools{align-items:start;flex-wrap:wrap;gap:8px;margin:8px 0 12px}
 .chart-tools .chart-zoom{margin-left:auto;gap:4px}
 .chart-option-controls{gap:4px 8px}
 .chart-option-controls>label:first-child{flex:1;min-width:0}
 .chart-option-controls .input{max-width:100%;min-width:0;flex:1}
 .chart-extra-toggle{flex-basis:100%;min-height:44px}
 .chart-option-notes>.small{font-size:11px}
 .chart-help-pair{grid-template-columns:1fr}
 .chart-help-card{padding:14px}
 .chart-candle-art{height:60px}
 .chart-help-section{padding-top:16px;margin-top:16px}
 .chart-expiry-row{grid-template-columns:1fr 1fr;gap:10px 14px;padding:12px 4px}
 .chart-expiry-row span{font-size:12px}.chart-expiry-row small{font-size:11px}
}
@media(max-width:360px){
 .chart-controls .chart-control:nth-child(2)>span{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
}

/* Reference text has its own column; it never overlays a chart canvas. */
.chart-workspace{display:grid;grid-template-columns:minmax(0,1fr);column-gap:24px}
.chart-workspace.has-references{grid-template-columns:minmax(0,1fr) 216px}
.chart-workspace>.chart-ohlc,.chart-reference-settings,.chart-overlay-status{grid-column:1/-1;min-width:0}
.chart-main{min-width:0}
.chart-references{min-width:0;border-left:1px solid var(--border);padding-left:20px}
.chart-reference-values h2{font-size:11px;color:var(--muted);font-weight:600;margin:2px 0 12px}
.chart-reference-help{display:flex;align-items:center;justify-content:space-between;gap:4px;min-width:44px;min-height:44px;width:100%;padding:0;border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}
.chart-reference-help>span:first-child{min-width:0;overflow-wrap:anywhere}
.chart-question{display:inline-grid;place-items:center;flex:0 0 14px;width:14px;height:14px;border:1px solid currentColor;border-radius:50%;font-size:10px;line-height:1}
.chart-reference-help:hover{color:var(--text)}
.chart-reference-help:focus-visible,.chart-help-topic>summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}
.chart-help .chart-help-fact{margin:0 0 16px;font-size:12px;line-height:1.6}
.chart-help-flip{margin:16px 0;padding:16px 0 0}
.chart-help-topic{border-top:1px solid var(--border)}
.chart-help-topic>summary{min-height:44px;align-content:center;cursor:pointer;padding:10px 0;font-size:13px;line-height:1.6;font-weight:600}
.chart-help .chart-help-topic p{font-size:13px;line-height:1.8;margin:0 0 16px}
.chart-help-sources{display:grid;padding-bottom:12px}
.chart-help-sources a{display:flex;align-items:center;min-height:44px;font-size:12px;line-height:1.6}
.chart-references .legend{display:grid;gap:0;margin:0}
.chart-references .legend-item{display:grid;grid-template-columns:3px minmax(0,1fr);gap:4px 10px;border-radius:0;background:none;padding:12px 0;border-bottom:1px solid var(--border);white-space:normal;min-width:0}
.chart-references .legend-item i{grid-row:1/3;width:3px;height:auto;min-height:30px;border-radius:2px}
.chart-reference-label{font-size:12px;color:var(--muted);overflow-wrap:anywhere}
.chart-references .legend-item b{grid-column:2;font-size:17px;font-weight:600;font-variant-numeric:tabular-nums;overflow-wrap:anywhere;line-height:1.4}
.chart-reference-range{display:flex;flex-wrap:wrap}
.chart-reference-range span{white-space:nowrap}
.chart-reference-details{margin-top:14px;min-width:0}
.chart-reference-details>summary{font-size:12px;color:var(--muted);cursor:pointer;min-height:44px;align-content:center}
.chart-reference-details>summary:hover{color:var(--text)}
.chart-reference-details>summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}
.chart-wall-notes .chart-wall-basis{font-size:11px;line-height:1.65;margin:0 0 10px;overflow-wrap:anywhere}
.chart-wall-notes .chart-wall-position{margin:0;font-size:12px;line-height:1.8;overflow-wrap:anywhere}
.chart-reference-settings:empty,.chart-overlay-status:empty{display:none}
.chart-reference-settings:not(:has(.chart-option-controls>*)){display:none}
@media(max-width:900px){
 .chart-workspace{column-gap:10px}
 .chart-workspace.has-references{grid-template-columns:minmax(0,1fr) 76px}
 .chart-references{display:contents}
 .chart-references[hidden]{display:none}
 .chart-reference-values{border-left:1px solid var(--border);padding-left:10px;min-width:0}
 .chart-reference-values h2{font-size:10px;margin:2px 0 4px}
 .chart-references .legend-item{gap:3px 6px;padding:10px 0}
 .chart-reference-label{font-size:10px;line-height:1.5}
 .chart-references .legend-item b{font-size:11px}
 .chart-references .legend-item i{width:2px;min-height:24px}
 .chart-reference-details{grid-column:1/-1;margin:0;border-top:1px solid var(--border)}
 .chart-wall-notes{padding:0 0 14px}
 .chart-main .chart-tools{flex-wrap:wrap;gap:4px}
 .chart-main .chart-zoom{margin-left:auto}
}

/* The empty chart entry is a stock selector, with the same type as the chart. */
.chart-picker-page{max-width:960px;margin-inline:auto}
.chart-picker-page .chart-heading{display:block;margin:12px 0 28px}
.chart-picker-note{color:var(--muted);font:400 14px/1.7 var(--font);margin:8px 0 0}
.chart-picker-label{display:block;font:600 13px/1.5 var(--font);color:var(--muted);margin:0 0 10px}
.chart-picker-page .chart-search{margin:0 0 28px;gap:10px}
.chart-picker-page .chart-search input{font:400 16px/1.5 var(--font);min-height:48px}
.chart-picker-page .chart-search button{font-size:14px;min-height:48px}
.chart-picker-stocks{display:grid;grid-template-columns:repeat(auto-fill,minmax(116px,1fr));gap:10px}
.chart-picker-stock{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:48px;padding:11px 14px;border:1px solid var(--border);border-radius:9px;background:var(--surface);color:var(--text);font:650 14px/1.5 var(--font);text-decoration:none}
.chart-picker-stock span{font-size:13px;font-weight:400;color:var(--muted)}
.chart-picker-stock:hover{background:var(--surface-2);border-color:var(--muted)}
.chart-picker-stock:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
@media(max-width:600px){.chart-picker-page .chart-heading{margin:8px 0 22px}.chart-picker-note{font-size:12px}.chart-picker-page .chart-search{gap:8px}.chart-picker-page .chart-search input{font-size:16px}.chart-picker-page .chart-search button{font-size:12px;padding-inline:12px}.chart-picker-stocks{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.chart-picker-stock{padding:10px;font-size:12px}}

/* Creator calls on the K-line (owner 2026-10-27): folded by default to a ribbon under the price pane and one control with
   the count and the lean; open, one marker per candle for the net stance with a count, never a name, and filters that work
   in the page. A candle's calls open in a card over the chart, on the side away from the pointer, and stay while pinned
   (a click, a tap or the keyboard). */
.chart-calls{grid-column:1/-1;display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:0 0 12px}
.chart-calls[hidden],.chart-calls-filters[hidden]{display:none}
.page-app .chart-calls-toggle{display:inline-flex;align-items:center;gap:8px;min-height:44px;max-width:100%;padding:6px 14px 6px 12px;border:1px solid var(--border);
 border-radius:10px;background:var(--surface);color:var(--text);font:650 13px/1.3 var(--font);text-align:left;cursor:pointer}
.page-app .chart-calls-toggle:hover{border-color:var(--muted)}
.chart-calls-toggle:focus-visible{outline:3px solid var(--db-focus);outline-offset:2px}
.page-app .chart-calls-toggle[aria-expanded=true]{background:var(--surface-2);border-color:transparent}
.chart-calls-toggle-text{overflow-wrap:anywhere}
.chart-calls-chevron{flex:none;width:0;height:0;border-block:4px solid transparent;border-left:6px solid currentColor;transition:transform .15s}
.chart-calls-toggle[aria-expanded=true] .chart-calls-chevron{transform:rotate(90deg)}
.chart-calls-lean{display:inline-flex;gap:10px;color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums}
.chart-calls-lean i{margin-right:3px;font-style:normal}
.chart-calls-lean .is-bull i{color:var(--chart-up)}
.chart-calls-lean .is-bear i{color:var(--chart-down)}
.chart-calls-filters{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;min-width:0}
.chart-calls .seg{margin:0}
.chart-calls .seg button[aria-busy=true]{cursor:progress;opacity:.7}
/* The creator picker (creator-picker.js): a button with the current choice; under it a list of every creator with calls in
   range — picture, name, calls, the ▲ / ▼ split — with "All creators" first and the chosen row checked; a sheet on phones. */
.calls-picker{position:relative;min-width:0;max-width:100%}
.page-app .calls-picker-trigger{display:inline-flex;align-items:center;gap:8px;min-height:44px;max-width:min(340px,100%);padding:5px 12px 5px 6px;
 border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;font-size:13px;font-weight:650;cursor:pointer}
.page-app .calls-picker-trigger:hover{border-color:var(--muted)}
.page-app .calls-picker-trigger[aria-expanded=true]{border-color:var(--db-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--db-accent) 20%,transparent)}
.calls-picker-trigger:focus-visible{outline:3px solid var(--db-focus);outline-offset:2px}
.calls-picker-value{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.calls-picker-total{color:var(--muted);font-weight:550;white-space:nowrap;font-variant-numeric:tabular-nums}
.calls-picker-chevron{flex:none;width:0;height:0;margin-left:2px;border-inline:4px solid transparent;border-top:5px solid currentColor;transition:transform .15s}
.calls-picker-trigger[aria-expanded=true] .calls-picker-chevron{transform:rotate(180deg)}
.calls-picker :is(.creator-avatar,.creator-monogram),.calls-picker-sheet :is(.creator-avatar,.creator-monogram){width:30px;height:30px;min-width:30px;
 border-radius:50%;font-size:13px;font-weight:750;object-fit:cover}
.calls-picker-trigger :is(.creator-avatar,.creator-monogram){width:28px;height:28px;min-width:28px}
.calls-picker-stack{display:inline-flex;flex:none}
.calls-picker-stack>:is(.creator-avatar,.creator-monogram){width:22px!important;height:22px!important;min-width:22px!important;font-size:10px!important;
 border:2px solid var(--surface);box-sizing:content-box}
.calls-picker-stack>*+*{margin-left:-9px}
.calls-picker-panel{position:absolute;top:calc(100% + 6px);left:0;z-index:30;display:flex;flex-direction:column;width:min(360px,calc(100vw - 32px));
 max-height:min(440px,62vh);overflow:hidden;background:var(--db-paper-strong);border:1px solid var(--border);border-radius:16px;box-shadow:var(--db-shadow)}
.calls-picker-panel[hidden],.calls-picker-search[hidden]{display:none}
.page-app .calls-picker-search{flex:none;width:auto;min-height:44px;margin:10px 10px 2px;font-size:16px;border-radius:10px}
.calls-picker-list{margin:0;padding:6px;overflow:auto;overscroll-behavior:contain;list-style:none}
.calls-picker-list:focus-visible{outline:3px solid var(--db-focus);outline-offset:-3px;border-radius:12px}
.calls-picker-option{display:grid;grid-template-columns:auto minmax(0,1fr) auto 16px;grid-template-areas:"face name count check" "face name split check";
 align-items:center;column-gap:10px;min-height:52px;padding:6px 10px;border-radius:10px;cursor:pointer;color:var(--text)}
.calls-picker-option>:is(.creator-avatar,.creator-monogram,.calls-picker-stack){grid-area:face}
.calls-picker-option:hover,.calls-picker-option.is-active{background:var(--surface-2)}
.calls-picker-option.is-active{box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--db-focus) 55%,transparent)}
.calls-picker-name{grid-area:name;overflow:hidden;font-weight:650;text-overflow:ellipsis;white-space:nowrap}
.calls-picker-option.is-selected .calls-picker-name{color:var(--db-accent-strong)}
.calls-picker-count{grid-area:count;justify-self:end;align-self:end;color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}
.calls-picker-split{grid-area:split;justify-self:end;align-self:start;display:inline-flex;gap:7px;font-size:11px;font-variant-numeric:tabular-nums}
.calls-picker-split .is-bull{color:var(--chart-up)}
.calls-picker-split .is-bear{color:var(--chart-down)}
.calls-picker-check{grid-area:check;color:var(--db-accent-strong);font-weight:800}
.calls-picker-empty{margin:6px 16px 14px;color:var(--muted);font-size:13px}
.calls-picker-empty[hidden]{display:none}
/* In the phone sheet the same list runs full width under the sheet's title. */
.calls-picker-sheet .calls-picker-panel{position:static;width:auto;max-height:none;border:0;border-radius:0;box-shadow:none;background:transparent}
.calls-picker-sheet .calls-picker-search{margin:0 0 6px}
.calls-picker-sheet .calls-picker-list{padding:0}
@media(max-width:720px){
 .page-app #modal:has(>.modal-box[data-modal-layout=sheet] .calls-picker-sheet){align-items:flex-end;padding:0}
 .page-app .modal-box[data-modal-layout=sheet]:has(.calls-picker-sheet){width:100%;max-width:none;max-height:min(88dvh,calc(100dvh - var(--safe-top) - 24px));
  border-width:1px 0 0;border-radius:16px 16px 0 0}
}
@media(prefers-reduced-motion:reduce){.calls-picker-chevron{transition:none}}
.chart-calls-legend{font-size:12px}
.chart-calls-none{flex-basis:100%;margin:0}
@media(prefers-reduced-motion:reduce){.chart-calls-chevron{transition:none}}
.chart-main{position:relative}
.chart-host:focus-visible{outline:3px solid var(--db-focus);outline-offset:2px}
.chart-calls-card{position:absolute;top:10px;left:10px;z-index:4;box-sizing:border-box;width:clamp(220px,calc(50% - 42px),320px);max-height:420px;overflow:auto;
 padding:10px 12px;border:1px solid var(--border);border-radius:10px;background:var(--surface);color:var(--text);font-size:12px;line-height:1.45;
 box-shadow:0 6px 20px color-mix(in srgb,var(--db-ink) 14%,transparent)}
.chart-calls-card[hidden]{display:none}
.chart-calls-card:not(.is-pinned){pointer-events:none}
.chart-calls-card[data-side=right]{left:auto;right:64px}
.chart-calls-card-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 0 6px;min-height:22px}
.chart-calls-close{flex:none;width:44px;height:44px;margin:-12px -12px -12px 0;border:0;background:none;color:var(--muted);font-size:20px;line-height:1;cursor:pointer}
.chart-calls-close:focus-visible{outline:3px solid var(--db-focus);outline-offset:-6px;border-radius:8px}
.chart-calls-list{display:grid;gap:7px;margin:0;padding:0;list-style:none}
.chart-calls-list li{display:grid;grid-template-columns:14px minmax(0,1fr) auto;column-gap:6px}
.chart-calls-dir{grid-row:span 3;font-size:11px;line-height:18px}
.chart-calls-list li.is-conditional .chart-calls-dir{opacity:.5}
.chart-calls-list .share-duck{grid-column:3;grid-row:1/span 3;align-self:start;margin:-8px -10px 0 0}
.chart-calls-list .share-duck-img{width:32px;height:32px}
.chart-calls-condition{grid-column:2;color:var(--db-caution);font-size:12px;font-weight:600;line-height:1.45}
.chart-calls-list li.is-bull .chart-calls-dir{color:var(--chart-up)}
.chart-calls-list li.is-bear .chart-calls-dir{color:var(--chart-down)}
.chart-calls-who{font-weight:650;overflow-wrap:anywhere}
.chart-calls-quote{grid-column:2;display:-webkit-box;overflow:hidden;color:var(--muted);-webkit-box-orient:vertical;-webkit-line-clamp:2}
.chart-calls-more,.chart-calls-hint{margin:7px 0 0;color:var(--muted)}
.chart-calls-open{display:inline-flex;align-items:center;min-height:44px;font-weight:650}
@media(max-width:600px){
 .chart-calls{gap:6px 8px}
 .chart-calls-filters{flex-basis:100%}
 .chart-calls-legend{flex-basis:100%}
 .page-app .calls-picker-trigger{max-width:100%}
 /* On a phone the card opens under the chart instead of over it: the candles stay in view and nothing moves under the finger. */
 .chart-calls-card,.chart-calls-card[data-side=right]{position:static;width:auto;max-height:none;margin:10px 0 0;box-shadow:none}
}

/* product-focus.css */
.focus-heading{display:flex;align-items:center;justify-content:space-between;gap:20px;margin:10px 0 28px;}
.focus-heading h1{margin:4px 0 8px;font-size:clamp(27px,4vw,38px);letter-spacing:-.025em;}
.focus-heading p{margin:0;line-height:1.6;}
.focus-today,.focus-stock,.focus-explore{max-width:1000px;margin:0 auto;}
.focus-filters{display:flex;gap:10px;margin:20px 0;align-items:center;}
.focus-filters input{flex:1;min-width:0;}
.focus-filters select{max-width:160px;}
.focus-actions,.focus-tool-links{display:flex;gap:10px;flex-wrap:wrap;align-items:center;}
.change-list,.stock-reading-list{display:grid;gap:0;}
.change-card,.stock-list-row{padding:24px 0;border-bottom:1px solid var(--border);min-width:0;}
.change-meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
.change-kind{font-size:12px;color:var(--muted);padding:3px 8px;border:1px solid var(--border);border-radius:6px;}
.change-card h3,.stock-one-sentence{font-size:17px;line-height:1.75;font-weight:500;margin:14px 0;overflow-wrap:anywhere;}
.focus-tools>summary,.focus-history>summary{cursor:pointer;min-height:44px;display:list-item;align-content:center;}
.focus-empty{padding:24px;border:1px solid var(--border);border-radius:14px;line-height:1.75;}
.today-heading{padding:8px 0 22px;border-bottom:1px solid var(--border);margin-bottom:24px;}
/* Macro strip: four market-level references above the personal feed. */
.today-macro{margin:0 0 22px;}
.today-macro-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;}
.today-macro-tile{display:grid;gap:4px;padding:12px 14px;border:1px solid var(--border);border-radius:12px;background:var(--surface);min-width:0;}
.today-macro-label{font-size:12px;color:var(--muted);}
.today-macro-value{font-size:22px;line-height:1.1;font-variant-numeric:tabular-nums;}
.today-macro-unit{font-size:12px;color:var(--muted);margin-left:4px;font-weight:500;}
.today-macro-note{font-size:12px;color:var(--muted);line-height:1.45;}
.today-macro-tile.is-up .today-macro-value{color:var(--pos);}
.today-macro-tile.is-down .today-macro-value{color:var(--neg);}
.today-macro-source{margin:8px 0 0;}
@media(max-width:600px){.today-macro-grid{grid-template-columns:repeat(2,minmax(0,1fr));}.today-macro-value{font-size:19px;}}
.today-heading .today-date{color:var(--accent-text,var(--accent));font-size:12px;font-weight:600;}
.today-heading h1{margin:6px 0;font-size:32px;}
.today-section-title{display:flex;align-items:center;gap:10px;font-size:18px;font-weight:600;margin:0;}
.today-section-heading p{margin:8px 0 16px;line-height:1.6;}
.today-updates .focus-filters{margin:14px 0 18px;}
.today-updates .change-list{gap:10px;}
.today-updates>.small{margin:14px 0 0;line-height:1.65;}
.today-updates>.btn{margin-top:14px;}
.today-updates .focus-empty{margin:0;padding:18px;background:var(--surface-2);font-size:14px;}
.change-card{padding:0;border:1px solid var(--border);border-radius:12px;background:var(--surface);overflow:hidden;}
.change-card>summary{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:9px 16px;list-style:none;cursor:pointer;padding:18px 20px;min-height:44px;}
.change-card>summary::-webkit-details-marker{display:none;}
.change-card>summary:hover{background:var(--surface-2);}
.change-card>summary:focus-visible{outline:2px solid var(--accent);outline-offset:-3px;border-radius:10px;}
.change-card[open]{border-color:var(--accent-text,var(--accent));}
.change-card .change-meta{grid-column:1;gap:8px;}
.change-title{grid-column:1;font-size:16px;line-height:1.65;font-weight:500;overflow-wrap:anywhere;}
.change-byline{grid-column:1;line-height:1.6;overflow-wrap:anywhere;}
/* The filing's amount and the share of directly held shares it sold (owner 2026-10-26). */
.change-figures{grid-column:1;font-size:14px;line-height:1.5;color:var(--muted);font-variant-numeric:tabular-nums lining-nums;overflow-wrap:anywhere;}
.today-disclosure-hint{display:flex;align-items:center;gap:8px;align-self:center;grid-column:2;grid-row:1/-1;font-size:12px;color:var(--muted);white-space:nowrap;}
.today-chevron{width:7px;height:7px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg);margin:0 2px 4px;}
.today-collapse-label{display:none;}
details[open]>summary>.today-disclosure-hint .today-expand-label{display:none;}
details[open]>summary>.today-disclosure-hint .today-collapse-label{display:inline;}
details[open]>summary>.today-disclosure-hint .today-chevron{transform:rotate(225deg);margin-top:5px;}
.change-body{padding:0 20px 16px;}
@media(max-width:600px){
 .focus-heading.today-heading{display:grid;grid-template-columns:minmax(0,1fr) auto;margin:0 0 18px;padding:0 0 16px;gap:6px 10px;}
 .today-heading>div{display:contents;}
 .today-heading .today-date{grid-column:1/-1;grid-row:1;}
 .today-heading h1{font-size:27px;grid-column:1;grid-row:2;}.today-heading p{font-size:13px;}
 .today-heading p.muted{grid-column:1/-1;grid-row:3;}
 .today-heading>a{grid-column:2;grid-row:2;font-size:12px;min-height:44px;padding:8px 10px;}
 .today-updates .focus-filters{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;margin:12px 0;}
 .today-updates .focus-filters select{grid-column:1/-1;min-height:44px;}
 .today-updates .focus-filters input{width:100%;font-size:16px;min-height:44px;}
 .change-card>summary{padding:14px;gap:8px 10px;}
 .change-title{font-size:14px;}.change-byline{font-size:11px;}.change-figures{font-size:12px;}
 .change-kind{font-size:11px;}.change-meta{gap:6px;}
 .today-disclosure-hint{gap:4px;font-size:11px;}
 .change-body{padding:0 14px 12px;}
 .today-section-heading p{font-size:12px;}
}
.stock-list-row header{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;}
.stock-name{display:flex;flex-direction:column;gap:6px;text-decoration:none;max-width:60%;min-height:44px;justify-content:center;}
.stock-name strong{font-size:19px;color:var(--text);}
.stock-name span{font-size:12px;overflow-wrap:anywhere;}
.stock-open{display:inline-flex;min-height:44px;align-items:center;font-size:13px;text-decoration:none;color:var(--accent-text,var(--accent));}
body:has(.focus-nav) .watch-modes .btn{min-width:44px;}
.focus-stock .brief-citation{min-width:44px;min-height:44px;vertical-align:baseline;}
/* Inline numbers stay small so the sentence keeps its shape; the list below carries the 44px targets. */
.stock-reading .brief-citation{min-width:26px;min-height:26px;padding:0 6px;margin-left:4px;font-size:11px;line-height:1;border:1px solid var(--border);border-radius:6px;background:var(--surface);color:var(--muted);vertical-align:middle;cursor:pointer;}
.stock-reading .brief-citation:hover,.stock-reading .brief-citation:focus-visible{color:var(--accent-text,var(--accent));border-color:var(--accent);}
.stock-price{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;}
.stock-price>strong{font-size:26px;font-weight:600;letter-spacing:-.03em;}
.stock-price>small{flex-basis:100%;font-size:11px;line-height:1.5;}
.stock-list-row .stock-price{text-align:right;justify-content:flex-end;max-width:42%;}
.stock-list-row .stock-price>strong{font-size:19px;}
.stock-price-source{font-size:11px;text-align:left;}
.focus-stock .evidence-analysis{margin:24px 0 32px;}
.stock-key-evidence{display:grid;gap:10px;}
.stock-key-evidence h2,.focus-chart h2,.focus-explore h2{font-size:19px;font-weight:600;}
.stock-source-card{display:flex;flex-direction:column;gap:10px;text-align:left;line-height:1.65;color:var(--text);background:var(--surface);padding:18px;border:1px solid var(--border);border-radius:12px;cursor:pointer;}
.stock-source-card strong{font-weight:500;}
.stock-source-card:hover{border-color:var(--accent);}
.focus-chart{margin:36px 0;}
.stock-closing-chart{margin:0;padding:18px 0;}
.stock-closing-chart svg{width:100%;height:auto;display:block;overflow:visible;}
.stock-price-line{fill:none;stroke:var(--accent-text,var(--accent));stroke-width:2.4;vector-effect:non-scaling-stroke;stroke-linecap:round;stroke-linejoin:round;}
.stock-price-dot{fill:var(--accent-text,var(--accent));}
.stock-closing-chart figcaption{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;}
.stock-chart-scrub{width:100%;min-height:44px;accent-color:var(--accent);}
.focus-tools,.focus-history{border-top:1px solid var(--border);padding:12px 0;margin:12px 0;}
.focus-explore-links{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin:24px 0;}
.focus-explore-link{display:flex;flex-direction:column;gap:10px;border:1px solid var(--border);border-radius:14px;padding:22px;text-decoration:none;line-height:1.6;}
.focus-explore-link strong{color:var(--text);}
.focus-explore-link span{font-size:13px;}
.focus-explore>.search-box{max-width:100%;}
@media(min-width:1000px){
 body:has(.focus-nav) #modal:has(.evidence-detail){justify-content:flex-end;align-items:stretch;padding:0;}
 body:has(.focus-nav) #modal:has(.evidence-detail) .modal-box{max-width:540px;max-height:100dvh;border-radius:16px 0 0 16px;padding:28px;}
}
@media(max-width:600px){
 .focus-heading{align-items:flex-start;gap:12px;flex-wrap:wrap;margin-bottom:20px;}
 .focus-filters{flex-wrap:wrap;}.focus-filters select{width:100%;max-width:none;}
 .change-card h3,.stock-one-sentence{font-size:15px;line-height:1.85;}
 .stock-list-row header{gap:10px;}.stock-name{max-width:53%;}
 .stock-list-row .stock-price{max-width:47%;gap:6px;}
 .stock-list-row .stock-price>strong{font-size:17px;}
 .stock-list-row .stock-price>span{font-size:12px;}
 .focus-explore-links{grid-template-columns:1fr;gap:10px;}
 .focus-explore-link{padding:16px;gap:4px;}
 .focus-tool-links>.btn{max-width:100%;white-space:normal;}
}

/* Five destinations (owner, 2026-10-12: 财经博主 is top-level again; the four of 2026-10-11 are reversed): 今日 / 自选股 / 发现 /
   财经博主 = product-navigation.json `primary`, led by 信号工坊 in app.html; 日历 is a tab of 发现. One column per destination
   keeps all five on one row wherever app-beta-ui.css does not set the rail's own columns. */
.app-nav.focus-nav{grid-template-columns:repeat(5,minmax(0,1fr));}
.research-examples{margin:24px 0 28px;}
.research-examples>p{line-height:1.6;max-width:720px;}
.research-example-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;}
.research-example{position:relative;display:flex;flex-direction:column;gap:12px;padding:20px 22px;border:1px solid var(--border);border-radius:14px;text-decoration:none;color:var(--text);background:linear-gradient(125deg,color-mix(in srgb,var(--accent) 5%,var(--surface)),var(--surface));min-width:0;}
.research-example>.app-icon{color:var(--accent-text,var(--accent));width:24px;height:24px;}
.research-example strong{line-height:1.55;font-size:16px;padding-right:12px;}
.research-example .small{line-height:1.6;}
.example-arrow{position:absolute;right:16px;top:20px;color:var(--accent-text,var(--accent));}
.research-example:hover,.focus-explore-link:hover{border-color:var(--accent);background:var(--surface-2);}
.focus-explore-links{margin:14px 0;}
.focus-explore-link>.app-icon{color:var(--muted);}
.stock-core-actions{display:flex;gap:8px;flex-wrap:wrap;margin:-10px 0 22px;}
.stock-core-actions>a{min-height:44px;}
.stock-information-map{margin:28px 0;}
.stock-information-map>.focus-heading{margin-bottom:16px;}
.stock-information-map h2{font-size:20px;margin:0 0 6px;}
.focus-stock{max-width:1180px;}
/* Stance lanes: bullish left, facts in the middle, bearish right. */
.evidence-map.evidence-lanes{--evidence-layout:lanes;display:flex;flex-direction:column;gap:30px;padding:20px;}
.evidence-lanes .evidence-center{align-self:center;grid-row:auto!important;min-height:130px;width:150px;padding:14px;}
.evidence-lanes .evidence-branches{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin:0;align-items:start;}
.evidence-lanes .evidence-group{display:block;min-width:0;}
.evidence-lanes .evidence-group-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--branch);font-size:14px;line-height:1.5;margin:0 0 12px;padding:12px 0;border-top:2px solid var(--branch);}
.evidence-lanes .evidence-group-count{display:inline-flex;font-size:12px;}
.evidence-lanes .evidence-group-nodes{display:flex;flex-direction:column;gap:12px;margin:0;}
.evidence-lanes .evidence-node{grid-row:auto!important;grid-column:auto!important;padding:14px;}
.evidence-lanes .evidence-node>strong{font-size:14px;line-height:1.65;}
.evidence-author-group{display:flex;flex-direction:column;gap:8px;min-width:0;}
.evidence-author-heading{display:flex;flex-direction:column;gap:2px;padding:0 2px;}
.evidence-author-heading>a{display:flex;align-items:center;min-height:44px;color:var(--text);text-decoration:none;font-size:13px;font-weight:600;overflow-wrap:anywhere;}
.evidence-author-heading>a:hover{text-decoration:underline;}
.evidence-author-heading>.small{font-size:11px;line-height:1.5;}
.evidence-repeat{font-size:11px;color:var(--muted);line-height:1.5;}
.evidence-author-more>summary{min-height:44px;align-content:center;font-size:12px;color:var(--accent-text,var(--accent));cursor:pointer;}
.evidence-author-more>.evidence-node{margin-top:8px;}
@media(min-width:1000px){.app-nav.focus-nav{grid-template-columns:repeat(5,124px);}}
@media(max-width:800px){
 .evidence-lanes .evidence-branches{grid-template-columns:1fr;gap:18px;}
 .evidence-lanes .evidence-center{width:100%;min-height:0;border-radius:12px;display:flex;flex-direction:row;flex-wrap:wrap;gap:8px 16px;padding:12px;}
 .evidence-lanes .evidence-center-info{flex-basis:100%;}
 .evidence-lanes .evidence-connections{display:none;}
 .evidence-map.evidence-lanes{padding:12px;gap:18px;}
 .evidence-lanes .evidence-node>strong{-webkit-line-clamp:3;}
 .evidence-workspace:has(.evidence-lanes) .evidence-tools{display:flex;}
 .evidence-workspace:has(.evidence-lanes) .evidence-filter-select{display:block;width:100%;flex:1;}
 .evidence-workspace:has(.evidence-lanes) .evidence-filters{display:none;}
}
@media(max-width:600px){
 .app-nav.focus-nav>a{padding-inline:3px;gap:3px;font-size:10px;min-width:0;}
 .research-example-grid{grid-template-columns:1fr;gap:8px;}
 .research-example{display:grid;grid-template-columns:24px minmax(0,1fr);gap:6px 12px;padding:14px 32px 14px 14px;}
 .research-example>.app-icon{grid-row:1/3;}.research-example strong{font-size:14px;}
 .research-example .small{grid-column:2;font-size:11px;}
 .research-examples{margin:20px 0;}
 .stock-core-actions{gap:4px;}.stock-core-actions .btn{font-size:12px;padding:7px 10px;}
 .focus-stock .evidence-analysis{margin:16px 0;}.stock-information-map{margin:20px 0;}
}
/* Watchlist membership controls share the fixed stock column, separate from its links. */
.watch-capacity{margin:0 0 12px;padding:12px 14px;border:1px solid var(--border);border-left:3px solid var(--accent-text,var(--accent));border-radius:8px;background:var(--surface);font-size:13px;line-height:1.6;}
.watch-bulk{position:sticky;top:0;z-index:5;display:flex;align-items:center;justify-content:space-between;gap:8px 16px;padding:8px 12px;margin:0 0 10px;background:var(--surface);border:1px solid var(--border);border-radius:10px;}
.watch-bulk[hidden],.watch-capacity[hidden],.watch-remove-result[hidden]{display:none;}
.watch-selection-count,.watch-selection-review{font-size:12px;color:var(--muted);}
.watch-selection-review summary{min-height:44px;display:flex;align-items:center;cursor:pointer;}
.watch-selection-review summary::after{content:"⌄";margin-left:8px;}
.watch-selection-review[open] summary::after{content:"⌃";}
.watch-selection-names{max-width:48ch;line-height:1.7;margin:0 0 6px;overflow-wrap:anywhere;}
.watch-bulk [hidden]{display:none;}
.watch-bulk-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.watch-bulk .btn{min-height:44px;font-size:12px;padding:8px 10px;}
.watch-remove-result{font-size:13px;line-height:1.6;margin:8px 0 12px;}
.watch-select{position:absolute;left:4px;top:6px;display:flex;align-items:center;justify-content:center;width:44px;min-height:44px;cursor:pointer;}
.watch-compact-table thead .watch-select{top:0;}
.watch-select input{appearance:auto;min-width:16px;width:16px;min-height:16px;height:16px;margin:0;accent-color:var(--accent-text,var(--accent));cursor:pointer;}
.watch-select:has(:focus-visible){outline:2px solid var(--accent);outline-offset:-3px;border-radius:6px;}
.watch-select:has(:disabled){cursor:wait;opacity:.6;}
.watch-compact-table.watch-selectable tr>:first-child{width:174px;padding-left:56px;}
.watch-compact-table.watch-selectable thead tr>:first-child{padding-left:52px;}
.watch-compact-table.watch-selectable .is-selected>*{background:color-mix(in srgb,var(--accent) 8%,var(--surface));}
@media(max-width:600px){
 .watch-capacity{font-size:12px;padding:8px 10px;margin-bottom:8px;}
 .watch-bulk{padding:6px 8px;flex-wrap:wrap;gap:4px;margin-bottom:8px;}
 .watch-bulk-actions{gap:4px;margin-left:auto;}
 .watch-bulk .btn{font-size:11px;padding:7px 8px;}
 .watch-compact-table.watch-selectable tr>:first-child{width:158px;padding-left:52px;}
 .watch-select{left:0;}
}
/* A real compact table keeps the same columns and sorting on every screen. */
.watch-table-scroll{overflow:auto;max-width:100%;border:1px solid var(--border);border-radius:12px;scroll-padding-left:130px;}
.watch-compact-table{width:100%;min-width:2320px;border-collapse:separate;border-spacing:0;font-size:12px;table-layout:fixed;}
.watch-compact-table th,.watch-compact-table td{border-bottom:1px solid var(--border);padding:12px;vertical-align:top;text-align:right;background:var(--surface);}
.watch-compact-table th{font-weight:500;}
.watch-compact-table tr:nth-child(even)>*{background:var(--surface-2);}
.watch-compact-table thead th{position:sticky;top:0;z-index:2;background:var(--surface-2);padding:0 8px;vertical-align:middle;height:48px;color:var(--muted);}
.watch-compact-table tr>:first-child{position:sticky;left:0;z-index:1;width:130px;text-align:left;border-right:1px solid var(--border);}
.watch-compact-table thead tr>:first-child{z-index:3;}
.watch-compact-table tr>:nth-child(2){width:110px;}.watch-compact-table tr>:nth-child(3){width:280px;text-align:left;}
.watch-compact-table tr>.watch-cap-col{width:90px;}
.watch-compact-table tr>.watch-view-col,.watch-compact-table tr>.watch-view-cell{width:230px;text-align:left;}
.watch-compact-table tr:last-child td,.watch-compact-table tr:last-child th{border-bottom:0;}
.watch-compact-table .stock-name{max-width:100%;min-height:44px;gap:2px;}
.watch-compact-table .stock-name strong{font-size:15px;}
.watch-compact-table .watch-company{font-size:10px;max-width:105px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.watch-quote-cell>strong,.watch-quote-cell>span,.watch-quote-cell>small{display:block;margin-bottom:5px;}
.watch-quote-cell>strong{font-size:15px;}.watch-quote-cell>small{font-size:10px;line-height:1.5;}
.watch-compact-table .watch-change{font-size:12px;}
.watch-compact-table .watch-metric-value{font-size:14px;}.watch-compact-table .watch-metric-note,.watch-compact-table .watch-metric-status{font-size:10px;}
.watch-sort{appearance:none;background:transparent;border:0;font:inherit;color:inherit;cursor:pointer;min-height:44px;padding:7px 2px;width:100%;text-align:inherit;display:flex;align-items:center;justify-content:flex-end;gap:5px;line-height:1.4;}
.watch-compact-table th:first-child .watch-sort{justify-content:flex-start;}
.watch-sort-label{min-width:0;}
.watch-sort-icon{position:relative;display:block;flex:0 0 10px;width:10px;height:16px;color:var(--muted);}
.watch-sort-icon::before,.watch-sort-icon::after{content:'';position:absolute;left:3px;width:4px;height:4px;border-top:1.5px solid currentColor;border-right:1.5px solid currentColor;opacity:.65;}
.watch-sort-icon::before{top:3px;transform:rotate(-45deg);}
.watch-sort-icon::after{bottom:3px;transform:rotate(135deg);}
[aria-sort=ascending] .watch-sort-icon::before,[aria-sort=descending] .watch-sort-icon::after{color:var(--accent-text,var(--accent));opacity:1;}
[aria-sort=ascending] .watch-sort-icon::after,[aria-sort=descending] .watch-sort-icon::before{opacity:.2;}
.watch-sort:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;border-radius:4px;}
.watch-compact-table th[aria-sort]:not([aria-sort=none]){color:var(--accent-text,var(--accent));}
@media(max-width:600px){
 .watch-table-scroll{scroll-padding-left:114px;border-radius:10px;}
 .watch-compact-table{min-width:2060px;font-size:11px;}
 .watch-compact-table tr>[data-signal=insider]{width:132px;}.watch-compact-table tr>[data-signal=funds]{width:146px;}.watch-compact-table tr>[data-signal=walls]{width:118px;}.watch-compact-table tr>[data-signal=support]{width:136px;}
 .watch-signal-help{width:20px;height:20px;font-size:10px;right:2px;}
 .watch-compact-table th,.watch-compact-table td{padding:6px 8px;}
 .watch-compact-table thead th{height:44px;padding:0 6px;font-size:10px;}
 .watch-compact-table tr>:first-child{width:104px;}
 .watch-compact-table tr>:nth-child(2){width:88px;}.watch-compact-table tr>:nth-child(3){width:min(240px,calc(100vw - 140px));}
 .watch-compact-table tr>.watch-view-col,.watch-compact-table tr>.watch-view-cell{width:min(210px,calc(100vw - 150px));}
 .watch-compact-table .watch-company{max-width:86px;}
 .watch-compact-table .stock-name strong{font-size:13px;}.watch-compact-table .watch-quote-cell>strong{font-size:12px;}
 .watch-compact-table .watch-change{font-size:11px;}
 .watch-compact-table .watch-metric-value{font-size:12px;}
 .watch-compact-table .watch-metric{gap:3px;}
 .watch-compact-table .watch-metric-note,.watch-compact-table .watch-metric-status{line-height:1.4;}
 .watchlist-view>.view-head h1{font-size:16px;}
 .watchlist-view>.view-head .count{font-size:11px;}
 .watchlist-view .watch-controls{gap:6px;margin:6px 0 8px;}
 .watchlist-view .watch-controls .btn{min-height:44px;font-size:11px;padding-inline:10px;}
}
@media(max-width:600px){
 .watch-compact-table tbody tr>:first-child{position:sticky;}
 .watch-compact-table tr>:first-child{width:114px;}
 .watch-compact-table .stock-name{padding-right:38px;}
 .watch-compact-table .watch-company{max-width:52px;font-size:9px;}
 .watch-quote-cell>strong,.watch-quote-cell>span,.watch-quote-cell>small{margin-bottom:3px;}
 .watchlist-view .watch-session{margin-block:8px;font-size:11px;}
}
@media(min-width:801px){
 .evidence-lanes .evidence-center{width:400px;max-width:100%;min-height:0;display:grid;grid-template-columns:1fr 1.3fr;gap:4px 16px;border-radius:16px;text-align:left;padding:12px 18px;}
 .evidence-lanes .evidence-center>.mono{grid-column:1;grid-row:1;font-size:22px;}
 .evidence-lanes .evidence-price{grid-column:2;grid-row:1/3;}
 .evidence-lanes .evidence-center-info{grid-column:1;grid-row:2;}
 .evidence-lanes .evidence-water-caption{grid-column:1/-1;justify-self:start;min-height:24px;}
}
@media(max-width:600px){.stock-core-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));}.stock-core-actions>a{min-width:0;justify-content:center;}}

.app-release-update:not([hidden]){display:flex;align-items:center;justify-content:space-between;gap:12px;margin:12px 20px;padding:10px 14px;border:1px solid var(--border,#293747);border-radius:12px;font-size:14px;flex-wrap:wrap}
.app-release-update button{flex-shrink:0}
/* Recovery card after a failed view import: 重试 beside 刷新, 44 px targets, wraps on phones. */
.release-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}
.release-actions .btn{min-height:44px}
.release-reloading{margin:24px 0;text-align:center}
/* One shared status line while api.js reconnects a read (API restart, flaky network): muted, never red. */
.app-reconnecting{margin:4px 20px 0;padding:6px 0}
.errbox.is-restarting,.errbox.is-reconnecting{color:var(--muted);background:var(--surface);border-color:var(--border)}
.errbox.is-reconnecting{display:flex;align-items:center;gap:8px}

/* Older-source revisions stay readable but do not lead the period feed. */

/* Signal columns: dated disclosure and options references, in the metric-cell grammar. */
.watch-compact-table .watch-signal-col.is-first,.watch-compact-table .watch-signal-cell.is-first{border-left:1px solid var(--border);}
.watch-compact-table .watch-signal-col{font-size:11px;}
.watch-compact-table .watch-signal-col .watch-sort{padding-inline:2px;}
.watch-signal{gap:4px;}
.watch-signal-flag{display:inline-flex;align-items:center;gap:5px;font-size:12px!important;font-weight:650;line-height:1.3;padding:2px 8px;border-radius:999px;border:1px solid var(--border);color:var(--muted);letter-spacing:0;}
.watch-signal-flag.is-yes{color:var(--green);border-color:color-mix(in srgb,var(--green) 45%,var(--border));background:color-mix(in srgb,var(--green) 10%,transparent);}
.watch-signal-flag.is-yes::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor;}
.watch-signal-flag.is-no{opacity:.72;}
.watch-signal-flag.is-sell{color:var(--red);border-color:color-mix(in srgb,var(--red) 45%,var(--border));background:color-mix(in srgb,var(--red) 10%,transparent);}
.watch-signal-flag.is-sell::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor;}
.watch-signal-flags{display:inline-flex;flex-wrap:wrap;justify-content:flex-end;gap:4px;}
.watch-signal-flag.is-mixed{color:var(--muted);}
.watch-signal-net{white-space:normal;max-width:100%;text-align:right;line-height:1.3;}
/* A signal cell never paints into its neighbour, whatever the copy length. */
.watch-compact-table .watch-signal-cell{overflow:hidden;}
.watch-compact-table .watch-signal-cell .watch-signal{max-width:100%;box-sizing:border-box;}
/* Balance bar: the green share of the window's value or moves against the red share. */
.watch-balance{display:flex;width:100%;max-width:124px;height:4px;border-radius:2px;overflow:hidden;background:var(--border);margin-top:3px;}
.watch-balance-buy{background:var(--green);}
.watch-balance-sell{background:var(--red);}
.watch-signal-mix{color:var(--muted);}
/* Trade lines: newest first; open-market sales and trimmed positions carry the red tone. */
.watch-signal-event{color:var(--text);}
.watch-signal-event.is-sell,.watch-signal-event.is-trim{color:var(--red);}
.watch-signal-item.is-sell,.watch-signal-item.is-trim{border-color:color-mix(in srgb,var(--red) 35%,var(--border));}
.watch-signal-item p .watch-signal-flags{vertical-align:middle;}
.watch-wall{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:flex-end;gap:2px 5px;line-height:1.3;}
.watch-wall-gap{flex-basis:100%;text-align:right;}
.watch-wall-kind{font-size:9px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;padding:1px 5px;border-radius:4px;}
.watch-wall.is-call .watch-wall-kind{color:var(--red);background:color-mix(in srgb,var(--red) 12%,transparent);}
.watch-wall.is-put .watch-wall-kind{color:var(--green);background:color-mix(in srgb,var(--green) 12%,transparent);}
.watch-compact-table .watch-wall .watch-metric-value{font-size:13px;}
.watch-wall-gap{font-size:10px;color:var(--muted);}
.watch-range{display:flex;flex-direction:column;gap:5px;width:100%;max-width:124px;margin-top:5px;}
.watch-support-reference{display:grid;gap:3px;width:100%;}
.watch-range-label,.watch-range-empty{font-size:10px;line-height:1.4;color:var(--muted);}
.watch-range-empty{min-height:22px;display:flex;justify-content:flex-end;align-items:center;color:var(--faint);}
.watch-range-track{position:relative;height:4px;border-radius:2px;background:linear-gradient(90deg,color-mix(in srgb,var(--green) 55%,var(--border)),var(--border) 50%,color-mix(in srgb,var(--red) 55%,var(--border)));}
.watch-range-dot{position:absolute;top:-3px;width:10px;height:10px;margin-left:-5px;border-radius:50%;background:var(--text);border:2px solid var(--surface);box-shadow:0 0 0 1px var(--border);}
.watch-range-ends{display:flex;justify-content:space-between;font-size:9px;color:var(--faint);letter-spacing:0;}
.watch-signal[data-status=none] .watch-metric-note,.watch-signal[data-status=missing] .watch-metric-note{color:var(--faint);}
.watch-signal-method{margin-top:0;}
/* A shaded edge tells the reader the fixed stock column is covering scrolled cells. */
.watch-table-scroll.is-scrolled tr>:first-child{box-shadow:10px 0 16px -12px rgba(0,0,0,.55);}
@media(max-width:600px){
 .watch-signal-flag{font-size:11px!important;padding:1px 6px;}
 .watch-compact-table .watch-wall .watch-metric-value{font-size:12px;}
 .watch-range{max-width:124px;}
}

/* Research map: one spine per lane, a stub and port for every displayed card. */
@media(min-width:801px){.evidence-lanes .evidence-group-nodes{padding-left:18px;}.evidence-lanes .evidence-author-heading{margin-left:-2px;}}
.evidence-stub{opacity:.75;}
.evidence-lanes .evidence-leaf-trunk{stroke:var(--branch);opacity:.55;}
.evidence-relation{fill:none;stroke:var(--accent-text,var(--accent));stroke-width:1.6;stroke-dasharray:5 4;opacity:.9;}
.evidence-map.has-focus .evidence-node:not(.is-origin):not(.is-related){opacity:.5;}
.evidence-map.has-focus .evidence-connections{z-index:2;}
.evidence-node.is-related{outline:2px solid color-mix(in srgb,var(--accent) 65%,transparent);outline-offset:2px;}
.evidence-node.is-origin{box-shadow:0 0 0 2px color-mix(in srgb,var(--branch) 45%,transparent),0 6px 20px rgba(0,0,0,.12);}
.evidence-node{transition:opacity .18s,box-shadow .18s,border-color .18s,background .18s;}
@media(prefers-reduced-motion:reduce){.evidence-node{transition:none;}}
/* Topic groups fold long fact lists inside a lane without dropping a record. */
.evidence-topic-group{display:flex;flex-direction:column;gap:8px;min-width:0;}
.evidence-topic-heading{display:flex;align-items:center;gap:8px;min-height:32px;padding:0 2px;font-size:12px;font-weight:650;color:var(--muted);}
.evidence-topic-heading::before{content:'';width:7px;height:7px;border-radius:2px;background:var(--branch);opacity:.8;flex-shrink:0;}
.evidence-topic-heading>span:first-of-type{min-width:0;overflow-wrap:anywhere;}
.evidence-topic-count{display:inline-grid;place-items:center;min-width:22px;height:20px;padding:0 6px;border-radius:5px;background:color-mix(in srgb,var(--branch) 10%,transparent);color:var(--branch);font-size:11px;}
.evidence-topic-more>summary{min-height:44px;align-content:center;font-size:12px;color:var(--accent-text,var(--accent));cursor:pointer;}
.evidence-topic-more>.evidence-node{margin-top:8px;}
.evidence-map-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end;}
@media(max-width:600px){.evidence-map-footer{flex-wrap:wrap;}.evidence-map-footer>p{flex-basis:100%;}.evidence-map-actions{width:100%;justify-content:stretch;}.evidence-map-actions>.btn{flex:1;}}
.evidence-map-actions>[hidden]{display:none;}
/* Center card: record balance across the three lanes, counts only. */
.evidence-balance{display:flex;flex-direction:column;gap:4px;width:100%;max-width:150px;margin-top:6px;}
.evidence-balance-bar{display:flex;height:5px;gap:2px;border-radius:3px;overflow:hidden;}
.evidence-balance-bar>span{background:var(--branch);opacity:.85;min-width:2px;}
.evidence-balance-legend{display:flex;justify-content:space-between;font-size:10px;line-height:1.4;}
.evidence-balance-legend>span{color:var(--branch);font-weight:650;}
@media(min-width:801px){.evidence-lanes .evidence-balance{grid-column:1/-1;max-width:220px;}}
/* Phones: a CSS spine stands in for the measured SVG connectors. */
@media(max-width:800px){
 .evidence-lanes .evidence-group-nodes{padding-left:12px;margin-left:5px;border-left:2px solid color-mix(in srgb,var(--branch) 40%,transparent);}
 .evidence-topic-heading{min-height:28px;font-size:11px;}
 .evidence-balance{max-width:none;margin-top:2px;}
}

/* Today: stance rail, source mark, saved quote chip and a compact stats strip. */
.focus-today,.focus-stock,.stock-information-map,.watchlist-view,.creators-view,.focus-explore{--evidence-support:#107348;--evidence-counter:#b53c52;--evidence-context:#3d6e9c;}
html[data-theme=dark] :is(.focus-today,.focus-stock,.stock-information-map,.watchlist-view,.creators-view,.focus-explore){--evidence-support:#47df98;--evidence-counter:#f18b9b;--evidence-context:#8cb6e7;}
@media(prefers-color-scheme:dark){html:not([data-theme=light]) :is(.focus-today,.focus-stock,.stock-information-map,.watchlist-view,.creators-view,.focus-explore){--evidence-support:#47df98;--evidence-counter:#f18b9b;--evidence-context:#8cb6e7;}}
.change-card.is-support{box-shadow:inset 3px 0 0 var(--evidence-support);}
.change-card.is-counter{box-shadow:inset 3px 0 0 var(--evidence-counter);}
.change-card.is-context{box-shadow:inset 3px 0 0 var(--evidence-context);}
.change-card[open]{box-shadow:none;}
.change-meta .evidence-source-badge{font-size:11px;}
.change-meta .evidence-source-badge :is(.evidence-brand-mark,.app-icon){width:15px;height:15px;}
.today-quote-slot:empty{display:none;}
.today-quote{display:inline-flex;align-items:center;gap:6px;font-size:12px;line-height:1.4;padding:2px 8px;border-radius:999px;background:var(--surface-2);color:var(--muted);white-space:nowrap;}
.today-quote>span:first-child{color:var(--text);font-weight:600;}
.today-quote.is-up>span:last-child{color:var(--pos);}.today-quote.is-down>span:last-child{color:var(--neg);}
.change-meta .today-quote-slot{margin-left:auto;}
.change-byline{display:flex;flex-wrap:wrap;align-items:center;gap:0 8px;}
.change-avatar{display:inline-grid;place-items:center;flex-shrink:0;width:22px;height:22px;border-radius:50%;background:color-mix(in srgb,var(--accent) 18%,var(--surface-2));color:var(--accent-text,var(--accent));font-size:11px;font-weight:700;}
.today-widened{margin:-6px 0 12px;color:var(--accent-text,var(--accent));line-height:1.6;}
.today-widened[hidden]{display:none;}
@media(max-width:600px){
 .today-quote{font-size:11px;padding:1px 6px;}
 .change-meta .today-quote-slot{flex-basis:100%;margin-left:0;}
}

/* Creators: pending videos read as a quiet row; the simulator explains an empty state. */
.creators-view .cr-post.is-pending{padding:16px 18px;border-style:dashed;background:color-mix(in srgb,var(--surface-2) 55%,var(--surface));}
.cr-post.is-pending .cr-video-title{font-size:15px;line-height:1.5;margin:8px 0;}

.creator-request-summary{margin-top:8px;}

/* Shell: a short, quiet page entrance; the sidebar and bottom bar keep their own accents. */
@keyframes route-in{from{opacity:0;transform:translateY(4px);}to{opacity:1;transform:none;}}
.page-app .app-view>.route-page{animation:route-in .18s ease-out both;}
@media(prefers-reduced-motion:reduce){.page-app .app-view>.route-page{animation:none;}}
@media(min-width:1000px){
 .page-app .app-nav>a{transition:background .15s,color .15s;}
 .page-app .app-nav>a:hover:not(.on){background:color-mix(in srgb,var(--surface-2) 80%,var(--surface));}
}
/* Mention-only authors fold together once the reader expands a lane. */
.evidence-mentions{border:1px dashed var(--border);border-radius:12px;padding:0 12px;}
.evidence-mentions>summary{min-height:44px;align-content:center;font-size:12px;color:var(--muted);cursor:pointer;}
.evidence-mentions[open]{padding-bottom:12px;}
.evidence-mentions>.evidence-author-group{margin-top:10px;}

/* Cited records spelled out under a one-sentence analysis: number, stance, author, title, date. */
.stock-citations{list-style:none;margin:10px 0 6px;padding:0;display:grid;gap:6px;}
.stock-citation{display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;gap:10px;width:100%;min-height:44px;padding:7px 10px;border:1px solid var(--border);border-radius:10px;background:var(--surface);color:var(--text);font:inherit;text-align:left;cursor:pointer;}
.stock-citation:hover,.stock-citation:focus-visible{border-color:var(--accent);}
.stock-citation-n{display:grid;place-items:center;width:22px;height:22px;border-radius:6px;background:var(--surface-2);font-size:11px;color:var(--muted);}
.stock-citation-text{display:flex;flex-direction:column;min-width:0;gap:2px;}
.stock-citation-who{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--muted);min-width:0;}
.stock-citation-who>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.stock-citation-stance{flex-shrink:0;font-size:10px;font-weight:700;padding:1px 6px;border-radius:5px;white-space:nowrap;}
.stock-citation-stance.is-support{color:var(--evidence-support);background:color-mix(in srgb,var(--evidence-support) 12%,transparent);}
.stock-citation-stance.is-counter{color:var(--evidence-counter);background:color-mix(in srgb,var(--evidence-counter) 12%,transparent);}
.stock-citation-stance.is-context{color:var(--evidence-context);background:color-mix(in srgb,var(--evidence-context) 12%,transparent);}
.stock-citation-title{font-size:13px;line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere;}
.stock-citation-when{display:flex;flex-direction:column;align-items:flex-end;gap:3px;font-size:11px;color:var(--muted);white-space:nowrap;}
.stock-citation-latest{font-size:10px;font-weight:700;color:var(--accent-text,var(--accent));padding:1px 6px;border:1px solid color-mix(in srgb,var(--accent) 45%,var(--border));border-radius:999px;}
@media(max-width:600px){.stock-citation-title{font-size:12px;}.stock-citation-when{font-size:10px;}}
/* Signal headers: label, sort, and a "?" that opens the plain-language explanation. */
.watch-compact-table th.watch-signal-col{position:relative;}
.watch-compact-table th.watch-signal-col .watch-sort{padding-right:26px;}
.watch-signal-help{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:grid;place-items:center;width:22px;height:22px;padding:0;border:1px solid var(--border);border-radius:50%;background:var(--surface);color:var(--muted);font:inherit;font-size:11px;font-weight:700;line-height:1;cursor:pointer;}
.watch-signal-help:hover,.watch-signal-help:focus-visible{color:var(--accent-text,var(--accent));border-color:var(--accent);}
/* Fixed widths keep every signal cell readable; the table grows and scrolls instead of squeezing. */
/* Wide enough for one-line pills: "Net selling −$2.1M", "6 added · 7 trimmed". */
.watch-compact-table tr>[data-signal=insider]{width:198px;}
.watch-compact-table tr>[data-signal=funds]{width:204px;}
.watch-compact-table tr>[data-signal=politicians]{width:204px;}
.watch-signal-ref{color:var(--muted);font-variant-numeric:tabular-nums;}
.watch-compact-table tr>[data-signal=walls]{width:132px;}
.watch-compact-table tr>[data-signal=support]{width:152px;}
.watch-signal-average{color:var(--text);font-weight:600;}
.watch-signal-fund{display:block;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text);}
.watch-signal-range{font-variant-numeric:tabular-nums;}
/* A signal cell is one button; it keeps the metric grammar and gains a hover ring. */
button.watch-signal{appearance:none;border:0;background:transparent;font:inherit;color:inherit;width:100%;padding:4px 6px;margin:-4px -6px;border-radius:8px;cursor:pointer;text-align:right;}
button.watch-signal:hover,button.watch-signal:focus-visible{background:color-mix(in srgb,var(--accent) 7%,transparent);outline:1px solid color-mix(in srgb,var(--accent) 35%,transparent);}
.watch-signal .watch-metric-note,.watch-signal .watch-metric-status{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
/* Reference metadata must remain visible in both compact stock rows. */
.watch-signal[data-metric=support] .watch-metric-note,.watch-signal[data-metric=walls] .watch-metric-note{display:block;overflow:visible;-webkit-line-clamp:unset;}
.watch-support-gap,.watch-wall-gap{white-space:nowrap;}
@media(max-width:600px){
 .watch-compact-table tr>[data-signal=walls]{width:118px;}
 .watch-compact-table tr>[data-signal=support]{width:136px;}
 .watch-table-scroll:has(.watch-selectable){scroll-padding-left:158px;}
}
/* Flashcard: the records behind one cell, in the same card grammar as the map's source dialog. */
.watch-signal-card{display:grid;gap:14px;}
.watch-signal-card-lead{margin:0;font-size:15px;font-weight:600;}
.watch-signal-items{display:grid;gap:10px;}
.watch-signal-item{display:grid;gap:6px;padding:12px 14px;border:1px solid var(--border);border-radius:12px;background:var(--surface);}
.watch-signal-item header{display:flex;justify-content:space-between;gap:12px;align-items:baseline;}
.watch-signal-item p{margin:0;line-height:1.6;}
.watch-signal-txns{margin:0;padding-left:18px;font-size:13px;line-height:1.7;}
.watch-signal-card-actions{display:flex;gap:8px;flex-wrap:wrap;}
.watch-signal-card-actions .btn{min-height:44px;}
.watch-signal-help-body p{line-height:1.7;}
/* Call history: settled result on the closed card. */
.study-group-result{display:inline-flex;align-items:baseline;gap:6px;padding:3px 8px;border-radius:7px;background:var(--surface-2);}
.study-group-result strong{font-size:14px;}
.study-group-result.pos strong{color:var(--pos);}.study-group-result.neg strong{color:var(--neg);}

/* Loading skeleton: the list keeps its shape while the first /watchlist read is in flight. */
.watch-skeleton{display:grid;gap:10px;padding:12px;}
.watch-skeleton-row{display:grid;grid-template-columns:minmax(120px,1.2fr) minmax(80px,.7fr) minmax(160px,2fr);gap:14px;align-items:center;min-height:44px;}
.watch-skeleton-cell{display:block;height:12px;border-radius:6px;background:linear-gradient(90deg,var(--surface-2) 25%,var(--border) 50%,var(--surface-2) 75%);background-size:200% 100%;animation:watch-shimmer 1.4s ease-in-out infinite;}
.watch-skeleton-cell.is-name{height:16px;width:70%;}.watch-skeleton-cell.is-price{height:16px;width:60%;justify-self:end;}
@keyframes watch-shimmer{from{background-position:200% 0}to{background-position:-200% 0}}
@media (prefers-reduced-motion:reduce){.watch-skeleton-cell{animation:none;}}
.watch-quote-time{font-variant-numeric:tabular-nums;}

/* Watchlist density (2026-09-21): three short lines per cell at most; a digest sentence in the Overview cell. */
.watch-compact-table th,.watch-compact-table td{padding:10px 12px;}
.watch-compact-table tr>:nth-child(3){width:300px;}
.watch-compact-table .watch-signal-event{display:block;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.45;}
.watch-compact-table .watch-metric-note{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;}
.watch-compact-table .watch-signal-net{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;}
.watch-compact-table th.watch-help-col{position:relative;font-size:11px;}
.watch-compact-table th.watch-help-col .watch-sort{padding-right:26px;}
.stock-digest{margin:0;font-size:12px;line-height:1.6;color:var(--text);}
.stock-digest-note{margin:4px 0 0;font-size:10px;line-height:1.5;}
@media(max-width:600px){
 .watch-compact-table th,.watch-compact-table td{padding:6px 8px;}
}

/* Right-hand columns (2026-09-21): every column has a width; headers never wrap; sells and trims are
   orange (a normal event), purchases and adds green; red is reserved for price declines. */
.watch-compact-table{min-width:2140px;}
.watch-compact-table th[data-metric]{width:100px;}
.watch-compact-table th{overflow:hidden;}
.watch-compact-table th[data-metric] .watch-sort-label,.watch-compact-table th.watch-signal-col .watch-sort-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.watch-compact-table thead th{padding:0 6px;}
.watch-compact-table th.watch-help-col .watch-sort{padding-right:22px;padding-left:0;}
.watch-compact-table .watch-metric-value{white-space:nowrap;}
.watch-signal-flag.is-sell{color:var(--orange);border-color:color-mix(in srgb,var(--orange) 45%,var(--border));background:color-mix(in srgb,var(--orange) 10%,transparent);}
.watch-balance-sell{background:var(--orange);}
.watch-signal-event.is-sell,.watch-signal-event.is-trim{color:var(--orange);}
.watch-signal-item.is-sell,.watch-signal-item.is-trim{border-color:color-mix(in srgb,var(--orange) 35%,var(--border));}
.watch-wall.is-call .watch-wall-kind{color:var(--orange);background:color-mix(in srgb,var(--orange) 12%,transparent);}
.watch-range-track{background:linear-gradient(90deg,color-mix(in srgb,var(--green) 55%,var(--border)),var(--border) 50%,color-mix(in srgb,var(--orange) 55%,var(--border)));}
/* Option walls: one line per wall. Support refs: value, kind and distance on one line above the range. */
.watch-compact-table .watch-wall{flex-wrap:nowrap;gap:5px;white-space:nowrap;}
.watch-compact-table .watch-wall-gap{flex-basis:auto;}
.watch-compact-table .watch-support-reference{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:baseline;gap:2px 5px;}
.watch-compact-table .watch-range-label{display:none;}
.watch-compact-table .watch-range{margin-top:2px;gap:2px;}
.watch-compact-table .watch-signal{gap:3px;}
.watch-compact-table .watch-balance{margin-top:2px;}
@media(max-width:600px){
 .watch-compact-table{min-width:1900px;}
 .watch-compact-table th[data-metric]{width:84px;}
}

/* Digest values keep the colour of their column: price up/down, buy/sell, put/call (2026-09-21). */
.stock-digest-value{font-weight:600;}
.stock-digest-value.is-up,.stock-digest-value.is-buy{color:var(--pos);}
.stock-digest-value.is-down{color:var(--neg);}
.stock-digest-value.is-sell{color:var(--orange);}
.stock-digest-value.is-put,.stock-digest-value.is-call,.stock-digest-value.is-low{display:inline-block;padding:0 5px;border-radius:4px;font-size:11px;line-height:1.5;}
.stock-digest-value.is-put{color:var(--green);background:color-mix(in srgb,var(--green) 12%,transparent);}
.stock-digest-value.is-call{color:var(--orange);background:color-mix(in srgb,var(--orange) 12%,transparent);}
.stock-digest-value.is-low{color:var(--muted);background:color-mix(in srgb,var(--muted) 14%,transparent);}
/* Since-then lines in the signal cards are price moves, so red is allowed there. */
.watch-since{margin:2px 0 0;font-weight:600;color:var(--text);}
.watch-since.is-up{color:var(--pos);}.watch-since.is-down{color:var(--neg);}
.watch-since-note{margin:0 0 10px;}
/* Market backdrop tiles: a mixed reading is amber, and the liquidity tile explains its score. */
.today-macro-tile.is-mid .today-macro-value{color:var(--yellow);}
.today-macro-label{display:flex;align-items:center;gap:6px;}
.today-macro-help{position:static;transform:none;flex:none;width:18px;height:18px;font-size:10px;}

/* Option-wall rows read left to right inside a clipped cell: the kind chip and the price always
   show, and only the distance text may shorten (2026-09-21, owner screenshot of clipped CALL/PUT). */
.watch-compact-table tr>[data-signal=walls]{width:158px;}
.watch-compact-table .watch-wall{justify-content:flex-start;min-width:0;}
.watch-compact-table .watch-wall .watch-metric-value{flex:none;}
.watch-compact-table .watch-wall-kind{flex:none;}
.watch-compact-table .watch-wall-gap{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;text-align:left;}
@media(max-width:600px){.watch-compact-table tr>[data-signal=walls]{width:150px;}}

/* Half-dials for the 0–100 readings on Today (Fear & Greed, USD liquidity): the app's own tokens,
   the active band lit, a needle at the score (2026-09-21). */
.today-macro-tile.has-gauge{gap:2px;}
.today-gauge-wrap{display:grid;justify-items:center;gap:0;}
.today-gauge{width:100%;max-width:210px;height:auto;display:block;}
.today-gauge-band{fill:color-mix(in srgb,var(--border) 70%,transparent);stroke:var(--surface);stroke-width:1.5;}
.today-gauge-band.is-up{fill:color-mix(in srgb,var(--green) 16%,transparent);}
.today-gauge-band.is-down{fill:color-mix(in srgb,var(--red) 16%,transparent);}
.today-gauge-band.is-sell{fill:color-mix(in srgb,var(--orange) 16%,transparent);}
.today-gauge-band.is-mid{fill:color-mix(in srgb,var(--yellow) 16%,transparent);}
.today-gauge-band.is-flat{fill:color-mix(in srgb,var(--muted) 14%,transparent);}
.today-gauge-band.is-active{stroke-width:2;}
.today-gauge-band.is-active.is-up{fill:color-mix(in srgb,var(--green) 42%,transparent);stroke:var(--green);}
.today-gauge-band.is-active.is-down{fill:color-mix(in srgb,var(--red) 42%,transparent);stroke:var(--red);}
.today-gauge-band.is-active.is-sell{fill:color-mix(in srgb,var(--orange) 42%,transparent);stroke:var(--orange);}
.today-gauge-band.is-active.is-mid{fill:color-mix(in srgb,var(--yellow) 42%,transparent);stroke:var(--yellow);}
.today-gauge-band.is-active.is-flat{fill:color-mix(in srgb,var(--muted) 36%,transparent);stroke:var(--muted);}
.today-gauge-tick{fill:var(--muted);}
.today-gauge-scale{fill:var(--muted);font-size:9px;font-family:inherit;}
.today-gauge-needle{stroke:var(--text);stroke-width:3;stroke-linecap:round;}
.today-gauge-hub{fill:var(--text);}
.today-gauge-value{fill:var(--text);font-size:22px;font-weight:700;font-variant-numeric:tabular-nums;font-family:inherit;}
.today-gauge-word{font-size:13px;font-weight:600;margin-top:-2px;}
.today-macro-tile.is-up .today-gauge-word{color:var(--green);}.today-macro-tile.is-down .today-gauge-word{color:var(--red);}.today-macro-tile.is-mid .today-gauge-word{color:var(--yellow);}
.today-macro-history{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:4px;font-size:12px;}
.today-macro-history li{display:flex;align-items:center;gap:6px;}
.today-macro-history-label{color:var(--muted);}
.today-macro-history-word{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px dotted var(--border);line-height:1.6;}
.today-macro-history-value{display:inline-grid;place-items:center;min-width:30px;height:24px;padding:0 6px;border-radius:12px;border:1.5px solid var(--border);font-size:12px;font-weight:700;}
.today-macro-history-value.is-up{color:var(--pos);border-color:var(--pos);}
.today-macro-history-value.is-down{color:var(--neg);border-color:var(--neg);}
.today-macro-history-value.is-sell{color:var(--orange);border-color:var(--orange);}
.today-macro-history-value.is-mid{color:var(--yellow);border-color:var(--yellow);}
.watch-compact-table th.watch-view-col.is-left,.watch-compact-table th.watch-view-col.is-right{padding-left:14px;}
.watch-compact-table th.watch-view-col.is-left{box-shadow:inset 3px 0 0 var(--yellow);}.watch-compact-table th.watch-view-col.is-right{box-shadow:inset 3px 0 0 var(--blue);}

.stock-card.is-digest .stock-digest{color:var(--text);}

/* Paired mini-charts on the Today tiles (2026-09-24): bars = the tile's own day-to-day change, line = QQQ's
   return the same day; the caption counts how often they moved opposite ways. Descriptive only. */
.today-macro-chart{display:grid;gap:3px;margin-top:6px;padding-top:6px;border-top:1px solid color-mix(in srgb,var(--border) 70%,transparent);}
.today-spark{width:100%;height:auto;display:block;}
.today-spark-zero{stroke:var(--border);stroke-width:1;}
.today-spark-bar.is-up{fill:color-mix(in srgb,var(--pos) 72%,transparent);}
.today-spark-bar.is-down{fill:color-mix(in srgb,var(--neg) 72%,transparent);}
.today-spark-bar.is-flat{fill:color-mix(in srgb,var(--muted) 50%,transparent);}
.today-spark-line{stroke:var(--text);stroke-width:1.4;stroke-linejoin:round;stroke-linecap:round;}
.today-spark-dot{fill:var(--accent);}
.today-spark-axis{fill:var(--muted);font-size:8px;font-family:inherit;}
.today-macro-legend{font-size:10px;color:var(--muted);letter-spacing:.2px;}
.today-macro-caption{font-size:11px;color:var(--muted);line-height:1.45;}
.today-macro-stamp{font-size:11px;}
.today-macro-recorded,.today-macro-ratio-stamp{font-size:11px;line-height:1.45;overflow-wrap:anywhere;}
@media(min-width:601px) and (max-width:1100px){.today-macro-grid{grid-template-columns:repeat(2,minmax(0,1fr));}}

/* The close-of-day note above the tiles (2026-09-24): one card for every reader. */
.today-digest{margin:0 0 12px;padding:14px 16px 12px;border:1px solid color-mix(in srgb,var(--accent) 28%,var(--border));border-radius:12px;background:color-mix(in srgb,var(--accent) 5%,var(--surface));display:grid;gap:10px;}
.today-digest-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap;}
.today-digest-head .today-section-title{margin:0;}
.today-digest-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px 16px;}
.today-digest-part p,.today-digest-tomorrow p{margin:4px 0 0;font-size:14px;line-height:1.65;}
.today-digest-label{display:inline-block;font-size:11px;font-weight:650;letter-spacing:0;text-transform:none;color:var(--accent-text,var(--accent));}
.today-digest-tomorrow{padding-top:8px;border-top:1px solid color-mix(in srgb,var(--border) 70%,transparent);}
/* A market-close-brief/1 note: its question-driven sections stack in the given order, each headed like the same
   section in the Today dialog (.today-mascot-insight h3). */
.today-digest-brief{display:grid;gap:10px;}
.today-digest-brief .today-digest-label{display:block;color:var(--text);font-size:13px;font-weight:700;line-height:1.35;}
.today-digest-brief>.today-digest-part+.today-digest-part{padding-top:8px;border-top:1px solid color-mix(in srgb,var(--border) 70%,transparent);}
@media(max-width:760px){.page-app .today-digest-brief{gap:7px;}.page-app .today-digest-brief>.today-digest-part+.today-digest-part{padding-top:7px;}}
.today-digest-note{margin:0;}
.today-market-heading{margin:0 0 10px;display:grid;gap:5px;}
.today-market-heading .today-section-title{margin:0;font-size:16px;line-height:1.35;}
.today-market-indices{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 14px;font-size:14px;line-height:1.45;}
.today-market-indices>span{white-space:nowrap;}
.today-market-status{margin:0;line-height:1.45;}
.today-digest-archive{margin:0 0 10px;border-top:1px solid var(--border);}
.today-digest-archive>summary{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:3px 12px;min-height:44px;padding:8px 0;font-size:13px;font-weight:600;cursor:pointer;}
.today-digest-archive>summary::before{content:'▸';color:var(--muted);}
.today-digest-archive[open]>summary::before{content:'▾';}
.today-digest-archive>summary>span:first-child{flex:1;}
.today-digest-archive>summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px;}
.today-digest-context{margin:0 0 8px;line-height:1.45;}
.today-digest-publication{display:flex;flex-wrap:wrap;gap:3px 12px;align-items:baseline;}
.today-digest-publication p{margin:0;line-height:1.4;}
.today-digest-missing{max-width:100%;font-size:12px;}
.today-digest-missing>summary{min-height:44px;display:flex;align-items:center;gap:6px;cursor:pointer;}
.today-digest-missing>summary::before{content:'▸';}
.today-digest-missing[open]>summary::before{content:'▾';}
.today-digest-missing p{max-width:80ch;overflow-wrap:anywhere;}
.today-preview{border-top:1px solid var(--border);padding-top:8px;min-width:0;}
.today-preview-heading{display:flex;align-items:baseline;justify-content:space-between;gap:10px;}
.today-preview-heading h3{font-size:14px;line-height:1.4;margin:0;}
.today-preview-window,.today-preview-coverage{margin:4px 0;line-height:1.45;}
.today-preview-day{font-size:12px;color:var(--muted);margin:10px 0 3px;}
.today-preview-event{padding:7px 0;border-bottom:1px solid var(--border);font-size:13px;line-height:1.5;overflow-wrap:anywhere;}
.today-preview-event-head{display:flex;flex-wrap:wrap;gap:2px 9px;align-items:baseline;}
.today-preview-event-head strong{font-weight:600;}
.today-preview-time{font-size:12px;color:var(--muted);}
.today-preview-tickers{font-size:12px;}
.today-preview-impact{margin:3px 0 0;max-width:80ch;}
.today-preview-basis>summary,.today-preview-more>summary{min-height:44px;display:flex;align-items:center;gap:6px;cursor:pointer;font-size:12px;}
.today-preview-basis>summary::before,.today-preview-more>summary::before{content:'▸';}
.today-preview-basis[open]>summary::before,.today-preview-more[open]>summary::before{content:'▾';}
.today-preview-basis p{margin:0 0 6px;max-width:80ch;}
.today-preview-source,.today-preview-calendar{display:inline-flex;align-items:center;min-height:44px;font-size:12px;margin-right:12px;}
.today-preview-clock{margin:7px 0 0;line-height:1.45;}
.today-macro-refresh{display:flex;align-items:center;gap:8px;margin:5px 0 12px;}
.today-macro-refresh button{min-height:44px;flex-shrink:0;}
.today-macro-refresh p{margin:0;line-height:1.4;}
@media(max-width:760px){.today-digest-publication .small,.today-preview .small{font-size:11px;}.today-preview-event{font-size:13px;padding:5px 0;}.today-preview-heading h3{font-size:13px;}.today-preview-day{margin-top:7px;}.today-preview-window{font-size:11px;}}
.today-macro-read-error{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 12px;}
.today-macro-read-error .btn{min-height:44px;flex:none;}
@media(max-width:760px){.today-market-heading{gap:4px;margin-bottom:8px;}.today-market-heading .today-section-title{font-size:15px;}.today-market-indices{font-size:13px;gap:3px 12px;}.today-market-status{font-size:11px;}.today-digest-archive>summary{font-size:12px;}}
@media(max-width:900px){.today-digest-grid{grid-template-columns:1fr;}}

/* Three normalized lines on the liquidity tile: net liquidity (accent), QQQ (blue), SPY (green). */
.today-lines{width:100%;height:auto;display:block;}
.today-lines-grid{stroke:color-mix(in srgb,var(--border) 80%,transparent);stroke-width:1;}
.today-lines-line{stroke-width:1.5;stroke-linejoin:round;stroke-linecap:round;}
.today-lines-line.is-liquidity{stroke:var(--accent);stroke-width:2;}
.today-lines-line.is-qqq{stroke:#4ea1ff;}
.today-lines-line.is-spy{stroke:var(--green);}
.today-lines-dot.is-liquidity{fill:var(--accent);}
.today-lines-dot.is-qqq{fill:#4ea1ff;}
.today-lines-dot.is-spy{fill:var(--green);}
.today-lines-key{display:inline-flex;align-items:center;gap:4px;margin-right:10px;}
.today-lines-key i{width:10px;height:3px;border-radius:2px;background:var(--muted);display:inline-block;}
.today-lines-key.is-liquidity i{background:var(--accent);}
.today-lines-key.is-qqq i{background:#4ea1ff;}
.today-lines-key.is-spy i{background:var(--green);}

/* Hover on the three-line chart: a guide at the date and the three readings above it. */
.today-macro-chart.has-cursor{position:relative;}
.today-lines{touch-action:pan-y;cursor:crosshair;}
.today-lines-cursor{stroke:var(--text);stroke-width:1;stroke-dasharray:2 2;opacity:.7;}
.today-lines-tip{position:absolute;top:0;left:0;right:0;z-index:2;display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center;padding:5px 8px;border:1px solid var(--border);border-radius:8px;background:color-mix(in srgb,var(--surface) 92%,transparent);font-size:11px;line-height:1.4;pointer-events:none;box-shadow:0 4px 14px rgba(0,0,0,.18);}
.today-lines-tip[hidden]{display:none;}
.today-lines-tip-date{font-weight:700;font-variant-numeric:tabular-nums;}
.today-lines-tip-row{display:inline-flex;align-items:center;gap:4px;color:var(--muted);}
.today-lines-tip-row b,.today-lines-key b{color:var(--text);font-variant-numeric:tabular-nums;font-weight:650;}
.today-lines-tip-row i{width:8px;height:3px;border-radius:2px;background:var(--muted);display:inline-block;}
.today-lines-tip-row.is-liquidity i{background:var(--accent);}
.today-lines-tip-row.is-qqq i{background:#4ea1ff;}
.today-lines-tip-row.is-spy i{background:var(--green);}

/* The 10-year line and its dots; on phones the two chart tiles take the full width and a taller chart,
   and a tap holds the readings (2026-09-24, owner: "在手机上怎么直观地看"). */
.today-lines-line.is-yield{stroke:var(--accent);stroke-width:2;}
.today-lines-dot.is-yield,.today-lines-key.is-yield i,.today-lines-tip-row.is-yield i{fill:var(--accent);background:var(--accent);}
.today-lines-dot{opacity:.9;}
.today-lines-dot.is-last{stroke:var(--surface);stroke-width:1;}
@media(max-width:600px){
  .today-macro-tile:has(.today-lines){grid-column:1 / -1;}
  .today-lines{aspect-ratio:240/110;}
  .today-lines-tip{position:static;margin-bottom:4px;box-shadow:none;background:color-mix(in srgb,var(--accent) 6%,var(--surface));}
  .today-macro-legend{display:flex;flex-wrap:wrap;gap:4px 10px;}
}

/* A hollow marker is a session still trading (the observed panel's live row). */
.today-lines-dot.is-live{fill:var(--surface);stroke-width:1.6;}
.today-lines-dot.is-live.is-liquidity,.today-lines-dot.is-live.is-yield{stroke:var(--accent);}
.today-lines-dot.is-live.is-qqq{stroke:#4ea1ff;}
.today-lines-dot.is-live.is-spy{stroke:var(--green);}

/* K-line entry points (2026-09-24): the price in a watchlist row opens the chart; the stock page
   links the chart beside its price history; Today's macro tiles link the macro page. */
.watch-compact-table .watch-price-link{color:inherit;text-decoration:none;border-bottom:1px dotted color-mix(in srgb,var(--accent) 45%,transparent);display:inline-block;padding:2px 0;}
.watch-compact-table .watch-price-link:hover,.watch-compact-table .watch-price-link:focus-visible{color:var(--accent-text,var(--accent));border-bottom-style:solid;}
.focus-chart-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap;}
.focus-chart-head h2{margin:0;}
.focus-chart-head .stock-open{font-size:13px;}
.today-macro-more{display:inline-block;margin-top:10px;font-size:13px;color:var(--accent-text,var(--accent));text-decoration:none;}
.today-macro-more:hover{text-decoration:underline;}
.chart-back{display:inline-block;margin-bottom:6px;}

/* Current-session reading, above dated macro charts and the closing archive. */
.today-session{margin:0 0 12px;padding:12px 14px;border:1px solid var(--border);border-radius:10px;background:var(--surface);}
.today-session-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px;}
.today-session-head .today-section-title{margin:0;font-size:17px;line-height:1.35;}
.today-session-phase{font-size:11px;padding:2px 6px;border-radius:4px;background:var(--surface-2,var(--bg));color:var(--muted);}
.today-session-head>span:last-child{margin-left:auto;}
.today-session-indices,.today-session-all{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px 18px;}
.today-session-quote{min-width:0;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:'name change' 'symbol clock' 'saved saved';gap:3px 6px;padding:8px 0;}
.today-session-name{grid-area:name;font-size:12px;line-height:1.3;}
.today-session-symbol{grid-area:symbol;color:var(--muted);font-size:11px;}
.today-session-quote>strong{grid-area:change;font-size:18px;line-height:1.2;}
.today-session-clock{grid-area:clock;font-size:10px;color:var(--muted);text-align:right;}
.today-session-saved{grid-area:saved;color:var(--muted);font-size:10px;}
.today-session-summary{font-size:13px;line-height:1.55;margin:8px 0;max-width:100ch;}
.today-session-meta{margin:4px 0 0;line-height:1.4;}
.today-session-details{border-top:1px solid var(--border);margin-top:8px;}
.today-session-details>summary{min-height:44px;display:flex;align-items:center;cursor:pointer;font-size:12px;gap:6px;}
.today-session-details>summary::before{content:'▸';color:var(--muted);}
.today-session-details[open]>summary::before{content:'▾';}
.today-session-details>summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
.today-session-details>p{line-height:1.5;}
.today-session-all .today-session-quote{border-bottom:1px solid var(--border);}
@media(max-width:700px){.today-session{padding:10px 12px;}.today-session-indices,.today-session-all{grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 14px;}.today-session-quote{grid-template-areas:'name name' 'symbol change' 'clock clock' 'saved saved';align-items:baseline;}.today-session-quote>strong{font-size:16px;}.today-session-clock{font-size:10px;text-align:left;}.today-session-summary{font-size:12px;}.today-session-head .today-section-title{font-size:16px;}}

/* One current-market dashboard. Archived/legacy displays keep their existing layout. */
.focus-today>.today-heading{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:4px 12px;padding:0 0 8px;margin:0 0 12px;}
.today-heading>.today-heading-main{display:flex;align-items:baseline;flex-wrap:wrap;gap:2px 12px;min-width:0;grid-column:1;grid-row:1;}
.today-heading-main h1{order:0;margin:0;font-size:27px;line-height:1.35;}
.today-heading-main .today-date{order:1;font-size:13px;}
.focus-today>.today-heading>.btn{min-height:44px;display:flex;align-items:center;font-size:13px;grid-column:2;grid-row:1;}
.today-macro.has-current-dashboard{padding:18px 20px 6px;border:1px solid var(--border);border-radius:12px;background:var(--surface);}
.has-current-dashboard>.today-session{padding:0;border:0;border-radius:0;background:none;margin:0;}
.has-current-dashboard .today-session-head{margin-bottom:8px;}
.has-current-dashboard .today-session-head .today-section-title{font-size:20px;}
.has-current-dashboard .today-session-indices{gap:8px 24px;}
.has-current-dashboard .today-session-indices .today-session-quote{grid-template-areas:'name name' 'symbol change' 'clock clock' 'saved saved';align-items:baseline;}
.has-current-dashboard .today-session-indices .today-session-name{font-size:13px;}
.has-current-dashboard .today-session-indices .today-session-quote>strong{font-size:24px;}
.has-current-dashboard .today-session-indices .today-session-clock{text-align:left;font-size:11px;}
.has-current-dashboard .today-session-meta{font-size:12px;line-height:1.45;color:var(--muted);}
.today-dashboard-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;margin:14px 0 18px;border-top:1px solid var(--border);border-bottom:1px solid var(--border);}
.today-dashboard-metric{min-width:0;padding:14px 16px;display:flex;flex-direction:column;align-items:flex-start;gap:5px;border-right:1px solid var(--border);}
.today-dashboard-metric:first-child{padding-left:0;}.today-dashboard-metric:last-child{padding-right:0;border-right:0;}
.today-dashboard-metric .today-macro-label{font-size:13px;font-weight:600;line-height:1.4;color:var(--text);}
.today-dashboard-metric .today-macro-value{font-size:28px;line-height:1.15;font-weight:650;color:var(--text);}
.today-dashboard-metric.is-up .today-macro-value{color:var(--pos);}.today-dashboard-metric.is-down .today-macro-value{color:var(--neg);}.today-dashboard-metric.is-mid .today-macro-value{color:var(--yellow);}
.today-dashboard-metric .today-macro-unit{font-size:13px;}
.today-dashboard-metric-note,.today-dashboard-metric-date{font-size:12px;line-height:1.4;overflow-wrap:anywhere;}
.today-dashboard-metric-date{color:var(--muted);margin-top:auto;padding-top:1px;}
.today-dashboard-charts-head{display:flex;justify-content:space-between;align-items:center;gap:10px;}
.today-dashboard-charts-head h2{font-size:17px;line-height:1.35;margin:0;}
.today-dashboard-charts-head .today-macro-more{margin:0;min-height:44px;display:flex;align-items:center;font-size:12px;}
.today-dashboard-scale{font-size:12px;line-height:1.5;color:var(--muted);margin:0 0 10px;}
.today-dashboard-charts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;}
.today-dashboard-chart{min-width:0;}
.today-dashboard-chart h3{font-size:15px;line-height:1.4;margin:0 0 5px;}
.today-dashboard-chart .today-macro-chart{border-top:0;padding-top:0;margin-top:0;gap:7px;}
.today-dashboard-chart .today-chart-date{font-size:12px;line-height:1.45;}
.today-dashboard-chart .today-lines{aspect-ratio:240/104;max-height:240px;}
.today-dashboard-chart .today-macro-legend{display:flex;flex-wrap:wrap;gap:5px 14px;font-size:12px;line-height:1.5;letter-spacing:0;}
.today-dashboard-chart .today-lines-key{margin:0;flex-wrap:wrap;}
.today-dashboard-chart .today-lines-tip{font-size:12px;}
.today-dashboard-chart-missing{font-size:13px;line-height:1.55;color:var(--muted);padding:22px 0;margin:0;}
.today-chart-method>summary{display:flex;align-items:center;min-height:44px;gap:6px;font-size:12px;color:var(--muted);cursor:pointer;}
.today-chart-method>summary::before{content:'▸';}.today-chart-method[open]>summary::before{content:'▾';}
.today-chart-method .today-macro-caption{display:block;font-size:12px;line-height:1.55;padding-bottom:8px;}
.today-chart-method>summary:focus-visible,.today-preview-sources>summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
.has-current-dashboard .today-session-details{margin-top:8px;}
.has-current-dashboard .today-session-details>summary{font-size:13px;}
.has-current-dashboard .today-session-summary{font-size:13px;line-height:1.6;max-width:80ch;}
.today-session-source-clocks{padding-left:18px;font-size:12px;line-height:1.6;color:var(--muted);}
.today-dashboard-source-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 24px;margin-top:14px;}
.today-dashboard-source-metric{min-width:0;border-top:1px solid var(--border);padding-top:8px;}
.today-dashboard-source-metric h3{display:flex;align-items:center;gap:8px;font-size:14px;margin:0;}
.today-dashboard-source-metric p{font-size:12px;line-height:1.5;margin:5px 0;overflow-wrap:anywhere;}
.today-dashboard-source-metric .today-macro-help{width:44px;height:44px;font-size:12px;}
.today-dashboard-source-metric .today-gauge{max-width:180px;}
.today-dashboard-calendar{border-top:1px solid var(--border);padding-top:12px;}
.today-dashboard-calendar h3{font-size:16px;margin:0;}
.has-current-dashboard>.today-preview{margin-top:10px;padding-top:14px;}
.has-current-dashboard>.today-digest-archive{margin:8px 0 0;}
@media(max-width:700px){
 .today-heading-main h1{font-size:24px;}.today-heading-main .today-date{font-size:12px;}
 .focus-today>.today-heading>.btn{font-size:12px;padding:6px 8px;}
 .today-macro.has-current-dashboard{padding:12px 12px 4px;}
 .has-current-dashboard .today-session-head .today-section-title{font-size:19px;}
 .has-current-dashboard .today-session-indices{grid-template-columns:repeat(4,minmax(0,1fr));gap:2px 7px;}
 .has-current-dashboard .today-session-indices .today-session-quote{grid-template-columns:minmax(0,1fr);grid-template-areas:'name' 'change' 'clock' 'saved';gap:4px;align-content:start;padding:4px 0;}
 .has-current-dashboard .today-session-indices .today-session-name{font-size:12px;line-height:1.35;color:var(--text);min-height:2.7em;}
 .has-current-dashboard .today-session-indices .today-session-symbol{display:none;}
 .has-current-dashboard .today-session-indices .today-session-quote>strong{font-size:clamp(17px,5vw,20px);letter-spacing:-.035em;}
 .has-current-dashboard .today-session-indices .today-session-clock{font-size:10px;line-height:1.4;overflow-wrap:anywhere;}
 .today-dashboard-metrics{grid-template-columns:repeat(2,minmax(0,1fr));margin:12px 0;}
 .today-dashboard-metric{padding:8px 10px;gap:4px;}
 .today-dashboard-metric:nth-child(odd){padding-left:0;}.today-dashboard-metric:nth-child(even){border-right:0;padding-right:0;}
 .today-dashboard-metric:nth-child(n+3){border-top:1px solid var(--border);}
 .today-dashboard-metric .today-macro-value{font-size:26px;}
 .today-dashboard-charts{grid-template-columns:1fr;gap:14px;}
 .today-dashboard-chart+.today-dashboard-chart{border-top:1px solid var(--border);padding-top:14px;}
 .today-dashboard-chart .today-lines{max-height:none;}
 .today-dashboard-chart .today-macro-legend{gap:4px 12px;}
 .today-dashboard-source-metrics{grid-template-columns:1fr;gap:12px;}
}

/* Compact preview: each complete event row is its own disclosure target. */
.today-preview-basis>summary{display:block;min-height:44px;padding:4px 20px 4px 0;position:relative;list-style:none;}
.today-preview-basis>summary::-webkit-details-marker{display:none;}
.today-preview-basis>summary::before{position:absolute;right:2px;top:5px;}
.today-preview-basis>summary .today-preview-event-head{font-size:13px;min-height:20px;}
.today-preview-basis>summary .today-preview-impact{display:block;font-size:13px;line-height:1.45;margin:3px 0 0;}
.today-preview-basis[open]>summary{margin-bottom:6px;}
.today-preview-sources>summary{display:inline-flex;align-items:center;min-height:44px;cursor:pointer;font-size:12px;gap:6px;}
.today-preview-sources>summary::before{content:'▸';}.today-preview-sources[open]>summary::before{content:'▾';}
.today-preview-sources p{margin:3px 0;font-size:12px;line-height:1.45;}
.today-preview-heading h3{font-size:16px;}

/* Plan T-01: a pre-market or after-hours print sits on its own muted line under the official close. */
.price-extended,.today-session-extended{display:block;color:var(--muted);font-size:11px;line-height:1.4;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.price-extended.is-up{color:var(--pos,var(--muted))}.price-extended.is-down{color:var(--neg,var(--muted))}
.today-session-extended{grid-column:1/-1;font-size:10px}
.stock-price>.price-extended{flex-basis:100%}
.evidence-price>.price-extended{font-size:11px}
/* The share of one holding a sale sold (owner 2026-10-26: "持股的 percentage 加粗…更高亮…做 smart 一点"; record-format.js
   heldShareNode). The figure is always bold. A routine trim keeps the text colour, a fifth or more of the holding takes the sell
   colour, half or more sits on a tinted pill and the whole holding on a stronger one; the bar before it shows the share at a
   glance. --neg follows the red-up preference with every other sell. */
.held-share{display:inline-flex;align-items:center;flex-wrap:wrap;column-gap:5px}
.held-pct{font-weight:700;color:var(--text);font-variant-numeric:tabular-nums lining-nums}
.held-pct[data-held-tier="notable"]{color:var(--neg)}
.held-pct:is([data-held-tier="major"],[data-held-tier="all"]){color:var(--neg);padding:0 6px;border-radius:999px;background:color-mix(in srgb,var(--neg) 16%,transparent)}
.held-pct[data-held-tier="all"]{background:color-mix(in srgb,var(--neg) 28%,transparent)}
.held-meter{position:relative;flex:none;width:28px;height:4px;border-radius:2px;overflow:hidden;background:color-mix(in srgb,var(--muted) 30%,transparent)}
.held-meter::after{content:"";position:absolute;inset:0 auto 0 0;width:var(--held,0%);background:var(--muted)}
.held-share:not([data-held-tier="minor"]) .held-meter::after{background:var(--neg)}
/* A purchase's share of the holding (holdings_bought, 2026-10-27) reads in the buy colour. */
.held-share.is-buy .held-pct:not([data-held-tier="minor"]){color:var(--pos)}
.held-share.is-buy .held-pct:is([data-held-tier="major"],[data-held-tier="all"]){background:color-mix(in srgb,var(--pos) 16%,transparent)}
.held-share.is-buy:not([data-held-tier="minor"]) .held-meter::after{background:var(--pos)}

/* onboarding.css */
.tour-card{position:fixed;z-index:10012;right:18px;bottom:18px;width:min(360px,calc(100vw - 24px));padding:16px;border:1px solid var(--border,#607065);border-radius:18px;background:var(--bg,#fff);color:var(--text,#14251a);box-shadow:0 12px 48px #0004;max-height:calc(100dvh - 32px);overflow:auto;overscroll-behavior:contain;box-sizing:border-box}
.tour-card[hidden],.tour-ring[hidden],.tour-help[hidden]{display:none}
.tour-card{animation:tour-appear .18s ease-out}
@keyframes tour-appear{from{opacity:0}to{opacity:1}}
.tour-heading{display:flex;align-items:center;gap:8px}.tour-heading strong{flex:1}.tour-heading .btn{padding:6px 10px}
.tour-card h2{font-size:18px;line-height:1.35;margin:10px 0}.tour-card p{font-size:14px;line-height:1.5;margin:8px 0}
.tour-card .btn{min-height:44px;white-space:normal;margin:3px 3px 3px 0}.tour-actions{display:flex;flex-wrap:wrap}.tour-card .tour-expiry,.tour-card .tour-chapter{font-size:12px;opacity:.8}.tour-notice{border-left:3px solid #66be7c;padding-left:8px}
.tour-ring{position:fixed;z-index:10011;border:3px solid #38a76a;border-radius:10px;pointer-events:none;box-shadow:0 0 0 9999px #00170e55;box-sizing:border-box;transition:top .18s,left .18s,width .18s,height .18s}
.tour-help{position:fixed;bottom:calc(76px + env(safe-area-inset-bottom));right:12px;z-index:40;min-height:44px;padding:8px 12px;border-radius:24px;border:1px solid var(--border,#9aa);background:var(--bg,#fff);color:var(--text,#14251a);font:inherit;font-size:13px}.tour-visible .tour-help{visibility:hidden}
.trial-banner{padding:8px 14px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;border-bottom:1px solid var(--border,#9aa);font-size:13px}.trial-banner[hidden]{display:none}
@media(max-width:699px){.tour-card{right:12px;bottom:calc(76px + env(safe-area-inset-bottom));padding:12px}.tour-card p{font-size:13px}.tour-ring{border-radius:16px}.tour-ring:after{content:'';position:absolute;right:-8px;top:-8px;width:18px;height:18px;border-radius:50%;background:#69cd91;animation:tour-tap 1.4s ease-out 2}}
@keyframes tour-tap{0%{box-shadow:0 0 0 0 #69cd9166}100%{box-shadow:0 0 0 14px #69cd9100}}
@media(prefers-reduced-motion:reduce){.tour-card,.tour-ring:after{animation:none}.tour-ring{transition:none}}
@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .tour-card,:root:not([data-theme=light]) .tour-help{background:#16231d;color:#edf6ef}}
[data-theme=dark] .tour-card,[data-theme=dark] .tour-help{background:#16231d;color:#edf6ef}

/* app-ux-radar.css */
/* Shared disclosure rows: readable source facts without reclassifying returns or holdings. */
.radar-activity-workspace .radar-heading{margin:4px 0 16px;gap:16px}
.radar-activity-workspace .radar-heading h1{font-size:1.7rem;margin-bottom:5px}
.radar-activity-workspace .radar-heading p{font-size:.875rem;max-width:64ch}
.radar-activity-workspace .radar-layout{display:block}
.page-app .radar-activity-workspace .radar-sidebar{display:block;position:static;margin-bottom:10px}
.radar-activity-workspace .radar-sidebar>h2{display:none}
.radar-activity-workspace .radar-categories{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;padding:0;overflow:visible}
.radar-activity-workspace .radar-category{min-width:0;min-height:44px;padding:8px 13px;gap:10px;border-color:var(--border);white-space:normal}
.radar-activity-workspace .radar-categories .radar-category{min-height:88px;align-items:center;text-align:left;background:var(--surface);color:var(--text);border-bottom:3px solid var(--border)}
.radar-activity-workspace .radar-categories [aria-pressed=true]{background:var(--surface-2);border-bottom-color:var(--accent)}
.radar-activity-workspace .radar-categories [aria-pressed=true] strong{color:var(--accent-text,var(--accent))}
.radar-category-copy .radar-category-short{display:none}
.radar-category-copy{display:flex;flex-direction:column;gap:5px;min-width:0}
.radar-category-copy>strong{font-size:17px;line-height:1.35}
.radar-category-copy>span{font-size:13px;line-height:1.4;color:var(--muted);font-weight:400}
.radar-activity-workspace .radar-category:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.radar-scope-bar{display:flex;align-items:start;justify-content:space-between;gap:12px;border-bottom:1px solid var(--border);margin-bottom:10px}
.radar-activity-workspace .radar-scope-bar .radar-tabs{border-bottom:0;margin:0}
.radar-other-categories{display:flex;gap:6px;flex-wrap:wrap}
.radar-activity-workspace .radar-other-categories .radar-category{font-size:12px;padding:6px 8px;background:transparent;border:0}
.radar-other-categories .app-icon{display:none}
.radar-activity-workspace .radar-category>.app-icon{width:16px;height:16px}
.radar-activity-workspace .radar-tabs{gap:20px;margin:0 0 12px}
.radar-activity-workspace .radar-tabs button{min-height:44px;padding:7px 0;font-size:.8125rem}
.radar-activity-workspace .radar-guide{margin:0 0 12px;padding:0 0 0 12px}
.radar-activity-workspace .radar-guide>summary{font-size:.8125rem;min-height:44px;align-content:center;cursor:pointer;color:var(--muted)}
.radar-activity-workspace .radar-guide>p{font-size:.8125rem;margin:0 0 12px}
.radar-activity-workspace .radar-guide .radar-purchase-rule{margin:10px 0}
.radar-activity-workspace .radar-filters{grid-template-columns:minmax(140px,2fr) minmax(90px,1fr) auto auto;padding:10px;gap:8px;margin-bottom:12px}
.radar-activity-workspace .radar-filters>.radar-field>span{display:none}
.radar-activity-workspace .radar-filters>.radar-field{grid-column:auto}
.radar-activity-workspace .radar-filter-toggle{display:block;background:none;color:var(--text);border:1px solid var(--border);border-radius:7px;min-height:44px;font:inherit;font-size:.8125rem;padding:8px 10px;cursor:pointer;order:0}
.radar-activity-workspace .radar-field .input{font-size:16px;height:44px;padding:8px 10px}
.radar-activity-workspace .radar-extra{display:none}
.radar-activity-workspace .radar-filters.filters-expanded .radar-extra{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-column:1/-1;gap:10px;order:3;padding-top:10px;border-top:1px solid var(--border)}
.radar-activity-workspace .radar-extra .radar-field:first-child{grid-column:auto}
.radar-activity-workspace .radar-dates{grid-column:span 2}
.radar-activity-workspace .radar-filter-actions,.radar-activity-workspace .radar-extra:has(.radar-dates:not([hidden]))+.radar-filter-actions{grid-column:auto;grid-row:auto;order:0;gap:6px}
.radar-activity-workspace .radar-filter-actions .btn{font-size:.8125rem;padding:8px 12px;min-height:44px}
.radar-activity-workspace .radar-result-summary{font-size:.8125rem}
.radar-activity-workspace .radar-active-rule{font-size:.75rem;line-height:1.6;margin:4px 0 12px}
.radar-activity-workspace .radar-day{font-size:.75rem;margin:20px 0 8px}
.radar-activity-workspace .radar-day:first-child{margin-top:12px}
.radar-activity-workspace .radar-activity-record{border-radius:8px;margin-bottom:8px}
.radar-activity-workspace .radar-activity-toggle{padding:14px 16px 8px;gap:9px;text-decoration:none}
.radar-activity-workspace .radar-record-meta{gap:7px 10px}
.radar-activity-workspace .radar-ticker{font-size:1rem}
.radar-activity-workspace .radar-kind{padding:2px 6px;font-size:.7rem}
.radar-action{margin-left:auto;font-size:.75rem;color:var(--muted);font-weight:700}
.radar-action.is-purchase{color:var(--green,#35b578)}
.radar-action.is-sale{color:var(--red,#e17777)}
.radar-activity-content{display:grid;grid-template-columns:minmax(0,1fr) minmax(130px,auto);gap:18px;align-items:start}
.radar-activity-main{display:grid;gap:3px;min-width:0}
.radar-actor{font-size:.875rem;line-height:1.45;overflow-wrap:anywhere}
.radar-activity-main>.small{font-size:.75rem}
.radar-activity-workspace .radar-record-title{font-size:.8125rem;line-height:1.6;color:var(--muted)}
.radar-reported-value{display:grid;grid-template-columns:auto auto;gap:1px 8px;align-items:baseline;justify-items:end;text-align:right;min-width:0;font-variant-numeric:tabular-nums}
.radar-reported-value>.small{font-size:.7rem}
.radar-reported-value>.radar-action{grid-column:1;margin:0}
.radar-reported-value>strong{grid-column:2;font-size:1.25rem;line-height:1.2;letter-spacing:-.02em;overflow-wrap:anywhere}
.radar-reported-value>.small{grid-column:1/-1}
.radar-activity-dates{display:flex;flex-wrap:wrap;gap:4px 18px;font-size:.7rem;line-height:1.6;font-variant-numeric:tabular-nums}
.radar-date-review{color:var(--orange,var(--accent))}
.radar-activity-workspace .radar-record-footer{font-size:.75rem}
.radar-activity-links{display:flex;gap:18px;flex-wrap:wrap;border-top:1px solid var(--border);padding:0 16px}
.radar-activity-links>a{display:inline-flex;align-items:center;min-height:44px;font-size:.75rem;text-decoration:none;color:var(--muted)}
.radar-activity-links>a:hover{color:var(--accent)}

/* Capital records scan like a disclosure ledger: stock first, disclosed size aligned right. */
.radar-capital-record{background:var(--surface)}
.radar-capital-record:hover{border-color:var(--control-border,var(--border))}
.radar-capital-record .radar-ticker{font-weight:800;letter-spacing:.025em}
.radar-capital-record .radar-activity-main{padding-right:8px}
.radar-capital-record .radar-record-title{max-width:90ch}

/* Dedicated Insider / Funds pages use one dense disclosure ledger. The row is
   still one large link to the existing full record; detail fields are not
   duplicated or recalculated in the list. */
.radar-capital-ledger-head,.radar-capital-ledger-cells{display:grid;grid-template-columns:112px minmax(132px,.8fr) minmax(180px,1.25fr) minmax(126px,.8fr) minmax(126px,.8fr) 104px 24px;gap:12px;align-items:center}
.radar-capital-ledger-head{min-height:38px;padding:0 12px;border-block:1px solid var(--border);color:var(--muted);background:var(--surface-2);font-size:10px;font-weight:750}
.radar-capital-ledger-head>span:nth-last-child(-n+3){text-align:right}
.radar-capital-ledger-row{margin:0;border-bottom:1px solid var(--border);background:var(--surface)}
.radar-capital-ledger-row:hover{background:color-mix(in srgb,var(--surface-2) 48%,var(--surface))}
.radar-capital-ledger-cells{min-height:58px;padding:8px 12px;color:var(--text);font-size:12px;font-variant-numeric:tabular-nums lining-nums}
/* The arrow opens the filing and its target covers the row (app-insider.css lifts the ticker and the filer above it). */
.radar-capital-ledger-link{color:var(--muted);text-decoration:none}
.radar-capital-ledger-link::after{content:"";position:absolute;inset:0}
.radar-capital-ledger-link:focus-visible{outline:none}
.radar-capital-ledger-link:focus-visible::after{outline:3px solid var(--focus-ring,var(--accent));outline-offset:-3px}
.radar-ledger-security,.radar-ledger-actor{min-width:0;display:grid;gap:2px}
.radar-ledger-security strong,.radar-ledger-actor strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.radar-ledger-security small,.radar-ledger-actor small{overflow:hidden;color:var(--muted);font-size:10px;text-overflow:ellipsis;white-space:nowrap}
.radar-ledger-action{font-size:11px;font-weight:700}
.radar-ledger-action .insider-chip{margin-left:6px;font-weight:500;white-space:nowrap}
.radar-ledger-value,.radar-ledger-published{text-align:right;white-space:nowrap}
.radar-ledger-value{font-size:13px}
.radar-ledger-held,.radar-ledger-worth{display:block;margin-top:2px;font-size:11px;font-weight:400;color:var(--muted);white-space:normal}
.radar-ledger-held{font-size:12px;margin-top:3px}
.radar-ledger-event,.radar-ledger-published{color:var(--muted);font-size:11px}
.radar-capital-ledger-cells .is-positive{color:var(--green,#287558)}
.radar-capital-ledger-cells .is-negative{color:var(--red,#a34139)}
.radar-capital-ledger-cells .is-neutral{color:var(--muted)}
.radar-ledger-open{color:var(--muted);font-size:22px;text-align:right}

/* Company material is not a transaction. It becomes a dated timeline instead of another money card. */
.radar-records[data-activity-view=timeline]{position:relative;padding-left:22px}
.radar-records[data-activity-view=timeline]::before,.radar-activity-section[data-activity-section=company]::before{content:'';position:absolute;left:6px;top:46px;bottom:8px;width:1px;background:var(--border)}
.radar-company-event{position:relative;margin:0;border:0;border-bottom:1px solid var(--border);border-radius:0;background:transparent;overflow:visible}
.radar-company-event::before{content:'';position:absolute;z-index:1;left:-20px;top:24px;width:9px;height:9px;border:2px solid var(--surface);border-radius:50%;background:var(--accent)}
.radar-company-news::before{background:var(--yellow,var(--accent))}
.radar-company-event .radar-activity-toggle{padding:15px 10px 14px;gap:7px}
.radar-company-event .radar-activity-toggle:hover{background:color-mix(in srgb,var(--surface) 55%,transparent)}
.radar-company-event .radar-activity-content{grid-template-columns:minmax(0,1fr) 150px;align-items:center}
.radar-event-stamp{display:grid;justify-items:end;gap:3px;text-align:right;font-variant-numeric:tabular-nums}
.radar-event-type{color:var(--accent-text,var(--accent));font-size:.75rem;font-weight:750}
.radar-event-stamp>strong{font-size:.8125rem;font-weight:650}
.radar-company-event .radar-record-footer{margin-top:1px}

/* The mixed view keeps the two mental models separate without changing chronology inside either one. */
.radar-records[data-activity-view=mixed]{display:grid;gap:28px}
.radar-activity-section{position:relative;min-width:0}
.radar-activity-section-head{display:flex;align-items:end;justify-content:space-between;gap:24px;margin-bottom:8px;padding-bottom:10px;border-bottom:1px solid var(--border)}
.radar-activity-section-head h2{margin:0 0 3px;font-size:1.05rem;line-height:1.3}
.radar-activity-section-head p{max-width:72ch;margin:0;color:var(--muted);font-size:.75rem;line-height:1.5}
.radar-activity-section-head>span{flex:none;color:var(--muted);font-size:.75rem;font-variant-numeric:tabular-nums}
.radar-activity-section[data-activity-section=company]{padding-left:22px}
.radar-activity-section[data-activity-section=company]::before{top:62px}
@media(max-width:720px){
 .radar-activity-workspace .radar-heading{margin-top:0;margin-bottom:10px;gap:10px}
 .radar-activity-workspace .radar-heading h1{font-size:1.45rem}
 .radar-activity-workspace .radar-heading p{font-size:.8125rem;line-height:1.55}
 .radar-activity-workspace .radar-heading>.btn{min-height:44px;padding:7px;white-space:nowrap;font-size:.75rem}
 .page-app .radar-activity-workspace .radar-sidebar{margin-bottom:2px}
 .radar-activity-workspace .radar-categories{grid-template-columns:repeat(4,minmax(0,1fr));gap:4px;padding:0}
 .radar-activity-workspace .radar-categories .radar-category{min-height:44px;padding:6px 3px;justify-content:center;text-align:center;border-radius:6px}
 .radar-category-copy{gap:3px}
 .radar-category-copy>strong{font-size:12px}
 .radar-category-copy .radar-category-full,.radar-category-copy>span{display:none}
 .radar-category-copy .radar-category-short{display:block}
 .radar-scope-bar{gap:4px;flex-wrap:wrap;margin-bottom:6px}
 .radar-activity-workspace .radar-scope-bar .radar-tabs{gap:12px}
 .radar-activity-workspace .radar-scope-bar .radar-tabs button{font-size:12px}
 .radar-activity-workspace .radar-other-categories .radar-category{font-size:12px;padding-inline:4px}
 .radar-activity-workspace .radar-category{padding:8px 10px;font-size:.75rem}
 .radar-activity-workspace .radar-category>.app-icon{display:none}
 .radar-activity-workspace .radar-tabs{margin-bottom:8px}
 .radar-activity-workspace .radar-filters{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);padding:8px;gap:7px;margin-bottom:9px}
 .radar-activity-workspace .radar-filter-toggle{min-height:44px;text-align:left;font-size:.75rem}
 .radar-activity-workspace .radar-filter-actions{justify-content:stretch}
 .radar-activity-workspace .radar-filter-actions>.btn{flex:1;font-size:.75rem;padding:7px}
 .radar-activity-workspace .radar-filters.filters-expanded .radar-extra{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}
 .radar-activity-workspace .radar-dates{grid-column:1/-1}
 .radar-activity-workspace .radar-active-rule{font-size:.7rem;margin-bottom:8px}
 .radar-capital-ledger-head{display:none}
 .radar-capital-ledger-row{margin:0}
 .radar-capital-ledger-cells{grid-template-columns:68px minmax(86px,.65fr) minmax(0,1fr) 20px;grid-template-rows:auto auto;gap:3px 8px;min-height:58px;padding:8px 2px;font-size:11px}
 .radar-ledger-security{grid-column:1;grid-row:1/3}
 .radar-ledger-security small{font-size:9px;white-space:normal;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}
 /* The trade label wraps (insider labels, 2026-10-24): "卖出 · 未确认为公开市场交易" must not end in an ellipsis. */
 .radar-ledger-action{grid-column:2;grid-row:1;font-size:10px;line-height:1.3;white-space:normal;overflow-wrap:anywhere}
 .radar-ledger-value{grid-column:3;grid-row:1;font-size:12px}
 .radar-ledger-actor{grid-column:2/4;grid-row:2;display:flex;justify-content:space-between;gap:8px;color:var(--muted)}
 .radar-ledger-actor strong,.radar-ledger-actor small{font-size:9px;font-weight:550}
 .radar-ledger-event{grid-column:1;grid-row:3;font-size:9px}
 .radar-ledger-published{grid-column:2/4;grid-row:3;font-size:9px;text-align:right}
 .radar-ledger-open{grid-column:4;grid-row:1/4;align-self:center}
 .radar-activity-workspace .radar-activity-toggle{padding:12px 12px 8px;gap:8px}
 .radar-activity-content{grid-template-columns:minmax(0,1fr) minmax(90px,34%);gap:10px}
 .radar-activity-workspace .radar-kind{font-size:.65rem}
 .radar-action{font-size:.7rem}
 .radar-actor{font-size:.8125rem}
 .radar-activity-workspace .radar-record-title{font-size:.75rem}
 .radar-capital-record .radar-activity-content{grid-template-columns:1fr;gap:7px}
 .radar-capital-record .radar-reported-value{grid-row:1;justify-self:stretch;grid-template-columns:auto 1fr}
 .radar-capital-record .radar-activity-main{grid-row:2}
 .radar-reported-value>strong{font-size:1.05rem}
 .radar-capital-record .radar-reported-value>strong{white-space:nowrap;overflow-wrap:normal}
 .radar-reported-value>.small,.radar-activity-dates{font-size:.7rem}
 .radar-activity-dates{gap:2px 12px}
 .radar-activity-links{padding:0 12px;gap:18px}
 .radar-records[data-activity-view=timeline],.radar-activity-section[data-activity-section=company]{padding-left:16px}
 .radar-records[data-activity-view=timeline]::before,.radar-activity-section[data-activity-section=company]::before{left:4px}
 .radar-company-event::before{left:-15px;top:20px;width:8px;height:8px}
 .radar-company-event .radar-activity-content{grid-template-columns:minmax(0,1fr) minmax(84px,30%);gap:8px}
 .radar-event-type{font-size:.68rem}
 .radar-event-stamp>strong{font-size:.72rem}
 .radar-activity-section-head{align-items:start;gap:8px}
 .radar-activity-section-head p{font-size:.7rem}
}
/* Override the legacy phone-only category picker; all four sources stay reachable. */
.page-app .radar-activity-workspace .radar-sidebar:not(.categories-open) .radar-categories{display:grid}
@media(max-width:720px){
 .radar-activity-workspace .radar-heading{margin-bottom:4px}
 .radar-activity-workspace .radar-heading h1{font-size:18px;line-height:1.25;margin-bottom:4px}
 .radar-activity-workspace .radar-heading p{display:none}
 .radar-activity-workspace .radar-tabs{margin-bottom:4px;gap:16px}
 .page-app .radar-activity-workspace .radar-filters{padding:0;gap:6px;margin-bottom:6px;background:none;border:0}
 .radar-activity-workspace .radar-activity-toggle{padding:8px 10px;gap:4px}
 .radar-activity-workspace .radar-activity-toggle .radar-record-footer{display:none}
 .radar-activity-workspace .radar-activity-toggle .radar-record-meta:after{content:'›';color:var(--accent-text,var(--accent));font-size:16px;line-height:1}
 .radar-activity-workspace .radar-activity-main>.small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
 .radar-activity-workspace .radar-activity-record{margin-bottom:5px;border-radius:6px}
 .radar-activity-workspace .radar-record-title{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
 .radar-activity-workspace .radar-record-title{font-size:12px;line-height:1.45}
 .radar-activity-workspace .radar-actor{font-size:13px}
 .radar-activity-workspace .radar-day{margin:8px 0 4px}
}

/* Insider filings: transaction side and exact size bands are direct controls. */
.insider-quick[hidden],.insider-active-filters[hidden],.insider-directions [hidden],.radar-insider-workspace .radar-field[hidden]{display:none}
.insider-quick{display:grid;gap:6px;margin:0 0 8px;min-width:0}
.insider-directions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;max-width:380px;padding:3px;background:var(--surface);border:1px solid var(--border);border-radius:9px}
.insider-directions:has([data-insider-direction="0"]:not([hidden])){grid-template-columns:repeat(4,minmax(0,1fr))}
.insider-directions button,.insider-caps button,.insider-active-filters button{font:inherit;font-size:13px;color:var(--text);border:1px solid transparent;border-radius:6px;background:none;min-height:44px;padding:7px 12px;cursor:pointer;white-space:nowrap}
.insider-directions button[aria-pressed=true]{background:var(--surface-2);border-color:var(--accent);font-weight:700}
.insider-directions [data-insider-direction="1"]{color:var(--bull)}
.insider-directions [data-insider-direction="-1"]{color:var(--bear)}
.insider-caps{display:flex;gap:4px;max-width:100%;overflow-x:auto;scrollbar-width:thin;padding-bottom:3px}
.insider-caps button{flex:none;border-color:var(--border);font-size:12px;padding-inline:10px}
.insider-caps button[aria-pressed=true]{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--surface));font-weight:700}
.insider-cap-range{font-size:11px;line-height:1.35}
.insider-active-filters{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:6px}
.insider-active-filters:empty{display:none}
.insider-active-filters button{min-height:44px;font-size:12px;white-space:normal;text-align:left;border-color:var(--border);padding:5px 8px}
.radar-insider-workspace .radar-filters{grid-template-columns:minmax(140px,1fr) auto auto}
.radar-insider-workspace .radar-filter-actions [type=submit]{display:none}
.radar-insider-workspace .radar-filter-actions{grid-column:auto;justify-content:end}
.radar-insider-workspace .radar-guide{margin-top:16px}
.insider-card-main{gap:7px!important}
.insider-card-heading{display:flex;align-items:baseline;flex-wrap:wrap;gap:5px 10px}
.insider-issuer{font-size:13px;font-weight:600;flex:1;min-width:100px;overflow-wrap:anywhere}
.insider-card-heading .radar-action{margin-left:0}
.insider-amount{font-size:21px;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.insider-purpose{font-size:11px;color:var(--muted);line-height:1.35}
.insider-source-notes>summary{min-height:44px;display:flex;align-items:center;cursor:pointer}
.insider-person{display:flex;gap:5px 10px;flex-wrap:wrap;font-size:12px;line-height:1.4}
.insider-facts{display:flex;gap:12px;flex-wrap:wrap;align-items:center}
.insider-fact{display:flex;gap:5px;align-items:baseline;font-size:13px;font-variant-numeric:tabular-nums}
.insider-fact>.small{font-size:11px}
.insider-cap{margin-left:auto;font-size:11px;border:1px solid var(--border);border-radius:4px;padding:2px 6px;color:var(--muted)}
.insider-security{font-size:11px;line-height:1.4;overflow-wrap:anywhere}
.insider-record .radar-activity-links{gap:16px}
@media(max-width:720px){
 .radar-insider-workspace .radar-heading p{display:none}
 .radar-insider-workspace .radar-filters{grid-template-columns:minmax(0,1fr) auto auto;padding:0;border:0;background:none;gap:4px}
 .radar-insider-workspace .radar-filter-actions .btn{padding:6px;font-size:12px}
 .radar-insider-workspace .radar-filter-toggle{padding:6px 8px}
 .insider-quick{grid-template-columns:auto minmax(0,1fr);align-items:start;gap:4px 6px;margin-bottom:6px}
 .insider-directions{max-width:none;grid-template-columns:repeat(3,44px);gap:0;padding:0;border:0;border-radius:6px}
 .insider-directions:has([data-insider-direction="0"]:not([hidden])){grid-template-columns:repeat(4,44px)}
 .insider-directions button{padding:6px 3px;font-size:12px}
 .insider-caps{min-width:0;padding-bottom:0}
 .insider-cap-range{grid-column:1/-1}
 .insider-caps button{padding-inline:9px}
 .insider-card-heading{gap:4px 8px}
 .radar-activity-workspace .insider-card-main{padding:8px 10px;gap:4px!important}
 .insider-issuer{order:4;flex-basis:100%;font-size:12px}
 .insider-card-heading .radar-action{margin-left:auto}
 .insider-amount{font-size:16px}
 .insider-facts{gap:6px 12px}
 .insider-fact{font-size:12px}
 .insider-person{font-size:12px}
 .insider-record .radar-activity-links>a{font-size:12px}
}

/* Hide list (UX review §5): 「按问题浏览」 lives in the empty state; 资料范围 is one sentence. */
.radar-browse-empty{margin-top:16px;text-align:left}
.radar-browse-empty h4{margin:0 0 8px;font-size:13px;color:var(--muted)}
.radar-coverage-line{margin:12px 0 0}

/* app-insider.css */
/* The holder page (#/insider/<cik>, views/insider.js) and the links that open it and the fund page (2026-10-26; the fund
   page, the fund library and the stock page's 基金持仓 tab are app-fund.css). Tokens only (tokens.css; design-system/ducky-beta-ui/MASTER.md): paper
   surfaces with hairlines, no shadows, 6/10 px radii, 44 px targets, tabular figures. Sales and purchases, added and reduced
   positions carry their words as well as the site's market colours. */

/* Every grid here has one shrinkable track, so a wide child (the scope switch) scrolls in place instead of widening the page. */
.insider-page{display:grid;grid-template-columns:minmax(0,1fr);gap:20px;max-width:1100px;margin:0 auto;min-width:0}
/* The workspace density rules space every page heading; this one sits on its card instead. */
body.page-app .app-view .route-page .insider-page>.insider-heading.focus-heading{margin:0;align-items:flex-start}
.insider-identity{display:grid;gap:6px;min-width:0}
.insider-back{display:inline-flex;align-items:center;min-height:44px;width:max-content;max-width:100%;text-decoration:none}
.insider-heading h1{margin:0;font-size:clamp(27px,4vw,36px);line-height:1.12;letter-spacing:-.02em;overflow-wrap:anywhere}
/* Person or institution (the served reporter.kind), above the name. */
.insider-kind{display:inline-flex;align-items:center;width:max-content;margin:4px 0 0;padding:1px 10px;border:1px solid var(--border);
 border-radius:999px;color:var(--muted);font-size:12px;font-weight:650;line-height:1.6}
.insider-roles{list-style:none;margin:2px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:4px 20px;font-size:14px;line-height:1.5;color:var(--muted)}
.insider-roles li{min-width:0}
.insider-roles-jump{display:inline-flex;align-items:baseline;gap:8px;min-height:44px;padding:0;border:0;background:none;color:var(--muted);
 font:inherit;text-align:left;cursor:pointer}
.insider-roles-jump>span{overflow-wrap:anywhere}
.insider-roles-jump:hover .ticker-symbol{text-decoration:underline;text-underline-offset:3px}
.insider-roles-jump:focus-visible{outline:3px solid var(--focus-ring);outline-offset:2px;border-radius:2px}
.insider-roles .ticker-symbol{color:var(--text);font-weight:750}
body.page-app .app-view .route-page .insider-heading .insider-identity>p.insider-source.small,.insider-source{display:flex;flex-wrap:wrap;
 align-items:center;gap:0 14px;margin:0;line-height:1.5}
.insider-source a{display:inline-flex;align-items:center;min-height:44px;font-weight:650}

.insider-company{display:grid;grid-template-columns:minmax(0,1fr);gap:20px;min-width:0;padding:var(--db-surface-pad,24px);border:1px solid var(--border);
 border-radius:var(--db-radius-md,10px);background:var(--surface)}
.insider-company-head{display:flex;align-items:center;flex-wrap:wrap;gap:8px 16px;min-width:0}
.insider-company-ticker{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:0 12px;
 border-radius:var(--db-radius-sm,6px);background:var(--surface-2);color:var(--text);text-decoration:none;font-size:18px;font-weight:750}
.insider-company-ticker:hover{background:color-mix(in srgb,var(--accent) 18%,var(--surface-2))}
.insider-company-name{display:grid;gap:2px;flex:1 1 240px;min-width:0}
.insider-company-name strong{font-size:18px;line-height:1.3;overflow-wrap:anywhere}
.insider-company-name>span{font-size:13px;line-height:1.45;color:var(--muted);overflow-wrap:anywhere}
.insider-company-link{display:inline-flex;align-items:center;min-height:44px;font-size:13px;font-weight:650;text-decoration:none}

.insider-company-body{display:grid;grid-template-columns:minmax(260px,.85fr) minmax(0,1.25fr);gap:28px;align-items:start;min-width:0}
.insider-company-body.is-single{grid-template-columns:minmax(0,1fr)}
/* No chart (one filing reported the holdings): the lines share the width instead of making a long column. */
.insider-company-body.is-single .insider-scope-list{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));column-gap:28px}
.insider-company-body.is-single .insider-scope:nth-child(-n+3){border-top:0}
.insider-company-body.is-single .insider-scope{padding-top:10px}
.insider-section-title{display:flex;align-items:center;gap:2px;margin:0 0 6px;font-size:15px;line-height:1.4;font-weight:700}
.insider-help{position:relative;display:inline-grid;place-items:center;width:44px;height:44px;margin:-12px -10px;padding:0;border:0;
 background:none;color:var(--muted);font:inherit;font-size:12px;font-weight:750;cursor:pointer;border-radius:50%}
.insider-help::after{content:"";position:absolute;inset:12px;border:1.5px solid currentColor;border-radius:50%}
.insider-help:hover{color:var(--text)}
.insider-help:focus-visible{outline:3px solid var(--focus-ring);outline-offset:-6px}
.insider-help-body p{margin:0 0 12px;line-height:1.6}

.insider-scope-list{list-style:none;margin:0;padding:0;display:grid}
.insider-scope{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 12px;align-items:baseline;padding:10px 0;border-top:1px solid var(--border)}
.insider-scope:first-child{border-top:0;padding-top:4px}
.insider-scope-name{display:grid;gap:2px;min-width:0;font-size:14px;font-weight:650}
.insider-scope-account{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;color:var(--muted);
 font-size:12px;font-weight:500;line-height:1.45;overflow-wrap:anywhere}
.insider-scope-shares{font-size:16px;font-variant-numeric:tabular-nums lining-nums;text-align:right;white-space:nowrap}
.insider-scope.is-direct .insider-scope-shares{font-size:18px}
.insider-scope-date{grid-column:2;text-align:right;font-size:12px;color:var(--muted);white-space:nowrap}
.insider-scope .insider-flag{grid-column:1/-1}
.insider-flag{display:block;max-width:100%;font-size:12px;line-height:1.45;color:var(--muted)}
.insider-flag::before{content:"· "}

.insider-history{display:grid;grid-template-columns:minmax(0,1fr);gap:8px;margin:0;min-width:0}
.insider-scope-switch{display:flex;width:max-content;max-width:100%;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;
 border:1px solid var(--control-border);border-radius:var(--db-radius-sm,6px)}
.insider-scope-switch::-webkit-scrollbar{display:none}
.insider-scope-switch button{flex:0 0 auto;min-height:44px;padding:0 14px;border:0;border-left:1px solid var(--control-border);
 background:var(--surface);color:var(--muted);font:inherit;font-size:13px;font-weight:650;white-space:nowrap;cursor:pointer}
.insider-scope-switch button:first-child{border-left:0}
.insider-scope-switch button[aria-pressed=true]{background:var(--db-accent-soft);color:var(--text)}
.insider-scope-switch button:focus-visible{outline:3px solid var(--focus-ring);outline-offset:-3px}
.insider-history-plot{display:grid;grid-template-columns:minmax(0,1fr);gap:4px;min-width:0}
.insider-history-canvas{position:relative}
.insider-history-canvas svg{display:block;width:100%;height:auto;overflow:visible}
.insider-history-range{position:absolute;inset:0 auto 0 0;display:flex;flex-direction:column;justify-content:space-between;pointer-events:none;
 font-size:12px;line-height:1;color:var(--muted);font-variant-numeric:tabular-nums lining-nums}
.insider-history-range span{background:color-mix(in srgb,var(--surface) 80%,transparent);padding:1px 4px 1px 0}
.insider-history-axis{display:flex;justify-content:space-between;gap:12px;font-size:12px;color:var(--muted)}
.insider-history-base{stroke:var(--border);stroke-width:1;vector-effect:non-scaling-stroke}
.insider-history-point{fill:var(--surface);stroke:var(--muted);stroke-width:1.5;vector-effect:non-scaling-stroke}
.insider-history-point.is-sell{stroke:var(--red)}
.insider-history-point.is-buy{stroke:var(--green)}
.insider-history figcaption{margin:0}
.insider-history-value{font-size:13px;line-height:1.5;font-variant-numeric:tabular-nums lining-nums}

.insider-trades{min-width:0}
.insider-trade-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--border)}
.insider-trade{display:grid;grid-template-columns:136px minmax(0,1fr) minmax(96px,auto);
 grid-template-areas:"when what amount" "when held links";gap:2px 16px;align-items:baseline;padding:12px 0;
 border-bottom:1px solid var(--border)}
.insider-trade-when{grid-area:when;display:grid;gap:2px;font-size:13px;font-weight:650;font-variant-numeric:tabular-nums lining-nums}
.insider-trade-when small{color:var(--muted);font-size:12px;font-weight:500}
.insider-trade-what{grid-area:what;display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;min-width:0}
.insider-trade-kind{font-size:14px;font-weight:700;overflow-wrap:anywhere}
.insider-trade .is-negative{color:var(--red)}
.insider-trade .is-positive{color:var(--green)}
.insider-trade-shares{flex-basis:100%;font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums lining-nums}
.insider-chip{display:inline-flex;align-items:center;padding:1px 8px;border:1px solid var(--border);border-radius:999px;color:var(--muted);
 font-size:11px;line-height:1.5;white-space:nowrap}
.insider-trade-amount{grid-area:amount;text-align:right;font-size:16px;font-variant-numeric:tabular-nums lining-nums;white-space:nowrap}
.insider-held{grid-area:held;display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;margin-top:6px}
.insider-held-chip{display:inline-flex;align-items:center;min-height:28px;padding:2px 10px;border-radius:999px;border:1px solid var(--border);
 color:var(--text);font-size:13px;font-weight:600;font-variant-numeric:tabular-nums lining-nums}
/* Tiered like the figure inside it (record-format.js heldTier, owner 2026-10-26): a routine trim stays outlined, a fifth or more
   of the holding is tinted, half or more deeper. --neg follows the red-up preference; another form of ownership is dashed. */
.insider-held-chip:not([data-held-tier="minor"]){border-color:transparent;background:color-mix(in srgb,var(--neg) 14%,transparent)}
.insider-held-chip:is([data-held-tier="major"],[data-held-tier="all"]){background:color-mix(in srgb,var(--neg) 26%,transparent)}
.insider-held-chip .held-pct{padding:0;background:none}
.insider-held-chip.is-buy:not([data-held-tier="minor"]){background:color-mix(in srgb,var(--pos) 14%,transparent)}
.insider-held-chip.is-buy:is([data-held-tier="major"],[data-held-tier="all"]){background:color-mix(in srgb,var(--pos) 26%,transparent)}
.insider-held-chip.is-other{border:1px dashed color-mix(in srgb,var(--neg) 45%,var(--border))}
.insider-held .insider-flag::before{content:none}
.insider-trade-links{grid-area:links;display:flex;flex-wrap:wrap;justify-content:flex-end;align-self:end;gap:0 18px}
.insider-trade-links a{display:inline-flex;align-items:center;min-height:44px;font-size:13px;font-weight:650;text-decoration:none}
.insider-more{display:flex;justify-content:center}
.insider-more .btn{min-height:44px;min-width:160px}

.insider-page.is-loading .insider-heading h1{width:100%}
.insider-skeleton{display:block;height:14px;margin:6px 0;border-radius:6px;background:var(--db-skeleton)}
.insider-heading h1 .insider-skeleton{height:30px}
.insider-skeleton-chart{height:150px}
.insider-page.is-loading .insider-trade{display:grid;grid-template-columns:96px minmax(0,1fr) 80px;gap:12px}

/* The links that open the page: a ledger row's filer, an insider card's filer, a feed card's byline, a map card's foot. */
.radar-capital-ledger-row{position:relative}
.radar-ledger-stock,.radar-ledger-person{position:relative;z-index:1;color:var(--text);text-decoration:underline;
 text-decoration-color:var(--db-line-strong);text-underline-offset:3px;padding:6px 0;margin:-6px 0}
.radar-ledger-stock{font-weight:750;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.radar-ledger-person{font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.radar-ledger-stock:hover,.radar-ledger-person:hover{text-decoration-color:currentColor}
.radar-ledger-stock:focus-visible,.radar-ledger-person:focus-visible{outline:3px solid var(--focus-ring);outline-offset:2px;border-radius:2px}
.insider-record>.insider-person{padding:0 20px 12px;margin-top:-4px}
.insider-person-link{font-weight:700;color:var(--text);text-decoration:underline;text-decoration-color:var(--db-line-strong);text-underline-offset:3px}
.insider-person-link:hover{text-decoration-color:currentColor}
a.change-author{color:inherit;text-decoration:underline;text-decoration-color:var(--db-line-strong);text-underline-offset:3px}
.research-card-holder{display:flex;align-items:center;min-height:44px;padding:0 16px;border-top:1px solid var(--border);font-size:12px;
 font-weight:650;text-decoration:none;overflow-wrap:anywhere}
a.radar-holder-link{display:inline-flex;align-items:center;min-height:44px;width:max-content;max-width:100%;color:var(--blue);font-weight:650;
 text-decoration:none}
a.radar-holder-link:hover{text-decoration:underline;text-underline-offset:3px}
.stock-insiders-hint{margin:0 0 10px}
/* One stock's trades: its ticker column says nothing new on a wide screen (phones keep the row's own layout). */
@media(min-width:721px){
 .stock-insiders-panel .radar-capital-ledger-head,.stock-insiders-panel .radar-capital-ledger-cells{
  grid-template-columns:112px minmax(180px,1.3fr) minmax(126px,.9fr) minmax(140px,.9fr) 104px 24px}
 .stock-insiders-panel .radar-capital-ledger-head>span:nth-child(2),.stock-insiders-panel .radar-ledger-security{display:none}
}
.stock-insiders-empty{padding:12px 0}
.stock-insiders-empty p{margin:0 0 6px}
.stock-insiders-more{margin:12px auto 0;display:flex}

@media(max-width:720px){
 .insider-record>.insider-person{padding:0 15px 10px}
 .research-card-holder{padding:0 12px}
}
@media(max-width:600px){
 .insider-page{gap:14px}
 .insider-heading h1{font-size:24px;line-height:1.2}
 .insider-roles{font-size:13px;gap:2px 14px}
 .insider-company{gap:16px;padding:var(--db-surface-pad-compact,16px)}
 .insider-company-head{gap:8px 12px}
 .insider-company-name{flex-basis:160px}
 .insider-company-name strong{font-size:16px}
 .insider-company-body{grid-template-columns:minmax(0,1fr);gap:18px}
 .insider-scope-shares{font-size:15px}
 .insider-scope.is-direct .insider-scope-shares{font-size:16px}
 .insider-trade{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"when amount" "what what" "held held" "links links";gap:4px 12px}
 .insider-trade-links{justify-content:flex-start}
 .insider-company-body.is-single .insider-scope-list{grid-template-columns:minmax(0,1fr)}
 .insider-company-body.is-single .insider-scope:nth-child(-n+3){border-top:1px solid var(--border)}
 .insider-company-body.is-single .insider-scope:first-child{border-top:0}
 .insider-trade-when{display:flex;flex-wrap:wrap;gap:2px 8px;align-items:baseline}
 .insider-trade-amount{font-size:15px}
}

/* app-fund.css */
/* The fund page (#/fund/<cik>, views/fund.js), the fund library (#/funds, views/funds.js) and the stock page's 基金持仓 tab
   (2026-10-26, owner: 「Make 13F look better — pie charts, visualize, versions like tiles (treemap) and layouts」). Tokens only
   (tokens.css; design-system/ducky-beta-ui/MASTER.md): paper surfaces with hairlines, no shadows, 6/10/16 px radii, 44 px
   targets, tabular figures where numbers align. The donut uses the chart series tokens (--db-series-*), the treemap the
   heat-map fills under light text; every direction is also a sign and a word. */

/* ── heading ─────────────────────────────────────────────────────────────────────────────────────────────────────────── */
/* The back link above the identity, both from the left (the shared heading is a space-between row). */
body.page-app .app-view .route-page .insider-page>.fund-heading.focus-heading{display:grid;grid-template-columns:minmax(0,1fr);justify-items:start;gap:8px}
.fund-identity{display:flex;align-items:center;gap:20px;min-width:0}
.fund-identity>.insider-identity{flex:1 1 320px}
.fund-kind-line{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:0}
.fund-kind-line .insider-kind{margin:0}
.fund-stopped{border-color:var(--db-caution);color:var(--db-caution)}
.fund-report{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;margin:0;font-size:15px;line-height:1.5}
.fund-report span:not(.insider-chip){color:var(--muted)}
.fund-report .fund-who{color:var(--text);font-weight:650}

/* ── the four figures and the view switch ───────────────────────────────────────────────────────────────────────────── */
.fund-tiles-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;min-width:0}
.fund-tiles-row.is-three{grid-template-columns:repeat(3,minmax(0,1fr))}
.fund-tiles-row.is-two{grid-template-columns:repeat(2,minmax(0,1fr))}
.fund-tile{display:grid;align-content:start;gap:6px;min-width:0;padding:14px 16px;border:1px solid var(--border);border-radius:var(--db-radius-md,10px);
 background:var(--surface)}
.fund-tile-label{font-size:13px;color:var(--muted);line-height:1.35}
.fund-tile-value{font-size:24px;font-weight:720;line-height:1.2;overflow-wrap:anywhere}
.fund-tile[data-tile=actions] .fund-tile-value{font-size:17px;line-height:1.45}
.fund-tile-note{font-size:12px;line-height:1.45;color:var(--muted);overflow-wrap:anywhere}
.fund-tile-note.is-positive,.fund-tile-value.is-positive{color:var(--green)}
.fund-tile-note.is-negative,.fund-tile-value.is-negative{color:var(--red)}
.fund-views,.fund-sort,.fund-style-pills{display:flex;width:max-content;max-width:100%;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;
 border:1px solid var(--control-border);border-radius:var(--db-radius-sm,6px)}
.fund-views::-webkit-scrollbar,.fund-sort::-webkit-scrollbar,.fund-style-pills::-webkit-scrollbar{display:none}
.fund-views button,.fund-sort button,.fund-style-pills button{flex:0 0 auto;min-height:44px;padding:0 16px;border:0;border-left:1px solid var(--control-border);
 background:var(--surface);color:var(--muted);font:inherit;font-size:14px;font-weight:650;white-space:nowrap;cursor:pointer}
.fund-views button:first-child,.fund-sort button:first-child,.fund-style-pills button:first-child{border-left:0}
.fund-views button[aria-pressed=true],.fund-sort button[aria-pressed=true],.fund-style-pills button[aria-pressed=true]{background:var(--db-accent-soft);color:var(--text)}
.fund-views button:focus-visible,.fund-sort button:focus-visible,.fund-style-pills button:focus-visible{outline:3px solid var(--focus-ring);outline-offset:-3px}
.fund-sort button{font-size:13px;padding:0 12px}
.fund-view{display:grid;grid-template-columns:minmax(0,1fr);gap:20px;min-width:0}
.fund-section-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 16px;min-width:0}
.fund-section-head .insider-section-title{margin:0}
.fund-footnote,.fund-note{margin:0;line-height:1.7}

/* ── 持仓: the donut and its bars ─────────────────────────────────────────────────────────────────────────────────────── */
.fund-donut-card{display:flex;flex-wrap:wrap;align-items:center;gap:28px;min-width:0;padding:var(--db-surface-pad,24px);border:1px solid var(--border);
 border-radius:var(--db-radius-md,10px);background:var(--surface)}
.fund-donut{position:relative;flex:0 0 260px;width:260px;height:260px;margin:0}
.fund-donut-ring{display:block;width:100%;height:100%}
.fund-donut-ring path,.fund-swatch,.fund-legend-bar>span{fill:var(--db-series-other);background:var(--db-series-other)}
.fund-donut-ring [data-slot="1"],.fund-swatch[data-slot="1"],.fund-legend-bar>[data-slot="1"]{fill:var(--db-series-1);background:var(--db-series-1)}
.fund-donut-ring [data-slot="2"],.fund-swatch[data-slot="2"],.fund-legend-bar>[data-slot="2"]{fill:var(--db-series-2);background:var(--db-series-2)}
.fund-donut-ring [data-slot="3"],.fund-swatch[data-slot="3"],.fund-legend-bar>[data-slot="3"]{fill:var(--db-series-3);background:var(--db-series-3)}
.fund-donut-ring [data-slot="4"],.fund-swatch[data-slot="4"],.fund-legend-bar>[data-slot="4"]{fill:var(--db-series-4);background:var(--db-series-4)}
.fund-donut-ring [data-slot="5"],.fund-swatch[data-slot="5"],.fund-legend-bar>[data-slot="5"]{fill:var(--db-series-5);background:var(--db-series-5)}
.fund-donut-ring [data-slot="6"],.fund-swatch[data-slot="6"],.fund-legend-bar>[data-slot="6"]{fill:var(--db-series-6);background:var(--db-series-6)}
.fund-donut-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;margin:0;
 pointer-events:none;text-align:center}
.fund-donut-center span{font-size:13px;color:var(--muted)}
.fund-donut-center strong{font-size:22px;font-weight:720;line-height:1.2}
.fund-legend-wrap{flex:1 1 420px;min-width:0}
.fund-legend-head,.fund-legend-row{display:grid;grid-template-columns:14px 76px minmax(60px,1fr) 64px 150px;gap:4px 12px;align-items:center}
.fund-legend-row[data-slot=other] .fund-legend-rest{grid-column:span 2}
.fund-legend-head{padding:0 0 8px;border-bottom:1px solid var(--border);font-size:12px;font-weight:650;color:var(--muted)}
.fund-legend-head>span:nth-child(4){text-align:right}
.fund-legend{list-style:none;margin:0;padding:0}
.fund-legend-row{min-height:44px}
.fund-swatch{display:block;width:12px;height:12px;border-radius:3px}
.fund-legend-ticker{display:inline-flex;align-items:center;min-height:44px;color:var(--text);font-weight:750;text-decoration:none;overflow:hidden;
 text-overflow:ellipsis;white-space:nowrap}
a.fund-legend-ticker:hover{text-decoration:underline;text-underline-offset:3px}
a.fund-legend-ticker:focus-visible{outline:3px solid var(--focus-ring);outline-offset:2px;border-radius:2px}
.fund-legend-rest{display:grid;gap:0;font-size:14px;color:var(--muted);min-width:0}
.fund-legend-rest small{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fund-legend-bar{display:block;height:8px;border-radius:4px;background:var(--surface-2);overflow:hidden}
.fund-legend-bar>span{display:block;height:8px;border-radius:4px}
.fund-legend-weight{text-align:right;font-size:14px;font-variant-numeric:tabular-nums lining-nums}

/* ── 持仓: the full table (and the stock tab's lines) ─────────────────────────────────────────────────────────────────── */
.fund-holder-head,.fund-holder-line{display:grid;grid-template-columns:minmax(0,2.2fr) minmax(104px,.9fr) minmax(80px,.6fr) minmax(150px,1.3fr) 44px;
 gap:4px 16px;align-items:center}
.fund-positions .fund-position-head,.fund-positions .fund-position{display:grid;
 grid-template-columns:minmax(0,2.2fr) minmax(104px,.85fr) minmax(80px,.6fr) 64px minmax(150px,1.3fr) 44px;gap:4px 16px;align-items:center}
.fund-position-head{min-height:36px;padding:0 0 6px;border-bottom:1px solid var(--border);color:var(--muted);font-size:12px;font-weight:650}
.fund-position-head>span:nth-child(2),.fund-position-head>span:nth-child(3){text-align:right}
.fund-positions .fund-position-head>span:nth-child(4){text-align:right}
.fund-position-list,.fund-holder-list,.fund-holder{list-style:none;margin:0;padding:0}
.fund-position,.fund-holder{border-bottom:1px solid var(--border)}
.fund-position{min-height:56px;padding:6px 0}
.fund-position-stock{display:flex;align-items:center;gap:10px;min-width:0}
.fund-position-ticker{display:inline-flex;align-items:center;justify-content:center;flex:0 0 72px;width:72px;min-height:44px;padding:0 6px;box-sizing:border-box;
 border-radius:var(--db-radius-sm,6px);background:var(--surface-2);color:var(--text);text-decoration:none;font-size:15px;font-weight:750}
/* One width for every ticker, so the company names start in one column. */
.fund-position-ticker .ticker-symbol{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fund-position-ticker:hover{background:color-mix(in srgb,var(--accent) 18%,var(--surface-2))}
.fund-position-ticker.is-unlisted{background:none}
.fund-position-ticker:focus-visible,.fund-position-open:focus-visible,.fund-holder-link:focus-visible{outline:3px solid var(--focus-ring);outline-offset:2px}
.fund-position-name{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;min-width:0}
.fund-position-name strong{font-size:14px;font-weight:650;line-height:1.35;overflow-wrap:anywhere}
.fund-position-shares,.fund-position-value,.fund-position-weight{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums lining-nums}
.fund-position-shares{font-size:13px;color:var(--muted)}
.fund-position-value{font-size:15px}
.fund-position-weight{font-size:14px}
.fund-change{display:flex;align-items:center;justify-self:start;max-width:100%;min-height:28px;padding:2px 10px;border-radius:14px;font-size:13px;
 font-weight:650;line-height:1.35;font-variant-numeric:tabular-nums lining-nums;overflow-wrap:anywhere;box-sizing:border-box}
.fund-change:empty{display:none}
.fund-change.is-positive{background:var(--db-positive-soft);color:var(--text)}
.fund-change.is-negative{background:var(--db-negative-soft);color:var(--text)}
.fund-change.is-neutral{border:1px solid var(--border);color:var(--muted)}
.fund-position-open{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;color:var(--muted);font-size:20px;text-decoration:none}
.fund-position-open:hover{color:var(--text)}
.fund-position.is-sold-out .fund-position-name strong,.fund-holder-line.is-sold-out .fund-holder-link{color:var(--muted)}
.fund-omitted{margin:0}
.fund-sold{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;font-size:13px;color:var(--muted)}
.fund-sold-title{font-weight:650}
.fund-sold-chip{display:inline-flex;align-items:center;min-height:32px;padding:2px 10px;border-radius:999px;background:var(--db-negative-soft);color:var(--text);
 font-size:13px;font-weight:600;text-decoration:none;font-variant-numeric:tabular-nums lining-nums;overflow-wrap:anywhere}
a.fund-sold-chip:hover{text-decoration:underline;text-underline-offset:3px}
a.fund-sold-chip:focus-visible{outline:3px solid var(--focus-ring);outline-offset:2px}
.fund-options{gap:8px}
.fund-options>p{margin:0}
.fund-option-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--border)}
.fund-option{display:grid;grid-template-columns:minmax(72px,auto) auto minmax(0,1fr) 44px;gap:4px 14px;align-items:center;min-height:52px;
 border-bottom:1px solid var(--border)}
.fund-option-ticker{display:inline-flex;align-items:center;min-height:44px;color:var(--text);font-weight:750;text-decoration:none}
.fund-option-figures{font-size:14px;color:var(--muted);font-variant-numeric:tabular-nums lining-nums;overflow-wrap:anywhere}

/* ── 拼砖: the treemap (positions in percent of a box whose aspect follows the width) ─────────────────────────────────── */
.fund-tiles{position:relative;width:100%;border-radius:var(--db-radius-lg,16px);overflow:hidden;background:var(--surface)}
.fund-tile-cell{position:absolute;display:block;box-sizing:border-box;min-width:0;padding:0;border:0;background:none;color:var(--db-nav-ink);
 text-decoration:none;font:inherit;text-align:left;overflow:hidden}
.fund-tile-inner{position:absolute;inset:1px;display:flex;flex-direction:column;justify-content:space-between;gap:4px;min-width:0;padding:12px;
 border-radius:8px;background:var(--db-heat-neutral);overflow:hidden}
.fund-tile-cell[data-tone=positive] .fund-tile-inner{background:var(--db-positive-fill)}
.fund-tile-cell[data-tone=negative] .fund-tile-inner{background:var(--db-negative-fill)}
.fund-tile-cell.is-other{color:var(--text);cursor:pointer}
.fund-tile-cell.is-other .fund-tile-inner{background:var(--surface-2);border:1px dashed var(--db-line-strong);justify-content:flex-start}
.fund-tile-cell:focus-visible{outline:3px solid var(--focus-ring);outline-offset:-3px;z-index:1}
a.fund-tile-cell:hover .fund-tile-inner{filter:brightness(1.08)}
.fund-tile-name{display:grid;gap:2px;min-width:0}
.fund-tile-name strong,.fund-tile-name span,.fund-tile-figures>*{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fund-tile-name strong{font-size:16px;font-weight:750;line-height:1.15}
.fund-tile-name span{font-size:13px;opacity:.86}
.fund-tile-figures{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:2px 10px;min-width:0}
.fund-tile-figures strong{font-size:15px;font-weight:720;font-variant-numeric:tabular-nums lining-nums}
.fund-tile-figures span{font-size:12px;opacity:.9}
.fund-tile-cell.is-large .fund-tile-name strong{font-size:30px}
.fund-tile-cell.is-large .fund-tile-figures strong{font-size:24px}
.fund-tile-cell.is-medium .fund-tile-name strong{font-size:20px}
.fund-tile-cell.is-medium .fund-tile-figures strong{font-size:17px}
.fund-tile-cell.is-small .fund-tile-inner{padding:8px}
.fund-tile-cell.is-small .fund-tile-name strong{font-size:14px}
.fund-tile-cell.is-small .fund-tile-figures strong{font-size:12px}
.fund-tile-cell.is-tiny .fund-tile-inner{padding:3px 5px;justify-content:flex-start;border-radius:4px}
.fund-tile-cell.is-tiny .fund-tile-name strong{font-size:11px}
.fund-tile-cell.is-micro .fund-tile-inner{padding:0;border-radius:3px}
.fund-tile-cell.is-micro .fund-tile-name{display:none}
.fund-tile-cell.is-other strong{font-size:13px}
.fund-tile-cell.is-other span{font-size:12px;color:var(--muted)}
.fund-tiles-legend{display:flex;flex-wrap:wrap;align-items:center;gap:8px 18px;font-size:13px;color:var(--muted)}
.fund-key{display:inline-flex;align-items:center;gap:8px}
.fund-key-swatch{display:block;width:14px;height:14px;border-radius:4px;background:var(--db-heat-neutral)}
.fund-key-swatch[data-tone=positive]{background:var(--db-positive-fill)}
.fund-key-swatch[data-tone=negative]{background:var(--db-negative-fill)}

/* ── 本季动作: the flows and the four columns ─────────────────────────────────────────────────────────────────────────── */
.fund-flow-grid{display:grid;grid-template-columns:minmax(0,1fr);min-width:0}
.fund-flow-row{display:grid;grid-template-columns:minmax(96px,128px) minmax(0,1fr) minmax(0,1fr) minmax(96px,120px);gap:0;align-items:center;min-height:40px}
/* No gap between the two halves: both bars start at the same axis. */
.fund-flow-row>:first-child{padding-right:12px}
.fund-flow-row>:last-child{padding-left:12px}
.fund-flow-row.is-head{min-height:28px;font-size:12px;font-weight:650;color:var(--muted)}
.fund-flow-row.is-head>span:nth-child(2),.fund-flow-row.is-head>span:nth-child(4){text-align:right}
.fund-flow-stock{display:flex;align-items:center;gap:6px;min-width:0;font-weight:750}
.fund-flow-stock a{display:inline-flex;align-items:center;min-height:40px;color:var(--text);text-decoration:none}
.fund-flow-stock a:hover{text-decoration:underline;text-underline-offset:3px}
.fund-flow-stock a:focus-visible{outline:3px solid var(--focus-ring);outline-offset:2px;border-radius:2px}
.fund-flow-chip{font-size:11px;font-weight:650;white-space:nowrap}
.fund-flow-chip.is-positive{color:var(--green)}
.fund-flow-chip.is-negative{color:var(--red)}
.fund-flow-cell{display:flex;align-items:center;height:22px;min-width:0}
.fund-flow-cell.is-sell{justify-content:flex-end;border-right:1px solid var(--db-line-strong)}
.fund-flow-fill{display:block;height:22px;min-width:4px}
.fund-flow-fill[data-side=buy]{background:var(--db-positive);border-radius:0 6px 6px 0}
.fund-flow-fill[data-side=sell]{background:var(--db-negative);border-radius:6px 0 0 6px}
.fund-flow-amount{text-align:right;font-size:14px;white-space:nowrap;font-variant-numeric:tabular-nums lining-nums}
.fund-flow-amount.is-positive{color:var(--green)}
.fund-flow-amount.is-negative{color:var(--red)}
.fund-columns{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;min-width:0}
.fund-column{display:grid;align-content:start;gap:8px;min-width:0;padding:16px;border:1px solid var(--border);border-radius:var(--db-radius-md,10px);background:var(--surface)}
.fund-column-title{margin:0;font-size:15px;font-weight:720}
.fund-column-title.is-positive{color:var(--green)}
.fund-column-title.is-negative{color:var(--red)}
.fund-column-list{list-style:none;margin:0;padding:0;display:grid;gap:2px}
.fund-column-row{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:32px;font-size:14px;min-width:0}
.fund-column-row>:first-child{font-weight:750;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fund-column-row a{color:var(--text);text-decoration:none}
.fund-column-row a:hover{text-decoration:underline;text-underline-offset:3px}
.fund-column-row>span:last-child{color:var(--muted);text-align:right;font-variant-numeric:tabular-nums lining-nums;white-space:nowrap}
.fund-column p{margin:0;line-height:1.5}
.fund-see-all{justify-self:start;min-height:44px}
.fund-no-comparison{margin:0;padding:16px;border:1px solid var(--border);border-radius:var(--db-radius-md,10px);background:var(--surface);color:var(--muted)}

/* ── the stock page's 基金持仓 tab: one entry per fund, its stock line first and any option line under it ─────────────── */
.stock-funds{display:grid;grid-template-columns:minmax(0,1fr);gap:8px;min-width:0}
.stock-funds-hint{display:flex;align-items:center;gap:2px;margin:0}
.fund-holder-line{min-height:52px;padding:4px 0}
.fund-holder-line.is-extra{min-height:44px;padding-top:0}
.fund-holder-name{display:flex;flex-wrap:wrap;align-items:center;gap:0 10px;min-width:0}
.fund-holder-name small{color:var(--muted);font-size:12px;white-space:nowrap}
.fund-holder-line.is-extra .fund-holder-name{padding-left:14px}
.fund-holder-link{display:inline-flex;align-items:center;min-height:44px;color:var(--text);font-size:14px;font-weight:700;line-height:1.35;
 text-decoration:underline;text-decoration-color:var(--db-line-strong);text-underline-offset:3px;overflow-wrap:anywhere}
.fund-holder-link:hover{text-decoration-color:currentColor}
.fund-holder-line .fund-position-shares,.fund-holder-line .fund-position-value{font-size:13px}
.stock-funds-empty{padding:12px 0}
.stock-funds-empty p{margin:0 0 6px}
.fund-page.is-loading .fund-position{display:grid;grid-template-columns:minmax(0,1fr) 80px;gap:12px}

/* ── the fund library ───────────────────────────────────────────────────────────────────────────────────────────────── */
.fund-library-heading{display:grid;gap:6px}
body.page-app .app-view .route-page .insider-page>.fund-library-heading.focus-heading{margin:0;align-items:flex-start}
.fund-library-heading h1{margin:0;font-size:clamp(27px,4vw,36px);line-height:1.12;letter-spacing:-.02em}
.fund-library-heading p{margin:0}
.fund-style-pills{flex-wrap:nowrap}
.fund-style-count{font-weight:500;font-variant-numeric:tabular-nums;color:var(--muted)}
.fund-style-pills button[aria-pressed=true] .fund-style-count{color:inherit}
/* Nine styles and their counts (2026-10-27) are wider than the column below 1,250 px: above a phone the styles wrap as
   separate chips instead of hiding the last ones behind a sideways scroll; a phone keeps the one scrolling row. */
@media(min-width:721px){
 .fund-style-pills{flex-wrap:wrap;gap:8px;width:auto;overflow:visible;border:0;border-radius:0}
 .fund-style-pills button,.fund-style-pills button:first-child{border:1px solid var(--control-border);border-radius:var(--db-radius-sm,6px)}
}
.fund-library-table{gap:0;padding:6px 20px 10px}
.fund-library-head,.fund-library-link{display:grid;grid-template-columns:112px minmax(0,1.6fr) minmax(90px,.5fr) minmax(104px,.6fr) minmax(64px,.4fr) minmax(0,1.6fr);
 gap:4px 14px;align-items:center}
.fund-library-head{min-height:40px;font-size:12px;font-weight:650;color:var(--muted);border-bottom:1px solid var(--border)}
.fund-library-head>span:nth-child(4),.fund-library-head>span:nth-child(5){text-align:right}
.fund-library-list{list-style:none;margin:0;padding:0}
.fund-library-row{border-bottom:1px solid var(--border)}
.fund-library-row:last-child{border-bottom:0}
.fund-library-link{min-height:60px;padding:8px 0;color:var(--text);text-decoration:none}
/* A row is one link: hovering tints the row and underlines only the fund's name (owner 2026-10-26: not every cell). */
a.fund-library-link:hover{background:color-mix(in srgb,var(--surface-2) 55%,transparent);text-decoration:none}
a.fund-library-link:hover .fund-library-name strong,a.fund-library-link:focus-visible .fund-library-name strong{text-decoration:underline;text-underline-offset:3px}
a.fund-library-link:focus-visible{outline:3px solid var(--focus-ring);outline-offset:-3px;border-radius:6px}
.fund-library-mark{display:flex;align-items:center;min-width:0;padding-left:8px}
.fund-library-mark>.entity-avatar.is-logo{max-width:100%}
.fund-library-name{display:grid;gap:2px;min-width:0}
.fund-library-name strong{font-size:15px;font-weight:720;line-height:1.3;overflow-wrap:anywhere}
.fund-library-name span{font-size:12px;color:var(--muted);line-height:1.4;overflow-wrap:anywhere}
.fund-library-row.is-stopped .fund-library-name span{color:var(--db-caution)}
.fund-library-style{font-size:12px;color:var(--muted)}
.fund-library-total,.fund-library-positions{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums lining-nums}
.fund-library-total{font-size:15px;font-weight:700}
.fund-library-positions{font-size:14px}
.fund-library-top{font-size:13px;color:var(--muted);overflow-wrap:anywhere;font-variant-numeric:tabular-nums lining-nums}
.fund-corporate{display:grid;gap:12px;min-width:0}
.fund-corporate h2{margin:0;font-size:18px}
.fund-library-managers{display:grid;gap:12px;min-width:0}
.fund-library-managers>h2{margin:0;font-size:18px}
.fund-corporate-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px}
.fund-corporate-card{display:grid;gap:6px;min-height:44px;padding:14px 16px;border:1px solid var(--border);border-radius:var(--db-radius-md,10px);
 background:var(--surface);color:var(--text);text-decoration:none}
a.fund-corporate-card:hover{border-color:var(--db-line-strong);text-decoration:none}
a.fund-corporate-card:hover .fund-corporate-head strong{text-decoration:underline;text-underline-offset:3px}
a.fund-corporate-card:focus-visible{outline:3px solid var(--focus-ring);outline-offset:2px}
.fund-corporate-head{display:flex;align-items:center;gap:10px;min-width:0}
.fund-corporate-head strong{overflow-wrap:anywhere}
.fund-corporate-figures{font-size:13px;color:var(--muted);overflow-wrap:anywhere;font-variant-numeric:tabular-nums lining-nums}
.fund-corporate-quarter{font-size:12px;color:var(--muted)}

/* ── narrower screens ───────────────────────────────────────────────────────────────────────────────────────────────── */
@media(max-width:1100px){
 .fund-columns{grid-template-columns:repeat(2,minmax(0,1fr))}
 .fund-library-head,.fund-library-link{grid-template-columns:112px minmax(0,1.6fr) minmax(104px,.6fr) minmax(64px,.4fr) minmax(0,1.4fr)}
 .fund-library-head>span:nth-child(3),.fund-library-style{display:none}
}
@media(max-width:720px){
 .fund-tiles-row{grid-template-columns:repeat(2,minmax(0,1fr))}
 .fund-position-head,.fund-positions .fund-position-head{display:none}
 .fund-holder-line{grid-template-columns:minmax(0,1fr) auto 44px;grid-template-areas:"stock stock open" "shares value open" "change change open";
  gap:2px 12px;padding:8px 0}
 .fund-holder-name{grid-area:stock}
 .fund-holder-line .fund-position-shares{grid-area:shares;text-align:left}
 .fund-holder-line .fund-position-value{grid-area:value}
 .fund-holder-line .fund-change{grid-area:change}
 .fund-holder-line .fund-position-open{grid-area:open}
 .fund-holder-line.is-extra{padding-top:0}
 /* The fund's table on a phone (mockup E): the ticker, then its value and weight, then the change. */
 .fund-positions .fund-position{grid-template-columns:72px minmax(0,1fr) auto 44px;grid-template-areas:"stock value weight open" "stock change change open";
  gap:2px 12px;padding:8px 0}
 .fund-positions .fund-position-stock{grid-area:stock;align-self:center}
 .fund-positions .fund-position-name,.fund-positions .fund-position-shares{display:none}
 .fund-positions .fund-position-value{grid-area:value;text-align:left}
 .fund-positions .fund-position-weight{grid-area:weight}
 .fund-positions .fund-change{grid-area:change}
 .fund-positions .fund-position-open{grid-area:open}
 .fund-flow-row{grid-template-columns:minmax(64px,86px) minmax(0,1fr) minmax(0,1fr) minmax(76px,auto)}
 .fund-flow-row>:first-child{padding-right:8px}
 .fund-flow-row>:last-child{padding-left:8px}
 .fund-library-head{display:none}
 .fund-library-table{padding:4px 16px}
 .fund-library-link{grid-template-columns:84px minmax(0,1fr) auto;grid-template-areas:"mark name total" "mark top top";gap:2px 12px}
 .fund-library-mark{grid-area:mark;align-self:start;padding-left:0}
 .fund-library-mark>.entity-avatar{--entity-size:32px}
 .fund-library-name{grid-area:name}
 .fund-library-total{grid-area:total}
 .fund-library-top{grid-area:top}
 .fund-library-positions{display:none}
}
@media(max-width:600px){
 .fund-identity{gap:12px}
 .fund-identity>.entity-avatar{--entity-size:48px}
 .fund-report{font-size:13px;gap:2px 10px}
 .fund-tiles-row:not(.is-three):not(.is-two)>[data-tile=positions],.fund-tiles-row:not(.is-three):not(.is-two)>[data-tile=top]{display:none}
 .fund-tiles-row.is-three{grid-template-columns:minmax(0,1fr)}
 .fund-tile{padding:10px 12px;gap:2px}
 .fund-tile-value{font-size:18px}
 .fund-tile[data-tile=actions] .fund-tile-value{font-size:14px}
 .fund-views{width:100%}
 .fund-views button{flex:1 1 0;padding:0 8px}
 .fund-donut-card{gap:14px;padding:14px;flex-wrap:nowrap}
 .fund-donut{flex:0 0 136px;width:136px;height:136px}
 .fund-donut-center span{font-size:11px}
 .fund-donut-center strong{font-size:15px}
 .fund-donut-center span:last-child{display:none}
 .fund-legend-head{display:none}
 .fund-legend-row{grid-template-columns:10px minmax(0,1fr) auto;gap:2px 8px;min-height:30px}
 .fund-legend-row[data-slot=other] .fund-legend-rest{grid-column:auto}
 .fund-legend-row .fund-legend-bar,.fund-legend-row .fund-change{display:none}
 .fund-swatch{width:10px;height:10px}
 .fund-legend-ticker{min-height:30px;font-size:13px}
 .fund-legend-rest{font-size:13px}
 .fund-legend-rest small{display:none}
 .fund-legend-weight{font-size:13px}
 .fund-tile-inner{padding:8px}
 .fund-tile-cell.is-large .fund-tile-name strong{font-size:22px}
 .fund-tile-cell.is-large .fund-tile-figures strong{font-size:18px}
 .fund-tile-cell.is-medium .fund-tile-name strong{font-size:16px}
 .fund-tile-cell.is-medium .fund-tile-figures strong{font-size:14px}
 .fund-columns{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
 /* A phone keeps the two halves wide: the new / sold-out word goes under the ticker. */
 .fund-flow-row{grid-template-columns:minmax(52px,68px) minmax(0,1fr) minmax(0,1fr) auto;min-height:44px}
 .fund-flow-stock{flex-direction:column;align-items:flex-start;justify-content:center;gap:0}
 .fund-flow-stock a{min-height:26px}
 .fund-flow-row.is-head>span:nth-child(2){padding-right:6px}
 .fund-flow-row.is-head>span:nth-child(3){padding-left:6px}
 .fund-column{padding:12px}
 .fund-column-row{font-size:13px}
 .fund-flow-amount{font-size:13px}
 .fund-style-pills{width:100%}
}
@media(max-width:360px){
 .fund-columns{grid-template-columns:minmax(0,1fr)}
 .fund-flow-glyph{display:none}
 .fund-flow-amount{font-size:12px}
 .fund-donut{flex-basis:112px;width:112px;height:112px}
 .fund-flow-row{grid-template-columns:56px minmax(0,1fr) minmax(0,1fr) auto}
}

/* app-tracked.css */
/* What we track (2026-10-26, owner: 「a horizontally scrolling list showing the things we track … and the specific records
   below」, 「Put a headshot or the fund's logo on every fund, politicians too」): the entity avatar (entity-avatar.js), the
   tracked strip (tracked-strip.js) and its cards (views/tracked.js). Where the pictures come from is the credits page
   (/credits/, site.css), never a list under them (owner 2026-10-27). Tokens only (tokens.css;
   design-system/ducky-beta-ui/MASTER.md): paper cards with hairlines, no shadows or gradients, 6/10/16 px radii, 44 px
   targets, the six identity series tokens for monogram tints, the logo plate token under every logo. */

/* ── the avatar ──────────────────────────────────────────────────────────────────────────────────────────────────── */
.entity-avatar{--entity-size:40px;--entity-plate:1;display:inline-grid;place-items:center;flex:0 0 auto;box-sizing:border-box;
 width:var(--entity-size);height:var(--entity-size);overflow:hidden;border-radius:var(--db-radius-md);background:var(--db-paper-2);
 color:var(--db-ink);vertical-align:middle;line-height:1}
.entity-avatar.is-sm{--entity-size:28px;border-radius:8px}
.entity-avatar.is-lg{--entity-size:56px;border-radius:12px}
.entity-avatar.is-person{border-radius:50%}
.entity-avatar img{display:block;width:100%;height:100%;object-fit:cover;transition:opacity var(--db-fast) var(--db-ease)}
.entity-avatar.is-loading{background:var(--db-skeleton)}
.entity-avatar.is-loading img{opacity:0}
/* A logo sits on its plate (light in both themes: wordmarks are drawn for white), as wide as the wordmark needs. */
.entity-avatar.is-logo{width:calc(var(--entity-size) * var(--entity-plate));padding:calc(var(--entity-size) * .14) calc(var(--entity-size) * .16);
 border:1px solid var(--db-logo-plate-line);border-radius:var(--db-radius-sm);background:var(--db-logo-plate)}
.entity-avatar.is-logo.plate-dark{background:var(--db-heat-neutral)}
.entity-avatar.is-logo img{object-fit:contain}
.entity-avatar.is-logo.is-loading{background:var(--db-skeleton)}
/* A monogram: the id's identity tint under ink (the contrast of body text in both themes). */
.entity-avatar.is-mono{--entity-tone:var(--db-series-1);border:1px solid color-mix(in srgb,var(--entity-tone) 45%,transparent);
 background:color-mix(in srgb,var(--entity-tone) 20%,var(--db-paper));font-size:calc(var(--entity-size) * .36);font-weight:760;
 letter-spacing:-.01em;font-variant-numeric:lining-nums;user-select:none}
.entity-avatar.is-mono[data-length="3"]{font-size:calc(var(--entity-size) * .29)}
.entity-avatar.is-mono[data-length="4"]{font-size:calc(var(--entity-size) * .24)}
.entity-avatar[data-tone="2"]{--entity-tone:var(--db-series-2)}
.entity-avatar[data-tone="3"]{--entity-tone:var(--db-series-3)}
.entity-avatar[data-tone="4"]{--entity-tone:var(--db-series-4)}
.entity-avatar[data-tone="5"]{--entity-tone:var(--db-series-5)}
.entity-avatar[data-tone="6"]{--entity-tone:var(--db-series-6)}
@media(prefers-reduced-motion:reduce){.entity-avatar img{transition:none}}

/* ── the strip ───────────────────────────────────────────────────────────────────────────────────────────────────── */
.radar-tracked{min-width:0;max-width:100%;margin:0 0 14px}
.radar-tracked[hidden]{display:none}
.tracked-strip{display:grid;gap:8px;min-width:0;max-width:100%}
.tracked-strip-head{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0;min-height:44px}
.tracked-strip-title{margin:0;font-size:16px;line-height:24px;font-weight:700;letter-spacing:0}
/* Only the track scrolls: the page never does (the strip is as wide as its column). */
.tracked-strip-viewport{min-width:0;max-width:100%;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;
 scroll-padding-inline:4px;padding:4px 4px 10px;margin:-4px -4px 0;scrollbar-width:thin}
/* Motion (tracked-strip.js): the row drifts at every width, so it never snaps (a snap would pull each small step back);
   under reduced motion it stays still and a finger lands gently on a card's edge. */
@media(pointer:coarse) and (prefers-reduced-motion:reduce){.tracked-strip-viewport{scroll-snap-type:x proximity}}
@media(pointer:fine){.tracked-strip.is-overflowing .tracked-strip-viewport{cursor:grab}}
.tracked-strip.is-dragging .tracked-strip-viewport{cursor:grabbing;-webkit-user-select:none;user-select:none}
/* 内部人 buys (2026-10-27): the share of the buyer's own holding sits under the amount; a plan trade carries its chip. */
.tracked-card-share{display:block;margin-top:2px;font-size:12px;font-weight:500;line-height:16px}
.tracked-card-meta .insider-chip{margin-left:6px;font-size:11px}
/* 基金季报持仓: the funds, then the companies we track. */
.tracked-strip-group{display:grid;gap:14px;min-width:0;max-width:100%}
.tracked-strip-viewport:focus-visible{outline:3px solid var(--focus-ring);outline-offset:-1px;border-radius:var(--db-radius-md)}
.tracked-strip-track{display:flex;gap:12px;width:max-content;margin:0;padding:0;list-style:none}
.tracked-strip-item{display:flex;flex:0 0 auto;scroll-snap-align:start}
.tracked-strip-message{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:0;padding:12px 14px;border:1px solid var(--db-line);
 border-radius:var(--db-radius-md);background:var(--db-paper);font-size:14px;line-height:1.5}

/* ── a card ──────────────────────────────────────────────────────────────────────────────────────────────────────── */
.tracked-card{display:grid;grid-template-rows:auto auto auto auto 1fr;align-content:start;gap:3px;width:212px;box-sizing:border-box;
 padding:12px 14px 14px;border:1px solid var(--db-line);border-radius:var(--db-radius-md);background:var(--db-paper);color:var(--db-ink);
 font:inherit;text-align:left;text-decoration:none;cursor:pointer}
a.tracked-card:hover,button.tracked-card:hover{border-color:var(--db-line-strong);background:var(--db-paper-strong);text-decoration:none}
a.tracked-card:hover .tracked-card-name,a.tracked-card:focus-visible .tracked-card-name{text-decoration:underline;text-underline-offset:3px}
.tracked-card:focus-visible{outline:3px solid var(--focus-ring);outline-offset:2px}
.tracked-card-media{display:flex;align-items:center;min-width:0;height:56px;margin:0 0 8px}
.tracked-card-media>.entity-avatar.is-logo{max-width:100%}
.tracked-card-name{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:15px;line-height:20px;
 font-weight:720;overflow-wrap:anywhere}
.tracked-card-sub{overflow:hidden;font-size:13px;line-height:18px;color:var(--db-muted);white-space:nowrap;text-overflow:ellipsis}
.tracked-card-figures{margin-top:4px;font-size:13px;line-height:19px;font-weight:650;font-variant-numeric:tabular-nums lining-nums}
.tracked-card-meta{font-size:12px;line-height:17px;color:var(--db-muted);font-variant-numeric:tabular-nums lining-nums}
.tracked-card.is-stopped .tracked-card-meta{color:var(--db-caution)}
.tracked-card.is-more{display:grid;place-items:center;width:156px;background:var(--db-canvas-2)}
.tracked-card-more{font-size:15px;font-weight:700;color:var(--db-link)}
a.tracked-card.is-more:hover .tracked-card-more{text-decoration:underline;text-underline-offset:3px}
.tracked-card.is-skeleton{cursor:default;gap:8px}
.tracked-card.is-skeleton .insider-skeleton{display:block;height:12px}

/* Phones: the records stay the subject of the page, so a card is compact — a 40 px mark and tighter type. */
@media(max-width:600px){
 .radar-tracked{margin-bottom:8px}
 .tracked-strip{gap:4px}
 .tracked-strip-title{font-size:15px}
 .tracked-strip-track{gap:10px}
 .tracked-card{width:168px;padding:10px 12px;gap:1px}
 .tracked-card-media{height:40px;margin-bottom:6px}
 .tracked-card-media>.entity-avatar.is-lg{--entity-size:40px}
 .tracked-card-name{font-size:14px;line-height:18px}
 .tracked-card-sub{font-size:12px;line-height:16px}
 .tracked-card-figures{margin-top:2px;font-size:12px;line-height:17px}
 .tracked-card-meta{font-size:11px;line-height:15px}
 .tracked-card.is-more{width:120px}
}

/* ── a person's page (#/politician/<key>, views/politician.js) ──────────────────────────────────────────────────────
   The holder page's language (app-insider.css: heading, sections, trade rows) and the fund page's figures and segmented
   control (app-fund.css); what is the person's own: the late flag (words and the caution colour), the disclosures list. */
/* The back link above the identity, both from the left (the shared heading is a space-between row), as on a fund page. */
body.page-app .app-view .route-page .insider-page>.politician-heading.focus-heading{display:grid;grid-template-columns:minmax(0,1fr);justify-items:start;gap:8px}
.politician-english{margin:0;font-size:14px;line-height:1.4;color:var(--db-muted)}
.politician-trades-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 16px;margin-bottom:8px}
.politician-trades-head .insider-section-title{margin:0}
.politician-sides button{min-width:72px}
a.politician-trade-ticker{display:inline-flex;align-items:center;min-height:44px;margin:-10px 0;text-decoration:none}
.politician-trade .ticker-symbol.is-unlisted{color:var(--db-muted)}
.politician-trade .insider-trade-kind:not(.is-positive):not(.is-negative){color:var(--db-ink)}
.politician-note{color:var(--db-faint)}
.politician-flag{margin-top:4px}
.politician-late{border-color:var(--db-caution);color:var(--db-caution);font-weight:700}
.politician-review{border-color:var(--db-warning);color:var(--db-warning);font-weight:650}
.politician-disclosure-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--border)}
.politician-disclosure-list li{display:grid;grid-template-columns:120px minmax(0,1fr) auto auto;gap:2px 16px;align-items:center;
 padding:2px 0;border-bottom:1px solid var(--border);font-size:14px;font-variant-numeric:tabular-nums lining-nums}
.politician-disclosure-list a{display:inline-flex;align-items:center;justify-content:flex-end;min-height:44px;font-weight:650;text-decoration:none}
@media(max-width:600px){
 /* A phone keeps the two figures a reader came for: trades in the last 90 days and late filings. */
 .politician-tiles>[data-tile=trades],.politician-tiles>[data-tile=sides]{display:none}
 .politician-disclosure-list li{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"day link" "source link";gap:0 12px;padding:6px 0}
 .politician-disclosure-list li>time{grid-area:day}
 .politician-disclosure-list li>span:not(.muted){grid-area:source;font-size:13px;color:var(--db-muted)}
 .politician-disclosure-list li>span.muted{display:none}
 .politician-disclosure-list li>a{grid-area:link}
}

/* app-ux-stock.css */
/* Production stock workspace. Scope layout changes to the stock and evidence surfaces. */
.stock-workspace-tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin:12px 0 22px;}
.stock-workspace-tabs a{display:flex;align-items:center;justify-content:center;min-height:48px;padding:10px 18px;color:var(--muted);text-decoration:none;border-bottom:3px solid transparent;font-weight:600;}
.stock-workspace-tabs a[aria-current=page]{color:var(--accent);border-color:var(--accent);}
.focus-stock [hidden]{display:none!important;}
.stock-extra-tools{margin:20px 0;border-top:1px solid var(--border);padding-top:10px;}
.stock-extra-tools summary{min-height:44px;cursor:pointer;padding:10px 0;}
.stock-extra-tools .stock-core-actions{margin:12px 0;}
.stock-key-evidence{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;}
.stock-key-evidence h2{grid-column:1/-1;}
.stock-reference-plan{margin:28px 0;padding:22px;border:1px solid var(--border);border-radius:12px;}
.stock-reference-plan h2{font-size:20px;margin:0 0 12px;}
.stock-plan-actions{display:flex;gap:12px;flex-wrap:wrap;}
.stock-metric-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:20px 0;}
.stock-metric-card{padding:16px;background:var(--surface);border:1px solid var(--border);border-radius:12px;min-width:0;}
.stock-metric-card h3{font-size:14px;display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 0 8px;}
.stock-metric-card .watch-metric{font-size:24px;}
.stock-reference-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin:28px 0;}
.stock-metric-section{min-width:0;padding:20px;border:1px solid var(--border);border-radius:12px;scroll-margin-top:20px;}
.stock-metric-section h2{font-size:20px;margin:0 0 12px;}
.stock-level{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:12px 0;border-bottom:1px solid var(--border);}
.stock-level strong{font-size:22px;font-variant-numeric:tabular-nums;}
.stock-source-card.is-support,.evidence-node.is-support{--ux-stance:var(--evidence-support,#168358);}
.stock-source-card.is-counter,.evidence-node.is-counter{--ux-stance:var(--evidence-counter,#ce5267);}
.stock-source-card:is(.is-support,.is-counter),.evidence-node:is(.is-support,.is-counter){border:1px solid color-mix(in srgb,var(--ux-stance) 65%,var(--border));border-left:4px solid var(--ux-stance);background:color-mix(in srgb,var(--ux-stance) 9%,var(--surface));}
.stock-source-card:is(.is-support,.is-counter):hover,.evidence-node:is(.is-support,.is-counter):hover{border-color:var(--ux-stance);background:color-mix(in srgb,var(--ux-stance) 14%,var(--surface));}
.evidence-repeat-group{margin-bottom:12px;min-width:0;}
.evidence-repeat-group>.evidence-node{margin-bottom:0;}
.evidence-repeat-group>details{border:1px solid var(--border);border-top:0;border-radius:0 0 10px 10px;padding:8px 12px;}
.evidence-repeat-group summary{min-height:44px;padding:10px 0;cursor:pointer;font-size:13px;}
.evidence-repeat-group details .evidence-node{margin-top:10px;}
@media(max-width:650px){
 .stock-key-evidence{grid-template-columns:1fr;}
 .stock-metric-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;}
 .stock-metric-card{padding:12px;}.stock-metric-card h3{font-size:12px;}
 .stock-reference-grid{grid-template-columns:1fr;gap:12px;}
 .stock-reference-plan,.stock-metric-section{padding:16px;}
 .stock-plan-actions .btn{width:100%;}
}

.stock-metric-card .watch-signal-help{position:static;transform:none;min-width:44px;min-height:44px;flex:none;background:transparent;border:0;font-size:16px;}
.stock-metric-card .watch-metric{display:flex;flex-direction:column;align-items:flex-start;gap:4px;}
.stock-metric-card .watch-metric-value{font-size:24px;}
.stock-metric-card .watch-metric-note{font-size:12px;}

@media(max-width:650px){
 .stock-map-panel .stock-information-map{margin-top:0;}
 .stock-map-panel .stock-information-map>.focus-heading{margin:0 0 8px;justify-content:flex-end;}
 .stock-map-panel .stock-information-map>.focus-heading>div{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);}
 .stock-map-panel .stock-information-map>.focus-heading>a{min-height:44px;display:flex;align-items:center;}
 .stock-map-panel .evidence-tools{margin-bottom:8px;}
 .stock-map-panel .evidence-group.is-support{order:1;}
 .stock-map-panel .evidence-group.is-counter{order:2;}
 .stock-map-panel .evidence-group.is-context{order:3;}
}
@media(max-width:650px){
 .stock-metrics>h2{margin-top:0;}
 .stock-metric-grid{margin-top:12px;}
}
/* The sticky tab bar paints over its own bottom margin (2026-10-25): a map row scrolling under it disappears at the margin's
   edge, never as a sliver of border right under the tabs. The bars' shared 6 px (professional-ui.css) left 6 px of it. */
body.page-app .focus-stock .stock-workspace-tabs{box-shadow:0 12px 0 var(--bg)}
/* Phone reading density: one row of tabs, tighter cards, full source wording. */
@media(max-width:650px){
 .page-app .focus-stock{font-size:13px;line-height:1.55;}
 .page-app .focus-stock>.focus-heading h1{font-size:21px;line-height:1.15;margin:2px 0 3px;}
 .page-app .focus-stock>.focus-heading p{font-size:11px;line-height:1.4;margin:2px 0;}
 .page-app .focus-stock>.focus-heading a.small{display:inline-flex;align-items:center;min-height:44px;font-size:11px;}
 /* One row of tabs that scrolls sideways (owner 2026-10-25: never two lines); with the map's duck it stays ≤ 48 px, the
    one local row that sticks under the navigation. */
 .page-app .focus-stock .stock-workspace-tabs{display:flex;gap:0;margin:4px 0 10px;padding-top:2px;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none}
 .page-app .focus-stock .stock-workspace-tabs::-webkit-scrollbar{display:none}
 .page-app .focus-stock .stock-workspace-tabs a{flex:0 0 auto;min-height:44px;padding:0 12px;font-size:13px;line-height:1.25;white-space:nowrap;border-bottom-width:2px;}
 .page-app .focus-stock .stock-price{gap:3px 8px;}
 .page-app .focus-stock .stock-price>strong{font-size:22px;line-height:1.25;}
 .page-app .focus-stock .stock-price>span{font-size:13px;}
 .page-app .focus-stock .stock-price>small{font-size:11px;line-height:1.45;}
 .page-app .focus-stock .evidence-analysis{margin:10px 0 12px;padding:10px 11px 2px;border-radius:9px;}
 .page-app .focus-stock .evidence-analysis-heading{gap:2px;}
 .page-app .focus-stock .evidence-analysis-overview{font-size:13px;line-height:1.6;margin:6px 0 0;}
 .page-app .focus-stock .evidence-analysis-status{font-size:12px;line-height:1.5;margin:5px 0 8px;}
 .page-app .focus-stock .evidence-analysis-details>summary{padding:6px 0;min-height:44px;}
 .page-app .focus-stock .evidence-analysis-body{gap:10px;padding:10px 0;}
 .page-app .focus-stock .evidence-analysis-body p{font-size:13px;line-height:1.55;}
 .page-app .focus-stock .evidence-analysis .brief-citation{min-width:44px;min-height:44px;}
 .page-app .focus-stock .stock-key-evidence{gap:7px;}
 .page-app .focus-stock .stock-key-evidence h2,.page-app .focus-stock .focus-chart h2{font-size:18px;margin:4px 0;}
 .page-app .focus-stock .stock-source-card{gap:5px;padding:10px 11px;font-size:13px;line-height:1.5;border-radius:9px;min-height:44px;}
 .page-app .focus-stock .stock-source-card .small{font-size:11px;line-height:1.45;}
 .page-app .focus-stock .stock-reference-plan{margin:14px 0;padding:11px;border-radius:9px;}
 .page-app .focus-stock .stock-reference-plan h2,.page-app .focus-stock .stock-metrics>h2,.page-app .focus-stock .stock-metric-section h2{font-size:18px;line-height:1.3;margin:0 0 6px;}
 .page-app .focus-stock .stock-reference-plan p{font-size:13px;line-height:1.55;margin:6px 0 8px;}
 .page-app .focus-stock .stock-plan-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;}
 .page-app .focus-stock .stock-plan-actions .btn{font-size:12px;padding:7px;min-height:44px;white-space:normal;line-height:1.3;}
 .page-app .focus-stock .stock-metrics>p{font-size:12px;line-height:1.5;margin:5px 0 8px;}
 .page-app .focus-stock .stock-metric-grid{gap:6px;margin:8px 0 10px;}
 .page-app .focus-stock .stock-metric-card{padding:7px 10px 9px;border-radius:8px;}
 .page-app .focus-stock .stock-metric-card h3{font-size:13px;line-height:1.3;gap:3px;margin:0 0 1px;min-height:44px;}
 .page-app .focus-stock .stock-metric-card .watch-signal-help{min-width:44px;min-height:44px;padding:0;font-size:15px;}
 .page-app .focus-stock .stock-metric-card .watch-metric{gap:2px;line-height:1.3;}
 .page-app .focus-stock .stock-metric-card .watch-metric-value{font-size:20px;line-height:1.2;}
 .page-app .focus-stock .stock-metric-card .watch-metric-note,.page-app .focus-stock .stock-metric-card .watch-metric-status{font-size:11px;line-height:1.35;}
 .page-app .focus-stock .stock-reference-grid{gap:8px;margin:14px 0;}
 .page-app .focus-stock .stock-metric-section{padding:11px;border-radius:9px;}
 .page-app .focus-stock .stock-metric-section>p{font-size:12px;line-height:1.5;margin:6px 0;}
 .page-app .focus-stock .stock-level{gap:8px;padding:7px 0;font-size:13px;}
 .page-app .focus-stock .stock-level strong{font-size:19px;}
 .page-app .focus-stock .focus-chart{margin:18px 0;}
 .page-app .focus-stock .stock-closing-chart{padding:8px 0;}
 .page-app .focus-stock .stock-extra-tools{margin:12px 0;padding-top:3px;}
 .page-app .focus-stock .evidence-repeat-group{margin-bottom:8px;}
 .page-app .focus-stock .evidence-repeat-group>details{padding:2px 10px;}
 .page-app .focus-stock .evidence-repeat-group summary{padding:6px 0;font-size:12px;min-height:44px;}
 .page-app .focus-stock :is(input,select,textarea){font-size:16px;}
}

@media(max-width:650px){
 /* The active tab already names this section; retain its heading for assistive navigation. */
 .page-app .focus-stock .stock-metrics>h2:first-child{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;}
 .page-app .focus-stock .stock-metrics>h2:first-child+p{display:none;}
}
/* Membership confirmation stays in the stock workspace, without moving focus. */
.stock-watch-feedback{display:flex;align-items:center;gap:6px 14px;flex-wrap:wrap;margin:0 0 12px;padding:0 12px;border-left:3px solid var(--green);background:color-mix(in srgb,var(--green) 6%,var(--bg));font-size:13px;line-height:1.5}
.stock-watch-feedback a{display:inline-flex;align-items:center;min-height:44px}
.today-research-start{margin:-4px 0 10px;font-size:13px}
.today-research-start a{display:inline-flex;align-items:center;min-height:44px}
/* One-tap alert entry under the stock heading (owner 2026-10-06): a sentence with four links, no card chrome. */
.focus-stock .stock-alert-entry{display:flex;align-items:center;gap:4px 6px;flex-wrap:wrap;margin:0 0 14px;font-size:13px;line-height:1.5;color:var(--muted);}
.focus-stock .stock-alert-entry>a{padding:4px 10px;font-size:13px;}
/* The price-level entries wait for the price they start from (2026-10-24): visible, not yet a link. */
.focus-stock .stock-alert-entry>a[aria-disabled=true]{opacity:.55;cursor:default;pointer-events:none;}
@media(max-width:600px){
 .page-app .focus-stock .stock-alert-entry{margin:-2px 0 10px;font-size:12px;gap:4px;}
 .page-app .focus-stock .stock-alert-entry>a{padding:4px 8px;font-size:12px;}
}

/* The research map tab and the overview's entry card (owner 2026-10-24, mockup v6). Tokens only. */
.stock-workspace-tabs a.research-map-tab{gap:8px;min-height:44px;margin:2px 0 6px;padding:0 18px 0 4px;border:0;border-radius:999px;
 background:color-mix(in srgb,var(--accent) 14%,var(--surface));box-shadow:inset 0 0 0 2px var(--accent);color:color-mix(in srgb,var(--accent) 60%,var(--text));font-weight:700}
.stock-workspace-tabs a.research-map-tab:hover{background:color-mix(in srgb,var(--accent) 22%,var(--surface))}
.stock-workspace-tabs a.research-map-tab[aria-current=page]{background:color-mix(in srgb,var(--accent) 26%,var(--surface));box-shadow:inset 0 0 0 3px var(--accent)}
.research-map-tab .research-map-duck{flex:0 0 40px;width:40px;height:40px}
.research-map-card{display:flex;align-items:center;flex-wrap:wrap;gap:16px 20px;margin:0 0 18px;padding:16px 20px;border:1px solid color-mix(in srgb,var(--accent) 45%,var(--border));
 border-radius:16px;background:color-mix(in srgb,var(--accent) 8%,var(--surface));color:var(--text);text-decoration:none}
.research-map-card:hover{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 13%,var(--surface))}
.research-map-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.research-map-card .research-map-duck{flex:0 0 96px;width:96px;height:96px}
.research-map-card-text{display:grid;gap:8px;flex:1 1 320px;min-width:0}
.research-map-card-title{font-size:19px;font-weight:700;line-height:1.35;color:var(--text);text-wrap:balance}
.research-map-card-body{font-size:14px;line-height:1.55;color:var(--muted)}
.research-map-card-lanes{display:flex;flex-wrap:wrap;gap:8px}
.research-map-lane-chip{display:inline-flex;align-items:center;min-height:28px;padding:0 12px;border:1px solid color-mix(in srgb,var(--lane) 55%,var(--border));border-radius:999px;
 background:color-mix(in srgb,var(--lane) 10%,var(--surface));color:var(--lane);font-size:13px;font-weight:600}
.research-map-lane-chip.is-support{--lane:var(--bull)}
.research-map-lane-chip.is-context{--lane:var(--db-focus,var(--accent))}
.research-map-lane-chip.is-counter{--lane:var(--bear)}
.research-map-card-cta{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 18px;border-radius:999px;background:color-mix(in srgb,var(--accent) 60%,var(--text));color:var(--surface);
 font-size:15px;font-weight:700;white-space:nowrap}
.research-map-card:hover .research-map-card-cta{background:color-mix(in srgb,var(--accent) 45%,var(--text))}
@media(max-width:650px){
 .page-app .focus-stock .stock-workspace-tabs a.research-map-tab{min-height:44px;margin:0 4px;padding:0 12px 0 4px;font-size:13px}
 .page-app .focus-stock .research-map-tab .research-map-duck{flex-basis:32px;width:32px;height:32px}
 .research-map-card{gap:12px 14px;padding:14px}
 .research-map-card .research-map-duck{flex-basis:64px;width:64px;height:64px}
 .research-map-card-text{flex-basis:calc(100% - 80px)}
 .research-map-card-title{font-size:16px}
 .research-map-card-body{font-size:13px}
 .research-map-card-cta{flex:1 1 100%;justify-content:center}
}

/* The heading (owner 2026-10-25): the stock, its price, change and close date, then one row of actions. On a phone the
   alert entries leave the page for a sheet (Alert), so the tabs and the content come next; the filings are tabs
   (内部人交易, 基金持仓, 2026-10-26). */
.focus-stock>.focus-heading>.stock-identity{flex:1 1 auto;min-width:0}
.stock-head-price:empty{display:none}
.stock-head-price .stock-price{margin-top:6px}
.stock-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.stock-actions>.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px}
.stock-watch-mark{font-weight:700}
.focus-stock .stock-actions>.stock-watch[aria-pressed=true]{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--surface))}
.stock-actions>.stock-alert-open{display:none}
@media(max-width:600px){
 .page-app .focus-stock>.focus-heading{display:grid;grid-template-columns:minmax(0,1fr);gap:6px;margin:0 0 6px}
 .page-app .focus-stock .stock-title{display:flex;align-items:baseline;gap:8px;min-width:0}
 .page-app .focus-stock .stock-title>h1{flex:none;margin:0}
 .page-app .app-view .focus-stock .stock-title>p{min-width:0;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
 .page-app .focus-stock .stock-head-price .stock-price{margin-top:2px}
 .page-app .focus-stock .stock-actions{flex-wrap:nowrap;gap:6px}
 .page-app .focus-stock .stock-actions>.btn{min-height:44px;padding:0 12px;font-size:13px;white-space:nowrap}
 .page-app .focus-stock .stock-actions>.stock-alert-open{display:inline-flex}
 .page-app .focus-stock .stock-actions .app-icon{width:18px;height:18px}
 .page-app .focus-stock>.stock-alert-entry{display:none}
}
/* The sheet holds the page's own controls: the alert entries as 44 px choices. */
.modal-body>.stock-alert-entry{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0;font-size:14px;line-height:1.5;color:var(--muted)}
.modal-body>.stock-alert-entry>span{flex-basis:100%}
.modal-body>.stock-alert-entry>span:last-child:not(:first-child){margin-top:2px}
.modal-body>.stock-alert-entry>a{min-height:44px;padding:0 14px;font-size:14px}
.modal-body>.stock-alert-entry>a[aria-disabled=true]{opacity:.55;pointer-events:none}

/* app-ux-watchlist.css */
/* Production watchlist workspace. Existing quote, research and source components keep their states. */
/* Four reading choices have their own row; search is a separate task below. */
.watchlist-view .watch-controls{display:grid;grid-template-columns:minmax(0,1fr) auto;margin:12px 0;gap:10px}
.watchlist-view .watch-modes{grid-column:1/-1;grid-row:1;justify-self:stretch;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;padding:0;background:var(--surface);border:1px solid var(--border);border-radius:10px;overflow:hidden}
.watchlist-view .watch-modes .btn{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:4px;min-height:78px;min-width:0;padding:12px 16px;border:0;border-radius:0;border-bottom:3px solid transparent;background:transparent;white-space:normal;text-align:left;color:var(--text);box-shadow:none}
.watchlist-view .watch-modes .btn+.btn{border-left:1px solid var(--border)}
.watchlist-view .watch-modes .btn:hover{background:var(--surface-2)}
.watchlist-view .watch-modes [aria-pressed=true]{background:var(--surface-2);border-bottom-color:var(--accent)}
.watchlist-view .watch-mode-title{font-size:17px;font-weight:700;line-height:1.3}
.watchlist-view [aria-pressed=true] .watch-mode-title{color:var(--accent-text,var(--accent))}
.watchlist-view .watch-mode-purpose{font-size:13px;font-weight:400;line-height:1.4;color:var(--muted)}
.watchlist-view .watch-modes .btn:focus-visible{outline:2px solid var(--accent);outline-offset:-4px}
.watchlist-view .watch-controls .watch-search{grid-column:1;grid-row:1;width:100%;min-width:0}
.watchlist-view .watch-controls>button{grid-column:2;grid-row:1;min-height:44px}
.watchlist-view .watch-controls>select{grid-column:1/-1;grid-row:2}
.watch-mode-note{margin:0 0 12px;line-height:1.6;max-width:100ch}
.watch-mode-note a{white-space:nowrap}
.watch-stock-actions{display:flex;gap:3px;align-items:center;flex-wrap:wrap;margin-top:5px}
.watch-stock-actions>a{display:flex;position:static;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:44px;min-width:44px;width:auto;border:0;padding:4px;margin:0;text-decoration:none;color:var(--muted);border-radius:6px;font-size:10px;line-height:1.25}
.watch-stock-actions>a:hover,.watch-stock-actions>a:focus-visible{background:var(--surface-2);color:var(--accent-text,var(--accent))}
.watch-stock-actions .app-icon,.watch-compact-table .watch-stock-actions .app-icon{width:16px;height:16px}
.watch-stock-actions>a>span{position:static;width:auto;height:auto;clip-path:none;overflow:visible}
.watch-daily-table.watch-compact-table{min-width:640px;font-size:13px}
.watch-daily-table.watch-compact-table tr>:first-child{width:172px}
.watch-daily-table.watch-compact-table tr>:nth-child(2){width:112px}
.watch-daily-table.watch-compact-table tr>:nth-child(3){width:112px}
.watch-daily-table.watch-compact-table tr>.watch-chip-col,.watch-daily-table.watch-compact-table tr>.watch-chip-cell{width:auto}
.watch-daily-table.watch-compact-table.watch-selectable tr>:first-child{width:188px;padding-left:44px;padding-right:8px}
.watch-daily-table.watch-compact-table.watch-selectable thead tr>:first-child{padding-left:44px}
.watch-daily-table .watch-select{left:0;width:44px}
.watch-daily-table.watch-compact-table .stock-name{padding-right:0}
.watch-daily-table.watch-compact-table .watch-company{max-width:135px;font-size:11px}
.watch-comparison-table.watch-compact-table tr>:first-child{min-width:176px;width:176px}
.watch-comparison-table.watch-compact-table.watch-selectable tr>:first-child{width:194px;padding-left:42px}
.watch-comparison-table.watch-selectable .watch-stock-actions{flex-wrap:nowrap;margin-left:-30px}
.watch-comparison-table.watch-compact-table .stock-name{padding-right:0}
.watch-comparison-table.watch-compact-table .watch-company{max-width:138px}
.watch-comparison-table.watch-compact-table tr>.watch-help-col,.watch-comparison-table.watch-compact-table tr>.watch-metric-cell{width:96px;text-align:right}
.watch-scroll-hint{display:none;margin:0 0 6px}
.watch-action-short{display:none}
/* Add stocks (owner report 2026-10-26): one quiet toggle at the header's top right, open or closed, and a full-width
   panel under the header on the same edges as the view switch and the search box. The title and count share one group
   that may wrap the count, so the toggle stays on the title row and the header keeps its height in either language. */
.watchlist-view>.view-head{flex-wrap:nowrap}
.watch-head-title{display:flex;flex-wrap:wrap;align-items:baseline;gap:inherit;min-width:0}
.watch-add-toggle{flex:none;margin-left:auto;display:inline-flex;align-items:center;gap:6px;min-width:44px;min-height:44px;padding:0 8px;border:0;border-radius:6px;background:none;color:var(--accent-text);font:inherit;font-size:13px;line-height:1.3;cursor:pointer}
/* A drawn triangle, the size of the disclosure marker it replaces, in every font (a glyph can turn into an emoji). */
.watch-add-toggle::before{content:'';flex:none;border-style:solid;border-width:4.5px 0 4.5px 7px;border-color:transparent transparent transparent currentColor;transition:transform .12s}
.watch-add-toggle[aria-expanded=true]::before{transform:rotate(90deg)}
.watch-add-toggle:hover{background:var(--surface-2)}
.watch-add-panel{margin:0 0 var(--app-gap,12px)}
.watch-add-intro{margin:0 0 8px;font-size:var(--app-subtitle,13px);line-height:1.5}
.watch-add-panel .add-row{margin:0}
@media(prefers-reduced-motion:reduce){.watch-add-toggle::before{transition:none}}
/* First visit: a stock selection workspace, using the available content width. */
.watch-first-use{width:100%;margin:8px 0 20px;text-align:left}
.watch-starters-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}
.watch-starters-heading h2{font-size:18px;margin:0;line-height:1.4}
.watch-starters-heading>a{display:flex;align-items:center;min-height:44px;font-size:13px}
.watch-starters-date,.watch-starters-basis{display:inline;margin:0;font-size:12px;line-height:1.5}
.watch-starters-date:not([hidden])+.watch-starters-basis::before{content:' · '}
.watch-starters-status p{margin:6px 0;font-size:13px;line-height:1.5}
.watch-starters-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:14px}
.watch-starter{min-width:0;display:flex;flex-direction:column;padding:14px 16px;background:var(--surface);border:1px solid var(--border);border-radius:10px}
.watch-starter-open{min-width:0;min-height:44px;display:flex;align-items:center;text-decoration:none;color:var(--text)}
.watch-starter-identity{display:flex;flex-direction:column;gap:3px;min-width:0}
.watch-starter-identity strong{font-size:18px;line-height:1.25}
.watch-starter-identity>span{font-size:13px;color:var(--muted);overflow-wrap:anywhere;line-height:1.4}
.watch-starter-count{font-size:13px;line-height:1.5;margin:10px 0;display:flex;flex-wrap:wrap;gap:2px 10px}
.watch-starter-count-full{display:flex;flex-wrap:wrap;gap:2px 10px}
.watch-starter-count-compact{display:none}
.watch-starter-actions{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;margin-top:auto}
.watch-starter-actions a{display:flex;align-items:center;min-height:44px;font-size:12px;text-decoration:none;color:var(--text)}
.watch-starter-actions .btn{min-height:44px;font-size:13px;padding:8px 12px;white-space:nowrap}
.watch-starter-add.is-added{background:var(--surface-2);color:var(--text);border-color:var(--border);opacity:1}
.watch-starter-feedback{font-size:13px;line-height:1.5;margin:8px 0 0;color:var(--red)}
.watch-starters-done{min-height:44px;font-size:13px;padding:7px 10px;line-height:1.3;max-width:65%}
.watch-starter a:hover,.watch-starter a:focus-visible{color:var(--accent-text,var(--accent))}
@media(max-width:1180px){.watch-starters-list{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:700px){.watch-starters-list{grid-template-columns:1fr}}
.watch-research-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:start}
.watch-research-card{min-width:0;border:1px solid var(--border);border-radius:14px;background:var(--surface);overflow:hidden}
.watch-research-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:18px 18px 14px}
.watch-research-heading .stock-name{display:flex;flex-direction:column;gap:4px;min-width:0;min-height:44px}
.watch-research-heading .stock-name strong{font-size:20px;letter-spacing:.01em}
.watch-research-heading .stock-name>span{font-size:12px;line-height:1.5}
.watch-research-price{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:3px 8px;text-align:right;min-width:110px}
.watch-research-price .watch-price-link{min-height:32px;display:flex;align-items:center;font-size:20px}
.watch-research-price>small{width:100%;font-size:10px;line-height:1.4}
.watch-reference-strip{padding:12px 18px;background:var(--surface-2);border-block:1px solid var(--border)}
.watch-reference-values{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.watch-reference-level{display:flex;flex-direction:column;gap:5px;min-height:44px;text-decoration:none;line-height:1.45}
.watch-reference-level>span{font-size:11px}
.watch-reference-level>strong{font-size:16px;font-weight:600}
.watch-reference-level:hover>strong{color:var(--accent-text,var(--accent))}
.watch-research-footer{border-top:1px solid var(--border);padding:8px 14px;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.watch-research-footer .watch-stock-actions{margin:0}
.watch-research-footer .watch-stock-actions>a{flex-direction:row;font-size:12px;padding:6px 9px;gap:6px}
.watch-disclosures-link{font-size:12px;min-height:44px;display:flex;align-items:center}
@media(max-width:1180px){.watch-scroll-hint{display:block}}
@media(max-width:980px){.watch-research-grid{grid-template-columns:1fr}}
@media(max-width:580px){
 .watchlist-view{font-size:13px;line-height:1.5}
 .watchlist-view>.view-head{gap:6px;margin-bottom:2px}
 .watchlist-view>.view-head h1{font-size:18px;line-height:1.25;margin:0}
 .watchlist-view>.view-head .count{font-size:11px}
 .watch-add-toggle{font-size:12px;padding:0 6px}
 .watchlist-view .watch-controls{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:5px;margin:4px 0 6px}
 .watchlist-view .watch-modes{grid-template-columns:repeat(4,minmax(0,1fr));width:100%}
 .watchlist-view .watch-modes .btn{min-height:44px;padding:6px 3px;align-items:center;text-align:center}
 .watchlist-view .watch-mode-title{font-size:12px}
 .watchlist-view .watch-mode-purpose{display:none}
 .watchlist-view .watch-controls .watch-search{grid-column:1;grid-row:1;min-width:0;width:100%}
 .watchlist-view .watch-controls>button{grid-column:2;grid-row:1;min-width:44px;padding-inline:9px}
 .watchlist-view .watch-controls .watch-filter{font-size:16px;min-height:44px}
 .watch-mode-note{font-size:11px;line-height:1.4;margin:0 0 5px}
 .watchlist-view .watch-session{font-size:11px;line-height:1.4;margin:4px 0}
 .watch-daily-table.watch-compact-table{min-width:560px;font-size:13px}
 .watchlist-view .watch-compact-table th,.watchlist-view .watch-compact-table td{padding:5px 6px}
 .watchlist-view .watch-compact-table thead th{height:44px;padding-block:0;font-size:11px}
 .watch-daily-table.watch-compact-table tr>:first-child,.watch-daily-table.watch-compact-table.watch-selectable tr>:first-child{width:150px;padding-left:44px;padding-right:5px}
 .watch-daily-table.watch-compact-table.watch-selectable thead tr>:first-child{padding-left:44px}
 .watch-daily-table .watch-select{width:44px;left:0}
 .watch-daily-table.watch-compact-table tr>:nth-child(2){width:86px}
 .watch-daily-table.watch-compact-table tr>:nth-child(3){width:92px}
 .watch-daily-table.watch-compact-table .watch-company{max-width:101px;font-size:11px;line-height:1.35}
 .watchlist-view .watch-compact-table .stock-name strong{font-size:14px;line-height:1.3}
 .watchlist-view .watch-compact-table .watch-price-link{min-height:44px;display:inline-flex;align-items:center;padding:0;font-size:13px}
 .watchlist-view .watch-compact-table .watch-change{font-size:12px;margin-bottom:2px}
 .watchlist-view .watch-compact-table .watch-quote-cell>small{font-size:11px;line-height:1.35}
 .watch-comparison-table.watch-compact-table tr>:first-child,.watch-comparison-table.watch-compact-table.watch-selectable tr>:first-child{min-width:150px;width:150px;padding-left:44px;padding-right:5px}
 .watch-comparison-table.watch-compact-table .watch-company{max-width:101px;font-size:11px;line-height:1.35}
 .watch-comparison-table .watch-select{width:44px;left:0}
 /* Reuse the selection gutter below the identity, keeping all three 44px actions. */
 .watchlist-view .watch-compact-table .watch-stock-actions{gap:0;flex-wrap:nowrap;margin:0 0 0 -38px}
 .watch-compact-table .watch-stock-actions>a{font-size:11px;min-width:44px;min-height:44px;padding:3px}
 .watchlist-view .watch-compact-table tbody .watch-select{top:5px}
 .watchlist-view .watch-table-scroll,.watchlist-view .watch-table-scroll:has(.watch-selectable){scroll-padding-left:150px;border-radius:8px}
 .watch-scroll-hint{font-size:11px;line-height:1.35;margin:0 0 4px}
 .watchlist-view .watch-compact-table .watch-metric-value{font-size:13px}
 .watchlist-view .watch-compact-table .watch-metric-note,.watchlist-view .watch-compact-table .watch-metric-status{font-size:11px;line-height:1.35}
 .watch-first-use{margin:4px 0 12px}
 .watch-starters-heading{gap:6px;position:sticky;top:0;z-index:2;background:var(--bg);min-height:44px}
 .watch-starter a,.watch-starter button{scroll-margin-block:68px}
 .watch-starters-heading h2{font-size:16px}
 .watch-starters-heading>a,.watch-starters-date,.watch-starters-basis{font-size:12px}
 .watch-starters-list{margin-top:6px;gap:0;border-top:1px solid var(--border)}
 .watch-starter{display:grid;grid-template-columns:minmax(0,1fr) auto auto;column-gap:10px;padding:3px 0;border:0;border-bottom:1px solid var(--border);border-radius:0;background:none}
 .watch-starter-open{grid-column:1/3;grid-row:1;min-height:44px}
 .watch-starter-identity{flex-direction:row;flex-wrap:nowrap;align-items:baseline;gap:3px 8px;width:100%}
 .watch-starter-identity strong{font-size:17px}
 .watch-starter-identity>span{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
 .watch-starter-count{grid-column:1;grid-row:2;align-self:center;margin:0;font-size:11px;line-height:1.3}
 .watch-starter-count-full{display:none}
 .watch-starter-count-compact{display:inline}
 .watch-starter-actions{display:contents}
 .watch-starter-actions .btn{grid-column:3;grid-row:1;padding:6px 10px;font-size:12px;min-width:72px;justify-self:end}
 .watch-starter-actions .watch-starter-research{display:none}
 .watch-starter-actions .watch-starter-map{grid-column:3;grid-row:2;justify-self:end;justify-content:center;min-width:72px;min-height:44px;font-size:12px;color:var(--muted)}
 .watch-starter-feedback{grid-column:1/-1;margin:4px 0}
 .watch-research-grid{gap:8px}
 .watch-research-card{border-radius:9px}
 .watch-research-heading{padding:10px 10px 8px;gap:8px}
 .watch-research-heading .stock-name{gap:2px}
 .watch-research-heading .stock-name strong{font-size:18px}
 .watch-research-heading .stock-name>span{font-size:11px;line-height:1.35}
 .watch-research-price{gap:0 6px;min-width:100px;font-size:12px}
 .watch-research-price .watch-price-link{font-size:18px;min-height:44px}
 .watch-research-price>small{font-size:11px;line-height:1.35}
 .watch-reference-strip{padding:6px 10px}
 .watch-reference-values{gap:6px}
 .watch-reference-level{gap:2px}
 .watch-reference-level>span{font-size:11px;line-height:1.35}
 .watch-reference-level>strong{font-size:14px;line-height:1.35}
 .watch-research-footer{padding:3px 6px;gap:0}
 .watch-research-footer .watch-stock-actions>a{padding-inline:5px;font-size:11px}
 .watch-disclosures-link{font-size:11px}
}
/* A phone can read one complete column beside the frozen stock identity.
   Native two-axis gestures remain available; only the table pans horizontally. */
@media(max-width:580px){
 body.page-app .watchlist-view .watch-table-scroll{overscroll-behavior-x:contain;scrollbar-width:thin}
 body.page-app .watchlist-view .watch-table-scroll:has(.watch-daily-table){scroll-padding-left:138px}
 body.page-app .watchlist-view .watch-daily-table{--watch-reading-width:clamp(150px,calc(100vw - 164px),224px);min-width:calc(320px + var(--watch-reading-width))}
 body.page-app .watchlist-view .watch-daily-table.watch-selectable tr>:first-child{width:138px}
 body.page-app .watchlist-view .watch-daily-table tr>:nth-child(3){width:96px}
 body.page-app .watchlist-view .watch-daily-table tr>.watch-chip-col,body.page-app .watchlist-view .watch-daily-table tr>.watch-chip-cell{width:var(--watch-reading-width)}
 body.page-app .watchlist-view .watch-daily-table .watch-company{max-width:89px}
 body.page-app .watchlist-view .watch-daily-table .watch-stock-actions{margin-left:-43px}
 body.page-app .watchlist-view .watch-daily-table .watch-stock-actions>a{width:44px;min-width:44px;padding-inline:0;font-size:11px}
 body.page-app .watchlist-view .watch-daily-table .watch-action-full{display:none}
 body.page-app .watchlist-view .watch-daily-table .watch-action-short{display:inline}
 /* Indicators uses the same row actions: the long English labels ("Open map", "Indicators") overflow 44 px (sweep 2026-10-23). */
 body.page-app .watchlist-view .watch-indicators-table .watch-stock-actions>a{width:44px;min-width:44px;padding-inline:0;font-size:11px}
 body.page-app .watchlist-view .watch-indicators-table .watch-action-full{display:none}
 body.page-app .watchlist-view .watch-indicators-table .watch-action-short{display:inline}
}


/* U-01 (upgrade pack 2026-10-11): the collapsed row is price, one verdict sentence and the latest
   event badge; the full reading, both perspectives and the recorded-data line open below it. */
.watch-column-chooser{margin:0 0 8px}
.watch-column-options{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:0 12px}
.watch-column-option{display:flex;align-items:center;gap:8px;min-height:44px;font-size:13px;cursor:pointer}
.watch-column-option input{width:18px;height:18px;margin:0;flex:none}
.watch-column-foot{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;margin-top:4px}
.watch-column-foot .btn{min-height:44px;white-space:nowrap}
.watchlist-view .add-row>.btn{white-space:nowrap}
.watch-column-foot p{margin:0}
@media(max-width:580px){
 .watch-column-options{grid-template-columns:repeat(2,minmax(0,1fr))}
 .watch-column-option{font-size:12px}
}

/* Watchlist mode switch and column chooser on the site tokens (the shell keeps them too, so opening the watchlist recolours nothing). */
.watchlist-beta .watch-modes{border-color:var(--db-line-strong);background:var(--db-paper)}
.watchlist-beta .watch-modes .btn+.btn{border-color:var(--db-line)}
.watchlist-beta .watch-modes [aria-pressed=true]{background:var(--db-accent-soft);border-bottom-color:var(--db-accent-strong)}
.watchlist-beta .watch-modes [aria-pressed=true] .watch-mode-title{color:var(--db-accent-strong)}
.watchlist-beta .watch-column-chooser{margin:0 0 10px}
.watch-column-custom>summary{display:inline-flex;align-items:center;min-height:44px;color:var(--db-accent-strong);font-size:12px;font-weight:650;cursor:pointer}
.watch-column-custom[open]>.watch-column-options{margin-top:4px}

/* The data workbench reads like every other surface: paper rows on the site tokens (owner, 2026-10-25: no navy table).
   Rise and fall, buy and sell use --pos/--neg and --bull/--bear, so the red-up preference recolours them together. */
.watchlist-beta .watch-table-scroll{
 --watch-buy:var(--bull);--watch-sell:var(--bear);
 border-color:var(--db-line);border-radius:10px;background:var(--db-paper);
 scrollbar-color:var(--db-line-strong) var(--db-paper);
}
.watchlist-beta .watch-compact-table th,.watchlist-beta .watch-compact-table td{background:var(--db-paper);border-color:var(--db-line);color:var(--db-ink)}
.watchlist-beta .watch-compact-table tr:nth-child(even)>*{background:var(--db-canvas-2)}
.watchlist-beta .watch-compact-table tbody tr:hover>*{background:color-mix(in srgb,var(--db-accent-soft) 70%,var(--db-paper))}
.watchlist-beta .watch-compact-table tbody tr.is-selected>*{background:var(--db-accent-soft)}
.watchlist-beta .watch-compact-table thead th{background:var(--db-paper-2);color:var(--db-muted);border-bottom-color:var(--db-line-strong)}
.watchlist-beta .watch-compact-table tr>:first-child{border-right-color:var(--db-line-strong)}
.watchlist-beta .watch-compact-table .ticker-symbol{color:var(--db-accent-strong)}
.watchlist-beta .watch-compact-table .watch-company{color:var(--db-muted)}
.watchlist-beta .watch-compact-table .stock-name,.watchlist-beta .watch-compact-table .watch-price-link{color:var(--db-ink)}
.watchlist-beta .watch-compact-table .watch-stock-actions>a{color:var(--db-muted)}
.watchlist-beta .watch-compact-table .watch-stock-actions>a:hover{background:var(--db-accent-soft);color:var(--db-accent-strong)}
.watchlist-beta .watch-compact-table .watch-up{color:var(--pos)}
.watchlist-beta .watch-compact-table .watch-down{color:var(--neg)}
.watchlist-beta .watch-signal-flag.is-yes{color:var(--watch-buy);border-color:color-mix(in srgb,var(--watch-buy) 55%,var(--db-line));background:color-mix(in srgb,var(--watch-buy) 12%,transparent)}
.watchlist-beta .watch-signal-flag.is-sell{color:var(--watch-sell);border-color:color-mix(in srgb,var(--watch-sell) 55%,var(--db-line));background:color-mix(in srgb,var(--watch-sell) 12%,transparent)}
.watchlist-beta .watch-signal-event.is-sell,.watchlist-beta .watch-signal-event.is-trim{color:var(--watch-sell)}
.watchlist-beta .watch-signal-item.is-sell,.watchlist-beta .watch-signal-item.is-trim{border-color:color-mix(in srgb,var(--watch-sell) 45%,var(--db-line))}
.watchlist-beta .watch-balance-buy{background:var(--watch-buy)}
.watchlist-beta .watch-balance-sell{background:var(--watch-sell)}
.watchlist-beta .watch-range-track{background:linear-gradient(90deg,color-mix(in srgb,var(--watch-buy) 72%,var(--db-line)),var(--db-line-strong) 50%,color-mix(in srgb,var(--watch-sell) 72%,var(--db-line)))}
.watchlist-beta .watch-range-dot{background:var(--db-paper-strong);border-color:var(--db-ink)}
.watchlist-beta .watch-signal-help{background:var(--db-paper-2);border-color:var(--db-line-strong);color:var(--db-muted)}
.watchlist-beta .watch-sort:focus-visible,.watchlist-beta .watch-signal-help:focus-visible{outline-color:var(--db-focus)}

/* Owner review 2026-10-24. List: a clean quote list (stock, price and day change, year to date, signal chips). Overview:
   cards lead with dated views, one as-of date, sources behind 来源. Indicators: the four column focuses as one connected
   segmented control (44 px targets) and bars for year to date, relative strength and the 52-week drawdown. */
.watch-chips{display:flex;flex-wrap:wrap;gap:4px;min-width:0}
.watch-chip{display:inline-flex;align-items:center;min-height:22px;padding:2px 8px;border:1px solid currentColor;border-radius:999px;font-size:11px;font-weight:600;line-height:1.3;white-space:nowrap}
.watch-chip.is-buy{color:var(--watch-buy,var(--pos));background:color-mix(in srgb,var(--watch-buy,var(--pos)) 12%,transparent)}
.watch-chip.is-sell{color:var(--watch-sell,var(--neg));background:color-mix(in srgb,var(--watch-sell,var(--neg)) 12%,transparent)}
.watch-chip.is-mixed,.watch-chip.is-level{color:var(--muted);border-color:var(--border)}
.watch-compact-table .watch-chip-col{min-width:180px}
/* The chips start at the cell's left edge, so their header does too (owner request 2026-10-25); on wider screens the
   header takes the cells' 12 px inset (phones give both 6 px). */
.watch-compact-table th.watch-chip-col{text-align:left}
@media(min-width:601px){.watch-compact-table th.watch-chip-col{padding-left:12px}}
/* While /me/watchlist-signals is on its way, a disclosure cell holds its pill and bar places and the list one quiet chip.
   Both are positioned so their screen-reader text stays inside the table's own scroll region. */
.watch-signal[aria-busy=true],.watch-chip.is-loading{position:relative}
.watch-signal-skeleton{width:92px;height:20px;border-radius:999px}
.watch-signal-skeleton.is-bar{width:100%;max-width:124px;height:4px;margin-top:3px;border-radius:2px}
.watch-chip.is-loading{min-width:72px;border-color:var(--border)}
.watch-chip.is-loading>.watch-skeleton-cell{width:52px;height:8px}
.watch-metric-bar{position:relative;display:block;width:64px;height:4px;margin-top:5px;border-radius:2px;background:color-mix(in srgb,currentColor 18%,transparent);overflow:hidden}
.watch-metric-bar>i{position:absolute;top:0;bottom:0;border-radius:2px;background:currentColor}
.watch-metric-bar.is-diverging::after{content:'';position:absolute;left:50%;top:0;bottom:0;width:1px;background:color-mix(in srgb,currentColor 55%,transparent)}
.watch-metric-bar.is-diverging.watch-up>i{left:50%;width:calc(var(--share)*50%)}
.watch-metric-bar.is-diverging.watch-down>i{right:50%;width:calc(var(--share)*50%)}
.watch-metric-bar.is-distance>i{right:0;width:calc(var(--share)*100%)}
.watch-column-chooser{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;margin:0 0 10px}
.watch-column-focus.studio-seg{max-width:100%;border-color:color-mix(in srgb,var(--accent) 45%,var(--border))}
.watch-column-focus.studio-seg>button[aria-pressed=true]{background:color-mix(in srgb,var(--accent) 22%,var(--surface));color:var(--text);font-weight:700;box-shadow:inset 0 -2px 0 var(--accent)}
.watch-column-focus.studio-seg>button{min-height:44px;padding:8px 16px;font-size:13px}
.watch-preset-short{display:none}
.watch-research-asof{margin:0;padding:0 18px 8px;font-size:12px;line-height:1.5}
.watch-view-list{list-style:none;margin:0;padding:2px 18px 14px;display:grid;gap:10px}
.watch-view-item{min-width:0;border-left:3px solid var(--border);padding:1px 0 1px 10px}
.watch-view-item.is-support{border-left-color:var(--pos)}
.watch-view-item.is-counter{border-left-color:var(--neg)}
.watch-view-meta{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;margin:0 0 2px;font-size:12px;line-height:1.5;color:var(--muted)}
.watch-view-stance{font-weight:700}
.watch-view-stance.is-support{color:var(--pos)}
.watch-view-stance.is-counter{color:var(--neg)}
.watch-view-who{color:var(--text);font-weight:600}
.watch-view-repeat{padding:0 7px;border:1px solid var(--border);border-radius:999px;font-size:11px}
.watch-view-claim{margin:0;font-size:14px;line-height:1.6;color:var(--text);overflow-wrap:anywhere}
.watch-fact-list{margin:0;padding:2px 18px 14px 36px;display:grid;gap:5px;font-size:13px;line-height:1.6}
.watch-research-state{margin:0;padding:2px 18px 14px}
.watch-research-sources{padding:0 18px 10px}
.watch-research-sources>summary{display:list-item;padding:13px 0;line-height:18px;cursor:pointer;font-size:12px;color:var(--accent-text,var(--accent))}
.watch-source-list{list-style:none;margin:0 0 4px;padding:0;display:grid;gap:4px}
.watch-source-list>li{display:flex;flex-wrap:wrap;align-items:center;gap:2px 10px;font-size:12px;line-height:1.5}
.watch-source-list .btn{min-height:44px;margin-left:auto}
@media(max-width:580px){
 .watch-column-focus.studio-seg{display:flex;width:100%}
 .watch-column-focus.studio-seg>button{flex:1 1 0;min-width:0;padding:6px 4px;font-size:12px}
 .watch-preset-full{display:none}
 .watch-preset-short{display:inline}
 .watch-research-asof{padding:0 10px 6px;font-size:11px}
 .watch-view-list{padding:2px 10px 10px;gap:8px}
 .watch-view-claim{font-size:13px;line-height:1.55}
 .watch-fact-list{padding:2px 10px 10px 26px;font-size:13px;line-height:1.5}
 .watch-research-state{padding:2px 10px 10px}
 .watch-research-sources{padding:0 10px 8px}
 .watch-compact-table .watch-chip-col{min-width:150px}
}

/* The research map's entries (owner 2026-10-24, mockup v6): a tinted accent surface, an accent ring and the
   12-curious duck. Tokens only; inside the beta table they resolve to the table's own dark set. */
.watch-modes.has-map{grid-template-columns:repeat(4,minmax(0,1fr)) minmax(0,1.35fr)}
.watch-modes .watch-mode-map{display:flex;align-items:center;gap:12px;min-width:0;min-height:64px;padding:4px 16px 4px 8px;border-left:1px solid var(--border);
 background:color-mix(in srgb,var(--accent) 14%,var(--surface));box-shadow:inset 0 0 0 2px var(--accent);color:var(--text);text-decoration:none}
.watch-modes .watch-mode-map:hover{background:color-mix(in srgb,var(--accent) 22%,var(--surface))}
.watch-modes .watch-mode-map:focus-visible{outline:2px solid var(--accent);outline-offset:-6px}
.watch-mode-map .research-map-duck{flex:0 0 64px;width:64px;height:64px}
.watch-mode-map-text{display:grid;gap:3px;min-width:0;flex:1}
.watch-mode-map-title{font-size:15px;font-weight:700;line-height:1.3;color:color-mix(in srgb,var(--accent) 60%,var(--text))}
.watch-mode-map-subline{font-size:12px;line-height:1.4;color:var(--text);text-wrap:balance}
.watch-mode-map .research-map-chevron{flex:0 0 18px;color:color-mix(in srgb,var(--accent) 60%,var(--text))}
@media(max-width:1100px){
 .watch-modes.has-map{grid-template-columns:repeat(4,minmax(0,1fr))}
 .watch-modes .watch-mode-map{grid-column:1/-1;min-height:52px;gap:10px;padding:4px 14px 4px 6px;border-left:0;border-top:1px solid var(--border)}
 .watch-mode-map .research-map-duck{flex-basis:40px;width:40px;height:40px}
 .watch-mode-map-title{font-size:14px}
}
.research-map-pill{display:inline-flex;align-items:center;gap:6px;min-height:44px;min-width:44px;padding:0 14px 0 6px;border:1px solid color-mix(in srgb,var(--accent) 55%,var(--border));
 border-radius:999px;background:color-mix(in srgb,var(--accent) 12%,var(--surface));color:color-mix(in srgb,var(--accent) 60%,var(--text));font-size:13px;font-weight:650;line-height:1.2;text-decoration:none;white-space:nowrap}
.research-map-pill:hover,.research-map-pill:focus-visible{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 20%,var(--surface));color:color-mix(in srgb,var(--accent) 60%,var(--text))}
.research-map-pill .research-map-duck{flex:0 0 28px;width:28px;height:28px;transition:transform .18s ease-out}
.research-map-pill:is(:hover,:focus-visible) .research-map-duck{transform:translateY(-2px) rotate(-4deg)}
.snap>.research-map-pill{margin:12px 0 4px}
/* In a row's action group the pill keeps its own surface over the plain icon links beside it. */
.watch-stock-actions>a.research-map-pill{flex-direction:row;gap:5px;padding:0 12px 0 5px;border:1px solid color-mix(in srgb,var(--accent) 55%,var(--border));border-radius:999px;
 background:color-mix(in srgb,var(--accent) 12%,var(--surface));color:color-mix(in srgb,var(--accent) 60%,var(--text));font-size:12px;font-weight:650}
.watch-stock-actions>a.research-map-pill:hover,.watch-stock-actions>a.research-map-pill:focus-visible{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 20%,var(--surface));color:color-mix(in srgb,var(--accent) 60%,var(--text))}
/* Table cells are narrow: the duck sits over the short label, like the icon links beside it. */
.watch-compact-table .watch-stock-actions>a.research-map-pill{flex-direction:column;gap:1px;padding:3px 6px 4px;border-radius:12px;font-size:10px;line-height:1.2}
.watch-compact-table .watch-stock-actions>a.research-map-pill:hover,.watch-compact-table .watch-stock-actions>a.research-map-pill:focus-visible{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 20%,var(--surface));color:color-mix(in srgb,var(--accent) 60%,var(--text))}
.watch-compact-table .research-map-pill .watch-action-full{display:none}
.watch-compact-table .research-map-pill .watch-action-short{display:inline}
@media(prefers-reduced-motion:reduce){
 .research-map-pill .research-map-duck{transition:none}
 .research-map-pill:is(:hover,:focus-visible) .research-map-duck{transform:none}
}

/* Phones (owner 2026-10-25): a table row is the stock — ticker and company, the map's duck and ⋯ (its Indicators and alert
   links in a bottom sheet); a tap anywhere else in the row opens the stock. The view switch is the one row that sticks;
   the research map card follows it and scrolls away. Wider screens keep the three row actions inline. */
.watch-row-more{display:none}
@media(max-width:600px){
 body.page-app .watchlist-view>.watch-mode-map{display:flex;align-items:center;gap:10px;min-height:52px;margin:0 0 8px;padding:4px 14px 4px 6px;border:1px solid color-mix(in srgb,var(--accent) 45%,var(--border));
  border-radius:10px;background:color-mix(in srgb,var(--accent) 8%,var(--surface));color:var(--text);text-decoration:none}
 body.page-app .watchlist-view>.watch-mode-map[hidden]{display:none}
 body.page-app .watchlist-view>.watch-mode-map .research-map-duck{flex:0 0 40px;width:40px;height:40px}
 body.page-app .watchlist-view>.watch-mode-map .watch-mode-map-title{font-size:14px}
 body.page-app .watchlist-view .watch-compact-table tbody tr{cursor:pointer;-webkit-tap-highlight-color:transparent}
 /* The selection bar scrolls with the page: the view switch is the only row that sticks. */
 body.page-app .watchlist-view>.watch-bulk{position:static}
 body.page-app .watchlist-view .watch-compact-table tbody tr:active>:is(th,td){background:var(--surface-2)}
 body.page-app .watchlist-view .watch-compact-table tbody :is(th,td){padding-block:4px}
 body.page-app .watchlist-view .watch-compact-table tbody th{padding-right:88px;vertical-align:middle}
 body.page-app .watchlist-view .watch-compact-table tbody .watch-select{top:50%;translate:0 -50%}
 body.page-app .watchlist-view .watch-compact-table .watch-stock-actions{position:absolute;top:50%;right:2px;translate:0 -50%;margin:0;gap:0;flex-wrap:nowrap}
 body.page-app .watchlist-view .watch-compact-table .watch-stock-actions>:is(.watch-metrics-link,.watch-plan-link){display:none}
 body.page-app .watchlist-view .watch-compact-table .watch-stock-actions>a.research-map-pill{width:44px;min-width:44px;height:44px;padding:0;justify-content:center;border-radius:999px}
 body.page-app .watchlist-view .watch-compact-table .watch-stock-actions>a.research-map-pill>span{display:none}
 body.page-app .watchlist-view .watch-compact-table .watch-row-more{display:inline-flex;align-items:center;justify-content:center;width:40px;height:44px;padding:0;border:0;border-radius:8px;background:transparent;color:var(--muted);cursor:pointer}
 body.page-app .watchlist-view .watch-compact-table .watch-row-more:hover{background:var(--surface-2);color:var(--text)}
 body.page-app .watchlist-view .watch-compact-table .watch-row-more .app-icon{width:20px;height:20px}
 body.page-app .watchlist-view .watch-compact-table .stock-name{min-height:0}
 /* The price is read, not a second target: the row opens the stock (a keyboard still follows the link to the chart). */
 body.page-app .watchlist-view .watch-compact-table .watch-price-link{min-height:0}
 body.page-app .watchlist-view .watch-compact-table :is(.watch-daily-table,.watch-indicators-table) tr>:first-child,
 body.page-app .watchlist-view :is(.watch-daily-table,.watch-indicators-table).watch-selectable tr>:first-child{width:196px;min-width:196px}
 body.page-app .watchlist-view .watch-table-scroll,body.page-app .watchlist-view .watch-table-scroll:has(.watch-daily-table){scroll-padding-left:196px}
 body.page-app .watchlist-view .watch-daily-table{--watch-reading-width:clamp(140px,calc(100vw - 222px),224px)}
 /* Cells stay two short lines so a row is about 52 px: a signal's latest-filing line lives in its card (the cell opens
    it), and a row's signal chips run on one line (the table scrolls sideways). */
 body.page-app .watchlist-view .watch-compact-table .watch-signal-event{display:none}
 body.page-app .watchlist-view .watch-compact-table .watch-signal-flag{white-space:nowrap}
 body.page-app .watchlist-view .watch-daily-table .watch-chips{flex-wrap:nowrap}
 body.page-app .watchlist-view .watch-daily-table tr>:is(.watch-chip-col,.watch-chip-cell){width:auto}
 body.page-app .watchlist-view .watch-compact-table .watch-wall{display:flex;flex-wrap:nowrap;align-items:center;gap:4px;white-space:nowrap}
 body.page-app .watchlist-view .watch-compact-table .watch-wall-gap{flex-basis:auto;white-space:nowrap}
 body.page-app .watchlist-view .watch-compact-table .watch-support-reference{display:flex;align-items:baseline;gap:4px;white-space:nowrap}
 body.page-app .watchlist-view .watch-compact-table :is(.watch-support-gap,.watch-range){display:none}
 body.page-app .watchlist-view .watch-compact-table .watch-company{max-width:64px}
 /* A pre-market or after-hours print keeps one short line, "盘后 +0.26%" / "Post +0.26%" (the price when there is no
    change), so the row stays about 52 px: the full line with price and time is the note's title and on the stock page. */
 body.page-app .watchlist-view .watch-compact-table tbody .watch-quote-cell:has(>.price-extended){padding-block:3px}
 body.page-app .watchlist-view .watch-compact-table .watch-quote-cell:has(>.price-extended)>:is(a,span,small){line-height:1.15;margin-bottom:0;padding-block:0}
 body.page-app .watchlist-view .watch-compact-table .watch-quote-cell>.price-extended{white-space:nowrap;overflow-wrap:normal}
 body.page-app .watchlist-view .watch-compact-table .watch-quote-cell>.price-extended::before{content:attr(data-compact-label)}
 body.page-app .watchlist-view .watch-compact-table .watch-quote-cell>.price-extended>:is(.price-extended-kind,.price-extended-clock),
 body.page-app .watchlist-view .watch-compact-table .watch-quote-cell>.price-extended:has(>.price-extended-change)>.price-extended-price{display:none}
}
/* The row's ⋯ sheet: the stock's Indicators and alert links as full-width rows. */
.watch-row-menu{display:grid;gap:8px}
.watch-row-menu>a{display:flex;align-items:center;gap:10px;min-height:48px;padding:0 14px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);font-size:15px;text-decoration:none}
.watch-row-menu>a .watch-action-short{display:none}
.watch-row-menu>a .watch-action-full{display:inline}

/* app-ux-explore.css */
/* One shared ranking: horizontal comparison, without interpreting attention as stance. */
.explore-research .focus-heading{margin-bottom:12px}
.explore-research .focus-heading h1{margin:0}
/* Three destinations stay visible on every Explore page; Calendar carries the
   wider event surface (earnings, macro/policy disclosures and company events). */
.explore-primary-tools{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,2fr);gap:10px;margin:16px 0 20px}
.explore-primary-tools>a{display:flex;align-items:center;gap:12px;min-width:0;min-height:88px;padding:14px 16px;background:var(--surface);border:1px solid var(--border);border-radius:9px;color:var(--text);text-decoration:none}
.explore-primary-tools>a:hover{background:var(--surface-2);border-color:var(--accent)}
.explore-primary-tools>a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.explore-primary-tools>a[aria-current=page]{border-bottom:3px solid var(--accent)}
.explore-primary-tools .app-icon{width:24px;height:24px;flex-shrink:0;color:var(--accent-text,var(--accent))}
.explore-destination-copy{display:flex;flex-direction:column;gap:5px;min-width:0}
.explore-destination-copy>strong{font-size:18px;line-height:1.35;font-weight:700}
.explore-destination-copy>span{font-size:13px;line-height:1.45;color:var(--muted)}
.explore-entry-arrow{margin-left:auto;font-size:28px;line-height:1;color:var(--accent-text,var(--accent))}
.explore-research>.search-box{max-width:none;margin-bottom:14px}
.explore-research>.search-box>.input{font-size:16px;width:100%;min-height:44px}
.explore-section-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}
.explore-section-heading h2{margin:0;font-size:18px}
.explore-section-heading>.btn{min-height:44px}
.explore-data-date{margin:0 0 4px;font-size:12px;line-height:1.45}
.explore-ranking-key{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;margin:0 0 9px;font-size:11px;line-height:1.45;color:var(--muted)}
.explore-read-notice:empty{display:none}
.explore-read-notice:not(:empty){padding:9px 12px;margin-bottom:10px;border:1px solid var(--border);border-radius:6px;background:var(--surface)}
.explore-read-notice p{margin:0;line-height:1.5}
.explore-read-notice>.btn{margin-top:6px}
.explore-stock-list{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:1px;background:var(--border);border:1px solid var(--border);border-radius:8px;overflow:hidden}
.explore-stock-list:empty{display:none}
.explore-stock-list>.spinner-row,.explore-stock-list>.explore-empty{grid-column:1/-1;background:var(--surface)}
.explore-stock-row{min-width:0;background:var(--surface);display:flex;flex-direction:column}
.explore-stock-open{display:flex;flex-direction:column;gap:3px;flex:1;padding:11px 12px 7px;min-height:70px;color:var(--text);text-decoration:none}
.explore-stock-open:hover{background:var(--surface-hover,var(--bg))}
.explore-stock-open:hover .explore-stock-symbol{color:var(--accent-text,var(--accent));text-decoration:underline;text-underline-offset:3px}
.explore-stock-identity{display:flex;align-items:center;gap:8px;min-width:0;line-height:1.3}
.explore-rank{color:var(--muted);font-variant-numeric:tabular-nums;font-size:11px;min-width:15px}
.explore-stock-symbol{font-size:16px;font-weight:650;overflow-wrap:anywhere}
.explore-company{color:var(--muted);font-size:11px;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.explore-attention{display:flex;align-items:baseline;justify-content:space-between;gap:6px;font-variant-numeric:tabular-nums;line-height:1.35}
.explore-mention-count{font-size:22px;font-weight:650;overflow-wrap:anywhere}
.explore-mention-change{font-size:12px;color:var(--muted);white-space:nowrap}
.explore-measure-description{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.explore-stock-routes{display:grid;grid-template-columns:1fr 1fr;gap:0;border-top:1px solid var(--border);margin-top:auto}
.explore-stock-routes>.stock-open{display:flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;color:var(--muted);font-size:11px;text-decoration:none}
.explore-stock-routes>.stock-open:hover{color:var(--accent-text,var(--accent));background:var(--surface-hover,var(--bg))}
.explore-stock-open:focus-visible,.explore-stock-routes>.stock-open:focus-visible{outline:2px solid var(--accent);outline-offset:-3px}
.explore-show-all{display:flex;min-height:44px;margin:6px auto 0;font-size:12px}
.explore-show-all[hidden]{display:none}
.explore-weekly,.explore-more-tools{border-bottom:1px solid var(--border);padding:4px 0}
.explore-weekly>summary,.explore-more-tools>summary{cursor:pointer;min-height:44px;align-content:center;font-size:13px;font-weight:550;line-height:1.6}
.explore-weekly>summary>.small{margin-left:10px;font-size:11px;font-weight:400}
.explore-weekly>.small{line-height:1.6;margin:4px 0 12px}
.explore-week-feed .focus-today{max-width:none}
.explore-more-tools .focus-tool-links{margin:8px 0}
.explore-empty{padding:16px;line-height:1.6}
.explore-empty p{margin:0 0 10px;color:var(--muted)}
@media(min-width:761px) and (max-width:1150px){
 .explore-stock-list{grid-template-columns:repeat(4,minmax(0,1fr))}
}
@media(max-width:760px){
 .explore-research .focus-heading{margin:0 0 2px}
 .explore-research .focus-heading h1{font-size:18px;line-height:1.25;margin:0}
 .explore-primary-tools{grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1.4fr);gap:4px;margin:6px 0 8px}
 .explore-primary-tools>a{min-height:44px;padding:6px 3px;justify-content:center;align-items:center;text-align:center;border-radius:6px}
 .explore-primary-tools .app-icon,.explore-primary-tools .explore-entry-arrow{display:none}
 .explore-destination-copy{gap:3px}
 .explore-destination-copy>strong{font-size:12px}
 .explore-destination-copy>span{display:none}
 .explore-research>.search-box{margin-bottom:5px}
 .explore-section-heading{gap:8px}
 .explore-section-heading h2{font-size:15px}
 .explore-section-heading>.btn{font-size:11px;padding-left:10px;padding-right:10px}
 .explore-data-date{font-size:11px;line-height:1.4;margin-bottom:2px}
 .explore-ranking-key{font-size:10px;line-height:1.4;gap:2px 8px;margin-bottom:6px}
 .explore-stock-list{grid-template-columns:repeat(2,minmax(0,1fr))}
 .explore-stock-open{padding:8px 10px 6px;min-height:64px;gap:2px}
 .explore-stock-symbol{font-size:15px}
 .explore-rank{font-size:10px;min-width:13px}
 .explore-mention-count{font-size:20px}
 .explore-mention-change{font-size:11px}
 .explore-company{font-size:10px}
 .explore-stock-routes>.stock-open{font-size:11px}
 .explore-weekly>summary>.small{font-size:10px;margin-left:6px}
}

/* T-11: the discussion module loads as rows, never as a bare title. */
.explore-skeleton{display:grid;gap:8px;padding:4px 0}
.explore-skeleton-row{height:44px;border-radius:8px;background:color-mix(in srgb,var(--surface-2) 70%,var(--surface))}

/* app-ux-creators.css */
/* 财经博主: the creators page (views/creators-board.js has its own sheet, app-creator-board.css) and a stock's creator board. */
/* Keep complete views and qualifications; reclaim space around them on phones. */
@media(max-width:650px){
 .page-app .creators-view{font-size:13px;line-height:1.55;}

 .page-app .creators-view :is(input,select,textarea){font-size:16px;min-height:44px;}
}

/* Creator simulation (owner 2026-10-06): the opinion lines of the 博主榜 cards and a stock's creator board. Simulated from
   public content. */

.is-up{color:var(--pos,#16a34a)}.is-down{color:var(--neg,#dc2626)}

.csim-opinions{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.csim-opinion{display:flex;flex-wrap:wrap;gap:6px 8px;align-items:center;font-size:13px}
.csim-condition{flex-basis:100%;margin:0;color:var(--db-caution);font-size:12px;font-weight:600;line-height:1.45}
.csim-opinion-date{color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}.csim-opinion-who{font-weight:600}
.csim-stance{font-size:12px;padding:1px 8px;border-radius:999px;border:1px solid var(--border)}.csim-opinion.is-bull .csim-stance{color:var(--bull,#16a34a);border-color:color-mix(in srgb,var(--bull,#16a34a) 40%,transparent)}.csim-opinion.is-bear .csim-stance{color:var(--bear,#dc2626);border-color:color-mix(in srgb,var(--bear,#dc2626) 40%,transparent)}
.csim-source{font-size:12px}.csim-quote{flex-basis:100%;margin:0;font-size:14px;line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.csim-method-note{font-size:12px;color:var(--muted)}

.ticker-chip{display:inline-flex;align-items:center;min-height:32px;padding:2px 10px;border:1px solid var(--border);border-radius:8px;font-weight:700;color:var(--text);text-decoration:none;background:var(--surface)}
.stock-creators{display:grid;gap:10px}.stock-creators h2{font-size:18px;margin:0}.stock-creators h3{font-size:14px;margin:8px 0 0;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}
.csim-board{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.csim-board-row{display:grid;grid-template-columns:24px 44px minmax(0,1fr);gap:10px;align-items:center;padding:8px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}
.csim-rank{display:inline-grid;place-items:center;width:24px;height:24px;border-radius:50%;border:1px solid var(--border);font-size:12px}
.csim-board-name{font-weight:600;color:inherit;text-decoration:none}.csim-board-stats{display:flex;flex-wrap:wrap;gap:10px;font-size:13px;font-variant-numeric:tabular-nums}
.stock-price-marker.is-bull{fill:var(--bull,#16a34a);stroke:var(--surface);stroke-width:1.5}.stock-price-marker.is-bear{fill:var(--bear,#dc2626);stroke:var(--surface);stroke-width:1.5}
/* Creator calls on the closing chart (owner 2026-10-27): one mark per day for the net stance, the count beside it, the
   slider's day listing them with a link to the Creators tab. */
.stock-price-marker.is-mixed{fill:var(--muted);stroke:var(--surface);stroke-width:1.5}
.stock-price-marker-count{font:650 10px/1 var(--font);fill:var(--muted);paint-order:stroke;stroke:var(--surface);stroke-width:3px}
.stock-price-marker-count.is-bull{fill:var(--bull,#16a34a)}.stock-price-marker-count.is-bear{fill:var(--bear,#dc2626)}
.stock-chart-calls{display:inline-flex;flex-wrap:wrap;align-items:center;gap:4px 10px;font-size:12px}.stock-chart-calls:empty{display:none}
.stock-chart-calls-count{color:var(--muted);font-variant-numeric:tabular-nums}.stock-chart-calls-open{display:inline-flex;align-items:center;min-height:44px;font-weight:650}

/* app-ux-mobile.css */
/* Compact phone chrome; controls retain 44px hit areas and text inputs retain 16px. */
.page-app .today-lines:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}
.page-app .today-macro-help{width:44px;height:44px;min-width:44px;min-height:44px;font-size:13px}
.calendar-view .cal-phone-context,.calendar-view .cal-timezone{display:none}
@media(max-width:760px){
 .page-app .app-top{padding:calc(4px + var(--safe-top)) 12px 4px;gap:8px;min-height:52px}
 .page-app .app-top .brand{min-height:44px;display:flex;align-items:center;font-size:14px;gap:7px}
 .page-app .app-top .avatar-mark{width:30px;height:30px}
 .page-app .app-nav{padding:4px 6px calc(4px + var(--safe-bottom));gap:3px}
 .page-app .app-nav>a{min-height:44px;padding:4px 2px;gap:3px;border-radius:8px;font-size:10px;line-height:1.2}
 .page-app .app-nav .app-icon{width:18px;height:18px}
 .page-app .app-main{padding-top:8px}

 .page-app .today-digest{padding:10px;gap:7px;margin-bottom:10px;border-radius:9px}
 .page-app .today-digest-head{gap:3px;display:grid}
 .page-app .today-digest-head .today-section-title{font-size:16px;line-height:1.35}
 .page-app .today-digest-head>.small{font-size:11px;line-height:1.35}
 .page-app .today-digest-grid{gap:7px}
 .page-app .today-digest-part,.page-app .today-digest-tomorrow{font-size:13px;line-height:1.48}
 .page-app .today-digest-label{display:inline;font-size:11px;letter-spacing:0;margin-right:6px}
 .page-app .today-digest-part p,.page-app .today-digest-tomorrow p{display:inline;font-size:13px;line-height:1.48;margin:0}
 .page-app .today-digest-brief .today-digest-label{display:block;font-size:13px;margin:0 0 3px}
 .page-app .today-digest-brief .today-digest-part p{display:block}
 .page-app .today-digest-tomorrow{padding-top:7px}
 .page-app .today-digest-note{font-size:11px;line-height:1.4}

 /* Keep event controls close to the dates; full context stays in the existing filters. */
 .page-app .calendar-heading{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 8px;margin:0 0 4px}
 .page-app .calendar-heading>div{display:contents}
 .page-app .calendar-heading h1{grid-column:1;grid-row:1;margin:0;font-size:21px;line-height:1.25}
 .page-app .calendar-heading .calendar-intro,.page-app .calendar-view>.calendar-scope-summary{display:none}
 .page-app .calendar-heading .cal-timezone{display:block;grid-column:1;grid-row:2;margin:0;font-size:11px;line-height:1.4}
 .page-app .calendar-heading .cal-history-link{grid-column:2;grid-row:1 / 3;align-self:center;min-height:44px}
 .page-app .calendar-view .cal-phone-context{display:block}
 .page-app .calendar-view .cal-phone-context p{margin:6px 0;font-size:12px;line-height:1.45}
 .page-app .calendar-view .cal-toolbar{margin-top:6px}
 .page-app .calendar-view .cal-mhead{margin:6px 0}
 .page-app .calendar-view .cal-legend{gap:3px 10px;margin:0 0 3px;line-height:1.4}
 .page-app .calendar-view .cal-legend-item{gap:4px}
 .page-app .calendar-view .cal-week-head{gap:2px;margin:6px 0}
 .page-app .calendar-view .cal-week-label{margin:0 0 3px}

 /* Compare both indices in the same row instead of two phone-sized cards. */
 .page-app .calendar-view>h1{font-size:22px;line-height:1.3;margin:2px 0 4px}
 .page-app .calendar-view>p,.page-app .calendar-view .cal-note{font-size:12px;line-height:1.45;margin-bottom:8px}
 .page-app .seasonality-view{margin-top:16px}
 .page-app .seasonality-view h2{font-size:17px;line-height:1.35;margin:0 0 5px}
 .page-app .seasonality-view>p{font-size:12px;line-height:1.45;margin:5px 0}
 .page-app .seasonality-view .season-controls{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;margin:10px 0 8px}
 .page-app .seasonality-view .season-controls label{width:auto;font-size:11px;gap:3px}
 .page-app .seasonality-view .season-controls select{font-size:16px;padding:6px;min-height:44px}
 .page-app .seasonality-view .season-controls>button{grid-column:1/-1;justify-self:start;min-height:44px;padding:6px 9px;font-size:12px}
 .page-app .season-reading{margin:10px 0;padding:2px 0 2px 8px}
 .page-app .season-reading h3{font-size:14px;margin:0 0 4px}
 .page-app .season-reading p{font-size:12px;line-height:1.5}
 .page-app .season-metrics{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin:10px 0}
 .page-app .season-metrics article{padding:10px;border-radius:8px}
 .page-app .season-metrics article>b{font-size:12px;line-height:1.4;margin-bottom:5px}
 .page-app .season-metrics strong{font-size:21px;line-height:1.3;margin:4px 0 8px}
 .page-app .season-metrics article>.small{font-size:11px;line-height:1.45}
 .page-app .season-metrics p{margin:6px 0 0}
 .page-app .season-limit{font-size:11px;line-height:1.45;margin:8px 0}
 .page-app .season-details{margin-top:7px}
 .page-app .season-details>summary{min-height:44px;padding:10px 0;font-size:12px;line-height:1.6}
}
@media(max-width:360px){
 .page-app .season-metrics strong{font-size:18px;white-space:nowrap}
}

/* app-creator-opinions.css */
/* Source-led reading rows; scoped so existing compact workspaces retain their geometry. */
.creator-opinions{margin:18px 0 24px;min-width:0;color:var(--text);}
.creator-opinions [hidden]{display:none!important;}
.creator-opinions-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.creator-opinions-heading h2{font-size:19px;line-height:1.3;margin:0;}
.creator-opinions-heading .btn{min-height:44px;flex-shrink:0;}
.creator-opinions-help{position:static;transform:none;display:grid;place-items:center;flex:0 0 44px;width:44px;height:44px;min-height:44px;border:0;background:transparent;color:transparent;font-size:0;}
.creator-opinions-help::before{content:'?';display:grid;place-items:center;width:18px;height:18px;border:1px solid var(--muted);border-radius:50%;color:var(--muted);font-size:11px;font-weight:700;line-height:1;}
.creator-opinions-help:hover::before,.creator-opinions-help:focus-visible::before{border-color:var(--accent);color:var(--accent-text,var(--accent));}
.opinions-notice{font-size:12px;line-height:1.5;color:var(--muted);}
.opinions-notice p{margin:5px 0;}
.creator-opinions-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;align-items:start;}
.creator-opinion{min-width:0;padding:10px 12px;border:1px solid var(--border);border-radius:9px;background:var(--surface);overflow-wrap:anywhere;}
.creator-opinion.is-bull{border-left:3px solid var(--green);background:color-mix(in srgb,var(--green) 5%,var(--surface));}
.creator-opinion.is-bear{border-left:3px solid var(--red);background:color-mix(in srgb,var(--red) 5%,var(--surface));}
.opinion-byline{display:flex;align-items:center;flex-wrap:wrap;gap:3px 9px;font-size:12px;line-height:1.45;}
.opinion-author{font-weight:650;color:var(--text);min-height:44px;display:inline-flex;align-items:center;}
.opinion-byline time{color:var(--muted);font-size:11px;}
.opinion-stance{min-height:24px;display:inline-flex;align-items:center;border:1px solid var(--border);border-radius:999px;padding:2px 8px;white-space:nowrap;color:var(--muted);background:var(--surface-2,var(--bg));font-size:11px;font-weight:700;}
.opinion-stance.is-bull{border-color:color-mix(in srgb,var(--green) 58%,var(--border));color:var(--green);background:color-mix(in srgb,var(--green) 12%,var(--surface));}.opinion-stance.is-bear{border-color:color-mix(in srgb,var(--red) 58%,var(--border));color:var(--red);background:color-mix(in srgb,var(--red) 12%,var(--surface));}.opinion-stance.is-neutral,.opinion-stance.is-unclear{color:var(--muted);}
.opinion-subject{display:flex;align-items:center;gap:5px 9px;flex-wrap:wrap;margin:0 0 5px;font-size:12px;font-weight:600;}
.opinion-subject a{min-height:44px;display:inline-flex;align-items:center;}
.creator-opinion .opinion-subject{font-size:15px;line-height:1.5;gap:8px 12px;margin:8px 0 12px}
.creator-opinion .opinion-subject .ticker-symbol{display:inline-block;font-size:21px;font-weight:800;line-height:1.25;padding:7px 10px;border:1px solid var(--control-border,var(--border));border-radius:6px;letter-spacing:.025em}
.creator-opinion .opinion-subject a:hover .ticker-symbol{border-color:var(--accent)}
.map-current-opinions{margin:12px 0 20px;padding-bottom:8px;border-bottom:1px solid var(--border)}
.map-current-opinions .creator-opinions{margin:0}
.map-current-opinions .creator-opinions-heading h2{font-size:16px}
.opinion-intent{font-size:11px;font-weight:400;color:var(--muted);}
.opinion-claim{font-size:14px;line-height:1.65;margin:0 0 6px;}
.opinion-qualification,.opinion-speaker{font-size:12px;line-height:1.55;margin:5px 0;}
.opinion-speaker{width:max-content;max-width:100%;border-radius:999px;padding:2px 8px;color:var(--muted);background:var(--surface-2,var(--bg));overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.opinion-qualification>span,.opinion-speaker{color:var(--muted);}
.opinion-actions{display:flex;flex-wrap:wrap;gap:0 14px;align-items:start;}
.opinion-original,.opinion-records>summary{font-size:12px;min-height:44px;display:inline-flex;align-items:center;box-sizing:border-box;cursor:pointer;}
.opinion-records{min-width:0;}.opinion-records[open]{flex-basis:100%;}
.opinion-records>summary{display:list-item;align-content:center;padding:12px 0;}
.opinion-records ul{margin:0;padding:0;list-style:none;}
/* Compact takes (Today, 2026-10-24): author, date and stance, then the claim; the rest opens under 展开. */
.creator-opinion.is-compact .opinion-claim{margin:6px 0 0;}
.opinion-more>summary{display:inline-flex;align-items:center;min-height:44px;font-size:12px;color:var(--accent-text,var(--accent));cursor:pointer;}
.opinion-more[open]>summary{margin-bottom:4px;}
.opinion-more-close,.opinion-more[open]>summary>.opinion-more-open{display:none;}
.opinion-more[open]>summary>.opinion-more-close{display:inline;}
.opinion-more>.opinion-subject{margin:0 0 6px;}
.opinion-records li{border-top:1px solid var(--border);padding-top:8px;margin-top:5px;}
.opinion-record-title{font-size:12px;line-height:1.5;margin:0 0 4px;}
.opinion-records time{display:block;font-size:11px;color:var(--muted);}
.opinion-clocks{margin:0 0 6px;font-size:11px;color:var(--muted);}
.opinion-clocks>div{display:flex;gap:8px;flex-wrap:wrap;}.opinion-clocks dd{margin:0;}
.opinions-pagination{display:flex;gap:8px;flex-wrap:wrap;margin-top:5px;}
.opinions-pagination .btn{min-height:44px;font-size:12px;}
.opinions-empty{font-size:13px;color:var(--muted);margin:5px 0;}
.creator-opinions :is(a,button,summary):focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:3px;}

/* Creator views beside a research summary (research-creator-views.js): labelled opinions in their own block, never in
   the summary's sources or facts. Stance colours follow the reader's up/down setting (--bull/--bear). */
.creator-views{margin:0 0 20px;padding:12px 16px 4px;border:1px solid var(--border);border-radius:12px;background:var(--surface);min-width:0;overflow-wrap:anywhere;}
.creator-views-heading{margin:0 0 4px;}
.creator-views-heading :is(h2,h3){margin:0;font-size:13px;font-weight:650;line-height:1.5;letter-spacing:.01em;color:var(--text);}
.creator-views-note{margin:2px 0 0;font-size:12px;line-height:1.5;color:var(--muted);}
.creator-views-list{list-style:none;margin:0;padding:0;display:grid;}
/* Wide: who and when, with the source link at the end of that line; the claim below. Narrow: the link follows the claim. */
.creator-views-item{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:12px;min-width:0;margin-top:10px;padding:0 0 0 12px;border-left:3px solid var(--border);}
.creator-views-item.is-bull{border-left-color:var(--bull);}
.creator-views-item.is-bear{border-left-color:var(--bear);}
.creator-views-meta{grid-column:1;display:flex;flex-wrap:wrap;align-items:center;gap:3px 8px;margin:0;font-size:12px;line-height:1.5;color:var(--muted);}
.creator-views-meta .ticker-symbol{font-weight:700;color:var(--text);letter-spacing:.02em;}
.creator-views-stance{display:inline-flex;align-items:center;min-height:22px;padding:1px 8px;border:1px solid var(--border);border-radius:999px;font-size:11px;font-weight:700;white-space:nowrap;}
.creator-views-stance.is-bull{color:var(--bull);border-color:color-mix(in srgb,var(--bull) 55%,var(--border));background:color-mix(in srgb,var(--bull) 10%,var(--surface));}
.creator-views-stance.is-bear{color:var(--bear);border-color:color-mix(in srgb,var(--bear) 55%,var(--border));background:color-mix(in srgb,var(--bear) 10%,var(--surface));}
.creator-views-who{font-weight:650;color:var(--text);}
.creator-views-claim{grid-column:1/-1;margin:0 0 6px;font-size:14px;line-height:1.6;color:var(--text);}
.creator-views-source{grid-column:2;grid-row:1;justify-self:end;display:inline-flex;align-items:center;min-height:44px;font-size:12px;white-space:nowrap;color:var(--accent-text,var(--accent));}
.creator-views-source:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px;}
/* Every take lives in the stock's Creators tab: the block and the card's line end with the way there. */
.creator-views-all{display:inline-flex;align-items:center;min-height:44px;font-size:13px;font-weight:600;color:var(--accent-text,var(--accent));}
.creator-views-all:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px;}
/* The watchlist 概览 card's one line (creatorViewsLine): dated title, how these creators lean, the link. */
.creator-views-line{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;margin:0 18px 8px;padding:6px 0 0;border-top:1px solid var(--border);font-size:12px;line-height:1.5;color:var(--muted);}
.creator-views-line-title{font-weight:650;color:var(--text);}
.creator-views-line .creator-views-all{margin-left:auto;font-size:12px;}
@media(max-width:580px){.creator-views-line{margin:0 10px 6px;}}

@media(max-width:650px){
 .creator-views{padding:10px 12px 2px;margin-bottom:14px;}
 .creator-views-item{grid-template-columns:minmax(0,1fr);}
 .creator-views-meta{min-height:28px;}
 .creator-views-claim{margin:2px 0 0;font-size:13px;line-height:1.55;}
 .creator-views-source{grid-column:1;grid-row:auto;justify-self:start;}
 .creator-opinions{margin:10px 0 15px;}
 .creator-opinions-heading h2{font-size:18px;}
 .creator-opinions-heading .btn{font-size:12px;padding:6px 9px;}
 .creator-opinions-list{grid-template-columns:1fr;gap:7px;}
 .creator-opinion{padding:7px 10px;}
 .opinion-claim{font-size:13px;line-height:1.6;}
 .opinion-qualification{font-size:12px;line-height:1.5;}
}

/* app-ticker-identity.css */
/* Stock identity, independent of price direction and evidence stance.
   Only structured symbol leaves opt in; never infer symbols from prose. */
.page-app {
  --ticker-ink: var(--accent-text);
  --ticker-paper: color-mix(in srgb, var(--accent) 9%, var(--surface));
  --ticker-font: var(--font);
}
.page-app .ticker-symbol {
  color: var(--ticker-ink);
  background: var(--ticker-paper);
  font-family: var(--ticker-font);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  letter-spacing: .01em;
  padding: .06em .22em;
  border-radius: 3px;
  width: fit-content;
  max-width: 100%;
  white-space: nowrap;
  overflow-wrap: normal;
  text-shadow: none;
  box-decoration-break: clone;
  -webkit-box-decoration-break: clone;
}
/* Hover still signals the clickable identity without changing its meaning. */
.page-app a:hover .ticker-symbol,
.page-app a.ticker-symbol:hover {
  color: var(--ticker-ink);
  text-decoration: underline;
  text-underline-offset: .2em;
}
/* Flex identities must not stretch a short symbol's backing across the row. */
.page-app .stock-name > .ticker-symbol,
.page-app .watch-starter-identity > .ticker-symbol {
  align-self: flex-start;
}
/* Forced colors supplies its own readable identity treatment. */
@media (forced-colors: active) {
  .page-app .ticker-symbol { color: CanvasText; background: Canvas; }
}

/* app-research-starters.css */
/* Today research starters: source-ranked comparison, separate from directional views. */
.research-examples{margin:18px 0 22px}
.research-examples>h2{margin:0 0 4px;font-size:18px;line-height:1.4}
.research-examples>p{margin:0 0 5px;max-width:none;font-size:12px;line-height:1.45}
.research-examples .research-example-key{display:flex;justify-content:space-between;gap:6px 12px;flex-wrap:wrap;color:var(--muted);font-size:11px;margin-bottom:8px}
.research-examples .research-example-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:1px;border:1px solid var(--border);border-radius:8px;background:var(--border);overflow:hidden;align-items:stretch}
.research-examples .research-example{display:flex;flex-direction:column;gap:0;min-width:0;padding:0;border:0;border-radius:0;background:var(--surface);color:var(--text)}
.research-examples .research-example:hover{background:var(--surface)}
.research-example .research-example-open{display:flex;flex-direction:column;gap:3px;min-width:0;min-height:72px;flex:1;padding:9px 10px 6px;color:var(--text);text-decoration:none}
.research-example .research-example-open:hover{background:var(--surface-2)}
.research-example .research-example-identity{display:flex;align-items:center;gap:7px;min-width:0;line-height:1.3}
.research-example .research-example-rank{font-size:11px;font-variant-numeric:tabular-nums;color:var(--muted)}
.research-example .research-example-identity strong{padding-right:.22em;font-size:16px;line-height:1.3}
.research-example .research-example-company{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:1.3;color:var(--muted)}
.research-example .research-example-attention{display:flex;align-items:baseline;justify-content:space-between;gap:6px;font-variant-numeric:tabular-nums;line-height:1.35}
.research-example .research-example-count{font-size:21px;font-weight:650;overflow-wrap:anywhere}
.research-example .research-example-change{font-size:12px;color:var(--muted);white-space:nowrap}
.research-example .research-example-description{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.research-example .research-example-routes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));border-top:1px solid var(--border);margin-top:auto;font-size:12px}
.research-example .research-example-routes>a{display:flex;align-items:center;justify-content:center;gap:4px;min-height:44px;min-width:44px;padding:4px 6px;box-sizing:border-box;color:var(--muted);line-height:1.3;text-align:center;text-decoration:none;cursor:pointer}
.research-example .research-example-routes>a:only-child{grid-column:1/-1}
.research-example .research-example-routes>a:hover{background:var(--surface-2);color:var(--text)}
.research-example a:focus-visible,.research-example summary:focus-visible{outline:2px solid var(--accent);outline-offset:-3px}
@media(min-width:761px) and (max-width:1100px){.research-examples .research-example-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:760px){
 .research-examples .research-example-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
 .research-example .research-example-identity strong{font-size:15px}
 .research-example .research-example-open{padding:8px 10px 5px;min-height:68px}
 .research-example .research-example-count{font-size:20px}
}

/* app-today-compact.css */
/* Dated legacy readings remain useful without a screen-sized gauge per value. */
.today-macro-grid{align-items:start}
.today-macro-tile.today-macro-fold{display:block;padding:0}
.today-macro-fold>summary{display:flex;flex-direction:column;gap:4px;min-height:130px;padding:12px 14px;cursor:pointer;list-style:none}
.today-macro-fold>summary::-webkit-details-marker{display:none}
.today-macro-fold>summary:focus-visible{outline:2px solid var(--accent);outline-offset:-3px;border-radius:10px}
.today-macro-fold .today-macro-label{font-weight:600;color:var(--text);font-size:13px;line-height:1.4}
.today-macro-fold .today-macro-value{font-size:26px;line-height:1.15;letter-spacing:0}
.today-macro-fold .today-macro-band{font-size:12px;line-height:1.3}
.today-macro-fold .today-macro-stamp{font-size:11px;line-height:1.4}
.today-macro-expand{font-size:11px;color:var(--muted);margin-top:auto}
.today-macro-expand::after{content:' +';font-weight:700}
.today-macro-fold[open] .today-macro-expand::after{content:' −'}
.today-macro-fold-content{padding:0 14px 14px;border-top:1px solid var(--border)}
.today-macro-fold-content .today-macro-note{font-size:13px;line-height:1.5}
.today-macro-fold-content .today-gauge-wrap{max-width:180px;margin:8px auto}
.today-chart-switch{display:none}
@media(max-width:760px){
 .today-macro-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
 .today-macro-tile.today-macro-fold:has(.today-lines){grid-column:auto}
 .today-macro-tile.today-macro-fold[open]{grid-column:1/-1}
 .today-macro-fold>summary{min-height:124px;padding:10px 12px}
 .today-macro-fold .today-macro-stamp{overflow-wrap:anywhere}
 .today-market-heading{margin-bottom:8px}
 .today-market-heading .today-market-status{font-size:11px;line-height:1.4}
 .today-chart-switch{display:flex;gap:4px;margin:4px 0 8px;border-bottom:1px solid var(--border)}
 .today-chart-switch button{flex:1;min-width:44px;min-height:44px;border:0;border-bottom:2px solid transparent;background:none;color:var(--muted);font:600 13px/1.3 var(--font);padding:6px}
 .today-chart-switch button[aria-pressed=true]{color:var(--text);border-bottom-color:var(--accent)}
 .today-chart-switch button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
 .today-dashboard-chart:not(.is-selected){display:none}
 .today-dashboard-chart+.today-dashboard-chart{border:0;padding:0}
 .today-dashboard-chart>h3{display:none}
 .today-dashboard-chart .today-lines{max-height:150px}
 body.page-app .today-dashboard-metric{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"heading heading" "value value" "note date";align-content:start;gap:2px 4px;min-height:102px;padding:7px 6px}
 body.page-app .today-dashboard-metric .today-metric-heading{grid-area:heading;min-height:30px;padding-right:24px}
 body.page-app .today-dashboard-metric .today-macro-value{grid-area:value;font-size:20px;line-height:1.05}
 body.page-app .today-dashboard-metric .today-dashboard-metric-note{grid-area:note;display:-webkit-box;overflow:hidden;font-size:10px;line-height:1.25;-webkit-box-orient:vertical;-webkit-line-clamp:2}
 body.page-app .today-dashboard-metric .today-dashboard-metric-date{grid-area:date;align-self:end;max-width:48px;margin:0;padding:0;font-size:9px;line-height:1.2;text-align:right}
 body.page-app .today-dashboard-metric .today-macro-help{position:absolute;top:-7px;right:-7px;margin:0}
}
@media(max-width:350px){
 body.page-app .today-dashboard-metric{min-height:104px}
 body.page-app .today-dashboard-metric .today-macro-label{display:-webkit-box;overflow:hidden;line-height:1.25;-webkit-box-orient:vertical;-webkit-line-clamp:2}
}

/* Market mood (K index) card: the mood in words beside the duck's face, the four ordered bands with the current one
   marked, then the two inputs and the source date. Colour only supports the words; a reading without a mood keeps the
   bands unmarked and shows no duck. */
.k-mood{min-width:0;display:flex;flex-direction:column;gap:10px;color:var(--text)}
.k-mood[data-k-mood=calm]{--k-mood-tone:var(--db-positive)}
.k-mood[data-k-mood=cautious]{--k-mood-tone:var(--db-caution)}
.k-mood[data-k-mood=tense]{--k-mood-tone:var(--db-warning)}
.k-mood[data-k-mood=afraid]{--k-mood-tone:var(--db-negative)}
.k-mood-heading .today-macro-label{margin:0;font-size:14px;font-weight:650;line-height:1.4;color:var(--text)}
.k-mood-main{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:72px}
.k-mood-reading{display:flex;flex-direction:column;gap:6px;min-width:0}
.k-mood-word{font-size:34px;font-weight:700;line-height:1.1;color:var(--k-mood-tone,var(--text))}
.k-mood-word.is-empty{font-size:20px;font-weight:650;line-height:1.3;color:var(--muted)}
.k-mood-k{display:flex;align-items:baseline;gap:6px;margin:0;font-size:13px;line-height:1.3;color:var(--muted)}
.k-mood-k strong{font-size:20px;font-weight:650;color:var(--text)}
.k-mood-duck{flex:none;display:block;width:112px;height:112px;object-fit:contain}
.k-mood-duck[hidden]{display:none}
.k-mood-scale{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px;margin:0;padding:0;list-style:none}
.k-mood-scale li{display:flex;flex-direction:column;gap:5px;min-width:0;font-size:12px;line-height:1.3;color:var(--muted);text-align:center;overflow-wrap:anywhere}
.k-mood-scale li::before{content:'';height:6px;border-radius:3px;background:var(--db-line)}
.k-mood-scale li.is-current{font-weight:700;color:var(--text)}
.k-mood-scale li.is-current::before{background:var(--k-mood-tone)}
.k-mood-inputs{display:flex;flex-wrap:wrap;gap:4px 20px;margin:0;padding-top:10px;border-top:1px solid var(--border)}
.k-mood-input{display:flex;align-items:baseline;gap:6px;min-width:0}
.k-mood-input dt{font-size:12px;color:var(--muted)}
.k-mood-input dd{margin:0;font-size:15px;font-weight:650;color:var(--text)}
.k-mood-input-date{margin-left:6px;font-size:11px;font-weight:500;color:var(--muted)}
.k-mood-date{margin:-4px 0 0;font-size:12px;line-height:1.45;color:var(--muted)}
.k-mood-help-bands>summary{display:flex;align-items:center;gap:6px;min-height:44px;cursor:pointer;font-weight:600;list-style:none}
.k-mood-help-bands>summary::-webkit-details-marker{display:none}
.k-mood-help-bands>summary::before{content:'▸'}.k-mood-help-bands[open]>summary::before{content:'▾'}
.k-mood-help-bands ul{margin:0 0 8px;padding-left:18px;line-height:1.7}
/* A document without the current snapshot keeps the folded tiles; the card takes two of their columns. */
.today-macro-grid>.k-mood{grid-column:span 2;grid-row:span 2;padding:12px 14px;border:1px solid var(--border);border-radius:var(--db-radius-md);background:var(--surface)}
@media(max-width:1100px){.today-macro-grid>.k-mood{grid-column:1/-1;grid-row:auto}}
@media(max-width:760px){.k-mood-word{font-size:30px}.k-mood-duck{width:104px;height:104px}}
@media(max-width:350px){.k-mood-word{font-size:26px}.k-mood-duck{width:92px;height:92px}}
@media(forced-colors:active){.k-mood-scale li.is-current::before{background:Highlight}}

/* Hide list (UX review §5): the market backdrop and the research-feed tools fold to one row each. */
.today-macro-fold>summary,.today-filters>summary{cursor:pointer;min-height:44px;display:flex;align-items:center;font-weight:600;font-size:14px}
.today-filters>summary{font-weight:500;font-size:13px;color:var(--muted)}
.today-filters[open]>summary{margin-bottom:8px}
.seasonality-view>summary{cursor:pointer;min-height:44px;display:flex;align-items:center;font-weight:600}

/* app-today-inbox.css */
/* Today = the member's inbox (upgrade pack 2026-10-11, PR 4): the inbox and the week lead; the market backdrop, the
   research feed and the stock analyses are folded rows. Phone-first: one column, 44px taps, no horizontal scroll. */
.today-inbox,.today-week{margin:0 0 22px;}
.today-inbox-host[hidden],.today-week-host[hidden]{display:none;}
.today-inbox .today-section-heading,.today-week .today-section-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;}
.today-inbox .today-section-heading p,.today-week .today-section-heading p{margin:6px 0 12px;}
.today-week .today-section-heading>a{flex-shrink:0;min-height:40px;}
.today-inbox-list{display:grid;gap:8px;}
.today-inbox-row{position:relative;padding:12px 14px 10px 18px;border:1px solid var(--border);border-radius:12px;background:var(--surface);}
.today-inbox-row::before{content:"";position:absolute;left:0;top:10px;bottom:10px;width:4px;border-radius:0 4px 4px 0;background:var(--border);}
.today-inbox-row.is-buy::before{background:var(--bull);}
.today-inbox-row.is-sell::before{background:var(--bear);}
.today-inbox-row.is-buy .alert-direction{color:var(--bull);}
.today-inbox-row.is-sell .alert-direction{color:var(--bear);}
.today-inbox-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px;color:var(--muted);}
.today-inbox-top .alert-time{margin-left:auto;font-variant-numeric:tabular-nums;white-space:nowrap;}
.today-inbox-headline{margin:6px 0 8px;font-size:15px;line-height:1.55;font-weight:600;overflow-wrap:anywhere;}
.today-inbox-links{display:flex;gap:8px;flex-wrap:wrap;}
.today-inbox-foot{margin-top:10px;}
.today-inbox-foot p{margin:8px 0 0;}
.today-inbox-empty{display:grid;gap:8px;padding:18px;border:1px solid var(--border);border-radius:14px;background:var(--surface-2);font-size:14px;line-height:1.7;}
.today-inbox-empty p{margin:0;}
.today-inbox-status .today-widened{margin:0 0 10px;}
.today-inbox-failed{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
/* 本周日程: date · time · title · tickers, one event per line. */
.today-week-list{list-style:none;margin:0;padding:0;display:grid;gap:6px;}
.today-week-row{display:grid;grid-template-columns:minmax(64px,auto) minmax(0,1fr);gap:2px 12px;align-items:baseline;padding:8px 12px;border:1px solid var(--border);border-radius:10px;background:var(--surface);font-size:14px;line-height:1.5;}
.today-week-day{grid-row:1/3;font-weight:600;color:var(--accent-text,var(--accent));text-decoration:none;min-height:44px;display:flex;align-items:center;}
.today-week-day:hover,.today-week-day:focus-visible{text-decoration:underline;}
.today-week-title{grid-column:2;overflow-wrap:anywhere;}
.today-week-time{grid-column:2;font-size:12px;}
.today-week-tickers{grid-column:2;display:flex;gap:6px;flex-wrap:wrap;font-size:12px;color:var(--muted);}
.today-week-row[data-why=earnings] .today-week-title{font-weight:600;}
/* Folded rows: market overview (with its one-line summary), research feed, stock analyses. */
.today-macro-fold,.today-research-fold,.today-analyses-fold{margin:0 0 18px;border-top:1px solid var(--border);}
.today-macro-fold>summary,.today-research-fold>summary,.today-analyses-fold>summary{display:flex;align-items:center;gap:8px 14px;flex-wrap:wrap;min-height:48px;padding:10px 0;cursor:pointer;list-style:none;font-weight:600;font-size:15px;color:var(--text);}
.today-macro-fold>summary::-webkit-details-marker,.today-research-fold>summary::-webkit-details-marker,.today-analyses-fold>summary::-webkit-details-marker{display:none;}
.today-macro-fold>summary::before,.today-research-fold>summary::before,.today-analyses-fold>summary::before{content:'';width:0;height:0;border:5px solid transparent;border-left-color:var(--muted);transition:transform .15s;flex-shrink:0;}
.today-macro-fold[open]>summary::before,.today-research-fold[open]>summary::before,.today-analyses-fold[open]>summary::before{transform:rotate(90deg);}
.today-macro-fold>summary:focus-visible,.today-research-fold>summary:focus-visible,.today-analyses-fold>summary:focus-visible{outline:2px solid var(--accent-text,var(--accent));outline-offset:2px;border-radius:8px;}
.today-research-fold[hidden],.today-macro-fold[hidden]{display:none;}
.today-macro-fold .today-macro-host{padding-top:4px;}
.today-analyses-fold .today-section-heading h2{font-size:16px;}
/* Today's market bar (owner 2026-10-27): one raised pill under the title whose readings move slowly as a ticker tape (two
   identical passes, moved by one pass); a click opens the market overview right below it and stills the tape at its
   start. Hover or focus holds it; reduced motion leaves a still row that scrolls by hand. It sticks only beside the left
   rail (>= 1100 px), where nothing else on Today sticks; with the top rail it stays in the page, so the global navigation
   remains the one sticky bar on phones and tablets. */
.today-index-bar-wrap{margin:0 0 14px;}
.today-index-bar{display:flex;align-items:center;gap:6px;width:100%;min-height:44px;margin:0;padding:0 4px 0 16px;border:1px solid var(--border);border-radius:22px;background:var(--surface);color:var(--text);font:inherit;text-align:left;cursor:pointer;box-shadow:0 1px 2px color-mix(in srgb,var(--db-ink) 7%,transparent),0 6px 18px color-mix(in srgb,var(--db-ink) 9%,transparent);}
.today-index-bar:hover{border-color:var(--control-border);}
.today-index-bar:focus-visible{outline:3px solid var(--db-focus);outline-offset:2px;}
.today-index-bar-window{flex:1;min-width:0;overflow:hidden;container-type:inline-size;}
.today-index-bar-track{display:flex;width:max-content;}
.today-index-bar-run{display:flex;align-items:center;gap:22px;flex:none;box-sizing:border-box;min-width:100cqw;padding:12px 22px 12px 0;}
.today-index-bar-item{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;font-size:13px;line-height:20px;color:var(--muted);}
.today-index-bar-item strong{color:var(--text);font-weight:650;font-variant-numeric:tabular-nums;}
.today-index-bar-item strong.pos{color:var(--pos);}
.today-index-bar-item strong.neg{color:var(--neg);}
.today-index-bar-item.is-label{color:var(--text);font-weight:600;}
.today-index-bar-duck{flex:none;width:20px;height:20px;object-fit:contain;}
.today-index-bar-when{white-space:nowrap;font-size:12px;color:var(--muted);}
.today-index-bar-chevron{flex:none;display:grid;place-items:center;width:36px;height:36px;color:var(--muted);}
.today-index-bar-chevron::before{content:'';width:7px;height:7px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:translateY(-2px) rotate(45deg);transition:transform var(--db-fast) var(--db-ease);}
.today-index-bar[aria-expanded=true] .today-index-bar-chevron::before{transform:translateY(2px) rotate(-135deg);}
.today-index-bar[data-motion=tape][data-ticker-state=ready]:not([aria-expanded=true]) .today-index-bar-track{animation:today-index-ticker var(--ticker-duration,40s) linear infinite;}
/* The same specificity as the moving rule above, so the hold wins whatever the shorthand reset. */
.today-index-bar[data-motion=tape][data-ticker-state=ready]:is(:hover,:focus-visible) .today-index-bar-track{animation-play-state:paused;}
@keyframes today-index-ticker{from{transform:translateX(0);}to{transform:translateX(-50%);}}
.today-market-panel{margin:0 0 18px;}
.today-market-panel[hidden]{display:none;}
/* Still tape: reduced motion (the bar mirrors prefers-reduced-motion into data-motion=still) or an opened overview (opening
   it is the way to stop the tape, and it stays stopped while open). One pass that scrolls by hand to its last item. */
.today-index-bar:is([data-motion=still],[aria-expanded=true]) .today-index-bar-run[aria-hidden]{display:none;}
.today-index-bar:is([data-motion=still],[aria-expanded=true]) .today-index-bar-run{min-width:0;}
.today-index-bar:is([data-motion=still],[aria-expanded=true]) .today-index-bar-window{overflow-x:auto;scrollbar-width:thin;}
.today-index-bar[data-motion=still] .today-index-bar-chevron::before{transition:none;}
@media(min-width:1100px){
 .today-index-bar-wrap{position:sticky;top:calc(-1 * var(--workspace-inset, 0px));z-index:12;margin:-8px 0 6px;padding:8px 0;background:var(--bg);}
}
@media(max-width:600px){
 .today-inbox,.today-week{margin-bottom:18px;}
 .today-inbox-row{padding:10px 12px 8px 16px;}
 .today-inbox-headline{font-size:14px;}
 .today-inbox-links .btn,.today-inbox-foot .btn,.today-inbox-empty .btn{min-height:44px;}
 .today-inbox .today-section-heading,.today-week .today-section-heading{flex-direction:column;gap:4px;}
 .today-week-row{grid-template-columns:minmax(0,1fr);}
 .today-week-day{grid-row:auto;min-height:32px;}
 .today-week-title,.today-week-time,.today-week-tickers{grid-column:1;}
 .today-macro-fold>summary,.today-research-fold>summary,.today-analyses-fold>summary{font-size:14px;}
}

/* app-today-mascot.css */
/* Today mascot note: a dense shared entry point; the full commentary opens in the existing modal. */
.today-mascot-host[hidden]{display:none}
.today-mascot-note{--mascot-accent:var(--accent-text,var(--accent));position:relative;overflow:hidden;margin:0 0 10px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}
.today-mascot-note::before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:var(--mascot-accent);z-index:1}
.today-mascot-note[data-mood=sad],.today-mascot-note[data-mood=crying],.today-mascot-note[data-mood=worried]{--mascot-accent:var(--neg)}
.today-mascot-note[data-mood=bullish],.today-mascot-note[data-mood=excited]{--mascot-accent:var(--pos)}
.today-mascot-note[data-mood=closed],.today-mascot-note[data-mood=sleeping],.today-mascot-note[data-mood=thinking]{--mascot-accent:var(--muted)}
.today-mascot-launcher{position:relative;display:grid;grid-template-columns:72px minmax(0,1fr) auto auto;align-items:center;gap:8px 14px;width:100%;min-height:92px;padding:8px 14px 8px 10px;border:0;background:transparent;color:var(--text);text-align:left;cursor:pointer}
.today-mascot-launcher:hover{background:color-mix(in srgb,var(--surface-2) 72%,transparent)}
.today-mascot-launcher:focus-visible{outline:3px solid var(--focus,var(--accent));outline-offset:-3px}
.today-mascot-launcher-duck{display:grid;place-items:center;width:72px;height:72px}
.today-mascot-launcher-duck .ducky-motion,.today-mascot-dialog-duck .ducky-motion{display:block;width:100%;height:100%}
.today-mascot-launcher-duck img{display:block;width:72px;height:72px;object-fit:contain;filter:drop-shadow(0 6px 10px rgb(23 32 25 / 12%));transform-origin:50% 80%}
/* A duck that cannot load (ducky-motion.js hides it) closes its slot instead of leaving an empty block. */
.today-mascot-launcher:has(.today-mascot-launcher-duck>.ducky-motion[hidden]){grid-template-columns:minmax(0,1fr) auto auto;padding-left:16px}
.today-mascot-launcher-duck:has(>.ducky-motion[hidden]){display:none}
.today-mascot-launcher-copy{display:grid;min-width:0;gap:3px}
.today-mascot-meta{display:flex;align-items:center;gap:5px 9px;min-width:0;color:var(--muted);font-size:10px;line-height:1.35}
.today-mascot-meta>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.today-mascot-badge{flex:none;padding:2px 6px;border:1px solid color-mix(in srgb,var(--mascot-accent) 42%,var(--border));border-radius:5px;color:var(--text);font-weight:650}
.today-mascot-launcher-title{overflow:hidden;font-size:16px;line-height:1.3;text-overflow:ellipsis;white-space:nowrap}
.today-mascot-launcher-summary{display:-webkit-box;overflow:hidden;color:var(--muted);font-size:12px;line-height:1.45;-webkit-box-orient:vertical;-webkit-line-clamp:2}
.today-mascot-launcher-readings,.today-mascot-benchmarks{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.today-mascot-benchmark{display:inline-flex;align-items:baseline;gap:5px;min-height:28px;padding:3px 7px;border:1px solid var(--border);border-radius:5px;background:var(--surface-2);font-size:10px;white-space:nowrap}
.today-mascot-benchmark strong{font-size:12px;font-variant-numeric:tabular-nums}
.today-mascot-benchmark.is-down strong{color:var(--neg)}.today-mascot-benchmark.is-up strong{color:var(--pos)}
.today-mascot-open-label{display:flex;align-items:center;gap:6px;min-height:44px;color:var(--accent-text,var(--accent));font-size:12px;font-weight:700;white-space:nowrap}
.today-mascot-open-label>span{font-size:22px;font-weight:400}

.today-mascot-dialog{--mascot-accent:var(--accent-text,var(--accent));min-width:0}
.today-mascot-dialog[data-mood=sad],.today-mascot-dialog[data-mood=crying],.today-mascot-dialog[data-mood=worried]{--mascot-accent:var(--neg)}
.today-mascot-dialog[data-mood=bullish],.today-mascot-dialog[data-mood=excited]{--mascot-accent:var(--pos)}
.page-app .modal-box[data-modal-layout=reading]{width:min(1120px,100%);max-width:1120px}
.page-app .modal-box[data-modal-layout=reading] .modal-body{padding:28px 36px 32px}
.today-mascot-dialog-lead{display:grid;grid-template-columns:240px minmax(0,1fr);align-items:center;gap:32px;min-height:244px}
.today-mascot-dialog-duck{display:grid;place-items:center;width:240px;height:240px}
.today-mascot-dialog-duck img{display:block;width:240px;height:240px;object-fit:contain;filter:drop-shadow(0 12px 22px rgb(23 32 25 / 16%));transform-origin:50% 82%}
.today-mascot-dialog-kicker{margin:0 0 6px!important;color:var(--muted);font-size:11px!important;font-weight:700}
.today-mascot-summary{max-width:72ch;margin:0;font-size:clamp(17px,1.35vw,21px);line-height:1.7;color:var(--text)}
.today-mascot-insights{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;margin-top:20px;border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.today-mascot-insight{position:relative;min-width:0;padding:18px 20px}
.today-mascot-insight.is-primary{grid-column:1/-1;border-bottom:1px solid var(--border)}
.today-mascot-insight:not(.is-primary)+.today-mascot-insight:not(.is-primary){border-left:1px solid var(--border)}
.today-mascot-insight.has-duck{display:grid;grid-template-columns:minmax(0,1fr) 82px;align-items:center;gap:14px;min-height:112px}
.today-mascot-insight-copy{min-width:0}
.today-mascot-insight-duck{display:block;width:82px;height:82px;object-fit:contain;filter:drop-shadow(0 6px 10px rgb(23 32 25 / 12%))}
.today-mascot-insight.is-primary .today-mascot-insight-duck{width:92px;height:92px}
.today-mascot-insights.is-stacked{grid-template-columns:1fr}
.today-mascot-insights.is-stacked .today-mascot-insight{grid-column:1/-1;border-left:0!important;border-bottom:0}
.today-mascot-insights.is-stacked .today-mascot-insight+.today-mascot-insight{border-top:1px solid var(--border)}
.today-mascot-insight h3{margin:0 0 8px;font-size:13px;line-height:1.35;color:var(--text)}
.today-mascot-insight p{max-width:72ch;margin:0!important;color:var(--muted);font-size:14px!important;line-height:1.75}
/* After-close brief (market-close-brief/1): the code-chosen tilt label is a chip beside its heading, shown as given.
   Also used by the digest block's label, so it resets that label's uppercase tracking and accent colour. */
.today-brief-tilt{display:inline-block;max-width:100%;margin-left:8px;padding:1px 7px;border:1px solid color-mix(in srgb,var(--mascot-accent,var(--accent-text,var(--accent))) 42%,var(--border));border-radius:6px;background:color-mix(in srgb,var(--mascot-accent,var(--accent-text,var(--accent))) 8%,var(--surface));color:var(--text);font-size:11px;font-weight:650;line-height:1.5;letter-spacing:0;text-transform:none;vertical-align:1px;overflow-wrap:anywhere}
/* A cited news source beside the sentence that rests on it (outlet · New York time), linking to the article.
   Shared by the Today dialog and the digest block; the tilt chip's box (6 px radius) in a neutral tone; it wraps as one
   unit and never widens the page. */
.today-brief-source{display:inline-block;max-width:100%;margin:0 2px 0 1px;padding:1px 7px;border:1px solid var(--border);border-radius:6px;background:var(--surface-2,var(--surface));color:var(--muted);font-size:11px;font-weight:650;line-height:1.5;letter-spacing:0;text-decoration:none;text-transform:none;vertical-align:1px;overflow-wrap:anywhere}
a.today-brief-source:hover{color:var(--text);border-color:color-mix(in srgb,var(--accent-text,var(--accent)) 45%,var(--border))}
a.today-brief-source:focus-visible{outline:3px solid var(--focus,var(--accent));outline-offset:2px}
.today-mascot-dialog>.today-mascot-benchmarks{margin-top:12px;padding:10px 0;border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.today-mascot-prompt{display:flex;align-items:center;gap:12px;margin-top:12px}
.today-mascot-prompt p{flex:1;margin:0!important;font-size:13px!important;line-height:1.5;font-weight:650}
.today-mascot-prompt .btn{flex:0 0 auto;min-height:44px}
.today-mascot-prompt-actions{display:flex;align-items:center;gap:8px;flex:0 0 auto}
.today-mascot-actions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:12px;border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.today-mascot-action{display:grid;gap:2px;min-height:60px;padding:9px 10px;color:var(--text);text-decoration:none}
.today-mascot-action+.today-mascot-action{border-left:1px solid var(--border)}
.today-mascot-action:hover .today-mascot-action-title,.today-mascot-action:focus-visible .today-mascot-action-title{text-decoration:underline;text-underline-offset:3px}
.today-mascot-action:focus-visible{outline:3px solid var(--focus,var(--accent));outline-offset:-3px}
.today-mascot-action-title{font-size:12px;font-weight:700}.today-mascot-action-note{font-size:10px;line-height:1.4;color:var(--muted)}
.today-mascot-method{margin-top:4px;color:var(--muted);font-size:11px;line-height:1.45}
.today-mascot-method>summary{display:inline-flex;align-items:center;min-height:44px;cursor:pointer;color:var(--muted)}
.today-mascot-method p{max-width:68ch;margin:0 0 8px!important;font-size:11px!important}

@media(max-width:700px){
 .page-app #modal:has(.modal-box[data-modal-layout=reading]){align-items:stretch;padding:0}
 .page-app .modal-box[data-modal-layout=reading]{width:100%;height:100dvh;max-height:100dvh;border:0;border-radius:0}
 .page-app .modal-box[data-modal-layout=reading] .modal-heading{padding:calc(10px + var(--safe-top)) 16px 10px}
 .page-app .modal-box[data-modal-layout=reading] .modal-body{padding:18px 16px 24px}
 .page-app .modal-box[data-modal-layout=reading] .modal-actions{padding:10px 16px calc(10px + var(--safe-bottom))}
 .today-mascot-note{border-radius:10px}
 .today-mascot-launcher{grid-template-columns:56px minmax(0,1fr) 30px;gap:4px 9px;min-height:78px;padding:6px 8px 6px 7px}
 .today-mascot-launcher-duck,.today-mascot-launcher-duck img{width:56px;height:56px}
 .today-mascot-launcher:has(.today-mascot-launcher-duck>.ducky-motion[hidden]){grid-template-columns:minmax(0,1fr) 30px;padding-left:14px}
 .today-mascot-launcher:has(.today-mascot-launcher-duck>.ducky-motion[hidden])>:is(.today-mascot-launcher-copy,.today-mascot-launcher-readings){grid-column:1}
 .today-mascot-launcher:has(.today-mascot-launcher-duck>.ducky-motion[hidden])>.today-mascot-open-label{grid-column:2}
 .today-mascot-launcher-copy{grid-column:2}
 .today-mascot-meta{font-size:9px}.today-mascot-meta>span:last-child{display:none}
 .today-mascot-launcher-title{font-size:14px}
 .today-mascot-launcher-summary{font-size:11px;-webkit-line-clamp:1}
 .today-mascot-launcher-readings{grid-column:2;gap:4px}
 .today-mascot-benchmark{min-height:24px;padding:2px 5px;font-size:9px}.today-mascot-benchmark strong{font-size:10px}
 .today-mascot-open-label{grid-column:3;grid-row:1/3;justify-content:center;min-width:30px;font-size:0}.today-mascot-open-label>span{font-size:24px}
 .today-mascot-dialog-lead{grid-template-columns:108px minmax(0,1fr);gap:14px;min-height:0}
 .today-mascot-dialog-duck,.today-mascot-dialog-duck img{width:108px;height:108px}
 .today-mascot-summary{font-size:16px;line-height:1.65}
 .today-mascot-insights{grid-template-columns:1fr;margin-top:18px}.today-mascot-insight.is-primary{grid-column:auto;border-bottom:0}.today-mascot-insight+.today-mascot-insight{border-left:0!important;border-top:1px solid var(--border)}
 .today-mascot-insight{padding:15px 4px}.today-mascot-insight p{font-size:14px!important;line-height:1.7}
 .today-mascot-insight.has-duck{grid-template-columns:minmax(0,1fr) 66px;gap:10px;min-height:96px}
 .today-mascot-insight-duck,.today-mascot-insight.is-primary .today-mascot-insight-duck{width:66px;height:66px}
 .today-mascot-prompt{display:grid;gap:8px}.today-mascot-prompt .btn{width:100%}
 .today-mascot-prompt-actions{display:grid;grid-template-columns:1fr;gap:8px}
 .today-mascot-actions{grid-template-columns:1fr}
 .today-mascot-action+.today-mascot-action{border-left:0;border-top:1px solid var(--border)}
 .today-mascot-action{min-height:52px;padding:7px 4px}
}
@media(max-width:360px){.today-mascot-launcher-summary{-webkit-line-clamp:1}.today-mascot-launcher-readings{flex-wrap:nowrap}.today-mascot-launcher-readings .today-mascot-benchmark:last-child{display:none}.today-mascot-dialog-lead{grid-template-columns:84px minmax(0,1fr);gap:10px}.today-mascot-dialog-duck,.today-mascot-dialog-duck img{width:84px;height:84px}.today-mascot-summary{font-size:15px}}
@media(prefers-reduced-motion:reduce){.today-mascot-note img,.today-mascot-dialog img{animation:none!important;transition:none!important}}

/* app-evidence-mobile.css */
/* A phone reading strip reuses the desktop map's attributed groups and exact sources. */
.evidence-mobile-navigation,.evidence-mobile-full-map{display:none}
@media(max-width:600px){
 .evidence-workspace.has-mobile-evidence{min-width:0}
 .stock-map-panel .stock-information-map:has(.has-mobile-evidence){margin-top:0}
 .stock-map-panel .stock-information-map:has(.has-mobile-evidence)>.focus-heading{display:none}
 .stock-map-panel .evidence-mobile-full-map{display:inline-flex;align-items:center;min-height:44px;font-size:12px;color:var(--accent-text,var(--accent))}
 .has-mobile-evidence .evidence-lanes .evidence-center{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:flex-start;gap:10px;width:100%;min-height:44px;padding:3px 8px;border-radius:8px;box-shadow:none;background:var(--surface)}
 .has-mobile-evidence .evidence-center>.mono{font-size:16px;flex:none}
 .has-mobile-evidence .evidence-price{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:7px;min-height:44px;min-width:0;flex:1;text-align:left}
 .has-mobile-evidence .evidence-price strong{font-size:15px;letter-spacing:0;flex:none}
 .has-mobile-evidence .evidence-price span{font-size:11px;line-height:1.35;white-space:normal;text-align:left}
 .has-mobile-evidence :is(.evidence-water,.evidence-water-caption,.evidence-center-info){display:none}
 .evidence-workspace.has-mobile-evidence .evidence-tools{display:block;margin-bottom:8px}
 .evidence-workspace.has-mobile-evidence .evidence-filter-select{display:none}
 .evidence-workspace.has-mobile-evidence .evidence-filters{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px;width:100%}
 .page-app .has-mobile-evidence .evidence-filters .btn{min-width:0;min-height:44px;padding:4px 2px;gap:1px;flex-direction:column;font-size:11px;line-height:16px;border-radius:8px}
 .has-mobile-evidence .evidence-filter-count{font-size:11px}
 .has-mobile-evidence .evidence-reset-filter{display:none}
 .has-mobile-evidence .evidence-map.evidence-lanes{padding:8px;gap:8px;overflow:hidden}
 .has-mobile-evidence .evidence-mobile-navigation:not([hidden]){display:flex;align-items:center;gap:6px;min-height:44px}
 .evidence-mobile-hint{flex:1;min-width:0;color:var(--muted);font-size:11px;line-height:1.4}
 .evidence-mobile-navigation .btn{width:44px;min-width:44px;min-height:44px;padding:4px;font-size:20px;line-height:1}
 .evidence-mobile-navigation .btn:disabled{opacity:.35}
 .evidence-mobile-position{color:var(--muted);font-size:11px;white-space:nowrap;font-variant-numeric:tabular-nums}
 .has-mobile-evidence .evidence-lanes .evidence-branches{display:flex;flex-direction:row;align-items:flex-start;gap:10px;margin:0;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x proximity;scroll-padding-inline:0;scrollbar-width:thin;padding:2px 0 8px;min-width:0;max-width:100%}
 .evidence-mobile-slide{flex:0 0 calc(100% - 26px);min-width:0;scroll-snap-align:start;border-top:2px solid var(--branch);padding-top:8px}
 .evidence-mobile-slide:only-child{flex-basis:100%}
 .evidence-mobile-slide.is-support{--branch:var(--evidence-support)}
 .evidence-mobile-slide.is-counter{--branch:var(--evidence-counter)}
 .evidence-mobile-slide.is-context{--branch:var(--evidence-context)}
 .stock-information-map .evidence-mobile-stance{font-size:13px;margin:0 0 4px}
 .evidence-mobile-stance{font-size:13px;line-height:1.4;color:var(--branch);margin:0 0 6px}
 .evidence-mobile-slide .evidence-author-heading{display:flex;flex-direction:row;align-items:center;gap:8px;justify-content:space-between}
 .evidence-mobile-slide .evidence-author-heading>.small{max-width:45%;text-align:right}
 .evidence-mobile-slide .evidence-author-heading>a{min-height:44px;font-size:13px}
 .evidence-mobile-slide .evidence-author-heading>.small{font-size:11px;line-height:1.45}
 .evidence-mobile-slide .evidence-author-group{gap:6px}
 .evidence-mobile-slide .evidence-node{padding:10px 24px 10px 10px;gap:6px}
 .evidence-mobile-slide .evidence-node>strong{display:block;font-size:13px;line-height:1.55;-webkit-line-clamp:unset;overflow:visible}
 .evidence-mobile-slide .evidence-node-mobile-meta{font-size:11px;line-height:1.45;gap:4px 8px}
 .evidence-mobile-slide .evidence-mobile-author{white-space:normal;overflow:visible}
 .evidence-mobile-slide .evidence-repeat{font-size:11px;line-height:1.45}
 .evidence-mobile-slide summary{min-height:44px;align-content:center;font-size:12px;cursor:pointer}
 .evidence-mobile-slide .evidence-share-trigger{min-height:44px;min-width:44px}
 .evidence-mobile-slide :is(.evidence-topic-group,.evidence-mentions){min-width:0}
 .evidence-mobile-slide .evidence-topic-heading{font-size:12px}
 .has-mobile-evidence .evidence-map-footer{margin-top:8px;gap:8px}
 .has-mobile-evidence .evidence-connections{display:none}
}

/* app-numeric-change.css */
/* Signed changes are directional; prices, ticker identities and sentiment keep their own grammar. */
.page-app .numeric-change{color:var(--muted);font-variant-numeric:tabular-nums}
.page-app .numeric-change.pos{color:var(--pos)}
.page-app .numeric-change.neg{color:var(--neg)}

/* app-workspace-density.css */
/* Shared app typography and rhythm. Loaded after route styles so page chrome has one scale. */
body.page-app {
 --app-title:24px; --app-section:16px; --app-subtitle:13px; --app-body:14px;
 --app-caption:12px; --app-panel:16px; --app-gap:12px; --app-section-gap:20px;
}
body.page-app .app-view {font-size:var(--app-body);line-height:1.55}
body.page-app .app-view .route-page h1 {font-size:var(--app-title);line-height:1.3;letter-spacing:-.025em;margin:0}
body.page-app .app-view .route-page h2 {font-size:var(--app-section);line-height:1.4;letter-spacing:0}
body.page-app .app-view .route-page h3 {font-size:var(--app-body);line-height:1.45}
body.page-app .app-view .route-page :is(.view-intro,.calendar-intro,.chart-picker-note),body.page-app .app-view .route-page :is(.focus-heading,.radar-heading)>div>p:not(.today-date),body.page-app .app-view .route-page :is(.focus-heading,.radar-heading)>p,body.page-app .app-view .route-page h1+p.muted{
 font-size:var(--app-subtitle);line-height:1.5;margin:4px 0 12px;
}
body.page-app .card {padding:var(--app-panel);margin-bottom:var(--app-gap)}
body.page-app .app-view :is(.calendar-view,.creators-view,.radar-workspace,.evidence-view) {padding:0;background:none;border:0}
body.page-app .app-view .route-page :is(.focus-heading,.radar-heading,.calendar-heading,.view-head){gap:8px 12px;margin-top:0;margin-bottom:var(--app-gap)}
body.page-app .app-view :is(.focus-today,.focus-stock,.focus-explore) {max-width:none}
body.page-app:is([data-route=profile],[data-route=billing],[data-route=alerts]) .app-view {max-width:1120px}
body.page-app .app-main {scroll-padding-top:16px}
body.page-app .app-view .focus-chart {margin:var(--app-section-gap) 0}
body.page-app .app-view .focus-empty {padding:var(--app-panel);font-size:var(--app-body);line-height:1.55}
body.page-app .app-view .empty {padding:16px 12px;font-size:var(--app-subtitle)}
body.page-app .app-view .profile :is(.verify,.pwsec):empty {display:none}
body.page-app .app-view .profile>.form {max-width:720px;gap:10px}
body.page-app .app-view .profile .form>.profile-optional {display:contents}
body.page-app .app-view .profile .form>details .profile-optional {display:grid;gap:10px;padding-top:8px}
body.page-app .app-view .profile .profile-optional>.check {grid-column:1/-1}
body.page-app .app-view .profile .form label {font-size:var(--app-subtitle)}
body.page-app .app-view .profile .form .cta-row {margin:10px 0 0}
body.page-app .app-view .profile>p.muted {margin-bottom:12px}
body.page-app .app-view .stock-workspace-tabs {margin:8px 0 12px}
body.page-app .app-view .focus-stock>.focus-heading {justify-content:flex-start}
body.page-app .app-view .focus-stock>.focus-heading p {margin:4px 0 0}
body.page-app .app-view .focus-stock .evidence-analysis {margin:12px 0 16px}

/* Historical comparison is a compact data table; the complete interpretation remains expandable. */
body.page-app .app-view .seasonality-view {margin-top:var(--app-section-gap)}
body.page-app .app-view .seasonality-view h2 {margin:0 0 4px}
body.page-app .app-view .seasonality-view>p {font-size:var(--app-caption);line-height:1.5;margin:4px 0 8px}
body.page-app .app-view .seasonality-view .season-controls {display:flex;align-items:end;gap:8px;margin:12px 0 8px}
body.page-app .app-view .season-controls label {flex:0 1 220px;font-size:var(--app-caption);gap:4px}
body.page-app .app-view .season-controls select {min-height:44px;padding:6px 10px}
body.page-app .app-view .season-controls>.btn {align-self:end;min-height:44px}
.season-comparison {width:100%;border-collapse:collapse;table-layout:fixed;margin:8px 0;font-size:13px;font-variant-numeric:tabular-nums}
.season-comparison th,.season-comparison td {padding:8px 12px;border-bottom:1px solid var(--border);text-align:left;vertical-align:middle;overflow-wrap:anywhere}
.season-comparison thead th {background:var(--surface-2);font-size:13px;font-weight:650}
.season-comparison th:first-child {width:26%;font-weight:500;color:var(--muted)}
.season-comparison strong {font-size:17px;font-weight:650}
.season-extreme {display:flex;gap:5px 12px;flex-wrap:wrap}
.season-extreme>span:first-child {color:var(--muted)}
body.page-app .app-view .season-reading {border:0;border-top:1px solid var(--border);padding:0;margin:8px 0 0;max-width:none}
body.page-app .app-view .season-reading>summary,
body.page-app .app-view .season-details>summary {font-size:var(--app-subtitle);min-height:44px;padding:10px 0;cursor:pointer;color:var(--accent-text,var(--accent))}
body.page-app .app-view .season-reading>p {font-size:var(--app-body);line-height:1.6;margin:0 0 12px;max-width:80ch}
body.page-app .app-view .season-limit {font-size:var(--app-caption);line-height:1.5;margin:8px 0}
body.page-app .app-view .season-details {margin-top:0}
body.page-app .app-view .season-details>p {font-size:var(--app-subtitle);line-height:1.6}
body.page-app .app-view .season-table th,body.page-app .app-view .season-table td {padding:8px}

@media(min-width:1000px) {
 body.page-app .app-main {padding:24px clamp(24px,3vw,44px) 32px}
 body.page-app .app-view .calendar-view {padding:0;background:none;border:0}
 body.page-app .app-view .cal-grid .cal-cell {min-height:120px}
}
@media(max-width:760px) {
 body.page-app {--app-title:18px;--app-section:14px;--app-subtitle:12px;--app-body:13px;--app-caption:11px;--app-panel:10px;--app-gap:8px;--app-section-gap:14px}
 body.page-app .app-view .route-page :is(input:not([type=checkbox]):not([type=radio]),select,textarea) {font-size:16px}
 body.page-app .app-view .route-page :is(.btn,.btn-sm) {min-height:44px}
 body.page-app .app-view .route-page :is(.focus-heading,.radar-heading,.calendar-heading,.view-head){gap:4px 8px}
 body.page-app .app-view .seasonality-view .season-controls {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;margin:8px 0}
 body.page-app .app-view .season-controls>.btn {grid-column:1/-1;justify-self:start;font-size:12px;padding:6px 9px}
 .season-comparison {font-size:12px}
 .season-comparison th,.season-comparison td {padding:7px 6px}
 .season-comparison thead th {font-size:12px}
 .season-comparison th:first-child {width:25%}
 .season-comparison strong {font-size:14px;white-space:nowrap}
 .season-extreme {gap:2px 6px}
}

/* app-alert-feed.css */
/* 「我的提醒」: the member's 条件提醒 pinned in their own block, then the watchlist alerts by day; one card per alert,
   colour by filing direction, 「新」 by each source's read marker as this visit found it. */
.alert-feed{max-width:760px;}
/* The simulation page lays its cards out by width (perf-chart container queries): let it use the whole route column. */
.alert-feed:has(.perf-page){max-width:none;}

.alert-feed-actions{display:flex;align-items:center;gap:8px;margin-left:auto;}
.signal-feed-intro>.signal-feed-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px;flex:0 0 auto;}
.signal-feed-actions>.alert-settings-link{min-height:44px;display:inline-flex;align-items:center;}
/* 「N 条未读」 is a button: it opens 我的提醒 (owner 2026-10-23: the count led nowhere). */
.alert-unread-chip{background:var(--accent);color:var(--accent-ink,#fff);border-color:transparent;}
button.alert-unread-chip{min-height:44px;padding:0 16px;font:inherit;font-size:14px;font-weight:650;cursor:pointer;}
button.alert-unread-chip:focus-visible{outline:3px solid var(--focus,var(--accent));outline-offset:2px;}
.alert-tabs{display:flex;gap:6px;margin:14px 0 12px;}
.alert-tabs button{min-height:36px;padding:0 14px;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--text);font:inherit;font-size:14px;cursor:pointer;}
.alert-tabs button[aria-selected=true]{background:var(--accent);color:var(--accent-ink,#fff);border-color:var(--accent);}
/* Filters are the shared Beta choice buttons (.db-filter-options, 44 px); they wrap on phones (local scroll is for tables). */
.alert-filters{margin:0 0 16px;}
.alert-day{margin:20px 0 8px;font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);}
.alert-day:first-child{margin-top:4px;}
.alert-item{position:relative;padding:14px 16px 12px 20px;margin:0 0 10px;border:1px solid var(--border);border-radius:12px;background:var(--surface);}
.alert-item::before{content:"";position:absolute;left:0;top:12px;bottom:12px;width:4px;border-radius:0 4px 4px 0;background:var(--border);}
.alert-item.is-buy::before{background:var(--bull);}
.alert-item.is-sell::before{background:var(--bear);}
.alert-item.is-unread{border-color:color-mix(in srgb,var(--accent) 45%,var(--border));}
.alert-item.is-superseded{opacity:.72;}
.alert-item-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px;color:var(--muted);}
.alert-ticker{font-weight:600;color:var(--text);text-decoration:none;}
.alert-ticker:hover{text-decoration:underline;}
.alert-direction{font-weight:600;}
.alert-item.is-buy .alert-direction{color:var(--bull);}
.alert-item.is-sell .alert-direction{color:var(--bear);}
.alert-time{margin-left:auto;font-variant-numeric:tabular-nums;}
.alert-unread{width:8px;height:8px;border-radius:50%;background:var(--accent);}
.alert-new{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:650;color:var(--accent-text,var(--accent));}
.alert-headline{margin:6px 0 4px;font-size:16px;line-height:1.5;font-weight:600;}
.alert-summary{margin:0 0 8px;font-size:14px;line-height:1.65;}
.alert-badges{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 8px;}
.alert-badge{font-size:11px;line-height:1.6;padding:1px 8px;border:1px solid var(--border);border-radius:999px;color:var(--muted);}
/* An insider trade the filing does not establish as open market (2026-10-24): the same pill, a dashed edge. */
.alert-badge.is-muted{border-style:dashed}
.alert-note{margin:4px 0 2px;}
.alert-note>summary{display:flex;align-items:center;min-height:32px;cursor:pointer;font-size:13px;color:var(--accent-text,var(--accent));list-style:none;}
.alert-note>summary::-webkit-details-marker{display:none;}
.alert-note>summary::before{content:"▸";margin-right:6px;font-size:11px;}
.alert-note[open]>summary::before{content:"▾";}
.alert-note-facts{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:4px 14px;margin:8px 0 4px;font-size:13px;line-height:1.55;}
.alert-note-facts dt{color:var(--muted);}
.alert-note-facts dd{margin:0;overflow-wrap:anywhere;}
.alert-note h4{margin:10px 0 4px;font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);}
.alert-note ul{margin:0;padding-left:18px;font-size:13px;line-height:1.6;}
.alert-note p{margin:0;font-size:13px;line-height:1.6;}
.alert-links{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px;}
.alert-rollout{margin:0 0 12px;}
.alert-empty{padding:28px 20px;text-align:center;border:1px dashed var(--border);border-radius:12px;color:var(--muted);}
.alert-empty p{margin:0 0 12px;}
.alert-empty-actions{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;}
.alert-source-error{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:0 0 12px;padding:8px 12px;border:1px solid var(--border);border-radius:10px;font-size:13px;color:var(--muted);}
/* A 条件提醒 row: the alert's name links to its settings, its rule reads as the studio sentence, and each condition shows
   the value that decided it; a condition that was not met (an ANY rule) or had no data says so in words. */
/* Duck yellow marks a matched alert (design-system MASTER): the member's own alert went off. */
.alert-item.alert-strategy::before{background:var(--db-duck,var(--accent));}
.alert-item.alert-strategy.is-unread{border-color:color-mix(in srgb,var(--db-duck,var(--accent)) 70%,var(--border));}
.alert-strategy .alert-kind{display:inline-flex;align-items:center;gap:4px;}
.alert-kind-duck{flex:none;width:16px;height:16px;}
/* The pinned block (owner 2026-10-24: "条件提醒…放在最 top，然后放个小鸭子…stand out"): above everything else, a soft
   duck-yellow field with the duck, the words "Your custom alerts · Pinned" and the count of new ones in words, so colour
   is never the only cue; the cards keep their own surface inside it. */
.alert-pinned{margin:0 0 20px;padding:12px 12px 2px;border:1px solid color-mix(in srgb,var(--db-duck,var(--accent)) 55%,var(--border));border-radius:16px;
  background:color-mix(in srgb,var(--db-duck,var(--accent)) 9%,var(--surface));}
.alert-pinned-head{display:flex;align-items:center;flex-wrap:wrap;gap:6px 10px;margin:0 0 10px;}
.alert-pinned-duck{flex:none;width:28px;height:28px;}
.alert-pinned-heading{flex:1 1 160px;min-width:0;}
.alert-pinned-title{margin:0;font-size:16px;line-height:1.35;font-weight:700;}
.alert-pinned-note{margin:2px 0 0;font-size:12px;line-height:1.5;color:var(--muted);}
.alert-pinned-unread{background:var(--accent);color:var(--accent-ink,#fff);border-color:transparent;font-weight:650;}
.alert-pinned-actions{display:flex;justify-content:center;margin:0 0 10px;}
.alert-strategy-link{color:var(--accent-text,var(--accent));text-decoration:underline;text-underline-offset:3px;overflow-wrap:anywhere;}
.alert-strategy-company{color:var(--muted);font-size:13px;}
.alert-strategy-rule{margin:4px 0 10px;font-size:14px;line-height:1.6;}
.alert-strategy-rule .studio-sentence{flex-wrap:wrap;}
.alert-evidence{margin:8px 0 4px;}
.alert-evidence-lines{margin:0;padding:0;list-style:none;}
.alert-evidence-lines li{position:relative;padding-left:18px;font-variant-numeric:tabular-nums;overflow-wrap:anywhere;}
.alert-evidence-lines li::before{position:absolute;left:0;content:"✓";color:var(--accent-text,var(--accent));font-weight:700;}
.alert-evidence-lines li[data-truth=not_met]::before{content:"–";color:var(--muted);}
.alert-evidence-lines li[data-truth=unknown]::before{content:"?";color:var(--muted);}
.alert-evidence-lines li:not([data-truth=met]){color:var(--muted);}
.alert-more{width:100%;margin:6px 0 20px;}
.app-nav a[data-route=alerts]{position:relative;}
.nav-badge{position:absolute;top:4px;left:calc(50% + 6px);min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--accent);color:var(--accent-ink,#fff);font-size:11px;font-weight:600;line-height:18px;text-align:center;}
@media(max-width:600px){
 .alert-item{padding:12px 12px 10px 16px;}
 .alert-pinned{padding:10px 8px 2px;}
 .alert-note-facts{grid-template-columns:1fr;gap:2px;}
 .alert-note-facts dd{margin-bottom:6px;}
 .alert-feed-actions{margin-left:0;}
 .nav-badge{top:2px;left:calc(50% + 4px);}
}
/* "Since alert" (owner 2026-10-06): private reader view, next regular open to latest close. */
.alert-since{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px;margin:6px 0;font-variant-numeric:tabular-nums}
.alert-since-label,.alert-since-from,.alert-since-spy{font-size:12px;color:var(--muted)}
.return-badge{font-weight:700;white-space:nowrap}.return-up{color:var(--pos,#16a34a)}.return-down{color:var(--neg,#dc2626)}.return-flat{color:var(--muted)}
/* Private alert simulation (owner 2026-10-06). */
.alert-sim{display:grid;gap:12px;min-width:0}.alert-sim.sim-loading{opacity:.6}
.sim-head{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap}.sim-head h2{margin:0;font-size:18px}
.sim-controls{display:flex;gap:16px;flex-wrap:wrap}.sim-chips{display:flex;gap:6px;flex-wrap:wrap}.sim-chips [aria-pressed=true]{border-color:var(--accent);color:var(--accent-text,var(--accent));font-weight:700}
.sim-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}
.sim-tile{display:grid;gap:2px;padding:12px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}
.sim-tile-label,.sim-tile-note{font-size:12px;color:var(--muted)}.sim-tile-value{font-size:20px;font-variant-numeric:tabular-nums}
.sim-figure{margin:0;padding:12px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}
.sim-curve{display:block;width:100%;height:auto}.sim-axis{font-size:11px;fill:var(--muted)}
.sim-line-nav{stroke:var(--accent);stroke-width:2}.sim-line-spy{stroke:var(--muted);stroke-width:1.5;stroke-dasharray:3 3}
.sim-legend{display:flex;gap:16px;font-size:12px;color:var(--muted);margin-bottom:6px}
.sim-key:before{content:'';display:inline-block;width:14px;height:2px;margin-right:6px;vertical-align:middle;background:var(--accent)}
.sim-key-spy:before{background:var(--muted)}
.sim-positions{list-style:none;margin:0;padding:0;display:grid;gap:2px}
.sim-position{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto auto;gap:10px;align-items:center;min-height:44px;padding:4px 8px;border-radius:10px;font-variant-numeric:tabular-nums}
.sim-position:nth-child(odd){background:var(--bg-2)}
.sim-kind,.sim-when,.sim-status{font-size:13px}.sim-status{color:var(--muted)}
.ticker-chip{display:inline-flex;align-items:center;min-height:32px;padding:2px 10px;border:1px solid var(--border);border-radius:8px;font-weight:700;color:var(--text);text-decoration:none;background:var(--surface)}
.sim-method{font-size:12px;color:var(--muted)}
@media(max-width:560px){.sim-position{grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:'tk kind ret' 'tk when status'}
  .sim-position .ticker-chip{grid-area:tk}.sim-kind{grid-area:kind}.sim-when{grid-area:when}.sim-status{grid-area:status;justify-self:end}.sim-position .return-badge,.sim-position>.muted{grid-area:ret;justify-self:end}}

/* app-perf-chart.css */
/* 效益模拟 — the shared performance card (js/app/perf-chart.js). App tokens only; both themes. */
/* Benchmark lines are numbered in document order (perf-bench-1 = SPY today, perf-bench-2 = QQQ, …): each number owns a token
   derived from the app palette and its own dash pattern, so two lines stay apart in both themes and without colour. */
.perf-card{--perf-line:color-mix(in srgb,var(--accent) 80%,var(--text));--perf-bench-1:var(--muted);--perf-bench-2:var(--blue);--perf-bench-3:var(--yellow);--perf-bench:var(--perf-bench-1);
  /* Wins / losses / drawdown are returns, so they follow the change-colour setting (--pos / --neg, T-12), not bull / bear. */
  --perf-win:var(--pos,var(--green));--perf-loss:var(--neg,var(--red));--perf-open:var(--faint);--perf-dd:var(--neg,var(--red));
  display:block;container-type:inline-size;padding:16px;border:1px solid var(--border);border-radius:14px;background:var(--surface);min-width:0;font-variant-numeric:tabular-nums}
.perf-grid{display:grid;grid-template-columns:minmax(150px,200px) minmax(0,2.4fr) minmax(150px,200px) minmax(160px,1.1fr);gap:16px;align-items:start;min-width:0}
@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .perf-card{--perf-line:var(--accent)}}
:root[data-theme=dark] .perf-card{--perf-line:var(--accent)}
.perf-grid>*{min-width:0}
.perf-card.is-loading .perf-figure,.perf-card.is-loading .perf-profile{opacity:.55;transition:opacity .15s}
.perf-card--wide .perf-grid{grid-template-columns:minmax(0,1fr)}.perf-card--wide .perf-figure{grid-column:1/-1;grid-row:2}.perf-card--wide .perf-subject{grid-column:1/-1}
.perf-title{margin:0;font-size:16px;line-height:1.3}
.perf-subject{display:grid;gap:8px;justify-items:start}
.perf-subject-text{margin:0;font-size:13px;color:var(--muted)}
.perf-headline{margin:0;display:grid;gap:2px}
.perf-headline-label{font-size:12px;color:var(--muted)}
.perf-hero{font-size:28px;line-height:1.1;letter-spacing:-.02em;font-weight:750;font-variant-numeric:normal}
.perf-hero.return-up{color:var(--pos,var(--green))}.perf-hero.return-down{color:var(--neg,var(--red))}.perf-hero.return-flat{color:var(--text)}
.perf-modes{display:flex;flex-wrap:wrap;gap:6px}
.perf-mode-help{margin:0;max-width:52ch;line-height:1.45;overflow-wrap:anywhere}
.perf-mode{display:inline-flex;align-items:center;gap:4px;min-height:32px;padding:3px 10px;border:1px solid var(--border);border-radius:999px;background:transparent;color:var(--text);font:inherit;font-size:13px;cursor:pointer}
.perf-mode[aria-pressed=true]{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent);font-weight:700}
.perf-line{margin:0;font-size:13px}.perf-period{margin:0}
.perf-controls{display:flex;flex-wrap:wrap;gap:10px 16px}.perf-control{display:grid;gap:4px}.perf-control-label{font-size:12px;color:var(--muted)}
.perf-seg{display:inline-flex;border:1px solid var(--border);border-radius:999px;overflow:hidden;flex:none}
.perf-seg>button{border:0;background:transparent;color:var(--muted);padding:5px 10px;font:inherit;font-size:12px;cursor:pointer;min-height:36px;white-space:nowrap}
.perf-seg>button[aria-pressed=true]{background:var(--bg-2);color:var(--text);font-weight:600}
.perf-figure{margin:0;position:relative;display:grid;gap:8px}
.perf-curve{display:block;width:100%;height:auto;color:var(--text);touch-action:pan-y;overflow:visible}
.perf-curve:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.perf-grid{stroke:var(--border);stroke-width:1}.perf-zero{stroke:color-mix(in srgb,var(--text) 35%,var(--border));stroke-width:1}
.perf-axis{font-size:11px;fill:var(--muted);font-variant-numeric:tabular-nums}
.perf-area{fill:var(--perf-line);fill-opacity:.1}
.perf-line{stroke:var(--perf-line);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
.perf-bench{stroke:var(--perf-bench);stroke-width:1.5;stroke-dasharray:4 3;stroke-linejoin:round}
.perf-bench-2{stroke:var(--perf-bench-2);stroke-dasharray:1.5 3.5;stroke-linecap:round}
.perf-bench-3{stroke:var(--perf-bench-3);stroke-dasharray:7 3 1.5 3}
.perf-drawdown{fill:var(--perf-dd);fill-opacity:.09}
.perf-mark{stroke:var(--surface);stroke-width:2}.perf-mark.is-win{fill:var(--perf-win)}.perf-mark.is-loss{fill:var(--perf-loss)}.perf-mark.is-open,.perf-mark.is-plain,.perf-mark.is-flat{fill:var(--perf-open)}
.perf-mark.is-short{stroke:var(--text)}
.perf-hit{fill:transparent;stroke:none;cursor:pointer}
.perf-mark-hit:focus{outline:none}.perf-mark-hit:focus .perf-mark,.perf-mark-hit:hover .perf-mark{r:5.5}
.perf-extreme{font-size:11px;font-weight:700;fill:var(--text);paint-order:stroke;stroke:var(--surface);stroke-width:3px;stroke-linejoin:round}
.perf-end{font-size:11px;font-weight:600;fill:var(--text);paint-order:stroke;stroke:var(--surface);stroke-width:3px}
.perf-end-dot{fill:var(--perf-line);stroke:var(--surface);stroke-width:2}
.perf-cursor{stroke:var(--text);stroke-opacity:.35;stroke-width:1}.perf-cursor-dot{fill:var(--perf-line);stroke:var(--surface);stroke-width:2}
.perf-tip{position:absolute;z-index:4;max-width:min(280px,calc(100% - 8px));padding:8px 10px;border:1px solid var(--border);border-radius:10px;background:var(--surface);color:var(--text);box-shadow:var(--shadow);font-size:12px;line-height:1.45;pointer-events:none;transform:translate(10px,0)}
.perf-tip.is-right{transform:translate(calc(-100% - 10px),0)}
.perf-tip[hidden]{display:none}
.perf-tip-date{display:block;color:var(--muted);margin-bottom:2px}
.perf-tip-row{display:flex;align-items:center;gap:6px}.perf-tip-row b{font-size:13px;font-variant-numeric:tabular-nums}
.perf-tip-marks{list-style:none;margin:4px 0 0;padding:4px 0 0;border-top:1px solid var(--border);display:grid;gap:2px}
.perf-tip-marks li{display:flex;align-items:center;gap:6px}
.perf-key{display:inline-block;width:16px;height:0;border-top:2px solid var(--perf-line);vertical-align:middle;flex:none}
.perf-key-bench{border-top:2px dashed var(--perf-bench)}
.perf-key-bench-2{border-top-style:dotted;border-top-color:var(--perf-bench-2)}
.perf-key-bench-3{border-top-style:double;border-top-width:3px;border-top-color:var(--perf-bench-3)}
.perf-key-dd{height:10px;border:0;background:var(--perf-dd);opacity:.18;border-radius:2px}
.perf-dot{display:inline-block;width:10px;height:10px;border-radius:50%;background:var(--perf-open);border:2px solid var(--surface);box-shadow:0 0 0 1px var(--border);flex:none}
.perf-dot.is-win{background:var(--perf-win)}.perf-dot.is-loss{background:var(--perf-loss)}
.perf-legend{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:12px;color:var(--muted)}
.perf-legend-key{display:inline-flex;align-items:center;gap:6px}
.perf-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(84px,1fr));gap:6px}
.perf-stat{display:grid;gap:1px;padding:6px 8px;border:1px solid var(--border);border-radius:8px;background:var(--bg-2);min-width:0}
.perf-stat-label{font-size:11px;line-height:1.2;color:var(--muted)}
.perf-stat-value{font-size:15px;font-variant-numeric:tabular-nums}.perf-stat-value .return-badge{font-size:inherit}
.perf-stat-note{font-size:11px;color:var(--muted)}
.perf-col-title{margin:0 0 6px;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.perf-profile{display:grid;gap:4px}
.perf-radar{display:block;width:100%;max-width:260px;height:auto;overflow:visible}
.perf-radar-grid{fill:none;stroke:var(--border)}
.perf-radar-shape{fill:color-mix(in srgb,var(--accent) 25%,transparent);stroke:var(--accent);stroke-width:1.5}
.perf-radar-dot{fill:var(--accent)}
.perf-radar-label{font-size:10px;fill:var(--muted)}
.perf-recent-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.perf-recent-row{display:grid;grid-template-columns:auto auto minmax(0,1fr);grid-template-areas:"date tk ret" "label label label";gap:2px 8px;align-items:center;font-size:13px}
.perf-recent-date{grid-area:date}.perf-recent-row .ticker-chip{grid-area:tk}.perf-recent-label{grid-area:label}.perf-recent-row .return-badge,.perf-recent-status{grid-area:ret}
.perf-recent-date{color:var(--muted);white-space:nowrap}
.perf-recent-label{color:var(--muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.perf-recent-label:empty{display:none}
.perf-recent-row .return-badge,.perf-recent-status{justify-self:end}
.perf-recent-quote{grid-area:auto;grid-column:1/-1;margin:0;font-size:13px;line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.perf-recent-source{grid-area:auto;grid-column:1/-1;font-size:12px;justify-self:start}
.perf-state{margin:0;padding:24px 0;color:var(--muted);font-size:13px}
.perf-basis{margin:12px 0 0;font-size:11px;color:var(--muted)}
.perf-recent .csim-opinion{display:flex;flex-wrap:wrap;gap:4px 8px}.perf-recent .csim-quote{flex-basis:100%}
.perf-page{display:grid;gap:12px}.perf-page-head{display:flex;flex-wrap:wrap;justify-content:space-between;gap:12px;align-items:flex-start}.perf-page-head h2{margin:0;font-size:20px}
.perf-books{display:grid;gap:12px}
.instant-sim{margin:6px 0 10px}.instant-sim .perf-card{padding:12px;gap:12px}
.instant-sim-toggle{border:1px solid var(--border);border-radius:999px;background:transparent;color:var(--muted);padding:5px 12px;font:inherit;font-size:12px;cursor:pointer;min-height:32px}
.instant-sim-toggle[aria-pressed=true]{border-color:var(--accent);color:var(--text);font-weight:600;background:color-mix(in srgb,var(--accent) 12%,transparent)}
/* The card's own width picks the layout (it lives in full pages, the studio's narrow pane and phone columns alike). */
@container (max-width:1040px){.perf-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.perf-figure{grid-column:1/-1;grid-row:2}.perf-subject{grid-column:1/-1}}
@container (max-width:600px){.perf-grid{grid-template-columns:minmax(0,1fr);gap:12px}.perf-figure{order:-1;grid-column:auto;grid-row:auto}.perf-subject{grid-column:auto}.perf-hero{font-size:26px}
  .perf-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.perf-radar{max-width:240px}.perf-card--wide .perf-figure{grid-row:auto}}
@media(max-width:760px){.perf-card{padding:12px}.perf-seg>button,.perf-mode,.instant-sim-toggle{min-height:44px}.perf-seg>button{font-size:13px;padding:5px 12px}}
@media(prefers-reduced-motion:reduce){.perf-card *{transition:none!important;animation:none!important}}

/* app-creator-board.css */
/* 博主榜 — the 财经作者 landing page (js/app/views/creators-board.js). App tokens only; both themes; phone-first. */
.creator-board{display:grid;gap:14px;min-width:0}
.cboard-head{display:grid;gap:10px}
.cboard-title h1{margin:0;font-size:24px;line-height:1.2}
.cboard-sub{margin:4px 0 0;font-size:13px;line-height:1.5;max-width:70ch}.cboard-sub-short{display:none;margin:2px 0 0;font-size:12px;line-height:1.4}
/* Search: the one search box (js/app/search-box.js, app-search.css); here only the field's size. */
.cboard-search-input{width:100%;box-sizing:border-box;min-height:44px;font-size:16px}
/* Layout: controls, the list, the rail. The board is a container, so the rail sits beside the list only when the board
   itself is wide enough — not the window, of which the app's navigation takes 208 px on a desktop — and under the list
   otherwise; it never scrolls with the page (a rail taller than the window was cut off). While a creator's panel is
   open the rail steps aside and the panel takes the full width (owner 2026-10-25). */
.creator-board{container:cboard / inline-size}
.cboard-layout{display:grid;gap:12px;min-width:0;grid-template-columns:minmax(0,1fr);grid-template-areas:"controls" "body" "rail"}
.cboard-controls{grid-area:controls;display:grid;gap:8px;min-width:0;container:cboard-controls / inline-size}
.cboard-body{grid-area:body;display:grid;gap:14px;min-width:0}
.cboard-rail{grid-area:rail}
.cboard-rail[hidden],.cboard-filters[hidden]{display:none!important}
@container cboard (min-width:1040px){
 .cboard-layout:not(.is-panel){grid-template-columns:minmax(0,1fr) 280px;grid-template-areas:"controls rail" "body rail";align-items:start}
}
/* Filters: one row of chip groups; each group scrolls sideways on a phone instead of growing the page. */
.cboard-filters{display:flex;flex-wrap:wrap;gap:8px 18px;align-items:center;min-width:0}
.cboard-group{display:inline-flex;align-items:center;gap:6px;flex:none;max-width:100%}
.cboard-group-label{font-size:12px;color:var(--muted);white-space:nowrap}
.cboard-chip{display:inline-flex;align-items:center;min-height:36px;padding:4px 12px;border:1px solid var(--border);border-radius:999px;background:transparent;color:var(--text);font:inherit;font-size:13px;white-space:nowrap;cursor:pointer}
.cboard-chip[aria-pressed=true]{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent);font-weight:700}
.cboard-chip:disabled{opacity:.55;cursor:default}
.cboard-active{display:flex;flex-wrap:wrap;gap:6px}.cboard-active[hidden]{display:none}
.cboard-active-chip{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:4px 12px;border:1px solid var(--accent);border-radius:999px;background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--text);font:inherit;font-size:13px;cursor:pointer}
.cboard-notes{display:grid;gap:6px}.cboard-notice{margin:0;font-size:13px}
/* Cards: one per row, the shared performance card with the creator identity in its first column. In a narrow card the
   shared layout puts the curve first; on the board who it is comes first, then the curve, the profile and the opinions. */
.cboard-list{display:grid;gap:12px;min-width:0}
@container (max-width:600px){.cboard-card .perf-subject{order:-2}.cboard-card .perf-figure{order:-1}}
.cboard-identity{display:grid;gap:10px;justify-items:start;min-width:0;width:100%}
.cboard-identity-row{display:grid;grid-template-columns:auto auto minmax(0,1fr);gap:10px;align-items:center;width:100%;min-width:0}
.cboard-rank{display:inline-grid;place-items:center;min-width:34px;height:34px;padding:0 6px;border-radius:999px;border:1px solid var(--border);background:var(--bg-2);font-size:13px;font-weight:700;font-variant-numeric:tabular-nums}
.cboard-card .creator-avatar,.cboard-card .creator-monogram,.cboard-unranked-row .creator-avatar,.cboard-unranked-row .creator-monogram{width:44px;height:44px;min-width:44px;border-radius:50%;font-size:18px}
.cboard-who{min-width:0;display:grid;gap:2px}
.cboard-name{margin:0;font-size:16px;line-height:1.3;overflow-wrap:anywhere}.cboard-name a{color:inherit;text-decoration:none}.cboard-name a:hover{text-decoration:underline}
.cboard-meta{margin:0;line-height:1.4;overflow-wrap:anywhere}
.cboard-counts{margin:0;display:flex;flex-wrap:wrap;gap:4px 12px;font-size:13px;font-variant-numeric:tabular-nums}
/* 看多 / 看空 counts are sentiment (--bull / --bear never swap); every return on this page (跟随, tiles, 入场以来, 怎么来的)
   is a numeric change and uses --pos / --neg, which follow the 红涨绿跌 / green-up setting (change-colors.js, T-12). */
.cboard-counts .is-up{color:var(--bull,var(--green))}.cboard-counts .is-down{color:var(--bear,var(--red))}
.creator-board .cboard-follow{min-height:44px;min-width:96px;padding:8px 16px;border:1px solid var(--accent);border-radius:999px;background:var(--accent);color:var(--accent-ink,#fff);font:inherit;font-size:14px;font-weight:600;cursor:pointer}
.creator-board .cboard-follow.is-on{background:transparent;color:var(--text);border-color:var(--border)}
.creator-board .cboard-follow:disabled{opacity:.6;cursor:default}
.cboard-none{display:grid;gap:8px;justify-items:start;padding:12px 0}
/* Creators without a simulation document: listed under the board, never ranked. */
.cboard-unranked h2{margin:0 0 8px;font-size:16px}
.cboard-unranked-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.cboard-unranked-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px;align-items:center;padding:10px 12px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}
.cboard-unranked-note{margin:2px 0 0}
/* Empty catalogue. */
.cboard-empty{display:grid;gap:10px;justify-items:center;text-align:center;padding:28px 12px}
.cboard-empty h2{margin:0;font-size:18px}.cboard-empty p{margin:0;max-width:46ch}
/* The rail: newest opinion lines. */
.cboard-rail{min-width:0}
.cboard-rail-box{border:1px solid var(--border);border-radius:12px;background:var(--surface);padding:0 12px}
.cboard-rail-title{margin:0;min-height:44px;display:flex;align-items:center;font-size:13px;font-weight:700;color:var(--muted)}
.cboard-latest{list-style:none;margin:0;padding:0 0 10px;display:grid;gap:6px}
.cboard-latest-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;grid-template-areas:"who tk st" "date date date";gap:2px 8px;align-items:center;font-size:13px;padding:6px 0;border-top:1px solid var(--border)}
.cboard-latest-creator{grid-area:who;min-height:32px;padding:0;border:0;background:none;color:var(--text);font:inherit;font-weight:600;text-align:left;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cboard-latest-creator:hover{text-decoration:underline}
.cboard-latest-row .ticker-chip{grid-area:tk}.cboard-latest-row .csim-stance{grid-area:st}
.cboard-latest-row.is-bull .csim-stance{color:var(--bull,var(--green))}.cboard-latest-row.is-bear .csim-stance{color:var(--bear,var(--red))}
/* 看多 / 看空 at a glance (owner, 2026-10-10): the ticker chip and the stance pill carry the direction colour. */
.cboard-latest-row.is-bull .ticker-chip,.cboard-card .csim-opinion.is-bull .ticker-chip{color:var(--bull,var(--green));border-color:color-mix(in srgb,var(--bull,var(--green)) 45%,transparent);background:color-mix(in srgb,var(--bull,var(--green)) 12%,var(--surface))}
.cboard-latest-row.is-bear .ticker-chip,.cboard-card .csim-opinion.is-bear .ticker-chip{color:var(--bear,var(--red));border-color:color-mix(in srgb,var(--bear,var(--red)) 45%,transparent);background:color-mix(in srgb,var(--bear,var(--red)) 12%,var(--surface))}
.cboard-latest-row.is-bull .csim-stance,.cboard-card .csim-opinion.is-bull .csim-stance{background:color-mix(in srgb,var(--bull,var(--green)) 14%,transparent)}
.cboard-latest-row.is-bear .csim-stance,.cboard-card .csim-opinion.is-bear .csim-stance{background:color-mix(in srgb,var(--bear,var(--red)) 14%,transparent)}
.cboard-card .csim-opinion.is-bull{border-left:3px solid var(--bull,var(--green));padding-left:8px}.cboard-card .csim-opinion.is-bear{border-left:3px solid var(--bear,var(--red));padding-left:8px}
.cboard-takes{margin-top:8px;min-width:0}
/* An open panel's card keeps only the buy calls in its last column; their own title heads it. */
.cboard-layout.is-panel .cboard-card .perf-recent>.perf-col-title{display:none}
/* A creator's takes (creator-takes.js): period and stance as connected segmented controls (the shared .studio-seg, 44 px
   targets), the stock as a select, then the folded opinion rows. */
/* position: the visually hidden heading stays inside the scrolling main column (absolute without a positioned ancestor, it
   lengthened the document and a scroll into view moved the whole page on phones). */
.ctakes{position:relative;display:grid;gap:12px;min-width:0}
.ctakes-head{display:flex;align-items:baseline;gap:8px;min-width:0}
.ctakes-controls{display:flex;flex-wrap:wrap;align-items:end;gap:10px 18px;min-width:0}
.ctakes-control{display:grid;gap:4px;min-width:0;max-width:100%}
.ctakes-control-label{font-size:12px;line-height:1.5;color:var(--muted)}
.ctakes-seg.studio-seg{max-width:100%;border-radius:8px;border-color:var(--border)}
.ctakes-seg.studio-seg>button{min-height:44px;min-width:44px;padding:8px 14px;font-size:13px;color:var(--text)}
.ctakes-seg.studio-seg>button+button{border-left:1px solid var(--border)}
.ctakes-seg.studio-seg>button[aria-pressed=true]{background:color-mix(in srgb,var(--accent) 18%,var(--surface));font-weight:650;box-shadow:inset 0 -2px 0 var(--accent)}
.ctakes-seg.studio-seg>button:focus-visible{outline:3px solid var(--focus-ring,var(--accent));outline-offset:-3px}
.ctakes-stock-select{min-height:44px;min-width:150px;max-width:100%;font-size:16px}
.ctakes-notice{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px}.ctakes-notice:empty{display:none}.ctakes-notice p{margin:0}
.ctakes-list{list-style:none;margin:0;padding:0;display:grid;gap:8px;min-width:0}
.ctakes-row{min-width:0}
.ctakes-state{display:grid;gap:8px;justify-items:start;padding:8px 0}.ctakes-state p{margin:0}
.ctakes .creator-opinion .opinion-subject{margin:4px 0 4px;font-size:14px;gap:4px 10px}
.ctakes .creator-opinion .opinion-subject .ticker-symbol{font-size:15px;padding:3px 8px}
.ctakes .creator-opinion.is-bull{border-left:3px solid var(--bull,var(--green))}.ctakes .creator-opinion.is-bear{border-left:3px solid var(--bear,var(--red))}
.ctakes-foot{display:flex}.ctakes-more[hidden]{display:none}
/* The take a link opened (a stock page, the research map, an alert): above the list, expanded and marked. The box takes
   focus for screen readers; its border is the visible mark. */
.ctakes-focus{display:grid;gap:8px;min-width:0;padding:12px;border:1px solid color-mix(in srgb,var(--accent) 40%,var(--border));border-radius:12px;background:color-mix(in srgb,var(--accent) 6%,var(--surface));scroll-margin:96px 0}
.ctakes-focus:focus{outline:none}
.ctakes-focus-head{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0}
.ctakes-focus-title{margin:0;font-size:13px;font-weight:650;color:var(--muted)}
.ctakes-focus-head>.btn{flex:none;min-height:44px}
.ctakes-focus .creator-opinion.is-focused{outline:2px solid var(--accent);outline-offset:2px}
/* 观点历史 inside the panel: its disclosures are full-size targets at every width. */
.ctakes :is(.study-method,.study-detail)>summary{box-sizing:border-box;min-height:44px;padding:12px 0;line-height:20px;cursor:pointer}
@media(max-width:600px){
 .ctakes-controls{display:grid;grid-template-columns:minmax(0,1fr)}
 .ctakes-seg.studio-seg{display:flex;width:100%}
 .ctakes-head>.ctakes-control{flex:1 1 auto}
 .ctakes-seg.studio-seg>button{flex:1 1 0;min-width:0;padding:6px 4px;white-space:normal;line-height:1.25}
 .ctakes-stock-select{width:100%}
}
.cboard-latest-date{grid-area:date;font-size:11px;color:var(--muted)}
.cboard-add{display:grid;gap:8px}
@media(max-width:760px){
 .creator-board{gap:8px}.cboard-head{gap:8px}.cboard-layout{gap:8px}.cboard-controls{gap:6px}.cboard-title h1{font-size:21px;line-height:1.15}.cboard-sub{display:none}.cboard-sub-short{display:block}
 .cboard-filters{display:grid;grid-template-columns:minmax(0,1fr);overflow:visible;gap:8px;margin:0;padding:0}
 .cboard-group{display:flex;flex-wrap:wrap;max-width:100%;gap:6px}
 .cboard-chip,.cboard-active-chip{min-height:44px;font-size:13px}
 .cboard-identity-row{grid-template-columns:auto auto minmax(0,1fr)}
 .cboard-card.perf-card{padding:12px}
 .cboard-follow{width:100%}
 .cboard-unranked-row{grid-template-columns:auto minmax(0,1fr);grid-template-areas:"av who" "btn btn";gap:8px 10px}
 .cboard-unranked-row .creator-avatar,.cboard-unranked-row .creator-monogram{grid-area:av}.cboard-unranked-row .cboard-who{grid-area:who}.cboard-unranked-row .cboard-follow{grid-area:btn}
}

/* 6-month history import (plan 2026-10-10 §3.2): one truthful line per followed creator on the card, the unranked row and the
   creator header; nothing when the import is complete or unknown. Held reasons sit behind a <details>; 刷新 re-reads /me/kols. */
.creator-import{display:flex;flex-wrap:wrap;align-items:center;gap:2px 10px;margin:0;font-size:12px;line-height:1.4;color:var(--muted);min-width:0;max-width:100%}
.creator-import-text{overflow-wrap:anywhere}
.creator-import[data-creator-import=importing] .creator-import-text::before{content:"";display:inline-block;width:8px;height:8px;margin-right:6px;border-radius:50%;background:var(--accent);vertical-align:middle}
.creator-import[data-creator-import=rejected] .creator-import-text{color:var(--red)}
.creator-import-asof{white-space:nowrap}
.creator-import-refresh{min-height:32px;padding:2px 10px;font-size:12px}
.creator-import-held{flex-basis:100%;min-width:0}
.creator-import-held>summary{display:flex;align-items:center;min-height:32px;cursor:pointer}
.creator-import-held ul{margin:2px 0 4px;padding-left:18px;display:grid;gap:2px}
.creator-import-reason{overflow-wrap:anywhere}
.creator-import-note{margin:8px 0 0}
@media(max-width:760px){.creator-import-refresh,.creator-import-held>summary{min-height:44px}}

/* Hide list (UX review §5): 口径 chips under 进阶; a folded repeat in the latest-opinions rail reads ×n (T-06). */

.cboard-latest-repeats{font-variant-numeric:tabular-nums}
/* 模拟当前持仓 (creator-holdings.js, owner 2026-10-13; relaid 2026-10-13): a full-width row under the card's top row — donut
   left, a table with aligned columns right (股票 | 权重 | 入场以来 | 入场日 · 观点↗), the rest folded into one expandable row,
   「总收益怎么来的」 collapsed underneath. Slice hues are the validated categorical order (slots 1–8), stepped for the dark
   surface; 其余 and 现金 are neutral so they never read as a holding. Text stays in text tokens; the swatch carries identity. */
/* 跟随模拟组合 (owner 2026-10-13, second design): weighting switch + disclaimer, a treemap of the current book (area = weight,
   colour = return since entry on --pos / --neg), 总收益怎么来的 beside it on wide cards, the position timeline and the ledger. */
.chold{display:grid;gap:10px;align-content:start;min-width:0}
/* The top row keeps three columns when the radar is off (profile | curve + tiles | 最近观点); the holdings row spans them all. */
@container (min-width:1041px){.perf-card:not(.perf-card--wide) .perf-grid.no-radar{grid-template-columns:minmax(180px,240px) minmax(0,2.4fr) minmax(180px,1.2fr)}}
.perf-grid>.perf-holdings{grid-column:1/-1;grid-row:auto;border-top:1px solid var(--border);padding-top:12px}
.chold-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;min-width:0}.chold-head .perf-col-title{margin:0}
.chold-asof,.chold-empty,.chold-note{margin:0;line-height:1.45}
.chold-intro{display:grid;gap:2px;min-width:0}
.chold-disclaimer{margin:0;line-height:1.45;padding-left:8px;border-left:3px solid color-mix(in srgb,var(--accent) 60%,var(--border));color:var(--text)}
.chold-weighting{display:inline-flex;flex-wrap:wrap;gap:2px;padding:2px;border:1px solid var(--border);border-radius:999px;background:var(--bg-2)}
.chold-weight-pick{min-height:30px;padding:0 12px;border:0;border-radius:999px;background:transparent;color:var(--muted);font:inherit;font-size:13px;cursor:pointer;white-space:nowrap}
.chold-weight-pick[aria-pressed=true]{background:var(--surface);color:var(--text);font-weight:600;box-shadow:0 1px 2px rgb(0 0 0 / .12)}
.chold-weight-pick:focus-visible,.chold-tile:focus-visible,.chold-bar:focus-visible,.chold-tab:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
/* Shared heat scale: tone up/down × intensity 1–5 (|return| <2, <5, <10, <20, ≥20 %). */
.chold [data-tone=up]{--tone:var(--pos,var(--green))}.chold [data-tone=down]{--tone:var(--neg,var(--red))}.chold [data-tone=flat]{--tone:var(--muted)}
.chold [data-heat="1"]{--mix:16%}.chold [data-heat="2"]{--mix:28%}.chold [data-heat="3"]{--mix:40%}.chold [data-heat="4"]{--mix:52%}.chold [data-heat="5"]{--mix:64%}
/* Treemap */
.chold-figure{position:relative;margin:0;min-width:0}
.chold-map{position:relative;width:100%;aspect-ratio:16/9;max-height:340px;border-radius:10px;overflow:hidden;background:var(--bg-2)}
.chold-tile{position:absolute;box-sizing:border-box;margin:0;padding:0;border:1px solid var(--surface);border-radius:4px;overflow:hidden;container:chold-tile / size;
  background:color-mix(in srgb,var(--tone,var(--muted)) var(--mix,12%),var(--surface));color:var(--text);font:inherit;text-align:left;cursor:pointer}
.chold-tile[data-tone=cash]{background:repeating-linear-gradient(135deg,var(--bg-2) 0 6px,var(--surface) 6px 12px);color:var(--muted)}
.chold-tile[aria-expanded=true]{border-color:var(--text)}
.chold-tile-in{position:absolute;inset:4px 6px;display:flex;flex-direction:column;gap:1px;min-width:0;overflow:hidden}
.chold-tile-name{font-weight:700;font-size:13px;line-height:1.25;white-space:nowrap;overflow:hidden}
.chold-tile-meta{display:flex;flex-wrap:wrap;gap:0 4px;font-size:12px;line-height:1.3;white-space:nowrap;font-variant-numeric:tabular-nums}
.chold-tile-w::after{content:' ·'}
.chold-tile[data-fit=name] .chold-tile-meta,.chold-tile[data-fit=none] .chold-tile-meta,.chold-tile[data-fit=none] .chold-tile-name{display:none}
@container chold-tile (min-width:130px) and (min-height:64px){.chold-tile-name{font-size:15px}}
@container chold-tile (max-width:118px){.chold-tile-w::after{content:none}}
@container chold-tile (max-width:58px){.chold-tile-meta{display:none}}
@container chold-tile (max-height:38px){.chold-tile-meta{display:none}}
@container chold-tile (max-width:118px) and (max-height:58px){.chold-tile-meta{display:none}}
@container chold-tile (max-width:34px){.chold-tile-name{display:none}}
@container chold-tile (max-height:18px){.chold-tile-name{display:none}}
.chold-legend{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;margin-top:6px}
.chold-scale{display:inline-flex;align-items:center;gap:2px;font-variant-numeric:tabular-nums}.chold-scale-end{font-size:11px;padding:0 4px}
.chold-swatch{display:inline-block;width:12px;height:10px;border-radius:2px;background:color-mix(in srgb,var(--tone,var(--muted)) var(--mix,12%),var(--surface))}
.chold-tip{position:absolute;z-index:6;box-sizing:border-box;width:max-content;max-width:min(300px,100%);padding:8px 10px;border:1px solid var(--border);border-radius:10px;
  background:var(--surface);color:var(--text);box-shadow:0 6px 20px rgb(0 0 0 / .18);font-size:12px;line-height:1.55;overflow-wrap:anywhere}
.chold-tip[hidden]{display:none}.chold-tip-head{font-size:13px}
.chold .is-up{color:var(--pos,var(--green))}.chold .is-down{color:var(--neg,var(--red))}
.chold-call{white-space:nowrap}
/* Position timeline (desktop Gantt) */
.chold-timeline{display:grid;gap:6px;min-width:0}
.chold-sub{display:flex;align-items:center;gap:4px;margin:0;font-size:13px;font-weight:600}
.chold-info{position:static;transform:none;display:grid;place-items:center;flex:0 0 44px;width:44px;height:44px;min-height:44px;margin:-11px 0;border:0;background:transparent;color:transparent;font-size:0}
.chold-info::before{content:'?';display:grid;place-items:center;width:18px;height:18px;border:1px solid var(--muted);border-radius:50%;color:var(--muted);font-size:11px;font-weight:700;line-height:1}
.chold-info:hover::before,.chold-info:focus-visible::before{border-color:var(--accent);color:var(--accent-text,var(--accent))}
.chold-gantt{--name:76px;--gap:8px;position:relative;min-width:0}
.chold-lanes-wrap{position:relative}
.chold-lanes-rest[hidden]{display:none}
.chold-lane{display:grid;grid-template-columns:var(--name) minmax(0,1fr);gap:var(--gap);align-items:center;min-height:22px}
.chold-lane-name{font-size:12px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text);text-decoration:none}
.chold-lane:not(.is-open) .chold-lane-name{color:var(--muted);font-weight:500}
.chold-track{position:relative;height:22px;border-bottom:1px solid color-mix(in srgb,var(--border) 45%,transparent)}
.chold-bar{position:absolute;top:5px;box-sizing:border-box;height:12px;margin:0;padding:0;border:0;border-radius:6px;cursor:pointer;
  background:color-mix(in srgb,var(--tone) calc(var(--mix) + 30%),var(--surface))}
.chold-bar::before{content:'';position:absolute;left:0;top:50%;width:6px;height:6px;margin-top:-5px;border-radius:50%;border:2px solid var(--tone);background:var(--surface)}
/* A closed trade: a lighter bar (not opacity, so its two points stay solid) and an exit point that names the reason. */
.chold-bar[data-state=closed]{background:color-mix(in srgb,var(--tone) calc(var(--mix) + 8%),var(--surface))}
.chold-bar[data-state=closed]::after{content:'';position:absolute;right:-1px;top:50%;width:8px;height:8px;margin-top:-4px;box-sizing:border-box;
  border-radius:50%;background:var(--tone)}
.chold-bar[data-exit=turned]::after{border-radius:1px;transform:rotate(45deg)}
.chold-bar[data-exit=expired]::after{background:var(--surface);border:2px dashed var(--tone)}
/* The key under the timeline uses the same shapes. */
.chold-timeline-key{margin:2px 0 0;gap:4px 14px}
.chold-mark-key{display:inline-flex;align-items:center;gap:6px}
.chold-mark{--tone:var(--muted);display:inline-block;width:8px;height:8px;box-sizing:border-box;border-radius:50%;background:var(--tone)}
.chold-mark[data-mark=entry]{background:var(--surface);border:2px solid var(--tone)}
.chold-mark[data-mark=turned]{border-radius:1px;transform:rotate(45deg)}
.chold-mark[data-mark=expired]{background:var(--surface);border:2px dashed var(--tone)}
.chold-bar[data-state=open]{top:4px;height:14px;border-radius:7px 0 0 7px}
.chold-bar[data-state=open]::before{margin-top:-5px}
.chold-bar[aria-expanded=true]{outline:2px solid var(--text);outline-offset:1px;opacity:1}
.chold-today-line{position:absolute;top:0;bottom:0;right:0;width:0;border-right:1px dashed var(--muted);pointer-events:none}
.chold-axis{display:grid;grid-template-columns:var(--name) minmax(0,1fr);gap:var(--gap);height:20px;margin-bottom:4px}
.chold-axis-track{position:relative;min-width:0}
.chold-tick{position:absolute;top:3px;line-height:15px;transform:translateX(-50%);font-size:11px;color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums}
.chold-tick-today{left:auto;right:0;transform:none;color:var(--text)}
.chold-phone{display:none}
/* Expanders */
.chold-more{display:flex;align-items:center;gap:8px;width:100%;min-height:36px;padding:4px 2px;border:0;background:transparent;color:var(--accent);font:inherit;font-size:13px;text-align:left;cursor:pointer}
.chold-more:hover{text-decoration:underline}
.chold-more:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;border-radius:6px}
/* Ledger */
.chold-ledger{border-top:1px dashed var(--border);padding-top:2px;min-width:0}
.chold-ledger-body{display:grid;gap:8px;min-width:0}
.chold-tabs{display:flex;gap:4px;border-bottom:1px solid var(--border)}
.chold-tab{min-height:36px;padding:0 12px;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--muted);font:inherit;font-size:13px;cursor:pointer}
.chold-tab[aria-selected=true]{border-bottom-color:var(--accent);color:var(--text);font-weight:600}
.chold-panel[hidden]{display:none}.chold-panel{min-width:0}
.chold-table{width:100%;border-collapse:collapse;font-size:13px;font-variant-numeric:tabular-nums;table-layout:auto}
.chold-th{padding:0 8px 6px;font-size:12px;font-weight:600;color:var(--muted);text-align:left;white-space:nowrap;border-bottom:1px solid var(--border)}
.chold-table td{padding:5px 8px;border-bottom:1px solid color-mix(in srgb,var(--border) 60%,transparent);white-space:nowrap;vertical-align:middle}
.chold-table th:first-child,.chold-table td:first-child{padding-left:2px}
.chold-num{text-align:right}.chold-th.chold-num{text-align:right}
.chold-weight{font-weight:600}
.chold-entry,.chold-exit{color:var(--muted);font-size:12px}
.chold-reason{color:var(--text)}
.chold-table .ticker-chip{min-height:0;padding:2px 8px;font-size:12px;line-height:1.4}
.chold-phone-only{display:none}
/* 总收益怎么来的 */
.chold-how{border-top:1px dashed var(--border);padding-top:2px;min-width:0}
.chold-how-summary{display:flex;align-items:center;gap:6px;min-height:44px;cursor:pointer;font-size:13px;font-weight:600;list-style:none}
.chold-how-summary::-webkit-details-marker{display:none}
.chold-how-summary::before{content:'▸';color:var(--muted);transition:transform .12s}details[open]>.chold-how-summary::before{transform:rotate(90deg)}
.chold-how-summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}
.chold-how-body{display:grid;gap:6px;padding:0 0 4px}
.chold-col{margin:0}
.chold-parts{list-style:none;margin:0;padding:0;display:grid;gap:2px;font-size:13px;font-variant-numeric:tabular-nums}
.chold-part{display:flex;justify-content:space-between;gap:12px}.chold-part-name{min-width:0;overflow-wrap:anywhere}
.chold-part-head{margin-top:6px;font-size:12px;color:var(--muted)}
.chold-part-value{white-space:nowrap}.chold-part-value.is-up{color:var(--pos,var(--green))}.chold-part-value.is-down{color:var(--neg,var(--red))}
.chold-part.is-total{border-top:1px dashed var(--border);padding-top:3px;margin-top:4px;font-weight:700}

/* Wide cards (content ≥ 860 px): the map with 「总收益怎么来的」 open in a right column (creator-holdings.js reads --chold-wide). */
@container (min-width:860px){
 .chold{--chold-wide:1;grid-template-columns:minmax(0,1fr) minmax(250px,300px);column-gap:24px;align-items:start}
 .chold-head,.chold-intro,.chold-timeline,.chold-ledger{grid-column:1/-1}
 .chold-asof{margin-left:auto}
 .chold-figure{grid-column:1;grid-row:3}
 .chold-how{grid-column:2;grid-row:3;border-top:0;border-left:1px dashed var(--border);padding:0 0 0 16px}
 .chold-how-summary{min-height:32px;align-items:flex-start}
}
/* Phones (card ≤ 640 px): the map stays (4:3), the timeline becomes one line per trade with a thin progress bar, tables stack. */
@container (max-width:640px){
 .chold-map{aspect-ratio:4/3}
 .chold-weighting{display:flex;width:100%}.chold-weight-pick{flex:1;min-height:44px;padding:0 8px;white-space:normal;line-height:1.2}
 .chold-gantt{display:none}.chold-phone{display:block}.chold-timeline-key{display:none}
 .chold-more,.chold-tab{min-height:44px}
 .chold-trades{list-style:none;margin:0;padding:0}.chold-trades[hidden]{display:none}
 .chold-trade{display:grid;gap:2px;padding:2px 0 8px;border-bottom:1px solid color-mix(in srgb,var(--border) 60%,transparent)}
 .chold-trade[data-state=closed] .chold-trade-name{color:var(--muted)}
 .chold-trade-top{display:flex;align-items:center;gap:8px;min-width:0}
 .chold-trade-name{display:inline-flex;align-items:center;min-height:44px;padding:0 2px;font-weight:700;font-size:14px;color:var(--text);text-decoration:none;white-space:nowrap}
 .chold-trade-dates{flex:1;min-width:0;font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums}
 .chold-trade-ret{white-space:nowrap;font-variant-numeric:tabular-nums}
 .chold-progress{position:relative;height:4px;border-radius:2px;background:var(--bg-2);overflow:hidden}
 .chold-progress-bar{position:absolute;top:0;bottom:0;border-radius:2px;background:color-mix(in srgb,var(--tone) calc(var(--mix) + 36%),var(--surface))}
 .chold-progress-bar[data-state=closed]{opacity:.5}
 .chold-trade-meta{display:flex;flex-wrap:wrap;align-items:center;gap:0 6px;overflow-wrap:anywhere}
 .chold-trade-meta .chold-call,.chold-entry .chold-call{display:inline-flex;align-items:center;min-height:44px}
 .chold-table,.chold-table thead,.chold-table tbody{display:block}
 .chold-table thead tr{display:none}
 .chold-table tr{display:grid;grid-template-columns:minmax(0,1fr) auto auto;column-gap:10px;align-items:center;padding:4px 0;border-bottom:1px solid color-mix(in srgb,var(--border) 60%,transparent)}
 .chold-table td{display:block;border-bottom:0;padding:0 2px;min-width:0}
 .chold-table .chold-entry,.chold-table .chold-exit{grid-column:1/-1;white-space:normal;overflow-wrap:anywhere}
 .chold-ledger-open .chold-calls{display:none}.chold-phone-only{display:inline}
 .chold-ledger-closed .chold-stock{grid-row:1;grid-column:1}.chold-ledger-closed .chold-return{grid-row:1;grid-column:2/-1}
}
@media(prefers-reduced-motion:reduce){.chold-how-summary::before{transition:none}}
/* 最近买入建议 (owner 2026-10-13): one highlighted line per recent bullish call with a stated entry price/zone, above 最近观点. */
.cboard-recent{display:grid;gap:12px;min-width:0;align-content:start}
.cbuy-block{display:grid;gap:6px;min-width:0;padding:8px 10px;border-radius:10px;border:1px solid color-mix(in srgb,var(--bull,var(--green)) 35%,var(--border));background:color-mix(in srgb,var(--bull,var(--green)) 7%,var(--surface))}
.cbuy-title{margin:0;font-size:12px;font-weight:600;color:var(--bull,var(--green))}
.cbuy-note{color:var(--muted);font-weight:400;cursor:help}
.cbuy-list{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.cbuy{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;font-size:13px;min-width:0}
.cbuy .ticker-chip{color:var(--bull,var(--green));border-color:color-mix(in srgb,var(--bull,var(--green)) 45%,transparent);background:color-mix(in srgb,var(--bull,var(--green)) 12%,var(--surface))}
.cbuy-price{white-space:nowrap}.cbuy-label{color:var(--muted);font-size:12px}.cbuy-value{font-variant-numeric:tabular-nums;color:var(--text,inherit)}
.cbuy-date{color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}
.cbuy-source{font-size:12px;white-space:nowrap}
@media (max-width:640px){.cbuy{row-gap:0}.cbuy-list{gap:2px}.cbuy-source{min-height:44px;display:inline-flex;align-items:center}}

/* Beta: one shared follow-simulation setting for every card and its rank. */
body.beta-ui-route .cboard-tunable .cboard-tuning{display:flex;flex-wrap:wrap;gap:10px 12px;padding:12px 0;border-bottom:1px solid var(--border)}
body.beta-ui-route .cboard-tunable .cboard-tuning .cboard-group{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;min-width:0;flex:1 1 144px}
body.beta-ui-route .cboard-tunable .cboard-tuning .cboard-group-label{grid-column:1/-1;margin-bottom:6px;font-weight:650;color:var(--text)}
body.beta-ui-route .cboard-tunable .cboard-tuning .cboard-chip{justify-content:center;border-radius:0;min-width:0;padding:6px 8px}
body.beta-ui-route .cboard-tunable .cboard-tuning .cboard-chip:nth-child(2){border-radius:8px 0 0 8px}
body.beta-ui-route .cboard-tunable .cboard-tuning .cboard-chip:last-child{border-radius:0 8px 8px 0}
body.beta-ui-route .cboard-tunable .cboard-chip{min-height:44px}
body.beta-ui-route .cboard-tunable .cboard-tuning-status{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;font-size:13px;line-height:1.5;color:var(--muted)}
body.beta-ui-route .cboard-tunable .cboard-tuning-status p{margin:0}
body.beta-ui-route .cboard-tunable .cboard-tuning-status [role=alert]{color:var(--red)}
body.beta-ui-route .cboard-tunable.is-variant-pending .cboard-applied{font-weight:650;color:var(--text)}
body.beta-ui-route .cboard-tunable .cboard-filters .cboard-group{flex-wrap:wrap}
body.beta-ui-route .cboard-tunable .cboard-filters .cboard-group-label{flex-basis:100%}
@media(max-width:600px){body.beta-ui-route .cboard-tunable .cboard-tuning{gap:10px}body.beta-ui-route .cboard-tunable .cboard-chip{font-size:12px;padding-inline:9px}}

body.beta-ui-route .cboard-tunable .cboard-filters{display:grid;gap:8px}
body.beta-ui-route .cboard-tunable .cboard-secondary{display:flex;flex-wrap:wrap;align-items:end;gap:8px 12px}
body.beta-ui-route .cboard-tunable .cboard-mine{border-color:transparent;color:var(--muted)}
body.beta-ui-route .cboard-tunable .cboard-method-note{font-size:12px;color:var(--muted)}
body.beta-ui-route .cboard-tunable .cboard-method-note summary{cursor:pointer;min-height:44px;align-content:center}
body.beta-ui-route .cboard-tunable .cboard-method-note p{margin:4px 0 8px;max-width:85ch}

/* Keep the two time choices primary, with the shared method beside them on desktop. */
body.beta-ui-route .cboard-tunable .cboard-tuning{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}
body.beta-ui-route .cboard-tunable .cboard-tuning>.cboard-group:last-child{grid-column:1/-1}
body.beta-ui-route .cboard-tunable .cboard-tuning .cboard-chip{white-space:normal;line-height:1.25}
body.beta-ui-route .cboard-tunable .cboard-control-footer{display:flex;flex-wrap:wrap;align-items:center;gap:0 18px}
body.beta-ui-route .cboard-tunable .cboard-control-footer .cboard-active:not([hidden]){flex-basis:100%}
body.beta-ui-route .cboard-tunable .cboard-method-note[open]{flex-basis:100%}
/* The controls measure their own width (a container): beside the rail they are narrower than the window suggests. Look back,
   Hold and Method share one row; the two time groups take their buttons' width so the method names get the rest. */
@container cboard-controls (min-width:720px){
 body.beta-ui-route .cboard-tunable .cboard-tuning{grid-template-columns:max-content max-content minmax(0,1fr);padding:4px 0 10px}
 body.beta-ui-route .cboard-tunable .cboard-tuning>.cboard-group:last-child{grid-column:auto;grid-template-columns:repeat(3,auto)}
}
/* The shared card's generic 1040px breakpoint otherwise puts the author above the chart. */
@container(min-width:700px){
 body.beta-ui-route .cboard-tunable .cboard-card .perf-grid.no-radar{grid-template-columns:minmax(180px,.8fr) minmax(0,1.8fr)}
 body.beta-ui-route .cboard-tunable .cboard-card .perf-subject{grid-column:1;grid-row:1}
 body.beta-ui-route .cboard-tunable .cboard-card .perf-figure{grid-column:2;grid-row:1}
 body.beta-ui-route .cboard-tunable .cboard-card .perf-recent{grid-column:1/-1;grid-row:2}
}
@container(min-width:950px){
 body.beta-ui-route .cboard-tunable .cboard-card .perf-grid.no-radar{grid-template-columns:minmax(170px,.75fr) minmax(0,1.8fr) minmax(160px,.75fr)}
 body.beta-ui-route .cboard-tunable .cboard-card .perf-recent{grid-column:3;grid-row:1}
 /* An open panel's card has no recent column when the creator stated no buy price: the curve takes that space. */
 body.beta-ui-route .cboard-tunable .cboard-card .perf-grid.no-radar:not(:has(>.perf-recent)){grid-template-columns:minmax(170px,.75fr) minmax(0,2.55fr)}
}
/* Phone: readable time labels and a real compact Latest views disclosure. */
@media(max-width:600px){
 body.beta-ui-route .cboard-tunable .cboard-tuning .cboard-group:not(:last-child) .cboard-chip{white-space:nowrap;padding-inline:3px;font-size:12px}
}
@container cboard (max-width:1039px){
 body.beta-ui-route .cboard-tunable .cboard-rail:not(:has(.cboard-latest-row)){display:none}
 body.beta-ui-route .cboard-tunable .cboard-rail-box{padding-top:0}
 body.beta-ui-route .cboard-tunable .cboard-rail-title{min-height:44px;padding-right:48px}
 body.beta-ui-route .cboard-tunable .cboard-rail-box .context-duck-motion{left:auto;right:8px;top:0;width:48px;height:44px;translate:none}
}
body.beta-ui-route .cboard-tunable .cboard-tuning .cboard-group{align-items:stretch}
@media(max-width:360px){
 body.beta-ui-route .cboard-tunable .cboard-tuning{grid-template-columns:minmax(0,1fr)}
}

/* Beta creator reading hierarchy: identity, result, then supporting facts. */
body.beta-ui-route .cboard-tunable{font-family:var(--font);font-size:14px;line-height:1.55}
body.beta-ui-route .cboard-tunable .cboard-person{grid-template-columns:44px minmax(0,1fr);grid-template-areas:"avatar who" "rank who";gap:4px 10px;align-items:start}
body.beta-ui-route .cboard-tunable .cboard-person>.creator-avatar,body.beta-ui-route .cboard-tunable .cboard-person>.creator-monogram{grid-area:avatar}
body.beta-ui-route .cboard-tunable .cboard-person>.cboard-rank{grid-area:rank;min-width:0;width:44px;height:20px;padding:0;border:0;background:none;font-size:12px;font-weight:600;color:var(--muted)}
body.beta-ui-route .cboard-tunable .cboard-person>.cboard-who{grid-area:who}
body.beta-ui-route .cboard-tunable .cboard-name{font-size:18px;line-height:1.4;font-weight:700;letter-spacing:-.015em}
/* A wrapped inline link has dead space between line boxes; the full name is one hit area. */
body.beta-ui-route .cboard-tunable .cboard-name a{display:block;min-height:44px;border-radius:4px;text-decoration-thickness:1px;text-underline-offset:4px}
body.beta-ui-route .cboard-tunable .cboard-name a:hover{color:var(--accent-text,var(--text));text-decoration:underline}
body.beta-ui-route .cboard-tunable .cboard-name a:focus-visible{outline:3px solid var(--focus-ring);outline-offset:3px}
body.beta-ui-route .cboard-tunable .cboard-meta-facts{display:grid;gap:2px;font-size:12px;line-height:1.6;letter-spacing:0}
body.beta-ui-route .cboard-tunable .cboard-identity{gap:8px}
body.beta-ui-route .cboard-tunable .cboard-counts{font-size:13px;line-height:1.5;gap:4px 10px}
body.beta-ui-route .cboard-tunable .cboard-card .perf-subject{gap:12px}
body.beta-ui-route .cboard-tunable .cboard-card .perf-headline{gap:4px}
body.beta-ui-route .cboard-tunable .cboard-card .perf-headline-label{font-size:12px;line-height:1.5;font-weight:500}
body.beta-ui-route .cboard-tunable .cboard-card .perf-hero{font-family:var(--font);font-size:32px;line-height:1.15;font-weight:700;letter-spacing:-.025em;font-variant-numeric:tabular-nums lining-nums}
body.beta-ui-route .cboard-tunable .cboard-card .perf-period{font-size:12px;line-height:1.6}
body.beta-ui-route .cboard-tunable .cboard-card .perf-stat{gap:3px;padding:8px}
body.beta-ui-route .cboard-tunable .cboard-card .perf-stat-label{font-size:12px;line-height:1.45;font-weight:500}
body.beta-ui-route .cboard-tunable .cboard-card .perf-stat-value{font-size:17px;line-height:1.35;font-weight:650;letter-spacing:-.01em}
body.beta-ui-route .cboard-tunable .cboard-card .perf-stat-note{font-size:12px;line-height:1.5}
body.beta-ui-route .cboard-tunable :is(.perf-col-title,.cboard-rail-title){font-size:14px;line-height:1.5;font-weight:650;letter-spacing:0;text-transform:none;color:var(--text)}
body.beta-ui-route .cboard-tunable .cboard-card .csim-quote{font-size:14px;line-height:1.65}
body.beta-ui-route .cboard-tunable :is(.csim-opinion-date,.cboard-latest-date,.perf-basis){font-size:12px;line-height:1.5}
body.beta-ui-route .cboard-tunable .cboard-latest-creator{font-size:13px;line-height:1.5;font-weight:600}
body.beta-ui-route .cboard-tunable .cboard-latest-row{row-gap:4px;padding-block:8px}
body.beta-ui-route .cboard-tunable .cboard-method-note{line-height:1.6}
body.beta-ui-route .cboard-tunable .cboard-tuning .cboard-group-label{font-size:13px;line-height:1.5;font-weight:650}
@media(max-width:600px){
 body.beta-ui-route .cboard-tunable .cboard-name{font-size:17px;letter-spacing:0}
 body.beta-ui-route .cboard-tunable .cboard-card .perf-hero{font-size:30px}
 body.beta-ui-route .cboard-tunable .cboard-card .perf-stat-value{font-size:16px}
}

/* Six metrics form balanced rows; axis text must not inherit the SVG grid stroke. */
body.beta-ui-route .cboard-tunable .cboard-card .perf-stats{grid-template-columns:repeat(3,minmax(0,1fr))}
body.beta-ui-route .cboard-tunable .cboard-card .perf-axis{fill:var(--muted);stroke:none;font-size:12px;font-weight:500;letter-spacing:0}
@container(min-width:1250px){
 body.beta-ui-route .cboard-tunable .cboard-card .perf-stats{grid-template-columns:repeat(6,minmax(0,1fr))}
}
@container(max-width:600px){
 body.beta-ui-route .cboard-tunable .cboard-card .perf-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* Language and ordering stay inside the same type system, without native OS popup fonts. */
body.beta-ui-route .cboard-tunable .cboard-secondary{display:grid;grid-template-columns:minmax(0,1fr);gap:10px 16px;align-items:end}
body.beta-ui-route .cboard-tunable .cboard-secondary>.cboard-group{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-items:stretch;gap:0;min-width:0;width:100%}
body.beta-ui-route .cboard-tunable .cboard-secondary>.cboard-group:nth-child(2){grid-template-columns:repeat(4,minmax(0,1fr))}
body.beta-ui-route .cboard-tunable .cboard-secondary .cboard-group-label{grid-column:1/-1;margin-bottom:6px;font-size:13px;font-weight:600;line-height:1.5}
body.beta-ui-route .cboard-tunable .cboard-secondary .cboard-chip{justify-content:center;min-width:44px;min-height:44px;padding:6px 8px;border-radius:0;font-family:var(--font);font-size:14px;line-height:1.35;font-weight:500;white-space:normal;text-align:center}
body.beta-ui-route .cboard-tunable .cboard-secondary .cboard-chip[aria-pressed=true]{font-weight:600}
body.beta-ui-route .cboard-tunable .cboard-secondary .cboard-group>.cboard-chip:nth-child(2){border-radius:6px 0 0 6px}
body.beta-ui-route .cboard-tunable .cboard-secondary .cboard-group>.cboard-chip:last-child{border-radius:0 6px 6px 0}
body.beta-ui-route .cboard-tunable .cboard-secondary>.cboard-mine{justify-self:start;border-radius:6px}
@container cboard-controls (min-width:820px){
 body.beta-ui-route .cboard-tunable .cboard-secondary{grid-template-columns:minmax(180px,.8fr) minmax(0,1.7fr) auto}
}

/* Phones (≤ 600 px, owner 2026-10-25): the panel becomes one summary bar — the choices in words, then Filters (the same
   groups in a bottom sheet, .cboard-sheet) and 只看我关注的 (the panel's own toggle, placed here). Status lines (updating,
   an error with Retry) and the active creator / stock chips stay on the page; nothing in the bar sticks. */
.cboard-phonebar,.cboard-meta-line{display:none}
@media(max-width:600px){
 body.beta-ui-route .cboard-tunable .cboard-controls{grid-template-columns:auto auto minmax(0,1fr);align-items:center;gap:8px;padding:10px 12px}
 body.beta-ui-route .cboard-tunable .cboard-controls :is(.cboard-phonebar,.cboard-filters:not([hidden]),.cboard-secondary,.cboard-control-footer){display:contents}
 body.beta-ui-route .cboard-tunable .cboard-controls :is(.cboard-tuning,.cboard-secondary>.cboard-group,.cboard-method-note,.cboard-applied){display:none}
 body.beta-ui-route .cboard-tunable .cboard-controls .cboard-tuning-status:not(:has(>:not(.cboard-applied))){display:none}
 body.beta-ui-route .cboard-tunable .cboard-controls :is(.cboard-tuning-status,.cboard-active){grid-column:1/-1}
 /* A creator's panel has no list filters: its chip (博主：… ✕) takes the place of 只看我关注的 beside Filters. */
 body.beta-ui-route .cboard-tunable .cboard-controls:has(.cboard-filters[hidden]) .cboard-active{grid-row:2;grid-column:2/-1}
 body.beta-ui-route .cboard-tunable .cboard-summary{grid-row:1;grid-column:1/-1;margin:0;font-size:13px;line-height:18px;font-weight:600;color:var(--db-ink);text-wrap:balance}
 body.beta-ui-route .cboard-tunable .cboard-summary>span{white-space:nowrap}
 body.beta-ui-route .cboard-tunable .cboard-filters-open{grid-row:2;grid-column:1;display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:6px 14px 6px 12px;border:1px solid var(--db-line-strong);border-radius:999px;background:var(--db-paper);color:var(--db-ink);font:inherit;font-size:13px;font-weight:650;white-space:nowrap;cursor:pointer}
 body.beta-ui-route .cboard-tunable .cboard-filters-open .app-icon{width:18px;height:18px}
 body.beta-ui-route .cboard-tunable .cboard-controls .cboard-mine{grid-row:2;grid-column:2;justify-self:start;min-height:44px;padding:6px 14px;border:1px solid var(--db-line-strong);border-radius:999px;color:var(--db-ink);font-size:13px;font-weight:600;white-space:nowrap}
 body.beta-ui-route .cboard-tunable .cboard-controls .cboard-mine[aria-pressed=true]{border-color:var(--db-accent);background:var(--db-accent-soft);color:var(--db-accent-strong)}
 body.beta-ui-route .cboard-tunable :is(.cboard-filters-open,.cboard-controls .cboard-mine:not(:disabled)):hover{border-color:var(--db-accent)}
 /* The card: avatar · name · rank on one row, one meta line, the counts, Follow + All takes, then the result beside its label
    and the curve; the panel's three meta lines stay on wider screens. */
 body.beta-ui-route .cboard-tunable .cboard-card .cboard-identity{gap:6px}
 body.beta-ui-route .cboard-tunable .cboard-card .cboard-person{grid-template-columns:36px minmax(0,1fr) auto;grid-template-areas:"avatar who rank";gap:0 10px;align-items:center}
 body.beta-ui-route .cboard-tunable .cboard-card .cboard-person>:is(.creator-avatar,.creator-monogram){width:36px;height:36px;min-width:36px;font-size:15px}
 body.beta-ui-route .cboard-tunable .cboard-card .cboard-person>.cboard-rank{width:auto;height:auto;justify-self:end}
 body.beta-ui-route .cboard-tunable .cboard-card .cboard-name a{display:flex;align-items:center}
 body.beta-ui-route .cboard-tunable .cboard-card .cboard-meta-facts{display:none}
 body.beta-ui-route .cboard-tunable .cboard-card .cboard-meta-line{display:block;margin:0;font-size:12px;line-height:1.5;overflow-wrap:anywhere}
 body.beta-ui-route .cboard-tunable .cboard-card .perf-subject{gap:8px}
 body.beta-ui-route .cboard-tunable .cboard-card .perf-headline{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 8px}
}
/* The Filters sheet: the panel's own groups (each one row; labels wrap inside their button), the applied period, the
   method note. The sheet carries .cboard-tunable, so the panel's styles apply unchanged. */
.cboard-sheet{display:grid;gap:12px;min-width:0}
body.beta-ui-route .cboard-sheet.cboard-tunable .cboard-tuning{padding:0 0 12px}
/* The dialog body breaks words anywhere; a choice keeps its words whole (Subscribers, 订阅数) and wraps between them. */
body.beta-ui-route .cboard-sheet.cboard-tunable .cboard-chip{overflow-wrap:normal}
body.beta-ui-route .cboard-sheet.cboard-tunable .cboard-secondary .cboard-chip{padding-inline:4px;font-size:13px}

