/* AI 交易操作系统 · Web 设计系统 */
:root{
  --bg:#070A11; --bg-elev:#0D131E;
  --card:#131B28; --card2:#182130; --card3:#1E2836;
  --line:#242E3D; --line2:#33404F;
  --text:#EAF0F8; --sub:#8B98AC; --dim:#5C6879;
  --up:#FF4D4F; --down:#12C56B;
  --gold:#FFB020; --cyan:#22D3EE; --blue:#3B82F6;
  --amber:#F59E0B; --violet:#8B5CF6;
  --r:14px; --r-sm:10px;
  --w-side:216px;
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%}
body{
  background:var(--bg); color:var(--text);
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Segoe UI",sans-serif;
  font-size:14px; line-height:1.6; -webkit-font-smoothing:antialiased;
}
.num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:#2A3546;border-radius:4px}
::-webkit-scrollbar-track{background:transparent}

/* ---------- 布局 ---------- */
.app{display:flex;min-height:100vh}
.sidebar{
  width:var(--w-side);flex:0 0 var(--w-side);background:var(--bg-elev);
  border-right:1px solid var(--line);padding:18px 0;position:fixed;height:100vh;overflow-y:auto;z-index:20
}
.logo{padding:0 18px 20px;display:flex;align-items:center;gap:10px}
.logo .mark{
  width:32px;height:32px;border-radius:9px;flex:0 0 32px;
  background:linear-gradient(135deg,var(--cyan),var(--blue));
  display:grid;place-items:center;font-weight:800;color:#04121C;font-size:15px
}
.logo h1{font-size:14px;font-weight:800;letter-spacing:.2px}
.logo span{display:block;font-size:10px;color:var(--dim);font-weight:400}
.nav{padding:6px 12px}
.nav-item{
  display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:var(--r-sm);
  color:var(--sub);cursor:pointer;font-size:13.5px;margin-bottom:2px;transition:.16s;border:1px solid transparent
}
.nav-item:hover{background:var(--card);color:var(--text)}
.nav-item.on{background:linear-gradient(90deg,rgba(34,211,238,.14),rgba(34,211,238,.02));color:var(--cyan);border-color:rgba(34,211,238,.2)}
.nav-item .ico{width:18px;text-align:center;font-size:15px}
.nav-item .badge{margin-left:auto;background:var(--up);color:#fff;font-size:10px;
  min-width:17px;height:17px;border-radius:9px;display:grid;place-items:center;padding:0 5px;font-weight:700}
.side-sec{padding:14px 18px 6px;font-size:10.5px;color:var(--dim);letter-spacing:.6px}

.main{flex:1;margin-left:var(--w-side);padding:0 0 40px;min-width:0}
.topbar{
  height:58px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:16px;
  padding:0 24px;background:rgba(13,19,30,.86);backdrop-filter:blur(12px);
  position:sticky;top:0;z-index:15
}
.topbar h2{font-size:15px;font-weight:800}
.topbar .date{font-size:12px;color:var(--dim)}
.search{
  margin-left:auto;display:flex;align-items:center;gap:8px;background:var(--card);
  border:1px solid var(--line);border-radius:10px;padding:6px 12px;width:260px
}
.search input{background:none;border:none;outline:none;color:var(--text);font-size:13px;width:100%}
.search input::placeholder{color:var(--dim)}
.pill{
  display:inline-flex;align-items:center;gap:6px;padding:4px 11px;border-radius:20px;
  font-size:11.5px;font-weight:700;border:1px solid var(--line)
}
.pill.cyan{background:rgba(34,211,238,.12);color:var(--cyan);border-color:rgba(34,211,238,.3)}
.pill.gold{background:rgba(255,176,32,.12);color:var(--gold);border-color:rgba(255,176,32,.3)}
.content{padding:22px 24px;max-width:1360px}

