* { margin: 0; padding: 0; box-sizing: border-box; }

/* 通用隐藏类（面板切换等） */
.hidden { display: none !important; }

body {
  font-family: "PingFang SC", "Microsoft YaHei", "Segoe UI", sans-serif;
  background: #f5f7fa;
  color: #303133;
}

.container {
  max-width: none;   /* 桌面端全宽铺满浏览器（移动端仍保留内边距） */
  margin: 0 auto;
  padding: 20px 16px 40px;
}

/* 头部 */
header {
  background: #fff;
  border-radius: 10px;
  padding: 18px 20px;
  box-shadow: 0 1px 4px rgba(0,0,0,.06);
  margin-bottom: 14px;
}
.title-row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.title-block { display: flex; flex-direction: column; }
.title-status { display: inline; color: #909399; font-size: 12px; font-weight: 400; margin-left: 8px; white-space: nowrap; }
.title-row #account-area { margin-left: auto; }
.logo { width: 28px; height: 28px; border-radius: 7px; }
h1 { font-size: 20px; }
.subtitle { color: #909399; font-size: 13px; }

.progress-wrap { display: flex; align-items: center; gap: 10px; margin-top: 12px; }
.progress-wrap.hidden { display: none; }
.progress-bar {
  flex: 1; height: 8px; background: #ebeef5; border-radius: 4px; overflow: hidden;
}
.progress-fill {
  height: 100%; width: 0; background: #409eff; border-radius: 4px;
  transition: width .4s ease;
}
#progress-text { font-size: 12px; color: #909399; white-space: nowrap; }

/* 按钮 */
.btn {
  border: 1px solid #dcdfe6; background: #fff; color: #606266;
  padding: 7px 16px; border-radius: 6px; font-size: 13px; cursor: pointer;
  transition: all .15s;
}
.btn:hover { border-color: #409eff; color: #409eff; }
.btn.primary { background: #409eff; border-color: #409eff; color: #fff; }
.btn.primary:hover { background: #66b1ff; }
.btn:disabled { opacity: .5; cursor: not-allowed; }

/* 执行筛选主按钮：蓝紫渐变 + 光晕，科技感但不突兀 */
.btn-run {
  border: none;
  background: linear-gradient(135deg, #409eff 0%, #6a7cff 55%, #8b5cf6 100%);
  color: #fff; font-weight: 500;
  padding: 7px 20px;
  box-shadow: 0 2px 8px rgba(76, 108, 255, .35);
}
.btn-run:hover {
  color: #fff;
  box-shadow: 0 4px 16px rgba(76, 108, 255, .5);
  transform: translateY(-1px);
}
.btn-run:active {
  transform: translateY(0);
  box-shadow: 0 2px 6px rgba(76, 108, 255, .3);
}
.btn-run:disabled { box-shadow: none; }
.btn-run::before {
  content: '';
  display: inline-block;
  width: 6px; height: 6px; border-radius: 50%;
  background: rgba(255,255,255,.9);
  margin-right: 6px;
  vertical-align: 1px;
  box-shadow: 0 0 6px rgba(255,255,255,.7);
  animation: btnRunPulse 1.8s ease-in-out infinite;
}
@keyframes btnRunPulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: .55; transform: scale(.8); }
}
.btn-group { display: flex; gap: 8px; }

/* 参数区 */
.controls {
  background: #fff; border-radius: 10px; padding: 12px 16px;
  box-shadow: 0 1px 4px rgba(0,0,0,.06);
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin-bottom: 14px; font-size: 13px; color: #606266;
}
.controls select {
  margin-left: 6px; padding: 5px 8px; border: 1px solid #dcdfe6;
  border-radius: 5px; font-size: 13px; color: #303133; background: #fff;
}
.perf-filter { position: relative; display: inline-block; }
.perf-filter-btn {
  padding: 5px 10px; border: 1px solid #dcdfe6; border-radius: 5px;
  font-size: 13px; color: #303133; background: #fff; cursor: pointer;
}
.perf-filter-menu {
  position: absolute; top: calc(100% + 4px); left: 0; z-index: 90;
  min-width: 118px; background: #fff; border: 1px solid #ebeef5;
  border-radius: 8px; box-shadow: 0 4px 16px rgba(0,0,0,.12); padding: 4px;
}
.perf-filter-menu button {
  display: block; width: 100%; text-align: left; padding: 6px 10px;
  font-size: 12.5px; color: #303133; background: none; border: none;
  border-radius: 5px; cursor: pointer;
}
.perf-filter-menu button:hover { background: #ecf5ff; color: #409eff; }
.perf-filter-menu button.active { color: #409eff; font-weight: 600; }
:root[data-theme="dark"] .perf-filter-btn { background: #262933; color: #c9cdd6; border-color: #3a3e4a; }
:root[data-theme="dark"] .perf-filter-menu { background: #262933; border-color: #3a3e4a; }
:root[data-theme="dark"] .perf-filter-menu button { color: #c9cdd6; }
:root[data-theme="dark"] .perf-filter-menu button:hover { background: #333743; color: #79bbff; }
.checkbox-label { display: flex; align-items: center; gap: 5px; cursor: pointer; }
.result-meta { margin-left: auto; color: #909399; font-size: 12px; white-space: nowrap; }
.screen-loading { display: inline-flex; align-items: center; gap: 6px; color: #409eff; font-weight: 500; font-size: 12px; }
.screen-loading i { position: relative; display: inline-block; flex: none; width: 40px; height: 5px; border-radius: 3px; background: #e4e7ed; overflow: hidden; }
.screen-loading i::after { content: ''; position: absolute; left: -45%; top: 0; width: 45%; height: 100%; border-radius: 3px; background: linear-gradient(90deg, #409eff, #79bbff); animation: screen-loading-bar .8s ease-in-out infinite; }
@keyframes screen-loading-bar { 0% { left: -45%; } 100% { left: 100%; } }
.reorder-bar { display: inline-flex; gap: 6px; align-items: center; }
.name-head { display: inline-flex; gap: 2px; align-items: center; }
.name-icon { border: none; background: none; cursor: pointer; font-size: 13px; padding: 0 3px; color: #909399; line-height: 1; }
.name-icon:hover { color: #409eff; }
.name-icon.cancel-sort { color: #e64545; border: 1px solid #f3c1c1; border-radius: 4px; padding: 1px 6px; font-size: 12px; }
.name-icon.cancel-sort:hover { background: #fef0f0; color: #e64545; }
tr.dragging { opacity: 0.45; }
tr.drop-before td { border-top: 2px solid #409eff; }
tr.drop-after td { border-bottom: 2px solid #409eff; }
.watch-drag-ghost { position: fixed; z-index: 9999; pointer-events: none; display: flex; align-items: center; gap: 6px; background: #fff; border: 1px solid #dcdfe6; border-radius: 6px; box-shadow: 0 4px 14px rgba(0,0,0,.14); padding: 6px 10px; font-size: 12px; color: #303133; white-space: nowrap; opacity: .88; user-select: none; }
.watch-ghost-grip { color: #409eff; font-weight: 700; }
.watch-ghost-sep { color: #c0c4cc; }
.sample-exit { font-size: 11px; color: #909399; background: #f0f2f5; border-radius: 8px; padding: 0 6px; margin-left: 4px; }
tr.sample-archived td { color: #a8abb2; }

/* 表格 */
.table-wrap {
  background: #fff; border-radius: 10px; padding: 6px 8px;
  box-shadow: 0 1px 4px rgba(0,0,0,.06); overflow-x: auto;
}
/* separate+border-spacing:0 是 sticky 表头的标准修复——collapse 模式下 Chrome 的
   position:sticky 表头会不贴顶留缝隙（纵向滚动时上方空隙透出内容），且各表表现不一致 */
table { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 13px; }
th, td { padding: 9px 10px; text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
/* 日期列：iPad/Safari 下保持稳定宽度与等宽数字，避免被压缩/错位 */
td.date { min-width: 96px; }
th:nth-child(-n+5), td:nth-child(-n+5) { text-align: left; }
th.sel-cell, td.sel-cell { width: 30px; text-align: center; padding-right: 0; }
td.industry { color: #606266; max-width: 90px; overflow: hidden; text-overflow: ellipsis; }

/* 后台运行日志表：左对齐、正文换行、限高内滚 */
#logs-table th, #logs-table td { text-align: left; }
#logs-table td { vertical-align: top; }
#logs-table .table-wrap { max-height: calc(100vh - 260px); }
#apage-logs .table-wrap { max-height: max(320px, calc(100vh - 280px)); overflow: auto; }

/* 自选宽表：左右标识列吸附，中间列横向滚动 */
/* 容器去内边距：吸附列贴死边缘、吸附表头贴顶（缝隙不透行内容）；限高内部滚动，横向滚动条始终可见 */
#panel-watch .table-wrap { padding: 0; max-height: max(320px, calc(100vh - 230px)); overflow: auto; }
/* 筛选结果/板块榜同款限高：横向滚动条稳定在视口内 */
#panel-screen .table-wrap, #panel-board .table-wrap { padding-top: 0; max-height: max(320px, calc(100vh - 230px)); overflow: auto; }
#watch-table thead .stick-l0 { border-top-left-radius: 10px; }
#watch-table thead .stick-r0 { border-top-right-radius: 10px; }
#watch-table tbody tr:last-child .stick-l0 { border-bottom-left-radius: 10px; }
#watch-table tbody tr:last-child .stick-r0 { border-bottom-right-radius: 10px; }
#watch-table .stick-l0, #watch-table .stick-l1, #watch-table .stick-l2, #watch-table .stick-l3,
#watch-table .stick-r0 { position: sticky; background: #fff; z-index: 3; }
#watch-table .stick-l0 { left: 0; }
#watch-table .stick-l1 { left: 30px; width: 40px; min-width: 40px; }
#watch-table .stick-l2 { left: 70px; width: 80px; min-width: 80px; }
#watch-table .stick-l3 { left: 150px; width: 120px; min-width: 120px; max-width: 120px; overflow: hidden; text-overflow: ellipsis; box-shadow: 6px 0 6px -4px rgba(0,0,0,.08); }
#watch-table .stick-r0 { right: 0; width: 64px; min-width: 64px; text-align: center; box-shadow: -6px 0 6px -4px rgba(0,0,0,.08); }
#watch-table thead .stick-l0, #watch-table thead .stick-l1,
#watch-table thead .stick-l2, #watch-table thead .stick-l3,
#watch-table thead .stick-r0 { z-index: 7; }
#watch-table tbody tr:hover .stick-l0, #watch-table tbody tr:hover .stick-l1,
#watch-table tbody tr:hover .stick-l2, #watch-table tbody tr:hover .stick-l3,
#watch-table tbody tr:hover .stick-r0 { background: #f5f7fa; }

tbody tr.kbd-focus { background: #d9ecff !important; outline: 1px solid #409eff; outline-offset: -1px; }
/* 手机端禁用吸附列：窄屏上吸附列挤占全部宽度导致中间列不可见，恢复普通横滚。
   只取消左右偏移、不改 position——否则表头里的吸附 th 会失去 top:0 纵向吸附跟着内容滚走 */
@media (max-width: 768px) {
  #watch-table .stick-l0, #watch-table .stick-l1, #watch-table .stick-l2,
  #watch-table .stick-l3, #watch-table .stick-r0 {
    left: auto; right: auto; box-shadow: none;
  }
}
table:focus { outline: none; }
thead th {
  color: #909399; font-weight: 500; border-bottom: 1px solid #ebeef5;
  position: sticky; top: 0; background: #fff; z-index: 5;   /* 表头吸附置顶且压住行内容 */
}
th[data-key] { cursor: pointer; user-select: none; }
th[data-key]:hover { color: #409eff; }
th[data-key].asc::after { content: ' ▲'; font-size: 9px; color: #409eff; }
th[data-key].desc::after { content: ' ▼'; font-size: 9px; color: #409eff; }
tbody td { border-bottom: 1px solid #f2f6fc; }
tbody tr { cursor: pointer; transition: background .12s; }
tbody tr:nth-child(even) { background: #fafbfc; }
tbody tr:hover { background: #ecf5ff; }
td.empty { text-align: center; color: #909399; padding: 40px 0; cursor: default; }
.up { color: #e64545; }
.down { color: #1aad19; }
/* 自选分组名称着色：我的筛选 / 我的关注 / 两组皆有（用户在系统设置里可调，CSS变量承载） */
.wn-s { color: var(--wn-s, #7b5cff); font-weight: 600; }
.wn-g { color: var(--wn-g, #e68a00); font-weight: 600; }
.wn-b { color: var(--wn-b, #d4386e); font-weight: 600; }
.code { color: #909399; font-family: Consolas, monospace; }
.vol-ratio { color: #e6a23c; font-weight: 600; }

footer {
  margin-top: 16px; text-align: center; color: #c0c4cc; font-size: 12px; line-height: 1.6;
}

/* ===== 个股详情（全屏视图） ===== */
.detail-header {
  background: #fff; border-radius: 10px; padding: 14px 18px;
  box-shadow: 0 1px 4px rgba(0,0,0,.06); margin-bottom: 12px;
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
}
.detail-title { font-size: 18px; font-weight: 700; min-width: 130px; }
.detail-title .code { color: #909399; font-family: Consolas, monospace; font-weight: 400; font-size: 14px; margin-left: 4px; }
.detail-sub { color: #909399; font-weight: 400; font-size: 13px; margin-left: 8px; display: inline-block; min-width: 104px; font-variant-numeric: tabular-nums; }
.detail-sub:empty { min-width: 0; margin-left: 0; }   /* 非分时页收起占位 */
.detail-nav { margin-left: auto; display: flex; align-items: center; gap: 8px; }
.detail-quote { display: inline-flex; align-items: baseline; gap: 8px; margin-left: 6px; }
.quote-price { font-size: 24px; font-weight: 700; font-variant-numeric: tabular-nums; min-width: 72px; text-align: right; }
.quote-pct { font-size: 16px; font-weight: 600; font-variant-numeric: tabular-nums; min-width: 66px; text-align: right; }
.quote-time { font-size: 11px; color: #c0c4cc; font-variant-numeric: tabular-nums; min-width: 54px; }
.quote-na { color: #c0c4cc; font-size: 18px; }
.detail-nav .pos { color: #909399; font-size: 12px; min-width: 44px; text-align: center; }
.nav-btn {
  border: 1px solid #dcdfe6; background: #fff; color: #606266;
  width: 32px; height: 32px; border-radius: 6px; font-size: 15px; cursor: pointer;
}
.nav-btn:hover { border-color: #409eff; color: #409eff; }
.nav-btn:disabled { opacity: .4; cursor: not-allowed; }
.detail-layout { display: flex; gap: 0; align-items: stretch; position: relative; }
.detail-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.detail-body {
  flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain;
  background: #fff; border-radius: 10px; padding: 16px 18px;
  box-shadow: 0 1px 4px rgba(0,0,0,.06);
}
#chart-wrap { position: relative; }
.detail-chart { width: 100%; height: 600px; }
/* K线/分时视图：隐藏容器滚动条，图表填满剩余高度（加大显示区域） */
.detail-body.no-scroll { overflow: hidden; display: flex; flex-direction: column; }
.detail-body.no-scroll #chart-wrap { flex: 1; min-height: 0; }
.detail-body.no-scroll .detail-chart { height: 100%; min-height: 460px; max-height: 100%; }
/* 短视口（手机/平板/缩小窗口）：图表填满容器，不裁切指标区 */
@media (max-height: 700px) {
  .detail-body.no-scroll .detail-chart { min-height: 0; }
}

/* K线悬浮信息窗（替代原生tooltip：每秒刷新不抖动，可开关、可拖动） */
.kline-info-toggle { position:absolute; top:6px; right:10px; z-index:40; border:1px solid #dcdfe6; background:#fff; color:#606266; padding:3px 10px; border-radius:4px; font-size:12px; cursor:pointer; }
/* 指标tab行（成交量区与指标区之间） */
.indicator-tabs {
  position: absolute; left: 56px; right: 8px; z-index: 30;
  display: flex; align-items: center; gap: 4px;
  background: rgba(245, 247, 250, .94); border: 1px solid #ebeef5;
  border-radius: 6px; padding: 2px 6px; height: 24px; box-sizing: border-box;
}
.ind-period {
  border: 1px solid #dcdfe6; background: #fff; color: #606266;
  font-size: 11.5px; padding: 1px 4px; border-radius: 5px; outline: none; cursor: pointer;
}
.ind-period:focus { border-color: #409eff; }
:root[data-theme="dark"] .ind-period { background: #262933; color: #c9cdd6; border-color: #3a3e4a; }
.ind-tab {
  border: none; background: transparent; color: #606266;
  font-size: 11.5px; padding: 2px 10px; border-radius: 5px; cursor: pointer;
}
.ind-tab:hover { background: #ecf5ff; color: #409eff; }
.ind-tab.active { background: #409eff; color: #fff; }
.ind-tabs-spacer { flex: 1; }
.ind-settings {
  border: none; background: transparent; color: #909399;
  font-size: 14px; cursor: pointer; padding: 0 6px; border-radius: 5px; line-height: 1;
}
.ind-settings:hover { background: #ecf5ff; color: #409eff; }
:root[data-theme="dark"] .indicator-tabs { background: rgba(38, 41, 51, .94); border-color: #3a3e4a; }
:root[data-theme="dark"] .ind-tab { color: #c9cdd6; }
:root[data-theme="dark"] .ind-tab:hover { background: #333743; color: #79bbff; }
:root[data-theme="dark"] .ind-tab.active { background: #409eff; color: #fff; }
:root[data-theme="dark"] .ind-settings { color: #b9bdc7; }
:root[data-theme="dark"] .ind-settings:hover { background: #333743; color: #79bbff; }
.kline-info-toggle:hover { border-color:#409eff; color:#409eff; }
.kline-info-toggle.off { opacity:.6; }
.kline-info-panel { position:fixed; z-index:9999; width:118px; background:#fff; border:1px solid #e4e7ed; border-radius:8px; box-shadow:0 4px 16px rgba(0,0,0,.12); font-size:11px; line-height:1.55; color:#303133; overflow:hidden; user-select:none; }
.kip-head { display:flex; align-items:center; justify-content:space-between; padding:2px 6px; background:#f5f7fa; border-bottom:1px solid #ebeef5; font-size:10.5px; font-weight:600; cursor:move; }
.kip-close { cursor:pointer; color:#909399; padding:0 4px; font-size:14px; }
.kip-close:hover { color:#f56c6c; }
.kip-body { padding:5px 6px; max-height:46vh; overflow:auto; }
:root[data-theme="dark"] .kline-info-toggle { background:#262933; color:#c9cdd6; border-color:#3a3e4a; }
:root[data-theme="dark"] .kline-info-panel { background:#262933; border-color:#3a3e4a; color:#d5d7de; box-shadow:0 4px 16px rgba(0,0,0,.5); }
:root[data-theme="dark"] .kip-head { background:#2c303a; border-bottom-color:#3a3e4a; }

/* 侧面板 */
.side-panel {
  width: 215px; flex-shrink: 0; background: #fff; border-radius: 10px 0 0 10px;
  border-right: 1px solid #ebeef5; display: flex; flex-direction: column;
  overflow: hidden; transition: width .18s ease;
}
.side-panel.collapsed { width: 0 !important; border-right: none; }
.side-panel.resizing { transition: none; }
.side-panel.collapsed .side-title, .side-panel.collapsed .side-body { display: none; }
.side-toggle {
  position: absolute; left: 215px; top: 0; bottom: 0; z-index: 6;
  width: 9px; height: 100%; padding: 0; border: none; background: transparent;
  cursor: col-resize;
}
.side-toggle::before {
  content: ''; position: absolute; left: 4px; top: 0; bottom: 0; width: 1px; background: #e4e7ed;
}
.side-toggle:hover::before, .side-toggle:active::before { background: #409eff; width: 2px; left: 3.5px; }
.side-panel.collapsed ~ .side-toggle { left: 0; }
.side-knob {
  position: fixed;   /* 跟随侧栏可视区域居中，长列表滚动时始终可见 */
  width: 10px; height: 18px; border-radius: 4px; background: #fff;
  border: 1px solid #dcdfe6; box-shadow: 0 1px 3px rgba(0,0,0,.12);
  display: flex; align-items: center; justify-content: center;
  color: #909399; font-size: 8px; cursor: pointer; z-index: 7; user-select: none;
  padding: 0; margin: 0;
}
.side-knob:hover { color: #409eff; border-color: #409eff; box-shadow: 0 1px 6px rgba(64,158,255,.35); }
.side-title {
  display: flex; align-items: center; justify-content: space-between;
  padding: 10px 12px; border-bottom: 1px solid #ebeef5;
  font-size: 13px; color: #606266; font-weight: 600;
}
.side-body {
  overflow-y: auto; flex: 1; min-height: 0;
  scrollbar-width: thin; scrollbar-color: rgba(144,147,153,.5) transparent;
}
.side-body::-webkit-scrollbar { width: 5px; }
.side-body::-webkit-scrollbar-track { background: transparent; }
.side-body::-webkit-scrollbar-thumb { background: rgba(144,147,153,.45); border-radius: 3px; }
.side-body::-webkit-scrollbar-thumb:hover { background: rgba(144,147,153,.7); }
.side-item {
  display: flex; align-items: center; gap: 4px; padding: 8px 12px;
  cursor: pointer; font-size: 12px; border-left: 3px solid transparent;
}
.side-item:hover { background: #ecf5ff; }
.side-item.active { background: #ecf5ff; border-left-color: #409eff; }
.side-item .name { flex: 1 1 4em; min-width: 3.5em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; }
.side-item .price { flex: 0 1 3.5em; min-width: 0; text-align: right; font-size: 11.5px; overflow: hidden; white-space: nowrap; }
.side-item .pct { flex: 0 1 3.5em; min-width: 0; text-align: right; font-size: 11.5px; overflow: hidden; white-space: nowrap; }

/* 内容页签（K线/分时/AI/新闻） */
.content-tabs { display: flex; align-items: center; gap: 4px; border-bottom: 1px solid #ebeef5; margin-bottom: 12px; flex-wrap: wrap; }
.content-tab {
  border: none; background: none; padding: 8px 18px; font-size: 14px; color: #606266;
  cursor: pointer; border-bottom: 2px solid transparent;
}
.content-tab:hover { color: #409eff; }
.content-tab.active { color: #409eff; font-weight: 600; border-bottom-color: #409eff; }
.content-tab.soon { color: #c0c4cc; cursor: default; }
.content-tab.soon::after { content: '·待上线'; font-size: 10px; margin-left: 3px; }
#minline-date {
  padding: 2px 6px; border: 1px solid #dcdfe6; border-radius: 5px;
  font-size: 12px; color: #303133; background: #fff; margin-left: 8px;
}
#minline-hint { font-size: 11px; color: #c0c4cc; align-self: center; }
.btn-small { padding: 4px 12px; font-size: 12px; }

/* AI 分析面板 */
#ai-panel { padding: 4px 2px; font-size: 13.5px; }
.ai-loading, .ai-error { color: #909399; padding: 40px 0; text-align: center; }
.ai-error { color: #f56c6c; padding: 30px 0 12px; }

/* ---------- AI 思考动画（科技感等待页） ---------- */
.ai-thinking {
  position: relative; overflow: hidden; text-align: center;
  padding: 42px 16px 34px; border-radius: 10px;
  background:
    radial-gradient(ellipse 60% 50% at 50% 30%, rgba(64, 158, 255, .08), transparent 70%),
    repeating-linear-gradient(0deg, rgba(64, 158, 255, .045) 0 1px, transparent 1px 26px),
    repeating-linear-gradient(90deg, rgba(64, 158, 255, .045) 0 1px, transparent 1px 26px),
    linear-gradient(180deg, #0d1420, #101a2b 55%, #0d1420);
  color: #cfe6ff;
}
.ai-scanline {
  position: absolute; left: 0; right: 0; top: -30%; height: 26%;
  background: linear-gradient(180deg, transparent, rgba(64, 200, 255, .10), transparent);
  animation: ai-scan 3.2s linear infinite; pointer-events: none;
}
@keyframes ai-scan { 0% { top: -30%; } 100% { top: 110%; } }

.ai-core { position: relative; width: 150px; height: 150px; margin: 6px auto 18px; }
.ai-orb {
  position: absolute; inset: 44px; border-radius: 50%;
  background: radial-gradient(circle at 35% 30%, #9fdcff 0%, #40b4ff 38%, #1a5cff 72%, #0a2a6e 100%);
  box-shadow: 0 0 26px rgba(64, 180, 255, .75), 0 0 70px rgba(64, 140, 255, .4),
              inset 0 0 18px rgba(255, 255, 255, .35);
  animation: ai-breathe 2.4s ease-in-out infinite;
}
@keyframes ai-breathe {
  0%, 100% { transform: scale(1); filter: brightness(1); }
  50% { transform: scale(1.09); filter: brightness(1.22); }
}
.ai-ring { position: absolute; border-radius: 50%; border-style: solid; }
.ai-ring.r1 {
  inset: 22px; border-width: 1.5px; border-color: rgba(80, 190, 255, .55) transparent rgba(80, 190, 255, .55) transparent;
  animation: ai-spin 3.2s linear infinite;
}
.ai-ring.r2 {
  inset: 8px; border-width: 1px; border-color: transparent rgba(64, 158, 255, .4) transparent rgba(64, 158, 255, .4);
  animation: ai-spin 5.2s linear infinite reverse;
}
.ai-ring.r3 {
  inset: 34px; border-width: 1px; border-style: dashed; border-color: rgba(140, 220, 255, .5);
  animation: ai-spin 9s linear infinite;
}
@keyframes ai-spin { to { transform: rotate(360deg); } }
.ai-pulse {
  position: absolute; inset: 30px; border-radius: 50%;
  border: 1.5px solid rgba(80, 200, 255, .5);
  animation: ai-sonar 2.4s ease-out infinite;
}
.ai-pulse.p2 { animation-delay: 1.2s; }
@keyframes ai-sonar {
  0% { transform: scale(.72); opacity: .9; }
  100% { transform: scale(1.28); opacity: 0; }
}

.ai-stage { font-size: 15px; font-weight: 600; letter-spacing: 1px; color: #8fd4ff; min-height: 22px; }
#ai-stage-text { transition: opacity .18s; }
#ai-stage-text.fade { opacity: 0; }
.ai-dots i { font-style: normal; animation: ai-dot 1.4s infinite; }
.ai-dots i:nth-child(2) { animation-delay: .22s; }
.ai-dots i:nth-child(3) { animation-delay: .44s; }
@keyframes ai-dot { 0%, 60%, 100% { opacity: .15; } 30% { opacity: 1; } }
.ai-elapsed { margin-top: 6px; font-size: 12px; color: rgba(160, 210, 255, .6); font-variant-numeric: tabular-nums; }

.ai-progress {
  width: 240px; height: 3px; margin: 16px auto 0; border-radius: 2px;
  background: rgba(80, 160, 255, .15); overflow: hidden;
}
.ai-progress-glow {
  width: 40%; height: 100%; border-radius: 2px;
  background: linear-gradient(90deg, transparent, #4fc3ff, transparent);
  animation: ai-slide 1.6s ease-in-out infinite;
}
@keyframes ai-slide { 0% { transform: translateX(-100%); } 100% { transform: translateX(350%); } }

.ai-chips { margin-top: 20px; display: flex; flex-wrap: wrap; justify-content: center; gap: 7px; }
.ai-chip {
  font-size: 11px; padding: 3px 10px; border-radius: 20px; letter-spacing: .5px;
  color: rgba(150, 205, 255, .45); border: 1px solid rgba(80, 170, 255, .18);
  background: rgba(64, 158, 255, .05); transition: all .3s;
}
.ai-chip.on {
  color: #dff2ff; border-color: rgba(110, 210, 255, .8);
  background: rgba(64, 170, 255, .22); box-shadow: 0 0 12px rgba(64, 180, 255, .45);
}
.ai-think-hint { margin-top: 18px; font-size: 12px; color: rgba(140, 190, 235, .45); letter-spacing: .5px; }
.ai-head { display: flex; align-items: center; gap: 12px; margin-bottom: 10px; flex-wrap: wrap; }
.ai-score {
  font-size: 26px; font-weight: 700; min-width: 58px; text-align: center;
  border-radius: 10px; padding: 4px 8px; background: #f4f4f5;
}
.ai-score.up { color: #e64545; background: #fef0f0; }
.ai-score.mid { color: #e6a23c; background: #fdf6ec; }
.ai-score.down { color: #1aad19; background: #f0f9eb; }
.ai-signal { font-size: 16px; font-weight: 600; }
.ai-signal.up { color: #e64545; } .ai-signal.mid { color: #e6a23c; } .ai-signal.down { color: #1aad19; }
.ai-trend-h { color: #409eff; margin-right: 6px; }
.ai-lhb { border-left: 3px solid #e6a23c; margin-bottom: 10px; }
.ai-lhb-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.ai-lhb-head h4 { font-size: 15px; font-weight: 700; color: #303133; margin: 0; }
.ai-lhb-date {
  font-size: 11px; color: #fff; background: #e6a23c; border-radius: 10px;
  padding: 1px 9px; font-weight: 600; letter-spacing: 0.5px;
}
.ai-lhb-date.hist { background: #909399; }
.ai-lhb-facts {
  font-size: 12px; color: #606266; background: #fafafa;
  padding: 8px 10px; border-radius: 6px; margin-bottom: 8px; line-height: 1.7;
}
.ai-lhb-facts > div { margin-bottom: 6px; }
.ai-lhb-facts > div:last-child { margin-bottom: 0; }
.ai-lhb-label { display: inline-block; color: #909399; font-size: 11px; margin-right: 6px; flex-shrink: 0; }
.ai-lhb-reason { font-size: 13px; color: #303133; line-height: 1.6; }
.ai-lhb-reason span:last-child { color: #303133; font-weight: 500; }
.ai-lhb-sum {
  display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 12px;
  background: #fff; border: 1px solid #ebeef5; border-radius: 6px;
  padding: 7px 10px; margin-bottom: 8px;
}
.ai-lhb-net { font-size: 20px; font-weight: 800; line-height: 1.2; }
.ai-lhb-net.up { color: #e64545; }
.ai-lhb-net.down { color: #1aad19; }
.ai-lhb-total { font-size: 12px; color: #909399; }
.ai-lhb-sides { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
@media (max-width: 768px) { .ai-lhb-sides { grid-template-columns: 1fr; } }
.ai-lhb-side { background: #fff; border: 1px solid #ebeef5; border-radius: 6px; padding: 7px 9px; min-width: 0; }
.ai-lhb-side-head { font-size: 12px; font-weight: 700; margin-bottom: 5px; padding-left: 8px; border-left: 3px solid; }
.ai-lhb-side-head.buy { color: #e64545; border-color: #e64545; }
.ai-lhb-side-head.sell { color: #1aad19; border-color: #1aad19; }
.ai-lhb-seats { display: flex; flex-wrap: wrap; gap: 4px 8px; }
.ai-lhb-seat {
  display: inline-flex; align-items: center; gap: 6px; max-width: 100%;
  font-size: 12px; color: #606266; background: #f5f7fa; overflow-wrap: anywhere;
  border-radius: 4px; padding: 2px 7px; line-height: 1.6;
}
.ai-lhb-seat b { font-weight: 700; white-space: nowrap; }
.ai-lhb-seat.buy b { color: #e64545; }
.ai-lhb-seat.sell b { color: #1aad19; }
.ai-lhb-empty { color: #c0c4cc; font-size: 12px; padding: 2px 0; }
.ai-lhb-analysis {
  display: flex; align-items: flex-start; gap: 8px;
  font-size: 13px; color: #303133; line-height: 1.6;
}
.ai-lhb-analysis p { margin: 0; flex: 1; }
/* 大盘市道与仓位参考 */
.ai-mkt { border-left: 3px solid #909399; }
.ai-mkt-up { border-left-color: #e64545; }
.ai-mkt-down { border-left-color: #1aad19; }
.ai-lhb-analysis .ai-lhb-label {
  color: #b88230; background: #fdf6ec; border: 1px solid #f5dab1;
  border-radius: 10px; padding: 1px 8px; margin: 2px 0 0; white-space: nowrap;
}
.ai-diff {
  display: inline-block; font-size: 11px; color: #b88230; background: #fdf6ec;
  border: 1px solid #f5dab1; border-radius: 10px; padding: 1px 8px;
  cursor: help; white-space: nowrap; vertical-align: middle;
}
.ai-meta { color: #909399; font-size: 12px; margin-left: auto; }
.ai-conclusion {
  font-size: 15px; font-weight: 600; padding: 12px 14px; margin-bottom: 12px;
  background: #f8fafc; border-left: 3px solid #409eff; border-radius: 6px;
}
.ai-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
@media (max-width: 768px) { .ai-grid { grid-template-columns: 1fr; } }
.ai-block {
  background: #f8fafc; border-radius: 8px; padding: 10px 14px; margin-bottom: 12px;
}
.ai-block h4 { font-size: 13px; color: #909399; font-weight: 500; margin-bottom: 6px; }
.ai-block p { line-height: 1.6; }
.ai-block ul { list-style: none; }
.ai-block li { padding: 3px 0 3px 14px; position: relative; line-height: 1.5; }
.ai-block li::before { content: '·'; position: absolute; left: 2px; font-weight: 700; }
.ai-block li.down::before { content: '⚠'; font-size: 11px; }
.ai-block li.up::before { content: '✦'; font-size: 11px; }
.ai-plan { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 20px; }
@media (max-width: 768px) { .ai-plan { grid-template-columns: 1fr; } }
/* AI 涨跌停专项卡：概率大数字 + 数据项 */
.ai-limit-body { display: flex; gap: 18px; align-items: flex-start; flex-wrap: wrap; }
.ai-limit-prob {
  text-align: center; padding: 8px 16px; border-radius: 8px;
  background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.08); flex-shrink: 0;
}
.ai-limit-prob b { font-size: 26px; font-variant-numeric: tabular-nums; }
.ai-limit-prob b i { font-size: 13px; font-style: normal; margin-left: 1px; }
.ai-limit-prob span { display: block; font-size: 11.5px; color: #909399; margin-top: 2px; white-space: nowrap; }
.ai-limit-items { flex: 1; min-width: 220px; }
.ai-limit-badge { font-size: 11px; padding: 1px 8px; border-radius: 8px; margin-left: 8px; font-weight: 400; }
.ai-limit-zt .ai-limit-badge { background: #fef0f0; color: #e64545; }
.ai-limit-dt .ai-limit-badge { background: #f0f9eb; color: #1aad19; }
.ai-limit-zb .ai-limit-badge { background: #fdf6ec; color: #e6a23c; }
.ai-limit-zt .ai-limit-prob b { color: #e64545; }
.ai-limit-dt .ai-limit-prob b { color: #1aad19; }
.ai-limit-zb .ai-limit-prob b { color: #e6a23c; }
.ai-limit-comment { margin-top: 8px; font-size: 12.5px; color: #606266; }
.ai-fin { grid-template-columns: repeat(4, 1fr); }
@media (max-width: 768px) { .ai-fin { grid-template-columns: 1fr 1fr; } }
.ai-kv { display: flex; gap: 8px; padding: 4px 0; }
.ai-k { color: #909399; min-width: 64px; }
.ai-v { font-weight: 600; }
.ai-ind { color: #c0c4cc; font-size: 12px; padding-top: 6px; border-top: 1px solid #ebeef5; }
.ai-anchor { cursor: help; border-bottom: 1px dotted #c0c4cc; }
.ai-degrade {
  background: #fdf6ec; color: #b88230; border: 1px solid #faecd8;
  padding: 8px 12px; border-radius: 6px; font-size: 12.5px; margin-bottom: 10px; line-height: 1.6;
}
.app-version { color: #c0c4cc; font-size: 12px; margin-left: 8px; }

.badge-oneword {
  display: inline-block; font-size: 10px; padding: 0 4px; margin-left: 4px;
  background: #fef0f0; color: #e64545; border-radius: 4px; vertical-align: 1px;
}

/* 主力资金迷你柱 */
.flow-bars { display: inline-flex; align-items: flex-end; gap: 3px; margin-left: 6px; vertical-align: -3px; }
.flow-bar { width: 7px; border-radius: 2px; display: inline-block; }
.flow-bar.up { background: #e64545; }
.flow-bar.down { background: #1aad19; }

/* 新闻公告面板 */
.news-item { padding: 10px 4px; border-bottom: 1px solid #f2f6fc; }
.news-item:last-child { border-bottom: none; }
.news-head { display: flex; align-items: baseline; gap: 8px; }
.news-badge {
  flex-shrink: 0; font-size: 11px; padding: 1px 7px; border-radius: 4px;
}
.news-badge.notice { background: #ecf5ff; color: #409eff; }
.news-badge.info { background: #f4f4f5; color: #909399; }
.news-title { flex: 1; color: #303133; text-decoration: none; font-weight: 500; line-height: 1.5; }
.news-title:hover { color: #409eff; text-decoration: underline; }
.news-time { flex-shrink: 0; color: #c0c4cc; font-size: 12px; }
.news-summary { color: #909399; font-size: 12.5px; margin-top: 4px; line-height: 1.55; padding-left: 42px; }

/* ⋮ 操作菜单与置顶 */
.op-menu {
  position: absolute; z-index: 120; background: #fff; border-radius: 8px;
  box-shadow: 0 4px 16px rgba(0,0,0,.16); padding: 4px 0; min-width: 130px;
}
.op-menu.hidden { display: none; }
.op-submenu { min-width: 160px; }
.op-item {
  display: block; width: 100%; text-align: left; border: none; background: none;
  padding: 8px 14px; font-size: 13px; color: #303133; cursor: pointer;
}
.op-item:hover { background: #ecf5ff; color: #409eff; }
.op-subtitle { padding: 6px 14px 4px; font-size: 12px; color: #909399; }
.op-check { display: flex; align-items: center; gap: 6px; padding: 7px 14px; font-size: 13px; color: #303133; cursor: pointer; }
.op-check:hover { background: #ecf5ff; }
.op-sub-actions { display: flex; border-top: 1px solid #f2f6fc; margin-top: 4px; }
.op-sub-actions .op-item { flex: 1; text-align: center; }
.op-confirm { color: #409eff; font-weight: 600; }
.op-dot {
  border: none; background: none; font-size: 16px; color: #909399; cursor: pointer;
  padding: 5px 9px; line-height: 1; border-radius: 5px;
}
.op-dot:hover { color: #409eff; background: #ecf5ff; }


/* 分组选择弹层 */
.grp-pop {
  position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%);
  z-index: 130; background: #fff; border-radius: 10px; padding: 18px 22px;
  box-shadow: 0 8px 30px rgba(0,0,0,.2); min-width: 240px;
}
.grp-pop.hidden { display: none; }
.grp-pop-title { font-size: 14px; font-weight: 600; margin-bottom: 12px; }
.grp-pop .checkbox-label { display: flex; margin-bottom: 10px; }
.grp-pop-actions { display: flex; gap: 10px; justify-content: flex-end; margin-top: 14px; }

/* 系统设置页 */
.settings-grid {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 12px;
}
.settings-card {
  background: #fff; border-radius: 10px; padding: 16px 18px;
  box-shadow: 0 1px 4px rgba(0,0,0,.06);
}
.settings-note {
  font-size: 12px; color: #909399; line-height: 1.7; margin-bottom: 10px;
  padding: 8px 10px; background: #f7f8fa; border-radius: 6px;
}
.settings-card h3 { font-size: 14px; margin-bottom: 12px; }
/* 卡内分组小标题（推送=渠道/计划，大模型=主/备用） */
.settings-card h4 {
  font-size: 12.5px; color: #909399; font-weight: 500; margin: 14px 0 10px;
  padding-top: 12px; border-top: 1px dashed #ebeef5;
}
.settings-card h3 + .settings-note + h4, .settings-card h3 + h4 { margin-top: 0; padding-top: 0; border-top: none; }
.settings-card label { display: block; font-size: 13px; color: #606266; margin-bottom: 10px; }
.settings-card input[type=text], .settings-card input[type=number],
.settings-card input[type=password] {
  width: 100%; margin-top: 4px; padding: 6px 10px; border: 1px solid #dcdfe6;
  border-radius: 5px; font-size: 13px; color: #303133; outline: none;
}
.settings-card input:focus { border-color: #409eff; }
/* 界面颜色取色器：行内小色块 */
.settings-card .color-label { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.settings-card input[type=color] {
  width: 52px; height: 28px; padding: 2px; border: 1px solid #dcdfe6;
  border-radius: 5px; background: #fff; cursor: pointer;
}
.settings-actions { margin-top: 14px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
/* 卡片内按钮行（保存/测试等收进各设置模块） */
.settings-card .card-actions { display: flex; gap: 8px; margin-top: 4px; flex-wrap: wrap; }

/* 详情页移动端 */
@media (max-width: 768px) {
  .detail-chart { height: 380px; }
  .detail-body.no-scroll .detail-chart { min-height: 0; height: 100%; }
  .detail-header { gap: 6px; padding: 6px 10px; }
  .detail-nav { margin-left: 0; width: 100%; justify-content: flex-end; }
  .detail-nav { gap: 3px; }
  .detail-nav .btn { padding: 4px 8px; font-size: 12px; }
  .detail-title { font-size: 15px; min-width: 0; }
  .detail-quote { gap: 5px; font-size: 12px; }
  .side-panel { display: none; }
  .side-toggle { display: none; }
  /* 指标tab行压缩，避免小屏挡住指标区 */
  .indicator-tabs { height: 18px; padding: 1px 4px; border-radius: 4px; }
  .indicator-tabs .ind-tab { font-size: 10.5px; padding: 0 5px; }
  .indicator-tabs .ind-period { font-size: 10.5px; padding: 0 3px; }
}

/* 搜索框 */
.search-wrap { position: relative; margin-left: auto; }
#search-box {
  width: 130px; padding: 7px 10px; border: 1px solid #dcdfe6; border-radius: 6px;
  font-size: 13px; color: #303133; outline: none; transition: border-color .15s;
}
#search-box:focus { border-color: #409eff; }
.search-drop {
  position: absolute; top: 36px; right: 0; width: 340px; max-height: 360px;
  overflow-y: auto; background: #fff; border-radius: 8px; z-index: 60;
  box-shadow: 0 4px 16px rgba(0,0,0,.14); padding: 4px 0;
}
.search-drop.hidden { display: none; }
.search-item {
  display: flex; align-items: center; gap: 8px; padding: 8px 12px;
  cursor: pointer; font-size: 13px;
}
.search-item:hover { background: #ecf5ff; }
.search-item .code { width: 62px; }
.search-item .name { font-weight: 500; }
.search-item .ind { color: #909399; font-size: 12px; flex: 1; overflow: hidden; text-overflow: ellipsis; }
.search-item .price { color: #606266; font-family: Consolas, monospace; }
.search-empty { padding: 14px; text-align: center; color: #909399; font-size: 13px; }
.search-item .btn-add {
  border: 1px solid #409eff; background: #fff; color: #409eff; font-size: 12px;
  border-radius: 5px; padding: 2px 8px; cursor: pointer; white-space: nowrap;
}
.search-item .btn-add:hover { background: #409eff; color: #fff; }
.search-item .btn-add:disabled { border-color: #c0c4cc; color: #c0c4cc; cursor: default; background: #fff; }

/* 标签页：左固定段 + 中间折叠区 + 右固定区，单行不换行 */
.tabs { display: flex; gap: 4px; margin-bottom: 10px; align-items: center; flex-wrap: nowrap; position: relative; }
/* 标签主区（固定段1+自定义组）：固定标签不收缩不换行，溢出由 JS 折叠进「⋯」菜单 */
.tabs-main { display: flex; flex-wrap: nowrap; align-items: center; gap: 2px; overflow: hidden; min-width: 0; flex-shrink: 1; }
.tabs-main > .tab { flex-shrink: 0; white-space: nowrap; }
/* 右固定区：图标+快速刷新+搜索始终靠右，位置不随分组变化 */
.tabs-right { margin-left: auto; display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.tabs-right .tab { flex-shrink: 0; white-space: nowrap; }
.tab {
  border: none; background: none; padding: 8px 18px; font-size: 14px; color: #606266;
  cursor: pointer; border-bottom: 2px solid transparent; transition: all .15s; white-space: nowrap;
}
.tab:focus { outline: none; }   /* 点击后不残留浏览器焦点环 */
.tabs-icons { display: flex; align-items: center; gap: 2px; flex-shrink: 0; }
.tabs-icons .tab { padding: 8px 6px; }   /* 三个图标紧凑排列 */
.notify-dot { display: inline-block; width: 8px; height: 8px; background: #f56c6c; border-radius: 50%; margin-left: 1px; vertical-align: super; }
.notify-dot.hidden { display: none; }
.tab:hover { color: #409eff; }
.tab.active { color: #409eff; font-weight: 600; border-bottom-color: #409eff; }
.tabs-custom {
  display: flex; align-items: center; gap: 2px; flex: 0 1 auto; min-width: 40px;
  padding: 0 2px;   /* 留出插槽：首/尾标签的插入线(负向box-shadow)不会被滚动容器裁掉 */
  overflow-x: auto; scrollbar-width: none;
}
.tabs-custom::-webkit-scrollbar { display: none; }
.tabs-custom .tab-group { flex-shrink: 0; }
/* 两端渐隐：还有更多内容时提示可滚动 */
.tabs-custom.edge-left {
  -webkit-mask-image: linear-gradient(to right, transparent 0, #000 14px);
  mask-image: linear-gradient(to right, transparent 0, #000 14px);
}
.tabs-custom.edge-right {
  -webkit-mask-image: linear-gradient(to left, transparent 0, #000 14px);
  mask-image: linear-gradient(to left, transparent 0, #000 14px);
}
.tabs-custom.edge-left.edge-right {
  -webkit-mask-image: linear-gradient(to right, transparent 0, #000 14px, #000 calc(100% - 14px), transparent 100%);
  mask-image: linear-gradient(to right, transparent 0, #000 14px, #000 calc(100% - 14px), transparent 100%);
}
.tab-group { padding: 8px 10px; flex-shrink: 0; }
.tab-group .tab-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 5px; vertical-align: middle; }
.tab-add, .tab-more { color: #909399; padding: 8px 10px; flex-shrink: 0; }
.tab-add:hover, .tab-more:hover { color: #409eff; }
.tab.dragging { opacity: .5; }
.tab.drop-before { box-shadow: -2px 0 0 #409eff; }
.tab.drop-after { box-shadow: 2px 0 0 #409eff; }
.tab-drag-ghost { position: fixed; z-index: 9999; pointer-events: none; background: #fff; border: 1px solid #dcdfe6; border-radius: 6px; box-shadow: 0 4px 14px rgba(0,0,0,.14); padding: 6px 10px; font-size: 13px; opacity: .9; white-space: nowrap; display: flex; align-items: center; gap: 5px; }
.tab-menu-pop { position: fixed; z-index: 200; min-width: 140px; background: #fff; border: 1px solid #dcdfe6; border-radius: 8px; box-shadow: 0 6px 18px rgba(0,0,0,.12); padding: 6px; display: flex; flex-direction: column; }
.tab-menu-pop.hidden { display: none; }
.tab-menu-pop button { border: none; background: none; text-align: left; padding: 8px 12px; font-size: 13px; color: #303133; cursor: pointer; border-radius: 6px; }
.tab-menu-pop button:hover { background: #f5f7fa; color: #409eff; }
.tabs-more-pop {
  position: absolute; top: 100%; right: 0; z-index: 100; min-width: 150px;
  background: #fff; border: 1px solid #dcdfe6; border-radius: 8px;
  box-shadow: 0 6px 18px rgba(0,0,0,.12); padding: 6px;
  display: flex; flex-direction: column;
}
.tabs-more-pop.hidden { display: none; }
.tabs-more-pop .tab { text-align: left; padding: 8px 12px; border-bottom: none; }
.grp-colors { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 8px; }
.grp-color { width: 22px; height: 22px; border-radius: 50%; border: 2px solid transparent; cursor: pointer; }
.grp-color.on { border-color: #303133; }
.gm-row { display: flex; align-items: center; gap: 8px; padding: 8px 4px; border-bottom: 1px solid #f0f2f5; }
.gm-row:last-child { border-bottom: none; }
.gm-swatch { width: 16px; height: 16px; border-radius: 4px; flex-shrink: 0; }
.gm-name { font-weight: 600; }
.gm-count { color: #909399; font-size: 12px; margin-left: auto; white-space: nowrap; }
.gm-actions { display: flex; gap: 4px; flex-shrink: 0; }
.gm-name-input { flex: 1; min-width: 80px; }
.gm-color-input { width: 44px; height: 28px; padding: 0; }
.badge {
  display: inline-block; min-width: 18px; padding: 0 5px; margin-left: 4px;
  background: #409eff; color: #fff; border-radius: 9px; font-size: 11px; line-height: 18px;
}
.badge.hidden { display: none; }

/* 自选/筛选操作区 */
.sel-count { color: #409eff; font-size: 12px; }
.hint { color: #c0c4cc; font-size: 12px; }
.btn-link {
  border: none; background: none; color: #f56c6c; font-size: 13px; cursor: pointer; padding: 0;
}
.btn-link:hover { text-decoration: underline; }

/* 个股详情tab：分区卡片排版（后续内容可继续加 section） */
.stock-info { background: #f8fafc; border-radius: 10px; padding: 14px 16px; }
.info-section { margin-bottom: 14px; }
.info-section:last-child { margin-bottom: 0; }
.info-section h4 {
  margin: 0 0 8px; font-size: 13px; color: #606266; font-weight: 600;
  display: flex; align-items: center; gap: 6px;
}
.info-section h4::before { content: ''; width: 3px; height: 12px; background: #409eff; border-radius: 2px; }
.info-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 8px 12px; }
.info-item {
  display: flex; align-items: baseline; gap: 6px; min-width: 0;
  background: #fff; border: 1px solid #ebeef5; border-radius: 8px; padding: 8px 10px;
}
.info-item.wide { grid-column: 1 / -1; white-space: normal; }
.info-item.no-wrap .info-value { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.info-label { color: #909399; font-size: 12px; flex-shrink: 0; }
.info-value { color: #303133; font-weight: 600; font-size: 13px; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.info-loading { color: #c0c4cc; font-size: 12.5px; padding: 12px; }
:root[data-theme="dark"] .info-item { background: #262933; border-color: #3a3e4a; }
:root[data-theme="dark"] .info-label { color: #b9bdc7; }
:root[data-theme="dark"] .info-value { color: #d5d7de; }
:root[data-theme="dark"] .info-section h4 { color: #c9cdd6; }
.pattern-pill {
  display: inline-block; padding: 2px 9px; border-radius: 10px; font-size: 12px;
  font-weight: 500; margin: 2px 5px 2px 0; line-height: 1.5; vertical-align: middle;
}
.pattern-pill.bottom { background: rgba(26, 173, 25, .12); color: #1aad19; }
.pattern-pill.top { background: rgba(230, 69, 69, .12); color: #e64545; }
.pattern-pill.top.confirmed { background: rgba(230, 69, 69, .2); color: #e64545; font-weight: 600; }
.pattern-pill.consol { background: rgba(64, 158, 255, .12); color: #409eff; }
.pattern-pill.consol.up { background: rgba(26, 173, 25, .12); color: #1aad19; }
.pattern-pill.consol.down { background: rgba(230, 69, 69, .12); color: #e64545; }
.perf-badge { display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 11.5px; font-weight: 600; white-space: nowrap; }
.perf-badge.strong { background: rgba(230, 69, 69, .14); color: #e64545; }
.perf-badge.resume { background: rgba(230, 162, 60, .16); color: #e6a23c; }
.perf-badge.observe { background: rgba(144, 147, 153, .14); color: #909399; }
.perf-badge.weak { background: rgba(26, 173, 25, .14); color: #1aad19; }
.perf-badge.fail { background: rgba(96, 100, 110, .16); color: #6a6f7c; }

/* 二次筛选徽标悬浮卡片：标签与日期分行显示，颜色与徽标一致 */
.perf-tip {
  position: fixed; display: none; z-index: 9999;
  min-width: 190px; max-width: 330px;
  padding: 10px 12px; border-radius: 8px;
  background: #fff; border: 1px solid #dcdfe6;
  box-shadow: 0 6px 20px rgba(0,0,0,.12);
  font-size: 12px; line-height: 1.6;
  pointer-events: none;
}
.perf-tip-head {
  display: flex; align-items: center; gap: 8px;
  padding-bottom: 6px; margin-bottom: 6px;
  border-bottom: 1px solid #ebeef5;
}
.perf-tip-since { color: #909399; }
.perf-tip-label { color: #606266; font-weight: 600; margin: 4px 0; }
.perf-tip-grid {
  display: grid;
  grid-template-columns: 58px minmax(0, 1fr) 64px;
  gap: 0 12px;
  align-items: center;
}
.perf-tip-grid-head { display: contents; font-size: 11px; color: #909399; }
.perf-tip-grid-head span {
  padding: 2px 0 4px;
  border-bottom: 1px solid #ebeef5;
  white-space: nowrap;
  text-align: center;
}
.perf-tip-row { display: contents; }
.perf-tip-grid > .perf-tip-row > * {
  padding: 3px 0;
  border-bottom: 1px solid #f2f3f5;
  white-space: nowrap;
  text-align: center;
}
.perf-tip-row .perf-badge { font-size: 11px; padding: 1px 7px; justify-self: center; }
.perf-tip-date { color: #909399; font-size: 11.5px; }
.perf-tip-price {
  text-align: center;
  font-variant-numeric: tabular-nums;
  color: #303133;
}
.perf-tip-empty { grid-column: 1 / -1; color: #909399; padding: 3px 0; }
.perf-tip-reason {
  margin-top: 6px; padding-top: 6px;
  border-top: 1px solid #ebeef5; color: #606266;
}
.perf-tip-meta { margin-top: 4px; color: #909399; font-size: 11.5px; }
.ai-pat-reason {
  margin: 8px 0 0; padding-top: 8px; border-top: 1px dashed #dcdfe6;
  font-size: 12.5px; line-height: 1.8; color: #606266;
}
.ai-pat-reason b { color: #303133; margin-right: 6px; }
:root[data-theme="dark"] .pattern-pill.bottom { color: #6ee07a; background: rgba(38, 120, 48, .28); }
:root[data-theme="dark"] .pattern-pill.top, :root[data-theme="dark"] .pattern-pill.top.confirmed { color: #f58a8a; background: rgba(150, 45, 45, .3); }
:root[data-theme="dark"] .pattern-pill.consol { color: #79bbff; background: rgba(40, 80, 140, .3); }
:root[data-theme="dark"] .pattern-pill.consol.up { color: #6ee07a; background: rgba(38, 120, 48, .28); }
:root[data-theme="dark"] .pattern-pill.consol.down { color: #f58a8a; background: rgba(150, 45, 45, .3); }
:root[data-theme="dark"] .perf-badge.strong { background: rgba(150, 45, 45, .3); color: #f58a8a; }
:root[data-theme="dark"] .perf-badge.resume { background: rgba(150, 110, 40, .3); color: #e6b45c; }
:root[data-theme="dark"] .perf-badge.observe { background: rgba(120, 124, 132, .22); color: #9aa0ae; }
:root[data-theme="dark"] .perf-badge.weak { background: rgba(38, 120, 48, .28); color: #6ee07a; }
:root[data-theme="dark"] .perf-badge.fail { background: rgba(80, 84, 92, .3); color: #8b90a0; }

:root[data-theme="dark"] .perf-tip { background: #262933; border-color: #3a3e4a; color: #d5d7de; box-shadow: 0 6px 20px rgba(0,0,0,.5); }
:root[data-theme="dark"] .perf-tip-head { border-bottom-color: #3a3e4a; }
:root[data-theme="dark"] .perf-tip-reason { border-top-color: #3a3e4a; color: #b9bdc7; }
:root[data-theme="dark"] .perf-tip-since,
:root[data-theme="dark"] .perf-tip-date,
:root[data-theme="dark"] .perf-tip-meta,
:root[data-theme="dark"] .perf-tip-empty { color: #9aa0ae; }
:root[data-theme="dark"] .perf-tip-price { color: #d5d7de; }
:root[data-theme="dark"] .perf-tip-grid-head span,
:root[data-theme="dark"] .perf-tip-grid > .perf-tip-row > * { border-bottom-color: #2f323b; }
:root[data-theme="dark"] .perf-tip-label { color: #c9cdd6; }
:root[data-theme="dark"] .ai-pat-reason { border-top-color: #3a3e4a; color: #b9bdc7; }
:root[data-theme="dark"] .ai-pat-reason b { color: #d5d7de; }

/* 头部大盘指数条 */
.index-row { display: flex; flex-wrap: nowrap; align-items: flex-end; gap: 4px 22px; padding-top: 6px; overflow-x: auto; }
.idx-card { display: inline-flex; align-items: center; gap: 8px; font-size: 12.5px; }
.idx-text { display: inline-flex; flex-direction: column; align-items: flex-start; line-height: 1.35; }
.idx-name { color: #606266; }
.idx-quote { font-weight: 600; font-variant-numeric: tabular-nums; }
.idx-quote.up { color: #e64545; }
.idx-quote.down { color: #1aad19; }
.idx-bars { display: inline-flex; align-items: flex-end; gap: 2px; height: 24px; }
.idx-bar { width: 6px; border-radius: 2px; background: #c0c4cc; }
.idx-bar.up { background: #e64545; }
.idx-bar.down { background: #1aad19; }
.idx-bar.today { box-shadow: inset 0 0 0 1px #606266; }
.idx-dot { display: inline-block; width: 6px; height: 6px; border-radius: 50%; margin-left: 4px; vertical-align: 1px; }
.idx-dot.up { background: #e64545; }
.idx-dot.down { background: #1aad19; }
.idx-dot.na { background: #c0c4cc; }
.idx-badge {
  font-size: 11.5px; font-weight: 600; padding: 2px 8px; border-radius: 10px;
  color: #909399; background: #f0f2f5; border: 1px solid #e4e7ed; white-space: nowrap;
  margin-left: 6px; font-variant-numeric: tabular-nums;
}
.idx-badge.up { color: #e64545; background: #fef0f0; border-color: #f5c2c2; }
.idx-badge.down { color: #1aad19; background: #f0faf0; border-color: #bfe6bf; }
:root[data-theme="dark"] .idx-badge { color: #b9bdc7; background: #262933; border-color: #3a3e4a; }
:root[data-theme="dark"] .idx-badge.up { color: #f87171; background: #3a2426; border-color: #6d3a3a; }
:root[data-theme="dark"] .idx-badge.down { color: #4ade80; background: #1f3323; border-color: #2f5a3a; }
.idx-clock { margin-left: auto; color: #909399; font-size: 12.5px; font-variant-numeric: tabular-nums; }
.title-row .idx-clock { margin-left: auto; margin-right: 12px; }
.title-row .idx-clock + #account-area { margin-left: 0; }
.idx-toggle { display: inline-flex; border: 1px solid #dcdfe6; border-radius: 5px; overflow: hidden; }
.idx-toggle button {
  border: none; background: #fff; color: #909399; font-size: 11px;
  padding: 2px 8px; cursor: pointer;
}
.idx-toggle button.on { background: #409eff; color: #fff; }

/* 通知铃铛 */
.bell-wrap { position: relative; }
.bell-btn {
  position: relative; border: none; background: none; font-size: 18px;
  cursor: pointer; padding: 4px 6px; border-radius: 6px;
}
.bell-btn:hover { background: #ecf5ff; }
.bell-badge {
  position: absolute; top: -2px; right: -4px; min-width: 16px; height: 16px;
  background: #e64545; color: #fff; font-size: 10px; line-height: 16px;
  border-radius: 8px; text-align: center; padding: 0 4px;
}
.bell-drop {
  position: absolute; right: 0; top: 34px; z-index: 90; width: 340px; max-height: 480px;
  overflow-y: auto; background: #fff; border-radius: 10px;
  box-shadow: 0 6px 24px rgba(0,0,0,.16); padding: 10px 12px;
}
.bell-head { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 6px; }
.bell-head a { color: #409eff; font-size: 12px; text-decoration: none; cursor: pointer; }
.bell-monitor { display: flex; align-items: center; gap: 6px; font-size: 12px; color: #606266; padding: 4px 0 8px; border-bottom: 1px solid #ebeef5; cursor: pointer; }
.bell-empty { color: #c0c4cc; font-size: 12.5px; text-align: center; padding: 18px 0; }
.bell-item { padding: 8px 4px; border-bottom: 1px solid #f2f6fc; cursor: pointer; }
.bell-item:hover { background: #f8fafc; }
.bell-item.unread .bell-title { font-weight: 700; }
.bell-item.unread::before { content: '•'; color: #e64545; margin-right: 2px; }
.bell-title { font-size: 13px; color: #303133; }
.bell-body { font-size: 12px; color: #909399; margin-top: 3px; line-height: 1.5; }
.bell-time { font-size: 11px; color: #c0c4cc; margin-top: 3px; }
.bell-item { position: relative; }
.bell-del {
  position: absolute; right: 2px; top: 6px; color: #c0c4cc; font-size: 14px;
  padding: 0 5px; border-radius: 4px; line-height: 1.4; visibility: hidden;
}
.bell-item:hover .bell-del { visibility: visible; }
.bell-del:hover { color: #f56c6c; background: #fef0f0; }

/* ---------- 通知中心（邮件式三栏） ---------- */
.notify-wrap {
  display: flex; gap: 12px; height: max(480px, calc(100vh - 210px));
}
.notify-folders {
  width: 168px; flex-shrink: 0; background: #fff; border-radius: 10px;
  box-shadow: 0 1px 4px rgba(0,0,0,.06); padding: 10px 8px; overflow-y: auto;
}
.nfolder {
  display: flex; align-items: center; gap: 8px; padding: 8px 10px;
  border-radius: 7px; cursor: pointer; font-size: 13px; color: #303133;
}
.nfolder:hover { background: #f5f7fa; }
.nfolder.active { background: #ecf5ff; color: #409eff; font-weight: 600; }
.nf-icon { width: 18px; text-align: center; }
.nf-label { flex: 1; }
.nf-badge {
  background: #e64545; color: #fff; font-size: 10px; min-width: 16px;
  height: 16px; line-height: 16px; border-radius: 8px; text-align: center; padding: 0 4px;
}
.nfolder.active .nf-badge { background: #409eff; }
.nf-monitor {
  display: flex; flex-direction: column; gap: 8px;
  margin-top: 10px; padding: 10px 10px 12px;
  border-top: 1px solid #ebeef5; font-size: 12px; color: #606266; cursor: pointer;
}
.nf-monitor-head { display: flex; align-items: center; gap: 8px; }
.nf-monitor-title { font-size: 12.5px; font-weight: 600; color: #303133; }
.nf-monitor.disabled { opacity: .55; }
.nf-monitor-groups {
  padding: 8px 10px; border-radius: 8px; background: #f5f7fa;
  transition: opacity .2s;
}
.nf-monitor.off .nf-monitor-groups { opacity: .45; }
.nf-mg-title { font-size: 11px; color: #909399; margin-bottom: 6px; }
.nf-mg-list { display: flex; flex-wrap: wrap; gap: 6px 14px; }
.nf-mg { display: inline-flex; align-items: center; gap: 4px; cursor: pointer; font-size: 11.5px; color: #606266; }
.nf-mg input { margin: 0; }
.nf-mg-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
.nf-switch { position: relative; display: inline-block; width: 34px; height: 18px; margin-left: auto; cursor: pointer; flex: none; }
.nf-switch input { opacity: 0; width: 0; height: 0; }
.nf-switch i { position: absolute; inset: 0; background: #dcdfe6; border-radius: 9px; transition: background .2s; }
.nf-switch i::after { content: ''; position: absolute; left: 2px; top: 2px; width: 14px; height: 14px; border-radius: 50%; background: #fff; transition: transform .2s; }
.nf-switch input:checked + i { background: #409eff; }
.nf-switch input:checked + i::after { transform: translateX(16px); }
.nf-switch input:disabled + i { opacity: .5; cursor: not-allowed; }
.nf-vip { color: #e6a23c; font-size: 11px; text-decoration: none; margin-left: auto; }
.nf-vip:hover { text-decoration: underline; }
.vip-upgrade-btn { color: #e6a23c; border-color: #e6a23c; }
.notify-list-pane {
  flex: 1; min-width: 0; background: #fff; border-radius: 10px;
  box-shadow: 0 1px 4px rgba(0,0,0,.06); display: flex; flex-direction: column; overflow: hidden;
}
.notify-toolbar {
  display: flex; align-items: center; gap: 10px; padding: 10px 14px;
  border-bottom: 1px solid #ebeef5;
}
.notify-chk { display: flex; align-items: center; gap: 5px; font-size: 13px; color: #606266; cursor: pointer; }
.btn-small { padding: 4px 10px; font-size: 12px; }
.notify-list { flex: 1; overflow-y: auto; }
.notify-empty { color: #c0c4cc; text-align: center; padding: 60px 0; font-size: 13px; }
.nitem {
  display: flex; align-items: center; gap: 10px; padding: 10px 14px;
  border-bottom: 1px solid #f2f6fc; cursor: pointer;
}
.nitem:hover { background: #f8fafc; }
.nitem.active { background: #ecf5ff; }
.nitem.unread .ni-title { font-weight: 700; }
.nitem.unread .ni-icon::after { content: ''; position: absolute; right: -2px; top: -2px; width: 7px; height: 7px; border-radius: 50%; background: #e64545; }
.nitem.revoked .ni-icon { opacity: .45; }
.nitem.revoked .ni-title { color: #c0c4cc; text-decoration: line-through; font-weight: 400; }
.nitem.revoked .ni-preview { color: #c0c4cc; }
.nitem.revoked.active { background: #f0f2f5; }
.nd-revoked { margin: 0 0 10px 13px; padding: 6px 10px; background: #fef0f0; color: #e64545; border-radius: 4px; font-size: 12.5px; }
.ni-icon { position: relative; font-size: 15px; width: 20px; text-align: center; flex-shrink: 0; }
.ni-main { flex: 1; min-width: 0; }
.ni-title { font-size: 13px; color: #303133; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ni-preview { font-size: 12px; color: #909399; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; margin-top: 2px; }
.ni-time { font-size: 11px; color: #c0c4cc; flex-shrink: 0; font-variant-numeric: tabular-nums; }
.notify-more {
  border: none; background: none; color: #409eff; font-size: 13px;
  padding: 10px; cursor: pointer; border-top: 1px solid #f2f6fc;
}
.notify-more:hover { background: #f8fafc; }
.notify-detail {
  width: 340px; flex-shrink: 0; background: #fff; border-radius: 10px;
  box-shadow: 0 1px 4px rgba(0,0,0,.06); padding: 18px; overflow-y: auto;
}
.notify-detail-empty { color: #c0c4cc; text-align: center; padding: 80px 0; font-size: 13px; }
/* 详情页返回按钮：仅手机端钻取视图显示 */
.notify-back { display: none; }
.nd-head { padding-left: 10px; font-size: 15px; display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.nd-kind { font-size: 11px; margin-left: auto; }
.nd-time { color: #c0c4cc; font-size: 11.5px; margin: 8px 0 12px; padding-left: 13px; }
.nd-body { font-size: 13px; color: #303133; line-height: 1.8; padding-left: 13px; }
.nd-actions { margin-top: 18px; padding-left: 13px; display: flex; gap: 10px; }

/* 手机端：单栏钻取——默认「文件夹行+消息列表」，点开消息整屏切换为详情（带返回按钮） */
@media (max-width: 900px) {
  .notify-wrap { flex-direction: column; height: auto; }
  .notify-folders { width: 100%; display: flex; overflow-x: auto; padding: 6px; }
  .nfolder { flex-shrink: 0; padding: 6px 10px; }
  .nf-label { white-space: nowrap; }
  .nf-monitor { border-top: none; border-left: 1px solid #ebeef5; margin-top: 0; white-space: normal; }
  .notify-list-pane { min-height: 300px; }
  .notify-detail { width: 100%; display: none; }
  .notify-detail-empty { padding: 30px 0; }
  /* 详情视图：隐藏文件夹与列表，详情独占整栏 */
  .notify-wrap.show-detail .notify-folders,
  .notify-wrap.show-detail .notify-list-pane { display: none; }
  .notify-wrap.show-detail .notify-detail { display: block; min-height: 320px; }
  .notify-wrap.show-detail .notify-back {
    display: block; margin-bottom: 12px; border: none; background: #f4f4f5;
    color: #606266; padding: 7px 14px; border-radius: 6px; font-size: 13px; cursor: pointer;
  }
}

/* 复选框与自选移除按钮默认隐藏，行悬停（或已勾选）时显示；表头全选框悬停表格时显示 */
#result-table tbody .sel-cell input,
#watch-table tbody .sel-cell input,
#watch-table tbody [data-remove],
#result-table thead .sel-cell input,
#watch-table thead .sel-cell input { visibility: hidden; }
#result-table tbody tr:hover .sel-cell input,
#result-table tbody .sel-cell input:checked,
#watch-table tbody tr:hover .sel-cell input,
#watch-table tbody .sel-cell input:checked,
#watch-table tbody tr:hover [data-remove],
#result-table:hover thead .sel-cell input,
#result-table thead .sel-cell input:checked,
#watch-table:hover thead .sel-cell input,
#watch-table thead .sel-cell input:checked { visibility: visible; }

#watch-filter {
  padding: 5px 10px; border: 1px solid #dcdfe6; border-radius: 5px;
  font-size: 13px; width: 150px; outline: none; color: #303133;
}
#watch-filter:focus { border-color: #409eff; }
#watch-date-filter {
  padding: 4px 8px; border: 1px solid #dcdfe6; border-radius: 5px;
  font-size: 13px; outline: none; color: #303133;
  min-width: 168px; font-variant-numeric: tabular-nums;
}
#watch-date-filter:focus { border-color: #409eff; }
.date-filter-wrap { position: relative; display: inline-flex; align-items: center; }
.date-filter-ph { display: none; }
/* iPadOS：保持原生日期选择器，空值时用占位提示替代系统灰色空块 */
.date-filter-wrap.ios {
  background: #fff; border: 1px solid #dcdfe6; border-radius: 5px;
  min-width: 168px; min-height: 28px;
}
.date-filter-wrap.ios:focus-within { border-color: #409eff; }
.date-filter-wrap.ios #watch-date-filter { border: none; background: transparent; width: 100%; min-width: 0; }
.date-filter-wrap.ios .date-filter-ph {
  display: block; position: absolute; left: 9px; right: 26px; top: 50%;
  transform: translateY(-50%); pointer-events: none; color: #909399;
  font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.date-filter-wrap.ios.has-value .date-filter-ph { display: none; }
:root[data-theme="dark"] .date-filter-wrap.ios { background: #262933; border-color: #3a3e4a; }
:root[data-theme="dark"] .date-filter-wrap.ios input { color: #d5d7de; }
:root[data-theme="dark"] .date-filter-ph { color: #8b90a0; }
/* 暗色下原生日期控件内部文字跟随主题（日历图标由 color-scheme: dark 自动适配，勿加滤镜） */
:root[data-theme="dark"] input[type="date"]::-webkit-datetime-edit { color: #d5d7de; }

/* 板块监测 */
#board-table tbody tr { cursor: pointer; }
.board-name { font-weight: 600; text-align: left; }
.heat-cell { position: relative; min-width: 72px; }
.heat-cell b { position: relative; }
.heat-bar {
  position: absolute; left: 0; top: 50%; transform: translateY(-50%);
  height: 14px; background: linear-gradient(90deg, #ffd591, #ff7a45);
  border-radius: 3px; opacity: .35;
}
.spark { vertical-align: middle; }
.board-members-head { padding: 8px 6px; display: flex; gap: 12px; align-items: baseline; }
.board-back { color: #409eff; text-decoration: none; font-size: 13px; }
.board-back:hover { text-decoration: underline; }
#board-members-table tbody tr { cursor: pointer; }

/* 统计页 */
.stats-cards {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(115px, 1fr));
  gap: 10px; margin-bottom: 14px;
}
.stat-card {
  background: #fff; border-radius: 10px; padding: 14px 8px;
  text-align: center; box-shadow: 0 1px 4px rgba(0,0,0,.06);
}
.stat-value { font-size: 16px; font-weight: 600; }
.stat-label { font-size: 12px; color: #909399; margin-top: 4px; }
.stat-empty {
  grid-column: 1 / -1; background: #fff; border-radius: 10px;
  padding: 36px 0; text-align: center; color: #909399; font-size: 13px;
}
.stats-block { padding: 14px 16px; }
.stats-h { font-size: 13px; color: #606266; font-weight: 600; margin: 10px 0; }
.stats-chart { width: 100%; height: 280px; }
.stats-groups {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 16px;
}
.stats-group h4 { font-size: 12px; color: #909399; font-weight: 500; margin-bottom: 6px; }
.group-table { width: 100%; }

/* 账户区与登录框 */
#account-area { display: flex; align-items: center; gap: 8px; margin-left: 12px; }
.account-menu { position: relative; }
.account-chip { font-size: 13px; color: #606266; display: inline-flex; align-items: center; gap: 6px; padding: 5px 8px; border-radius: 6px; cursor: pointer; }
.account-chip:hover { background: #ecf5ff; color: #409eff; }
.account-dropdown {
  position: absolute; right: 0; top: 34px; z-index: 80;
  background: #fff; border-radius: 8px; box-shadow: 0 4px 16px rgba(0,0,0,.14);
  padding: 12px 14px; display: flex; flex-direction: column; gap: 10px; min-width: 200px;
}
.account-dropdown.hidden { display: none; }
.account-full { font-size: 13px; color: #303133; word-break: break-all; }
.account-badge {
  font-size: 11px; padding: 1px 7px; border-radius: 8px;
  background: #fdf6ec; color: #e6a23c;
}
.account-badge.admin { background: #fef0f0; color: #e64545; }
.auth-modal {
  position: fixed; inset: 0; background: rgba(0,0,0,.45); z-index: 150;
  display: flex; align-items: center; justify-content: center;
}
.auth-modal.hidden { display: none; }
.auth-box {
  background: #fff; border-radius: 12px; width: min(360px, 92vw);
  padding: 18px 22px 16px; box-shadow: 0 8px 30px rgba(0,0,0,.18);
}
.auth-tabs { display: flex; gap: 4px; margin-bottom: 16px; align-items: center; }
.auth-tab {
  border: none; background: none; padding: 6px 16px; font-size: 15px;
  color: #606266; cursor: pointer; border-bottom: 2px solid transparent;
}
.auth-tab.active { color: #409eff; font-weight: 600; border-bottom-color: #409eff; }
.auth-tabs .modal-close { margin-left: auto; }
#auth-login-form input:not([type="checkbox"]),
#auth-register-form input:not([type="checkbox"]),
#auth-reset-form input:not([type="checkbox"]) {
  width: 100%; margin-bottom: 12px; padding: 9px 12px;
  border: 1px solid #dcdfe6; border-radius: 6px; font-size: 14px; outline: none;
}
#auth-login-form input:not([type="checkbox"]):focus,
#auth-register-form input:not([type="checkbox"]):focus,
#auth-reset-form input:not([type="checkbox"]):focus {
  border-color: #409eff;
}
.auth-code-row { display: flex; gap: 8px; align-items: flex-start; }
.auth-code-row input { flex: 1; min-width: 0; }
.auth-code-row .btn { flex-shrink: 0; height: 37px; white-space: nowrap; }
.auth-submit { width: 100%; padding: 9px 0; }
.auth-hint { margin-top: 10px; color: #c0c4cc; font-size: 12px; text-align: center; }
.auth-msg { margin-top: 10px; font-size: 13px; text-align: center; min-height: 18px; }
.auth-msg.err { color: #f56c6c; }
.auth-msg.ok { color: #1aad19; }
/* VIP 订阅弹窗 */
.vip-plan-card {
  border: 1px solid #e4e7ed; border-radius: 10px; padding: 12px 8px;
  text-align: center; background: #fafbfc; transition: all .15s;
}
.vip-plan-card:hover { border-color: #e6a23c; box-shadow: 0 2px 10px rgba(230,162,60,.15); }
.vip-plan-name { font-size: 13px; font-weight: 600; color: #303133; }
.vip-redeem { display: flex; gap: 8px; }
.vip-redeem input {
  flex: 1; min-width: 0; padding: 9px 12px;
  border: 1px solid #dcdfe6; border-radius: 6px; font-size: 14px; outline: none;
}
.vip-redeem input:focus { border-color: #e6a23c; }
.vip-redeem .btn { flex-shrink: 0; height: 38px; white-space: nowrap; }
.vip-records { width: 100%; font-size: 12.5px; border-collapse: collapse; }
.vip-records th, .vip-records td { padding: 7px 8px; border-bottom: 1px solid #f0f1f4; text-align: left; white-space: nowrap; }
.vip-records th { color: #888; font-weight: 500; background: #fafbfc; position: sticky; top: 0; }
.vip-records .num { text-align: right; }

/* 登录提示占位 */
.login-hint {
  padding: 50px 0; text-align: center; color: #909399; font-size: 14px;
}
.login-hint .btn { margin-top: 12px; }

/* 提示气泡 */
.toast {
  position: fixed; top: 24px; left: 50%; transform: translateX(-50%);
  background: #303133; color: #fff; font-size: 13px; padding: 10px 20px;
  border-radius: 8px; box-shadow: 0 4px 16px rgba(0,0,0,.2); z-index: 200;
  transition: opacity .3s;
}
.toast.hidden { display: none; }

/* ---------- 免责声明弹窗（阻断式） ---------- */
.disclaimer-overlay {
  position: fixed; inset: 0; background: rgba(0,0,0,.55); z-index: 300;
  display: flex; align-items: center; justify-content: center;
}
.disclaimer-overlay.hidden { display: none; }
.disclaimer-box {
  background: #fff; border-radius: 12px; width: 580px; max-width: 94vw;
  max-height: 80vh; display: flex; flex-direction: column;
  box-shadow: 0 8px 32px rgba(0,0,0,.25);
}
.disclaimer-title {
  font-size: 16px; font-weight: 600; padding: 18px 20px 12px;
  border-bottom: 1px solid #eee;
}
.disclaimer-content {
  padding: 16px 20px; overflow-y: auto; flex: 1;
  font-size: 13px; line-height: 1.85; color: #333; white-space: pre-wrap;
}
.disclaimer-actions {
  padding: 14px 20px; border-top: 1px solid #eee;
  display: flex; justify-content: flex-end; gap: 10px;
}
.disclaimer-link { color: #409EFF; text-decoration: underline; }
.disclaimer-divider {
  height: 1px; background: #eee; margin: 0 20px; flex-shrink: 0;
}
.disclaimer-divider.hidden { display: none; }

.checkbox-label input[type="checkbox"] { margin: 0 4px 0 0; vertical-align: middle; }

/* 页脚 */
.site-footer {
  text-align: center; padding: 16px 0 12px;
  font-size: 11px; color: #999;
}
.site-footer a { color: #999; text-decoration: none; }
.site-footer a:hover { color: #409EFF; }
.footer-sep { margin: 0 8px; color: #ccc; }

/* ---------- 列设置弹窗 ---------- */
.col-set-btn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 26px; height: 26px; border-radius: 4px;
  color: #c0c4cc; cursor: pointer; transition: all .15s;
  font-size: 15px; flex-shrink: 0;
}
.col-set-btn:hover { color: #409eff; background: rgba(64,158,255,.08); }

.col-modal-overlay {
  position: fixed; inset: 0; background: rgba(0,0,0,.35); z-index: 300;
  display: flex; align-items: center; justify-content: center;
}
.col-modal-overlay.hidden { display: none; }
.col-modal-box {
  background: #fff; border-radius: 12px; width: 620px; max-width: 94vw;
  box-shadow: 0 8px 32px rgba(0,0,0,.18); overflow: hidden;
}
.col-modal-header {
  padding: 16px 20px; font-size: 15px; font-weight: 600;
  border-bottom: 1px solid #f0f0f0;
  display: flex; align-items: center; justify-content: space-between;
}
.col-modal-close {
  width: 28px; height: 28px; border: none; background: none; font-size: 18px;
  color: #999; cursor: pointer; border-radius: 4px;
  display: flex; align-items: center; justify-content: center;
}
.col-modal-close:hover { background: #f5f5f5; color: #333; }
.col-modal-body { padding: 16px 20px; }
.col-picker-row { display: flex; gap: 12px; align-items: stretch; }
.col-picker-side { flex: 1; }
.col-picker-title { font-size: 12px; color: #909399; margin-bottom: 6px; }
.col-picker-list {
  border: 1px solid #e8e8e8; border-radius: 6px;
  height: 260px; overflow-y: auto; padding: 2px 0;
}
.col-picker-list .col-item {
  padding: 8px 12px; font-size: 13px; cursor: pointer; user-select: none;
  display: flex; align-items: center; gap: 6px; transition: background .1s;
}
.col-picker-list .col-item:hover { background: #f5f7fa; }
.col-picker-list .col-item.selected { background: #ecf5ff; color: #409eff; }
.col-picker-list .col-item.dragging { opacity: .35; }
.col-picker-list .col-item.drag-over {
  outline: 2px dashed #409eff; outline-offset: -2px; background: #ecf5ff;
}
.col-picker-btns {
  display: flex; flex-direction: column; justify-content: center; gap: 6px;
  flex-shrink: 0; width: 48px;
}
.col-picker-btns button {
  width: 100%; padding: 7px 0; border: 1px solid #dcdfe6; background: #fff;
  border-radius: 4px; cursor: pointer; font-size: 14px; color: #606266;
  transition: all .1s; user-select: none;
}
.col-picker-btns button:hover { border-color: #409eff; color: #409eff; }
.col-picker-btns button:active { background: #f0f5ff; }
.col-modal-footer {
  padding: 12px 20px; border-top: 1px solid #f0f0f0;
  display: flex; justify-content: flex-end; gap: 8px; align-items: center;
}
.col-modal-err { margin-right: auto; font-size: 12px; color: #f56c6c; }

/* 表头拖拽 */
th.drag-hint { outline: 2px dashed #409eff; outline-offset: -2px; }
th.dragging { opacity: .35; }

/* 手机端适配 */
@media (max-width: 600px) {
  .col-picker-row { flex-direction: column; gap: 8px; }
  .col-picker-btns { flex-direction: row; width: 100%; justify-content: center; }
  .col-picker-btns button { width: 40px; margin-top: 0 !important; }
  /* 上下堆叠后「添加/移除」无论指向哪边都和排序↑↓视觉重复，改用文字按钮区分 */
  #col-btn-add, #col-btn-remove { width: auto; padding: 0 14px; font-size: 0; }
  #col-btn-add::after { content: '添加'; font-size: 12px; }
  #col-btn-remove::after { content: '移除'; font-size: 12px; }
  .col-picker-list { height: 140px; }
  .col-modal-body { padding: 10px 14px; }
  .col-modal-header { padding: 12px 14px; font-size: 14px; }
  .col-modal-footer { padding: 10px 14px; }
}

/* ===== 手机端首页精简（≤768px）：压缩头部、标签单行横滚、控制区紧凑，空间让给列表 ===== */
@media (max-width: 768px) {
  .container { padding: 8px 8px 24px; }

  /* 头部：只留图标+状态，名称省略，账号区同行右侧 */
  header { padding: 10px 12px; margin-bottom: 8px; border-radius: 8px; }
  .title-row { gap: 8px; flex-wrap: nowrap; }
  .logo { width: 22px; height: 22px; }
  header h1 { display: none; }
  .title-block { flex: 1; min-width: 0; }
  .title-status { font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  #account-area { flex-shrink: 0; gap: 6px; font-size: 12px; margin-left: 0; }

  /* 指数条：隐藏迷你量柱与量/额切换，单行紧凑横滚（隐藏滚动条，否则会透出一条小滑块） */
  .index-row {
    flex-wrap: nowrap; overflow-x: auto; align-items: center;
    gap: 14px; padding-top: 4px; -webkit-overflow-scrolling: touch; scrollbar-width: none;
  }
  .index-row::-webkit-scrollbar { display: none; }
  .idx-card { font-size: 11.5px; gap: 5px; flex-shrink: 0; align-items: center; }
  .idx-bars, .idx-toggle { display: none; }
  .idx-clock { margin-left: 0; flex-shrink: 0; font-size: 11.5px; }

  /* 标签栏：标签单行横向滚动，快速刷新+搜索独占第二行（仅首页#main-tabs，后台页不受影响） */
  #main-tabs { flex-direction: column; align-items: stretch; gap: 4px; margin-bottom: 8px; }
  .tabs-main {
    display: flex; flex-wrap: nowrap; overflow-x: auto; gap: 0;
    -webkit-overflow-scrolling: touch; scrollbar-width: none;
  }
  .tabs-main::-webkit-scrollbar { display: none; }
  .tabs-main .tab { flex-shrink: 0; padding: 8px 12px; font-size: 13px; }
  .tabs-right { margin-left: 0; width: 100%; gap: 6px; }
  .tabs-right .search-wrap { flex: 1; margin-left: 0; }
  .tabs-right #search-box { width: 100%; }

  /* 控制区：更紧凑——隐藏参数标签文字（下拉内容自明）与长说明，按钮/下拉缩小 */
  .controls { padding: 6px 8px; gap: 6px; margin-bottom: 8px; font-size: 12px; }
  .controls .hint { display: none; }
  .controls label { font-size: 0; gap: 0; }
  .controls label select { font-size: 12px; margin-left: 0; padding: 4px 6px; }
  .controls .checkbox-label { font-size: 12px; gap: 4px; }
  .controls .btn { padding: 5px 10px; font-size: 12px; }
  .result-meta { margin-left: 0; font-size: 11px; }
  .screen-loading i { width: 32px; }

  /* 列表：单元格内边距与字号收紧，列宽更紧凑 */
  .table-wrap { border-radius: 8px; }
  th, td { padding: 6px 6px; font-size: 12px; }
  .progress-wrap { margin-top: 8px; }
}

/* ---------- 买卖点与策略回测面板 ---------- */
.bt-params { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; padding: 8px 4px 12px; font-size: 13px; color: #555; }
.bt-params label { display: flex; align-items: center; gap: 5px; white-space: nowrap; }
.bt-params select, .bt-params input { padding: 4px 6px; border: 1px solid #d0d5dd; border-radius: 6px; font-size: 13px; }
.bt-params input { width: 60px; }
.bt-cards { display: flex; flex-direction: column; gap: 10px; }
.bt-card { background: #fff; border: 1px solid #e8eaef; border-radius: 8px; padding: 10px 14px; }
.bt-card-title { font-size: 13px; color: #666; margin-bottom: 8px; }
.bt-nums { display: flex; gap: 26px; flex-wrap: wrap; }
.bt-num { display: flex; flex-direction: column; align-items: flex-start; font-size: 16px; font-weight: 600; }
.bt-num-label { font-size: 12px; color: #999; font-weight: 400; margin-bottom: 2px; }
.bt-num-sub { font-size: 11px; color: #999; font-weight: 400; }
.bt-num .up, .bt-card .up { color: #e64545; }
.bt-num .down, .bt-card .down { color: #1aad19; }
.bt-chart { height: 300px; margin-top: 12px; background: #fff; border: 1px solid #e8eaef; border-radius: 8px; }
.bt-trades { margin-top: 12px; overflow-x: auto; }
.bt-trade-table { width: 100%; border-collapse: collapse; background: #fff; font-size: 13px; }
.bt-trade-table th, .bt-trade-table td { padding: 6px 10px; border-bottom: 1px solid #f0f1f4; text-align: right; white-space: nowrap; }
.bt-trade-table th:nth-child(1), .bt-trade-table td:nth-child(1),
.bt-trade-table th:nth-child(3), .bt-trade-table td:nth-child(3),
.bt-trade-table th:nth-child(7), .bt-trade-table td:nth-child(7) { text-align: left; }
.bt-trade-table th { color: #888; font-weight: 500; background: #fafbfc; }
.bt-trade-row { cursor: pointer; }
.bt-trade-row:hover { background: #f5f7ff; }
.bt-trade-table .up { color: #e64545; }
.bt-trade-table .down { color: #1aad19; }
.bt-trade-tip { font-size: 12px; color: #aaa; margin-top: 6px; }
#signals-toggle { margin-left: auto; font-size: 12px; color: #666; }
#signals-toggle .checkbox-label { display: flex; align-items: center; gap: 4px; cursor: pointer; }

@media (max-width: 768px) {
  .bt-chart { height: 240px; }
  .bt-nums { gap: 16px; }
  .bt-num { font-size: 14px; }
  .bt-params { gap: 10px; font-size: 12px; }
}

/* 智能筛选：阶段徽标 + 入选原因 */
.stage-badge { display:inline-block; margin-left:6px; padding:1px 7px; border-radius:10px; font-size:11px; color:#fff; vertical-align:1px; white-space:nowrap; }
.stage-badge.stage-1 { background:#8a8f98; }
.stage-badge.stage-2 { background:#e6a23c; }
.stage-badge.stage-3 { background:#67c23a; }
.stage-badge.stage-4 { background:#f56c6c; }
.smart-reasons { display:flex; flex-wrap:wrap; gap:4px; margin-top:3px; }
.reason-chip { display:inline-block; padding:0 6px; border-radius:8px; font-size:11px; line-height:18px; color:#606266; background:#f0f2f5; border:1px solid #e4e7ed; white-space:nowrap; }

.smart-reasons-cell { min-width: 260px; }
.smart-reasons-cell .reason-chip { margin: 1px 2px; }
/* 筛选结果分页 */
.pager-row td { text-align:center; padding:8px 0; }
.table-pager { display:inline-flex; align-items:center; gap:10px; font-size:12px; color:#606266; }
.table-pager .btn-mini { padding:2px 10px; border:1px solid #dcdfe6; border-radius:6px; background:#fff; cursor:pointer; }
.table-pager .btn-mini:disabled { opacity:.45; cursor:default; }
/* 筛选结果分页条（表格滚动区外，始终可见） */
.table-pager-bar { display: flex; justify-content: center; padding: 10px 0 2px; }
.table-pager { display: inline-flex; align-items: center; gap: 8px; font-size: 12px; color: #606266; background: #fff; border: 1px solid #e4e7ed; border-radius: 8px; padding: 6px 10px; box-shadow: 0 1px 3px rgba(0,0,0,.05); flex-wrap: wrap; }
.table-pager .btn-mini { padding: 3px 10px; border: 1px solid #dcdfe6; border-radius: 5px; background: #fff; cursor: pointer; font-size: 12px; color: #606266; }
.table-pager .btn-mini:hover:not(:disabled) { color: #409eff; border-color: #409eff; }
.table-pager .btn-mini:disabled { opacity: .45; cursor: default; }
.table-pager .pager-info { white-space: nowrap; }
.table-pager .pager-jump { display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }
.table-pager .pager-jump input { width: 54px; padding: 3px 6px; border: 1px solid #dcdfe6; border-radius: 5px; font-size: 12px; }

/* 界面大小：居中（默认） vs 全屏 */
:root[data-layout="center"] .container { max-width: 1280px; }

/* 暗色主题（跟随系统 / 手动切换） */
:root[data-theme="dark"] { color-scheme: dark; }
:root[data-theme="dark"] body { background: #141519; color: #d5d7de; }
:root[data-theme="dark"] header,
:root[data-theme="dark"] .controls,
:root[data-theme="dark"] .settings-card,
:root[data-theme="dark"] .table-wrap,
:root[data-theme="dark"] .table-pager,
:root[data-theme="dark"] .stats-cards,
:root[data-theme="dark"] .stats-block,
:root[data-theme="dark"] .notify-list,
:root[data-theme="dark"] .notify-detail,
:root[data-theme="dark"] .side-panel,
:root[data-theme="dark"] .detail-main,
:root[data-theme="dark"] .news-card,
:root[data-theme="dark"] .ai-card,
:root[data-theme="dark"] .content-card,
:root[data-theme="dark"] .modal-box {
  background: #1e2027; border-color: #2f323b; color: #d5d7de; box-shadow: 0 1px 4px rgba(0,0,0,.4);
}
:root[data-theme="dark"] table { background: #1e2027; color: #d5d7de; }
:root[data-theme="dark"] th { background: #262933; color: #b9bdc7; }
:root[data-theme="dark"] td { border-color: #2f323b; color: #d5d7de; }
:root[data-theme="dark"] td.up { color: #f87171; }
:root[data-theme="dark"] td.down { color: #4ade80; }
:root[data-theme="dark"] tbody tr:hover td { background: #262933; }
:root[data-theme="dark"] input,
:root[data-theme="dark"] select,
:root[data-theme="dark"] textarea { background: #262933; color: #d5d7de; border-color: #3a3e4a; }
:root[data-theme="dark"] #search-box,
:root[data-theme="dark"] #watch-filter,
:root[data-theme="dark"] #watch-date-filter { color: #d5d7de; }
:root[data-theme="dark"] .btn { background: #262933; color: #c9cdd6; border-color: #3a3e4a; }
:root[data-theme="dark"] .btn:hover { border-color: #409eff; color: #79bbff; }
:root[data-theme="dark"] .btn.primary { background: #409eff; border-color: #409eff; color: #fff; }
:root[data-theme="dark"] .btn-run {
  background: linear-gradient(135deg, #3a8eff 0%, #5a6cf5 55%, #7c5cf0 100%);
  box-shadow: 0 2px 10px rgba(76, 108, 255, .45);
}
:root[data-theme="dark"] .table-pager .btn-mini { background: #262933; color: #c9cdd6; border-color: #3a3e4a; }
:root[data-theme="dark"] .table-pager .btn-mini:hover:not(:disabled) { color: #79bbff; border-color: #409eff; }
:root[data-theme="dark"] .table-pager .pager-jump input { background: #262933; color: #d5d7de; border-color: #3a3e4a; }
:root[data-theme="dark"] a { color: #79bbff; }
:root[data-theme="dark"] .subtitle,
:root[data-theme="dark"] .result-meta,
:root[data-theme="dark"] .hint,
:root[data-theme="dark"] .title-status,
:root[data-theme="dark"] .pos,
:root[data-theme="dark"] .pager-info,
:root[data-theme="dark"] .settings-note { color: #8b90a0; background: #262933; }
:root[data-theme="dark"] .stage-badge { color: #fff; }
:root[data-theme="dark"] .reason-chip { background: #262933; color: #c9cdd6; border-color: #3a3e4a; }
:root[data-theme="dark"] .content-tab { color: #9aa0ae; }
:root[data-theme="dark"] .content-tab.active { color: #409eff; }
:root[data-theme="dark"] .empty { color: #8b90a0; }
:root[data-theme="dark"] tbody tr:nth-child(even) { background: #22242b; }
:root[data-theme="dark"] tbody tr:hover { background: #2a2f3a; }
:root[data-theme="dark"] #watch-table .stick-l0,
:root[data-theme="dark"] #watch-table .stick-l1,
:root[data-theme="dark"] #watch-table .stick-l2,
:root[data-theme="dark"] #watch-table .stick-l3,
:root[data-theme="dark"] #watch-table .stick-r0 { background: #1e2027; }
:root[data-theme="dark"] #watch-table tbody tr:hover .stick-l0,
:root[data-theme="dark"] #watch-table tbody tr:hover .stick-l1,
:root[data-theme="dark"] #watch-table tbody tr:hover .stick-l2,
:root[data-theme="dark"] #watch-table tbody tr:hover .stick-l3,
:root[data-theme="dark"] #watch-table tbody tr:hover .stick-r0 { background: #2a2f3a; }
:root[data-theme="dark"] .settings-card label { color: #b9bdc7; }
:root[data-theme="dark"] .settings-card h3, :root[data-theme="dark"] .settings-card h4 { color: #d5d7de; }
:root[data-theme="dark"] .tab { color: #9aa0ae; }
:root[data-theme="dark"] .grp-pop { background: #262933; color: #d5d7de; box-shadow: 0 8px 30px rgba(0,0,0,.55); }
:root[data-theme="dark"] .tabs-more-pop { background: #262933; color: #d5d7de; box-shadow: 0 8px 24px rgba(0,0,0,.55); }
:root[data-theme="dark"] .watch-drag-ghost { background: #262933; color: #d5d7de; border-color: #3a3e4a; box-shadow: 0 4px 14px rgba(0,0,0,.5); }
:root[data-theme="dark"] .sample-exit { background: #2a2d36; color: #9aa0ae; }
:root[data-theme="dark"] .modal-mask { background: rgba(0,0,0,.55); }
:root[data-theme="dark"] .stat-card, :root[data-theme="dark"] .stat-empty { background: #1e2027; box-shadow: none; }
:root[data-theme="dark"] .stat-value.up { color: #f87171; }
:root[data-theme="dark"] .stat-value.down { color: #4ade80; }
/* 暗色补全：登录弹窗 / 列设置弹窗 / 铃铛下拉 / 分组菜单 / 回测卡片 */
:root[data-theme="dark"] .auth-box { background: #1e2027; color: #d5d7de; }
:root[data-theme="dark"] .auth-tab { color: #9aa0ae; }
:root[data-theme="dark"] .auth-hint { color: #8b90a0; }
:root[data-theme="dark"] .auth-modal { background: rgba(0,0,0,.6); }
:root[data-theme="dark"] .col-modal-overlay { background: rgba(0,0,0,.6); }
:root[data-theme="dark"] .col-modal-box { background: #1e2027; color: #d5d7de; }
:root[data-theme="dark"] .col-modal-header { border-bottom-color: #2f323b; }
:root[data-theme="dark"] .col-modal-footer { border-top-color: #2f323b; }
:root[data-theme="dark"] .col-modal-close:hover { background: #2a2f3a; color: #d5d7de; }
:root[data-theme="dark"] .col-picker-title { color: #8b90a0; }
:root[data-theme="dark"] .col-picker-list { border-color: #3a3e4a; }
:root[data-theme="dark"] .col-picker-list .col-item:hover { background: #2a2f3a; }
:root[data-theme="dark"] .col-picker-list .col-item.selected,
:root[data-theme="dark"] .col-picker-list .col-item.drag-over { background: #1a2a3a; color: #79bbff; }
:root[data-theme="dark"] .col-picker-btns button { background: #262933; color: #c9cdd6; border-color: #3a3e4a; }
:root[data-theme="dark"] .col-picker-btns button:active { background: #1a2a3a; }
:root[data-theme="dark"] .tab-menu-pop { background: #262933; border-color: #3a3e4a; }
:root[data-theme="dark"] .tab-menu-pop button { color: #c9cdd6; }
:root[data-theme="dark"] .tab-menu-pop button:hover { background: #2a2f3a; }
:root[data-theme="dark"] .tab-drag-ghost { background: #262933; border-color: #3a3e4a; color: #d5d7de; }
:root[data-theme="dark"] .bell-drop { background: #1e2027; box-shadow: 0 6px 24px rgba(0,0,0,.55); }
:root[data-theme="dark"] .bell-btn:hover { background: #2a2f3a; }
:root[data-theme="dark"] .bell-monitor { color: #b9bdc7; border-bottom-color: #2f323b; }
:root[data-theme="dark"] .bell-item { border-bottom-color: #2f323b; }
:root[data-theme="dark"] .bell-item:hover { background: #2a2f3a; }
:root[data-theme="dark"] .bell-title { color: #d5d7de; }
:root[data-theme="dark"] .disclaimer-box { background: #1e2027; color: #d5d7de; }
:root[data-theme="dark"] .disclaimer-title { border-bottom-color: #2f323b; }
:root[data-theme="dark"] .disclaimer-content { color: #c9cdd6; }
:root[data-theme="dark"] .disclaimer-actions { border-top-color: #2f323b; }
:root[data-theme="dark"] .disclaimer-divider { background: #2f323b; }
:root[data-theme="dark"] .bt-card, :root[data-theme="dark"] .bt-chart { background: #1e2027; border-color: #2f323b; }
:root[data-theme="dark"] .bt-trade-table { background: #1e2027; }
:root[data-theme="dark"] .bt-trade-table th { background: #262933; color: #b9bdc7; }
:root[data-theme="dark"] .bt-trade-row:hover { background: #2a2f3a; }
:root[data-theme="dark"] .ai-lhb-side { background: #262933; border-color: #3a3e4a; }
:root[data-theme="dark"] .ai-score { background: #2a2d36; color: #d5d7de; }
:root[data-theme="dark"] .ai-score.up { color: #f56c6c; background: #3a2222; }
:root[data-theme="dark"] .ai-score.mid { color: #e6a23c; background: #3a2f1a; }
:root[data-theme="dark"] .ai-score.down { color: #4cd964; background: #1e3a2a; }
:root[data-theme="dark"] .ai-lhb-head h4 { color: #d5d7de; }
:root[data-theme="dark"] .ai-lhb-facts { color: #b9bdc7; background: #22242b; }
:root[data-theme="dark"] .ai-lhb-reason, :root[data-theme="dark"] .ai-lhb-reason span:last-child { color: #c9cdd6; }
:root[data-theme="dark"] .ai-lhb-sum { background: #22242b; border-color: #2f323b; }
:root[data-theme="dark"] .ai-lhb-seat { color: #b9bdc7; background: #2a2d36; }
:root[data-theme="dark"] .ai-lhb-analysis { color: #c9cdd6; }
:root[data-theme="dark"] .ai-lhb-analysis .ai-lhb-label, :root[data-theme="dark"] .ai-diff { color: #e6a23c; background: #3a2f1a; border-color: #5c4a26; }
:root[data-theme="dark"] .ai-conclusion { background: #22242b; }
:root[data-theme="dark"] .ai-block { background: #22242b; }
:root[data-theme="dark"] .ai-block h4 { color: #8b90a0; }
:root[data-theme="dark"] .ai-limit-prob { background: #262933; box-shadow: none; }
:root[data-theme="dark"] .ai-limit-comment { color: #b9bdc7; }
:root[data-theme="dark"] .ai-v { color: #d5d7de; }
:root[data-theme="dark"] .ai-ind { color: #8b90a0; border-top-color: #2f323b; }
:root[data-theme="dark"] .ai-degrade { background: #3a2f1a; color: #e6a23c; border-color: #5c4a26; }
:root[data-theme="dark"] .ai-meta { color: #8b90a0; }
:root[data-theme="dark"] .ai-lhb-empty { color: #6a6f7c; }
:root[data-theme="dark"] .nfolder:hover, :root[data-theme="dark"] .nitem:hover, :root[data-theme="dark"] .notify-more:hover { background: #2a2f3a; }
:root[data-theme="dark"] .nitem.revoked.active { background: #2a2d36; }
:root[data-theme="dark"] .search-item .btn-add:disabled { background: #262933; }
:root[data-theme="dark"] .account-chip { color: #b9bdc7; }
:root[data-theme="dark"] .account-chip:hover { background: #2a2f3a; color: #79bbff; }
:root[data-theme="dark"] .account-dropdown { background: #1e2027; box-shadow: 0 4px 16px rgba(0,0,0,.55); }
:root[data-theme="dark"] .account-full { color: #d5d7de; }
:root[data-theme="dark"] .account-badge { background: #3a2f1a; }
:root[data-theme="dark"] .account-badge.admin { background: #3a2222; }
:root[data-theme="dark"] .vip-plan-card { background: #262933; border-color: #3a3e4a; }
:root[data-theme="dark"] .vip-plan-name { color: #d5d7de; }
:root[data-theme="dark"] .vip-redeem input { background: #262933; color: #d5d7de; border-color: #3a3e4a; }
:root[data-theme="dark"] .vip-records th { background: #262933; color: #b9bdc7; }
:root[data-theme="dark"] .vip-records th, :root[data-theme="dark"] .vip-records td { border-bottom-color: #2f323b; }
/* 暗色补全：个股详情页 / 通知中心 / 侧边栏 */
:root[data-theme="dark"] .detail-header, :root[data-theme="dark"] .detail-body { background: #1e2027; box-shadow: none; }
:root[data-theme="dark"] .detail-title .code { color: #8b90a0; }
:root[data-theme="dark"] .nav-btn { background: #262933; color: #c9cdd6; border-color: #3a3e4a; }
:root[data-theme="dark"] .nav-btn:hover { border-color: #409eff; color: #79bbff; }
:root[data-theme="dark"] .side-panel { border-right-color: #2f323b; }
:root[data-theme="dark"] .side-title { color: #b9bdc7; border-bottom-color: #2f323b; }
:root[data-theme="dark"] .side-item:hover, :root[data-theme="dark"] .side-item.active { background: #2a2f3a; }
:root[data-theme="dark"] .side-knob { background: #262933; border-color: #3a3e4a; color: #8b90a0; }
:root[data-theme="dark"] .side-body { scrollbar-color: rgba(144,147,153,.55) transparent; }
:root[data-theme="dark"] .side-body::-webkit-scrollbar-thumb { background: rgba(144,147,153,.4); }
:root[data-theme="dark"] .side-toggle::before { background: #2f323b; }
:root[data-theme="dark"] .stock-info { background: #22242b; }
:root[data-theme="dark"] .info-value { color: #d5d7de; }
:root[data-theme="dark"] .info-divider { border-top-color: #3a3e4a; }
:root[data-theme="dark"] .content-tabs { border-bottom-color: #2f323b; }
:root[data-theme="dark"] .notify-folders, :root[data-theme="dark"] .notify-list-pane { background: #1e2027; box-shadow: none; }
:root[data-theme="dark"] .nfolder { color: #c9cdd6; }
:root[data-theme="dark"] .nfolder.active { background: #1a2a3a; color: #79bbff; }
:root[data-theme="dark"] .nf-monitor { color: #b9bdc7; border-top-color: #2f323b; }
:root[data-theme="dark"] .nf-monitor-title { color: #d5d7de; }
:root[data-theme="dark"] .nf-monitor-groups { background: #262933; }
:root[data-theme="dark"] .nf-mg-title { color: #9aa0ae; }
:root[data-theme="dark"] .nf-mg { color: #c9cdd6; }
:root[data-theme="dark"] .nf-switch i { background: #3a3e4a; }
:root[data-theme="dark"] .notify-toolbar { border-bottom-color: #2f323b; }
:root[data-theme="dark"] .notify-chk { color: #b9bdc7; }
:root[data-theme="dark"] .nitem { border-bottom-color: #2f323b; }
:root[data-theme="dark"] .nitem.active { background: #1a2a3a; }
:root[data-theme="dark"] .ni-title { color: #d5d7de; }
:root[data-theme="dark"] .notify-more { border-top-color: #2f323b; }
:root[data-theme="dark"] .nd-head { color: #d5d7de; }
:root[data-theme="dark"] .nd-body { color: #c9cdd6; }
:root[data-theme="dark"] .ni-preview, :root[data-theme="dark"] .ni-time { color: #9aa0ae; }
:root[data-theme="dark"] .nd-time, :root[data-theme="dark"] .nd-kind { color: #9aa0ae; }
:root[data-theme="dark"] .notify-empty, :root[data-theme="dark"] .notify-detail-empty { color: #8b90a0; }
:root[data-theme="dark"] .nf-monitor.disabled { color: #6a6f7c; }
:root[data-theme="dark"] .nd-revoked { background: #3a2222; color: #f56c6c; }
:root[data-theme="dark"] .nf-vip { color: #e6a23c; }
.nitem.focus-row { outline: 2px solid #409eff; outline-offset: -2px; border-radius: 4px; }
.notify-list:focus { outline: none; }   /* 列表容器键盘焦点不显示外框，避免与焦点行高亮混淆 */
/* 筛选模式分段切换（普通/智能）：参数只属于各自模式，视觉上彻底分开 */
.screen-mode { display: inline-flex; border: 1px solid #dcdfe6; border-radius: 6px; overflow: hidden; }
.mode-btn {
  border: none; background: #fff; color: #606266;
  padding: 6px 14px; font-size: 13px; cursor: pointer; transition: all .15s; line-height: 1.4;
}
.mode-btn + .mode-btn { border-left: 1px solid #dcdfe6; }
.mode-btn:hover { color: #409eff; }
.mode-btn.active { background: #409eff; color: #fff; }
#ctl-screen-normal, #ctl-screen-smart { display: inline-flex; align-items: center; gap: 10px; flex-wrap: wrap; }
:root[data-theme="dark"] .screen-mode { border-color: #3a3e4a; }
:root[data-theme="dark"] .mode-btn { background: #262933; color: #c9cdd6; }
:root[data-theme="dark"] .mode-btn + .mode-btn { border-left-color: #3a3e4a; }
:root[data-theme="dark"] .mode-btn:hover { color: #79bbff; }
:root[data-theme="dark"] .mode-btn.active { background: #409eff; color: #fff; }

/* ---------- 双通道账号：注册/找回子标签 ---------- */
.auth-subtabs { display:flex; gap:4px; margin-bottom:12px; }
.auth-subtab { font-size:12px; padding:6px 12px; }
#acct-security .sec-row { margin:8px 0; font-size:13px; color:#606266; }
#acct-security .sec-row b { color:#303133; }
#acct-security .sec-actions { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-top:6px; }
#acct-security input { width:100%; box-sizing:border-box; margin-top:4px; padding:6px 10px; border:1px solid #dcdfe6; border-radius:5px; font-size:13px; }
#acct-security .sec-danger { color:#f56c6c; margin-top:10px; }
:root[data-theme="dark"] #acct-security .sec-row { color:#b9bdc7; }
:root[data-theme="dark"] #acct-security .sec-row b { color:#e5e7eb; }
:root[data-theme="dark"] #acct-security input { background:#2a2d34; border-color:#3a3f4b; color:#d5d7de; }
