/* ═══════════════════════════════════════════════
   智投 AI · 设计系统 v2 · 现代 fintech To C
   原则:
   1. 阴影分层,不用描边 — 卡片是浮起来的,不是框住的
   2. 颜色 = 信号。默认灰,只有涨跌/风险/结论才上色
   3. 字号必须拉开 — 56 / 32 / 20 / 15 / 13 / 11,中间不留骑墙值
   4. 所有数字 tabular-nums,对齐是金融产品的基本尊严
   ═══════════════════════════════════════════════ */
:root{
  /* 墨 */
  --ink:#0e1520; --ink2:#5b6a7d; --ink3:#95a2b1; --ink4:#c3cdd8;
  /* 面 */
  --bg:#f5f7f9; --card:#fff; --sunk:#f7f9fb; --line:#eaeef3;
  /* 信号 */
  --up:#0f9d65; --down:#e0483d; --amber:#c8891a;
  --accent:#0f7a55; --accent-lite:#e9f5f0; --accent-ink:#0a5c40;
  --blue:#2e5a9c; --blue-lite:#edf3fb;
  --purple:#5b4ea8; --purple-lite:#f1eefb;
  /* 层 */
  --sh1:0 1px 2px rgba(14,21,32,.04);
  --sh2:0 1px 2px rgba(14,21,32,.04), 0 4px 14px rgba(14,21,32,.05);
  --sh3:0 2px 4px rgba(14,21,32,.05), 0 12px 32px rgba(14,21,32,.09);
  --r:18px; --r2:12px; --r3:9px;
  --glow:transparent;                 /* 科技感光晕,浅色关掉 */
}

/* ── 深色主题(默认)· AI 科技感:近黑蓝底 + 青绿辉光 ── */
:root[data-theme="dark"]{
  --ink:#e9eef5; --ink2:#98a7b8; --ink3:#6a7889; --ink4:#47535f;
  --bg:#0a0e14; --card:#121821; --sunk:#0e141c; --line:#212c38;
  --up:#25cd86; --down:#f2695c; --amber:#e3ab3c;
  --accent:#19d69a; --accent-lite:#0e2b23; --accent-ink:#4de6b0;
  --blue:#4f8be6; --blue-lite:#132339;
  --purple:#8f80ee; --purple-lite:#1e1a38;
  --sh1:0 1px 2px rgba(0,0,0,.5);
  --sh2:0 1px 2px rgba(0,0,0,.5), 0 6px 20px rgba(0,0,0,.45);
  --sh3:0 2px 6px rgba(0,0,0,.55), 0 16px 40px rgba(0,0,0,.5);
  --glow:radial-gradient(1200px 600px at 78% -8%, rgba(25,214,154,.10), transparent 60%),
         radial-gradient(900px 500px at 8% 108%, rgba(79,139,230,.09), transparent 62%);
}

/* ── 浅色主题(显式,供切换回来)── */
:root[data-theme="light"]{
  --ink:#0e1520; --ink2:#5b6a7d; --ink3:#95a2b1; --ink4:#c3cdd8;
  --bg:#f5f7f9; --card:#fff; --sunk:#f7f9fb; --line:#eaeef3;
  --up:#0f9d65; --down:#e0483d; --amber:#c8891a;
  --accent:#0f7a55; --accent-lite:#e9f5f0; --accent-ink:#0a5c40;
  --blue:#2e5a9c; --blue-lite:#edf3fb; --purple:#5b4ea8; --purple-lite:#f1eefb;
  --sh1:0 1px 2px rgba(14,21,32,.04);
  --sh2:0 1px 2px rgba(14,21,32,.04), 0 4px 14px rgba(14,21,32,.05);
  --sh3:0 2px 4px rgba(14,21,32,.05), 0 12px 32px rgba(14,21,32,.09);
  --glow:transparent;
}
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
/* 浏览器内建的 [hidden]{display:none} 特异性只有 0-1-0,
   任何 .foo{display:grid} 都压得过它 —— 于是 el.hidden=true 静默失效。
   这个坑在本专案已经踩过两次(AI 弹窗、stats/shell),一次修死。 */
[hidden]{display:none !important}
body{
  font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI","PingFang SC",sans-serif;
  background:var(--glow), var(--bg);background-attachment:fixed;
  color:var(--ink);line-height:1.5;-webkit-font-smoothing:antialiased;
  font-feature-settings:"tnum" 1;transition:background-color .25s,color .25s;
}
/* 主题切换按钮(头部)*/
.theme-btn{border:none;background:var(--bg);color:var(--ink2);width:34px;height:34px;
  border-radius:9px;cursor:pointer;font-size:15px;line-height:1;display:inline-flex;
  align-items:center;justify-content:center;box-shadow:var(--sh1);transition:.16s}
