/* ============================================================
   游资模块样式（2026-09-05）—— /lhb 三页签专用
   颜色一律 var(--xxx)（双主题铁律），禁写死色值
   组件命名前缀 lhb- 防冲突；.tbtn chips 与本页自包含
   ============================================================ */

/* ---------- 页头：tabs + 日期导航 ---------- */
.lhb-head{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:10px 0 8px}
.lhb-tabs{display:flex;flex-wrap:wrap;gap:6px}
@media(max-width:720px){.lhb-tabs .tbtn{padding:3px 10px;font-size:12px}}
.lhb-date{margin-left:auto;display:flex;align-items:center;gap:6px}
.lhb-date-in{
  border:1px solid var(--card-border);background:var(--input-bg);color:var(--text);
  border-radius:8px;padding:3px 8px;font-size:13px;color-scheme:light;
}
[data-theme="dark"] .lhb-date-in{color-scheme:dark}
.lhb-date-in::-webkit-calendar-picker-indicator{opacity:.6;cursor:pointer}

.tbtn{
  border:1px solid var(--card-border);background:var(--card);color:var(--text-2);
  border-radius:20px;padding:4px 15px;font-size:13px;cursor:pointer;line-height:1.6;
  white-space:nowrap;
}
.tbtn:hover{border-color:var(--accent);color:var(--accent)}
.tbtn.on{background:var(--accent);color:var(--accent-fg);border-color:var(--accent)}

.lhb-msg{background:var(--card);border:1px solid var(--card-border);border-radius:var(--radius);
  padding:22px;color:var(--text-3);text-align:center;margin:10px 0}

/* ---------- 统计卡 ---------- */
.lhb-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin:0 0 10px}
.lhb-card{background:var(--card);border:1px solid var(--card-border);border-radius:var(--radius);
  padding:10px 14px;box-shadow:var(--shadow)}
.lhb-card .k{font-size:12px;color:var(--text-3);margin-bottom:2px}
.lhb-card .v{font-size:20px;font-weight:bold;color:var(--text);font-variant-numeric:tabular-nums}
.lhb-card .s{font-size:12px;color:var(--text-2);margin-top:2px;font-variant-numeric:tabular-nums}
.lhb-card.lc-accent{border-top:3px solid var(--accent)}
.lhb-card.lc-u{border-top:3px solid var(--pal-0)}
.lhb-card.lc-b{border-top:3px solid var(--pal-1)}
.lhb-card.lc-g{border-top:3px solid var(--pal-2)}
.lhb-card.lc-p{border-top:3px solid var(--pal-4)}

/* ---------- 筛选 chips 条 ---------- */
.lhb-chipbar{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:6px 2px 8px}
.lhb-chipbar .tbtn{padding:2px 12px;font-size:12px}
.cb-lb{font-size:12px;color:var(--text-3);margin-right:2px}
.lhb-sep{width:1px;height:16px;background:var(--card-border);margin:0 6px}
.lhb-sea{
  border:1px solid var(--card-border);background:var(--input-bg);color:var(--text);
  border-radius:14px;padding:3px 12px;font-size:12px;width:190px;outline:none;
}
.lhb-sea:focus{border-color:var(--accent)}

/* ---------- 表格 ---------- */
.lhb-tbl-wrap{overflow-x:auto}
.lhb-tb{width:100%;border-collapse:collapse;font-size:13px;background:var(--card)}
.lhb-tb th{
  text-align:left;padding:7px 8px;font-size:12px;color:var(--text-3);font-weight:600;
  border-bottom:1px solid var(--card-border);white-space:nowrap;position:sticky;top:0;
  background:var(--card);z-index:1;user-select:none;
}
.lhb-tb th.r,.lhb-tb td.r{text-align:right}
.lhb-tb th.s{color:var(--accent)}
.lhb-tb th[data-k]{cursor:pointer}
.lhb-tb th[data-k]:hover{color:var(--accent)}
.lhb-tb th.srt .th-lb::after{content:attr(data-arr);margin-left:4px;font-size:10px}
.lhb-tb td{padding:6px 8px;border-bottom:1px solid var(--bg-soft);white-space:nowrap;
  font-variant-numeric:tabular-nums}
