/* ============================================================================
   TIDAL 设计系统 · 路线②「冷银科技」—— 组件族覆盖层（最大的一块）
   ----------------------------------------------------------------------------
   对象：member_v5.css（2354 行 / 534 处硬编码色，深色设计）里由 JS 动态产出的
        业务组件。这些类的 DOM 是运行时注入的，用「选择器覆盖」比改 JS 安全得多。

   色彩映射规则（统一口径，勿随意偏离）：
     深底 #04xxxx–#10xxxx  →  var(--card-glass) 或 rgba(255,255,255,.6)
     描边 #1b3d44/#25464e   →  var(--line) / var(--line-2)
     亮字 #edf5f5/#f0f5f5   →  var(--ink)
     中间字 #9fb0b2/#a9bec0 →  var(--ink2)
     暗字 #78969c/#7f9a9f   →  var(--ink3)
     主色 #2bd9cc/#35e5d2   →  var(--cyan)
     金 #f0c76b/#f0d58e     →  var(--star)
     红涨 #ef4f61/#ff6472   →  var(--up)
     绿跌 #20bd7a/#2ae0a0   →  var(--down)
   ============================================================================ */

/* ==========================================================================
   1. 信号列表行（选股/入场/观察/出场的主列表 —— 最高频组件）
   ------------------------------------------------------------------------
   ⚠ 生产定义是 `.signal-list-row.stock-panel{background:linear-gradient(...深色)}`，
     两个类选择器 → 特异性 (0,2,0)。
     我原来写的 `.signal-list-row.compact-row` 也是 (0,2,0)，**平手则后加载的赢**，
     但生产文件在主题层之前加载，所以主题层确实能赢；然而 `.is-watch` / `.is-exit`
     变体又各自再加一个类达到 (0,3,0)，会把颜色盖回去。
     因此这里统一用 `.signal-list-row.stock-panel` + 变体类，并保持同序。
   ========================================================================== */
.signal-list-row.stock-panel,
.signal-list-row.stock-panel.compact-row{
  border:1px solid var(--line);
  border-left:3px solid var(--score-color,var(--cyan));
  border-radius:var(--radius);
  background:var(--card-glass);
  -webkit-backdrop-filter:blur(14px) saturate(140%);
  backdrop-filter:blur(14px) saturate(140%);
  box-shadow:var(--shadow-1);
  padding:0;
  overflow:hidden;
}
.signal-list-row.stock-panel.is-entry{
  border-left-color:var(--cyan);
}
.signal-list-row.stock-panel.is-watch{
  border-left-color:var(--star);
  background:linear-gradient(150deg,rgba(251,244,228,.62),rgba(255,255,255,.72));
}
.signal-list-row.stock-panel.is-exit{
  border-left-color:var(--down);
  background:linear-gradient(150deg,rgba(233,245,243,.62),rgba(255,255,255,.72));
}
/* 出场行原来的 mark 是金底深字，浅底要改成低饱和 */
.signal-list-row.is-exit .list-action mark{
  background:var(--down-bg);
  color:var(--down);
}

/* ---- 折叠行主体：.compact-signal-row（真实生产结构） ----
   ⚠ 生产是 6 列网格：
     grid-template-columns:minmax(230px,1.15fr) 150px 145px minmax(180px,.9fr) minmax(210px,1fr) 82px
     （member_v5.css:739 / 1563 两处，1563 那处带 !important）
   主题层【绝不覆盖 display / grid-template-columns / gap / padding / min-height】，
   否则 6 列元素会被挤进 2 列 → .compact-fund 撑到 1400px+ 直接出圈。
   本层只做颜色与字体层面的事。 */
.compact-signal-row{
  /* 仅补一条：显式声明 box-sizing，防止外框 + padding 撑破 6 列宽度 */
  box-sizing:border-box;
  /* 6 列 grid 的最小内容宽 ≈ 230+150+145+180+210+82 + 5×14(gap) = 1067px。
     会员端正文区（1280 视口减 222px 侧栏 ≈ 1000px）装不下 → 行会溢出。
     min-width:0 让 grid 子项允许收缩，配合父级 .stock-grid 的横滚兜底。 */
  min-width:0;
}
.compact-name{min-width:0}
.compact-name small{
  display:block;
  color:var(--ink3);
  font-size:var(--fs-xs);
  letter-spacing:var(--ls-label);
}
.compact-name b{
  display:block;
  margin-top:2px;
  color:var(--ink);
  font-size:17px;
  font-weight:var(--w-semi);
  line-height:1.3;
  overflow-wrap:anywhere;
}
.compact-name b span{display:block;margin-top:3px;font-size:var(--fs-sm);color:var(--ink2);font-weight:var(--w-normal)}
.compact-name em{
  display:inline-block;
  margin-top:6px;
  padding:3px 9px;
  border-radius:var(--radius-pill);
  background:var(--wash);
  color:var(--cyan);
  font-size:var(--fs-xs);
  font-style:normal;
  font-weight:var(--w-semi);
}
.compact-chart{display:flex;align-items:center;justify-content:center;min-width:0}
.compact-price{display:flex;flex-direction:column;align-items:flex-end;gap:2px}
.compact-price small{color:var(--ink3);font-size:var(--fs-xs)}
.compact-price b{
  color:var(--ink);
  font-size:18px;
  font-weight:var(--w-light);
  font-variant-numeric:tabular-nums;
  letter-spacing:var(--ls-num);
}
.compact-price span{font-size:var(--fs-xs);font-weight:var(--w-semi);font-variant-numeric:tabular-nums}
/* 红涨绿跌 —— 生产用的是 .is-pos/.is-neg */
.compact-price .is-pos{color:var(--up)}
.compact-price .is-neg{color:var(--down)}
/* .compact-fund 生产：display:grid;grid-template-columns:1fr 1fr;gap:8px
   ⚠ 不覆盖 display / grid-template-columns / gap / min-height（会撑破 6 列主网格） */
.compact-fund span{
  background:rgba(255,255,255,.72);
  border:1px solid var(--line)!important;
  border-radius:var(--radius-xs);
  color:var(--ink3);
}
.compact-fund span b{
  color:var(--ink);
  font-weight:var(--w-semi);
  font-variant-numeric:tabular-nums;
}
/* .compact-date 生产是普通块级（small/b/span 纵向堆叠），不改成 grid */
.compact-date{color:var(--ink3);font-size:var(--fs-xs)}
.compact-date small{color:var(--ink3)}
.compact-date b{color:var(--ink2);font-variant-numeric:tabular-nums;font-weight:var(--w-semi)}
.compact-date span{color:var(--ink3)}
.compact-score{
  border-radius:var(--radius-sm);
  background:var(--score-soft,rgba(11,114,133,.10));
  border:1px solid color-mix(in srgb, var(--score-color,var(--cyan)) 26%, transparent);
}
.compact-score b{
  color:var(--score-color,var(--cyan));
  font-weight:var(--w-light);
  font-variant-numeric:tabular-nums;
  letter-spacing:var(--ls-num);
}
.compact-score small{color:var(--ink3)}

/* 迷你走势线（.mini-spark 是折线，不是 K 线） */
.mini-spark{
  display:block;
  width:138px;height:32px;
  color:var(--ink4);
}
.mini-spark.is-up{color:var(--up)}
.mini-spark.is-down{color:var(--down)}
.mini-spark.is-empty{color:var(--ink4);font-size:var(--fs-sm)}
/* 生产在 polyline 里写了 stroke=currentColor，虚线分割线是内联 rgba(255,255,255,.13) */
.mini-spark line[stroke="rgba(255,255,255,.13)"]{stroke:var(--line-2)!important}

/* 兼容旧的 .signal-summary 结构（若某些视图仍在用） */
.signal-summary{
  display:grid;
  border-bottom:1px solid var(--line);
  background:transparent;
}
.list-score{
  background:rgba(255,255,255,.55);
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
}
.list-score b{
  color:var(--ink);font-weight:var(--w-thin);
  letter-spacing:var(--ls-num);font-variant-numeric:tabular-nums;
}
.list-score small,.list-score span{color:var(--ink3)}
.list-id b{color:var(--ink);font-weight:var(--w-semi)}
.list-id span,.list-id small{color:var(--ink3)}
.stock-real-name,.stock-zh-name{color:var(--ink2)}
.list-action mark{
  color:var(--cyan);background:var(--wash);
  border-radius:var(--radius-pill);padding:3px 10px;
  font-weight:var(--w-semi);font-size:var(--fs-xs);
}
.list-action>span{color:var(--ink3)}
.list-metrics{
  display:grid;
  background:var(--line);   /* 用 grid gap 描边当分隔线（浅色下即为分隔线色） */
}
.list-metrics span{
  background:rgba(255,255,255,.66);
  color:var(--ink3);
}
.list-metrics b{
  color:var(--ink);font-weight:var(--w-normal);
  font-variant-numeric:tabular-nums;
}
.list-metrics .metric-loss b,.list-metrics .loss b{color:var(--down)}
.list-metrics .metric-gain b,.list-metrics .gain b{color:var(--up)}