.theme-btn:hover{color:var(--accent);box-shadow:0 0 0 1px var(--accent-lite),var(--sh1)}
button,input,select,textarea{font-family:inherit;font-size:inherit;color:var(--ink)}
input::placeholder,textarea::placeholder{color:var(--ink3);opacity:1}
/* select 的下拉在深色下用系统色,至少把控件本体文字给对 */
option{color:var(--ink);background:var(--card)}
.n{font-variant-numeric:tabular-nums;letter-spacing:-.01em}

/* ── 顶栏 ── */
.topbar{background:rgba(255,255,255,.82);backdrop-filter:saturate(180%) blur(16px);
  border-bottom:1px solid var(--line);height:60px;display:flex;align-items:center;
  justify-content:space-between;padding:0 24px;position:sticky;top:0;z-index:80}
.brand{font-weight:700;font-size:17px;letter-spacing:-.01em;display:flex;align-items:center;gap:8px}
.brand .dot{width:8px;height:8px;border-radius:50%;background:var(--up);
  box-shadow:0 0 0 3px rgba(15,157,101,.16)}
.tabs{display:flex;gap:2px;background:var(--bg);padding:3px;border-radius:11px}
.tab{padding:7px 18px;border-radius:8px;font-size:13.5px;font-weight:500;cursor:pointer;
  color:var(--ink2);border:none;background:none;transition:.18s}
.tab:hover{color:var(--ink)}
.tab.active{background:var(--card);color:var(--ink);font-weight:600;box-shadow:var(--sh1)}
.userbox{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--ink2)}
.badge-pro{background:var(--accent);color:#fff;padding:3px 9px;border-radius:6px;
  font-size:10.5px;font-weight:700;letter-spacing:.3px}

.wrap{max-width:1200px;margin:0 auto;padding:26px 24px 56px}
.page{display:none}.page.show{display:block}
@keyframes rise{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}
.page.show,.panel.show{animation:rise .3s cubic-bezier(.2,.7,.3,1) both}

/* ── 卡 ── */
.card{background:var(--card);border-radius:var(--r);box-shadow:var(--sh2);padding:24px 26px}
.card.flat{box-shadow:var(--sh1)}
.card.sunk{background:var(--sunk);box-shadow:none}
.ttl{font-size:20px;font-weight:660;letter-spacing:-.02em}
.sub{font-size:13px;color:var(--ink2);margin-top:3px}
.eyebrow{font-size:10.5px;font-weight:700;color:var(--ink3);letter-spacing:.09em;text-transform:uppercase}
.lead{font-size:15px;color:var(--ink2);line-height:1.62}
.lead b{color:var(--ink);font-weight:600}

/* ── 搜索 ── */
.searchbar{display:flex;gap:9px;align-items:center;margin-bottom:20px}
.searchbar .sw{position:relative;flex:1;max-width:400px}
.searchbar input{width:100%;border:none;background:var(--card);box-shadow:var(--sh1);
  border-radius:12px;padding:12px 16px 12px 40px;font-size:14px;outline:none;transition:.18s}
.searchbar input:focus{box-shadow:0 0 0 3px var(--accent-lite),var(--sh1)}
.searchbar .mag{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:var(--ink3);font-size:14px}
.btn{border:none;background:var(--ink);color:#fff;border-radius:11px;padding:11px 18px;
  font-size:13px;font-weight:600;cursor:pointer;transition:.18s}
.btn:hover{opacity:.86}
.btn.ghost{background:var(--card);color:var(--ink2);box-shadow:var(--sh1)}
.btn.ghost:hover{color:var(--ink);opacity:1}
.btn.gr{background:var(--accent)}
.btn.sm{padding:8px 13px;font-size:12px;border-radius:9px}

/* ── Hero ── */
.hero{background:var(--card);border-radius:24px;box-shadow:var(--sh2);padding:30px 32px;margin-bottom:16px}
.hero-top{display:flex;justify-content:space-between;align-items:flex-start;gap:24px;flex-wrap:wrap}
.hero .tkr{font-size:32px;font-weight:700;letter-spacing:-.03em;line-height:1.1}
.hero .name{color:var(--ink2);font-size:13.5px;margin-top:4px}
.hero .chips{margin-top:12px;display:flex;gap:6px;flex-wrap:wrap}
.chip{font-size:11px;padding:4px 11px;border-radius:20px;background:var(--bg);color:var(--ink2);font-weight:500}
.chip.tm{background:var(--purple-lite);color:var(--purple);font-weight:600}
.hero .px{text-align:right}
.hero .now{font-size:44px;font-weight:700;letter-spacing:-.035em;line-height:1}
.hero .chg{font-size:15px;font-weight:600;color:var(--up);margin-top:6px}
.hero .chg.dn{color:var(--down)}
.hero .asof{font-size:11.5px;color:var(--ink3);margin-top:5px}