/* ---------- 卡片 ---------- */
.card{background:linear-gradient(180deg,var(--card2),var(--card));border:1px solid var(--line);border-radius:var(--r);padding:16px}
.card.pad0{padding:0;overflow:hidden}
.grid{display:grid;gap:14px}
.g2{grid-template-columns:repeat(2,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g4{grid-template-columns:repeat(4,1fr)}
.row{display:flex;gap:14px;flex-wrap:wrap}
.sec-title{
  font-size:12px;font-weight:800;color:var(--cyan);margin:22px 0 12px;
  display:flex;align-items:center;gap:8px
}
.sec-title::before{content:'';width:3px;height:13px;background:var(--cyan);border-radius:2px;box-shadow:0 0 8px rgba(34,211,238,.6)}
.sec-title .more{margin-left:auto;font-size:11.5px;color:var(--dim);font-weight:400;cursor:pointer}
.sec-title .more:hover{color:var(--cyan)}
.muted{color:var(--sub)}
.dim{color:var(--dim)}
.up{color:var(--up)}
.down{color:var(--down)}
.gold{color:var(--gold)}
.cyan{color:var(--cyan)}

/* ---------- 温度球 ---------- */
.temp-wrap{display:flex;align-items:center;gap:22px}
.temp-ball{position:relative;width:132px;height:132px;flex:0 0 132px}
.temp-ball .val{position:absolute;inset:0;display:grid;place-items:center;flex-direction:column}
.temp-ball .v{font-size:34px;font-weight:800;line-height:1}
.temp-ball .l{font-size:10px;color:var(--dim);margin-top:3px}
.temp-meta h3{font-size:19px;font-weight:800;margin-bottom:5px}
.temp-meta p{font-size:12.5px;color:var(--sub);margin-bottom:12px}
.temp-stats{display:flex;gap:26px}
.temp-stats div span{display:block;font-size:10px;color:var(--dim)}
.temp-stats div b{font-size:16px;font-weight:800}

/* ---------- 主线卡 ---------- */
.mainline{
  background:linear-gradient(135deg,rgba(34,211,238,.16),rgba(59,130,246,.06) 45%,var(--card));
  border:1px solid rgba(34,211,238,.24);border-radius:var(--r);padding:16px;position:relative;overflow:hidden
}
.mainline::after{content:'';position:absolute;right:-60px;top:-60px;width:200px;height:200px;
  background:radial-gradient(circle,rgba(34,211,238,.16),transparent 70%)}
.mainline .hd{display:flex;align-items:baseline;gap:10px}
.mainline .hd b{font-size:19px;font-weight:800}
.mainline .stars{color:var(--gold);letter-spacing:1px;font-size:13px}
.mainline .heat{margin-left:auto;font-size:24px;font-weight:800;color:var(--gold)}
.mainline .sub{font-size:10.5px;color:var(--dim);text-align:right;display:block}
.ml-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:14px}
.ml-grid div{background:rgba(7,10,17,.55);border:1px solid var(--line);border-radius:var(--r-sm);padding:8px 10px}
.ml-grid span{display:block;font-size:10px;color:var(--dim)}
.ml-grid b{font-size:14px;font-weight:800}

/* ---------- 机会卡 ---------- */
.opp{
  background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:14px;
  cursor:pointer;transition:.18s;position:relative;overflow:hidden
}
.opp:hover{border-color:rgba(34,211,238,.4);transform:translateY(-2px);box-shadow:0 10px 30px rgba(0,0,0,.4)}
.opp.gradeA{border-left:3px solid var(--gold)}
.opp.gradeB{border-left:3px solid var(--cyan)}
.opp-hd{display:flex;align-items:flex-start;gap:10px;margin-bottom:10px}
.opp-hd .nm{font-size:15px;font-weight:800;line-height:1.3}
.opp-hd .cd{font-size:11px;color:var(--dim);margin-top:2px}
.opp-score{margin-left:auto;text-align:center;flex:0 0 auto}
.opp-score .v{font-size:20px;font-weight:800;line-height:1}
.opp-score .g{font-size:9.5px;color:var(--dim)}
.tag{display:inline-block;padding:2px 8px;border-radius:6px;font-size:10.5px;font-weight:700;margin-right:5px}
.tag.a{background:rgba(255,176,32,.14);color:var(--gold)}
.tag.b{background:rgba(34,211,238,.12);color:var(--cyan)}
.tag.t{background:var(--card3);color:var(--sub)}
.logic{background:var(--bg-elev);border-radius:var(--r-sm);padding:9px 11px;margin:10px 0}
.logic li{list-style:none;font-size:11.5px;color:var(--sub);display:flex;gap:6px;margin-bottom:3px}
.logic li i{color:var(--down);font-style:normal;font-weight:700}
.plan3{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.plan3 div{background:var(--card3);border-radius:8px;padding:6px 4px;text-align:center}
.plan3 span{display:block;font-size:9.5px;color:var(--dim)}
.plan3 b{font-size:12.5px;font-weight:800}

/* ---------- 表格 ---------- */
table{width:100%;border-collapse:collapse;font-size:13px}
th{background:var(--card3);color:var(--sub);font-size:11px;font-weight:700;padding:9px 12px;text-align:left;white-space:nowrap}
td{padding:9px 12px;border-bottom:1px solid rgba(255,255,255,.045)}
tr:last-child td{border-bottom:none}
tbody tr{cursor:pointer;transition:.14s}
tbody tr:hover{background:rgba(34,211,238,.05)}
td.r{text-align:right;font-variant-numeric:tabular-nums}
.bar-cell{width:120px}
.bar{height:6px;background:var(--card3);border-radius:3px;overflow:hidden}
.bar i{display:block;height:100%;background:linear-gradient(90deg,var(--gold),#FF7A45);border-radius:3px}

/* ---------- 详情 ---------- */
.hero{display:flex;align-items:flex-end;gap:18px;flex-wrap:wrap}
.hero .price{font-size:40px;font-weight:800;line-height:1;letter-spacing:-1px}
.hero .chg{font-size:16px;font-weight:700}
.hero .meta{margin-left:auto;text-align:right}
.hero .meta .nm{font-size:17px;font-weight:800}
.hero .meta .cd{font-size:12px;color:var(--dim)}
.ai-box{
  background:linear-gradient(135deg,rgba(34,211,238,.10),var(--card));
  border:1px solid rgba(34,211,238,.22);border-radius:var(--r);padding:14px 16px
}
.ai-box .t{font-size:12px;color:var(--cyan);font-weight:800;margin-bottom:6px;display:flex;gap:6px;align-items:center}
.ai-box p{font-size:13px;margin-bottom:3px}
.reasons li{list-style:none;font-size:12.5px;color:var(--sub);padding:5px 0;border-bottom:1px dashed rgba(255,255,255,.06)}
.reasons li:last-child{border:none}
.kv{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.kv div{background:var(--card3);border-radius:var(--r-sm);padding:10px 12px}
.kv span{display:block;font-size:10.5px;color:var(--dim)}
.kv b{font-size:16px;font-weight:800}

/* ---------- 提醒 ---------- */
.alert{
  background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:14px;
  border-left:3px solid var(--dim);margin-bottom:10px
}
.alert.l1{border-left-color:var(--down)}
.alert.l2{border-left-color:var(--amber)}
.alert.l3{border-left-color:var(--up)}
.alert-hd{display:flex;align-items:center;gap:9px;margin-bottom:9px}
.alert-hd .lv{padding:2px 9px;border-radius:6px;font-size:10.5px;font-weight:800}
.alert.l1 .lv{background:rgba(18,197,107,.14);color:var(--down)}
.alert.l2 .lv{background:rgba(245,158,11,.14);color:var(--amber)}
.alert.l3 .lv{background:rgba(255,77,79,.14);color:var(--up)}
.alert-hd b{font-size:14px}
.alert-hd .tm{margin-left:auto;font-size:11.5px;color:var(--dim)}
.alert-lines{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:9px}
.alert-lines div{background:var(--card3);border-radius:8px;padding:6px 9px}
.alert-lines span{display:block;font-size:10px;color:var(--dim)}
.alert-lines b{font-size:13px}
.ai-judge{background:rgba(34,211,238,.08);border:1px solid rgba(34,211,238,.2);border-radius:8px;padding:7px 11px;font-size:12.5px}
.ai-judge b{color:var(--cyan)}

/* ---------- 漏斗 ---------- */
.funnel div{display:flex;align-items:center;gap:10px;margin-bottom:7px}
.funnel .lb{width:96px;font-size:11.5px;color:var(--sub);flex:0 0 96px}
.funnel .tr{flex:1;height:22px;background:var(--card3);border-radius:5px;overflow:hidden}
.funnel .tr i{display:block;height:100%;background:linear-gradient(90deg,var(--cyan),var(--blue));
  display:flex;align-items:center;justify-content:flex-end;padding-right:8px;font-size:10.5px;font-weight:800;color:#04121C}
.funnel .ct{width:56px;text-align:right;font-size:12px;font-weight:700;flex:0 0 56px}

/* ---------- 组件 ---------- */
.btn{padding:8px 16px;border-radius:10px;border:1px solid var(--line2);background:var(--card3);
  color:var(--text);font-size:13px;cursor:pointer;font-weight:600;transition:.16s;font-family:inherit}
.btn:hover{border-color:var(--cyan);color:var(--cyan)}
.btn.primary{background:linear-gradient(135deg,var(--cyan),var(--blue));color:#04121C;border:none;font-weight:800}
.btn.gold{background:linear-gradient(135deg,#FFD27A,var(--gold));color:#2A1A00;border:none;font-weight:800}
.btn.sm{padding:5px 12px;font-size:12px}
.chip{display:inline-block;padding:3px 10px;border-radius:8px;font-size:11.5px;font-weight:600;
  background:var(--card3);color:var(--sub);margin:0 5px 5px 0}
.chip.cy{background:rgba(34,211,238,.12);color:var(--cyan)}
.chip.gd{background:rgba(255,176,32,.13);color:var(--gold)}
.chip.up{background:rgba(255,77,79,.13);color:var(--up)}
.chip.dn{background:rgba(18,197,107,.13);color:var(--down)}

/* ---------- 状态 ---------- */
.loading{padding:60px;text-align:center;color:var(--dim)}
.loading .spin{width:26px;height:26px;border:2px solid var(--line2);border-top-color:var(--cyan);
  border-radius:50%;margin:0 auto 14px;animation:sp .8s linear infinite}
@keyframes sp{to{transform:rotate(360deg)}}
.empty{padding:40px;text-align:center;color:var(--dim);font-size:13px}
.live{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--down)}
.live i{width:7px;height:7px;border-radius:50%;background:var(--down);animation:bl 1.4s infinite}
@keyframes bl{50%{opacity:.3}}

/* ---------- 响应式 ---------- */
@media(max-width:1100px){.g4{grid-template-columns:repeat(2,1fr)}.g3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:820px){
  .sidebar{position:fixed;left:0;bottom:0;top:auto;width:100%;height:auto;display:flex;
    padding:6px;border-right:none;border-top:1px solid var(--line);overflow-x:auto}
  .logo,.side-sec{display:none}
  .nav{display:flex;gap:4px;padding:0;width:100%}
  .nav-item{flex-direction:column;gap:2px;font-size:10px;padding:6px 10px;flex:1;justify-content:center}
  .nav-item .ico{font-size:16px}
  .main{margin-left:0;margin-bottom:64px}
  .g2,.g3,.g4{grid-template-columns:1fr}
  .content{padding:16px}
  .search{width:150px}
  .kv{grid-template-columns:repeat(2,1fr)}
  .alert-lines{grid-template-columns:repeat(2,1fr)}
}


/* ============================================================
   市场分块（沪市 / 深市 / 创业板）
   ============================================================ */
.mkt-tabs {
  display: flex; gap: 8px; margin-bottom: 12px; flex-wrap: wrap;
}
.mkt-tab {
  display: flex; align-items: baseline; gap: 7px;
  padding: 8px 14px; border-radius: 10px; cursor: pointer;
  background: rgba(255, 255, 255, .03);
  border: 1px solid var(--line);
  color: var(--muted); font-size: 12px;
  transition: all .15s ease; font-family: inherit;
}
.mkt-tab:hover { background: rgba(255, 255, 255, .06); color: var(--fg); }
.mkt-tab .mn { font-size: 13px; font-weight: 700; }
.mkt-tab .mc { font-size: 11px; opacity: .7; font-variant-numeric: tabular-nums; }
.mkt-tab .ms { font-size: 10.5px; opacity: .55; }
.mkt-tab.on {
  background: rgba(34, 211, 238, .12);
  border-color: rgba(34, 211, 238, .45);
  color: var(--cyan);
}
.mkt-tab.on .mc, .mkt-tab.on .ms { opacity: .85; }

.mkt-bar {
  display: flex; align-items: center; gap: 16px; flex-wrap: wrap;
  padding: 10px 14px; margin-bottom: 14px; border-radius: 10px;
  background: rgba(34, 211, 238, .05);
  border: 1px solid rgba(34, 211, 238, .18);
  font-size: 12px; color: var(--muted);
}
.mkt-bar b { color: var(--fg); font-variant-numeric: tabular-nums; }
.mkt-bar .mb-n {
  font-size: 14px; font-weight: 800; color: var(--cyan);
  padding-right: 12px; border-right: 1px solid var(--line);
}
.mkt-bar .mb-lead { margin-left: auto; }

/* 市场分块对比卡 */
.mkt-card { cursor: pointer; transition: all .15s ease; }
.mkt-card:hover { border-color: rgba(34, 211, 238, .3); }
.mkt-card.on {
  border-color: rgba(34, 211, 238, .5);
  background: rgba(34, 211, 238, .06);
}
.mkt-card .mc-hd {
  display: flex; align-items: baseline; gap: 8px; margin-bottom: 10px;
}
.mkt-card .mc-hd b { font-size: 14px; }
.mkt-card .mc-row {
  display: grid; grid-template-columns: 32px 1fr 42px;
  align-items: center; gap: 8px; margin-bottom: 7px; font-size: 11.5px;
  color: var(--muted);
}
.mkt-card .mc-row .bar {
  height: 6px; background: rgba(255, 255, 255, .06);
  border-radius: 3px; overflow: hidden;
}
.mkt-card .mc-row .bar i {
  display: block; height: 100%; border-radius: 3px;
  background: linear-gradient(90deg, #22D3EE, #FFB020);
}
.mkt-card .mc-row .bar i.cy { background: linear-gradient(90deg, #22D3EE, #34D399); }
.mkt-card .mc-row b { text-align: right; color: var(--fg); }
.mkt-card .mc-foot {
  display: flex; gap: 14px; padding-top: 8px; margin-top: 4px;
  border-top: 1px solid var(--line); font-size: 11.5px; color: var(--muted);
}
.mkt-card .mc-lead {
  margin-top: 8px; font-size: 11.5px; color: var(--muted);
}
.mkt-card .mc-lead .dim { margin-left: 4px; }

/* 市场标签 chip */
.chip.mk {
  font-size: 10.5px; padding: 2px 7px; border-radius: 5px;
  border: 1px solid var(--line); background: rgba(255, 255, 255, .04);
  color: var(--muted);
}
.chip.mk-sh { border-color: rgba(239, 68, 68, .35); color: #FCA5A5; background: rgba(239, 68, 68, .08); }
.chip.mk-sz { border-color: rgba(59, 130, 246, .35); color: #93C5FD; background: rgba(59, 130, 246, .08); }
.chip.mk-cy { border-color: rgba(168, 85, 247, .35); color: #C4B5FD; background: rgba(168, 85, 247, .08); }
.chip.mk-bj { border-color: rgba(245, 158, 11, .35); color: #FCD34D; background: rgba(245, 158, 11, .08); }


/* ============================================================
   提醒卡 / 复盘案例卡 / 组合表
   ============================================================ */
.alert {
  border-radius: 12px; border: 1px solid var(--line);
  background: rgba(255, 255, 255, .02); overflow: hidden;
  transition: border-color .15s ease;
}
.alert:hover { border-color: rgba(34, 211, 238, .35); }
.alert.lv1 { border-left: 3px solid #34D399; }
.alert.lv2 { border-left: 3px solid #FFB020; }
.alert.lv3 { border-left: 3px solid #F87171; }

.al-hd {
  display: flex; align-items: center; gap: 8px;
  padding: 9px 13px; background: rgba(255, 255, 255, .03);
  border-bottom: 1px solid var(--line);
}
.al-hd .lv {
  font-size: 10.5px; font-weight: 800; padding: 2px 6px; border-radius: 4px;
  background: rgba(255, 255, 255, .08); color: var(--muted);
}
.alert.lv1 .lv { background: rgba(52, 211, 153, .16); color: #6EE7B7; }
.alert.lv2 .lv { background: rgba(255, 176, 32, .16); color: #FCD34D; }
.alert.lv3 .lv { background: rgba(248, 113, 113, .16); color: #FCA5A5; }
.al-hd .lv-n { font-size: 12px; font-weight: 700; }

.al-body { padding: 12px 13px; }
.al-t { font-size: 14px; margin-bottom: 3px; }
.al-ev {
  font-size: 12.5px; color: var(--cyan); margin-bottom: 9px; font-weight: 600;
}
.al-lines {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 6px 12px;
  margin-bottom: 10px;
}
.al-lines span { display: flex; justify-content: space-between; font-size: 11.5px; }
.al-lines i { font-style: normal; color: var(--muted); }
.al-lines b { font-variant-numeric: tabular-nums; }
.al-judge {
  font-size: 12px; padding: 8px 10px; border-radius: 7px;
  background: rgba(34, 211, 238, .07);
  border: 1px solid rgba(34, 211, 238, .16); color: var(--fg);
}
.al-acts { display: flex; gap: 8px; margin-top: 10px; }
.btn.sm { padding: 5px 12px; font-size: 11.5px; border-radius: 7px; }

/* 复盘案例 */
.case {
  padding: 11px 13px; margin-bottom: 10px; border-radius: 10px;
  border: 1px solid var(--line); background: rgba(255, 255, 255, .02);
  cursor: pointer; transition: border-color .15s ease;
}
.case:hover { border-color: rgba(34, 211, 238, .3); }
.case.ok { border-left: 3px solid #34D399; }
.case.bad { border-left: 3px solid #F87171; }
.case .cs-hd { display: flex; align-items: center; gap: 8px; font-size: 13.5px; }
.case .cs-ic { font-weight: 800; }
.case.ok .cs-ic { color: #34D399; }
.case.bad .cs-ic { color: #F87171; }
.case .cs-j {
  display: flex; align-items: center; gap: 8px; margin: 7px 0 5px;
}
.case .cs-w { font-size: 11.5px; color: var(--muted); line-height: 1.6; }
.case .cs-f {
  font-size: 11.5px; margin-top: 6px; padding-top: 6px;
  border-top: 1px dashed var(--line); color: var(--gold);
}

/* 对比表选中行 */
tr.on-row { background: rgba(34, 211, 238, .07); }
.bar i.up { background: linear-gradient(90deg, #22D3EE, #34D399); }
.bar i.dn { background: linear-gradient(90deg, #F87171, #FB923C); }


/* ============================================================
   条件筛选面板 + 机会金字塔
   ============================================================ */
.flt-card { margin-bottom: 14px; }
.flt-hd {
  display: flex; align-items: center; gap: 12px; margin-bottom: 12px;
}
.flt-hd b { font-size: 14px; }
.flt-hd .btn { margin-left: auto; }
.btn.ghost {
  background: transparent; border: 1px solid var(--line); color: var(--muted);
}
.btn.ghost:hover { border-color: rgba(34, 211, 238, .4); color: var(--cyan); }

.flt-grid {
  display: flex; flex-wrap: wrap; gap: 10px 16px;
}
.flt-item { display: flex; align-items: center; gap: 6px; }
.flt-lb { font-size: 11.5px; color: var(--muted); white-space: nowrap; }
.flt-in {
  display: flex; align-items: center;
  border: 1px solid var(--line); border-radius: 7px;
  background: rgba(255, 255, 255, .03); overflow: hidden;
}
.flt-in:focus-within { border-color: rgba(34, 211, 238, .5); }
.flt-in input {
  border: 0; background: transparent; color: var(--fg);
  padding: 5px 8px; font-size: 12px; font-family: inherit;
  font-variant-numeric: tabular-nums; outline: none;
}
.flt-in input::placeholder { color: #55606E; }
.flt-in i {
  padding-right: 8px; font-style: normal; font-size: 11px; color: var(--muted);
}

/* ---- 金字塔 ---- */
.pyr { display: flex; flex-direction: column; align-items: center; }
.pyr-row {
  display: grid; grid-template-columns: 220px 1fr;
  align-items: center; gap: 14px; width: 100%; margin-bottom: 6px;
}
.pyr-shape {
  height: 54px; display: flex; align-items: center; justify-content: center;
  background: linear-gradient(180deg,
    color-mix(in srgb, var(--c) 26%, transparent),
    color-mix(in srgb, var(--c) 12%, transparent));
  border-top: 2px solid var(--c);
  transition: filter .15s ease;
}
.pyr-shape:hover { filter: brightness(1.25); }
.pyr-inner { text-align: center; line-height: 1.25; }
.pyr-n {
  display: block; font-size: 17px; font-weight: 800; color: var(--c);
  font-variant-numeric: tabular-nums;
}
.pyr-lb { display: block; font-size: 10.5px; color: var(--muted); }

.pyr-meta { font-size: 11.5px; line-height: 1.7; }
.pyr-meta .pm-1 { font-size: 12.5px; }
.pyr-meta .pm-1 b { color: var(--fg); font-variant-numeric: tabular-nums; }
.pyr-meta .pm-2 { color: var(--muted); }
.pyr-meta .pm-2 b { font-variant-numeric: tabular-nums; }
.pyr-meta .pm-3 { margin-top: 2px; }
.lnk { color: var(--cyan); cursor: pointer; text-decoration: underline; }

/* ---- 轻提示 ---- */
.toast {
  position: fixed; left: 50%; bottom: 40px; transform: translateX(-50%) translateY(12px);
  background: rgba(20, 26, 34, .96); border: 1px solid var(--line);
  color: var(--fg); padding: 10px 18px; border-radius: 9px; font-size: 12.5px;
  opacity: 0; pointer-events: none; transition: all .2s ease; z-index: 999;
}
.toast.on { opacity: 1; transform: translateX(-50%) translateY(0); }


/* ============================================================
   首页「数据采集」面板
   ============================================================ */
.fetch-entry {
  display: flex; align-items: center; gap: 12px;
  cursor: pointer; margin-bottom: 14px;
  border-left: 3px solid rgba(34, 211, 238, .5);
  transition: border-color .15s ease, background .15s ease;
}
.fetch-entry:hover { background: rgba(34, 211, 238, .05); }
.fe-ic {
  width: 30px; height: 30px; border-radius: 8px; flex: none;
  display: flex; align-items: center; justify-content: center;
  background: rgba(34, 211, 238, .12); color: var(--cyan); font-size: 15px;
}
.fe-tx { display: flex; flex-direction: column; gap: 2px; font-size: 13px; }
.fe-tx .dim { font-size: 11.5px; }
.fe-go { margin-left: auto; font-size: 12px; color: var(--cyan); }

.fetch-card { margin-bottom: 14px; border-color: rgba(34, 211, 238, .25); }
.fc-hd { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; }
.fc-hd b { font-size: 14px; }

.fc-row {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  margin-bottom: 10px;
}
.fc-lb { font-size: 11.5px; color: var(--muted); width: 44px; flex: none; }
.fc-chips { display: flex; gap: 6px; }
.fc-chip {
  padding: 4px 12px; border-radius: 7px; cursor: pointer; font-size: 12px;
  border: 1px solid var(--line); background: rgba(255, 255, 255, .03);
  color: var(--muted); transition: all .12s ease; user-select: none;
}
.fc-chip:hover { border-color: rgba(34, 211, 238, .35); color: var(--fg); }
.fc-chip.on {
  background: rgba(34, 211, 238, .14); border-color: rgba(34, 211, 238, .5);
  color: var(--cyan); font-weight: 700;
}
.fc-cb {
  display: flex; align-items: center; gap: 5px; cursor: pointer;
  font-size: 12px; color: var(--muted);
}
.fc-cb input { accent-color: #22D3EE; cursor: pointer; }

.fc-sum {
  padding: 8px 12px; border-radius: 8px; margin: 4px 0 12px;
  background: rgba(34, 211, 238, .06);
  border: 1px solid rgba(34, 211, 238, .16); font-size: 12px;
}
/* ---- 关注池星标 ---- */
.star {
  cursor: pointer; font-size: 15px; line-height: 1;
  color: #3A4553; transition: color .15s, transform .15s;
  user-select: none; padding: 0 3px;
}
.star:hover { color: #FBBF24; transform: scale(1.18); }
.star.on { color: #FBBF24; text-shadow: 0 0 7px rgba(251,191,36,.55); }

/* 机会卡片内的星标定位到右上角 */
.opp { position: relative; }
.opp > .star { position: absolute; right: 9px; top: 8px; z-index: 2; }

.wtag {
  display: inline-block; margin: 0 4px 3px 0; padding: 1px 7px;
  border-radius: 9px; font-size: 11px;
  background: rgba(34,211,238,.10); border: 1px solid rgba(34,211,238,.28);
  color: #67E8F9;
}

.fc-warn {
  padding: 8px 10px; border-radius: 7px; font-size: 11.5px; line-height: 1.7;
  background: rgba(251, 191, 36, .08);
  border: 1px solid rgba(251, 191, 36, .28); color: #FCD34D;
}
.fc-warn b { color: #FDE68A; }
.fc-acts { display: flex; align-items: center; gap: 12px; }
.btn.primary {
  background: linear-gradient(135deg, #22D3EE, #0EA5E9);
  color: #04121A; font-weight: 700; border: 0; padding: 8px 22px;
}
.btn.danger {
  background: rgba(248, 113, 113, .14); border: 1px solid rgba(248, 113, 113, .4);
  color: #FCA5A5; padding: 8px 22px;
}

/* ---- 采集进度 ---- */
.fc-prog {
  margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--line);
}
.fp-bar {
  height: 8px; border-radius: 4px; overflow: hidden;
  background: rgba(255, 255, 255, .06); margin-bottom: 8px;
}
.fp-bar i {
  display: block; height: 100%;
  background: linear-gradient(90deg, #22D3EE, #34D399);
  transition: width .3s ease;
}
.fp-tx {
  display: flex; gap: 14px; flex-wrap: wrap; font-size: 12px; color: var(--muted);
}
.fp-tx b { color: var(--cyan); font-variant-numeric: tabular-nums; }
.fp-tx span { font-variant-numeric: tabular-nums; }
.fp-err {
  margin-top: 8px; padding: 8px 10px; border-radius: 7px; font-size: 12px;
  background: rgba(248, 113, 113, .1); border: 1px solid rgba(248, 113, 113, .3);
  color: #FCA5A5; word-break: break-all;
}
.fp-log {
  margin-top: 10px; padding: 8px 10px; border-radius: 7px;
  background: rgba(0, 0, 0, .28); font-size: 11px; line-height: 1.7;
  font-family: ui-monospace, Consolas, monospace; color: var(--muted);
  max-height: 130px; overflow: hidden;
}