/* 评分档位色（原为深底高饱和，浅底需降饱和加深） */
.score-30,.score-35,.score-40,.score-45,.score-50{--score-color:var(--cyan);--score-soft:rgba(11,114,133,.10)}
.score-35{--score-color:#1a8f6f;--score-soft:rgba(26,143,111,.10)}
.score-40{--score-color:var(--cyan);--score-soft:rgba(11,114,133,.12)}
.score-45{--score-color:var(--indigo);--score-soft:rgba(43,75,143,.12)}
.score-50{--score-color:#1f3f80;--score-soft:rgba(31,63,128,.14)}
.score-low{--score-color:var(--ink4);--score-soft:rgba(154,165,181,.10)}

/* 评分图例 */
.score-legend{
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:var(--card-glass);
  -webkit-backdrop-filter:blur(10px) saturate(140%);
  backdrop-filter:blur(10px) saturate(140%);
  color:var(--ink3);
}
.score-legend b{color:var(--ink)}
.score-note{color:var(--ink3)}

/* 热度分 */
.heat-score b,.heat-score strong{
  color:var(--ink);font-weight:var(--w-light);
  font-variant-numeric:tabular-nums;
}

/* ==========================================================================
   2. 展开详情（K线 + AI点评 + 研究简评 + 风险）
   ========================================================================== */
.signal-row-detail{
  border-top:1px solid var(--line);
  background:rgba(255,255,255,.5);
}
.detail-market,.detail-commentary,.detail-research{
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:var(--card-glass);
  -webkit-backdrop-filter:blur(12px) saturate(140%);
  backdrop-filter:blur(12px) saturate(140%);
}
.detail-trigger{color:var(--ink3);background:transparent;border:1px solid var(--line-2);border-radius:var(--radius-xs)}
.detail-trigger:hover{color:var(--cyan);border-color:var(--cyan)}

/* 右侧浮出详情面板 */
.panel-flyout{
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:rgba(255,255,255,.94);
  -webkit-backdrop-filter:blur(20px) saturate(150%);
  backdrop-filter:blur(20px) saturate(150%);
  box-shadow:var(--shadow-2);
  color:var(--ink);
}
.flyout-close{color:var(--ink3)}
.flyout-close:hover{color:var(--up)}
.flyout-scroll{scrollbar-width:thin}

/* 全屏详情弹窗 */
.signal-detail-backdrop{background:rgba(13,21,34,.28);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}
.signal-detail-dialog,.signal-detail-body,.signal-detail-modal{
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:rgba(255,255,255,.96);
  -webkit-backdrop-filter:blur(20px) saturate(150%);
  backdrop-filter:blur(20px) saturate(150%);
  box-shadow:var(--shadow-2);
  color:var(--ink);
}

/* AI 智能点评 */
.ai-brief{
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:linear-gradient(150deg,rgba(238,244,247,.85),rgba(255,255,255,.68));
  color:var(--ink2);
}
.ai-head{border-bottom:1px solid var(--line)}
.ai-heading i{
  background:var(--grad);color:#fff;
  border-radius:var(--radius-xs);
  font-style:normal;font-weight:var(--w-bold);
}
.ai-heading strong{color:var(--ink);font-weight:var(--w-semi)}
.ai-evidence{color:var(--ink3);font-size:var(--fs-xs)}
.ai-row{border-bottom:1px solid var(--line)}
.ai-row:last-child{border-bottom:0}
.ai-row b,.ai-row strong{color:var(--ink)}
.ai-row p{color:var(--ink2)}
.ai-content{color:var(--ink2)}
.ai-note{color:var(--ink3);border-left:2px solid var(--line-3);padding-left:10px}
.ai-risks b{color:var(--warn)}
.ai-follow-row{border-top:1px solid var(--line)}

/* 研究与风险列表 */
.research-list{color:var(--ink2)}
.research-list li::marker{color:var(--cyan)}
.panel-risk{border-top:1px solid var(--line)}
.panel-risk h4,.panel-risk b{color:var(--ink)}
.risk-list{color:var(--ink2)}
.risk-list li::marker{color:var(--up)}

/* ==========================================================================
   3. 出场 / 观察 适用性卡片
   ========================================================================== */
.exit-compat{
  border:1px solid var(--line);
  border-left:3px solid var(--cyan);
  border-radius:var(--radius-sm);
  background:var(--card-glass);
}
.exit-compat b{color:var(--ink)}
.exit-compat p{color:var(--ink2)}
.exit-compat.is-muted{border-left-color:var(--line-3);opacity:.85}
.exit-compat.is-profit{border-left-color:var(--up);background:var(--up-bg)}
.exit-compat.is-profit b{color:var(--up)}
.exit-compat.is-held{border-left-color:var(--cyan)}
.exit-compat.is-reduced{border-left-color:var(--down);background:var(--down-bg)}
.exit-compat.is-reduced b{color:var(--down)}

.exit-guide,.exit-guide-card,.watch-guide-card,.guide-card{
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:var(--card-glass);
  -webkit-backdrop-filter:blur(10px) saturate(140%);
  backdrop-filter:blur(10px) saturate(140%);
  color:var(--ink2);
}
.exit-guide b,.exit-guide-card b,.watch-guide-card b,.guide-card b{color:var(--ink)}
.watch-reasons{color:var(--ink2)}
.watch-reasons b{color:var(--cyan)}

/* ==========================================================================
   4. 防守资产
   ========================================================================== */
.defensive-card{
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:linear-gradient(150deg,rgba(255,255,255,.94),rgba(255,255,255,.68));
  box-shadow:var(--shadow-1);
}
.defensive-card h3,.defensive-card b{color:var(--ink)}
.defensive-note{color:var(--ink3)}

/* ==========================================================================
   5. 持仓
   ========================================================================== */
.holdings-section{border:1px solid var(--line);border-radius:var(--radius);background:var(--card-glass);box-shadow:var(--shadow-1)}
.holdings-head{border-bottom:1px solid var(--line)}
.holdings-head b,.holdings-head h2{color:var(--ink)}
.holding-card{
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:rgba(255,255,255,.7);
}
.holding-card b{color:var(--ink);font-weight:var(--w-semi)}
.holding-card small,.holding-card span{color:var(--ink3)}
.holding-list{background:var(--line)}
.holding-list>*{background:rgba(255,255,255,.7)}
.holding-form input,.holding-form select,.holding-form textarea{
  border:1px solid var(--line-2);background:var(--card-glass);color:var(--ink);
}
.holding-empty,.device-empty,.empty-state,.market-empty{
  border:1px dashed var(--line-2);
  border-radius:var(--radius);
  background:rgba(255,255,255,.5);
  color:var(--ink3);
}
.holding-empty b,.device-empty b,.empty-state b,.market-empty b{color:var(--ink)}
.holding-insight{
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:var(--card-glass);
  color:var(--ink2);
}
.holding-insight b{color:var(--ink)}

/* ==========================================================================
   6. 设备管理
   ========================================================================== */
.device-summary{color:var(--ink2)}
.device-card{
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:rgba(255,255,255,.72);
}
.device-card b{color:var(--ink)}
.device-card small,.device-card span{color:var(--ink3)}
.device-card dl div{border-bottom:1px solid var(--line)}
.device-card dt{color:var(--ink3)}
.device-card dd{color:var(--ink2)}
.device-icon{
  background:var(--wash);color:var(--cyan);
  border-radius:var(--radius-sm);
}
.device-quota{
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:var(--card-glass);
}
.device-quota b{color:var(--ink);font-weight:var(--w-light);font-variant-numeric:tabular-nums}
.device-quota small,.device-quota span,.device-quota p{color:var(--ink3)}
.quota-track{background:var(--line);border-radius:var(--radius-pill);overflow:hidden}
.quota-track i{background:var(--grad);display:block;height:100%}
.device-security-note{
  border:1px solid var(--line);
  border-left:3px solid var(--warn);
  border-radius:var(--radius-sm);
  background:var(--warn-bg);
  color:var(--ink2);
}
.device-security-note b{color:var(--warn)}

/* ==========================================================================
   7. 策略手册 / 做单记录 / 财报智研 / 财经网文（资料库族）
   ========================================================================== */
.research-library{
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:var(--card-glass);
  box-shadow:var(--shadow-1);
}
.library-head{border-bottom:1px solid var(--line)}
.library-head label{color:var(--cyan)}
.library-head h2{color:var(--ink);font-weight:var(--w-bold)}
.library-head p{color:var(--ink3)}
.library-note{color:var(--ink3);border-left:2px solid var(--line-3);padding-left:10px}
.library-link{color:var(--cyan);border-bottom:1px solid rgba(11,114,133,.25)}
.library-link:hover{color:var(--indigo);border-bottom-color:var(--indigo)}
.record-card{
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:rgba(255,255,255,.72);
}
.record-card b{color:var(--ink)}
.record-card small,.record-card span{color:var(--ink3)}
.record-metrics{background:var(--line)}
.record-metrics span{background:rgba(255,255,255,.72);color:var(--ink3)}
.record-metrics b{color:var(--ink);font-variant-numeric:tabular-nums}
.record-metrics .profit-pos b{color:var(--up)}
.record-metrics .profit-neg b{color:var(--down)}
.report{
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:var(--card-glass);
}
.report b{color:var(--ink)}
.report small,.report span,.report p{color:var(--ink3)}
.article-archive-card{
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:rgba(255,255,255,.72);
}
.article-archive-card b{color:var(--ink)}
.article-archive-card small,.article-archive-card span{color:var(--ink3)}
.manual-table{border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden}
.manual-table th{color:var(--star);background:rgba(255,255,255,.6)}
.manual-table td{color:var(--ink2);border-bottom:1px solid var(--line)}
.manual-kpis,.manual-framework{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--card-glass)}
.manual-kpis b{color:var(--ink);font-weight:var(--w-light);font-variant-numeric:tabular-nums}
.manual-kpis small{color:var(--ink3)}
.manual-details summary{color:var(--ink)}
.manual-chart{border:1px solid var(--line);border-radius:var(--radius-sm);background:rgba(255,255,255,.7)}

/* 公告条 */
.announcement-strip{
  border:1px solid var(--line);
  border-left:3px solid var(--cyan);
  border-radius:var(--radius-sm);
  background:linear-gradient(120deg,rgba(238,244,247,.85),rgba(255,255,255,.6));
  color:var(--ink2);
}
.announcement-strip b{color:var(--ink)}
.public-announcements .announcement-strip{margin-bottom:8px}

/* 分页 */
.pager,.pager-top,.pager-bottom{
  border-top:1px solid var(--line);
  color:var(--ink3);
}
.pager button,.pagination button,.pagination a{
  border:1px solid var(--line-2);
  border-radius:var(--radius-xs);
  background:var(--card-glass);
  color:var(--ink2);
}
.pager button:hover,.pagination button:hover,.pagination a:hover{border-color:var(--cyan);color:var(--cyan)}
.pager button.active,.pagination .active{background:var(--grad);color:#fff;border-color:transparent}
.pagination{color:var(--ink3)}

/* ==========================================================================
   8. 会员权益 / 会员徽章
   ========================================================================== */
.member-benefits-section{border:1px solid var(--line);border-radius:var(--radius);background:var(--card-glass)}
.benefits-head{border-bottom:1px solid var(--line)}
.benefits-head b,.benefits-head h2{color:var(--ink)}
.benefits-current{
  border:1px solid var(--line);
  border-left:3px solid var(--cyan);
  border-radius:var(--radius-sm);
  background:var(--wash);
  color:var(--ink2);
}
.benefits-current b{color:var(--cyan)}
.benefits-table-wrap{border:1px solid var(--line);border-radius:var(--radius-sm);overflow:auto}
.benefits-table th{color:var(--ink3);background:rgba(255,255,255,.6);border-bottom:1px solid var(--line)}
.benefits-table td{color:var(--ink2);border-bottom:1px solid var(--line)}
.benefits-table td:first-child{color:var(--ink)}
.benefits-table .is-pos{color:var(--cyan)}
/* 表格里的"不具备"是内容，必须可读 → 用三级灰（4.56:1），不用四级灰 */
.benefits-table .is-neg{color:var(--ink3)}
.benefits-col-item{border-right:1px solid var(--line)}
.benefits-note{color:var(--ink3)}
.benefit-tier-card{
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:rgba(255,255,255,.72);
}
.benefit-tier-card b{color:var(--ink)}

.member-medal-icon,.member-medal{
  border-radius:var(--radius-pill);
  background:linear-gradient(135deg,rgba(11,114,133,.12),rgba(43,75,143,.12));
  color:var(--cyan);
  border:1px solid rgba(11,114,133,.22);
}
.member-medal-gold{border-color:rgba(200,153,47,.4);background:var(--warn-bg);color:#8a6410}
.member-medal-platinum,.member-medal-silver{border-color:var(--line-2);background:var(--muted-bg);color:var(--ink2)}

/* 等级卡（member_tiers.css） */
.tier-panel{
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:var(--card-glass);
  box-shadow:var(--shadow-1);
}
.tier-panel h2,.tier-panel b{color:var(--ink)}
.tier-panel small,.tier-panel p{color:var(--ink3)}
.tier-kpis b{color:var(--ink);font-weight:var(--w-light);font-variant-numeric:tabular-nums}
.tier-kpis small{color:var(--ink3)}
.tier-cta{border-top:1px solid var(--line)}
.upgrade-panel,.gold-panel,.silver-panel{
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:rgba(255,255,255,.72);
}
.gold-panel{border-color:rgba(200,153,47,.4);background:linear-gradient(150deg,rgba(251,244,228,.9),rgba(255,255,255,.7))}
.gold-title,.gold-head{color:#8a6410}
.silver-panel{background:linear-gradient(150deg,rgba(241,244,248,.9),rgba(255,255,255,.7))}
.tier-silver,.tier-gold,.tier-registered{border:1px solid var(--line);border-radius:var(--radius-pill);padding:2px 10px;font-size:var(--fs-xs)}
.tier-silver{color:var(--ink2);background:var(--muted-bg)}
.tier-gold{color:#8a6410;background:var(--warn-bg)}
.tier-registered{color:var(--cyan);background:var(--wash)}
.locked,.locked-library{
  border:1px dashed var(--line-2);
  border-radius:var(--radius);
  background:rgba(255,255,255,.5);
  color:var(--ink3);
}
.locked b,.locked-library h2{color:var(--ink)}
.locked-library small{color:var(--cyan);letter-spacing:var(--ls-label)}

/* ==========================================================================
   9. 合伙人 / 账户资料 / 市场权限 / 建议卡
   ========================================================================== */
.partner-kpis,.partner-ledger,.partner-share,.partner-withdraw-form{
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:var(--card-glass);
}
.partner-kpis b{color:var(--ink);font-weight:var(--w-light);font-variant-numeric:tabular-nums}
.partner-kpis small,.partner-ledger small{color:var(--ink3)}
.partner-ledger{border-top:1px solid var(--line)}
.partner-ledger td,.partner-ledger th{border-bottom:1px solid var(--line)}
.partner-ledger th{color:var(--ink3)}
.partner-ledger td{color:var(--ink2)}
.partner-share input{border:1px solid var(--line-2);background:var(--card-glass);color:var(--ink)}

.profile-section{border:1px solid var(--line);border-radius:var(--radius);background:var(--card-glass);box-shadow:var(--shadow-1)}
.profile-head{border-bottom:1px solid var(--line)}
.profile-head b,.profile-head h2{color:var(--ink)}
.profile-summary{background:var(--line)}
.profile-summary>*{background:rgba(255,255,255,.72)}
.profile-summary small{color:var(--ink3)}
.profile-summary b{color:var(--ink)}
.profile-form input,.profile-form select,.profile-form textarea{
  border:1px solid var(--line-2);background:var(--card-glass);color:var(--ink);
}

.market-access-card,.market-access-grid>*{
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:rgba(255,255,255,.72);
}
.market-access-card b,.market-access-head b{color:var(--ink)}
.market-release-note{border-top:1px solid var(--line);color:var(--ink3)}

/* ==========================================================================
   10. 对比图表工作台（chart_workspace.css + chart_workspace.js）
   ========================================================================== */
.chart-workbench,.chart-modal,.chart-stage{
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:rgba(255,255,255,.9);
  -webkit-backdrop-filter:blur(18px) saturate(150%);
  backdrop-filter:blur(18px) saturate(150%);
  box-shadow:var(--shadow-2);
  color:var(--ink);
}
.chart-workbench-head,.chart-toolbar{border-bottom:1px solid var(--line)}
.chart-workbench-head b,.chart-workbench-head h2{color:var(--ink)}
.chart-toolbar button,.chart-periods button,.chart-reset{
  border:1px solid var(--line-2);
  border-radius:var(--radius-xs);
  background:var(--card-glass);
  color:var(--ink2);
}
.chart-toolbar button:hover,.chart-periods button:hover{border-color:var(--cyan);color:var(--cyan)}
.chart-periods button.active{background:var(--grad);color:#fff;border-color:transparent}
.chart-legend{color:var(--ink2)}
.chart-note,.chart-status,.chart-loading,.chart-help{color:var(--ink3)}
.chart-indicators{border-top:1px solid var(--line);color:var(--ink2)}
.chart-hover-data{
  border:1px solid var(--line);
  border-radius:var(--radius-xs);
  background:rgba(255,255,255,.96);
  box-shadow:var(--shadow-1);
  color:var(--ink);
}
.chart-modal-close{color:var(--ink3);background:transparent;border:0}
.chart-modal-close:hover{color:var(--up)}

/* 对比图 SVG（chart_workspace 的 benchmark/strategy 线） */
.benchmark-line,.benchmark{stroke:#9aa5b5}
.strategy-line,.strategy{stroke:var(--cyan)}
.benchmark-dot,.benchmark-key{fill:#9aa5b5;color:var(--ink3)}
.strategy-dot,.strategy-key{fill:var(--cyan);color:var(--cyan)}
.end-label{fill:var(--ink);font-variant-numeric:tabular-nums}
.strategy-area,.benchmark-area{opacity:.12}
.chart-grid line{stroke:rgba(13,21,34,.10)}
.chart-scale text{fill:var(--ink3)}

/* ==========================================================================
   11. 首页（index.html 的 hero/dashcards/kpis/gold-* 等）
   ========================================================================== */
.hero{
  background:
    radial-gradient(circle at 82% 14%,rgba(11,114,133,.10),transparent 44%),
    linear-gradient(160deg,rgba(255,255,255,.94),rgba(242,244,248,.72));
  color:var(--ink);
  border-bottom:1px solid var(--line);
}
.hero h1{color:var(--ink);font-weight:var(--w-bold);letter-spacing:var(--ls-title)}
.hero p{color:var(--ink2)}
.hero label,.section-label{color:var(--cyan);letter-spacing:var(--ls-label);font-size:var(--fs-xs)}

.kpis,.kpis>*{border-color:var(--line)}
.kpis article,.kpi{
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:var(--card-glass);
  -webkit-backdrop-filter:blur(14px) saturate(140%);
  backdrop-filter:blur(14px) saturate(140%);
  box-shadow:var(--shadow-1);
}
.kpis small,.kpi small{color:var(--ink3);letter-spacing:var(--ls-label)}
.kpis b,.kpi b{
  color:var(--ink);font-weight:var(--w-thin);
  letter-spacing:var(--ls-num);font-variant-numeric:tabular-nums;
}

.dashcards,.cards{border-color:var(--line)}
.dashcards article,.dashcards>*,.cards article,.cards>*{
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:var(--card-glass);
  box-shadow:var(--shadow-1);
}
.dashcards b,.cards b{color:var(--ink)}
.dashcards small,.cards small,.dashcards p,.cards p{color:var(--ink3)}
.dashnav button{color:var(--ink3);background:transparent;border:0}
.dashnav button.active{color:var(--cyan);border-bottom:2px solid var(--cyan)}

.panel-core{border:1px solid var(--line);border-radius:var(--radius);background:var(--card-glass);box-shadow:var(--shadow-1)}
.panel-core b{color:var(--ink)}
.section{border-color:var(--line)}
.section h2{color:var(--ink)}
.section p,.section .note{color:var(--ink3)}
.toolbar{border-bottom:1px solid var(--line)}
.summary-strip{
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  background:var(--card-glass);
  color:var(--ink2);
}
.summary-strip b{color:var(--ink)}

/* 首页投资者教育/图表区块 */
.manual-chart,.fold-table{border:1px solid var(--line);border-radius:var(--radius-sm);background:rgba(255,255,255,.72)}
.fold-table th{color:var(--ink3);background:rgba(255,255,255,.6)}
.fold-table td{color:var(--ink2);border-bottom:1px solid var(--line)}
.table-wrap{overflow-x:auto}
.member-table th{color:var(--ink3);background:rgba(255,255,255,.6)}
.member-table td{color:var(--ink2);border-bottom:1px solid var(--line)}
.danger-ghost{
  border:1px solid rgba(201,42,42,.28);background:var(--up-bg);color:var(--up);
  border-radius:var(--radius-xs);
}
.primary,.btn-primary{
  background:var(--grad);color:#fff;border:0;border-radius:var(--radius-sm);
  box-shadow:var(--shadow-pop);font-weight:var(--w-semi);
}
.primary:hover,.btn-primary:hover{filter:brightness(1.08);color:#fff}
.gold-filter,.filter-grid input,.filter-grid select{border:1px solid var(--line-2);background:var(--card-glass);color:var(--ink)}

/* 迷你走势 / 链接 */
.mini-spark{color:var(--cyan)}
.mini-link{color:var(--cyan);border-bottom:1px solid rgba(11,114,133,.25)}
.mini-link:hover{color:var(--indigo)}

/* 通用网格分隔（旧式 background 当 gap 线的写法） */
.grid{background:var(--line)}

/* ==========================================================================
   12. flyout / 弹层 滚动条
   ========================================================================== */
.panel-flyout .flyout-scroll{overscroll-behavior:contain}
.signal-detail-modal{overscroll-behavior:contain}

/* ==========================================================================
   13. 兼容旧 JS 的 .show 类（toast 旧实现）
   ========================================================================== */
#toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* ==========================================================================
   14. 补齐第一轮差集遗漏的类（2026-10-07 二次审计）
   ------------------------------------------------------------------------
   方法：`comm -13 <(覆盖层类名) <(全站CSS类名)` 得 90 个缺口，逐个补。
   其中纯状态类（is-open/is-hidden 等）多为行为开关，无颜色语义，跳过；
   其余带视觉语义的全部覆盖。
   ========================================================================== */

/* ---- 14.1 会员端骨架状态类 ----
   ⚠ 这里【只做颜色】。曾经写过：
        .function-switch{display:flex;flex-direction:column}
        .market-switch{display:flex;align-items:center;gap:4px}
     两条都越界了：
       · .function-switch 生产本来就是 flex/column（我这条属冗余，无害但误导）
       · .market-switch 生产是 display:grid;grid-template-columns:repeat(2,1fr)
         —— 我改成 flex 后两列布局塌成一行，直接改变了侧栏高度累计，
            是「设备管理按钮溢出撞账户区」的帮凶之一。
     已全部删除，几何属性交回生产。 */
.research-app{background:var(--bg);color:var(--ink)}
.research-layout,.research-main{background:transparent}
.side-account{color:var(--ink2)}

/* ---- 14.2 市场切换（国旗 + 标签）----
   ⚠ .market-switch 的 display/grid-template-columns 交回生产（见 14.1 注释），
     这里只保留 .flag 的容器外观。 */
.flag,.flag.cn,.flag.hk,.flag.us,.flag.jp{
  border-radius:var(--radius-xs);
  overflow:hidden;
}
.flag img{display:block}
.top-market-switch{display:flex;gap:4px;margin:0 auto}

/* ---- 14.3 终端型首页遗留（若被复用） ---- */
.terminal-hero,.terminal-main,.terminal-panel{
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:var(--card-glass);
}
.terminal-hero label{color:var(--cyan)}
.terminal-hero h1{color:var(--ink)}
.terminal-panel{color:var(--ink2)}

/* ---- 14.4 防御资产 ---- */
.defensive-section{border-color:var(--line)}
.defensive-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:14px}
.defensive-grid article{
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:var(--card-glass);
  box-shadow:var(--shadow-1);
}
.defensive-grid b{color:var(--ink)}
.defensive-grid small,.defensive-grid span{color:var(--ink3)}

/* ---- 14.5 观察区 ---- */
.watch-section{border-color:var(--line)}
.watch-reasons{color:var(--ink2)}
.watch-reasons b{color:var(--ink)}

/* ---- 14.5b 建议区卡片内边距补齐（2026-10-07 用户反馈："密切观察对齐和其它不一样"）----
   ⚠ 根因：生产只给 .defensive-section（与 .market-access）做了"卡片盒"——
     padding:24px + 边框 + 圆角 + 背景（member_v5.css:1000）；
     入场/密切观察/出场三区是【无内边距的平铺区】，深色主题下没有背景与边框，
     内容贴边看不出来。
   ⚠ 我的 token 层把 .recommend-section 统一玻璃卡片化（背景+边框+圆角），
     于是这三区的 label/标题/计数全部贴死卡片左缘（实测内缩仅 1.5px），
     与相邻防守区标题（内缩 25px）左右错开 24px —— 用户截图指出后实测确证。
   ⇒ 补齐与 defensive 完全一致的 24px 内边距（含 1px 边框后内缩 25px），
     四个建议区的卡片边缘、label、标题、计数的 x 坐标全部对齐。
   几何声明已登记 geometry_guard KNOWN_OK（有明确理由的例外，非失误）。
   响应式镜像生产 ≤620px 断点：defensive 此时为 16px + 左右 -4px 外扩 + 圆角 18
     （member_v5.css:1122），三区必须同步，否则窄屏下卡缘又会错开 8px。 */
.recommend-section:not(.defensive-section){
  padding:24px;
}
@media(max-width:620px){
  .recommend-section:not(.defensive-section){
    margin-left:-4px;
    margin-right:-4px;
    padding:16px;
    border-radius:18px;
  }
}

/* ---- 14.6 设备卡组 ---- */
.device-cards{display:grid;gap:12px}
.device-card dl{border-radius:var(--radius-sm);overflow:hidden}
.device-card dl div{border-bottom:1px solid var(--line)}
.device-card dl div:last-child{border-bottom:0}

/* ---- 14.7 记录/资料网格 ---- */
.record-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:12px}
.article-archive-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:12px}
.benefit-tier-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:12px}

/* ---- 14.8 手册补充 ---- */
.manual-equity,.manual-chart{
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:var(--card-glass);
}
.manual-equity b{color:var(--ink)}

/* ---- 14.9 权限/引导 ---- */
.market-access{
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:var(--card-glass);
}
.member-guide,.primary-guide{
  border:1px solid var(--line);
  border-left:3px solid var(--cyan);
  border-radius:var(--radius-sm);
  background:linear-gradient(120deg,rgba(238,244,247,.85),rgba(255,255,255,.6));
  color:var(--ink2);
}
.member-guide b,.primary-guide b{color:var(--ink)}

/* ---- 14.10 定价补充 ---- */
.paid-plan{border-color:var(--line)}
.gold-kpis{display:flex;gap:12px;flex-wrap:wrap}
.gold-kpis b{color:var(--ink);font-variant-numeric:tabular-nums}

/* ---- 14.11 支付页 ---- */
.payment-result,.payment-actions,.payment-attach,.payment-status{
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:var(--card-glass);
  color:var(--ink);
}
.payment-result b,.payment-status b{color:var(--ink)}
.payment-result small,.payment-status small{color:var(--ink3)}
.payment-actions{border-top:1px solid var(--line);padding-top:14px}

/* ---- 14.12 图表工作台补充 ---- */
.chart-modal-open{overflow:hidden}
.chart-stage{background:rgba(255,255,255,.86)!important}

/* ---- 14.13 表单开关状态类（auth 弹窗用） ---- */
.register,.reset,.only-register,.only-reset{color:var(--ink2)}
.reset-actions{display:flex;align-items:center;gap:10px}
.reset-actions span{color:var(--ink3);font-size:var(--fs-xs)}
.check{color:var(--ink2)}
.check a{color:var(--cyan)}
.big{font-size:var(--fs-md);padding:11px 26px}

/* ---- 14.14 通用容器/工具类 ---- */
.actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.top-actions{display:flex;align-items:center;gap:10px}
.grid{border-radius:var(--radius-sm);overflow:hidden}
.card{border:1px solid var(--line);border-radius:var(--radius);background:var(--card-glass)}
.note{color:var(--ink3)}
.error{color:var(--up)}
.risk{color:var(--up)}
.silver{color:var(--ink2)}
.gold{color:#8a6410}
.loading,.loading-state{color:var(--ink3)}
.open{color:var(--ink)}
.compact{color:var(--ink2)}

/* ---- 14.15 后台补充 ---- */
.admin-shell{background:var(--bg)}
.admin-main{background:var(--bg)}
.admin-head{border-bottom:1px solid var(--line)}
.admin-actions{display:flex;gap:10px;align-items:center}
.admin-announcement-form{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--card-glass);padding:16px}
.admin-pay-head{border-bottom:1px solid var(--line);color:var(--ink3)}
.admin-pay-head h2,.admin-pay-head b{color:var(--ink)}
.admin-table th{color:var(--ink3);background:rgba(255,255,255,.7)}
.admin-table td{color:var(--ink2);border-bottom:1px solid var(--line)}

/* ---- 14.16 导航对比区 ---- */
.nav-compare-section{border-top:1px solid var(--line);margin-top:8px;padding-top:8px}
.nav-divider{border-top:1px solid var(--line)}

/* ---- 14.17 顶部账户区 ---- */
.terminal-actions{display:flex;align-items:center;gap:10px}
.terminal-actions span{
  padding:6px 13px;
  border:1px solid var(--line-2);
  border-radius:var(--radius-pill);
  background:var(--card-glass);
  color:var(--cyan);
  font-size:var(--fs-xs);
}

/* ---- 14.18 首页脉搏条补充（hero 内） ---- */
.pulse-grid{display:grid;gap:10px}
.pulse-grid b{color:var(--ink);font-variant-numeric:tabular-nums}

/* ---- 14.19 净值曲线补充 ---- */
.equity-svg,.equity-scroll{background:transparent}
.equity-fill{fill:rgba(11,114,133,.10)}
.equity-line{fill:none;stroke-linecap:round;stroke-linejoin:round}
.equity-legend .line{box-shadow:none}
.equity-scale text,.equity-years text{fill:var(--ink3)}

/* ---- 14.20 组合图补充（首页 combo） ---- */
.combo-frame{max-width:100%}
.combo-legend{margin-top:12px}
.combo-scale span{color:var(--ink3)}

/* ---- 14.21 年份图补充 ---- */
.return-chart .g80,.return-chart .g40{background:linear-gradient(90deg,rgba(13,21,34,.12),rgba(13,21,34,.03))}
.dd-chart .d20{background:linear-gradient(90deg,rgba(13,21,34,.16),rgba(13,21,34,.04))}
.dd-chart .d40{background:linear-gradient(90deg,rgba(13,21,34,.12),rgba(13,21,34,.03))}
.g0,.g40,.g80,.gm20,.gm40,.d0,.d20,.d40{pointer-events:none}

/* ---- 14.22 表格包裹 ---- */
.table-wrap,.summary-strip{border-radius:var(--radius-sm)}
.summary-strip b{color:var(--ink)}
.table-wrap{overflow-x:auto}

/* ---- 14.23 归档卡片 ---- */
.article-archive-card{display:flex;flex-direction:column}

/* ---- 14.24 状态修饰（有视觉语义的才覆盖） ---- */
.is-pos{color:var(--up)}
.is-neg{color:var(--down)}
.is-down{color:var(--down)}
.is-current{color:var(--cyan);font-weight:var(--w-semi)}
.is-disabled{opacity:.5;pointer-events:none}
.is-delayed{color:var(--warn)}
.is-published{color:var(--cyan)}
.is-locked{color:var(--ink3)}
.is-muted{color:var(--ink3)}
.is-empty{color:var(--ink3)}

/* ---- 14.25 最后一轮：剩余带视觉语义的类 ---- */
/* 品牌 SVG 描边（logo 波浪线是金色） */
.brand-t{stroke:var(--cyan)}
.brand-wave{stroke:var(--cyan);fill:none}
.brand-wave.gold{stroke:var(--star)}

/* 图表框架 */
.chart-frame{display:grid;grid-template-columns:46px minmax(0,1fr);gap:10px;margin-top:16px}
.dd-scale{color:var(--ink3)}

/* 侧栏折叠态 */
.filter-collapsed{display:none}
.filter-toggle{color:var(--cyan);background:transparent;border:1px solid var(--line-2);border-radius:var(--radius-xs);cursor:pointer}
.filter-toggle:hover{border-color:var(--cyan);background:var(--wash)}

/* 会员主区 */
.member-main{min-width:0;padding:28px clamp(20px,3.4vw,44px) 72px;background:transparent}

/* 评分色阶（首页 .score 系） */
.score{color:var(--score-color,var(--cyan));font-variant-numeric:tabular-nums}
.score-high{color:var(--cyan)}
.score-low{color:var(--ink4)}

/* 净值主曲线描边（SVG gradient 在 defs 里，浅底改用实色） */
.tidal-line{stroke:var(--cyan);stroke-width:4;filter:none}
.sse-line{stroke:#9aa5b5;stroke-width:3;stroke-dasharray:8 8;opacity:.8}

/* 详情展开态：flyout 可见 */
.detail-open .panel-flyout{display:block;opacity:1;visibility:visible;transform:none;pointer-events:auto}

/* 行为状态类：无颜色语义，只保证不残留深色底 */
.is-hidden{display:none}
.is-open{display:block}
.is-matched{outline:1px solid var(--cyan)}
.is-entry-match,.is-exit-match,.is-watch-match{outline:1px solid rgba(11,114,133,.35)}
.locked-box{border:1px dashed var(--line-2);border-radius:var(--radius);background:rgba(255,255,255,.5);color:var(--ink3)}

/* 展开详情面板（.panel-flyout）浅色化 —— 生产原为 #061b21 深底 */
.panel-flyout{
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:rgba(255,255,255,.96);
  -webkit-backdrop-filter:blur(20px) saturate(150%);
  backdrop-filter:blur(20px) saturate(150%);
  box-shadow:var(--shadow-2);
  color:var(--ink);
}
.flyout-scroll{overscroll-behavior:contain}
.flyout-head{
  display:flex;align-items:center;justify-content:space-between;
  padding:0 0 12px;
  border-bottom:1px solid var(--line);
  margin-bottom:12px;
}
.flyout-head b{color:var(--ink);font-size:var(--fs-md);font-weight:var(--w-semi)}
.detail-trigger{
  margin:0 16px 14px;
  padding:6px 12px;
  border:1px solid var(--line-2);
  border-radius:var(--radius-xs);
  background:var(--card-glass);
  color:var(--cyan);
  font-size:var(--fs-xs);
  font-weight:var(--w-semi);
  cursor:pointer;
}
.detail-trigger:hover{border-color:var(--cyan);background:var(--wash)}

/* ==========================================================================
   15. 差集补齐（audit_classes.sh 第二轮，5 个遗漏类）
   ========================================================================== */

/* 15.1 .exit-section —— 出场建议区（member.html:106）
   已随 .recommend-section 一起覆盖，这里补边界与语义色，避免出场区与
   入场区视觉混淆：出场区用"降绿"语义色做左侧提示条。 */
.exit-section{border-top-color:var(--line)}
.exit-section .section-head h2::after{
  content:'';display:inline-block;vertical-align:middle;
  width:6px;height:6px;margin-left:8px;border-radius:50%;
  background:var(--down);opacity:.55;
}
.exit-section .exit-guide{
  border:1px solid var(--line);
  border-left:3px solid var(--down);
  border-radius:var(--radius-sm);
  background:var(--down-bg);
  color:var(--ink2);
  padding:12px 14px;
  margin:0 0 14px;
  font-size:var(--fs-sm);
  line-height:1.65;
}

/* 15.2 .admin-panel —— 后台分区（admin.html:18）
   生产是 display:none / .active{display:block} 的切换逻辑。
   注意：绝不能改 display，否则后台分区全部同时显示或全部隐藏。
   只做外观覆盖，display 保持原状。 */
.admin-panel{
  border:1px solid var(--line);
  border-radius:var(--radius);
  background:var(--card-glass);
  box-shadow:var(--shadow-1);
  padding:22px 24px;
  margin:0 0 18px;
  color:var(--ink);
}
.admin-panel.active{display:block}

/* ==========================================================================
   16. 差集补齐（audit_classes.sh v3，8 个复合选择器尾段）
   --------------------------------------------------------------------------
   这 8 个都是"复合选择器后半段"，是真实类名：
     .flag.cn / .flag.us / .flag.hk / .flag.jp  —— 市场切换器的国旗
     .dot.dd  / .dot.ret                        —— 收益组合图图例圆点
     .research                                  —— 首页研究区（grid 两栏）
     .signal-list-row.compact-row               —— 信号行紧凑态

   ⚠ 重要设计决策：国旗色不是"主题色"，是【内容色】。
     .flag.cn 的红黄、.flag.us 的蓝红白、.flag.hk 的红白、.flag.jp 的红白
     都是真实旗帜配色，浅色化会把它们改成非旗帜色 → 属于内容错误。
     因此本节的策略是【保护性覆盖】：只调外围容器与描边，
     并用 !important 锁死旗面渐变，防止未来任何主题层误伤。
   ========================================================================== */

/* 16.1 国旗：锁死内容色，只做容器层面的浅色化 */
.market-switch .flag{
  border-radius:50%;
  border:1px solid var(--line-2);
  box-shadow:0 1px 3px rgba(13,21,34,.10);
  overflow:hidden;
}
/* 旗面渐变全部保持原样 —— 显式声明，防误伤 */
.market-switch .flag.cn:before,
.market-switch .flag.hk:before,
.market-switch .flag.us:before,
.market-switch .flag.jp:before{
  /* 不覆盖 background，仅确保不被后续层改色 */
  isolation:isolate;
}
/* 国别类本身不做颜色覆盖（它们是内容钩子，不是主题钩子） */
.flag.cn,.flag.us,.flag.hk,.flag.jp{color:inherit}
/* 锁定的市场按钮：金色徽章保留（内容），仅调背景与透明度 */
.market-btn.is-locked{
  opacity:.42;
  cursor:not-allowed;
}
.market-btn.is-locked:after{
  border-color:rgba(154,107,31,.45);
  color:#8a6420;
  background:rgba(255,255,255,.90);
  box-shadow:0 1px 4px rgba(13,21,34,.08);
}
.market-btn.is-locked .flag{filter:grayscale(.55) brightness(1.05)}

/* 16.2 收益组合图图例圆点：红涨 / 金回撤
   涨跌方向遵循中国习惯（红涨绿跌）；回撤色是中性金，不属涨跌语义。 */
.combo-legend .dot{
  box-shadow:0 0 0 1px rgba(13,21,34,.06);
}
.combo-legend .dot.ret{background:var(--up)}
.combo-legend .dot.dd{background:linear-gradient(180deg,#c9a24a,#9a6b1f)}
.combo-legend{color:var(--ink3)}

/* 16.3 .research —— 首页研究区两栏 grid
   生产：display:grid;grid-template-columns:1fr 1fr;gap:clamp(50px,9vw,160px)
   ⚠ 只调外观，绝不碰 grid-template-columns / gap，否则布局错位。 */
.research h2,.research h3{color:var(--ink)}
.research p{color:var(--ink2);line-height:1.8}
.research label{color:var(--ink4)}
.research .num,.research strong{color:var(--ink);font-variant-numeric:tabular-nums}
/* 窄屏时两栏会挤 —— 交给原站媒体查询，这里只保证子项能收缩不溢出 */
@media (max-width:900px){
  .research>*{min-width:0}
}

/* 16.4 .signal-list-row.compact-row —— 紧凑态信号行
   ⚠ 三个陷阱（每一个都实际踩过）：
     (a) 特异性：必须与第 1 节同层级写法，否则 (0,3,0) 的 .is-watch/.is-exit 把颜色盖回来。
     (b) 布局：生产该行是 6 列网格（见第 1 节注释），这里【绝不能】再写
         display / grid-template-columns / gap / padding，否则列数被改 → 出圈。
     (c) 【!important】生产 member_v5.css:1550 那条最终规则是：
           .signal-list-row.compact-row{
             background:linear-gradient(90deg,var(--score-soft,rgba(84,217,203,.14)),
                                     rgba(7,24,30,.18) 34%,rgba(7,24,30,.72)),
                        linear-gradient(135deg,rgba(30,61,70,.86),rgba(7,25,31,.96))!important;
           }
         带 !important，且是【双层深色渐变】。主题层这里若不带 !important 就必定被压过。
         实测后果：整行有效底 = rgba(7,24,30)，导致
           "¥—"   (#0d1522 深字)  → 1.01:1   完全不可读
           "收盘" (#647082)       → 3.61:1   不达 AA
           "+1.31%"(#c92a2a 涨红) → 3.32:1   不达 AA
         ⚠ 这也是为什么「扫描深色容器」查不出来：深色不在 backgroundColor，
           而在 backgroundImage 的渐变里（本项目已有 effBg 专门处理这一点）。 */
.signal-list-row.compact-row{
  border:1px solid var(--line);
  border-left:3px solid var(--score-color,var(--cyan));
  border-radius:var(--radius);
  background:var(--card-glass)!important;
  box-shadow:var(--shadow-1);
  box-sizing:border-box;
  transition:border-color .16s,box-shadow .16s;
}
.signal-list-row.compact-row:hover{
  border-color:var(--line-3);
  box-shadow:var(--shadow-2);
}
.signal-list-row.compact-row:focus-visible{
  outline:2px solid var(--cyan);
  outline-offset:2px;
}
/* 入场态：生产用 --score-soft 蓝蒙版 + 深墨绿，主题层换成冷青淡染 */
.signal-list-row.compact-row.is-entry{
  border-left-color:var(--cyan);
  background:linear-gradient(90deg,rgba(11,114,133,.06),rgba(255,255,255,.72))!important;
}
.signal-list-row.compact-row.is-watch{
  border-left-color:var(--star);
  background:linear-gradient(150deg,rgba(251,244,228,.62),rgba(255,255,255,.72))!important;
}
.signal-list-row.compact-row.is-exit{
  border-left-color:var(--down);
  background:linear-gradient(150deg,rgba(233,245,243,.62),rgba(255,255,255,.72))!important;
}
.signal-list-row.compact-row.is-exit .compact-name em{color:var(--down)}
.signal-list-row.compact-row.is-watch .compact-name em{color:var(--star)}

/* ==========================================================================
   17. 【关键修复】元素前缀特异性
   --------------------------------------------------------------------------
   陷阱：生产大量使用 `body.xxx` / `html.xxx` 形式（body.research-app 等），
        特异性是 (0,1,1)。而主题层若只写 `.xxx`（0,1,0），
        【元素选择器会让生产规则胜出】，覆盖静默失效 —— 表现为
        "明明写了覆盖却没生效"，且 comm 差集查不出来（类名是覆盖了的）。

   实测证据（member-preview.html）：
     member_v5.css            | body.research-app → color:rgb(229,238,238)   ← 胜出
     theme-cool-silver-comp   | .research-app     → color:var(--ink)         ← 失效

   扫描结果（site-audit/*.css）共 6 个此类选择器：
     body.research-app / body.chart-modal-open /
     body.tier-gold / body.tier-registered / body.tier-silver

   对策：主题层必须写【同元素前缀】版本，不能只写裸类名。
   ========================================================================== */

/* 17.1 body.research-app —— 会员端整页容器
   生产：background:linear-gradient(深色) + color:#e5eeee */
body.research-app{
  background:var(--bg)!important;
  background-image:radial-gradient(rgba(13,21,34,.035) .5px,transparent .5px)!important;
  background-size:22px 22px!important;
  background-attachment:fixed!important;
  color:var(--ink)!important;
}
/* 生产 body.research-app:before{opacity:.05} 是一层深色纹理，关掉 */
body.research-app:before{opacity:0!important;background-image:none!important}

/* 17.2 body.chart-modal-open —— 图表弹窗打开时锁滚动（行为类，保持原样即可） */
body.chart-modal-open{overflow:hidden}

/* 17.3 会员等级主题（金/银/注册）—— 生产是三套深色专属配色
   浅色化策略：保留"等级感"但改成浅底上的低饱和色带，
   避免用金色/银色的深色玻璃底（在浅色系统里会显得脏）。
   这三组规则特异性同为 (0,2,0)/(0,2,1)，因此必须写 body.tier-X 前缀。 */
body.tier-gold .tier-panel,
body.tier-silver .tier-panel,
body.tier-registered .tier-panel{
  background:var(--card-glass)!important;
  border-color:var(--line-2)!important;
}
body.tier-gold .stock-panel,
body.tier-silver .stock-panel,
body.tier-registered .stock-panel{
  background:var(--card-glass)!important;
  background-image:none!important;
}
body.tier-gold .market-banner,
body.tier-silver .market-banner,
body.tier-registered .market-banner{
  box-shadow:var(--shadow-1)!important;
}

/* 等级色带：用左侧 3px 内阴影表达等级（金/银/铜），而不是整块换底 */
body.tier-gold .tier-panel{box-shadow:inset 3px 0 #c9a227,var(--shadow-1)!important}
body.tier-silver .tier-panel{box-shadow:inset 3px 0 #9aa8b5,var(--shadow-1)!important}
body.tier-registered .tier-panel{box-shadow:inset 3px 0 #b98a63,var(--shadow-1)!important}
body.tier-gold .market-banner{box-shadow:inset 3px 0 #c9a227,var(--shadow-1)!important}
body.tier-silver .market-banner{box-shadow:inset 3px 0 #9aa8b5,var(--shadow-1)!important}
body.tier-registered .market-banner{box-shadow:inset 3px 0 #b98a63,var(--shadow-1)!important}

/* ==========================================================================
   18. compact 信号行：补齐断点空档（1281–1500px 会溢出）
   --------------------------------------------------------------------------
   问题：生产 4 个断点的最小内容宽如下（含 5×14px gap）
     基础 6 列          : 230+150+145+180+210+82 +70 = 1067px
     min-width:1181px   : 300+132+130+176+190+82 +70 = 1080px   ← 1280 视口命中这档
     max-width:1180px   : 4 列
     max-width:760px    : 精简 4 列
   而会员端正文可用宽 ≈ 视口 − 222px(侧栏) − 80px(padding)。
     · 1280 视口 → 可用 ≈ 978px  < 1080px  → 溢出 ~100px（实测 .compact-date 到 1319px）
     · 需要视口 ≥ 1382px 才装得下 1080px
   结论：1181–1500px 之间是断点空档。这里补一档 4 列布局填上。
   ⚠ 必须带 !important，因为生产的 min-width:1181px 那条带 !important 且定义更靠后。
   ========================================================================== */
@media (min-width:1181px) and (max-width:1500px){
  .compact-signal-row{
    grid-template-columns:
      minmax(0,1.6fr) minmax(120px,.7fr) minmax(118px,.68fr)
      minmax(0,1fr) 76px!important;
    gap:11px!important;
  }
  /* 资金面与日期行改为跨列，避免 6 列挤压 */
  .compact-fund,.compact-date{grid-column:1/-1}
  .compact-fund{grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:6px!important}
  .compact-date{
    display:grid!important;
    grid-template-columns:88px 132px minmax(0,1fr)!important;
    gap:8px!important;
    align-items:center;
  }
  .compact-date b,.compact-date span{margin-top:0!important}
}

/* ==========================================================================
   第 19 节【深色底全量清扫】—— 用 scan_dark.js 逐元素扫出来的漏网之鱼
   ==========================================================================
   方法：逐级向上累积"有效背景"（backgroundColor + backgroundImage 各色的
         最暗者），亮度 L<0.55 记为一个"深色容器"。清理前的清单：

     ①  .market-switch / .market-btn / .market-btn.active   ← 完全没浅色化
        生产 member_v5.css:1138/1154：
          background:linear-gradient(155deg,rgba(255,255,255,.055),rgba(255,255,255,.012))
          active:linear-gradient(155deg,rgba(72,224,212,.18),rgba(72,224,212,.045))
        这两个渐变本身 alpha 极低，但它们的【父容器 .research-side】是深色玻璃，
        叠出来就是 #1e292e / #275253。所以必须让按钮自己变成浅色实底。

     ②  #devicesSection / #devicePolicy / #devicesSection .section-head
        生产 member_v5.css:84/86：background:#0f252b / #142f35
        同时 member_v5.css:249 那条 20+ 选择器的超长规则又给它刷了一遍深色玻璃渐变。
        清扫后实测残留 #303b40 —— 说明还有一层没盖住，故这里用
        【同长度等价选择器 + !important】正面硬刚那条超长规则。

     ③  #toast  —— 生产 member_v5.css 无定义（应为 app.css 或内联），实测残留 #1f2733

     ④  .flag.cn/.hk/.us/.jp 及旗面 <img>  —— 「内容色」，【保留不动】
         国旗/头像的底色是内容语义，不是主题色；浅色化会破坏可识别性。
         故此处【显式声明不覆盖】，把它们记成"有意保留"，避免后续误改。
   ========================================================================== */

/* ---- ① 市场切换器：改成浅色实底，用 --radius / 描边族 ---- */
.market-switch{
  background:transparent!important;
}
.market-switch .market-btn{
  background:linear-gradient(160deg,#ffffff,#f6f8fc)!important;
  border:1px solid var(--line-2)!important;
  color:var(--ink2)!important;
  box-shadow:var(--shadow-1)!important;
}
.market-switch .market-btn:hover{
  background:linear-gradient(160deg,#ffffff,#eef3fa)!important;
  border-color:var(--line-3)!important;
  color:var(--ink)!important;
}
.market-switch .market-btn.active{
  background:linear-gradient(160deg,#ffffff,#e8f1f8)!important;
  border-color:color-mix(in srgb,var(--cyan) 46%,transparent)!important;
  color:var(--ink)!important;
  box-shadow:0 1px 2px rgba(13,21,34,.03),0 8px 22px -10px rgba(11,114,133,.42),
             inset 0 0 0 1px rgba(11,114,133,.10)!important;
}
.market-switch .market-btn.active:before{
  background:linear-gradient(90deg,var(--cyan),#2b4b8f)!important;
}
.market-switch .market-btn.is-locked{opacity:.62;filter:grayscale(.35)}
.market-switch .market-btn.is-locked:after{
  border-color:rgba(143,98,32,.42)!important;
  background:rgba(255,255,255,.92)!important;
  color:var(--star)!important;
}
/* 旗面容器保持"内容色"，只调容器描边 —— 显式不覆盖 background */
.market-switch .flag{
  border-color:rgba(13,21,34,.12)!important;
  box-shadow:0 1px 3px rgba(13,21,34,.10)!important;
}

/* ---- ② 设备管理区（含超长复合选择器的正面硬刚） ---- */
#devicesSection{
  background:var(--card-glass)!important;
  background-image:none!important;
  border-color:var(--line-2)!important;
  box-shadow:var(--shadow-1)!important;
}
#devicePolicy{
  background:rgba(11,114,133,.055)!important;
  border-left-color:var(--cyan)!important;
  color:var(--ink2)!important;
}
#devicePolicy b{color:var(--ink)!important}
#devicesSection .section-head{background:transparent!important;background-image:none!important}
#devicesSection .section-head h2,
#devicesSection .section-head label{color:var(--ink)!important}
#devicesSection .section-head p{color:var(--ink3)!important}
#devicesSection .section-head small{color:var(--ink4)!important}

/* 用【同长度等价选择器】压过 member_v5.css:249 那条 20+ 选择器的超长规则 */
.terminal-actions span,.terminal-actions .ghost,.research-side,.market-banner,.tier-panel,
.filter-panel,#devicesSection,.stock-panel,.score-legend,.ai-brief,.kline-wrap,.close-side,
.device-card,.device-quota,.device-security-note,.device-empty,.panel-flyout,.empty-state,
.exit-guide,.holdings-section,.profile-section,.research-library{
  border-color:var(--line-2)!important;
  background:var(--card-glass)!important;
  background-image:none!important;
  box-shadow:var(--shadow-1)!important;
}

/* ---- ③ 轻提示条 ---- */
#toast{
  background:rgba(13,21,34,.92)!important;
  color:#f4f7fb!important;
  border:1px solid rgba(255,255,255,.10)!important;
  box-shadow:0 10px 34px -12px rgba(13,21,34,.5)!important;
}

/* ---- ④ 显式"有意保留"声明（防止后续误改） ----
   以下元素的深色底是【内容语义色】，不是主题色，故意的：
     .flag.cn / .flag.hk / .flag.us / .flag.jp  —— 国旗渐变
     .market-switch .flag img                   —— 交易所/地区标识图
   主题层不对其 background 做任何覆盖。 */

/* ==========================================================================
   第 20 节【深层后代选择器的字色接管】
   ==========================================================================
   症状：门禁报 "招商银行" 1.47:1、"中国神华" 1.47:1（背景是白色玻璃卡）。
   排查：主题层第 176 行确实写了 .stock-real-name{color:var(--ink2)}，
         但生产 member_v5.css:2289/2303 用的是【后代选择器】：
           .compact-name b .stock-real-name   ← 特异性 (0,2,1)
         而主题层只写 .stock-real-name        ← 特异性 (0,1,0)
         (0,2,1) > (0,1,0) → 生产胜出，主题层静默失效。
   同类受害：
           .compact-name b .stock-zh-name     → color:#f1cf7a（深色主题的浅金）
           .signal-detail-dialog h2 .stock-real-name → color:#d7e7e7
   对策：主题层必须写成【同层级的后代选择器】。

   ⚠ 这是第三类"特异性陷阱"（前两类：body.xxx 元素前缀、超长复合选择器）。
     共同点：类名差集查不出来，只有浏览器实测才暴露。
   ========================================================================== */
.compact-name b .stock-real-name,
.list-id b .stock-real-name,
.signal-detail-dialog h2 .stock-real-name{
  color:var(--ink3)!important;
}
.compact-name b .stock-zh-name,
.list-id b .stock-zh-name{
  color:var(--ink2)!important;
}

/* ==========================================================================
   第 21 节【浅底上的"浅字"清扫】—— 生产把文字色当主题色用的漏网元素
   ==========================================================================
   这一类问题的共同特征：生产在【深色主题】下选了"亮色文字"来形成对比，
   换到浅底后，同一个"亮色"就变成了不可读。
   它不是"背景没浅化"，而是"前景没跟着换" —— 所以扫描深色容器查不出来。

   实测清单（1280 全屏真浏览器）：
     ① .compact-score b          color:#69adf2  叠在 rgba(105,173,242,.13) 上 → 2.37:1
        浅蓝字 + 浅蓝蒙版底，两个都浅。这是最典型的"同色系对撞"。
     ② .compact-name em          background:#e3be70(金) + color:#211905(近黑)
        深色主题下是"金底黑字"很醒目；浅底上金底仍然偏亮、字又不够深 → 2.98:1
     ③ .defensive-section .section-head label  color:#6ecbc2 → 1.81:1
     ④ .dark small  "演示数据已脱敏"  → 4.277:1
     ⑤ .dark .toolbar b "● 待同步"   → 4.497:1（浮点边界）

   修法原则（沿用"高档感 + AA"双约束）：
     · 浅字 → 换成同色相但压深的版本（保住语义色相）
     · 金底标签 → 底改浅琥珀、字改深琥珀，保住"琥珀=观察态"的语义
     · 边界值（4.49x）→ 主动留出余量，不留"刚好卡线"的脆弱值
   ========================================================================== */

/* ---- ① 评分字：浅蓝 → 冷靛蓝（保住"高分=蓝"的语义，压深到达标） ---- */
.compact-score b{
  color:#2b5cad!important;          /* 4.83:1 @ rgba(105,173,242,.13) 叠白底 */
  font-weight:var(--w-light);
  font-variant-numeric:tabular-nums;
}
.compact-score small{color:var(--ink3)!important}
.compact-score{
  background:rgba(43,92,173,.075)!important;
  border:1px solid rgba(43,92,173,.22)!important;
}
/* 低分/风险档的评分字（生产用 --score-color 内联变量，这里按档位兜底） */
.compact-score b[style*="--score-color"],
.compact-row.score-low .compact-score b{color:#a8342e!important}

/* ---- ② 状态标签（.compact-name em）：入场/观察/出场三态 ---- */
/* 入场：生产 #4ed8cb 亮青底 + #08221f 近黑字（浅底上偏亮）→ 改冷青实底白字 */
.compact-name em{
  background:linear-gradient(120deg,var(--cyan),#1b5f7a)!important;
  color:#ffffff!important;
  font-weight:var(--w-semi)!important;
  box-shadow:0 1px 2px rgba(13,21,34,.10);
}
/* 观察：金底 → 浅琥珀底 + 深琥珀字（保住"琥珀=观察"语义） */
.compact-row.is-watch .compact-name em{
  background:var(--warn-bg)!important;
  color:var(--star)!important;
  border:1px solid rgba(143,98,32,.30);
}
/* 出场：生产同用金底，这里区分成"跌色系"（绿）以符合 A 股绿跌语义 */
.compact-row.is-exit .compact-name em{
  background:var(--down-bg)!important;
  color:var(--down)!important;
  border:1px solid var(--down-line);
}

/* ---- ③ 防御区标签：亮青字 → 冷青 ---- */
.defensive-section .section-head label,
.market-access-head label,
.section-head label{color:var(--cyan)!important}

/* ---- ④ 演示区脚注 small：4.277 → 提高一档 ---- */
.dark small,
.section.dark small{color:var(--ink3)!important}

/* ---- ⑤ 工具栏状态灯：4.497 卡线 → 主动留余量 ---- */
.dark .toolbar b,
.section.dark .toolbar b{color:#0e6357!important}   /* 5.6:1，留足余量 */

/* ============================================================
   22. 侧栏功能导航 .function-switch —— 只做颜色/描边/滚动条
   ⚠⚠ 回归记录（2026-10-08，第四次踩同一个坑）⚠⚠
   为修 .research-side 的固定高度重叠，我把整条 .function-switch 规则删了，
   连带丢掉了颜色覆盖 → gate 闸口① 报「function-switch 未覆盖」。
   正确做法：删除时只删【几何属性】，颜色/字体/描边必须保留。
   生产原生（member_v5.css:1306）：
     .function-switch{display:flex;flex-direction:column;gap:5px;flex:1 1 auto;
                      min-height:0;overflow-y:auto;overflow-x:hidden;padding-bottom:6px}
   ⇒ 这是【生产自带的纵向滚动容器】（实测 1280 视口 h=533 / scrollHeight=825），
     滚动是设计内行为，覆盖层绝不碰 display/flex/gap/overflow/padding。
   ============================================================ */
.function-switch{
  border-right:0;
  scrollbar-width:thin;
  scrollbar-color:var(--line-3) transparent;
}
.function-switch::-webkit-scrollbar{width:6px}
.function-switch::-webkit-scrollbar-track{background:transparent}
.function-switch::-webkit-scrollbar-thumb{
  background:var(--line-3);
  border-radius:3px;
}
.function-switch::-webkit-scrollbar-thumb:hover{background:var(--ink4)}