.lhb-tb tbody tr:nth-child(even){background:var(--bg-soft)}
.lhb-tb tbody tr:hover{background:var(--row-hover)}
.lhb-tb td.seat{max-width:280px;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
.lhb-tb td.seat:hover{color:var(--accent);text-decoration:underline}
.lhb-tb td.reason{max-width:340px;overflow:hidden;text-overflow:ellipsis;color:var(--text-2);font-size:12px}
.lhb-code{color:var(--text-2);font-size:12px}
a.t{color:var(--accent);text-decoration:none}
a.t:hover{text-decoration:underline}

/* 涨跌/正负 */
.up{color:var(--up)} .down{color:var(--down)} .flat{color:var(--text-3)}
.money{font-weight:600}

/* 方向标签 */
.lhb-side{display:inline-block;padding:0 7px;border-radius:4px;font-size:11px;font-weight:bold}
.lhb-side.BUY{background:color-mix(in srgb, var(--up) 14%, transparent);color:var(--up)}
.lhb-side.SELL{background:color-mix(in srgb, var(--down) 14%, transparent);color:var(--down)}

/* 身份徽标 */
.lhb-badge{display:inline-block;padding:0 8px;border-radius:10px;font-size:11px;line-height:1.7;white-space:nowrap}
.lhb-badge[data-id="游资"]{background:color-mix(in srgb, var(--pal-0) 13%, transparent);color:var(--pal-0)}
.lhb-badge[data-id="量化"]{background:color-mix(in srgb, var(--pal-1) 13%, transparent);color:var(--pal-1)}
.lhb-badge[data-id="机构"]{background:color-mix(in srgb, var(--pal-4) 13%, transparent);color:var(--pal-4)}
.lhb-badge[data-id="北向"]{background:color-mix(in srgb, var(--pal-2) 13%, transparent);color:var(--pal-2)}
.lhb-badge[data-id="普通"]{background:color-mix(in srgb, var(--text-3) 13%, transparent);color:var(--text-3)}
.lhb-badge[data-id=""]{display:none}
.lhb-alias{color:var(--text-2);font-size:12px;margin-left:5px}
.lhb-tier{color:var(--text-3);font-size:11px;margin-left:4px}

/* ---------- 档案 ---------- */
.lhb-back{display:flex;align-items:center;gap:10px;margin-bottom:4px}
.lhb-pname{font-size:16px;font-weight:bold;color:var(--text)}
.lhb-chart{background:var(--card);border:1px solid var(--card-border);border-radius:var(--radius-sm);padding:8px 4px 2px;overflow-x:auto}
.lhb-chart svg{display:block}
.lhb-codes{display:flex;flex-wrap:wrap;gap:6px}
.lhb-code-chip{
  border:1px solid var(--card-border);background:var(--bg-soft);border-radius:8px;
  padding:4px 10px;font-size:12px;color:var(--text-2);cursor:default;
}
.lhb-code-chip b{color:var(--text);margin-right:6px}
.lhb-pg{display:flex;gap:8px;align-items:center;margin:8px 0}
.lhb-pg .tbtn{padding:1px 12px;font-size:12px}
.lhb-empty{padding:26px;text-align:center;color:var(--text-3)}

/* 迷你坐标提示 */
.lhb-tip{font:12px/1.6 var(--font, inherit)}

/* ============================================================
   列筛选打磨（2026-09-05 二期）：列头漏斗 + 筛选面板 + 条件胶囊条
   双主题铁律：全部 var()；不刷页本地即时
   ============================================================ */

/* 表头结构：label + 漏斗 */
.lhb-tb th{position:relative;padding-right:20px}
.lhb-tb th .th-lb{display:inline-block;vertical-align:middle}
.lhb-f{
  display:inline-flex;align-items:center;justify-content:center;
  width:16px;height:16px;border-radius:4px;margin-left:3px;
  color:var(--text-3);cursor:pointer;vertical-align:middle;
  position:relative;flex:none;
}
.lhb-f:hover{background:var(--bg-soft);color:var(--accent)}
.lhb-f .lhb-fn{
  position:absolute;top:-6px;right:-7px;min-width:13px;height:13px;
  padding:0 2px;border-radius:7px;background:var(--accent);color:var(--accent-fg);
  font-size:9px;line-height:13px;text-align:center;font-style:normal;
}
.lhb-f.on{color:var(--accent)}

/* 可点击反查的股票名/名称单元格 */
td.x-stock{cursor:pointer;color:var(--accent);text-decoration:none}
td.x-stock:hover{text-decoration:underline}
td.x-stock::after{content:'⇄';margin-left:4px;color:var(--text-3);font-size:11px}

/* “当日”操作列 */
.lhb-tb th.op{width:58px;text-align:center;padding-right:8px;color:var(--text-3)}
.lhb-tb td.op{text-align:center}
.lhb-day{
  display:inline-block;border:1px solid var(--card-border);background:var(--bg-soft);
  color:var(--text-2);border-radius:10px;padding:1px 9px;font-size:11px;cursor:pointer;
  line-height:1.7;white-space:nowrap;
}
.lhb-day:hover{border-color:var(--accent);color:var(--accent)}

/* 激活筛选胶囊条（每张表一条） */
.lhb-fbar{display:none;align-items:center;flex-wrap:wrap;gap:6px;padding:2px 2px 8px}
.lhb-fbar.has{display:flex}
.lhb-fbar .fb-lb{font-size:12px;color:var(--text-3);margin-right:2px}
.lhb-pill{
  display:inline-flex;align-items:center;gap:5px;
  border:1px solid color-mix(in srgb, var(--accent) 40%, var(--card-border));
  background:color-mix(in srgb, var(--accent) 10%, transparent);
  color:var(--accent);border-radius:12px;padding:1px 8px 1px 10px;font-size:12px;
}
.lhb-pill i{font-style:normal;cursor:pointer;opacity:.7;font-size:12px;line-height:1.4}
.lhb-pill i:hover{opacity:1;color:var(--down)}
.lhb-fbar .fb-clearall{
  font-size:12px;color:var(--text-3);cursor:pointer;text-decoration:underline;
  text-underline-offset:2px;margin-left:2px;
}
.lhb-fbar .fb-clearall:hover{color:var(--down)}

/* 筛选浮层面板 */
.lhb-fpanel{
  position:fixed;z-index:999;width:272px;max-height:70vh;overflow:auto;
  background:var(--card);border:1px solid var(--card-border);
  border-radius:var(--radius);box-shadow:0 8px 28px rgba(0,0,0,.25);
  padding:0;
}
.lhb-fp-head{
  display:flex;align-items:center;gap:8px;padding:8px 10px;
  border-bottom:1px solid var(--card-border);
}
.lhb-fp-head b{font-size:13px;color:var(--text);flex:1}
.lhb-fp-head .fp-clr{
  font-size:12px;color:var(--text-3);cursor:pointer;text-decoration:underline;
  text-underline-offset:2px;
}
.lhb-fp-head .fp-clr:hover{color:var(--down)}
.lhb-fp-head .fp-x{
  width:20px;height:20px;line-height:18px;text-align:center;border-radius:50%;
  cursor:pointer;color:var(--text-3);font-size:14px;flex:none;
}
.lhb-fp-head .fp-x:hover{background:var(--bg-soft);color:var(--text)}
.lhb-fp-body{padding:10px}
.lhb-fp-in{
  width:100%;box-sizing:border-box;border:1px solid var(--card-border);
  background:var(--input-bg);color:var(--text);border-radius:8px;
  padding:5px 9px;font-size:13px;outline:none;
}
.lhb-fp-in:focus{border-color:var(--accent)}
.lhb-fp-tip{font-size:11px;color:var(--text-3);margin:5px 2px 0;line-height:1.5}
.lhb-fp-nums{display:flex;gap:6px;align-items:center}
.lhb-fp-nums .lhb-fp-in{width:50%;min-width:0}
.lhb-fp-label{font-size:11px;color:var(--text-3);margin:6px 2px 3px}
.lhb-fp-chips{display:flex;flex-wrap:wrap;gap:5px;max-height:190px;overflow:auto}
.lhb-fp-chip{
  border:1px solid var(--card-border);background:var(--bg-soft);color:var(--text-2);
  border-radius:12px;padding:1px 10px;font-size:12px;cursor:pointer;line-height:1.8;
}
.lhb-fp-chip.on{background:var(--accent);color:var(--accent-fg);border-color:var(--accent)}
.lhb-fp-chip .c{opacity:.65;font-size:11px;margin-left:4px}
.lhb-fp-date2{display:flex;gap:6px;align-items:center}
.lhb-fp-date2 .lhb-fp-in{width:50%;min-width:0}
[data-theme="dark"] .lhb-fp-in{color-scheme:dark}

/* 筛选激活时表格标题行计数强调 */
.lhb-cnt-on{color:var(--accent);font-weight:600}


/* ============================================================
   Tab3 游资扎堆（资金逻辑链2.0 · 2026-09-08）：共振席位 chips
   ============================================================ */
td.x-story{cursor:pointer;color:var(--accent)}
td.x-story:hover{text-decoration:underline}
td.x-story::after{content:'⇉';margin-left:4px;color:var(--text-3);font-size:11px}
.lhb-zcells{display:flex;flex-wrap:wrap;gap:4px;max-width:560px}
.lhb-z-chip{
  display:inline-flex;align-items:center;gap:5px;
  border:1px solid var(--card-border);background:var(--bg-soft);
  border-radius:11px;padding:1px 8px 1px 6px;font-size:12px;
  color:var(--text-2);cursor:pointer;white-space:nowrap;
}
.lhb-z-chip b{font-weight:500;font-size:11px;opacity:.85}
.lhb-z-chip.al{border-color:color-mix(in srgb, var(--pal-0) 45%, var(--card-border));color:var(--text)}
.lhb-z-chip.al b{color:var(--pal-0);opacity:1}
.lhb-z-chip:hover{border-color:var(--accent);color:var(--accent)}
.lhb-ways{color:var(--text-2);font-weight:600}


/* ============================================================
   Tab4 档案 A 个股操作卡（资金逻辑链2.0 · /api/lhb/opcard）
   ============================================================ */
.lhb-opgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:8px}
.lhb-opcard{
  border:1px solid var(--card-border);background:var(--card);border-radius:10px;
  padding:8px 10px;cursor:pointer;transition:border-color .15s;
}
.lhb-opcard:hover{border-color:var(--accent)}
.lhb-opcard .oc-h{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.lhb-opcard .oc-h b{font-size:14px;color:var(--text)}
.lhb-opcard .oc-code{font-size:11px;color:var(--text-3)}
.lhb-opcard .oc-last{margin-left:auto;font-size:11px;color:var(--text-3)}
.oc-st{font-size:10px;padding:0 7px;border-radius:8px;line-height:1.7}
.oc-st.oc-b{background:color-mix(in srgb, var(--pal-0) 14%, transparent);color:var(--pal-0)}
.oc-st.oc-s{background:color-mix(in srgb, var(--pal-2) 14%, transparent);color:var(--pal-2)}
.lhb-opcard .oc-bars{display:flex;gap:12px;margin-top:6px;font-size:12px}
.lhb-opcard .oc-buy{color:var(--text-2)}
.lhb-opcard .oc-buy{color:var(--pal-0)}
.lhb-opcard .oc-sell{color:var(--pal-2)}
.lhb-opcard .oc-net{margin-top:3px;font-size:12px;color:var(--text-2)}
.lhb-opcard .oc-net .money{font-size:13px}
.lhb-opcard .oc-f{margin-top:3px;font-size:11px;color:var(--text-3)}
.lhb-opcard .oc-x{margin-top:6px;font-size:11px;color:var(--accent)}
.lhb-opcard .oc-detail{border-top:1px dashed var(--card-border);margin-top:7px;padding-top:6px}
.oc-tb{width:100%;font-size:12px}
.oc-tb td.reason{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}


/* ============================================================
   Tab5 个股资金足迹（资金逻辑链2.0 · /api/lhb/story）
   ============================================================ */
.lhb-story-head{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 6px}
.lhb-story-head .lhb-card{flex:1;min-width:150px}
.lhb-story-cum{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:4px 0 8px;padding:6px 8px;
  background:var(--bg-soft);border:1px solid var(--card-border);border-radius:10px}
.lhb-story-cum .cb-lb{font-size:12px;color:var(--text-3)}
td.lhb-z-who{cursor:pointer;color:var(--accent);white-space:nowrap}
td.lhb-z-who:hover{text-decoration:underline}
#lhbSSea{min-width:220px}


/* ============================================================
   Tab4 档案 B 资金足迹链（资金逻辑链2.0 · /api/lhb/churn）
   ============================================================ */
.lhb-churn-body{margin:2px 0 4px}
.ch-row{display:flex;gap:8px;align-items:flex-start;padding:7px 6px;border-bottom:1px dashed var(--card-border)}
.ch-row:last-child{border-bottom:none}
.ch-date{flex:none;width:84px;font-size:12px;color:var(--text-2);font-weight:600;padding-top:2px}
.ch-col{flex:1;min-width:0}
.ch-arrow{flex:none;color:var(--text-3);padding-top:14px;font-size:13px}
.ch-lb{font-size:10px;color:var(--text-3);margin-bottom:2px}
.ch-lb-sell{color:var(--pal-2)}
.ch-lb-buy{color:var(--pal-0)}
.ch-v{display:flex;flex-wrap:wrap;gap:4px}
.ch-sell,.ch-buy{
  display:inline-block;border-radius:10px;padding:1px 8px;font-size:12px;line-height:1.8;
  border:1px solid var(--card-border);background:var(--bg-soft);color:var(--text-2);
}
.ch-sell{border-color:color-mix(in srgb, var(--pal-2) 35%, var(--card-border))}
.ch-buy{cursor:pointer;border-color:color-mix(in srgb, var(--pal-0) 35%, var(--card-border));color:var(--text)}
.ch-buy:hover{border-color:var(--accent)}
.ch-none{font-size:12px;color:var(--text-3)}
#lhbPChurnHead:hover{color:var(--accent)}
.churn-arrow{display:inline-block;width:12px;color:var(--text-3)}


/* ============================================================
   Tab6 今日快报（蓝图二期 F · /api/lhb/report）
   ============================================================ */
.rep-grid-mood{display:grid;grid-template-columns:1fr;gap:10px;margin-bottom:10px}
.rep-grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:10px}
@media(max-width:1100px){.rep-grid2{grid-template-columns:1fr}}
.rep-grid-mood>*,.rep-grid2>*{min-width:0}  /* grid 子项默认 min-width:auto=内容 min-content，长席位名会撑破列宽 */
.rep-mood{border:1px solid var(--card-border);border-radius:10px;padding:10px;background:var(--bg-soft);overflow:hidden}
.rpc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin-bottom:8px}
.rpc{
  background:var(--card);border:1px solid var(--card-border);border-radius:10px;padding:8px 10px;
}
.rpc-lb{font-size:11px;color:var(--text-3);margin-bottom:2px}
.rpc-now{font-size:19px;font-weight:700}
.rpc-now.money{font-size:17px}
.rpc-avg{font-size:11px;color:var(--text-3);margin-top:1px}
.rpc-dv{font-size:12px;font-weight:600}
.rep-seq{margin-top:6px}
.rep-seq svg{display:block}
.rchip{
  display:inline-block;border:1px solid var(--card-border);background:var(--card);
  border-radius:10px;padding:0 8px;font-size:11px;line-height:1.9;color:var(--text-2);
  margin:1px 3px 1px 0;white-space:nowrap;
}
a.rchip{text-decoration:none;cursor:pointer}
a.rchip:hover{border-color:var(--accent);color:var(--accent)}
.rwho{color:var(--accent);text-decoration:none}
.rwho:hover{text-decoration:underline}
.rep-hot-row{
  border-bottom:1px dashed var(--card-border);padding:7px 2px;display:flex;flex-wrap:wrap;
  align-items:baseline;gap:4px 10px;
}
.rep-hot-row:last-child{border-bottom:none}
.rep-hot-who{font-size:14px;font-weight:600;min-width:90px}
.rep-hot-net{font-size:15px;font-weight:700}
.rep-hot-sub{font-size:11px;color:var(--text-3)}
.rep-hot-chips{width:100%;margin-top:3px}
.rep-st-row{border-bottom:1px dashed var(--card-border);padding:7px 2px}
.rep-st-row:last-child{border-bottom:none}
.rep-st-head{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.rep-st-ways{font-size:11px;color:var(--text-3)}
.rep-st-net{font-size:14px;font-weight:700}
.rep-st-chips{margin-top:3px}
.rep-code{font-size:11px;color:var(--text-3)}
.rep-y-row,.rep-a-row{display:flex;gap:8px;align-items:center;padding:6px 2px;border-bottom:1px dashed var(--card-border);min-width:0;max-width:100%;overflow:hidden}
.rep-y-row:last-child,.rep-a-row:last-child{border-bottom:none}
.rep-y-who{flex:0 1 auto;min-width:0;max-width:38%;font-size:13px;font-weight:600;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rep-y-mid{flex:1;min-width:0;overflow:hidden}
.rep-y-mid a.x-stock{font-size:13px;color:var(--text);text-decoration:none;margin-right:6px;
  max-width:46%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom;
  display:inline-block}
.rep-y-mid a.x-stock:hover{color:var(--accent)}
.rep-y-d{font-size:11px;color:var(--text-3);display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rep-y-gap{flex:none;font-size:11px;color:var(--text-2);border:1px solid var(--card-border);
  border-radius:8px;padding:0 7px;line-height:1.7;max-width:30%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rep-y-gap.warn{color:var(--pal-2);border-color:color-mix(in srgb, var(--pal-2) 45%, var(--card-border))}
.rep-a-days{flex:none;font-size:11px;color:var(--pal-0);border:1px solid color-mix(in srgb, var(--pal-0) 45%, var(--card-border));
  border-radius:8px;padding:0 7px;line-height:1.7}
.lhb-rep .card{margin-bottom:0}

/* ---------- G 行为指纹卡（蓝图二期 · /api/lhb/fp） ---------- */
.fp-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px}
.fp-grid .lhb-card{margin-bottom:0}
.fp-ind{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:8px;padding:8px 2px 0}
.fp-ind-lb{font-size:12px;color:var(--text-3);margin-right:2px;flex:none}
.fp-ind-chip{
  display:inline-flex;align-items:center;gap:5px;
  border:1px solid var(--card-border);background:var(--card);color:var(--text-2);
  border-radius:14px;padding:2px 10px;font-size:12px;line-height:1.7;cursor:default;
}
.fp-ind-chip b{color:var(--accent);font-weight:600;font-variant-numeric:tabular-nums}
@media(max-width:720px){
  .fp-grid{grid-template-columns:repeat(2,1fr)}
  .fp-ind-chip{padding:2px 8px;font-size:11px}
}

/* ---------- E+J 盟友网络（蓝图二期 · /api/lhb/network，Tab7） ---------- */
.lhb-net-layout{display:flex;gap:12px;align-items:stretch;margin-top:2px}
.lhb-net-stage{
  flex:1 1 auto;min-width:0;position:relative;
  border:1px solid var(--card-border);border-radius:var(--radius);
  background:var(--card);overflow:hidden;
}
.lhb-net-stage svg{display:block;width:100%;height:600px;touch-action:none}
.lhb-net-load{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  color:var(--text-3);font-size:14px;background:var(--card);z-index:2;
}
.lhb-net-side{
  flex:0 0 380px;width:380px;max-width:42%;display:flex;flex-direction:column;
  border:1px solid var(--card-border);border-radius:var(--radius);
  background:var(--card);min-height:600px;max-height:600px;
}
.lhb-net-shead{
  padding:10px 12px;font-size:13px;font-weight:700;color:var(--text);
  border-bottom:1px solid var(--card-border);flex:none;
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;
}
.lhb-net-shead .n{font-weight:400}
.lhb-net-sbody{overflow-y:auto;flex:1;padding:10px 12px;font-size:13px;color:var(--text-2)}
/* 节点/边 */
.net-link{stroke:var(--text-3);opacity:.45;transition:opacity .15s}
.net-link.dim{opacity:.05}
.net-link.hot{opacity:1}
.net-link.sel{stroke:var(--accent);opacity:1}
.net-node{cursor:pointer}
.net-node .ring{fill:none;stroke:transparent}
.net-node circle{stroke:var(--card);stroke-width:1.5;transition:opacity .15s}
.net-node text{font-size:12px;fill:var(--text);text-anchor:middle;pointer-events:none;
  transition:opacity .15s;font-weight:600}
.net-node .sub{font-size:10px;fill:var(--text-3);font-weight:400}
.net-node.dim circle,.net-node.dim text{opacity:.12}
.net-node.hot circle,.net-node.hot text{opacity:1}
.net-node.sel circle{stroke:var(--accent);stroke-width:2.5}
.net-node.sel text{fill:var(--accent)}
/* 图例 */
.net-legend{display:flex;flex-wrap:wrap;align-items:center;gap:14px;padding:8px 2px 2px;font-size:12px;color:var(--text-3)}
.net-legend .dot{display:inline-block;width:11px;height:11px;border-radius:50%;vertical-align:-1px;margin-right:4px}
/* 侧栏盟友/共同股 */
.net-ally-row{
  display:flex;align-items:center;gap:8px;padding:7px 6px;border-radius:8px;cursor:pointer;
  border-bottom:1px dashed var(--card-border);flex-wrap:nowrap;
}
.net-ally-row:hover{background:color-mix(in srgb, var(--accent) 8%, var(--card))}
.net-ally-name{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-weight:600;color:var(--text)}
.net-ally-name.seat{color:var(--text-2);font-weight:400}
.net-ally-st{flex:1;min-width:0;text-align:right;font-size:11px;color:var(--text-3);white-space:nowrap}
.net-ally-st b{color:var(--accent);font-weight:700;font-variant-numeric:tabular-nums}
.net-ally-arrow{color:var(--text-3);flex:none;font-size:11px}
.net-sub-h{font-size:12px;color:var(--text-3);margin:10px 2px 4px;display:flex;align-items:center;gap:6px}
.net-stock-chip{
  display:inline-flex;align-items:center;gap:5px;margin:0 4px 6px 0;
  border:1px solid var(--card-border);background:var(--card);color:var(--text-2);
  border-radius:14px;padding:2px 10px;font-size:12px;line-height:1.7;cursor:pointer;
}
.net-stock-chip:hover{color:var(--accent);border-color:var(--accent)}
.net-stock-chip b{color:var(--text);font-weight:600;margin-right:1px}
.net-stock-chip .n{color:var(--text-3);font-size:11px}
.net-ev-row{display:flex;gap:6px;align-items:center;padding:4px 2px;border-bottom:1px dashed var(--card-border);font-size:12px;color:var(--text-2);flex-wrap:nowrap}
.net-ev-row:last-child{border-bottom:none}
.net-ev-row .d{flex:none;font-variant-numeric:tabular-nums}
.net-ev-row a{color:var(--text);text-decoration:none;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.net-ev-row a:hover{color:var(--accent)}
.net-ev-row .a{flex:0 0 auto;font-variant-numeric:tabular-nums}
.net-ev-row .amt-a{color:var(--pal-0)}
.net-ev-row .amt-b{color:var(--pal-1)}
.net-back-btn{border:1px solid var(--card-border);background:transparent;color:var(--text-2);
  border-radius:14px;padding:1px 10px;font-size:12px;cursor:pointer;flex:none}
.net-back-btn:hover{color:var(--accent);border-color:var(--accent)}
.lhb-net-note{margin:8px 2px 0}
@media(max-width:1080px){
  .lhb-net-layout{flex-direction:column}
  .lhb-net-side{flex:1 1 auto;width:auto;max-width:none;min-height:0;max-height:340px}
  .lhb-net-stage svg{height:420px}
}