/* 评级 */
.verdict{display:flex;align-items:center;gap:16px;margin-top:26px;padding-top:24px;
  border-top:1px solid var(--line);flex-wrap:wrap}
.vpill{display:inline-flex;align-items:center;gap:8px;background:var(--accent-lite);
  color:var(--accent-ink);padding:9px 17px;border-radius:11px;font-size:16px;font-weight:700;letter-spacing:-.01em}
.vpill .vd{width:7px;height:7px;border-radius:50%;background:var(--accent)}
.conf{font-size:12px;color:var(--ink2)}
.conf b{font-size:18px;color:var(--ink);font-weight:700;display:block;letter-spacing:-.02em}
.thesis{flex:1;min-width:260px;font-size:14px;color:var(--ink2);line-height:1.6;
  border-left:2px solid var(--line);padding-left:16px}
.thesis b{color:var(--ink);font-weight:600}

/* 估值位置条 */
.vband{margin-top:24px;padding-top:22px;border-top:1px solid var(--line)}
.vband-h{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:14px}
.vband-h .l{font-size:13px;font-weight:600}
.vband-h .r{font-size:12px;color:var(--ink2)}
.vband-h .r b{color:var(--up);font-weight:700;font-size:13px}

/* ── 数字条 ── */
.stats{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin-bottom:16px}
.stat-c{background:var(--card);border-radius:var(--r2);box-shadow:var(--sh1);padding:14px 16px}
.stat-c .k{font-size:11px;color:var(--ink3);font-weight:500}
.stat-c .v{font-size:20px;font-weight:660;margin-top:3px;letter-spacing:-.025em}

/* ── 布局 ── */
.shell{display:grid;grid-template-columns:190px 1fr;gap:18px;align-items:start}
.rail{position:sticky;top:76px;background:var(--card);border-radius:var(--r);
  box-shadow:var(--sh1);padding:7px}
.rail button{display:flex;width:100%;align-items:center;gap:9px;text-align:left;border:none;
  background:none;cursor:pointer;font-size:13.5px;padding:9px 11px;border-radius:10px;
  color:var(--ink2);transition:.14s;font-weight:500}
