* { box-sizing: border-box; margin: 0; padding: 0; }
/* ===== 无障碍工具类 ===== */
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
/* ===== 使用文档页排版 ===== */
.docs-box { line-height: 1.75; font-size: 13.5px; }
.docs-box h1, .docs-box h2, .docs-box h3, .docs-box h4 { margin: 16px 0 8px; line-height: 1.4; }
.docs-box h1 { font-size: 20px; color: #ffd54a; }
.docs-box h2 { font-size: 17px; color: #ffd54a; border-bottom: 1px solid #2a3240; padding-bottom: 5px; }
.docs-box h3 { font-size: 15px; color: #e8a838; }
.docs-box h4 { font-size: 14px; color: #d5d9e0; }
.docs-box p { margin: 6px 0; }
.docs-box ul, .docs-box ol { margin: 6px 0 6px 22px; }
.docs-box li { margin: 3px 0; }
.docs-box code {
  background: #242c39; border: 1px solid #354052; padding: 1px 6px;
  border-radius: 4px; font-size: 12px; color: #ffd54a;
}
.docs-box blockquote {
  border-left: 3px solid #ffd54a; padding: 5px 14px; color: #aab3c2;
  margin: 8px 0; background: #202633; border-radius: 0 6px 6px 0;
}
.docs-box table { margin: 8px 0; }
.docs-box th { color: #ffd54a; background: #232b38; }
.docs-box a { color: #4a7dff; text-decoration: none; }
.docs-box a:hover { text-decoration: underline; }
.docs-box hr { border: 0; border-top: 1px solid #2a3240; margin: 14px 0; }
body {
  font-family: "Segoe UI", "PingFang SC", "HarmonyOS Sans SC", "Microsoft YaHei", system-ui, sans-serif;
  background: #14181f; color: #d5d9e0; min-height: 100vh;
  -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility;
}
:root {
  --scroll-thumb: #2e3a4d; --scroll-thumb-hover: #3d4c63; --scroll-track: #14181f;
  --sel-bg: rgba(255, 213, 74, .22);
}
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-thumb { background: var(--scroll-thumb); border-radius: 6px; border: 2px solid var(--scroll-track); }
::-webkit-scrollbar-thumb:hover { background: var(--scroll-thumb-hover); }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-corner { background: transparent; }
* { scrollbar-width: thin; scrollbar-color: var(--scroll-thumb) transparent; }
::selection { background: var(--sel-bg); }
@supports (-webkit-background-clip: text) {
  .brand, .nav-brand, .login-brand {
    background: linear-gradient(115deg, #ffe9a8 0%, #ffd54a 45%, #d9a83c 80%, #f2d773 100%);
    -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
  }
  .brand span { -webkit-text-fill-color: #8a93a3; }
}
input:focus-visible, select:focus-visible, textarea:focus-visible {
  outline: 2px solid rgba(255, 213, 74, .45); outline-offset: 1px;
}
.top {
  display: flex; align-items: center; gap: 24px; flex-wrap: wrap;
  padding: 14px 22px; background: #1b212b; border-bottom: 1px solid #2a3240;
  position: sticky; top: 0; z-index: 10;
}
.brand { font-size: 18px; font-weight: 700; color: #ffd54a; letter-spacing: .4px; }
.brand span { font-size: 12px; color: #8a93a3; font-weight: 400; margin-left: 8px; }
.tabs { display: flex; gap: 4px; }
.tab {
  background: transparent; color: #b7bfcc; border: 0; padding: 8px 16px;
  border-radius: 8px; cursor: pointer; font-size: 14px;
}
.tab:hover { background: #242c39; }
.tab.active { background: #2b271a; color: #ffd54a; }
main { padding: 18px 22px; max-width: 1400px; margin: 0 auto; }
.page { display: none; }
.page.active { display: block; }
/* 全局提示 toast（右下角浮层） */
.toast {
  position: fixed; right: 20px; bottom: 20px; z-index: 9999;
  max-width: 340px; padding: 10px 16px; border-radius: 10px;
  background: #1b212b; color: #e6e9ef; font-size: 13px;
  border: 1px solid #2a3240; opacity: 0; transform: translateY(8px);
  box-shadow: 0 10px 30px rgba(0,0,0,.4);
  transition: opacity .2s ease-out, transform .2s ease-out; pointer-events: none;
}
.toast.show { opacity: 1; transform: translateY(0); }
.toast.error { border-color: #b04a44; color: #ff8a80; }
.toast.success { border-color: #3d7a4f; color: #8ae29a; }
.toast-act {
  margin-left: 10px; background: #c99b1f; color: #14181f; border: 0;
  padding: 3px 10px; border-radius: 6px; cursor: pointer; font-size: 12px; font-weight: 600;
  pointer-events: auto; vertical-align: middle;
}
.toast-act:hover { background: #e0b331; }
.card {
  background: #1b212b; border: 1px solid #2a3240; border-radius: 12px;
  padding: 14px 16px; margin-bottom: 14px;
  box-shadow: 0 1px 0 rgba(255,255,255,.025) inset, 0 1px 3px rgba(0,0,0,.18);
}
.row { display: flex; gap: 14px; align-items: center; flex-wrap: wrap; }
label { font-size: 13px; color: #aab3c2; display: flex; align-items: center; gap: 6px; }
input[type="number"], select, input[type="text"] {
  background: #242c39; border: 1px solid #354052; color: #e6e9ef;
  padding: 6px 10px; border-radius: 6px; font-size: 13px; width: 110px;
}
input[type="text"] { width: 150px; }
.btn {
  background: #2c3544; color: #d5d9e0; border: 0; padding: 8px 18px;
  border-radius: 8px; cursor: pointer; font-size: 14px;
}
.btn:hover { background: #37435a; }
.btn.primary { background: #c99b1f; color: #14181f; font-weight: 600; }
.btn.primary:hover { background: #e0b331; box-shadow: 0 2px 12px rgba(201,155,31,.35); }
.btn.gold { background: linear-gradient(135deg, #e6b93c, #d49a1f); color: #14181f; font-weight: 600; box-shadow: 0 1px 2px rgba(0,0,0,.25); }
.btn.gold:hover { background: linear-gradient(135deg, #f2c94e, #e0ad2e); box-shadow: 0 3px 14px rgba(230,185,60,.4); }
.btn:disabled { opacity: 0.5; cursor: not-allowed; }
/* v1/v2 量化版本切换按钮 */
.qv2-toggle { margin-left: 6px; padding: 6px 14px; font-size: 13px; }
.qv2-toggle.active { background: #1D6F9C; color: #fff; font-weight: 600; }
.qv2-toggle.active:hover { background: #2582b6; }
/* ===== 交互反馈：按压缩放(≤160ms) + hover 过渡；高频数据区不动画 ===== */
.btn, .tab, .nav-item, .m-tab, .m-drawer-item, .ltab, .lc-toggle, .popup-close, .backtop, .pwd-eye,
.btn-mini, .toast-act, .admin-tab, .um-item, .um-logout, .user-menu-btn {
  transition: background-color var(--aur-t-fast), border-color var(--aur-t-fast), color var(--aur-t-fast), box-shadow var(--aur-t-fast), transform var(--aur-t-press);
}
.btn:active, .tab:active, .nav-item:active, .m-tab:active, .m-drawer-item:active,
  .ltab:active, .popup-close:active, .backtop:active,
.btn-mini:active, .toast-act:active, .admin-tab:active, .um-item:active, .um-logout:active, .user-menu-btn:active {
  transform: scale(.97);
}
.pwd-eye:active { transform: translateY(-50%) scale(.95); }  /* 保留垂直居中偏移 */
.tool-card:active { transform: scale(.98); }
.progress {
  margin-top: 12px; background: #242c39; border-radius: 6px; height: 20px;
  position: relative; overflow: hidden;
}
.bar { width: 0; height: 100%; background: linear-gradient(90deg, #c99b1f, #ffd54a); transition: width .2s; box-shadow: 0 0 10px rgba(255,213,74,.3); }
.ptext {
  position: absolute; inset: 0; display: flex; align-items: center;
  justify-content: center; font-size: 12px; color: #e6e9ef;
}
.meta { margin-top: 8px; font-size: 13px; color: #aab3c2; }
table { width: 100%; border-collapse: collapse; font-size: 13px; font-variant-numeric: tabular-nums; }
th, td { padding: 7px 8px; text-align: left; border-bottom: 1px solid #242c39; white-space: nowrap; }
th { color: #8a93a3; font-weight: 600; background: #202632; letter-spacing: .3px; }
/* 内部滚动容器中表头固定在容器顶部（同桌面端 QTableWidget 表头不随内容滚动） */
.screen-left th, .sector-table-wrap th,
.tool-table th, .tool-panel th, .track-table-wrap th {
  position: sticky; top: 0; background: #202632; z-index: 1;
}
tbody tr { transition: background-color .12s ease; }
tbody tr:hover { background: #222b38; }
td.up { color: #f2574f; }
td.down { color: #4dbf74; }
/* 开盘涨幅是竞价决策的核心数字：加大加粗 + 底色胶囊，视觉权重大于当前涨幅 */
.quant-open { color: #d9b44a; font-size: 16px; font-weight: 800; background: rgba(217, 180, 74, .10);
  border-radius: 6px; padding: 2px 8px; display: inline-block; margin: 2px 0; }
.quant-current { font-size: 14px; font-weight: 700; }
.quant-current.up { color: #f2574f; }
.quant-current.down { color: #4dbf74; }
.quant-open.up { color: #f0c84b; background: rgba(240, 200, 75, .14); }
.quant-open.down { color: #63c985; background: rgba(99, 201, 133, .12); }
td.small { font-size: 12px; color: #8a93a3; max-width: 220px; overflow: hidden; text-overflow: ellipsis; }
td.empty { text-align: center; color: #9aa5b5; padding: 24px; }
.placeholder { color: #9aa5b5; padding: 12px 0; }
/* 骨架屏：加载中的灰色流光占位 */
@keyframes sk-shine { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
.sk {
  background: linear-gradient(90deg, #222a36 25%, #2b3542 37%, #222a36 63%);
  background-size: 200% 100%; animation: sk-shine 1.4s ease infinite;
  border-radius: 6px;
}
.sk-note { color: #8a93a3; font-size: 12px; margin-bottom: 8px; }
.ov-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 12px; }
.ov-card { background: #202632; border-radius: 8px; padding: 14px; text-align: center; }
.ov-name { font-size: 13px; color: #8a93a3; }
.ov-up { font-size: 22px; font-weight: 700; color: #f2574f; margin-top: 6px; }
.ov-down { font-size: 22px; font-weight: 700; color: #4dbf74; margin-top: 6px; }
#pools-box h3 { color: #ffd54a; font-size: 14px; margin: 10px 0 6px; }
#pools-box { max-height: 70vh; overflow: auto; }

/* ============ Web V2 布局 ============ */
.hidden { display: none !important; }
main { padding-top: 12px; }

/* 桌面版布局：上方导航/行情 + 左侧导航栏 + 右侧内容 */
.layout { display: flex; align-items: flex-start; width: 100%; margin: 0; }
.sidenav {
  width: 158px; flex-shrink: 0; position: sticky; top: 100px;
  background: #1b212b; border-right: 1px solid #2a3240;
  padding: 14px 10px; min-height: calc(100vh - 120px);
  box-shadow: inset -1px 0 0 rgba(255,255,255,.02);
}
.nav-brand {
  text-align: center; color: #ffd54a; font-size: 15px; font-weight: 700;
  letter-spacing: 1px; padding: 6px 0 14px; border-bottom: 1px solid #2a3240; margin-bottom: 10px;
}
.navlist { display: flex; flex-direction: column; gap: 4px; }
.nav-item {
  position: relative; background: transparent; color: #b7bfcc; border: 0; text-align: left;
  padding: 9px 14px 9px 17px; border-radius: 8px; cursor: pointer; font-size: 14px;
}
.nav-item:hover { background: #242c39; }
.nav-item.active {
  background: linear-gradient(90deg, rgba(255,213,74,.09), rgba(255,213,74,.02));
  color: #ffd54a; font-weight: 600;
}
.nav-item.active::before {
  content: ""; position: absolute; left: 0; top: 50%; transform: translateY(-50%);
  width: 3px; height: 55%; border-radius: 0 3px 3px 0;
  background: linear-gradient(180deg, #ffe9a8, #d9a83c);
}
.nav-sep { height: 1px; background: #2a3240; margin: 8px 10px; }
.layout main { flex: 1; min-width: 0; padding: 12px 22px; max-width: none; margin: 0; }
.ptitle { font-size: 16px; color: #e6e9ef; font-weight: 700; letter-spacing: .2px; }
.ptitle .muted { font-size: 12px; color: #8a93a3; font-weight: 400; margin-left: 6px; }
.row.head { margin-bottom: 4px; }

/* 顶部行情栏（仿桌面端 MarketBar：两行卡片布局） */
/* ============ 顶部行情栏：8 张大数据卡（Bloomberg Terminal × 极光金） ============ */
.marketbar {
  position: sticky; top: 0; z-index: 40;
  background:
    linear-gradient(180deg, #1d2430 0%, #171c25 100%),
    radial-gradient(circle at 20% 0%, rgba(255, 213, 74, 0.06) 0%, transparent 60%);
  border-bottom: 1px solid #2a3240;
  padding: 9px 14px;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.25);
}
.marketbar.marketbar-collapsed { display: none !important; }
.mb-inner { width: 100%; }
.mb-track {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr 1fr 0.85fr 0.85fr 1fr 1.2fr;
  gap: 8px;
  min-width: 0;
}

/* 单张卡（统一形态：顶部色带 + 内嵌深色 + 双列对比 + SF Mono 大数字） */
.mb-tile {
  position: relative;
  background: linear-gradient(135deg, #1b212b 0%, #171c24 100%);
  border: 1px solid #2a3240;
  border-radius: 8px;
  padding: 8px 10px 9px;
  min-width: 0;
  overflow: hidden;
  transition: border-color .15s ease, transform .15s ease;
}
.mb-tile:hover {
  border-color: #c99b1f;
  transform: translateY(-1px);
}
/* 顶部色带：每张卡独立的语义色辉光 */
.mb-tile::before {
  content: ""; position: absolute;
  top: 0; left: 0; right: 0; height: 2px;
  background: var(--tile-tone, #c99b1f);
  opacity: 0.85;
  box-shadow: 0 0 8px var(--tile-tone, #c99b1f);
}
/* 右下角弱色辉光（呼应顶部色带，强化卡片识别） */
.mb-tile::after {
  content: ""; position: absolute;
  bottom: -20px; right: -20px;
  width: 50px; height: 50px;
  background: var(--tile-tone, #c99b1f);
  opacity: 0.06;
  border-radius: 50%;
  filter: blur(8px);
  pointer-events: none;
}
.mb-tile[data-tone="gold"]         { --tile-tone: #ffd54a; }
.mb-tile[data-tone="count"]        { --tile-tone: #5fa9ff; }
.mb-tile[data-tone="mood"]         { --tile-tone: #c99b1f; }
.mb-tile[data-tone="limits"]       { --tile-tone: #ff3b45; }
.mb-tile[data-tone="broken"]       { --tile-tone: #ff9a3c; }
.mb-tile[data-tone="broken-rate"]  { --tile-tone: #b86c1f; }
.mb-tile[data-tone="premium"]      { --tile-tone: #d770ff; }
.mb-tile[data-tone="height"]       { --tile-tone: #5fe7c8; }

/* 卡头：标题 + 副标识 */
.tile-head {
  display: flex; align-items: center; justify-content: space-between;
  font-size: 11px; color: #8a93a3; font-weight: 700;
  margin-bottom: 4px;
  letter-spacing: 0.3px;
}
.tile-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tile-name-double { display: inline-flex; gap: 4px; }
.tile-name-double .seg {
  padding: 1px 5px; border-radius: 3px; font-size: 10px;
  background: #202632; color: #aab3c2;
}
.tile-name-double .seg.up { background: #f2574f22; color: #f2574f; }
.tile-name-double .seg.down { background: #4dbf7422; color: #4dbf74; }
.tile-tag {
  font-size: 9px; padding: 1px 5px; border-radius: 3px;
  background: #202632; color: #5b6674; letter-spacing: 0.5px;
}
/* 情绪周期标签（卡 3）：周期语义色 + 半透明底；标签文字本身承载语义，颜色仅强化氛围 */
.tile-tag.phase-ice { background: #4a7dff22; color: #7db3ff; }
.tile-tag.phase-start { background: #5fe7c822; color: #6fe3c6; }
.tile-tag.phase-fever { background: #ffd54a22; color: #ffd54a; }
.tile-tag.phase-high { background: #f2574f22; color: #ff8a7f; }
.tile-tag.phase-wash { background: #4dbf7422; color: #5ddb8e; }

/* 大数字（单行 + SF Mono + 品牌色） */
.tile-num {
  font-size: 22px; font-weight: 800;
  font-family: ui-monospace, "SF Mono", "Cascadia Code", "JetBrains Mono", Consolas, monospace;
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
  letter-spacing: -0.3px;
  color: #ffd54a;
  text-shadow: 0 0 10px rgba(255, 213, 74, 0.18);
}
.tile-mood .tile-num { color: #ffd54a; }
.tile-limits .tile-num,
.tile-broken .tile-num,
.tile-broken-rate .tile-num { color: #d5d9e0; }

/* 双列卡片（卡 2 / 4 / 5 / 6 / 7 / 8） */
.tile-row-2 {
  display: flex; align-items: baseline; gap: 6px;
  margin-bottom: 2px;
}
.tile-row-mini { font-size: 12px; margin-bottom: 4px; }
.tile-row-mini .cell-num { font-size: 14px; }
.tile-cell {
  display: flex; align-items: baseline; gap: 4px;
  flex: 1; min-width: 0;
}
.cell-num {
  font-size: 18px; font-weight: 800;
  font-family: ui-monospace, "SF Mono", "Cascadia Code", "JetBrains Mono", Consolas, monospace;
  font-variant-numeric: tabular-nums;
  line-height: 1.05;
  letter-spacing: -0.2px;
}
.cell-num.up { color: #f2574f; text-shadow: 0 0 6px rgba(242, 87, 79, 0.25); }
.cell-num.down { color: #4dbf74; text-shadow: 0 0 6px rgba(77, 191, 116, 0.25); }
.cell-num.broken { color: #ff9a3c; text-shadow: 0 0 6px rgba(255, 154, 60, 0.25); }
.cell-num.pct { color: #b86c1f; }
.cell-num.premium { color: #d770ff; text-shadow: 0 0 6px rgba(215, 112, 255, 0.25); }
.cell-num.height { color: #5fe7c8; text-shadow: 0 0 6px rgba(95, 231, 200, 0.25); }
.cell-num.leader {
  color: #ffd54a; font-size: 13px;
  max-width: 80px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.cell-num.muted { color: #5b6674; }
.cell-lab {
  font-size: 10px; color: #64707f; font-weight: 600;
  letter-spacing: 0.3px;
}
.cell-divider { color: #354052; font-size: 16px; line-height: 1; }

/* 卡脚：副指标 */
.tile-foot {
  display: flex; align-items: center; gap: 6px;
  font-size: 11px; color: #8a93a3;
  border-top: 1px dashed #2a3240;
  padding-top: 5px; margin-top: 4px;
  min-width: 0;
}
.tile-meta { color: #8a93a3; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tile-meta b { color: #d5d9e0; font-weight: 700; }

/* 卡 2 脚注：成交额加大强调 */
#mb-amount {
  font-family: ui-monospace, "SF Mono", "Cascadia Code", Consolas, monospace;
  font-size: 15px; font-weight: 800; letter-spacing: -0.2px;
  color: #ffd54a; text-shadow: 0 0 8px rgba(255, 213, 74, 0.22);
}
/* 放量 / 缩量标签：文字 + 色块双重强提醒（红=放量 / 绿=缩量，贴合涨跌语义） */
.mb-tag {
  display: inline-block; padding: 1px 6px; border-radius: 4px;
  font-size: 10px; font-weight: 800; letter-spacing: 0.3px;
  font-family: ui-monospace, "SF Mono", "Cascadia Code", Consolas, monospace;
  font-variant-numeric: tabular-nums; line-height: 1.5; white-space: nowrap;
}
.mb-tag-up {
  color: #ffa295; background: rgba(242, 87, 79, 0.16);
  box-shadow: inset 0 0 0 1px rgba(242, 87, 79, 0.35);
}
.mb-tag-dn {
  color: #7fe3a8; background: rgba(77, 191, 116, 0.14);
  box-shadow: inset 0 0 0 1px rgba(77, 191, 116, 0.35);
}

/* 卡 1：指数专属（涨幅 + 点数 + sparkline） */
.tile-pct {
  font-size: 12px; font-weight: 800;
  font-family: ui-monospace, "SF Mono", Consolas, monospace;
}
.tile-pct.up { color: #f2574f; }
.tile-pct.down { color: #4dbf74; }
.tile-pt {
  font-size: 11px; font-weight: 600;
  font-family: ui-monospace, "SF Mono", Consolas, monospace;
  color: #aab3c2;
}
.tile-spark {
  margin-left: auto;
  width: 80px; height: 28px;
  display: block;
}

/* 时间线（大盘直播） */
.tl { position: relative; }
.tl-row { display: flex; gap: 14px; padding: 10px 0; border-bottom: 1px solid #222a36; }
.tl-time { color: #ffd54a; font-weight: 600; min-width: 52px; font-variant-numeric: tabular-nums; }
.tl-user { color: #4a7dff; font-size: 13px; margin-bottom: 2px; }
.tl-comment { color: #c6cdd8; font-size: 13px; line-height: 1.6; white-space: pre-wrap; word-break: break-word; }
.tl-tags { margin-top: 5px; display: flex; flex-wrap: wrap; gap: 6px; }
.tl-tag { font-size: 12px; padding: 2px 8px; border-radius: 10px; border: 1px solid; }
.tl-tag.up { color: #f2574f; border-color: #f2574f55; background: #f2574f14; }
.tl-tag.down { color: #4dbf74; border-color: #4dbf7455; background: #4dbf7414; }

/* 大盘直播（桌面端左右分栏） */
.chip { font-size: 12px; font-weight: 700; padding: 3px 10px; border-radius: 10px; border: 1px solid; background: #1b212b; }
.chip.up { color: #ff3b45; border-color: #f2574f55; }
.chip.down { color: #38d66b; border-color: #4dbf7455; }
.chip.broken { color: #ffcc00; border-color: #ffcc0066; }
/* 股指合约卡片：可收起/展开 */
.idxf-c-head:hover { background: rgba(255,255,255,0.03); }
.idxf-c-head h3 { flex: 0 0 auto; }
.idxf-caret { margin-left: auto; color: #8b94a6; font-size: 13px; line-height: 1; transition: transform .18s ease; }
.idxf-caret.open { color: #ffd54a; transform: rotate(180deg); }
.idxf-c-body { border-top: 1px solid #2a3240; }
.split-h { display: flex; align-items: stretch; gap: 14px; }
.split-col { min-width: 0; }
.live-split .live-left { flex: 0 0 38%; border-right: 1px solid #2a3240; padding-right: 12px; }
.live-split .live-right { flex: 1; min-width: 0; max-height: 68vh; overflow-y: auto; padding-right: 4px; }
.sub-head { color: #ffd54a; font-size: 12px; font-weight: 700; margin: 6px 0 8px; }
.sub-head .sub-count { color: #aab3c2; font-weight: 600; }
.sub-head .sub-count b { font-weight: 800; }
.sub-head .sub-count .up { color: #f2574f; }
.sub-head .sub-count .down { color: #4dbf74; }
.sub-head .sub-count .broken { color: #ff9a3c; }

/* ========== 时间轴：中间纵轴 + 左右交错卡片 ========== */
.tl-board {
  max-height: 68vh; overflow: auto; padding: 4px 4px 4px 0;
  scrollbar-width: thin; scrollbar-color: #2a3240 transparent;
  position: relative;
}
.tl-board::-webkit-scrollbar { width: 6px; }
.tl-board::-webkit-scrollbar-thumb { background: #2a3240; border-radius: 3px; }
.tl-board::-webkit-scrollbar-track { background: transparent; }
/* 主干线：贯穿整列的细金线，挂在 .tl-board 上而非每行（避免卡片高度不同造成断续） */
.tl-board::before {
  content: ""; position: absolute;
  /* 滚动内容相对 tl-board 左对齐 1fr 78px 1fr + gap 10px，左/右 fr 各占 (W-78-20)/2；
     中轴中心 = 左 fr + gap = (W-78)/2。直接用 50% 命中不到，用 calc 修正。 */
  left: calc(50% - 1px);
  width: 2px;
  top: 4px; bottom: 4px;
  background: linear-gradient(to bottom,
    transparent 0,
    #354052 24px,
    #354052 calc(100% - 24px),
    transparent 100%);
  border-radius: 1px;
  pointer-events: none;
  z-index: 0;
}
/* 单行 = 一组同时刻的同向卡片；左列在中央轴左侧（跌停/炸板），右列在中央轴右侧（涨停） */
.tlv-row {
  display: grid;
  grid-template-columns: 1fr 78px 1fr;
  gap: 10px;
  padding: 8px 0;
  position: relative;
}
.tlv-left, .tlv-right { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.tlv-left { align-items: stretch; }
.tlv-right { align-items: stretch; }
/* 中央时间轴：节点圆 + 时间数字 */
.tlv-mid {
  position: relative; text-align: center;
  display: flex; flex-direction: column; align-items: center; justify-content: flex-start;
  padding-top: 12px;
}
/* 时间数字 + 圆点：z-index 高于主线 */
.tlv-time, .tlv-dot { position: relative; z-index: 2; }
.tlv-time {
  font-size: 13px; font-weight: 800;
  font-family: ui-monospace, "SF Mono", "Cascadia Code", "JetBrains Mono", Consolas, monospace;
  letter-spacing: 0.5px;
  color: #ffd54a;
  background: #14181f;
  padding: 2px 4px;
  border-radius: 4px;
  text-shadow: 0 0 8px rgba(255, 213, 74, 0.35);
  display: inline-block;
  margin-bottom: 6px;
}
.tlv-mid[data-kind="limit_up"] .tlv-time { color: #f2574f; text-shadow: 0 0 8px rgba(242, 87, 79, 0.35); }
.tlv-mid[data-kind="limit_down"] .tlv-time { color: #4dbf74; text-shadow: 0 0 8px rgba(77, 191, 116, 0.35); }
.tlv-mid[data-kind="broken"] .tlv-time { color: #ff9a3c; text-shadow: 0 0 8px rgba(255, 154, 60, 0.35); }
/* 圆点：发光节点 */
.tlv-dot {
  display: block;
  width: 14px; height: 14px;
  border-radius: 50%;
  background: #ffd54a;
  box-shadow:
    0 0 0 3px #14181f,
    0 0 0 4px rgba(255, 213, 74, 0.5),
    0 0 12px 2px rgba(255, 213, 74, 0.55);
  margin: 0 auto;
}
.tlv-mid[data-kind="limit_up"] .tlv-dot { background: #f2574f; box-shadow: 0 0 0 3px #14181f, 0 0 0 4px rgba(242,87,79,0.5), 0 0 12px 2px rgba(242,87,79,0.55); }
.tlv-mid[data-kind="limit_down"] .tlv-dot { background: #4dbf74; box-shadow: 0 0 0 3px #14181f, 0 0 0 4px rgba(77,191,116,0.5), 0 0 12px 2px rgba(77,191,116,0.55); }
.tlv-mid[data-kind="broken"] .tlv-dot { background: #ff9a3c; box-shadow: 0 0 0 3px #14181f, 0 0 0 4px rgba(255,154,60,0.5), 0 0 12px 2px rgba(255,154,60,0.55); }

/* ========== 涨跌停卡片（大卡片 / 券商报告风） ========== */
.pool-card {
  background: linear-gradient(135deg, #1b212b 0%, #171c24 100%);
  border: 1px solid #2a3240;
  border-left: 3px solid #d9a83c;
  border-radius: 8px;
  padding: 10px 12px;
  cursor: pointer;
  transition: border-color .15s ease, transform .15s ease, box-shadow .15s ease;
}
.pool-card:hover {
  border-color: #c99b1f;
  transform: translateY(-1px);
  box-shadow: 0 4px 14px rgba(201, 155, 31, 0.18);
}
.pool-card[data-kind="limit_up"] { border-left-color: #f2574f; }
.pool-card[data-kind="limit_down"] { border-left-color: #4dbf74; }
.pool-card[data-kind="broken"] { border-left-color: #ff9a3c; }

/* 第 1 行：股名 + 涨幅 */
.pool-top {
  display: flex; align-items: center; justify-content: space-between; gap: 6px;
  margin-bottom: 6px;
}
.pool-name {
  font-size: 13px; font-weight: 700; color: #e6e9ef;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.pool-pct {
  font-size: 14px; font-weight: 800;
  font-family: ui-monospace, "SF Mono", "Cascadia Code", "JetBrains Mono", Consolas, monospace;
  flex-shrink: 0;
}
.pool-card[data-kind="limit_up"] .pool-pct { color: #f2574f; }
.pool-card[data-kind="limit_down"] .pool-pct { color: #4dbf74; }
.pool-card[data-kind="broken"] .pool-pct { color: #ff9a3c; }
.pool-card[data-kind="limit_up"] .pool-name { color: #ffd54a; }

/* 第 2 行：标签 + 价格 */
.pool-tag-row { display: flex; align-items: center; gap: 6px; margin-bottom: 6px; flex-wrap: wrap; }
.pool-tag {
  font-size: 10px; font-weight: 700;
  padding: 1px 6px; border-radius: 3px;
  background: #2a3240; color: #aab3c2;
  border: 1px solid #354052;
  white-space: nowrap;
}
.pool-tag.tag-limit { background: #f2574f22; color: #f2574f; border-color: #f2574f55; }
.pool-tag.tag-broken { background: #ff9a3c22; color: #ff9a3c; border-color: #ff9a3c55; }
.pool-tag.tag-down { background: #4dbf7422; color: #4dbf74; border-color: #4dbf7455; }
.pool-tag.tag-boards { background: #ffd54a22; color: #ffd54a; border-color: #ffd54a55; }
.pool-tag.tag-board-type { background: #4a7dff22; color: #4a7dff; border-color: #4a7dff55; }
.pool-price {
  margin-left: auto; font-size: 12px; font-weight: 700;
  font-family: ui-monospace, "SF Mono", "Cascadia Code", Consolas, monospace;
  color: #d5d9e0;
}

/* 第 3 行：行业 + 流通市值 */
.pool-meta {
  display: flex; align-items: center; gap: 10px;
  font-size: 11px; color: #aab3c2;
  margin-bottom: 4px;
}
.pool-meta .pool-industry { color: #aab3c2; }
.pool-meta .pool-mv { color: #d5d9e0; font-family: ui-monospace, "SF Mono", Consolas, monospace; }

/* 第 4 行：首封 + 开板/封住（带语义色） */
.pool-times {
  display: flex; align-items: center; justify-content: space-between; gap: 6px;
  font-size: 11px; color: #8a93a3;
  border-top: 1px dashed #2a3240;
  padding-top: 5px; margin-top: 5px;
}
.pool-times .pt-label { color: #64707f; }
.pool-times .pt-val {
  font-family: ui-monospace, "SF Mono", Consolas, monospace;
  color: #d5d9e0;
}
.pool-times .pt-val.broken-cnt { color: #ff9a3c; font-weight: 700; }
.pool-times .pt-val.sealed { color: #4dbf74; font-weight: 700; }
.pool-times .pt-val.warning { color: #f2574f; font-weight: 700; }

/* 实时新增卡片：金色光晕 */
.pool-card.fresh {
  animation: tlv-fresh 1.2s ease-out 1;
}
@keyframes tlv-fresh {
  0%   { box-shadow: 0 0 0 0 rgba(255, 213, 74, 0.55); border-color: #ffd54a; }
  60%  { box-shadow: 0 0 0 6px rgba(255, 213, 74, 0);  border-color: #c99b1f; }
  100% { box-shadow: 0 0 0 0 rgba(255, 213, 74, 0);     border-color: #2a3240; }
}

.live-card {
  background: linear-gradient(90deg, #1d242f, #1a2029);
  border: 1px solid #2a3240; border-left: 3px solid #d9a83c; border-radius: 8px;
  padding: 10px 12px; margin-bottom: 12px;
}
.live-card.latest { border-color: #c99b1f88; }
.live-head { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
.live-time { background: #242c39; color: #e8c54f; border-radius: 9px; padding: 2px 8px; font-size: 12px; font-weight: 700; }
.live-time.now { background: #ffd54a; color: #14181f; }
.badge-latest { background: #ffcc00; color: #14181f; border-radius: 9px; padding: 2px 8px; font-size: 11px; font-weight: 700; }
.live-user { color: #4a7dff; font-size: 12px; margin-left: auto; }

/* 板块追踪（桌面端：左=板块列表+成分股(纵向3:4)，右=资金流图，QSplitter 3:2） */
.sector-split { align-items: stretch; }
.sector-split .sector-left {
  flex: 0 0 58%; display: flex; flex-direction: column;
  border-right: 1px solid #2a3240; padding-right: 12px;
  height: calc(100vh - 178px); min-height: 420px;
}
.sector-split .sector-right { flex: 1; display: flex; flex-direction: column; min-width: 0; }
.sector-table-wrap { flex: 1 1 0; min-height: 0; overflow: auto; }
#sector-fund { flex: 1; min-height: 340px; width: 100%; }
#sector-table tr.active { background: #2b271a; }
/* 固定列宽（Qt setColumnWidth：列宽显式声明；table-layout:fixed 使表格按声明比例铺满容器） */
.sector-table-wrap table { table-layout: fixed; width: 100%; }
.sector-table-wrap th:nth-child(1) { width: 76px; }
.sector-table-wrap th:nth-child(2) { width: 118px; }
.sector-table-wrap th:nth-child(3) { width: 76px; }
.sector-table-wrap th:nth-child(4) { width: 84px; }
.sector-table-wrap th:nth-child(5) { width: 84px; }
.sector-table-wrap th:nth-child(6) { width: 140px; }
.sector-table-wrap th:nth-child(7) { width: 214px; }  /* 主力净额：拉长容纳资金条 */
.sector-table-wrap th:nth-child(8) { width: 96px; }   /* 量比：收窄回信息本身宽度 */
.sector-table-wrap td { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sector-table-wrap th { white-space: nowrap; }
/* 数字列右对齐（数据密集仪表板：数字按位对齐便于扫描与比较） */
.sector-table-wrap th:nth-child(n+3),
.sector-table-wrap td:nth-child(n+3) { text-align: right; }
.sector-table-wrap th:nth-child(-n+2),
.sector-table-wrap td:nth-child(-n+2) { text-align: left; }
/* 板块表头点击排序（同早盘竞价表） */
#sector-table th[data-key] { cursor: pointer; user-select: none; white-space: nowrap; }
#sector-table th[data-key]:hover { color: #ffcc00; }
#sector-table th.sorted-asc::after { content: " ▲"; color: #ffcc00; font-size: 10px; }
#sector-table th.sorted-desc::after { content: " ▼"; color: #ffcc00; font-size: 10px; }
/* 板块追踪表格 · 暗夜 OLED（UI Pro Max: dark-mode-oled）：深底/高对比/数字微光/近隐分隔线 */
.sector-table-wrap {
  background: linear-gradient(180deg, #0b0e15, #0d1017);
  border: 1px solid rgba(255, 255, 255, .05);
  border-radius: 10px;
  scrollbar-width: thin;
  scrollbar-color: #262e3c transparent;
}
.sector-table-wrap th, .sector-table-wrap td { border-bottom: 1px solid rgba(255, 255, 255, .045); }
.sector-table-wrap thead th {
  position: sticky; top: 0; z-index: 2;
  background: #0e1219; color: #93a0b3;
  border-bottom: 1px solid rgba(255, 213, 74, .22);
  font-weight: 700; letter-spacing: .5px;
}
.sector-table-wrap tbody tr { transition: background-color .12s ease, box-shadow .12s ease; }
.sector-table-wrap tbody tr:hover { background: rgba(255, 213, 74, .05); box-shadow: inset 2px 0 0 rgba(255, 213, 74, .45); }
#sector-table tbody tr.active { background: rgba(255, 213, 74, .1); box-shadow: inset 2px 0 0 rgba(255, 213, 74, .75); }
#sector-table tbody tr.active:hover { background: rgba(255, 213, 74, .14); }
.sector-table-wrap td.up { color: #ff665e; text-shadow: 0 0 10px rgba(255, 102, 94, .4); }
.sector-table-wrap td.down { color: #55cc82; text-shadow: 0 0 10px rgba(85, 204, 130, .4); }
.sector-table-wrap td { position: relative; }
.net-bar { position: absolute; left: 8px; bottom: 3px; height: 2px; border-radius: 2px; pointer-events: none; }
td.up .net-bar { background: linear-gradient(90deg, rgba(255, 102, 94, .7), rgba(255, 102, 94, .2)); box-shadow: 0 0 6px rgba(255, 102, 94, .45); }
td.down .net-bar { background: linear-gradient(90deg, rgba(85, 204, 130, .7), rgba(85, 204, 130, .2)); box-shadow: 0 0 6px rgba(85, 204, 130, .45); }
#sector-table th[data-key]:hover { color: #ffd54a; text-shadow: 0 0 8px rgba(255, 213, 74, .5); }

.btn.mini { padding: 3px 10px; font-size: 12px; }
/* 账号管理：在线状态 + 备注输入 */
.online-dot, .offline-dot {
  display: inline-block; width: 8px; height: 8px; border-radius: 50%;
  margin-right: 4px; vertical-align: middle;
}
.online-dot { background: #34c759; box-shadow: 0 0 4px rgba(52,199,89,.6); }
.offline-dot { background: #6b7280; }
.note-input {
  background: #14181f; border: 1px solid #2a3240; border-radius: 4px;
  color: #d5d9e0; padding: 3px 6px; width: 130px; font-size: 12px;
}
.note-input:focus-visible { outline: 2px solid var(--aur-focus); outline-offset: 1px; border-color: var(--aur-dim); }
.ai-text {
  background: #1b212b; border: 1px solid #2a3240; border-radius: 6px;
  color: #d5d9e0; padding: 8px 10px; font-size: 13px; line-height: 1.8;
  min-height: 120px; white-space: pre-wrap;
}
.btn.danger { background: #5a2f33; color: #f2a0a0; }
.btn.danger:hover { background: #6d3a40; }
.btn[disabled] { opacity: .45; cursor: not-allowed; }

/* 账号管理：统计卡片 / 工具栏 / 分页 / 分组 / 页面权限 */
.acct-wide { max-width: none !important; }
.admin-page-subtitle { margin-top: 3px; font-size: 12px; }
.acct-card-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.acct-section-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; margin-top: 16px; padding-bottom: 8px; border-bottom: 1px solid #2a3240; }
.admin-section-title { color: #e6e9ef; font-size: 14px; font-weight: 700; }
.admin-section-desc { margin-top: 3px; font-size: 12px; }
.acct-result-count { white-space: nowrap; font-size: 12px; }
.acct-stats {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));
  gap: 12px; margin-bottom: 14px;
}
.admin-tabs {
  display: flex; gap: 4px; overflow-x: auto; padding: 4px;
  margin: 0 0 4px; border-bottom: 1px solid #2a3240;
  scrollbar-width: thin;
}
.admin-tab {
  flex: 0 0 auto; border: 1px solid transparent; border-radius: 6px 6px 0 0;
  background: transparent; color: #9ca6b6; padding: 9px 14px;
  font-size: 13px; cursor: pointer; white-space: nowrap;
  transition: background .15s ease, color .15s ease, border-color .15s ease, transform var(--aur-t-press);
}
.admin-tab:hover { background: #202733; color: #e6e9ef; }
.admin-tab.active {
  background: #2b271a; color: #ffd54a; border-color: #6b5a22 #6b5a22 #2b271a;
  font-weight: 700;
}
.admin-tab-panel { display: none; }
.admin-tab-panel.active { display: block; }

/* 管理员合并面板：内部子标签 */
.asubtabs { display: flex; flex-wrap: wrap; gap: 6px; margin: 12px 0 4px; }
.asubtab {
  background: transparent; color: #9ca6b6; border: 1px solid #2a3240;
  padding: 6px 14px; border-radius: 7px; cursor: pointer; font-size: 13px;
  transition: color .15s ease, background-color .15s ease, border-color .15s ease;
}
.asubtab:hover { background: #202733; color: #e6e9ef; }
.asubtab.active {
  background: #2b271a; color: #ffd54a; border-color: #6b5a22;
  font-weight: 700; box-shadow: 0 0 12px rgba(201, 155, 31, .1);
}
.asub-panel { display: none; }
.asub-panel.active { display: block; }
/* 总览三卡内的紧凑统计网格 */
.dash-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-top: 10px; margin-bottom: 4px; }

.admin-stats-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; margin-top: 16px; padding-bottom: 10px; border-bottom: 1px solid #2a3240; }
.admin-stat-cards { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-top: 14px; }
.admin-stat-card { min-height: 110px; padding: 15px 16px; border: 1px solid #2c3546; border-radius: 10px; background: #171c24; display: flex; flex-direction: column; justify-content: space-between; transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease; }
.admin-stat-card:hover { transform: translateY(-2px); border-color: #3d4a5e; box-shadow: 0 8px 20px rgba(0, 0, 0, .28); }
.admin-stat-card span { color: #b7c0ce; font-size: 13px; }
.admin-stat-card strong { font-size: 30px; line-height: 1; font-variant-numeric: tabular-nums; color: #eaf0f8; letter-spacing: .5px; }
.admin-stat-card small { color: #8995a6; font-size: 12px; }
.admin-stat-card.blue { border-top: 3px solid #3388f5; background: linear-gradient(180deg, rgba(51, 136, 245, .09), rgba(23, 28, 36, 0) 55%), #171c24; }
.admin-stat-card.cyan { border-top: 3px solid #38cbd0; background: linear-gradient(180deg, rgba(56, 203, 208, .09), rgba(23, 28, 36, 0) 55%), #171c24; }
.admin-stat-card.green { border-top: 3px solid #58c878; background: linear-gradient(180deg, rgba(88, 200, 120, .09), rgba(23, 28, 36, 0) 55%), #171c24; }
.admin-stat-card.orange { border-top: 3px solid #f29a48; background: linear-gradient(180deg, rgba(242, 154, 72, .10), rgba(23, 28, 36, 0) 55%), #171c24; }
.admin-stat-grid { display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(280px, .85fr); gap: 12px; margin-top: 12px; }
.admin-stat-panel { padding: 16px; border: 1px solid #2c3546; border-radius: 10px; background: #171c24; }
.admin-panel-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.admin-stat-panel h4 { margin: 0 0 16px; color: #e6e9ef; font-size: 15px; }
.admin-panel-head h4 { margin-bottom: 0; }
/* 热门页面：今日/近7日/近30日 切换 tab */
.admin-range-tabs { display: flex; gap: 6px; }
.admin-range-tab { border: 1px solid #2c3546; background: transparent; color: #8a93a3; border-radius: 999px; padding: 3px 12px; font-size: 12px; cursor: pointer; transition: color .15s ease, border-color .15s ease, background .15s ease; }
.admin-range-tab:hover { color: #e6e9ef; border-color: #3a4658; }
.admin-range-tab.active { background: #3388f5; border-color: #3388f5; color: #fff; }
.admin-bars { display: grid; gap: 14px; }
.admin-bar-row { display: grid; grid-template-columns: 88px minmax(80px, 1fr) 42px; align-items: center; gap: 10px; color: #aeb8c8; font-size: 12px; }
.admin-bar-row b { color: #e6e9ef; text-align: right; font-variant-numeric: tabular-nums; }
.admin-bar-track { height: 9px; border-radius: 99px; background: #2a3240; overflow: hidden; }
.admin-bar-track i { display: block; height: 100%; min-width: 2px; border-radius: inherit; transition: width .45s ease; }
.admin-bar-track i.good { background: #55c978; }
.admin-bar-track i.muted { background: #78869a; }
.admin-bar-track i.danger { background: #ed6259; }
.admin-bar-track i.warn { background: #f1a34d; }
/* 访问趋势图（此前缺少基础样式，图表显示为裸 div） */
.admin-trend { display: flex; align-items: flex-end; gap: 6px; height: 180px; padding: 4px 2px 0; }
.admin-trend-col { flex: 1 1 0; min-width: 0; display: flex; flex-direction: column; justify-content: flex-end; align-items: stretch; gap: 6px; height: 100%; text-align: center; cursor: default; }
.admin-trend-col i { display: block; width: 100%; min-height: 3px; border-radius: 4px 4px 2px 2px; background: linear-gradient(180deg, #3f8ef7, #2b5cb3); opacity: .85; transition: opacity .15s ease, filter .15s ease; }
/* 日活人数趋势柱：青绿区分请求量蓝柱（置于 .today 之前，今日黄色高亮仍优先生效） */
.admin-trend-col.da i { background: linear-gradient(180deg, #35c08e, #1f7a5c); }
.admin-trend-col:hover i { opacity: 1; filter: brightness(1.25); }
.admin-trend-col small { color: #8995a6; font-size: 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.admin-trend-col.today i { background: linear-gradient(180deg, #ffd54a, #c99a1f); opacity: 1; }
.admin-trend-col.today small { color: #ffd54a; font-weight: 700; }
.admin-trend-legend { display: flex; gap: 14px; margin-top: 10px; color: #8995a6; font-size: 12px; }
/* 统计面板入场动画（尊重系统减弱动效设置） */
@keyframes adminFadeUp { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.admin-stat-cards > *, .admin-stat-panel { animation: adminFadeUp .3s ease both; }
.admin-stat-cards > *:nth-child(2) { animation-delay: .04s; }
.admin-stat-cards > *:nth-child(3) { animation-delay: .08s; }
.admin-stat-cards > *:nth-child(4) { animation-delay: .12s; }
@media (prefers-reduced-motion: reduce) {
  .admin-stat-cards > *, .admin-stat-panel { animation: none; }
  .admin-stat-card, .admin-bar-track i, .admin-trend-col i, #acct-users tbody tr { transition: none; }
}
.admin-group-list, .admin-recent-list { display: grid; gap: 0; }
.admin-group-list > div, .admin-recent-list > div { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 0; border-bottom: 1px solid #29313e; color: #c2cad6; font-size: 13px; }
.admin-group-list > div:last-child, .admin-recent-list > div:last-child { border-bottom: 0; }
.admin-group-list b { color: #e6e9ef; font-variant-numeric: tabular-nums; }
.admin-recent-panel { margin-top: 12px; }
.admin-recent-list span { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.admin-recent-list b { color: #e6e9ef; font-weight: 700; }
.admin-recent-list small, .admin-recent-list em { color: #8995a6; font-size: 12px; font-style: normal; }
.acct-stat {
  background: linear-gradient(180deg, #1b212b, #151a21);
  border: 1px solid #2c3546; border-radius: 10px;
  padding: 14px 12px; text-align: center;
}
.acct-stat-num { font-size: 26px; font-weight: 800; color: #ffd23f; line-height: 1.2; font-variant-numeric: tabular-nums; }
.acct-stat-num.warn { color: #ff8f3d; }
.acct-stat .muted { font-size: 12px; margin-top: 4px; }
.acct-toolbar { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px; margin: 12px 0 8px; }
.acct-search-wrap, .acct-filter-wrap { display: flex; align-items: center; gap: 6px; }
.acct-search-wrap .acct-input { width: 180px; padding-right: 26px; }
.acct-filter-wrap .acct-input { min-width: 130px; }
.acct-search-clear {
  position: absolute; right: 8px; top: 50%; transform: translateY(-50%);
  width: 18px; height: 18px; padding: 0; border: 0; border-radius: 50%;
  background: #2e3746; color: #aeb8c8; font-size: 12px; line-height: 18px;
  cursor: pointer; display: none;
}
.acct-search-clear:hover { background: #3a4557; color: #e6e9ef; }
.acct-search-wrap.has-value .acct-search-clear { display: block; }
.acct-search-wrap { position: relative; }
/* 状态徽章 */
.acct-badge {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 2px 9px; border-radius: 99px; border: 1px solid;
  font-size: 12px; line-height: 1.6; white-space: nowrap;
}
.acct-badge::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; flex: 0 0 auto; }
.acct-badge.good { color: #6fdd93; border-color: #2e5c3f; background: rgba(64, 160, 96, .12); }
.acct-badge.mutedb { color: #9aa6b6; border-color: #39424f; background: rgba(120, 134, 154, .10); }
.acct-badge.danger { color: #f2938c; border-color: #6d3a40; background: rgba(230, 90, 80, .12); }
.acct-badge.warn { color: #f5b96a; border-color: #6b5426; background: rgba(240, 160, 70, .12); }
.acct-badge.admin { color: #ffd54a; border-color: #6b5a22; background: rgba(255, 213, 74, .10); }
/* 表格行交互 */
#acct-users tbody tr { transition: background .12s ease; }
#acct-users tbody tr:nth-child(even) { background: rgba(255, 255, 255, .014); }
#acct-users tbody tr:hover { background: #1d2531; }
/* 批量操作栏：上下文感知 */
.acct-batchbar {
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
  margin: 8px 0 12px; padding: 10px;
  background: #1a2029; border: 1px solid #2a3340; border-radius: 8px;
  transition: border-color .15s ease, background .15s ease;
}
.acct-batchbar.has-sel { border-color: #6b5a22; background: #211d12; }
.acct-batchbar .btn[disabled] { opacity: .4; cursor: not-allowed; }
.acct-sel-pill {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 2px 10px; border-radius: 99px; border: 1px solid #6b5a22;
  background: rgba(255, 213, 74, .10); color: #ffd54a;
  font-size: 12px; font-weight: 700; white-space: nowrap;
}
/* 统一确认弹窗 */
.ui-confirm-msg { padding: 4px 2px 2px; color: #d6dde7; font-size: 14px; line-height: 1.7; white-space: pre-line; }
.ui-confirm-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 16px; }
.acct-batch-title { color: #e6e9ef; font-weight: 700; font-size: 13px; }
.acct-table-wrap { overflow-x: auto; border: 1px solid #2a3340; border-radius: 6px; }
.acct-table-wrap table { min-width: 1120px; margin: 0; }
.acct-table-wrap table th { position: sticky; top: 0; z-index: 1; background: #202632; }
.acct-input {
  background: #14181f; border: 1px solid #2a3240; border-radius: 5px;
  color: #d5d9e0; padding: 5px 8px; font-size: 13px;
}
.acct-input:focus-visible { outline: 2px solid var(--aur-focus); outline-offset: 1px; border-color: var(--aur-gold); }
.acct-pager { display: flex; align-items: center; gap: 10px; margin-top: 12px; font-size: 13px; }
/* 2FA 管理卡片收起态：隐藏统计、列表、分页 */
#acct-security.collapsed #sec-stats,
#acct-security.collapsed #sec-2fa-list,
#acct-security.collapsed #sec-2fa-pager { display: none; }
.acct-ops { white-space: nowrap; }
.btn-mini {
  display: inline-block; border: 1px solid #3a4354; background: #232a36; color: #cdd3de;
  border-radius: 5px; padding: 3px 8px; font-size: 12px; line-height: 1.4; cursor: pointer;
  transition: background .15s, transform var(--aur-t-press);
}
.btn-mini:hover { background: #2e3746; }
.btn-mini.primary { color: #ffd54a; border-color: #6b5a22; background: #2b271a; }
.btn-mini.primary:hover { background: #38331f; }
.btn-mini.danger { color: #f2a0a0; border-color: #6d3a40; background: #32272a; }
.btn-mini.danger:hover { background: #3d2c30; }
.btn-mini[disabled] { opacity: .4; cursor: not-allowed; }
#acct-users table th, #acct-users table td { white-space: nowrap; }
#acct-users .note-input { width: 110px; }
@media (max-width: 680px) {
  .admin-page-subtitle { line-height: 1.5; }
  .admin-stats-head { align-items: flex-start; flex-direction: column; }
  .admin-stat-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .admin-stat-grid { grid-template-columns: 1fr; }
  .admin-stat-card { min-height: 96px; padding: 12px; }
  .admin-stat-card strong { font-size: 25px; }
  .admin-bar-row { grid-template-columns: 76px minmax(60px, 1fr) 34px; gap: 7px; }
  .admin-stat-panel { padding: 13px; }
  .admin-trend { height: 150px; gap: 3px; }
  .admin-trend-col small { font-size: 8px; }
  .admin-trend-legend { flex-direction: column; gap: 5px; }

  .acct-card-head, .acct-section-head { align-items: flex-start; flex-direction: column; }
  .acct-card-head .btn { align-self: flex-start; }
  .acct-toolbar { align-items: stretch; flex-direction: column; }
  .acct-search-wrap, .acct-filter-wrap { justify-content: space-between; }
  .acct-search-wrap .acct-input, .acct-filter-wrap .acct-input { flex: 1; width: auto; min-width: 0; }
  .acct-result-count { align-self: flex-start; }
  .acct-batchbar { align-items: stretch; }
  .acct-batchbar .btn, .acct-batchbar .acct-input { flex: 1 1 auto; }
}
.page-tool-row.denied { opacity: .55; }

/* 涨停聚焦 tab */
.ltabs { display: flex; gap: 4px; margin: 8px 0 2px; }
.ltab {
  background: transparent; color: #b7bfcc; border: 1px solid #2a3240; padding: 6px 16px;
  border-radius: 8px 8px 0 0; cursor: pointer; font-size: 13px;
  transition: color .15s ease, background-color .15s ease, border-color .15s ease;
}
.ltab:hover { background: #242c39; color: #e6e9ef; }
.ltab.active {
  background: linear-gradient(180deg, #191b22, #12151c); color: #ffd54a;
  border-color: #6b5a22; letter-spacing: .3px;
  box-shadow: inset 0 2px 0 rgba(255,213,74,.4), 0 0 14px rgba(201,155,31,.12);
  text-shadow: 0 0 12px rgba(255,213,74,.25);
}
/* 量化选股（quant_select）双页签：下划线分隔页签 + 胶囊按钮，面板共用卡片底色 */
#quant-select-root .ltabs { border-bottom: 1px solid #2a3240; margin: 4px 0 12px; padding-bottom: 8px; }
#quant-select-root .ltab { border-radius: 6px; }
.qtab-pane { display: block; }
.ltab-panel h3 {
  color: #ffd54a; font-size: 14px; margin: 12px 0 6px;
  display: flex; align-items: center; gap: 8px; letter-spacing: .4px;
}
.ltab-panel h3::before {
  content: ""; width: 3px; height: 14px; border-radius: 2px; flex: 0 0 auto;
  background: linear-gradient(180deg, #ffd54a, #c99b1f);
  box-shadow: 0 0 8px rgba(255,213,74,.35);
}
.ltab-panel h3::after {
  content: ""; flex: 1; height: 2px; margin-left: 4px; border-radius: 2px;
  background: linear-gradient(90deg, rgba(255,213,74,.3), transparent);
}
/* 涨停池四池色标：金(涨停) / 橙(炸板) / 蓝(跌停) / 青(昨涨停今表现) */
.ltab-panel h3.pool-zt::before { background: linear-gradient(180deg, #ffd54a, #c99b1f); box-shadow: 0 0 8px rgba(255,213,74,.35); }
.ltab-panel h3.pool-zb::before { background: linear-gradient(180deg, #ff9f43, #d97706); box-shadow: 0 0 8px rgba(255,159,67,.35); }
.ltab-panel h3.pool-dt::before { background: linear-gradient(180deg, #5aa7ff, #2f6fce); box-shadow: 0 0 8px rgba(90,167,255,.35); }
.ltab-panel h3.pool-yzt::before { background: linear-gradient(180deg, #3dd6c8, #0f9e93); box-shadow: 0 0 8px rgba(61,214,200,.35); }
.ltab-panel h3.pool-zt::after { background: linear-gradient(90deg, rgba(255,213,74,.55), transparent); }
.ltab-panel h3.pool-zb::after { background: linear-gradient(90deg, rgba(255,159,67,.55), transparent); }
.ltab-panel h3.pool-dt::after { background: linear-gradient(90deg, rgba(90,167,255,.55), transparent); }
.ltab-panel h3.pool-yzt::after { background: linear-gradient(90deg, rgba(61,214,200,.55), transparent); }
.multi-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 14px; }
/* 多维统计三卡 OLED */
.multi-grid > div {
  background: linear-gradient(180deg, #0b0e15, #0d1017);
  border: 1px solid rgba(255,255,255,.05); border-radius: 10px;
  padding: 4px 10px 10px; box-shadow: 0 2px 10px rgba(0,0,0,.25);
}
.multi-grid table th {
  background: linear-gradient(180deg, #151a24, #10141c);
  position: sticky; top: 0; z-index: 1;
}
.multi-grid td.cnt {
  position: relative; text-align: right; min-width: 46px;
  padding-right: 2px; overflow: visible;
}
.multi-grid .cnt-bar {
  position: absolute; right: 0; bottom: 0; height: 3px;
  border-radius: 2px 0 0 2px;
  background: linear-gradient(90deg, rgba(255,213,74,.12), rgba(255,213,74,.8));
  box-shadow: 0 0 6px rgba(255,213,74,.2);
}
.multi-grid .cnt-num { position: relative; color: #ffd54a; font-weight: 700; }
.multi-grid tbody tr:hover { background: rgba(255,213,74,.04); box-shadow: inset 2px 0 0 rgba(255,213,74,.5); }
/* 涨停聚焦内表格表头 OLED */
.ltab-panel table th { background: linear-gradient(180deg, #151a24, #10141c); color: #9aa3b2; }
.ltab-panel tbody tr:hover { background: rgba(255,213,74,.04); box-shadow: inset 2px 0 0 rgba(255,213,74,.35); }

/* 板块轮动 */
.dim { color: #555d6b; font-size: 11px; }

/* 功能区 */
.tools-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 14px; }
.tool-card {
  background: #1b212b; border: 1px solid #2a3240; border-radius: 12px; padding: 16px;
  cursor: pointer; transition: border-color .15s ease, transform .16s ease-out, box-shadow .2s ease, background-color .15s ease;
}
.tool-card:hover {
  border-color: #c99b1f88; transform: translateY(-1px);
  box-shadow: 0 6px 18px rgba(0,0,0,.3), 0 1px 0 rgba(255,255,255,.03) inset;
}
.tool-icon { font-size: 26px; }
.tool-name { font-size: 15px; font-weight: 600; color: #e6e9ef; margin: 6px 0 4px; }
.tool-desc { font-size: 12px; color: #8a93a3; }
/* 功能区中「移入页面」卡片：右上角标注页面标识 */
.tool-card.tool-page .tool-icon { position: relative; }
.tool-card.tool-page .tool-icon::after {
  content: "页面"; position: absolute; right: -6px; top: -8px;
  font-size: 10px; line-height: 1.4; padding: 0 4px; border-radius: 4px;
  background: #2a3240; color: #ffcc00; border: 1px solid #c99b1f66;
}
.tool-panel { margin-top: 10px; border-top: 1px dashed #2a3240; padding-top: 10px; }
.tool-table { max-height: 420px; overflow: auto; }
.tool-panel table { font-size: 12px; }
.tool-panel th, .tool-panel td { padding: 5px 6px; }
/* 逐笔成交图：坐标图 + 说明 */
.tt-note { color: #8a93a3; font-size: 12px; margin: 6px 0 4px; line-height: 1.5; }
.tt-chart { height: 440px; width: 100%; background: #1b212b; border: 1px solid #2a3240; border-radius: 8px; }

/* 公告：普通(白)/重要(黄)/紧急(红)三色题头 */
.ann-item { border: 1px solid #2a3240; border-radius: 8px; margin-bottom: 12px; overflow: hidden; }
.ann-head { display: flex; align-items: center; gap: 10px; padding: 9px 12px; font-size: 14px; }
.ann-head.normal { background: #3a3f4a; color: #ffffff; }
.ann-head.important { background: #C99B1F; color: #14181f; }
.ann-head.urgent { background: #d64550; color: #ffffff; }
.ann-type { font-weight: 700; border: 1px solid currentColor; border-radius: 4px; padding: 1px 6px; font-size: 11px; flex: 0 0 auto; opacity: .85; }
.ann-title { font-weight: 600; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ann-meta { opacity: .8; font-size: 12px; white-space: nowrap; }
.ann-head .btn { margin-left: 4px; }
.ann-body { padding: 10px 12px; color: #c6cdd8; font-size: 13px; line-height: 1.7; white-space: pre-wrap; word-break: break-word; }
#ann-form-wrap { margin-bottom: 14px; }
#ann-form-wrap .srow { margin-top: 10px; }
#ann-form-wrap .srow input { flex: 1; min-width: 0; }
#ann-form-wrap .srow textarea { flex: 1; min-width: 0; }
/* 公告图片附件：列表缩略图 + 公告正文下方原图展示 + 放大弹层 */
.ann-imgs { display: flex; flex-wrap: wrap; gap: 8px; padding: 4px 12px 12px; }
.ann-img { width: 120px; height: 90px; object-fit: cover; border-radius: 6px; border: 1px solid #2a3240; cursor: zoom-in; }
.ann-img:hover { border-color: #c99b1f; }
.ann-img-list { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
.ann-img-thumb { position: relative; width: 96px; height: 72px; }
.ann-img-thumb img { width: 100%; height: 100%; object-fit: cover; border-radius: 6px; border: 1px solid #2a3240; cursor: zoom-in; }
.ann-img-del { position: absolute; top: -7px; right: -7px; width: 20px; height: 20px; padding: 0; line-height: 1; border-radius: 50%; background: #d64550; color: #fff; font-size: 13px; cursor: pointer; }
.ann-img-del:hover { background: #e25a64; }
.ann-img-mask { position: fixed; inset: 0; z-index: 10000; background: rgba(10, 13, 18, .88); display: none; align-items: center; justify-content: center; cursor: zoom-out; }
.ann-img-mask.show { display: flex; }
.ann-img-mask img { max-width: 92vw; max-height: 92vh; border-radius: 8px; box-shadow: 0 8px 40px rgba(0,0,0,.6); }
@media (max-width: 520px) {
  .ann-head { flex-wrap: wrap; }
  .ann-title { order: 2; width: 100%; }
  .ann-meta { order: 3; }
  .ann-head .btn { order: 4; }
}

/* 量化优选 / 回测统计卡 */
.cards-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px; }
.qo-card {
  background: #1b212b; border: 1px solid #2a3240; border-radius: 8px; padding: 10px;
}
.qo-top { display: flex; justify-content: space-between; align-items: center; }
.qo-rank { color: #ffd23f; font-weight: 700; font-size: 12px; }
.qo-score { color: #979797; font-size: 12px; }
.qo-name { font-size: 15px; font-weight: 700; color: #fff; margin: 4px 0 2px; }
.qo-code { font-size: 12px; color: #979797; }
.qo-live { font-size: 19px; font-weight: 700; color: #ff4757; margin: 2px 0; }
.qo-summary { font-size: 11px; color: #bfbfbf; margin-top: 4px; }
.qo-reason { color: #8a93a3; margin-top: 4px; }
.v2-buy {
  display: inline-block; color: #ff2020; font-size: 14px; font-weight: 900; padding: 2px 8px;
  margin-top: 6px; border: 2px solid #ff2020; border-radius: 5px; background: rgba(255, 32, 32, .12);
  box-shadow: 0 0 8px rgba(255, 32, 32, .45); animation: v2-buy-pulse 1.6s ease-in-out infinite;
}
.v2-buy-sm { margin-top: 0; margin-left: 6px; padding: 0 5px; font-size: 12px; box-shadow: none; animation: none; }
@keyframes v2-buy-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .72; } }
.tool-panel input[type="date"] { background: #141922; color: #e6e9ef; border: 1px solid #2a3240; border-radius: 6px; padding: 5px 8px; }

/* ===== 量化选股（quant_select）UI 精修：工具栏 / 分段切换 / 区块标题 / 卡片 ===== */
.quant-toolbar {
  display: flex; align-items: center; justify-content: space-between;
  flex-wrap: wrap; gap: 10px 14px; margin: 10px 0 14px;
  padding: 10px 12px; background: rgba(255,255,255,.02);
  border: 1px solid var(--aur-border); border-radius: var(--aur-radius-lg);
}
.qt-group { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; min-width: 0; }
.qt-group + .qt-group { padding-left: 12px; border-left: 1px solid var(--aur-border); }
.qt-label { color: var(--aur-muted); font-size: var(--aur-fs-sm); white-space: nowrap; }
.qt-status {
  font-size: var(--aur-fs-sm); color: var(--aur-muted-2); white-space: nowrap;
  background: rgba(255,255,255,.04); border: 1px solid var(--aur-border);
  padding: 3px 10px; border-radius: var(--aur-radius-pill);
}
.qt-status:empty { display: none; }
/* v1 / V2 版本切换：分段控件（原生 App 风格），激活态沿用品牌蓝 */
.qt-modes { display: inline-flex; padding: 3px; gap: 2px; background: rgba(255,255,255,.04); border: 1px solid var(--aur-border); border-radius: var(--aur-radius-lg); }
.qt-modes .qv2-toggle { margin-left: 0; padding: 6px 14px; border-radius: var(--aur-radius-md); border: 0; background: transparent; color: var(--aur-muted-2); }
.qt-modes .qv2-toggle:hover { background: rgba(255,255,255,.06); color: var(--aur-text); }
.qt-modes .qv2-toggle.active { background: #1D6F9C; color: #fff; }
.qt-modes .qv2-toggle.active:hover { background: #2582b6; }
/* 区块说明标题（v1/v2 说明行）：金色左条，与 .ltab-panel h3 同语言 */
.q-sec {
  display: flex; align-items: center; gap: 8px; color: var(--aur-gold);
  font-size: var(--aur-fs-sm); font-weight: 600; letter-spacing: .3px;
  margin: 16px 0 8px;
}
.q-sec::before {
  content: ""; width: 3px; height: 13px; border-radius: 2px; flex: 0 0 auto;
  background: linear-gradient(180deg, var(--aur-gold), var(--aur-gold-deep));
  box-shadow: 0 0 8px rgba(255,213,74,.3);
}
.q-sec:first-child { margin-top: 6px; }
.q-note { color: var(--aur-muted-2); font-size: var(--aur-fs-sm); margin: 0 0 10px; }
/* 页签激活下划线指示器（量化选股双页签） */
#quant-select-root .ltab { position: relative; }
#quant-select-root .ltab.active::after {
  content: ""; position: absolute; left: 14px; right: 14px; bottom: -11px; height: 2px;
  border-radius: 2px; background: linear-gradient(90deg, var(--aur-gold), var(--aur-gold-deep));
  box-shadow: 0 0 8px rgba(255,213,74,.35);
}
/* 候选卡片：hover 轻抬升 + 金色描边；TOP 名次金色胶囊 */
.qo-card { transition: transform var(--aur-t-press), border-color var(--aur-t-fast), box-shadow var(--aur-t-fast); }
.qo-card:hover { transform: translateY(-2px); border-color: rgba(255,213,74,.45); box-shadow: 0 6px 18px rgba(0,0,0,.28); }
.qo-rank {
  display: inline-flex; align-items: center; color: #14181f; font-weight: 800; font-size: 11px;
  background: linear-gradient(135deg, #e6b93c, #c99b1f); padding: 2px 9px;
  border-radius: var(--aur-radius-pill); letter-spacing: .3px;
}

/* 设置表单 */
.sform h3 { color: #ffd54a; font-size: 14px; margin: 8px 0 6px; }
.shead { color: #ffcc00; font-size: 14px; font-weight: bold; margin: 4px 0 8px; }
.srow { display: flex; align-items: center; gap: 8px; padding: 4px 0; }
.srow > span { width: 210px; flex: 0 0 auto; color: #aab3c2; }
.srow input[type="number"] { width: 110px; }
.srow .chk { color: #e6e9ef; }
.chk { display: inline-flex; align-items: center; gap: 6px; }
.chk input[type="checkbox"] { accent-color: #ffcc00; }
.model-card { background: #1b212b; border: 1px solid #2a3240; border-radius: 8px; padding: 14px; max-width: 560px; }
/* 页面设置：功能区工具提升到导航栏 */
#settings-section-page .model-card { max-width: 720px; }
.page-tool-row { display: flex; align-items: center; gap: 12px; padding: 9px 0; border-bottom: 1px solid #2a3240; cursor: pointer; }
.page-tool-row:last-child { border-bottom: 0; }
.page-tool-row .pt-icon { font-size: 20px; flex: 0 0 auto; }
.page-tool-row .pt-info { flex: 1; min-width: 0; display: flex; flex-direction: column; color: #e6e9ef; }
.page-tool-row .pt-name { font-weight: 700; font-size: 14px; }
.page-tool-row .pt-desc { color: #8a93a3; font-size: 12px; margin-top: 2px; }
.page-tool-row input[type="checkbox"] { width: 18px; height: 18px; accent-color: #ffcc00; flex: 0 0 auto; }
.feature-toggle-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 6px; }
.feature-toggle-grid label { display: flex; align-items: center; gap: 8px; padding: 6px 8px; border: 1px solid #2a3240; border-radius: 6px; cursor: pointer; font-size: 13px; color: #e6e9ef; }
.feature-toggle-grid label:hover { background: #1e2530; }
.feature-toggle-grid input[type="checkbox"] { width: 16px; height: 16px; accent-color: #ffcc00; flex: 0 0 auto; }

/* 权限与频率：档位页面矩阵（页面名 × 会员及以上/仅量化/不开放 三列勾选） */
.tier-page-matrix { display: grid; grid-template-columns: minmax(150px, 1fr) 96px 96px 96px; gap: 2px 8px; align-items: center; }
.tier-page-matrix .tpm-head { color: #aab3c2; font-size: 12px; font-weight: bold; padding: 6px 0; border-bottom: 1px solid #2a3240; text-align: center; }
.tier-page-matrix .tpm-head:first-child { text-align: left; }
.tier-page-matrix .tpm-name { color: #e6e9ef; font-size: 13px; padding: 5px 0; border-bottom: 1px solid #232a36; }
.tier-page-matrix .tpm-na { text-align: center; font-size: 12px; padding: 5px 0; border-bottom: 1px solid #232a36; }
.tier-page-matrix label { display: flex; justify-content: center; padding: 5px 0; border-bottom: 1px solid #232a36; cursor: pointer; }
.tier-page-matrix input[type="checkbox"] { width: 16px; height: 16px; accent-color: #ffcc00; }
.tier-page-matrix input[type="checkbox"]:disabled { opacity: 0.35; cursor: not-allowed; }
@media (max-width: 640px) { .tier-page-matrix { grid-template-columns: minmax(110px, 1fr) 72px 72px 72px; } }
/* 权限与频率面板：两栏布局（左档位页面矩阵，右刷新频率配置），窄屏回落单栏 */
.permfreq-grid { display: grid; grid-template-columns: minmax(340px, 460px) minmax(0, 1fr); gap: 14px; align-items: start; }
.permfreq-grid > .model-card { max-width: none; }
@media (max-width: 1380px) { .permfreq-grid { grid-template-columns: minmax(0, 1fr); } }
/* 功能级刷新频率配置表 */
.feat-refresh-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.feat-refresh-table th { color: #aab3c2; font-size: 12px; font-weight: bold; text-align: left; padding: 6px 8px; border-bottom: 1px solid #2a3240; white-space: nowrap; }
.feat-refresh-table td { padding: 5px 8px; border-bottom: 1px solid #232a36; }
.feat-refresh-table td.muted { color: #aab3c2; font-size: 12px; }
.feat-refresh-table input[type="number"] { width: 84px; background: #141922; color: #e6e9ef; border: 1px solid #2a3240; border-radius: 6px; padding: 4px 8px; }
.feat-refresh-table input[type="number"]:placeholder-shown { border-style: dashed; }
.feat-refresh-table .fr-preview { white-space: nowrap; color: #9fb4d0; font-size: 12px; }
/* 合并版刷新频率配置：全局档位下限默认栏 + 组头行 */
.fr-global-row { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 16px; background: #141922; border: 1px solid #2a3240; border-radius: 8px; padding: 8px 12px; margin: 0 0 10px; font-size: 13px; color: #cdd3de; }
.fr-global-label { color: #DFDFDF; font-weight: bold; white-space: nowrap; }
.fr-global-row input[type="number"] { width: 76px; background: #0d1117; color: #e6e9ef; border: 1px solid #2a3240; border-radius: 6px; padding: 4px 8px; }
.feat-refresh-table tr.fr-group-row td { background: #10151e; border-bottom: 1px solid #2a3240; padding: 7px 8px; }
.fr-group-inner { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; }
.fr-group-name { color: #ffcc00; font-weight: bold; font-size: 13px; white-space: nowrap; }
.fr-group-ctrl { color: #aab3c2; font-size: 12px; white-space: nowrap; }
.fr-group-ctrl input[type="number"] { width: 76px; background: #0d1117; color: #e6e9ef; border: 1px solid #354052; border-radius: 6px; padding: 4px 8px; }
.fr-group-desc { font-size: 12px; }
/* 合并版刷新频率配置：卡片头 / 表格滚动保护 / 底部布局 / 数据组徽章 */
.fr-card-head { display: flex; flex-direction: column; gap: 2px; margin-bottom: 10px; }
.fr-table-wrap { overflow-x: auto; margin: 0 0 10px; }
.fr-table-wrap .feat-refresh-table { min-width: 680px; }
.fr-card-foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 16px; margin-top: 10px; }
.fr-card-foot .muted { flex: 1 1 260px; margin: 0; font-size: 12px; line-height: 1.5; }
.fr-th-preview { white-space: nowrap; }
.fr-group-badge { display: inline-block; padding: 1px 8px; border-radius: 999px; font-size: 11px; font-weight: bold; line-height: 18px; white-space: nowrap; }
.fr-group-badge[data-group="market"] { color: #ffcc00; background: rgba(255, 204, 0, 0.12); border: 1px solid rgba(255, 204, 0, 0.35); }
.fr-group-badge[data-group="sector"] { color: #4dd0c4; background: rgba(77, 208, 196, 0.1); border: 1px solid rgba(77, 208, 196, 0.3); }
.fr-group-badge[data-group="static"] { color: #9aa7bd; background: rgba(154, 167, 189, 0.1); border: 1px solid rgba(154, 167, 189, 0.3); }
.feat-refresh-table td:first-child, .feat-refresh-table td:nth-child(2) { white-space: nowrap; }
.feat-refresh-table tr[data-fkey]:hover td { background: rgba(255, 204, 0, 0.04); }
.text-input, .sform input[type="number"] { background: #141922; color: #e6e9ef; border: 1px solid #2a3240; border-radius: 6px; padding: 5px 8px; }
.btn.seg { background: #242c39; color: #cdd3de; border: 1px solid #354052; }
.btn.seg.active { background: #ffcc00; color: #1C191F; border-color: #ffcc00; font-weight: bold; }
.tool-body { width: min(1480px, 97vw); max-height: 94vh; padding: 14px 16px; }
.tool-body table th { white-space: nowrap; }

/* 竞价优选回测：复刻 Qt 版的工具栏、摘要卡和结果/图表双栏工作区 */
.backtest-panel { min-height: min(720px, 74vh); display: flex; flex-direction: column; gap: 12px; }
.bt-toolbar { display: flex; justify-content: space-between; align-items: center; gap: 16px; padding: 12px 14px; background: #202632; border: 1px solid #354052; border-radius: 8px; }
.bt-title { color: #ffd54a; font-size: 17px; font-weight: 700; }
.bt-subtitle { color: #8a93a3; font-size: 12px; margin-top: 3px; }
.bt-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }
.bt-actions label { white-space: nowrap; }
.bt-actions input[type="date"] { background: #141922; color: #e6e9ef; border: 1px solid #354052; border-radius: 6px; padding: 6px 8px; }
.bt-summary { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.bt-summary .qo-card { background: #202632; margin: 0; }
.bt-progress-wrap { padding: 0 2px; }
.bt-workspace { flex: 1; min-height: 420px; display: grid; grid-template-columns: minmax(0, 1fr) 340px; border: 1px solid #354052; border-radius: 8px; overflow: hidden; background: #1b212b; }
.bt-results { min-width: 0; display: flex; flex-direction: column; }
.bt-section-title { color: #ffd54a; font-size: 14px; font-weight: 700; padding: 11px 12px; border-bottom: 1px solid #2a3240; }
.bt-results .tool-table { flex: 1; max-height: 52vh; min-height: 360px; }
#bt-table tr[data-code] { cursor: pointer; }
#bt-table tr[data-code].selected { background: #3a3220; }
#bt-table tr[data-code].selected td:first-child { color: #ffd54a; font-weight: 700; }
.bt-detail { min-width: 0; border-left: 1px solid #354052; padding: 0 12px 12px; overflow: auto; }
.bt-detail #bt-detail-status { padding: 10px 0; line-height: 1.5; }
.bt-chart-label { color: #aab3c2; font-size: 12px; font-weight: 600; margin: 10px 0 5px; }
.bt-chart { display: block; width: 100%; height: 200px; background: #14181f; border: 1px solid #2a3240; border-radius: 6px; }
.bt-bid-chart { width: 100%; height: 200px; background: #14181f; border: 1px solid #2a3240; border-radius: 6px; }
/* 板块竞价异动：复用回测工作区布局，异动板块/个股表可点击高亮 */
.bid-anomaly-panel { min-height: min(720px, 74vh); display: flex; flex-direction: column; gap: 12px; }
/* 左板右股主从分栏：个股明细(10列)为主占宽，板块榜(5列)给舒适固定宽，避免左宽右窄 */
@media (min-width: 769px) { .bid-anomaly-panel .bt-workspace { grid-template-columns: clamp(380px, 33%, 500px) minmax(0, 1fr); } }
/* 密集竞价表紧凑内边距，为竖向滚动条留出宽度，避免 1366 档出现横向滚动条 */
#ba-plates th, #ba-plates td, #ba-stocks th, #ba-stocks td { padding: 6px 7px; }
#ba-plates tr[data-plate], #ba-stocks tr[data-code] { cursor: pointer; }
#ba-plates tr[data-plate].selected { background: #3a3220; }
#ba-plates tr[data-plate].selected td:first-child { color: #ffd54a; font-weight: 700; }
/* 板块竞价异动：表头点击排序 */
#ba-plates th[data-key], #ba-stocks th[data-key] { cursor: pointer; user-select: none; white-space: nowrap; transition: color .12s ease; }
#ba-plates th[data-key]:hover, #ba-stocks th[data-key]:hover { color: #ffcc00; }
#ba-plates th.sorted-asc::after, #ba-stocks th.sorted-asc::after { content: " ▲"; color: #ffcc00; font-size: 10px; }
#ba-plates th.sorted-desc::after, #ba-stocks th.sorted-desc::after { content: " ▼"; color: #ffcc00; font-size: 10px; }
/* 主控板块：右侧下栏（异动个股 / 主控板块 上下分栏，各自独立滚动） */
.bid-anomaly-panel .bt-detail { display: flex; flex-direction: column; overflow: hidden; }
.bid-anomaly-panel .ba-detail-top { flex: 1 1 52%; min-height: 0; display: flex; flex-direction: column; }
.bid-anomaly-panel .ba-detail-bottom { flex: 1 1 48%; min-height: 0; display: flex; flex-direction: column; border-top: 1px solid #354052; }
.bid-anomaly-panel .ba-detail-top .tool-table,
.bid-anomaly-panel .ba-detail-bottom .tool-table { flex: 1; min-height: 0; max-height: none; overflow: auto; }
/* 主控个股：竞价爆量前十板块内主控>80%的个股（扁平表，点击行看个股） */
#ba-mc table th, #ba-mc table td { padding: 6px 7px; }
#ba-mc tr[data-code] { cursor: pointer; }
#ba-mc tr[data-code]:hover { background: #202632; }
#ba-mc td.ba-mc-ratio { color: #ff8a5c; font-weight: 700; }
/* 题材库：复用回测/异动工作区布局，左题材列表右成分明细（主从分栏，明细占宽） */
.theme-panel { min-height: min(720px, 74vh); display: flex; flex-direction: column; gap: 12px; }
@media (min-width: 769px) { .theme-panel .bt-workspace { grid-template-columns: clamp(300px, 30%, 440px) minmax(0, 1fr); } }
.theme-panel .bt-detail { display: flex; flex-direction: column; overflow: hidden; }
.theme-panel .tl-detail-body { flex: 1; min-height: 0; overflow: auto; padding: 12px; }
/* 搜索框组：图标 + 输入 + 清空 */
.theme-search-wrap { position: relative; display: inline-flex; align-items: center; }
.theme-search-ico { position: absolute; left: 9px; width: 14px; height: 14px; color: #6b7686; pointer-events: none; }
.theme-search { background: #141922; color: #e6e9ef; border: 1px solid #354052; border-radius: 6px; padding: 6px 26px 6px 28px; width: 180px; outline: none; transition: border-color var(--aur-t-fast), box-shadow var(--aur-t-fast); }
.theme-search:focus { border-color: #8a6200; box-shadow: 0 0 0 2px rgba(138, 98, 0, .18); }
.theme-search::placeholder { color: #6b7686; }
.theme-search-clear { position: absolute; right: 4px; width: 20px; height: 20px; display: inline-flex; align-items: center; justify-content: center; border: 0; background: transparent; color: #6b7686; border-radius: 50%; cursor: pointer; padding: 0; transition: color var(--aur-t-fast), background-color var(--aur-t-fast); }
.theme-search-clear:hover { color: #ffd54a; background: #2a3240; }
.theme-search-clear svg { width: 12px; height: 12px; fill: currentColor; }
.theme-search-clear[hidden] { display: none; }
/* 计数 pill：总题材数 / 过滤结果数 */
.tl-count-pill { display: inline-flex; align-items: baseline; gap: 3px; font-size: 12px; color: #8a93a3; background: #202632; border: 1px solid #354052; border-radius: 20px; padding: 3px 11px; white-space: nowrap; }
.tl-count-pill b { color: #ffd54a; font-size: 13px; font-variant-numeric: tabular-nums; }
.tl-count-pill i { font-style: normal; }
/* 刷新按钮：加载中转圈 */
.tl-refresh-ico { width: 14px; height: 14px; fill: currentColor; margin-right: 5px; vertical-align: -2px; }
#tl-refresh.loading .tl-refresh-ico { animation: tl-spin .8s linear infinite; }
@keyframes tl-spin { to { transform: rotate(360deg); } }
/* 列表：名称高亮 + ID 等宽 + 行选中指示条（border-left 恒定宽度不抖动） */
#tl-list th, #tl-list td { padding: 6px 7px; }
#tl-list td:first-child { border-left: 3px solid transparent; padding-left: 10px; }
#tl-list tr[data-theme] { cursor: pointer; outline: none; }
#tl-list tr[data-theme]:hover { background: #202632; }
#tl-list tr[data-theme]:hover td:first-child { border-left-color: #5a4a14; }
#tl-list tr[data-theme].selected { background: #3a3220; }
#tl-list tr[data-theme].selected td:first-child { border-left-color: #ffd54a; color: #ffd54a; font-weight: 700; }
#tl-list tr[data-theme]:focus-visible { outline: 2px solid #8a6200; outline-offset: -2px; }
.tl-name-cell { font-weight: 500; }
.tl-id { font-variant-numeric: tabular-nums; font-size: 12px; }
mark.tl-mark { background: rgba(201, 155, 31, .28); color: #ffd54a; border-radius: 2px; padding: 0 1px; }
#tl-list th[data-key] { cursor: pointer; user-select: none; white-space: nowrap; transition: color .12s ease; }
#tl-list th[data-key]:hover { color: #ffcc00; }
#tl-list th.sorted-asc::after, #tl-list th.sorted-desc::after { color: #ffcc00; font-size: 10px; }
/* 详情：标题/热度条/简介/涨停/成分股 */
.tl-detail-title { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.tl-detail-title .tl-name { color: #ffd54a; font-size: 18px; font-weight: 700; }
.tl-badge { font-size: 11px; padding: 1px 8px; border-radius: 10px; line-height: 1.6; }
.tl-badge.good { color: #ff8a5c; background: rgba(255, 138, 92, .12); border: 1px solid rgba(255, 138, 92, .35); }
.tl-badge.new { color: #4fc3f7; background: rgba(79, 195, 247, .12); border: 1px solid rgba(79, 195, 247, .35); }
.tl-meta { color: #8a93a3; font-size: 12px; margin: 8px 0 10px; display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.tl-power { display: inline-flex; align-items: center; gap: 6px; }
.tl-power svg { width: 14px; height: 14px; fill: #ff8a5c; flex: none; }
.tl-power b { color: #ff8a5c; font-variant-numeric: tabular-nums; }
.tl-power-bar { display: inline-block; width: 64px; height: 5px; background: #2a3240; border-radius: 3px; overflow: hidden; }
.tl-power-bar i { display: block; height: 100%; background: linear-gradient(90deg, #e6b93c, #ff8a5c); border-radius: 3px; }
.tl-brief { color: #c3cad6; line-height: 1.7; font-size: 13px; padding: 10px 12px; background: #202632; border: 1px solid #354052; border-radius: 6px; margin-bottom: 10px; }
.tl-zt-title { margin-top: 12px; }
.tl-zt { display: flex; flex-wrap: wrap; gap: 6px; padding: 10px 12px; }
.tl-zt-empty { color: #8a93a3; font-size: 12px; padding: 4px 2px; }
.zt-chip { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; color: #c3cad6; background: #202632; border: 1px solid #354052; border-radius: 12px; padding: 2px 9px; cursor: pointer; transition: border-color .12s ease, background-color .12s ease; }
.zt-chip:hover { border-color: #8a6200; background: #262d3a; }
.zt-chip:focus-visible { outline: 2px solid #8a6200; outline-offset: 1px; }
.zt-chip .up { color: #ff5d5d; }
.zt-chip .down { color: #34c78f; }
.tag-chip { display: inline-block; font-size: 11px; color: #9fb6d8; background: rgba(90, 120, 180, .15); border: 1px solid rgba(90, 120, 180, .3); border-radius: 9px; padding: 0 7px; margin: 1px 3px 1px 0; white-space: nowrap; }
#tl-detail-stocks th, #tl-detail-stocks td { padding: 6px 7px; }
#tl-detail-stocks th[data-key] { cursor: pointer; user-select: none; white-space: nowrap; transition: color .12s ease; }
#tl-detail-stocks th[data-key]:hover { color: #ffcc00; }
#tl-detail-stocks th.sorted-asc::after, #tl-detail-stocks th.sorted-desc::after { color: #ffcc00; font-size: 10px; }
#tl-detail-stocks tr[data-code] { cursor: pointer; outline: none; }
#tl-detail-stocks tr[data-code]:hover { background: #202632; }
#tl-detail-stocks tr[data-code]:focus-visible { outline: 2px solid #8a6200; outline-offset: -2px; }
.tl-code { font-variant-numeric: tabular-nums; }
/* 成分股名称：涨停标红加粗（limit-up 由行情到达后联动添加） */
.tl-name-stock { font-weight: 500; transition: color .15s ease; }
.tl-name-stock.limit-up { color: #ff5d5d; font-weight: 700; text-shadow: 0 0 8px rgba(255, 93, 93, .35); }
.tl-live-cell { font-variant-numeric: tabular-nums; white-space: nowrap; text-align: right; }
/* 表头与数据列对齐：涨跌幅/主力净额数据右对齐，表头同步右对齐 */
#tl-detail-stocks th[data-key="pct"], #tl-detail-stocks th[data-key="main_net"] { text-align: right; }
/* 红涨绿跌（span 级，深色终端微光） */
.tl-live-cell .up { color: #ff665e; text-shadow: 0 0 8px rgba(255, 102, 94, .28); }
.tl-live-cell .down { color: #55cc82; text-shadow: 0 0 8px rgba(85, 204, 130, .28); }
.tl-live-cell .muted { color: #6b7686; }
.tl-hot-cell { white-space: nowrap; }
.tl-hot-bar { display: inline-block; width: 56px; height: 5px; background: #2a3240; border-radius: 3px; overflow: hidden; vertical-align: middle; margin-right: 6px; }
.tl-hot-bar i { display: block; height: 100%; background: linear-gradient(90deg, #e6b93c, #ff8a5c); border-radius: 3px; }
.tl-hot-num { color: #ff8a5c; font-variant-numeric: tabular-nums; font-size: 12px; }
.tl-tags-cell { max-width: 380px; white-space: normal; }
/* 题材横向三级树：一级(左列) → 二级(中列 chips) → 个股(右侧表格) */
.tl-tree { display: flex; align-items: stretch; gap: 10px; height: 480px; max-height: 60vh; }
.tl-tree-col { display: flex; flex-direction: column; min-width: 0; }
.tl-tree-col-main { flex: 1; }
.tl-tree-side { width: 168px; flex: none; overflow: auto; display: flex; flex-direction: column; gap: 2px; padding: 6px; background: #171d28; border: 1px solid #2a3240; border-radius: 10px; }
.tl-tree-branch { display: flex; align-items: center; justify-content: space-between; gap: 6px; width: 100%; text-align: left; padding: 7px 9px; border-radius: 7px; border: 1px solid transparent; background: transparent; color: #b7c1d0; font-size: 12px; cursor: pointer; transition: background-color .12s ease, color .12s ease, border-color .12s ease; }
.tl-tree-branch em { font-style: normal; font-size: 10px; color: #6b7a90; background: #232b3a; border-radius: 8px; padding: 0 6px; line-height: 16px; flex: none; }
.tl-tree-branch:hover { background: #212938; color: #e6edf6; }
.tl-tree-branch.on { background: linear-gradient(90deg, rgba(230, 185, 60, .16), rgba(230, 185, 60, .05)); color: #ffd54a; border-color: rgba(230, 185, 60, .4); font-weight: 600; }
.tl-tree-branch.on em { background: rgba(230, 185, 60, .2); color: #ffd54a; }
.tl-tree-branch:focus-visible { outline: 2px solid #8a6200; outline-offset: -1px; }
.tl-tree-mid { display: flex; flex-direction: column; width: 200px; flex: none; background: #171d28; border: 1px solid #2a3240; border-radius: 10px; overflow: auto; }
.tl-tree-mid-tip { font-size: 12px; font-weight: 600; color: #c9d4e4; padding: 9px 10px 5px; border-bottom: 1px solid #222a37; flex: none; }
.tl-tree-l2chips { display: flex; flex-direction: column; gap: 3px; padding: 6px; }
.tl-tree-chip { text-align: left; padding: 7px 9px; border-radius: 7px; border: 1px solid transparent; background: transparent; color: #a3b2c8; font-size: 12px; cursor: pointer; transition: background-color .12s ease, color .12s ease, border-color .12s ease; }
.tl-tree-chip em { font-style: normal; font-size: 10px; color: #6b7a90; margin-left: 6px; }
.tl-tree-chip:hover { background: #212938; color: #e6edf6; }
.tl-tree-chip.on { background: #222d40; color: #ffd54a; border-color: rgba(230, 185, 60, .35); font-weight: 600; }
.tl-tree-chip.on em { color: #ffd54a; }
.tl-tree-chip:focus-visible { outline: 2px solid #8a6200; outline-offset: -1px; }
.tl-tree-main { display: flex; flex-direction: column; min-width: 0; overflow: auto; border: 1px solid #2a3240; border-radius: 10px; background: #161b25; }
.tl-tree-main-tip { font-size: 12px; font-weight: 600; color: #c9d4e4; padding: 8px 10px; border-bottom: 1px solid #222a37; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex: none; position: sticky; top: 0; background: #161b25; z-index: 2; }
.tl-tree-main-tip i { font-style: normal; color: #e6b93c; margin: 0 4px; }
.tl-tree-empty { padding: 18px 8px; text-align: center; }
/* 右侧表格：表头吸顶、表格区域随 main 列滚动 */
.tl-tree-main .tool-table, #tl-detail-stocks .tl-tree-main table { width: 100%; }
#tl-detail-stocks .tl-tree-main thead th { position: sticky; top: 33px; z-index: 1; background: #161b25; }
/* 加载态：spinner + 文本 */
.tl-loading { display: flex; align-items: center; gap: 8px; color: #9aa5b5; padding: 14px 4px; font-size: 13px; }
.tl-spinner { width: 14px; height: 14px; border: 2px solid #354052; border-top-color: #ffd54a; border-radius: 50%; animation: tl-spin .8s linear infinite; flex: none; }
@media (prefers-reduced-motion: reduce) { .tl-spinner, #tl-refresh.loading .tl-refresh-ico { animation: none; } }
/* 移动端：搜索框全宽、面板高度约束随工作区降级 */
@media (max-width: 680px) {
  .theme-panel { min-height: 0; gap: 10px; }
  .theme-search-wrap { flex: 1; min-width: 0; }
  .theme-search { width: 100%; }
}
/* 赞助作者 */
.sponsor-box { display: flex; flex-wrap: wrap; gap: 24px; justify-content: center; padding: 14px 0 6px; }

/* 移动端：横向树降级为纵向堆叠（一级横滑 → 二级横滑 → 个股表） */
@media (max-width: 900px) {
  .tl-tree { flex-direction: column; gap: 8px; height: auto; max-height: none; }
  .tl-tree-side, .tl-tree-mid { width: 100%; max-height: 132px; flex-direction: row; flex-wrap: nowrap; overflow-x: auto; overflow-y: hidden; }
  .tl-tree-side { padding: 6px; }
  .tl-tree-branch { flex: none; width: auto; white-space: nowrap; }
  .tl-tree-branch em { margin-left: 4px; }
  .tl-tree-mid-tip { display: none; }
  .tl-tree-l2chips { flex-direction: row; padding: 6px; }
  .tl-tree-chip { flex: none; white-space: nowrap; }
  .tl-tree-main { max-height: 46vh; overflow: auto; }
  #tl-detail-stocks .tl-tree-main thead th { top: 33px; }
}


/* 个股弹窗 */
.popup {
  position: fixed; inset: 0; background: rgba(0,0,0,0.55); z-index: 100;
  display: flex; align-items: center; justify-content: center;
}
.popup-body {
  background: #1b212b; border: 1px solid #2a3240; border-radius: 12px;
  width: min(720px, 92vw); max-height: 86vh; overflow: auto; padding: 16px;
  box-shadow: 0 24px 64px rgba(0,0,0,.55);
}
.popup-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }
.popup-head { color: #ffd54a; font-size: 15px; font-weight: 600; }
.popup-close { background: none; border: 0; color: #8a93a3; font-size: 20px; cursor: pointer; }
.popup-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.pcap { color: #8a93a3; font-size: 12px; margin-bottom: 4px; }
/* 分时/日K 图容器（原 sina GIF img 已替换为 ECharts div 本地绘制） */
.popup-chart .chart-box { width: 100%; height: 280px; border-radius: 6px; background: #14181f; }
#stock-popup .chart-box { height: 420px; }
/* 个股弹窗：日K/分时图放大一倍（宽度 720→1440，两图并排各占一半，显示尺寸约×2；仅个股弹窗，不影响工具/公告等其他弹窗） */
#stock-popup .popup-body { width: min(1440px, 96vw); }
.pinfo { margin-top: 12px; width: 100%; }
.pinfo td { padding: 5px 10px; }
.pinfo td:first-child { color: #8a93a3; width: 90px; }

/* ================= 板块轮动（矩阵 + 领涨股矩阵） ================= */
.rotation-wrap { overflow: auto; }
.rot-matrix, .rot-leaders { border-collapse: collapse; width: 100%; font-size: 12px; }
.rot-matrix th, .rot-leaders th, .rot-matrix td, .rot-leaders td { border: 1px solid #2a3240; text-align: center; }
.rot-matrix th, .rot-leaders th { background: #202632; color: #aab3c2; padding: 6px 8px; font-weight: 700; white-space: nowrap; }
.rot-day.recent { color: #ffd24d; }
.rot-rank { color: #8a93a3; font-weight: 700; width: 34px; background: #171c24; }
.rot-rank.rank-1 { color: #ffd24d; }
.rot-rank.rank-23 { color: #c89600; }
.rot-cell { padding: 6px 8px; cursor: pointer; min-width: 90px; }
.rot-cell.gold { background: #3b3010; color: #ffd24d; }
.rot-cell.silver { color: #c89600; }
.rot-cell.blue { color: #33a0ff; }
.rot-cell.dim { color: #555d6b; }
.rot-cell.hit { background: #c89600 !important; color: #1a1400; }
.rot-cell.hit .rot-name { font-weight: 700; }
.rot-name { font-size: 12px; line-height: 1.3; }
.rot-strong { font-size: 11px; opacity: .85; margin-top: 2px; }
.rot-lcell { padding: 6px 8px; min-width: 90px; }
.rot-lname { font-size: 12px; line-height: 1.3; }
.rot-lpct { font-size: 11px; margin-top: 2px; }

/* ================= 连板天梯 K线墙（统一设计语言：金/青/红/绿 4 色克制 · 极深蓝黑底） ================= */

/* 连板天梯统一 token：金=板号/激活态，青=题材，橙=断板/炸板，红涨绿跌，文字/边框统一 */
:root {
  --lw-bg: #0a0f18;
  --lw-surface: #101a28;
  --lw-surface-2: #142131;
  --lw-surface-3: #1d2d40;
  --lw-border: rgba(42,58,76,.55);
  --lw-border-soft: rgba(255,255,255,.05);
  --lw-gold: #ffb300;
  --lw-gold-hover: rgba(255,179,0,.06);
  --lw-cyan: #26c6da;
  --lw-cyan-soft: rgba(38,198,218,.08);
  --lw-cyan-border: rgba(38,198,218,.22);
  --lw-orange: #ff7043;
  --lw-orange-soft: rgba(255,112,67,.10);
  --lw-orange-border: rgba(255,112,67,.35);
  --lw-text: #e6e9ef;
  --lw-muted: #7a869a;
  --lw-muted-2: #94a3b8;
  --lw-radius: 8px;
}

/* 顶部 tab 栏（视图/单日K/K线/分时/5分速/5分成交/主力净额） */
.lw-topbar {
  display: flex; align-items: center; gap: 4px;
  padding: 8px 10px; margin: -4px 0 12px;
  background: linear-gradient(180deg, #111d2b, #0c1522);
  border: 1px solid var(--lw-border); border-radius: 10px;
}
.lw-tab {
  padding: 5px 12px; font-size: 12px; color: var(--lw-muted); background: transparent;
  border: none; border-radius: 5px; cursor: pointer;
  transition: background-color var(--aur-t-fast, .12s), color var(--aur-t-fast, .12s);
}
.lw-tab:hover:not(.disabled) { background: rgba(255,255,255,.04); color: var(--lw-text); }
.lw-tab.active {
  background: linear-gradient(180deg, #ffc233, #e69a00); color: #1a1200;
  font-weight: 600; box-shadow: 0 1px 6px rgba(255,179,0,.35);
}
.lw-tab.disabled { color: #3d4756; cursor: not-allowed; opacity: .6; }
.lw-topbar-r { margin-left: auto; font-size: 12px; color: var(--lw-muted); }

.lw-head {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  flex-wrap: wrap; margin-bottom: 10px;
}
.lw-head-left { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.lw-head-left b { font-size: 15px; color: var(--lw-text); }
.lw-head-right { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.lw-compare-btn { color: var(--lw-muted); }

/* 显示设置下拉 */
.lw-cfg {
  display: flex; gap: 16px; align-items: center; flex-wrap: wrap;
  background: #0e1219; border: 1px solid var(--lw-border); border-radius: 10px;
  padding: 8px 12px; margin-bottom: 10px; font-size: 12px; color: #9aa3b2;
}
.lw-cfg label { display: inline-flex; align-items: center; gap: 5px; cursor: pointer; }

/* 层 */
.lw-layer {
  margin-bottom: 12px;
  border-top: 1px solid var(--lw-border-soft);   /* 极细分层线 */
}
.lw-layer:first-child { border-top: none; }
/* 断板子块（b 进 b-1 断板）— 缩进嵌于对应板数层下方，标签并入层头题材行 */
.lw-broken-sub { margin: -4px 0 14px 0; padding: 6px 0 4px 0; border-left: 2px dashed var(--lw-orange-border); padding-left: 10px; }
/* 独立断板层（仅在没有匹配板层时回退显示） */
.lw-layer-broken { border-top: 1px dashed var(--lw-orange-border); padding-top: 8px; margin-top: 6px; }
.lw-bt-broken {
  color: var(--lw-orange) !important; font-size: 18px !important; line-height: 1 !important;
  text-shadow: none !important;
}
/* 纯断板行（目标板层今日无人晋级，在该板数位独立成行） */
.lw-layer-head-broken { opacity: .82; }
.lw-layer-head-broken:hover { background: var(--lw-orange-soft); }
.lw-theme-broken {
  font-style: normal; font-size: 11px; color: var(--lw-orange);
  background: var(--lw-orange-soft); border: 1px solid var(--lw-orange-border);
  padding: 2px 8px; border-radius: 10px; white-space: nowrap;
}

.lw-layer-head {
  display: flex; align-items: stretch; gap: 14px;
  padding: 8px 4px 8px 0; margin-bottom: 6px;
  width: 100%; background: transparent; border: none; cursor: pointer;
  text-align: left; color: inherit;
  transition: background-color var(--aur-t-fast, .12s);
}
.lw-layer-head:hover { background: rgba(255,255,255,.025); }
.lw-layer-arrow {
  display: inline-flex; align-items: center; justify-content: center;
  width: 16px; color: #6d7686; font-size: 11px; flex: none;
  transition: color var(--aur-t-fast, .12s);
}
.lw-layer-head:hover .lw-layer-arrow { color: var(--lw-text); }
/* 折叠：隐藏 layer-body */
.lw-layer.collapsed .lw-layer-body { display: none; }
.lw-layer.collapsed .lw-broken-sub { display: none; }
/* 左：板号大字 + 区间/家数 */
.lw-layer-id {
  display: flex; flex-direction: column; justify-content: center;
  min-width: 70px; padding: 0 6px;
  border-right: 1px solid var(--lw-border-soft);
}
.lw-bt {
  font-size: 22px; font-weight: 800; line-height: 1; color: var(--lw-gold);
  text-shadow: 0 0 8px rgba(255,179,0,.25);
}
.lw-bt i { font-style: normal; font-size: 11px; color: var(--lw-gold); opacity: .8; margin-left: 1px; }
.lw-bt-sub {
  font-size: 10px; color: var(--lw-muted); line-height: 1.35; margin-top: 4px;
  font-variant-numeric: tabular-nums;
}
/* 右：题材分布 */
.lw-layer-themes { display: flex; flex-wrap: wrap; gap: 5px; align-items: center; flex: 1; }
.lw-theme {
  font-style: normal; font-size: 11px; color: var(--lw-cyan);
  background: var(--lw-cyan-soft); border: 1px solid var(--lw-cyan-border);
  padding: 2px 8px; border-radius: 10px; white-space: nowrap;
}

/* 卡片网格 */
.lw-cards { display: flex; flex-wrap: wrap; gap: 8px; }
.lw-card {
  width: 158px; padding: 6px 7px 5px; cursor: pointer;
  background: transparent;   /* 卡片透明，融入层背景 */
  border: 1px solid transparent; border-radius: 6px;
  transition: background-color var(--aur-t-fast, .12s), border-color var(--aur-t-fast, .12s);
}
.lw-card:hover { background: var(--lw-gold-hover); border-color: rgba(255,179,0,.35); }
/* K线区：canvas（多根日K / 单日K）+ img（分时 GIF）重叠容器，分时模式切换显隐 */
.lw-kbox { position: relative; width: 100%; height: 66px; border-radius: 4px; background: transparent; overflow: hidden; }
.lw-k { display: block; width: 100%; height: 66px; border-radius: 4px; }
.lw-minute { position: absolute; left: 0; top: 0; width: 100%; height: 100%; object-fit: fill; pointer-events: none; }
/* [f18] 分时 tab 高 canvas 容器 */
.lw-kbox-tall { height: 180px; }
.lw-card-minute {
  width: 72px; padding: 0 3px 8px; border-radius: 0;
}
.lw-card-minute .lw-kbox-minute {
  height: 38px; background: transparent; border-radius: 0;
}
.lw-card-minute .lw-k { width: 100%; height: 38px; }
.lw-minute-meta {
  display: flex; flex-direction: column; align-items: center; gap: 1px;
  margin-top: 5px; min-width: 0; text-align: center; line-height: 1.15;
}
.lw-minute-name, .lw-minute-theme, .lw-minute-pct, .lw-minute-time {
  display: block; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.lw-minute-name { color: #e6e9ef; font-size: 11px; font-weight: 700; }
.lw-minute-theme { color: #7e8da2; font-size: 9px; }
.lw-minute-pct { font-size: 10px; font-variant-numeric: tabular-nums; }
.lw-minute-time { color: #718096; font-size: 9px; font-family: var(--aur-font-num); }
.lw-minute-broken { font-style: normal; color: #ff7043; font-size: 9px; }
.lw-card-minute:hover { background: rgba(38,198,218,.07); border-color: transparent; }
/* 分时总览：参考图的左侧板数轨道 + 横向微型分时卡片 */
.lw-wall-minute {
  margin: -4px -10px 0;
  background: var(--lw-surface);
  border: 1px solid var(--lw-border);
  border-radius: 10px;
  overflow: hidden;
}
.lw-wall-minute .lw-cfg,
.lw-wall-minute .lw-head-right,
.lw-wall-minute .lw-topbar-r { display: none; }
.lw-wall-minute .lw-head {
  margin: 0; padding: 12px 16px; min-height: 42px;
  background: var(--lw-surface); border-bottom: 1px solid var(--lw-border);
}
.lw-wall-minute .lw-head-left b { font-size: 14px; color: var(--lw-text); }
.lw-wall-minute .lw-head-left b::before { content: "⌁"; color: var(--lw-gold); margin-right: 8px; }
.lw-wall-minute .lw-head-left .muted { color: var(--lw-muted-2); font-size: 11px; }
.lw-wall-minute .lw-layer {
  position: relative; min-height: 154px; margin: 0; padding: 0;
  border-top: 1px solid var(--lw-border); background: var(--lw-surface-2);
  display: grid;
  grid-template-columns: 52px 1fr;
  grid-template-rows: auto auto;
  grid-template-areas:
    "head head"
    "id body";
}
.lw-wall-minute .lw-layer:first-of-type { border-top: 0; }
.lw-wall-minute .lw-layer-head {
  grid-area: head; position: relative; display: block; padding: 6px 10px;
  width: 100%; min-height: 32px; background: var(--lw-surface-3);
  border: 0; border-bottom: 1px solid var(--lw-border);
  margin-bottom: 0;
}
.lw-wall-minute .lw-layer-head:hover { background: #243850; }
.lw-wall-minute .lw-layer-arrow { position: absolute; right: 8px; top: 9px; width: auto; }
.lw-wall-minute .lw-layer-id {
  grid-area: id; display: flex; flex-direction: column; align-items: center; justify-content: center;
  width: 52px; min-width: 52px; padding: 6px 2px;
  background: #0c1522; border-right: 1px solid var(--lw-border); text-align: center;
}
.lw-wall-minute .lw-bt { font-size: 17px; color: var(--lw-gold); text-shadow: 0 0 6px rgba(255,179,0,.18); }
.lw-wall-minute .lw-bt i { display: block; font-size: 10px; color: var(--lw-gold); opacity: .85; margin: 1px 0 0; }
.lw-wall-minute .lw-bt-sub { color: var(--lw-muted-2); font-size: 9px; line-height: 1.3; }
.lw-wall-minute .lw-layer-themes { min-height: 20px; padding-right: 22px; }
.lw-wall-minute .lw-theme {
  padding: 1px 7px; color: var(--lw-cyan); background: var(--lw-cyan-soft);
  border: 1px solid var(--lw-cyan-border); border-radius: 9px; font-size: 10px;
}
.lw-wall-minute .lw-layer-body {
  grid-area: body; padding: 13px 12px 10px 14px; min-height: 116px;
}
.lw-wall-minute .lw-cards {
  display: flex; flex-wrap: wrap; align-items: flex-start; gap: 8px;
  min-height: 94px;
}
.lw-wall-minute .lw-card-minute { flex: 0 0 72px; }
.lw-wall-minute .lw-card-minute .lw-kbox-minute { border-bottom: 1px solid var(--lw-border); }
.lw-wall-minute .lw-card-minute .lw-k { image-rendering: auto; }
.lw-wall-minute .lw-card-minute .lw-minute-name { color: var(--lw-text); }
.lw-wall-minute .lw-card-minute .lw-minute-pct { font-weight: 700; }
.lw-wall-minute .lw-broken-sub {
  grid-area: broken; padding: 7px 12px 10px 14px; border-left: 0;
  border-top: 1px dashed var(--lw-orange-border);
}
.lw-wall-minute .lw-broken-sub .lw-cards { min-height: 82px; }
/* 所有非分时 tab 统一配色底色（参考分时墙色系） */
.lw-wall-themed {
  margin: -4px -10px 0;
  background: var(--lw-surface);
  border: 1px solid var(--lw-border);
  border-radius: 10px;
  overflow: hidden;
}
.lw-wall-themed .lw-head {
  margin: 0; padding: 12px 16px; min-height: 42px;
  background: var(--lw-surface);
  border-bottom: 1px solid var(--lw-border);
}
.lw-wall-themed .lw-layer {
  background: var(--lw-surface-2);
  border-top: 1px solid var(--lw-border);
  margin: 0; margin-bottom: 0;
  display: grid;
  grid-template-columns: 52px 1fr;
  grid-template-rows: auto auto;
  grid-template-areas:
    "head head"
    "id body";
}
.lw-wall-themed .lw-layer:first-of-type { border-top: 0; }
.lw-wall-themed .lw-layer-head {
  grid-area: head;
  background: var(--lw-surface-3);
  border-bottom: 1px solid var(--lw-border);
  margin-bottom: 0;
}
.lw-wall-themed .lw-layer-head:hover { background: #243850; }
.lw-wall-themed .lw-layer-head-broken:hover { background: var(--lw-orange-soft); }
.lw-wall-themed .lw-layer-id {
  grid-area: id; display: flex; flex-direction: column; align-items: center; justify-content: center;
  background: #0c1522;
  border-right: 1px solid var(--lw-border);
}
.lw-wall-themed .lw-layer-body {
  grid-area: body; padding: 12px;
}
.lw-wall-themed .lw-broken-sub {
  border-left: 2px dashed var(--lw-orange-border);
  background: rgba(255,112,67,.03);
}
/* 元数据：2 行（K线上 / 下）；左名字+题材 / 右涨幅+时间+炸标 */
.lw-meta {
  display: flex; align-items: center; justify-content: space-between; gap: 6px;
  margin-top: 4px; font-size: 11px; min-width: 0;
}
.lw-meta-l {
  display: flex; align-items: center; gap: 4px; min-width: 0; flex: 1; overflow: hidden;
}
.lw-meta-r {
  display: flex; align-items: center; gap: 4px; flex: none;
}
/* 单日K tab：4 行垂直堆叠（名字 / 题材 / 涨幅+炸 / 时间），居中突出涨幅；窄卡参考分时墙密度 */
.lw-card-dayk {
  width: 72px; padding: 0 3px 8px;
}
/* 单日K / K线：图形等比缩小（canvas 150x66 经 CSS 缩小至 64x28，保持清晰 + 居中） */
.lw-card-dayk .lw-kbox,
.lw-card-kline .lw-kbox {
  height: 38px; display: flex; align-items: center; justify-content: center;
}
.lw-card-dayk .lw-k,
.lw-card-kline .lw-k {
  width: 64px; height: 28px;
}
/* 5分成交 / 主力净额 tab：单一数字卡片（顶部大数字 + 名称/题材/涨幅/时间）；窄卡参考分时墙密度 */
.lw-card-num {
  width: 72px; padding: 0 3px 8px;
}
.lw-num-box {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 2px; min-height: 38px;
  background: rgba(255,255,255,.02); border: 1px solid var(--lw-border-soft);
  border-radius: 4px; padding: 5px 3px;
}
.lw-num {
  font-size: 16px; font-weight: 800; line-height: 1.1;
  font-variant-numeric: tabular-nums; letter-spacing: -0.5px;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%;
}
.lw-num-label {
  font-size: 8px; color: var(--lw-muted-2); line-height: 1.2;
  font-variant-numeric: tabular-nums; white-space: nowrap;
}
.lw-meta-dayk {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 2px; margin-top: 5px; text-align: center; min-width: 0;
}
.lw-dayk-name {
  font-size: 11px; font-weight: 700; color: #e6e9ef;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  max-width: 100%; line-height: 1.2;
}
.lw-dayk-theme {
  font-size: 9px; color: #918497;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  max-width: 100%; line-height: 1.2;
}
.lw-dayk-pct {
  display: flex; align-items: center; justify-content: center; gap: 4px;
  margin-top: 1px;
}
.lw-dayk-pct b { font-size: 11px; font-weight: 800; font-variant-numeric: tabular-nums; }
.lw-dayk-broken {
  font-style: normal; font-size: 9px; color: var(--lw-orange);
  background: var(--lw-orange-soft); border: 1px solid var(--lw-orange-border);
  padding: 0 3px; border-radius: 3px;
}
.lw-dayk-time {
  font-size: 9px; color: var(--lw-muted); font-variant-numeric: tabular-nums;
  margin-top: 1px;
}
.lw-name {
  font-size: 12px; color: var(--lw-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.lw-mt { padding: 0 5px; font-size: 10px; flex: none; }
.lw-pct {
  font-size: 12px; font-weight: 700; white-space: nowrap;
  font-variant-numeric: tabular-nums;
}
.lw-time { color: var(--lw-muted); font-size: 11px; font-variant-numeric: tabular-nums; }
.lw-broken {
  font-style: normal; font-size: 9px; line-height: 1.4; color: var(--lw-orange); flex: none;
  background: var(--lw-orange-soft); border: 1px solid var(--lw-orange-border);
  padding: 0 4px; border-radius: 3px;
}

/* ================= 早盘竞价：左表 + 右竞价量K面板 ================= */
.screen-split { align-items: stretch; }
.screen-split .screen-left { flex: 1; min-width: 0; overflow: auto; max-height: 70vh; }
.screen-split .screen-right { flex: 0 0 340px; border-left: 1px solid #2a3240; padding-left: 14px; }
.screen-right img { width: 100%; border-radius: 6px; background: #14181f; }
/* 竞价面板分时/日K为 ECharts 容器（无固有宽度），每张独占一行撑满侧栏 */
.screen-right .popup-chart { flex: 0 0 100%; }
/* 早盘竞价结果表头排序（同桌面端 QTableWidget 点击表头排序） */
#screen-table th[data-key] { cursor: pointer; user-select: none; white-space: nowrap; }
#screen-table th[data-key]:hover { color: #ffcc00; }
#screen-table th.sorted-asc::after { content: " ▲"; color: #ffcc00; font-size: 10px; }
#screen-table th.sorted-desc::after { content: " ▼"; color: #ffcc00; font-size: 10px; }
#bt-table th[data-key] { cursor: pointer; user-select: none; }
#bt-table th[data-key]:hover { color: #ffcc00; }
#bt-table th.sorted-asc::after { content: " ▲"; color: #ffcc00; font-size: 10px; }
#bt-table th.sorted-desc::after { content: " ▼"; color: #ffcc00; font-size: 10px; }

/* ================= 快速复盘：情绪周期 / 市场温度 / 次日预判 ================= */
.rv-hero { display: flex; gap: 14px; margin-bottom: 12px; flex-wrap: wrap; }
.rv-phase {
  flex: 0 0 260px; border-radius: 12px; padding: 18px 20px; color: #fff;
  background: linear-gradient(135deg, #2c3546, #202633);
}
.rv-phase-tag { font-size: 12px; opacity: .8; letter-spacing: 2px; }
.rv-phase-name { font-size: 34px; font-weight: 900; margin: 6px 0; letter-spacing: 2px; }
.rv-phase-note { font-size: 13px; opacity: .92; line-height: 1.6; }
.rv-phase-ice { background: linear-gradient(135deg, #3f5a70, #2b3a49); }
.rv-phase-start { background: linear-gradient(135deg, #1f8a52, #145a36); }
.rv-phase-fever { background: linear-gradient(135deg, #b8860b, #7a5a05); }
.rv-phase-high { background: linear-gradient(135deg, #c2332e, #7d1f1b); }
.rv-phase-wash { background: linear-gradient(135deg, #6d3fa0, #432769); }
.rv-temp { flex: 1 1 300px; min-width: 260px; border-radius: 12px; padding: 18px 20px; background: #161b22; border: 1px solid #2c3546; }
.rv-temp-head { display: flex; justify-content: space-between; align-items: baseline; font-size: 14px; color: #9aa3b2; }
.rv-temp-head b { font-size: 40px; font-weight: 900; }
.rv-temp-head b em { font-size: 14px; font-style: normal; font-weight: 400; color: #7d8596; }
.rv-temp-hot { color: #ff4d4f; }
.rv-temp-mid { color: #ffcc00; }
.rv-temp-cold { color: #4aa8ff; }
.rv-temp-bar { height: 10px; border-radius: 6px; background: #232b38; margin: 12px 0 6px; overflow: hidden; }
.rv-temp-fill { height: 100%; border-radius: 6px; transition: width .6s ease; }
.rv-temp-fill.rv-temp-hot { background: linear-gradient(90deg, #ff7a45, #ff4d4f); }
.rv-temp-fill.rv-temp-mid { background: linear-gradient(90deg, #ffd666, #ffcc00); }
.rv-temp-fill.rv-temp-cold { background: linear-gradient(90deg, #7ab8ff, #4aa8ff); }
.rv-temp-scale { display: flex; justify-content: space-between; font-size: 11px; color: #7d8596; }
.rv-summary {
  background: #1a2029; border: 1px solid #2a3340; border-radius: 10px;
  padding: 10px 14px; font-size: 13px; color: #cdd3de; margin-bottom: 12px; line-height: 1.7;
}
.rv-stale-banner {
  background: linear-gradient(90deg, #3a2f10, #2b2410); border: 1px solid #6b5714;
  color: #ffd77a; border-radius: 10px; padding: 9px 14px; font-size: 13px;
  margin-bottom: 12px; line-height: 1.6;
}
.rv-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(112px, 1fr)); gap: 10px; margin-bottom: 12px; }
.rv-metric {
  background: #161b22; border: 1px solid #2c3546; border-radius: 10px;
  padding: 12px 10px; text-align: center;
}
.rv-metric-label { display: block; font-size: 12px; color: #9aa3b2; margin-bottom: 6px; }
.rv-metric b { display: block; font-size: 22px; font-weight: 800; color: #ffd23f; line-height: 1.2; }
.rv-metric-sub { display: block; font-size: 11px; color: #7d8596; margin-top: 4px; }
.rv-card { background: #161b22; border: 1px solid #2c3546; border-radius: 12px; padding: 14px 16px; margin-bottom: 12px; }
.rv-card-title { font-size: 14px; font-weight: bold; color: #dfe3ea; margin-bottom: 8px; }
.rv-forecast-text { font-size: 13px; color: #cdd3de; line-height: 1.8; padding: 8px 12px; background: #1a2029; border-radius: 8px; border-left: 3px solid #ffd23f; }
.rv-ai { border-color: #3d5a99; }
.rv-ai-text { font-size: 13px; color: #d6dcea; line-height: 1.9; white-space: pre-wrap; word-break: break-word; padding: 10px 14px; background: #1a2130; border-radius: 8px; border-left: 3px solid #4a7dff; }
.rv-questions { border-color: #75602c; }
.rv-question-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.rv-question { min-width: 0; padding: 12px; background: #1a2029; border: 1px solid #2c3546; border-radius: 8px; }
.rv-question-title { color: #ffd23f; font-size: 13px; font-weight: 700; line-height: 1.5; }
.rv-question-answer { color: #f0f3f8; font-size: 14px; font-weight: 700; line-height: 1.7; margin: 8px 0; word-break: break-word; }
.rv-question-evidence { color: #b9c0cc; font-size: 12px; line-height: 1.7; word-break: break-word; }
.rv-question-evidence b { color: #dfe3ea; }
.rv-question-confidence { color: #8bb8ff; font-size: 12px; margin-top: 8px; }
@media (max-width: 760px) { .rv-question-grid { grid-template-columns: 1fr; } }
.rv-tips ul { margin: 0; padding-left: 18px; }
.rv-tips li { font-size: 13px; color: #b9c0cc; line-height: 1.9; }
.rv-floor-list { display: flex; flex-direction: column; gap: 8px; }
.rv-floor { display: flex; align-items: center; gap: 10px; }
.rv-floor-label { flex: 0 0 36px; font-size: 12px; color: #9aa3b2; text-align: right; }
.rv-floor-track { flex: 1; height: 10px; border-radius: 5px; background: #232b38; overflow: hidden; }
.rv-floor-fill { height: 100%; border-radius: 5px; background: linear-gradient(90deg, #ffd23f, #ff9a3d); transition: width .5s ease; }
.rv-floor-num { flex: 0 0 28px; font-size: 12px; font-weight: 700; color: #dfe3ea; }
.rv-split { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 12px; }
@media (max-width: 760px) { .rv-split { grid-template-columns: 1fr; } }
.rv-rank { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.rv-rank-name { flex: 0 0 96px; font-size: 12px; color: #cdd3de; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rv-rank-track { flex: 1; height: 8px; border-radius: 4px; background: #232b38; overflow: hidden; }
.rv-rank-fill { height: 100%; border-radius: 4px; background: linear-gradient(90deg, #ffd23f, #ff9a3d); }
.rv-rank-fill2 { background: linear-gradient(90deg, #4aa8ff, #7ab8ff); }
.rv-rank-num { flex: 0 0 26px; font-size: 12px; font-weight: 700; color: #dfe3ea; text-align: right; }
.rv-full-head { display: flex; justify-content: space-between; gap: 12px; color: #8f9bad; font-size: 12px; margin: 4px 0 10px; }
.rv-full-head em { color: #6f7e91; font-style: normal; }
.rv-full-block { margin-bottom: 10px; }
.rv-full-text { color: #cdd3de; line-height: 1.85; white-space: pre-wrap; word-break: break-word; }
.rv-full-emphasis { border-color: #4b6e9c; }
.rv-full-risk { border-color: #8d4d4d; }
.rv-full-empty { border-color: #555d69; }
.rv-mainline-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 8px; }
.rv-mainline { background: #1a2029; border: 1px solid #2c3546; border-radius: 8px; padding: 10px 12px; color: #cdd3de; line-height: 1.7; }
.rv-mainline b { color: #ffd23f; margin-right: 8px; }
.rv-mainline > span { color: #8bb8ff; font-size: 12px; }
.rv-mainline small { display: block; color: #8f9bad; line-height: 1.6; }
.rv-plan-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.rv-plan-grid > div { background: #1a2029; border: 1px solid #2c3546; border-radius: 8px; padding: 10px 12px; }
.rv-plan-grid b { color: #ffd23f; }
.rv-plan-grid p { margin: 6px 0 0; color: #cdd3de; line-height: 1.7; white-space: pre-wrap; }
@media (max-width: 760px) { .rv-plan-grid { grid-template-columns: 1fr; } .rv-full-head { flex-direction: column; gap: 4px; } }

/* ================= 竞价追踪：左追踪列表 + 右分时状态 ================= */
.track-split .track-left { flex: 1; min-width: 0; display: flex; flex-direction: column; border-right: 1px solid #2a3240; padding-right: 14px; }
.track-split .track-right { flex: 0 0 300px; }
.track-table-wrap { flex: 1; overflow: auto; min-height: 300px; }
#bt-table tr.track-flash { background: rgba(214, 69, 80, 0.13); }
#bt-table tr.track-flash td:first-child { color: #ff5964; font-weight: 700; }
#bt-table td.spark-cell { width: 132px; padding: 2px 8px; }
#bt-table canvas.spark { display: block; width: 120px; height: 34px; }
.badge-high { background: #d64550; color: #fff; border-radius: 4px; padding: 2px 6px; font-size: 11px; }
.status-red {
  background: #d64550; color: #fff; border: 1px solid #d64550; border-radius: 4px;
  padding: 5px 8px; font-size: 11px; margin-bottom: 6px; word-break: break-all; cursor: pointer;
}
.status-red:hover { background: #e05560; }

/* ================= M6 登录与用户区 ================= */
/* 用户状态条：文档流内独占一行（页面顶部），不再悬浮遮挡顶部行情栏 */
.userbar {
  position: relative;
  display: flex; align-items: center; justify-content: flex-end;
  gap: 8px;
  min-height: 36px;
  padding: 4px 14px;
  background: linear-gradient(180deg, #12161e, #10141b);
  border-bottom: 1px solid rgba(42, 50, 64, .7);
}
.userbar .btn { padding: 4px 14px; font-size: 12px; border-radius: 7px; margin-left: 4px; }
.userbar #top-user {
  display: inline-flex; align-items: center; gap: 7px;
  color: #e6e9ef; font-size: 12.5px; font-weight: 600; letter-spacing: .3px; white-space: nowrap;
}
.userbar #top-user::before {
  content: ""; width: 7px; height: 7px; border-radius: 50%; flex: 0 0 auto;
  background: linear-gradient(135deg, #ffd54a, #c99b1f);
  box-shadow: 0 0 6px rgba(255, 213, 74, .5);
}
.account-remaining {
  display: inline-flex; align-items: center;
  padding: 2px 10px; border-radius: 999px;
  background: rgba(174, 183, 198, .07); border: 1px solid rgba(174, 183, 198, .16);
  color: #aeb7c6; font-size: 11.5px; white-space: nowrap;
  transition: color .15s ease, border-color .15s ease, background-color .15s ease;
}
.account-remaining.warning { background: rgba(255, 204, 0, .08); border-color: rgba(255, 204, 0, .3); color: #ffcc00; }
.account-remaining.expired { background: rgba(242, 87, 79, .09); border-color: rgba(242, 87, 79, .32); color: #f2574f; }
.sys-badge {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 2px 10px; border-radius: 999px;
  background: rgba(105, 194, 107, .08); border: 1px solid rgba(105, 194, 107, .28);
  color: #69c26b; font-size: 11.5px; white-space: nowrap;
}
.sys-badge.bad { background: rgba(242, 87, 79, .09); border-color: rgba(242, 87, 79, .32); color: #f2574f; }
.sys-badge.muted { background: rgba(174, 183, 198, .06); border-color: rgba(174, 183, 198, .18); color: #aeb7c6; }
/* 登录独立页面：整屏深色，左=品牌介绍，右=表单 */
.login-overlay {
  position: fixed; inset: 0; background: #14181f; z-index: 999;
  display: flex; align-items: center; justify-content: center; padding: 24px;
}
/* ===== 极光入场遮罩：登录成功或已登录用户载入时的全屏开场动画（GSAP 驱动，见 gsap-fx.js fxAuroraSplash） ===== */
/* 默认 display:none：未登录停留在登录/注册页时绝不出现；仅由 fxAuroraSplash 显式展示。
   遮罩覆盖登录/主界面（z 9998），低于 toast(9999) 使启动期提示仍可见；aria-hidden 装饰性元素 */
.aurora-splash {
  position: fixed; inset: 0; z-index: var(--aur-z-splash, 9998);
  background: radial-gradient(130% 110% at 50% 0%, #10151d 0%, #0a0e15 58%, #070a10 100%);
  overflow: hidden;
  display: none;
}
.aurora-ambient {
  position: absolute; border-radius: 50%;
  filter: blur(72px); mix-blend-mode: screen;
  will-change: transform, opacity; pointer-events: none;
}
.aurora-a {
  width: 62vmax; height: 62vmax; left: -22vmax; top: -26vmax;
  background: radial-gradient(circle, rgba(0, 229, 255, .55) 0%, rgba(0, 229, 255, .12) 40%, transparent 62%);
}
.aurora-b {
  width: 56vmax; height: 56vmax; right: -24vmax; bottom: -30vmax;
  background: radial-gradient(circle, rgba(180, 120, 255, .52) 0%, rgba(180, 120, 255, .12) 40%, transparent 62%);
}
.aurora-c {
  width: 50vmax; height: 50vmax; left: 30%; top: 34%;
  background: radial-gradient(circle, rgba(96, 240, 170, .42) 0%, rgba(96, 240, 170, .10) 42%, transparent 62%);
}
.aurora-beam {
  position: absolute; top: -18%; bottom: -18%;
  width: 34vw; left: -42vw;
  background: linear-gradient(90deg, transparent 0%, rgba(150, 245, 255, .5) 42%, rgba(255, 213, 74, .4) 58%, transparent 100%);
  filter: blur(30px); mix-blend-mode: screen;
  transform: rotate(-12deg);
  will-change: transform, opacity; pointer-events: none;
}
.login-panel {
  display: flex; width: min(900px, 100%); max-height: 100%;
  background: #1b212b; border: 1px solid #2a3240; border-radius: 14px;
  overflow: hidden; box-shadow: 0 18px 50px rgba(0,0,0,0.45);
}
.login-side {
  flex: 1.15; padding: 38px 34px; display: flex; flex-direction: column; justify-content: center;
  background:
    radial-gradient(120% 90% at 88% -8%, rgba(255,213,74,.16), transparent 52%),
    radial-gradient(110% 80% at -12% 112%, rgba(146,96,224,.16), transparent 58%),
    linear-gradient(165deg, #232c42 0%, #18202e 55%, #131a26 100%);
  border-right: 1px solid #2a3240;
}
.login-logo { width: 54px; height: 54px; border-radius: 14px; margin-bottom: 16px; box-shadow: 0 8px 24px rgba(0,0,0,.45), 0 0 0 1px rgba(255,213,74,.25); }
.login-brand { font-size: 23px; font-weight: 700; color: #ffd54a; margin-bottom: 8px; letter-spacing: 1px; }
.login-slogan { color: #aab3c2; font-size: 13px; line-height: 1.7; margin-bottom: 24px; }
.login-feats { list-style: none; display: flex; flex-direction: column; gap: 11px; }
.login-feats li { color: #c9ced8; font-size: 13px; display: flex; align-items: center; gap: 8px; }
.login-form { flex: 1; display: flex; align-items: center; justify-content: center; padding: 34px 30px; }
.login-form .login-box {
  width: 100%; max-width: 340px; background: transparent;
  border: 0; padding: 0; border-radius: 0; box-shadow: none;
}
.login-title { font-size: 20px; font-weight: 700; color: #ffd54a; text-align: center; }
.login-field { margin-bottom: 12px; display: flex; flex-direction: column; gap: 6px; }
.login-field label { color: #aab3c2; }
.login-field .text-input { width: 100%; padding: 8px 10px; font-size: 14px; }
.login-remember { margin-bottom: 4px; }
.login-remember .chk { color: #aab3c2; font-size: 13px; }
.pwd-wrap { position: relative; display: flex; align-items: center; }
.pwd-wrap .text-input { padding-right: 48px; }
.pwd-eye {
  position: absolute; right: 4px; top: 50%; transform: translateY(-50%);
  background: transparent; color: #8a93a3; border: 0; cursor: pointer;
  font-size: 12px; padding: 4px 6px; border-radius: 4px;
}
.pwd-eye:hover { color: #ffd54a; }
/* 邮箱验证码输入行：输入框 + 「获取验证码」按钮 */
.code-wrap { position: relative; display: flex; align-items: center; gap: 8px; }
.code-wrap .text-input { flex: 1; padding-right: 8px; }
.code-btn {
  flex-shrink: 0; white-space: nowrap; background: #2c3544; color: #ffd54a;
  border: 1px solid #3a475e; border-radius: 6px; padding: 7px 12px;
  font-size: 13px; cursor: pointer;
}
.code-btn:hover:not(:disabled) { border-color: #6b5a22; }
.code-btn:disabled { opacity: .5; cursor: not-allowed; }
.login-switch-sep { color: #8a93a3; margin: 0 6px; }
.login-err { color: #f2574f; font-size: 13px; min-height: 18px; margin-top: 2px; }
.login-qq { margin: 2px 0 10px; text-align: center; }
.login-qq-line { color: #aab3c2; font-size: 13px; margin-bottom: 8px; }
.login-qq-line b { color: #ffd54a; }
.login-qq-qr { width: 132px; height: 132px; border-radius: 8px; border: 1px solid #2b3342; }
.login-qq-tip { color: #8a93a3; font-size: 12px; margin-top: 8px; }
.login-switch { margin-top: 14px; text-align: center; font-size: 13px; }
.login-switch-link { color: var(--aur-gold); text-decoration: none; background: none; border: 0; padding: 0; font-size: inherit; cursor: pointer; }
.login-switch-link:hover { text-decoration: underline; }
/* 未登录：隐藏整个主界面，登录页为独立页面 */
body.guest .layout, body.guest #userbar, body.guest #marketbar,
body.guest .mobile-tabbar, body.guest .more-mask, body.guest .more-drawer,
body.guest .backtop { display: none !important; }

/* 早盘竞价结果表：列显隐面板 */
.col-pref {
  position: absolute; right: 0; top: 100%; margin-top: 6px; z-index: 30;
  background: #1b212b; border: 1px solid #354052; border-radius: 8px;
  padding: 10px 12px; min-width: 150px; box-shadow: 0 6px 18px rgba(0,0,0,.4);
}
.col-pref-title { color: #8a93a3; font-size: 12px; margin-bottom: 6px; }
.col-pref-item { display: flex; align-items: center; gap: 6px; padding: 3px 0; font-size: 13px; color: #d5d9e0; }

/* 回到顶部按钮（默认隐藏，滚动超一屏后由 JS 加 .show；桌面端不显示） */
.backtop {
  position: fixed; right: 18px; bottom: 18px; z-index: 60; display: none;
  width: 42px; height: 42px; border-radius: 50%;
  background: #2c3544; color: #d5d9e0; border: 1px solid #3a475e;
  font-size: 18px; cursor: pointer; box-shadow: 0 4px 14px rgba(0,0,0,.35);
}
.backtop.show { display: block; }
.backtop:hover { background: #37435a; border-color: #6b5a22; }
@media (min-width: 769px) { .backtop { display: none !important; } }

/* ===== 进入动画：右侧抽屉滑入、回到顶部 =====
   模态/弹窗/登录页/页面切换的入场一律由 GSAP（gsap-fx.js）驱动，CSS 不再做入场动画，
   避免 CSS animation 与 GSAP 内联样式竞争（动画结束瞬间控制权交回产生可见跳变/闪烁）。
   GSAP 不可用或系统「减弱动态效果」时直接瞬时显示（优雅降级）。
   仅低频交互动效；数据表格/轮询等高频区一律不动。 */
@keyframes pop-in { from { opacity: 0; transform: scale(.95); } to { opacity: 1; transform: scale(1); } }
@keyframes drawer-in { from { transform: translateX(100%); } to { transform: translateX(0); } }
@keyframes backtop-in { from { opacity: 0; transform: translateY(8px) scale(.85); } to { opacity: 1; transform: none; } }
.col-pref:not(.hidden) { animation: pop-in .18s cubic-bezier(.23,1,.32,1); transform-origin: top right; }
.more-drawer:not(.hidden) { animation: drawer-in .26s cubic-bezier(.23,1,.32,1); }
.backtop.show { animation: backtop-in .18s ease-out; }

/* 无障碍：系统开启「减弱动态效果」时关闭以上动效与骨架流光 */
@media (prefers-reduced-motion: reduce) {
  .popup-body, .login-box, .more-drawer, .col-pref, .backtop.show, .page.active, .sk { animation: none !important; }
  .btn:active, .tab:active, .nav-item:active, .m-tab:active, .m-drawer-item:active,
  .ltab:active, .popup-close:active, .backtop:active,
  .tool-card:active, .pwd-eye:active { transform: none !important; }
  .tool-card:hover { transform: none !important; }
}

/* ============ 移动端适配（≤768px：隐藏左侧导航，改底部 Tab + 更多抽屉） ============ */
.mobile-tabbar, .more-mask, .more-drawer { display: none; }

@media (max-width: 768px) {
  .sidenav { display: none; }
  .layout { display: block; }
  .layout main, main { padding: 8px 10px calc(82px + env(safe-area-inset-bottom)); max-width: none; }

  /* 底部 Tab 栏：高度随安全区调整，六项在窄屏仍保持可点击且不挤压。 */
  .mobile-tabbar {
    display: flex; position: fixed; left: 0; right: 0; bottom: 0; z-index: 90;
    background: rgba(23, 28, 36, .88);
    -webkit-backdrop-filter: blur(14px) saturate(1.2); backdrop-filter: blur(14px) saturate(1.2);
    border-top: 1px solid rgba(42, 50, 64, .8);
    padding: 3px 6px calc(env(safe-area-inset-bottom) + 2px);
  }
  .mtabs { display: flex; flex: 1; min-width: 0; gap: 2px; }
  /* 原生化 Tab：图标 + 文字纵向排布，选中态金色胶囊 + 图标放大上浮，按压反馈；去 tap 高亮 */
  .m-tab {
    position: relative;
    flex: 1 1 0; min-width: 0;
    display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px;
    background: none; border: 0; color: #8a93a3;
    font-size: 11px; line-height: 1.15; padding: 6px 2px;
    min-height: 54px; border-radius: 12px;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: pointer;
    -webkit-tap-highlight-color: transparent; touch-action: manipulation;
    transition: color .18s ease, background .18s ease, transform .12s ease;
  }
  .m-ic { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; font-size: 23px; color: inherit; transition: transform .2s ease; }
  .m-ic .icon, .m-ic .icon svg { width: 1em; height: 1em; }
  .m-tab:active { transform: scale(.92); background: rgba(255, 255, 255, .06); }
  .m-tab.active {
    color: #ffd54a; font-weight: 600;
    background: linear-gradient(180deg, rgba(255,213,74,.11), rgba(255,213,74,.03));
  }
  .m-tab.active .m-ic { transform: translateY(-1px) scale(1.1); }
  .more-mask { display: block; position: fixed; inset: 0; background: rgba(0,0,0,.5); z-index: 91; }
  .more-drawer {
    display: block; position: fixed; top: 0; right: 0; bottom: 0; width: 232px; z-index: 92;
    background: #1b212b; border-left: 1px solid #2a3240; padding: 18px 10px; overflow-y: auto;
  }
  .m-drawer-title {
    color: #ffd54a; font-size: 14px; font-weight: 700; padding: 4px 10px 12px;
    border-bottom: 1px solid #2a3240; margin-bottom: 8px;
  }
  .m-drawer-item {
    position: relative;
    display: block; width: 100%; background: transparent; color: #b7bfcc; border: 0;
    text-align: left; padding: 11px 14px 11px 17px; border-radius: 8px; font-size: 14px; cursor: pointer;
  }
  .m-drawer-item:hover { background: #242c39; }
  .m-drawer-item.active {
    background: linear-gradient(90deg, rgba(255,213,74,.09), rgba(255,213,74,.02));
    color: #ffd54a; font-weight: 600;
  }
  .m-drawer-item.active::before {
    content: ""; position: absolute; left: 0; top: 50%; transform: translateY(-50%);
    width: 3px; height: 55%; border-radius: 0 3px 3px 0;
    background: linear-gradient(180deg, #ffe9a8, #d9a83c);
  }

  /* 顶部行情栏：手机端仅保留概览与三个精简指数，不使用横向滚动轨道。 */
  /* 顶部沉浸式：用户栏 sticky 承载刘海安全区，行情栏紧随其下，滚动时顶部栏不消失（原生 App 感） */
  .userbar {
    position: sticky; top: 0; z-index: 45;
    min-height: 34px; padding: calc(env(safe-area-inset-top, 0px) + 5px) 12px 5px; gap: 7px;
    background: linear-gradient(180deg, #12161e, #171c24);
    border-bottom: 1px solid #2a3240; overflow: hidden;
  }
  .userbar #top-user { font-size: 12px; flex: 0 0 auto; }
  .userbar .btn { margin-left: auto; padding: 3px 8px; font-size: 11px; min-height: 34px; display: inline-flex; align-items: center; }
  .account-remaining { font-size: 11px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .sys-badge { display: none; }

  .marketbar { position: sticky; top: var(--app-topbar-h, 0px); padding: 6px 8px 7px; overflow: hidden; }
  .mb-inner { overflow: hidden; padding: 0; }
  /* 8 张卡改横向滚动（移动端窄屏无法并列 8 列） */
  .mb-track {
    display: flex; gap: 6px; overflow-x: auto;
    grid-template-columns: none;
    scrollbar-width: thin; scrollbar-color: #2a3240 transparent;
    -webkit-overflow-scrolling: touch;
  }
  .mb-track::-webkit-scrollbar { height: 4px; }
  .mb-track::-webkit-scrollbar-thumb { background: #2a3240; border-radius: 2px; }
  .mb-tile {
    flex: 0 0 130px; min-width: 130px;
    padding: 6px 8px 7px;
  }
  .tile-num { font-size: 18px; }
  .cell-num { font-size: 16px; }
  .tile-name, .tile-name-double, .tile-meta { font-size: 10px; }
  #mb-amount { font-size: 13px; }
  .mb-tag { padding: 0 4px; font-size: 9px; }
  .tile-spark { width: 60px; height: 22px; }


  /* 分栏改垂直堆叠 */
  .split-h { flex-direction: column; gap: 8px; }
  .live-split .live-left { flex: none; border-right: 0; border-bottom: 1px solid #2a3240; padding-right: 0; padding-bottom: 10px; }
  .live-split .live-right { max-height: 56vh; }
  .screen-split .screen-right { flex: none; border-left: 0; padding-left: 0; }
  .track-split .track-left { flex: none; border-right: 0; padding-right: 0; }
  .track-split .track-right { flex: none; }
  .sector-split .sector-left { flex: none; border-right: 0; padding-right: 0; height: auto; min-height: 0; }
  .sector-table-wrap { flex: none; max-height: 46vh; }
  .sector-table-wrap table { table-layout: auto; width: max-content; min-width: 720px; }
  #sector-fund { min-height: 240px; }
  #auction-chart { height: 220px !important; }
  .tt-chart { height: 320px; }
  .backtest-panel, .bid-anomaly-panel { min-height: 0; gap: 10px; }
  .bt-toolbar { align-items: stretch; flex-direction: column; gap: 10px; padding: 10px; }
  .bt-actions { justify-content: flex-start; }
  .bt-summary { grid-template-columns: repeat(3, minmax(100px, 1fr)); overflow-x: auto; }
  .bt-summary .qo-card { min-width: 100px; }
  .bt-workspace { grid-template-columns: 1fr; min-height: 0; overflow: visible; }
  .bt-results .tool-table { max-height: 48vh; min-height: 260px; }
  .bt-detail { border-left: 0; border-top: 1px solid #354052; max-height: none; }
  .bt-chart { height: 240px; }

  /* 裸表所在卡片横向滚动（acct-users 等未包滚动容器的表格） */
  .card { overflow-x: auto; }
  .qo-card, .model-card { max-width: none; }

  /* 弹窗近全屏 */
  .popup-body { width: 96vw; max-height: 92vh; padding: 12px; }
  .tool-body { width: 96vw; max-height: 92vh; }
  .popup-row { grid-template-columns: 1fr; }

  /* 登录页：分屏改上下布局 */
  .login-overlay { padding: 0; overflow-y: auto; align-items: flex-start; }
  .login-panel { flex-direction: column; width: 100%; border-radius: 0; border: 0; max-height: none; }
  .login-side { padding: 30px 22px 18px; border-right: 0; border-bottom: 1px solid #2a3240; }
  .login-logo { width: 44px; height: 44px; margin-bottom: 10px; }
  .login-brand { font-size: 20px; margin-bottom: 4px; }
  .login-slogan { margin-bottom: 14px; font-size: 12px; }
  .login-feats { display: none; }
  .login-form { padding: 22px 18px 30px; }
  .login-form .login-box { max-width: none; }

  /* 回到顶部按钮给放大后的底部 Tab 让位 */
  .backtop { right: 14px; bottom: calc(88px + env(safe-area-inset-bottom)); }

  /* 网格改单列 / 紧凑 */
  .tools-grid { grid-template-columns: 1fr; }
  .multi-grid { grid-template-columns: 1fr; }
  .cards-row { grid-template-columns: repeat(2, 1fr); }
  .ptitle { font-size: 15px; }
  .ptitle .muted { display: none; }
  .card { padding: 10px 12px; }
  th, td { padding: 6px; font-size: 12px; }
  .srow > span { width: auto; flex: 1 1 auto; }
  .tl-board { max-height: 56vh; }

  /* 小屏信息密度：控制条完整换行，避免标题、状态和操作相互挤压 */
  .row.head { align-items: flex-start; gap: 8px; }
  .row.head .ptitle { width: 100%; margin-bottom: 1px; }
  .row.head .muted { max-width: 100%; overflow-wrap: anywhere; }
  .row.head .btn { min-height: 36px; padding: 7px 12px; }
  .row.head input[type="text"] { flex: 1 1 160px; min-width: 0; width: auto; }
  .row.head > div[style*="position:relative"] { flex: 0 0 auto; }

  /* 表格各自滚动，普通卡片不再产生无意义横向滚动 */
  .card { overflow: visible; }
  /* 涨停聚焦各子面板（今昨对比/连板天梯/多维统计/涨停池）独立横向滚动，防表格截断 */
  .ltab-panel { overflow-x: auto; -webkit-overflow-scrolling: touch; overscroll-behavior: contain; }
  #tab-pool table { min-width: 720px; }
  .screen-left, .track-table-wrap, .sector-table-wrap,
  .rotation-wrap, .tool-table { overscroll-behavior: contain; -webkit-overflow-scrolling: touch; }
  .screen-split .screen-left { width: 100%; max-height: 48vh; overflow: auto; }
  .screen-split .screen-right { width: 100%; }
  .screen-right .row { display: grid; grid-template-columns: 1fr; gap: 10px; }
  .screen-right .popup-chart { min-width: 0; }
  .track-table-wrap { width: 100%; max-height: 48vh; min-height: 220px; }
  .track-split .track-right { width: 100%; }
  .sector-split .sector-right { width: 100%; min-width: 0; }
  .sector-table-wrap table { min-width: 620px; }
  .rotation-wrap table { min-width: 720px; }

  /* 信息流和比较卡：强制纵向阅读，避免双列在窄屏各自被压缩 */
  .live-split .live-left, .live-split .live-right { width: 100%; }
  .live-split .live-right { overflow-x: hidden; }
  .live-card { padding: 10px; }
  .live-user { max-width: 42%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  /* 时间轴：移动端改为「时间标签 + 单列堆叠」，干轴横置为时间表 */
  .tlv-row { grid-template-columns: 1fr; gap: 6px; padding: 12px 0; }
  .tl-board::before { display: none; }
  .tlv-mid {
    flex-direction: row; gap: 10px; padding: 4px 8px;
    border-left: none;
    background: rgba(255, 213, 74, 0.06);
    border-radius: 6px;
    width: auto;
  }
  .tlv-time { font-size: 12px; }
  .tlv-dot { width: 8px; height: 8px; box-shadow: 0 0 0 2px #14181f, 0 0 6px 1px currentColor; }
  .tlv-left, .tlv-right { gap: 6px; }
  .pool-card { padding: 8px 10px; }
  .lw-cards { gap: 6px; }
  .lw-card { width: calc(50% - 3px); }

  /* 表单、设置和工具弹层：输入及操作区在小屏占据可用宽度 */
  .srow { align-items: flex-start; flex-wrap: wrap; gap: 6px; padding: 7px 0; }
  .srow > span { flex-basis: 100%; }
  .srow input[type="number"] { width: 100%; max-width: none; min-height: 38px; padding: 8px 10px; }
  .model-card .row { align-items: stretch; }
  .model-card .text-input { width: 100%; min-width: 0; }
  #settings-section-common .row .btn { flex: 1 0 auto; }
  .tool-body { padding: 10px; }
  .tool-body .row { gap: 8px; }
  .tool-body .btn { min-height: 36px; }
  .tool-body .cards-row { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .tool-body .qo-card { min-width: 0; padding: 9px; }
  /* 量化选股工具栏：窄屏上下分块，左分隔线转为顶部边框，分段控件通栏 */
  .quant-toolbar { flex-direction: column; align-items: stretch; gap: 10px; }
  .qt-group + .qt-group { border-left: 0; padding-left: 0; border-top: 1px solid var(--aur-border); padding-top: 10px; }
  .qt-modes { display: flex; width: 100%; }
  .qt-modes .qv2-toggle { flex: 1; text-align: center; }

  /* 小屏浮层和反馈避开底部导航与安全区域 */
  .toast { left: 10px; right: 10px; bottom: calc(88px + env(safe-area-inset-bottom)); max-width: none; }
  .col-pref { position: fixed; right: 10px; left: 10px; top: auto; bottom: calc(88px + env(safe-area-inset-bottom)); max-height: 58vh; overflow: auto; }

  /* 触控目标加大：复选框 / 开关在窄屏更易点中 */
  input[type="checkbox"], input[type="radio"] { width: 18px; height: 18px; accent-color: #ffd54a; }

  /* ---- 原生化视觉微调（不改变布局，仅弱化网页痕迹） ---- */
  .card { border-radius: 14px; }
  /* 行情横向滚动隐藏滚动条轨道（原生 App 无滚动条痕迹） */
  .mb-track { scrollbar-width: none; -ms-overflow-style: none; }
  .mb-track::-webkit-scrollbar { display: none; height: 0; }
  /* 去浏览器 tap 高亮 + 消除双击缩放延迟 */
  html { -webkit-tap-highlight-color: transparent; }
  body { touch-action: manipulation; }
  /* 内容区加一点呼吸感，贴近 App 卡片流 */
  .layout main, main { padding-left: 12px; padding-right: 12px; }
}

@media (max-width: 380px) {
  .layout main, main { padding-left: 8px; padding-right: 8px; }
  .row.head .btn { padding-left: 10px; padding-right: 10px; }
  .cards-row, .tool-body .cards-row { grid-template-columns: 1fr; }
  .bt-summary { grid-template-columns: repeat(3, minmax(88px, 1fr)); }
}

/* ====================== UI 精修层（仅增强，不改变既有布局） ======================
   语义设计令牌：新组件与微调统一引用；浅色/工作主题文件可覆盖同名变量实现三主题一致。
   矢量图标钩子：Phosphor inline SVG 与旧 emoji 文本可安全共存。 */
:root {
  /* 移动端顶部栏高度（用户栏 sticky 总高：安全区 + 34 行高 + 10 padding + 1 边框），行情栏 sticky 紧随其下 */
  --app-topbar-h: calc(env(safe-area-inset-top, 0px) + 45px);
  /* ---- 表面层 ---- */
  --aur-bg: #14181f;
  --aur-surface: #1b212b;
  --aur-surface-2: #202632;
  --aur-surface-3: #242c39;
  --aur-surface-oled: #0d1017;
  /* ---- 边框层 ---- */
  --aur-border: #2a3240;
  --aur-border-strong: #354052;
  /* ---- 文字层 ---- */
  --aur-text: #e6e9ef;
  --aur-text-body: #d5d9e0;
  --aur-muted: #8a93a3;
  --aur-muted-2: #aab3c2;
  --aur-dim: #5b6674;
  /* ---- 品牌金色 ---- */
  --aur-gold: #ffd54a;
  --aur-gold-deep: #c99b1f;
  --aur-gold-hover: #e0b331;
  --aur-gold-soft: #ffcc00;
  /* ---- 语义色 ---- */
  --aur-up: #f2574f;
  --aur-down: #4dbf74;
  --aur-focus: rgba(255,213,74,.45);
  /* ---- 圆角阶梯 ---- */
  --aur-radius-xs: 4px;
  --aur-radius-sm: 6px;
  --aur-radius-md: 8px;
  --aur-radius-lg: 12px;
  --aur-radius-pill: 999px;
  /* ---- 字号阶梯 ---- */
  --aur-fs-xs: 11px;
  --aur-fs-sm: 12px;
  --aur-fs-base: 13px;
  --aur-fs-md: 14px;
  --aur-fs-lg: 16px;
  --aur-fs-xl: 18px;
  /* ---- z-index 阶梯 ---- */
  --aur-z-sticky: 10;
  --aur-z-dropdown: 30;
  --aur-z-header: 40;
  --aur-z-backtop: 60;
  --aur-z-mobile-nav: 90;
  --aur-z-drawer: 92;
  --aur-z-modal: 100;
  --aur-z-login: 999;
  --aur-z-menu: 1099;
  --aur-z-splash: 9998;
  --aur-z-toast: 9999;
  /* ---- 动效 ---- */
  --aur-t-fast: .15s ease;
  --aur-t-press: .16s ease-out;
  /* ---- 字体 ---- */
  --aur-font-api: "Segoe UI", "PingFang SC", "HarmonyOS Sans SC", "Microsoft YaHei", system-ui, sans-serif;
  --aur-font-num: ui-monospace, "SF Mono", "Cascadia Code", "JetBrains Mono", Consolas, monospace;
  /* ---- 阴影 ---- */
  --aur-shadow-card: 0 1px 0 rgba(255,255,255,.025) inset, 0 1px 3px rgba(0,0,0,.18);
  --aur-shadow-pop: 0 18px 50px rgba(0,0,0,.45);
}

/* 原生控件（日期选择器/下拉/滚动条）随主题变暗，避免深色界面中刺眼的系统白 */
html { color-scheme: dark; }

/* ===== 矢量图标（Phosphor inline SVG）：统一尺寸与基线对齐 ===== */
.icon { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; vertical-align: -0.125em; }
.icon svg { display: block; width: 1em; height: 1em; fill: currentColor; }
.nav-item, .m-drawer-item { display: flex; align-items: center; gap: 10px; }
.nav-item .icon, .m-drawer-item .icon { width: 20px; font-size: 19px; color: #7d8794; transition: color var(--aur-t-fast); }
.nav-item:hover .icon, .m-drawer-item:hover .icon,
.nav-item.active .icon, .m-drawer-item.active .icon { color: #ffd54a; }
.nav-item > svg, .m-drawer-item > svg { width: 20px; height: 20px; color: #7d8794; transition: color var(--aur-t-fast); }
.nav-item:hover > svg, .m-drawer-item:hover > svg,
.nav-item.active > svg, .m-drawer-item.active > svg { color: #ffd54a; }
.ptitle .icon { font-size: 17px; margin-right: 6px; color: var(--aur-gold); }
.ptitle .icon svg { fill: currentColor; }
.rv-card-title .icon { font-size: 15px; margin-right: 6px; color: var(--aur-gold); }
.rv-card-title .icon svg { fill: currentColor; }
.tab .icon, .btn .icon { font-size: 16px; margin-right: 2px; }
.tab.active .icon { color: #ffd54a; }
.tool-icon { display: inline-flex; align-items: center; justify-content: center; }
.tool-icon svg { width: 26px; height: 26px; }
.pt-icon { display: inline-flex; align-items: center; justify-content: center; }
.pt-icon svg { width: 20px; height: 20px; }
.login-feats .icon { width: 20px; font-size: 18px; color: #ffd54a; }
.popup-close, .pwd-eye { display: inline-flex; align-items: center; justify-content: center; }
.popup-close svg, .pwd-eye svg { width: 16px; height: 16px; }
.ann-head .icon { font-size: 15px; }

/* ===== 键盘焦点可见性（仅键盘触发的 focus，不影响鼠标点击） ===== */
button:focus-visible, [role="button"]:focus-visible {
  outline: 2px solid var(--aur-focus); outline-offset: 1px;
}

/* ===== 输入占位提示弱化 ===== */
input::placeholder, textarea::placeholder { color: var(--aur-dim); opacity: 1; }

/* ===== 平滑滚动（尊重「减弱动态效果」） ===== */
@media (prefers-reduced-motion: no-preference) {
  html { scroll-behavior: smooth; }
}

/* ===== 右上角用户菜单（头像点击弹出） ===== */
.userbar { align-items: center; }
.user-menu-btn {
  display: inline-flex; align-items: center; gap: 8px;
  background: transparent; border: 1px solid transparent; border-radius: 999px;
  padding: 3px 10px 3px 4px; cursor: pointer; color: var(--aur-text);
  transition: background-color .18s ease, border-color .18s ease, transform var(--aur-t-press);
}
.user-menu-btn:hover { background: rgba(217,168,60,.08); border-color: rgba(217,168,60,.28); }
.user-avatar, .um-avatar {
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 50%; color: #1a1405; font-weight: 800;
  background: linear-gradient(135deg, #ffd54a, #d9a83c);
  user-select: none; flex: none;
}
.user-avatar { width: 30px; height: 30px; font-size: 14px; }
.um-avatar { width: 72px; height: 72px; font-size: 30px; box-shadow: 0 0 0 3px rgba(217,168,60,.22); }
.user-menu-mask {
  position: fixed; inset: 0; z-index: 1098;
  background: rgba(0,0,0,.28); backdrop-filter: blur(1px);
}
.user-menu {
  position: fixed; top: 52px; right: 14px; z-index: 1099;
  width: 264px; border-radius: 14px; overflow: hidden;
  background: linear-gradient(180deg, #1d242f, #171d26);
  border: 1px solid rgba(217,168,60,.2);
  box-shadow: 0 14px 44px rgba(0,0,0,.5);
}
.um-head { padding: 22px 18px 16px; text-align: center; border-bottom: 1px solid rgba(255,255,255,.06); }
.um-name { margin-top: 10px; font-size: 17px; font-weight: 700; color: var(--aur-text); }
.um-sub { margin-top: 4px; font-size: 12px; color: var(--aur-dim); }
.um-sub.expired { color: #ff4d57; }
.um-items { padding: 8px; display: flex; flex-direction: column; }
.um-item {
  display: flex; align-items: center; gap: 12px;
  padding: 11px 12px; border: 0; border-radius: 9px;
  background: transparent; color: var(--aur-text);
  font-size: 14px; text-align: left; cursor: pointer;
  transition: background-color .15s ease, transform var(--aur-t-press);
}
.um-item:hover { background: rgba(217,168,60,.1); }
.um-item .icon { display: inline-flex; width: 20px; height: 20px; color: var(--aur-dim); }
.um-item:hover .icon { color: #ffd54a; }
.um-item .icon svg { width: 20px; height: 20px; fill: currentColor; }
.um-foot { padding: 10px; border-top: 1px solid rgba(255,255,255,.06); }
.um-logout {
  display: flex; align-items: center; justify-content: center; gap: 8px;
  width: 100%; padding: 10px; border-radius: 9px;
  background: rgba(255,77,87,.08); border: 1px solid rgba(255,77,87,.25);
  color: #ff6b74; font-size: 14px; font-weight: 600; cursor: pointer;
  transition: background-color .15s ease, transform var(--aur-t-press);
}
.um-logout:hover { background: rgba(255,77,87,.16); }
.um-logout .icon { display: inline-flex; width: 18px; height: 18px; }
.um-logout .icon svg { width: 18px; height: 18px; fill: currentColor; }
/* 个人资料弹窗行 */
.profile-rows { display: flex; flex-direction: column; gap: 12px; padding: 6px 2px; }
.profile-row { display: flex; justify-content: space-between; align-items: baseline; gap: 16px; }
.profile-label { color: var(--aur-dim); font-size: 13px; }
.profile-value { color: var(--aur-text); font-size: 14px; font-weight: 600; }

/* ===== 个人资料页 ===== */
.profile-hero-card { padding: 0; overflow: hidden; }
.profile-hero { display: flex; align-items: center; gap: 22px; padding: 28px 28px 24px; }
.profile-hero .um-avatar { flex-shrink: 0; }
.profile-hero-info { flex: 1; min-width: 0; }
.profile-hero-top { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.profile-hero-top .um-name { font-size: 22px; margin-top: 0; }
.profile-nick-row { display: flex; align-items: center; gap: 10px; margin-top: 12px; }
.profile-nick-input { max-width: 260px; }
.profile-nick-hint { font-size: 12px; margin-top: 6px; }
.btn-sm { padding: 5px 16px; font-size: 13px; }
.profile-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-top: 14px; }
.profile-col { display: flex; flex-direction: column; }
.profile-pwd-form { display: flex; flex-direction: column; gap: 10px; }
.profile-pwd-form .text-input { width: 100%; }
.profile-pwd-form .btn { align-self: flex-start; }
.profile-badges { display: flex; gap: 8px; margin-top: 10px; }
.profile-badge {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 4px 14px; border-radius: 999px; font-size: 13px; font-weight: 600;
  background: rgba(217,168,60,.1); border: 1px solid rgba(217,168,60,.4); color: #ffd54a;
}
.profile-badge.muted {
  background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.14);
  color: var(--aur-dim); font-weight: 500;
}
.profile-info-grid {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 14px;
}
.profile-cell { padding: 12px 14px; border-radius: 10px; background: rgba(255,255,255,.03); }
.profile-cell .profile-label { font-size: 12px; color: var(--aur-dim); margin-bottom: 6px; }
.profile-cell .profile-value { font-size: 15px; }
.profile-history-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.profile-history-table th, .profile-history-table td {
  text-align: left; padding: 8px 10px; border-bottom: 1px solid rgba(255,255,255,.06);
  color: var(--aur-text);
}
.profile-history-table th { color: var(--aur-dim); font-weight: 600; }
.profile-history-table tr:last-child td { border-bottom: 0; }
@media (max-width: 900px) {
  .profile-info-grid { grid-template-columns: 1fr 1fr; }
  .profile-grid { grid-template-columns: 1fr; }
  .profile-hero { flex-direction: column; text-align: center; padding: 24px 18px 20px; }
  .profile-hero-top { justify-content: center; }
  .profile-nick-row { justify-content: center; }
  .profile-nick-input { max-width: 100%; }
}
.profile-contact-row { padding: 4px 2px; }
.profile-contact-state { display: flex; flex-direction: column; gap: 10px; }
.profile-contact-line { font-size: 16px; font-weight: 600; color: var(--aur-text); }
.profile-contact-tip { font-size: 13px; line-height: 1.6; }
.profile-contact-btn { align-self: flex-start; opacity: .65; cursor: not-allowed; }

@media (max-width: 900px) {
  .user-menu { top: 46px; right: 8px; width: min(264px, calc(100vw - 16px)); }
}

/* ====================== 社区（UI 精修：金色品牌 · 卡片分层 · 双栏布局） ======================
   独立 --cm-* 令牌避免与全站 token 冲突；主色统一为品牌金，红涨绿跌沿用全站语义色。 */
.community-shell {
  --cm-gold: #ffd54a;
  --cm-gold-deep: #c99b1f;
  --cm-gold-soft: rgba(255, 213, 74, .10);
  --cm-gold-border: rgba(255, 213, 74, .30);
  --cm-bg: #0f141d;
  --cm-card: #161d29;
  --cm-card-2: #1c2533;
  --cm-card-3: #222c3c;
  --cm-line: #263041;
  --cm-line-soft: rgba(60, 74, 97, .35);
  --cm-text: #e6e9ef;
  --cm-body: #c6cdd9;
  --cm-muted: #8a93a3;
  --cm-dim: #5b6674;
  --cm-up: #f2574f;   /* 涨/红 */
  --cm-down: #4dbf74; /* 跌/绿 */
  --cm-radius: 12px;
  display: grid; grid-template-columns: minmax(0, 1fr) 292px; gap: 14px;
  align-items: start;
}
.community-shell .card { background: var(--cm-card); border-color: var(--cm-line); }

/* 主区 / 侧栏 */
.community-main { min-width: 0; }
.community-side { display: flex; flex-direction: column; gap: 14px; }
.community-side .side-card { padding: 14px 16px; }
.community-side .side-title {
  font-size: 13px; font-weight: 700; color: var(--cm-gold);
  margin-bottom: 10px; padding-bottom: 8px; border-bottom: 1px solid var(--cm-line-soft);
  display: flex; align-items: center; gap: 6px; letter-spacing: .3px;
}
.community-side .side-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.community-side .side-list li {
  font-size: 12.5px; color: var(--cm-body); line-height: 1.55; padding-left: 14px; position: relative;
}
.community-side .side-list li::before {
  content: ""; position: absolute; left: 0; top: 7px; width: 5px; height: 5px;
  border-radius: 50%; background: var(--cm-gold-deep);
}
.community-side .side-text { font-size: 12.5px; color: var(--cm-muted); line-height: 1.7; margin: 0; }

/* 子版 tab：卡片式分段控件（掘金/V2EX 风格） */
.community-tabs {
  display: flex; gap: 6px; flex-wrap: wrap;
  margin: 12px 0 16px; padding: 5px; border-radius: 10px;
  background: var(--cm-bg); border: 1px solid var(--cm-line);
}
.community-tabs .ct-tab {
  background: transparent; color: var(--cm-muted); border: 0;
  padding: 7px 16px; font-size: 13.5px; font-weight: 600; cursor: pointer;
  border-radius: 7px; display: inline-flex; align-items: center; gap: 6px;
  transition: background-color var(--aur-t-fast), color var(--aur-t-fast), box-shadow var(--aur-t-fast);
}
.community-tabs .ct-tab .icon { font-size: 16px; }
.community-tabs .ct-tab:hover { background: var(--cm-card-2); color: var(--cm-text); }
.community-tabs .ct-tab.active {
  background: linear-gradient(180deg, rgba(255, 213, 74, .18), rgba(201, 155, 31, .10));
  color: var(--cm-gold); box-shadow: inset 0 0 0 1px var(--cm-gold-border);
}
.community-tabs .ct-tab[hidden] { display: none !important; }
.community-tabs .ct-tab:focus-visible { outline: 2px solid var(--aur-focus); outline-offset: 1px; }

/* 子版内容容器：切版淡入 */
.ct-pane { animation: cmFadeIn .22s ease-out; }
.ct-pane[hidden] { display: none; }
@keyframes cmFadeIn { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }

/* ===== 广场：帖子卡片 ===== */
.community-card {
  background: var(--cm-card-2); border: 1px solid var(--cm-line);
  border-radius: var(--cm-radius); padding: 14px 16px; margin-bottom: 12px;
  transition: border-color var(--aur-t-fast), transform var(--aur-t-press), box-shadow var(--aur-t-fast);
}
.community-card:hover { border-color: var(--cm-line, #3a4a63); box-shadow: 0 6px 22px rgba(0,0,0,.28); }
.community-card:active { transform: translateY(1px); }
.community-card .community-head {
  display: flex; align-items: center; gap: 8px; margin-bottom: 8px; font-size: 12.5px; color: var(--cm-muted);
}
.community-card .community-user { color: var(--cm-text); font-weight: 600; font-size: 13px; }
.community-card .community-title { font-size: 15px; font-weight: 700; color: var(--cm-text); line-height: 1.45; margin-bottom: 6px; }
.community-card .community-content { font-size: 13px; color: var(--cm-body); line-height: 1.7; white-space: pre-wrap; word-break: break-word; }
.community-card .community-imgs { display: grid; grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: 8px; margin: 10px 0 4px; }
.community-card .community-imgs img { width: 100%; aspect-ratio: 4/3; object-fit: cover; border-radius: 8px; border: 1px solid var(--cm-line-soft); cursor: zoom-in; }
.community-card .community-actions { display: flex; gap: 8px; align-items: center; margin-top: 12px; padding-top: 10px; border-top: 1px dashed var(--cm-line-soft); flex-wrap: wrap; }
.community-card .community-actions .btn.small { padding: 5px 12px; font-size: 12px; border-radius: 7px; }
.community-card .community-actions .btn.small[data-act="like"] { color: var(--cm-gold); }
.community-card .community-actions .btn.small[data-act="like"]:hover { background: var(--cm-gold-soft); }
.community-card .community-actions .btn.small[data-act="toggle-comments"] { color: var(--cm-body); }
.community-card .community-actions .btn.small[data-act="toggle-comments"]:hover { background: var(--cm-card-3); }
.community-card .community-actions .btn.small.danger { color: #ff8a80; background: transparent; }
.community-card .community-actions .btn.small.danger:hover { background: rgba(242, 87, 79, .12); }

/* 发帖表单（内嵌卡片） */
.model-card.community-form { background: var(--cm-bg); border: 1px solid var(--cm-gold-border); }
.community-imgs-preview { display: flex; flex-wrap: wrap; gap: 8px; margin: 8px 0; }
.community-thumb { position: relative; width: 72px; height: 72px; border-radius: 8px; overflow: hidden; border: 1px solid var(--cm-line); }
.community-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.community-thumb-del {
  position: absolute; right: 2px; top: 2px; width: 20px; height: 20px; border-radius: 50%;
  background: rgba(0,0,0,.65); color: #fff; border: 0; cursor: pointer; line-height: 1; font-size: 13px;
}

/* ===== 报单表单 ===== */
.report-header {
  display: flex; align-items: center; gap: 14px; padding: 4px 2px 12px;
  border-bottom: 1px dashed var(--cm-line-soft); flex-wrap: wrap;
}
.report-date { font-size: 15px; font-weight: 700; color: var(--cm-text); }
.report-date #report-date-text { color: var(--cm-gold); font-variant-numeric: tabular-nums; }
.report-flow { color: var(--cm-gold); cursor: pointer; text-decoration: none; }
.report-flow:hover { text-decoration: underline; }
.report-flow-tip {
  margin: 10px 0; padding: 10px 14px; border-left: 3px solid var(--cm-gold);
  background: var(--cm-gold-soft); font-size: 13px; line-height: 1.7; border-radius: 4px; color: var(--cm-body);
}
.report-banner {
  margin: 12px 0; padding: 11px 14px; background: rgba(242, 87, 79, .07);
  border: 1px solid rgba(242, 87, 79, .18); border-radius: 8px; font-size: 13.5px; cursor: pointer; color: var(--cm-body);
}
.report-banner:hover { background: rgba(242, 87, 79, .12); }
.report-section {
  background: var(--cm-card-2); border: 1px solid var(--cm-line);
  border-radius: var(--cm-radius); padding: 14px 16px; margin: 12px 0;
  transition: border-color var(--aur-t-fast);
}
.report-section:focus-within { border-color: var(--cm-gold-border); }
.report-section .rs-title { font-size: 14px; font-weight: 700; margin-bottom: 10px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; color: var(--cm-text); }
.report-section .rs-title .muted { font-weight: normal; }
.rs-no {
  display: inline-flex; align-items: center; justify-content: center;
  width: 20px; height: 20px; border-radius: 50%; flex-shrink: 0;
  background: linear-gradient(135deg, var(--cm-gold), var(--cm-gold-deep)); color: #14181f;
  font-size: 11.5px; font-weight: 800; line-height: 1;
}

.report-imgs { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 8px; }
.report-img-slot {
  width: 84px; height: 84px; border: 1.5px dashed var(--cm-line, #3a4a63);
  border-radius: 10px; display: flex; align-items: center; justify-content: center;
  cursor: pointer; color: var(--cm-muted); transition: border-color var(--aur-t-fast), color var(--aur-t-fast), background var(--aur-t-fast);
}
.report-img-slot .big-plus { font-size: 28px; font-weight: 300; line-height: 1; }
.report-img-slot:hover { border-color: var(--cm-gold); color: var(--cm-gold); background: var(--cm-gold-soft); }
.report-img-thumb {
  position: relative; width: 84px; height: 84px; border-radius: 10px; overflow: hidden;
  border: 1px solid var(--cm-line);
}
.report-img-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; cursor: zoom-in; }
.report-img-thumb .rimg-del {
  position: absolute; right: 3px; top: 3px; width: 22px; height: 22px;
  border-radius: 50%; background: rgba(0,0,0,.68); color: #fff;
  border: 0; cursor: pointer; line-height: 1; font-size: 14px;
}
.report-img-thumb .rimg-del:hover { background: var(--cm-up); }

.report-input-wrap { position: relative; }
.report-input-wrap .ipt { width: 100%; padding-right: 44px; font-size: 15px; }
.report-input-wrap .ipt:focus { border-color: var(--cm-gold-border); }
.report-suffix {
  position: absolute; right: 14px; top: 50%; transform: translateY(-50%);
  color: var(--cm-muted); font-size: 13px; pointer-events: none;
}

.report-holding-row {
  display: grid; grid-template-columns: 108px 1fr 92px 92px 32px;
  gap: 8px; margin-bottom: 8px; align-items: center;
}
.report-holding-row input { padding: 7px 9px; font-size: 13px; border-radius: 7px; }
.report-holding-row .rh-del {
  width: 30px; height: 30px; border-radius: 50%;
  background: rgba(242, 87, 79, .10); border: 0; color: var(--cm-up);
  cursor: pointer; font-size: 16px; line-height: 1;
}
.report-holding-row .rh-del:hover { background: rgba(242, 87, 79, .22); }

/* ===== 排名：Top3 领奖台 + 列表 ===== */
.rank-podium { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 14px; }
.podium-card {
  background: var(--cm-card-2); border: 1px solid var(--cm-line); border-radius: var(--cm-radius);
  padding: 14px 12px 12px; text-align: center; position: relative; overflow: hidden;
  display: flex; flex-direction: column; gap: 6px; align-items: center;
}
.podium-card::before {
  content: ""; position: absolute; inset: 0 0 auto; height: 3px;
  background: linear-gradient(90deg, transparent, var(--pc), transparent); opacity: .8;
}
.podium-card.pd-1 { --pc: #ffd54a; border-color: rgba(255, 213, 74, .35); box-shadow: 0 8px 24px rgba(255, 213, 74, .08); }
.podium-card.pd-2 { --pc: #b8c0cf; }
.podium-card.pd-3 { --pc: #cd7f32; }
.podium-card .pd-rank {
  position: absolute; top: 8px; left: 10px; font-size: 11px; font-weight: 800;
  color: var(--cm-dim); letter-spacing: .5px;
}
.podium-card.pd-1 .pd-rank { color: var(--cm-gold); }
.podium-card .pd-avatar {
  width: 40px; height: 40px; border-radius: 50%; margin-top: 6px;
  background: linear-gradient(135deg, var(--cm-card-3), var(--cm-card-2));
  border: 2px solid var(--pc, var(--cm-line)); color: var(--pc, var(--cm-text));
  display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 16px;
}
.podium-card .pd-name { font-size: 13px; font-weight: 700; color: var(--cm-text); max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.podium-card .pd-assets { font-size: 15px; font-weight: 800; color: var(--pc, var(--cm-gold)); font-variant-numeric: tabular-nums; }
.podium-card .pd-meta { font-size: 11px; color: var(--cm-muted); }

.rank-table { width: 100%; border-collapse: collapse; font-size: 13.5px; background: var(--cm-card-2); border: 1px solid var(--cm-line); border-radius: var(--cm-radius); overflow: hidden; }
.rank-table th, .rank-table td { padding: 9px 12px; border-bottom: 1px solid var(--cm-line); text-align: left; }
.rank-table th { color: var(--cm-muted); font-weight: 600; font-size: 12px; background: var(--cm-bg); }
.rank-table tbody tr:last-child td { border-bottom: 0; }
.rank-table tbody tr:hover td { background: rgba(255,255,255,.02); }
.rank-table .rk-rank { font-variant-numeric: tabular-nums; font-weight: 700; }
.rank-table .rk-top1 { color: #f5b50a; }
.rank-table .rk-top2 { color: #b8c0cf; }
.rank-table .rk-top3 { color: #cd7f32; }
.rank-table .rk-assets { text-align: right; font-variant-numeric: tabular-nums; font-weight: 600; color: var(--cm-text); }
.rank-table .rk-score { text-align: right; font-variant-numeric: tabular-nums; }

/* ===== 我的：报单时间线 ===== */
.mine-timeline { position: relative; padding-left: 22px; }
.mine-timeline::before {
  content: ""; position: absolute; left: 6px; top: 6px; bottom: 6px; width: 2px;
  background: linear-gradient(180deg, var(--cm-gold-border), var(--cm-line));
  border-radius: 2px;
}
.report-card {
  position: relative; background: var(--cm-card-2); border: 1px solid var(--cm-line);
  border-radius: var(--cm-radius); padding: 13px 15px; margin-bottom: 12px;
  transition: border-color var(--aur-t-fast);
}
.report-card::before {
  content: ""; position: absolute; left: -22px; top: 16px; width: 12px; height: 12px;
  border-radius: 50%; background: var(--cm-gold); border: 3px solid var(--cm-bg);
  box-shadow: 0 0 0 1px var(--cm-gold-border);
}
.report-card:hover { border-color: var(--cm-line, #3a4a63); }
.report-card .rc-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; gap: 8px; flex-wrap: wrap; }
.report-card .rc-date { font-weight: 700; font-size: 14px; color: var(--cm-text); }
.report-card .rc-assets { color: var(--cm-gold); font-variant-numeric: tabular-nums; font-weight: 700; }
.report-card .rc-meta { display: flex; gap: 12px; flex-wrap: wrap; font-size: 12px; color: var(--cm-muted); margin-bottom: 6px; }
.report-card .rc-holdings { font-size: 13px; line-height: 1.7; color: var(--cm-body); }
.report-card .rc-notes { font-size: 13px; color: var(--cm-muted); margin-top: 6px; white-space: pre-wrap; word-break: break-word; border-left: 2px solid var(--cm-line-soft); padding-left: 10px; }
.report-card .rc-imgs { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 8px; }
.report-card .rc-imgs img { width: 64px; height: 64px; object-fit: cover; border-radius: 8px; cursor: zoom-in; border: 1px solid var(--cm-line-soft); }
.report-card .rc-actions { display: flex; gap: 8px; margin-top: 10px; }
.report-card .rc-actions .btn { padding: 4px 12px; font-size: 12px; }

/* ===== 社区空状态 ===== */
.community-empty {
  text-align: center; padding: 40px 16px; color: var(--cm-muted);
  border: 1px dashed var(--cm-line); border-radius: var(--cm-radius); background: var(--cm-bg);
}
.community-empty .ce-icon { font-size: 30px; margin-bottom: 10px; opacity: .8; }
.community-empty .ce-text { font-size: 13px; line-height: 1.6; }

/* ===== 排名：周期切换（今日 / 本周 / 本月，复利笔记式收益率排行） ===== */
.rank-period {
  display: inline-flex; align-items: center; gap: 2px;
  background: var(--cm-bg); border: 1px solid var(--cm-line);
  border-radius: 999px; padding: 3px;
}
.rp-btn {
  border: 0; background: transparent; color: var(--cm-muted);
  font-size: 12.5px; font-weight: 600; padding: 5px 14px;
  border-radius: 999px; cursor: pointer; line-height: 1.4;
  transition: color var(--aur-t-fast), background var(--aur-t-fast);
}
.rp-btn:hover { color: var(--cm-text); }
.rp-btn.active {
  background: linear-gradient(135deg, var(--cm-gold), var(--cm-gold-deep));
  color: #14181f; font-weight: 800;
}
.rank-period:focus-within { border-color: var(--cm-gold-border); }

/* 领奖台 / 排名表：区间收益率主数字（颜色由 JS 内联红涨绿跌） */
.podium-card .pd-ret {
  font-size: 20px; font-weight: 800; line-height: 1.2;
  font-variant-numeric: tabular-nums; margin-top: 2px;
}
.rank-table .rk-ret { text-align: right; font-variant-numeric: tabular-nums; font-weight: 700; }

/* ===== 我的：统计卡 ===== */
.mine-stats {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px;
  margin-bottom: 12px;
}
.mine-stats:empty { display: none; }
.ms-cell {
  background: var(--cm-card-2); border: 1px solid var(--cm-line);
  border-radius: var(--cm-radius); padding: 14px 10px;
  display: flex; flex-direction: column; align-items: center; gap: 4px;
}
.ms-val {
  font-size: 19px; font-weight: 800; line-height: 1.2;
  color: var(--cm-text); font-variant-numeric: tabular-nums;
}
.ms-label { font-size: 11px; color: var(--cm-muted); letter-spacing: .3px; }

/* ===== 我的：曲线 / 日历区块 ===== */
.mine-block {
  background: var(--cm-card-2); border: 1px solid var(--cm-line);
  border-radius: var(--cm-radius); padding: 14px 16px; margin-bottom: 12px;
}
.ms-title {
  font-size: 14px; font-weight: 700; color: var(--cm-text);
  margin-bottom: 10px; display: flex; align-items: center; gap: 8px;
}
.mine-chart { width: 100%; height: 260px; }

/* ===== 我的：日历收益（复利笔记式月历，红涨绿跌） ===== */
.mc-head { justify-content: space-between; }
.mc-nav {
  display: inline-flex; align-items: center; gap: 10px;
  font-size: 12.5px; font-weight: 600; color: var(--cm-muted);
  font-variant-numeric: tabular-nums;
}
.mc-nav-btn {
  width: 26px; height: 26px; border-radius: 50%;
  border: 1px solid var(--cm-line); background: var(--cm-bg);
  color: var(--cm-muted); font-size: 15px; line-height: 1; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center; padding: 0 0 2px;
  transition: color var(--aur-t-fast), border-color var(--aur-t-fast), background var(--aur-t-fast);
}
.mc-nav-btn:hover { color: var(--cm-gold); border-color: var(--cm-gold-border); background: var(--cm-gold-soft); }

.mine-calendar { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; }
.mc-wk { text-align: center; font-size: 11px; color: var(--cm-dim); padding: 2px 0; }
.mc-pad { visibility: hidden; }
.mc-day {
  min-height: 52px; border-radius: 8px; padding: 4px 2px;
  background: var(--cm-bg); border: 1px solid var(--cm-line-soft);
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px;
  font-size: 12px; color: var(--cm-muted); font-variant-numeric: tabular-nums;
}
.mc-day i { font-style: normal; line-height: 1.1; }
.mc-day b { font-size: 11.5px; font-weight: 700; line-height: 1.1; }
.mc-day.mc-flat { background: var(--cm-card-3); border-color: transparent; }
.mc-day.mc-flat b { color: var(--cm-muted); }
.mc-day.mc-up { background: rgba(242, 87, 79, .12); border-color: rgba(242, 87, 79, .22); }
.mc-day.mc-up b { color: var(--cm-up); }
.mc-day.mc-down { background: rgba(77, 191, 116, .12); border-color: rgba(77, 191, 116, .22); }
.mc-day.mc-down b { color: var(--cm-down); }
.mc-day.mc-today { border-color: var(--cm-gold-border); box-shadow: inset 0 0 0 1px var(--cm-gold-soft); }

/* ===== 社区响应式：侧栏收窄 / 下移 ===== */
@media (max-width: 1080px) {
  .community-shell { grid-template-columns: minmax(0, 1fr) 260px; }
}
@media (max-width: 900px) {
  .community-shell { grid-template-columns: minmax(0, 1fr); }
  .community-side { order: 2; display: grid; grid-template-columns: 1fr 1fr; }
}
@media (max-width: 640px) {
  .community-side { grid-template-columns: 1fr; }
  .community-tabs .ct-tab { flex: 1; justify-content: center; }
  .report-holding-row { grid-template-columns: 1fr 1fr; }
  .report-holding-row .rh-del { grid-column: 1 / -1; justify-self: end; width: 100%; border-radius: 7px; height: 28px; }
  .rank-podium { gap: 8px; }
  .podium-card { padding: 12px 8px; }
  .podium-card .pd-assets { font-size: 13px; }
  .podium-card .pd-ret { font-size: 17px; }
  .rank-period { width: 100%; justify-content: center; }
  .rp-btn { flex: 1; padding: 6px 10px; }
  .mine-stats { grid-template-columns: repeat(2, 1fr); gap: 8px; }
  .ms-val { font-size: 17px; }
  .mine-chart { height: 200px; }
  .mine-calendar { gap: 4px; }
  .mc-day { min-height: 44px; }
  .mc-day b { font-size: 10px; }
}
@media (prefers-reduced-motion: reduce) {
  .ct-pane { animation: none; }
  .community-card, .report-card, .podium-card, .report-section { transition: none; }
}

/* ================= 资金进攻：泳道时间轴 + 攻势指标 + 播放控制 + 题材扩散榜 ================= */
.atk-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 12px; margin: 6px 0 16px; }
.atk-kpi { background: var(--aur-surface-2); border: 1px solid var(--aur-border); border-radius: var(--aur-radius-md); padding: 12px 14px; }
.atk-kpi-label { font-size: var(--aur-fs-sm); color: var(--aur-muted); }
.atk-kpi-val { font-size: 22px; font-weight: 700; font-family: var(--aur-font-num); color: var(--aur-text); margin-top: 4px; line-height: 1.15; }
.atk-kpi-sub { font-size: var(--aur-fs-xs); color: var(--aur-muted-2); margin-top: 4px; }
/* KPI 色调（中式红涨金配）：数值着色 + 轻辉光 + 卡顶细色条，暗底对比度均 ≥4.5:1 */
.atk-kpi.tone-up { box-shadow: inset 0 2px 0 rgba(242,87,79,.45); }
.atk-kpi.tone-gold { box-shadow: inset 0 2px 0 rgba(255,213,74,.40); }
.atk-kpi.tone-down { box-shadow: inset 0 2px 0 rgba(77,191,116,.42); }
.atk-kpi.tone-up .atk-kpi-val { color: var(--aur-up); text-shadow: 0 0 10px rgba(242,87,79,.35); }
.atk-kpi.tone-gold .atk-kpi-val { color: var(--aur-gold); text-shadow: 0 0 10px rgba(255,213,74,.26); }
.atk-kpi.tone-down .atk-kpi-val { color: var(--aur-down); text-shadow: 0 0 10px rgba(77,191,116,.30); }
.atk-emo { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 2px 0 14px; }
.atk-emo .chip.emo { border-color: var(--aur-border-strong); }
.atk-emo .chip.tip { border-color: rgba(255,213,74,.38); background: rgba(255,213,74,.06); color: #e3cd85; }

.atk-split { margin-top: 4px; }
.atk-lane-col { flex: 1.6; }
.atk-detail-col { flex: 1; min-width: 300px; }

.atk-lanes { position: relative; border: 1px solid var(--aur-border); border-radius: var(--aur-radius-lg); background: var(--aur-surface); overflow: hidden; padding: 10px 12px 8px; }
.atk-grid { position: absolute; inset: 0; pointer-events: none; }
.atk-grid-tick { position: absolute; top: 6px; font-size: 10px; color: var(--aur-dim); transform: translateX(-50%); font-family: var(--aur-font-num); }
.atk-gridline { position: absolute; top: 20px; bottom: 6px; left: 0; right: 0; background: repeating-linear-gradient(90deg,
  transparent 0, transparent calc(100%/24 - 1px), rgba(90,102,122,.18) calc(100%/24 - 1px), rgba(90,102,122,.18) calc(100%/24)); pointer-events: none; }
.atk-lane { position: relative; min-height: 44px; padding: 6px 0 2px; }
.atk-lane-head { display: flex; align-items: center; gap: 8px; margin-bottom: 2px; font-size: var(--aur-fs-sm); }
.atk-lane-head .dot { width: 9px; height: 9px; border-radius: 50%; }
.atk-lane-head .nm { color: var(--aur-text-body); font-weight: 600; }
.atk-lane-head .cnt { color: var(--aur-muted); font-size: var(--aur-fs-xs); font-family: var(--aur-font-num); }
.atk-track { position: relative; height: 30px; border-top: 1px dashed var(--aur-border); }
/* 泳道 hover 高亮 */
.atk-lane:hover { background: rgba(255,255,255,.015); }
.atk-lane:hover .atk-lane-note { opacity: 1; }
.atk-lane-note { position: absolute; right: 4px; top: 2px; font-size: 10px; color: var(--aur-dim); opacity: 0; transition: opacity var(--aur-t-fast); }

/* 气泡 */
.atk-bubble {
  position: absolute; top: 50%; transform: translate(-50%, -50%);
  width: 18px; height: 18px; border-radius: 50%; z-index: 2;
  cursor: pointer;
  box-shadow: 0 0 0 2px rgba(0,0,0,.35), 0 2px 8px rgba(0,0,0,.4);
  transition: transform var(--aur-t-press), box-shadow var(--aur-t-fast);
}
.atk-bubble:hover { transform: translate(-50%, -50%) scale(1.35); box-shadow: 0 0 0 3px var(--aur-focus), 0 4px 14px rgba(0,0,0,.5); z-index: 5; }
.atk-bubble.big { width: 24px; height: 24px; }
.atk-bubble .atk-bubble-name {
  position: absolute; left: 50%; top: -16px; transform: translateX(-50%);
  white-space: nowrap; font-size: 10px; color: var(--aur-muted-2); pointer-events: none;
  text-shadow: 0 1px 2px rgba(0,0,0,.8);
}
.atk-bubble .atk-bubble-days { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: 8px; color: #fff; font-family: var(--aur-font-num); }
/* 泳道色彩：颜色由 JS 内联 background 控制，这里只调文本/结构 */
.atk-bubble .atk-bubble-days { text-shadow: 0 1px 2px rgba(0,0,0,.7); }
.atk-bubble.spot {
  background: rgba(143,184,255,.22);
  border: 1px solid rgba(143,184,255,.8);
  box-shadow: 0 0 0 2px rgba(0,0,0,.35), 0 0 10px rgba(143,184,255,.35);
}
.atk-bubble.spot .atk-bubble-count { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: 8px; color: #aac4ff; font-weight: 700; font-family: var(--aur-font-num); }
.atk-bubble.spot .atk-bubble-name { color: #c9dcff; }
/* 标签防重叠：非常显标签默认隐藏，悬停单个气泡时显示 */
.atk-bubble .atk-bubble-name { transition: opacity var(--aur-t-fast); }
.atk-bubble.no-name .atk-bubble-name { opacity: 0; }
.atk-bubble.no-name:hover .atk-bubble-name { opacity: 1; }
/* 播放游标线 */
.atk-cursor { position: absolute; top: 20px; bottom: 6px; width: 1px; background: rgba(255,213,74,.55); box-shadow: 0 0 6px rgba(255,213,74,.45); pointer-events: none; z-index: 3; }
.atk-cursor::after { content: ""; position: absolute; top: -2px; left: -3px; width: 7px; height: 7px; border-radius: 50%; background: var(--aur-gold); box-shadow: 0 0 6px rgba(255,213,74,.6); }

/* 播放条 */
.atk-player { display: flex; align-items: center; gap: 10px; margin-top: 10px; flex-wrap: wrap; }
.atk-slider { flex: 1; min-width: 160px; height: 5px; appearance: none; -webkit-appearance: none; background: linear-gradient(90deg, var(--aur-border-strong), var(--aur-gold)); border-radius: 3px; outline: none; cursor: pointer; }
.atk-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 14px; height: 14px; border-radius: 50%; background: var(--aur-gold); border: 2px solid #14181f; box-shadow: 0 1px 4px rgba(0,0,0,.5); }
.atk-slider::-moz-range-thumb { width: 14px; height: 14px; border-radius: 50%; background: var(--aur-gold); border: 2px solid #14181f; }
.atk-clock { font-family: var(--aur-font-num); font-size: var(--aur-fs-md); color: var(--aur-gold); min-width: 44px; text-align: center; }
.atk-speed { display: inline-flex; align-items: center; gap: 4px; font-size: var(--aur-fs-sm); color: var(--aur-muted); cursor: pointer; }
.atk-speed input { accent-color: var(--aur-gold); }

/* 事件明细 */
.atk-detail { min-height: 260px; }
.atk-empty { text-align: center; padding: 48px 12px; font-size: var(--aur-fs-sm); }
.atk-ev-card { background: var(--aur-surface-2); border: 1px solid var(--aur-border); border-radius: var(--aur-radius-md); padding: 12px 14px; margin-bottom: 10px; cursor: pointer; transition: border-color var(--aur-t-fast), background var(--aur-t-fast); }
.atk-ev-card:hover { border-color: var(--aur-border-strong); background: var(--aur-surface-3); }
.atk-ev-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.atk-ev-head .dot { width: 9px; height: 9px; border-radius: 50%; }
.atk-ev-name { font-size: var(--aur-fs-md); font-weight: 700; color: var(--aur-text); }
.atk-ev-head .chip { margin: 0; }
.atk-ev-head .pct { font-family: var(--aur-font-num); font-weight: 700; margin-left: auto; font-size: var(--aur-fs-md); }
.pct.up { color: var(--aur-up); }
.pct.down { color: var(--aur-down); }
.atk-ev-row { display: flex; align-items: center; gap: 10px; margin-top: 10px; flex-wrap: wrap; font-size: var(--aur-fs-sm); color: var(--aur-muted); }
.atk-ev-row .gap { margin-left: 6px; }
.atk-ev-row b { color: var(--aur-text); font-family: var(--aur-font-num); font-weight: 600; }
.atk-ev-reason { margin-top: 8px; font-size: var(--aur-fs-sm); color: var(--aur-muted-2); }
.atk-ev-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.atk-ev-tags .tag { font-size: var(--aur-fs-xs); padding: 2px 8px; border-radius: var(--aur-radius-pill); background: rgba(255,255,255,.05); border: 1px solid var(--aur-border); color: var(--aur-muted-2); }
.atk-ev-tags .tag.warn { border-color: rgba(242,87,79,.5); color: var(--aur-up); }
.atk-ev-foot { margin-top: 10px; font-size: var(--aur-fs-xs); }

/* 明细窗口（滑条联动）：游标时间条 + 前后 ±15 分钟事件列表（内部滚动，高度稳定不顶跳） */
.atk-detail.win { max-height: 480px; overflow-y: auto; overscroll-behavior: contain; }
.atk-detail-win-head { position: sticky; top: 0; z-index: 1; display: flex; align-items: baseline; gap: 8px; padding: 4px 2px 8px; background: linear-gradient(180deg, var(--aur-bg) 78%, transparent); }
.atk-detail-win-head .t { font-family: var(--aur-font-num); font-weight: 700; font-size: var(--aur-fs-md); color: var(--aur-gold); }
.atk-detail-win-head .range { font-size: var(--aur-fs-xs); color: var(--aur-muted); }
.atk-detail-win-head .cnt { margin-left: auto; font-size: var(--aur-fs-xs); color: var(--aur-muted-2); font-family: var(--aur-font-num); }

/* 题材扩散：集群 chips */
.atk-cluster { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.atk-cluster-chip { border: 1px solid var(--aur-border); background: rgba(255,255,255,.04); color: var(--aur-text-body); border-radius: var(--aur-radius-pill); padding: 3px 10px; font-size: var(--aur-fs-sm); cursor: pointer; transition: border-color var(--aur-t-fast), background var(--aur-t-fast); }
.atk-cluster-chip:hover { border-color: var(--aur-gold); background: rgba(255,213,74,.1); }
.atk-cluster-chip.more { cursor: default; color: var(--aur-muted); }
.atk-cluster-chip.more:hover { border-color: var(--aur-border); background: rgba(255,255,255,.04); }

/* 题材扩散榜 */
.atk-ind-wrap { margin-top: 18px; }
.atk-industries { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px; }
.atk-ind { background: var(--aur-surface-2); border: 1px solid var(--aur-border); border-radius: var(--aur-radius-md); padding: 10px 12px; }
.atk-ind-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.atk-ind-head .nm { font-size: var(--aur-fs-sm); font-weight: 600; color: var(--aur-text-body); }
.atk-ind-head .cnt { font-size: var(--aur-fs-xs); color: var(--aur-gold); }
.atk-ind-bar { height: 5px; background: var(--aur-border); border-radius: 3px; margin: 8px 0; overflow: hidden; }
.atk-ind-bar .fill { display: block; height: 100%; border-radius: 3px; background: linear-gradient(90deg, var(--aur-gold-deep), var(--aur-gold)); transform-origin: 0 50%; }
.atk-ind-names { font-size: var(--aur-fs-xs); line-height: 1.5; }

@media (max-width: 900px) {
  .atk-lane-col, .atk-detail-col { flex: 1 1 100%; }
  .atk-detail { min-height: 140px; }
  .atk-bubble .atk-bubble-name { display: none; }
}
