
  * { box-sizing:border-box; }
  body { background:var(--bg); color:var(--text); font:14px/1.5 -apple-system,"Segoe UI",Roboto,Helvetica,sans-serif; margin:0; padding:18px; }
  @media (min-width:1100px){ body{ padding:24px max(34px,calc((100vw - 1340px)/2)); } }
  a { text-decoration:none; color:inherit; }
  h1 { font-size:22px; margin:0; }
  h2 { font-size:15px; margin:26px 0 6px; display:flex; align-items:center; gap:8px; }
  h2 .idx { font-size:11px; color:var(--muted); border:1px solid var(--line); border-radius:6px; padding:1px 6px; font-weight:600; }
  .muted { color:var(--muted); } .sm { font-size:12px; }
  .pos { color:var(--ink-up, var(--up)); } .neg { color:var(--ink-down, var(--down)); }
  .back { font-size:12.5px; color:var(--muted); }
  .back:hover { color:var(--ink-link, var(--link)); }
  .chip { display:inline-block; font-size:11px; padding:1px 8px; margin:0 4px 4px 0; border-radius:7px; background:var(--panel2); border:1px solid var(--line); color:var(--muted); }
  /* standout-board cross-reference: ★ marks a member currently on the US standout buy board */
  .sb-star { color:var(--ink-warn, var(--warn)); text-decoration:none; font-size:12px; }
  .sb-star:hover { filter:brightness(1.15); }
  .chip.sb-chip { color:var(--ink-warn, var(--warn)); border-color:color-mix(in srgb, var(--warn) 38%, var(--line)); background:color-mix(in srgb, var(--warn) 12%, var(--panel2)); }
  /* W4 stock-personality slim chips in holdings table (display-only, R-SP13) */
  .sp-td-chip,.sp-td-mode{display:inline-block;font-size:9.5px;font-weight:600;padding:0px 5px;border-radius:5px;cursor:help;white-space:nowrap}
  .sp-td-chip{background:color-mix(in srgb,var(--muted) 8%,transparent);color:var(--muted);border:1px solid color-mix(in srgb,var(--muted) 22%,transparent)}
  .sp-td-mode{background:color-mix(in srgb,var(--info) 8%,transparent);color:var(--ink-info, var(--info,var(--link)));border:1px solid color-mix(in srgb,var(--info,var(--link)) 28%,transparent)}
  /* within-theme member context chip (basket_member_context.py band — display-only cohort read) */
  .mc-chip{display:inline-block;font-size:9.5px;font-weight:600;padding:0px 5px;border-radius:5px;white-space:nowrap;cursor:help}
  .mc-chip.pos{background:color-mix(in srgb,var(--up) 10%,transparent);color:var(--ink-up, var(--up));border:1px solid color-mix(in srgb,var(--up) 28%,transparent)}
  .mc-chip.warn{background:color-mix(in srgb,var(--warn) 10%,transparent);color:var(--ink-warn, var(--warn));border:1px solid color-mix(in srgb,var(--warn) 28%,transparent)}
  .mc-chip.neg{background:color-mix(in srgb,var(--down) 10%,transparent);color:var(--ink-down, var(--down));border:1px solid color-mix(in srgb,var(--down) 28%,transparent)}
  .mc-chip.neu{background:color-mix(in srgb,var(--muted) 8%,transparent);color:var(--muted);border:1px solid color-mix(in srgb,var(--muted) 22%,transparent)}
  .panel { background:var(--panel); border:1px solid var(--line); border-radius:12px; padding:14px 16px; margin-top:10px; }
  .hero { display:flex; flex-wrap:wrap; gap:18px; align-items:flex-start; }
  .hero .lhs { flex:1; min-width:280px; }
  .hero .thesis { font-size:13px; line-height:1.55; color:var(--text); opacity:.9; max-width:75ch; margin:8px 0 0; }
  .scoreboxes { display:flex; gap:10px; flex-wrap:wrap; }
  .sbx { background:var(--panel2); border:1px solid var(--line); border-radius:11px; padding:10px 14px; text-align:center; min-width:96px; }
  .sbx .v { font-size:26px; font-weight:740; font-variant-numeric:tabular-nums; line-height:1; }
  .sbx .k { font-size:10.5px; color:var(--muted); text-transform:uppercase; letter-spacing:.05em; margin-top:4px; }
  .timing-strip { display:grid; grid-template-columns:repeat(7,minmax(72px,1fr)); gap:6px; margin-top:9px; }
  .timing-cell { background:var(--panel2); border:1px solid var(--line); border-radius:8px; padding:6px 8px; min-width:0; }
  .timing-cell .k { color:var(--muted); font-size:9.5px; text-transform:uppercase; letter-spacing:.04em; white-space:nowrap; }
  .timing-cell .v { font-size:13px; font-weight:720; font-variant-numeric:tabular-nums; white-space:nowrap; }
  .tlabel { font-size:11px; font-weight:700; letter-spacing:.05em; padding:3px 9px; border-radius:7px; text-transform:uppercase; }
  .treco { font-size:12px; font-weight:700; padding:3px 11px; border-radius:8px; }
  .cards { display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:12px; }
  .tx { background:var(--panel); border:1px solid var(--line); border-left:3px solid var(--c,var(--muted)); border-radius:11px; padding:12px 14px; }
  .tx .k { font-size:11px; text-transform:uppercase; letter-spacing:.05em; color:var(--muted); }
  .tx .v { font-size:20px; font-weight:720; font-variant-numeric:tabular-nums; margin:5px 0 3px; }
  .tx .d { font-size:11.5px; color:var(--muted); line-height:1.4; }
  .cbar { display:flex; height:8px; border-radius:5px; overflow:hidden; background:var(--line); margin:8px 0; }
  .cbar i { display:block; height:100%; }
  .kpis { display:flex; flex-wrap:wrap; gap:16px; }
  .kpis .k { font-size:10.5px; color:var(--muted); text-transform:uppercase; letter-spacing:.04em; }
  .kpis .v { font-size:16px; font-weight:680; font-variant-numeric:tabular-nums; }
  table { border-collapse:collapse; width:100%; font-size:13px; }
  th,td { padding:7px 9px; border-bottom:1px solid var(--line); white-space:nowrap; }
  th { color:var(--muted); font-weight:500; text-align:right; cursor:pointer; user-select:none; }
  th:first-child,td:first-child { text-align:left; }
  td.num,th.num { text-align:right; font-variant-numeric:tabular-nums; }
  .ts { overflow-x:auto; }
  .tk { font-weight:680; } .tk:hover { color:var(--ink-link, var(--link)); }
  .cv { font-weight:700; border-radius:6px; padding:1px 7px; font-size:12px; }
  /* confluence cascade tier badge (T1 master -> T4 earliest), ported from subsectors_china */
  .tier { display:inline-block; font-weight:800; font-size:10px; padding:1px 5px; border-radius:5px; letter-spacing:.02em; color:#fff; vertical-align:middle; }
  /* White text on the fill, so the FILL carries the text grade — the --ink-* rung
     is identity in dark and lands 5.3–6.5:1 in light (see subsectors). */
  .tier.T1 { background:var(--fill-up, var(--up)); }
  .tier.T2 { background:color-mix(in srgb, var(--fill-up, var(--up)) 84%, #000); }
  .tier.T3 { background:var(--fill-info, var(--info)); } .tier.T4 { background:#3c4a8c; }
  html[data-lang="zh"] .tier.T2 { background:color-mix(in srgb, var(--fill-up, var(--up)) 84%, #000); }
  .tier .prov { font-weight:700; opacity:.8; margin-left:1px; }
  .why { color:var(--muted); font-size:11.5px; white-space:normal; max-width:42ch; }
  #hold { table-layout:fixed; }
  #hold th,#hold td { vertical-align:top; }
  #hold .hold-stock { width:30%; }
  #hold .hold-potential { width:76px; }
  #hold .hold-verdict { width:34%; white-space:normal; }
  #hold .hold-entry { width:24%; white-space:normal; }
  #hold .hold-20d { width:72px; }
  .hold-company { color:var(--muted); font-size:11.5px; }
  .v-short { display:none; font-weight:700; }
  .act-table .act-entry { white-space:normal; max-width:24ch; }
  .fast-watch { margin-top:12px; padding-top:11px; border-top:1px solid var(--line); }
  .fast-watch-title { color:var(--ink-warn, var(--warn)); font-weight:720; margin-bottom:2px; }
  .watch-table .watch-blocker { white-space:normal; min-width:230px; }
  .timeline .ev { display:flex; gap:8px; padding:6px 0; border-top:1px solid var(--line); font-size:12.5px; }
  .timeline .ev:first-child { border-top:0; }
  .timeline .dt { color:var(--muted); width:84px; flex:0 0 84px; font-variant-numeric:tabular-nums; }
  .sev-high { color:var(--ink-down, var(--down)); } .sev-medium { color:var(--ink-warn, var(--warn)); }
  footer { color:var(--muted); font-size:11.5px; margin-top:28px; border-top:1px solid var(--line); padding-top:12px; max-width:95ch; }
  .disc { font-size:11.5px; color:var(--muted); margin-top:6px; max-width:90ch; }
  /* ---- cross-market narrative chip ---- */
  .xm-hot { font-size:12.5px; margin:2px 0 10px; padding:7px 11px; border-radius:8px;
    background:rgba(251,146,60,.10); border:1px solid rgba(251,146,60,.35); color:var(--text); }
  .xm-row { display:flex; flex-wrap:wrap; gap:8px; }
  .xm-chip { display:inline-flex; align-items:center; gap:7px; font-size:12.5px; color:inherit;
    border:1px solid var(--line); border-radius:9px; padding:5px 10px; background:var(--panel2); transition:border-color .15s; }
  .xm-chip:hover { border-color:var(--muted); }
  .xm-flag { font-size:14px; line-height:1; }
  .xm-nm { font-weight:600; max-width:24ch; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .xm-sc { font-weight:740; font-variant-numeric:tabular-nums; }
  .xm-ar.pos { color:var(--ink-up, var(--up)); } .xm-ar.neg { color:var(--ink-down, var(--down)); } .xm-ar.muted { color:var(--muted); }
  /* ── FTR W3: live strip in basket detail header ─────────────────────── */
  .ftr-live-strip { display:flex; flex-wrap:wrap; align-items:center; gap:8px; padding:8px 12px;
    background:var(--panel2); border:1px solid var(--line); border-radius:9px; margin-top:8px; font-size:12.5px; }
  .ftr-ls-pill { display:inline-flex; align-items:center; gap:4px; font-size:11px; font-weight:700; letter-spacing:.05em; text-transform:uppercase; padding:2px 8px; border-radius:12px; }
  .ftr-ls-pill.live { background:rgba(35,192,138,.14); border:1px solid rgba(35,192,138,.35); color:var(--ink-up, var(--up)); }
  .ftr-ls-pill.pre  { background:rgba(79,140,255,.12); border:1px solid rgba(79,140,255,.30); color:var(--ink-link, var(--link)); }
  .ftr-ls-pill.post,.ftr-ls-pill.closed { background:rgba(139,147,167,.08); border:1px solid var(--line); color:var(--muted); }
  .ftr-ls-chg { font-size:18px; font-weight:800; font-variant-numeric:tabular-nums; }
  .ftr-ls-chg.up { color:var(--ink-up, var(--up)); } .ftr-ls-chg.dn { color:var(--ink-down, var(--down)); }
  .ftr-ls-rank { font-size:12px; color:var(--muted); }
  /* ── FTR W8: anatomy panel ────────────────────────────────────────────── */
  .ftr-anatomy-card { background:var(--panel); border:1px solid var(--line); border-radius:12px; overflow:hidden; margin-top:8px; }
  .ftr-anatomy-hd { padding:13px 16px 10px; border-bottom:1px solid var(--line); display:grid; grid-template-columns:1fr auto auto; gap:12px; align-items:start; }
  .ftr-ah-why { font-size:12px; color:var(--muted); line-height:1.45; max-width:38ch; }
  .ftr-ah-why strong { color:var(--text); }
  .ftr-ah-score { font-size:32px; font-weight:800; font-variant-numeric:tabular-nums; line-height:1; text-align:center; }
  .ftr-leg-list { padding:12px 16px; display:grid; gap:8px; }
  .ftr-leg-row { display:grid; grid-template-columns:96px 1fr 56px 52px; align-items:center; gap:9px; }
  .ftr-leg-lbl { font-size:11px; color:var(--muted); font-weight:500; }
  .ftr-leg-wt  { font-size:9.5px; color:var(--muted); }
  .ftr-leg-bar { height:8px; background:color-mix(in srgb, var(--text) 14%, var(--panel2)); border-radius:4px; overflow:hidden; position:relative; }
  .ftr-leg-bar-ctr { position:absolute; left:50%; top:0; bottom:0; width:1px; background:color-mix(in srgb, var(--muted) 30%, transparent); }
  .ftr-leg-fill { position:absolute; top:0; bottom:0; border-radius:3px; }
  .ftr-leg-fill.pos { left:50%; background:var(--up); }
  .ftr-leg-fill.neg { right:50%; background:var(--down); }
  .ftr-leg-fill.crowd { left:50%; background:var(--ink-warn, var(--amber,#fb923c)); }
  .ftr-leg-val { font-size:12px; font-weight:700; font-variant-numeric:tabular-nums; text-align:right; }
  .ftr-leg-src { font-size:10.5px; color:var(--muted); text-align:right; }
  .ftr-anatomy-ft { padding:9px 16px; border-top:1px solid var(--line); background:rgba(251,146,60,.03);
    display:flex; flex-wrap:wrap; gap:10px; align-items:center; }
  .ftr-crowd-note { background:rgba(251,146,60,.10); border:1px solid rgba(251,146,60,.30); color:var(--ink-warn, var(--amber,#fb923c)); padding:3px 9px; border-radius:6px; font-size:11px; font-weight:700; }
  /* ---- sector-cycle mini-chart ---- */
  .cyc-readrow { display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin-top:9px; }
  .cyc-pchip { font-size:11.5px; font-weight:700; padding:2px 9px; border-radius:7px; }
  .cyc-rk { font-size:11.5px; color:var(--muted); border:1px solid var(--line); border-radius:7px; padding:2px 8px; }
  .cyc-rk b { color:var(--text); font-variant-numeric:tabular-nums; }
  .cyc-rk.pos { color:var(--ink-up, var(--up)); border-color:color-mix(in srgb, var(--up) 38%, var(--line)); }
  .cyc-rk.neg { color:var(--ink-down, var(--down)); border-color:color-mix(in srgb, var(--down) 38%, var(--line)); }
  /* ── GR1 · Group read band (group_pulse.v1 + group_earnings_pulse.v1) ──────────
     A context-only read plane: how much of the group is moving, whether it moves
     one way, where it sits on its arc, and what earnings are doing to it.
     --gr is deliberately a NON-directional hue. Nothing in this band is a buy or
     sell read (DNR:KILL-PSS-SR3-PARTICIPATION), so it must never borrow --up /
     --down for its own chrome. Actual member moves inside the band still route
     through --up / --down so zh 红涨绿跌 flips them. */
  :root { --gr:#8f8ae0; }
  html[data-theme="light"] { --gr:#5a51bd; }
  .gpr-band { position:relative; background:var(--panel); border:1px solid var(--line);
    border-radius:12px; margin-top:10px; overflow:hidden; }
  .gpr-band::before { content:""; position:absolute; inset:0 0 auto; height:2px;
    background:linear-gradient(90deg,var(--gr),color-mix(in srgb,var(--gr) 15%,transparent)); }
  html[data-theme="light"] .gpr-band { box-shadow:0 1px 2px rgba(28,36,48,.05),0 10px 26px -14px rgba(28,36,48,.18); }
  .gpr-hd { display:flex; flex-wrap:wrap; align-items:baseline; gap:4px 14px; padding:13px 16px 0; }
  .gpr-eyebrow { font-size:10px; font-weight:800; letter-spacing:.14em; text-transform:uppercase; color:var(--gr); }
  .gpr-asof { margin-left:auto; font-size:11px; color:var(--muted); }
  .gpr-asof b { font-variant-numeric:tabular-nums; font-weight:620; color:var(--text); }
  .gpr-stance { display:flex; flex-wrap:wrap; align-items:flex-start; gap:9px; padding:10px 16px 0; }
  .gpr-tok { font-size:10.5px; font-weight:800; letter-spacing:.07em; text-transform:uppercase;
    padding:3px 9px; border-radius:7px; white-space:nowrap; border:1px solid; flex:0 0 auto; margin-top:4px; }
  .gpr-tok.act { color:var(--gr); border-color:color-mix(in srgb,var(--gr) 55%,var(--line));
    background:color-mix(in srgb,var(--gr) 12%,transparent); }
  .gpr-tok.mut { color:var(--muted); border-color:var(--line); background:var(--panel2); }
  .gpr-read { font-size:17px; font-weight:620; line-height:1.42; max-width:52ch; letter-spacing:-.004em; }
  .gpr-backdrop { padding:7px 16px 0; font-size:12px; color:var(--muted); max-width:72ch; }
  .gpr-tiles { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:9px; padding:13px 16px 0; }
  .gpr-tile { background:var(--panel2); border:1px solid var(--line); border-radius:9px; padding:9px 11px 10px; min-width:0; }
  html[data-theme="light"] .gpr-tile { background:#f3f6fb; }
  .gpr-tile .k { font-size:9.5px; font-weight:700; letter-spacing:.09em; text-transform:uppercase;
    color:var(--muted); display:flex; align-items:center; gap:5px; }
  .gpr-tile .v { font-size:14.5px; font-weight:660; line-height:1.35; margin:5px 0 3px; }
  .gpr-tile .v b { font-variant-numeric:tabular-nums; font-weight:780; }
  .gpr-tile .d { font-size:11px; color:var(--muted); line-height:1.45; }
  .gpr-tile .d b { color:var(--text); font-variant-numeric:tabular-nums; font-weight:640; }
  .gpr-i { font-size:9.5px; line-height:1; color:var(--muted); border:1px solid var(--line); border-radius:50%;
    width:13px; height:13px; display:inline-flex; align-items:center; justify-content:center; cursor:help; flex:0 0 auto; }
  .gpr-i:hover { color:var(--gr); border-color:var(--gr); }
  .gpr-mchips { display:flex; flex-wrap:wrap; gap:4px; margin-top:6px; }
  .gpr-mchip { font-size:10px; border:1px solid var(--line); border-radius:5px; padding:0 5px;
    color:var(--muted); white-space:nowrap; cursor:help; }
  .gpr-mchip b { color:var(--text); font-weight:680; }
  .gpr-mchip .n { font-variant-numeric:tabular-nums; }
  /* the arc rail — where the group sits on the washout→advance→distribute arc.
     A position marker on a described arc, never a forecast: no arrow, no "next". */
  .gpr-arc { margin:13px 16px 0; padding:11px 13px 10px; border:1px solid var(--line);
    border-radius:9px; background:color-mix(in srgb,var(--gr) 4%,var(--panel2)); }
  .gpr-arc-k { font-size:9.5px; font-weight:700; letter-spacing:.09em; text-transform:uppercase; color:var(--muted); }
  .gpr-rail { display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); margin-top:10px; position:relative; }
  .gpr-rail::before { content:""; position:absolute; left:10%; right:10%; top:4px; height:1px; background:var(--line); }
  .gpr-stop { position:relative; text-align:center; min-width:0; }
  .gpr-dot { width:9px; height:9px; border-radius:50%; margin:0 auto; background:var(--panel);
    border:1px solid var(--line); position:relative; z-index:1; }
  .gpr-stop.on .gpr-dot { background:var(--gr); border-color:var(--gr);
    box-shadow:0 0 0 4px color-mix(in srgb,var(--gr) 20%,transparent); }
  .gpr-stop .lbl { display:block; margin-top:8px; font-size:9.5px; line-height:1.3; color:var(--muted); }
  .gpr-stop.on .lbl { color:var(--text); font-weight:700; }
  .gpr-arc-note { margin-top:10px; font-size:11px; color:var(--muted); display:flex; align-items:center; gap:6px; }
  /* what we're watching — windows, not certainties */
  .gpr-watch { margin-top:13px; padding:12px 16px 14px; border-top:1px solid var(--line);
    background:color-mix(in srgb,var(--gr) 3%,transparent); }
  .gpr-watch-k { font-size:9.5px; font-weight:700; letter-spacing:.09em; text-transform:uppercase; color:var(--muted); }
  .gpr-wcols { display:grid; grid-template-columns:1fr 1fr; gap:10px 24px; margin-top:9px; }
  .gpr-wcol h5 { margin:0 0 5px; font-size:11.5px; font-weight:700; }
  .gpr-wcol h5 .ar { color:var(--muted); font-weight:600; margin-right:4px; }
  .gpr-wcol ul { margin:0; padding-left:16px; }
  .gpr-wcol li { font-size:12px; line-height:1.55; color:var(--muted); }
  .gpr-foot { margin-top:11px; font-size:11px; color:var(--muted); }
  .gpr-null { padding:13px 16px 15px; font-size:12.5px; color:var(--muted); max-width:74ch; line-height:1.55; }
  /* honest split bar — 1px gaps + a track border so neutral segments survive light mode */
  .gpr-bar { display:flex; height:9px; border-radius:5px; overflow:hidden; background:var(--panel2);
    border:1px solid var(--line); margin:9px 0 7px; gap:1px; }
  .gpr-bar i { display:block; height:100%; }
  .gpr-key { display:flex; flex-wrap:wrap; gap:4px 14px; font-size:11px; color:var(--muted); }
  .gpr-key b { font-variant-numeric:tabular-nums; font-weight:660; }
  .gpr-key .sw { display:inline-block; width:8px; height:8px; border-radius:2px; margin-right:4px; vertical-align:middle; }
  .gpr-ep th, .gpr-ep td { white-space:nowrap; }
  .gpr-ep .win { font-variant-numeric:tabular-nums; }
  @media (max-width:720px){
    .gpr-hd,.gpr-stance,.gpr-backdrop,.gpr-tiles { padding-left:11px; padding-right:11px; }
    .gpr-watch,.gpr-null { padding-left:11px; padding-right:11px; }
    .gpr-arc { margin-left:11px; margin-right:11px; }
    .gpr-tiles { grid-template-columns:repeat(2,minmax(0,1fr)); }
    .gpr-read { font-size:15px; }
    .gpr-wcols { grid-template-columns:1fr; }
    .gpr-stop .lbl { font-size:8.5px; }
    .gpr-asof { margin-left:0; flex-basis:100%; }
  }
  @media (max-width:720px){
    html, body { overflow-x:hidden; }
    body { padding:12px; font-size:13px; }
    h1 { font-size:19px; }
    h2 { align-items:flex-start; flex-wrap:wrap; line-height:1.25; }
    .panel { border-radius:9px; padding:11px; }
    .hero .lhs { min-width:0; }
    .scoreboxes { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); width:100%; }
    .timing-strip { grid-template-columns:repeat(2,minmax(0,1fr)); }
    .sbx { min-width:0; padding:9px 8px; }
    .sbx .k { overflow-wrap:anywhere; }
    .ts { overflow-x:visible; }
    #hold { font-size:12px; }
    #hold th,#hold td { padding:6px 5px; white-space:normal; overflow-wrap:anywhere; }
    #hold .hold-stock { width:42%; }
    #hold .hold-potential { width:58px; text-align:center; }
    #hold .hold-verdict { width:auto; }
    #hold .hold-entry,
    #hold .hold-20d { display:none; }
    .act-table { table-layout:fixed; font-size:12px; }
    .act-table th,.act-table td { padding:6px 5px; white-space:normal; overflow-wrap:anywhere; }
    .act-table .act-name { width:42%; }
    .act-table .act-conv { width:58px; text-align:center; }
    .act-table .act-entry,
    .act-table .act-20d { display:none; }
    .watch-table { font-size:12px; }
    .watch-table th,.watch-table td { white-space:normal; padding:6px 5px; }
    .watch-table .watch-20d { display:none; }
    .watch-table .watch-blocker { min-width:0; }
    .hold-company { display:none; }
    .v-full { display:none; }
    .v-short { display:inline; }
    .cv { padding:1px 6px; }
    .disc, footer { max-width:100%; }
  }