.rail button:hover{background:var(--bg);color:var(--ink)}
.rail button.on{background:var(--ink);color:#fff;font-weight:600}
.rail .rv{margin-left:auto;font-size:11px;color:var(--ink3);font-weight:600}
.rail button.on .rv{color:rgba(255,255,255,.62)}
.rail .lk{margin-left:auto;font-size:9px;font-weight:700;color:#8a6216;
  background:#fdf5e7;padding:2px 5px;border-radius:4px}
.rail button.on .lk{background:rgba(255,255,255,.16);color:#fff}
.panel{display:none}.panel.show{display:block}
.stack{display:flex;flex-direction:column;gap:16px}
.g{display:grid;gap:16px}
.g2{grid-template-columns:1fr 1fr}
.g3{grid-template-columns:repeat(3,1fr)}
.g4{grid-template-columns:repeat(4,1fr)}
.g-7-5{grid-template-columns:7fr 5fr}
.g-8-4{grid-template-columns:8fr 4fr}

/* ── 模块入口(总览用) ── */
.entries{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.entry{background:var(--card);border-radius:var(--r2);box-shadow:var(--sh1);padding:17px 18px;
  cursor:pointer;transition:.2s cubic-bezier(.2,.7,.3,1);border:none;text-align:left;display:block;width:100%}
.entry:hover{box-shadow:var(--sh3);transform:translateY(-2px)}
.entry .eh{display:flex;align-items:center;justify-content:space-between}
.entry .ek{font-size:12.5px;color:var(--ink2);font-weight:500}
.entry .ea{color:var(--ink4);font-size:13px;transition:.2s}
.entry:hover .ea{color:var(--ink2);transform:translateX(2px)}
.entry .ev{font-size:23px;font-weight:680;margin-top:7px;letter-spacing:-.03em;line-height:1.15}
.entry .ed{font-size:11px;color:var(--ink3);margin-top:3px}
.entry .ev.up{color:var(--up)}.entry .ev.dn{color:var(--down)}.entry .ev.am{color:var(--amber)}
.entry .lk{font-size:9px;font-weight:700;color:#8a6216;background:#fdf5e7;
  padding:2px 5px;border-radius:4px;margin-left:6px;vertical-align:2px}

/* ── 本周变化 ── */
.tl{position:relative;padding-left:22px}
.tl:before{content:"";position:absolute;left:4px;top:6px;bottom:6px;width:2px;background:var(--line)}
.tli{position:relative;padding:9px 0}
.tli:before{content:"";position:absolute;left:-22px;top:15px;width:10px;height:10px;
  border-radius:50%;background:var(--ink4);box-shadow:0 0 0 3px var(--card)}
.tli.up:before{background:var(--up)}.tli.dn:before{background:var(--down)}
.tli.am:before{background:var(--amber)}
.tli .th{font-size:13.5px;font-weight:600}
.tli .tb{font-size:12.5px;color:var(--ink2);margin-top:2px;line-height:1.55}
.tli .tt{font-size:11px;color:var(--ink3);margin-top:3px}

/* ── 数据来源抽屉 ── */
.drawer{margin-top:20px;border-top:1px solid var(--line);padding-top:4px}
.drawer summary{list-style:none;cursor:pointer;font-size:11.5px;color:var(--ink3);
  padding:9px 0;display:flex;align-items:center;gap:6px;font-weight:500;transition:.15s;user-select:none}
.drawer summary::-webkit-details-marker{display:none}
.drawer summary:hover{color:var(--ink2)}
.drawer summary:before{content:"›";font-size:14px;transition:transform .2s;display:inline-block;color:var(--ink4)}
.drawer[open] summary:before{transform:rotate(90deg)}
.drawer .dc{background:var(--sunk);border-radius:var(--r3);padding:14px 16px;margin-bottom:2px;
  display:grid;grid-template-columns:repeat(2,1fr);gap:9px 22px}
.drawer .dr{display:flex;justify-content:space-between;font-size:11.5px;gap:12px}
.drawer .dr span:first-child{color:var(--ink3)}
.drawer .dr span:last-child{color:var(--ink2);font-weight:500;text-align:right}
.drawer code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;
  background:var(--card);padding:1px 5px;border-radius:4px;color:var(--ink2)}
.drawer .dn-full{grid-column:1/-1;font-size:11px;color:var(--ink3);line-height:1.55;
  border-top:1px solid var(--line);padding-top:9px;margin-top:2px}

@media(max-width:1080px){
  .stats{grid-template-columns:repeat(3,1fr)}
  .entries{grid-template-columns:repeat(2,1fr)}
  .shell{grid-template-columns:1fr}
  .rail{position:static;display:flex;flex-wrap:wrap;gap:3px}
  .rail button{width:auto}
  .g2,.g3,.g4,.g-7-5,.g-8-4{grid-template-columns:1fr}
  .hero .now{font-size:36px}
}
/* ═══ v3 新增组件 ═══ */

/* 语言切换 */
.lang{position:relative}
.lang-btn{border:1px solid var(--line);background:none;border-radius:9px;padding:6px 11px;
  font-size:12px;font-weight:600;cursor:pointer;color:var(--ink2);min-width:38px;transition:.18s}
.lang-btn:hover{border-color:var(--ink4);color:var(--ink)}
.lang-menu{position:absolute;top:calc(100% + 7px);right:0;background:var(--card);
  border-radius:var(--r2);box-shadow:var(--sh3);padding:5px;z-index:90;min-width:132px}
.lang-menu button{display:block;width:100%;text-align:left;border:none;background:none;
  padding:8px 11px;border-radius:8px;font-size:13px;cursor:pointer;color:var(--ink2);white-space:nowrap}
.lang-menu button:hover{background:var(--bg);color:var(--ink)}
.lang-menu button.on{background:var(--ink);color:#fff;font-weight:600}

/* 搜索下拉 */
.sw{position:relative;flex:1;max-width:420px}
.sym-res{position:absolute;top:calc(100% + 6px);left:0;right:0;background:var(--card);
  border-radius:var(--r2);box-shadow:var(--sh3);padding:5px;z-index:70;max-height:340px;overflow-y:auto}
.sym-res button{display:grid;grid-template-columns:64px 1fr auto;gap:10px;align-items:center;
  width:100%;text-align:left;border:none;background:none;padding:9px 11px;border-radius:9px;cursor:pointer}
.sym-res button:hover{background:var(--bg)}
.rs-sym{font-weight:700;font-size:13px;font-variant-numeric:tabular-nums}
.rs-co{font-size:12.5px;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rs-meta{font-size:10.5px;color:var(--ink3);white-space:nowrap}
.rs-none{padding:14px;font-size:12.5px;color:var(--ink3);text-align:center}

/* 图表容器 + tooltip */
.chart-wrap{position:relative;margin-top:6px}
.chart-wrap canvas{width:100%;height:340px;display:block;cursor:grab}
.chart-wrap canvas:active{cursor:grabbing}
.chart-wrap.sm{margin-top:8px}
.tip{position:absolute;background:var(--ink);color:#fff;border-radius:9px;padding:9px 11px;
  font-size:11.5px;pointer-events:none;z-index:20;min-width:150px;box-shadow:var(--sh3)}
.tip strong{display:block;margin-bottom:5px;font-size:12px}
.tip dl{display:grid;grid-template-columns:auto auto;gap:2px 12px}
.tip dl div{display:contents}
.tip dt{color:rgba(255,255,255,.6)}
.tip dd{text-align:right;font-variant-numeric:tabular-nums}
.hint-sm{font-size:10.5px;color:var(--ink3);margin-top:8px}

/* 状态列 */
.statusrow{display:flex;gap:16px;flex-wrap:wrap;font-size:11.5px;color:var(--ink3);
  padding:9px 12px;background:var(--sunk);border-radius:var(--r3)}
.statusrow.warn{background:#fdf8ee;color:#8a6216}
.statusrow.err{background:#fdeeed;color:#a3271d}
.statusrow .err{color:var(--down)}

/* pending 态 — 诚实标注,不编数据 */
.pending{text-align:center;padding:38px 20px;background:var(--sunk);border-radius:var(--r2)}
.pending .pt{font-size:14px;font-weight:600;color:var(--ink2)}
.pending .pb{font-size:12.5px;color:var(--ink3);margin-top:6px}
.entry.is-pending{opacity:.56}
.entry.is-pending:hover{opacity:1}

.empty{text-align:center;padding:50px 20px;font-size:13.5px;color:var(--ink3)}
.empty.err{color:var(--down)}
.logo{width:44px;height:44px;border-radius:10px;object-fit:contain;background:var(--sunk)}
.acts{display:flex;gap:8px}
.vpill.muted{background:var(--bg);color:var(--ink3)}
.vpill.muted .vd{background:var(--ink4)}

/* AI 弹窗 */
.ai-modal{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;padding:20px}
.ai-back{position:absolute;inset:0;background:rgba(14,21,32,.42);backdrop-filter:blur(3px)}
.ai-dialog{position:relative;background:var(--card);border-radius:20px;box-shadow:var(--sh3);
  padding:26px;width:100%;max-width:440px;max-height:88vh;overflow-y:auto}
.ai-h{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:18px}
.ai-h h2{font-size:19px;font-weight:660;letter-spacing:-.02em;margin-top:3px}
.ai-x{border:none;background:var(--bg);border-radius:8px;width:30px;height:30px;
  cursor:pointer;font-size:16px;color:var(--ink2)}
.ai-dialog label{display:block;margin-bottom:13px}
.ai-dialog label span{display:block;font-size:11.5px;color:var(--ink2);margin-bottom:5px;font-weight:500}
.ai-dialog select,.ai-dialog input{width:100%;border:none;background:var(--bg);border-radius:10px;
  padding:10px 12px;font-size:13.5px;outline:none}
.ai-dialog input:focus,.ai-dialog select:focus{box-shadow:0 0 0 3px var(--accent-lite)}
.ai-list{margin:14px 0}
.prow{display:flex;justify-content:space-between;align-items:center;padding:9px 0;border-bottom:1px solid var(--line)}
.prow:last-child{border:none}
.prow b{font-size:13px}
.prow .pm{font-size:10.5px;color:var(--ink3);margin-top:1px;font-family:ui-monospace,Menlo,monospace}
.pstate{font-size:10px;font-weight:700;padding:3px 8px;border-radius:5px;background:#fdeeed;color:#a3271d}
.pstate.ok{background:var(--accent-lite);color:var(--accent-ink)}
.ai-note{font-size:11px;color:var(--ink3);margin-bottom:8px}
.ai-st{font-size:12px;color:var(--ink2);padding:9px 11px;background:var(--sunk);border-radius:var(--r3);margin-bottom:14px}
.ai-st.success{background:var(--accent-lite);color:var(--accent-ink)}
.ai-st.error{background:#fdeeed;color:#a3271d}
.ai-acts{display:flex;gap:9px}
.ai-acts .btn{flex:1}

.warn-line{font-size:11.5px;color:#8a6216;background:#fdf8ee;border-radius:7px;
  padding:7px 10px;margin:6px 0}
