/* =========================================================
   缠论罗盘 · 设计系统
   双主题：深色（默认）/ 浅色，金铜强调色 + 红涨绿跌
   ========================================================= */
:root,
[data-theme="dark"]{
  color-scheme: dark;
  --bg:#0a0d13;
  --bg-grad:radial-gradient(1200px 600px at 15% -10%, #131c2b 0%, var(--bg) 60%);
  --sidebar-bg:linear-gradient(180deg,#0c111a 0%,#0a0d13 100%);
  --topbar-bg:rgba(10,13,19,.72);
  --panel-a:rgba(23,31,48,.86); --panel-b:rgba(16,21,32,.92);
  --pulse-a:rgba(28,37,56,.9); --pulse-b:rgba(14,18,27,.95);
  --side-card-a:#141b29; --side-card-b:#10141d;
  --concept-a:#151d2c; --concept-b:#101620;
  --elev:#111826;
  --input-bg:#0d121c;
  --surface-hover:#131a28;
  --sig-bg:#121927; --sig-hover:#16202f;
  --th-bg:#131a27;
  --btn-a:#1d2739; --btn-b:#151d2b;
  --mtab-a:#25314a; --mtab-b:#1b2434; --mtab-line:#35425c;
  --sq-a:#2a3550; --sq-b:#1e2637; --sq-line:#3b4a66;
  --line:#232c3f; --line2:#2c3850; --line3:#3a4865;
  --dash:rgba(35,44,63,.7);
  --text:#e9edf5; --muted:#93a0b8; --faint:#65718a;
  --ink-gold:#f0d9ae; --ink-gold2:#f2e2c4; --ink-gold3:#f4e4c3; --ink-cream:#f6e3bd;
  --up:#f0544f; --down:#22b884; --flat:#8a94a8;
  --gold:#e0b15a; --gold2:#c98f3a; --gold-ink:#1b1305; --gold-deep:#8a5a1c;
  --accent:#5b8cff; --purple:#a78bfa; --cyan:#3ec8d6;
  --up-tint:rgba(240,84,79,.10); --up-tint2:rgba(240,84,79,.14); --up-text:#ffb1ae; --up-text2:#ffadaa;
  --down-tint:rgba(34,184,132,.10); --down-tint2:rgba(34,184,132,.14); --down-text:#8fe6c6; --down-text2:#7fe3bf;
  --gold-tint:rgba(224,177,90,.10); --gold-tint2:rgba(224,177,90,.16); --gold-tint3:rgba(224,177,90,.12);
  --blue-tint:rgba(91,140,255,.10); --blue-text:#a8c3ff;
  --purple-tint:rgba(167,139,250,.14); --purple-text:#c4b5fd;
  --cyan-tint:rgba(62,200,214,.14); --cyan-text:#8fe0ea;
  --shadow:0 8px 26px rgba(0,0,0,.38);
  --shadow-sm:0 1px 3px rgba(0,0,0,.25);
  --scroll-thumb:#2a3449; --scroll-thumb-h:#374359;
  --dot-ring:rgba(255,255,255,.03);
  --toast-bg:#1d2739;
  --modal-a:#171f2e; --modal-b:#10151f; --mask:rgba(4,7,12,.62);
  --dim-mask:rgba(6,10,16,.46);
  --skel-a:#141c2a; --skel-b:#1d2739;
  /* 图表 */
  --chart-grid:rgba(255,255,255,.045);
  --chart-text:#65718a;
  --candle-up:#f0544f; --candle-down:#22b884;
  --bi:#e0b15a; --seg:#a78bfa;
  --pivot-fill:rgba(91,140,255,.13); --pivot-line:rgba(91,140,255,.55);
  --dif:#e8eef9; --dea:#e0b15a; --zero:rgba(255,255,255,.12);
  --r:14px;
}

[data-theme="light"]{
  color-scheme: light;
  --bg:#f2f5f9;
  --bg-grad:radial-gradient(1200px 600px at 15% -10%, #ffffff 0%, var(--bg) 65%);
  --sidebar-bg:linear-gradient(180deg,#ffffff 0%,#f6f8fc 100%);
  --topbar-bg:rgba(255,255,255,.86);
  --panel-a:#ffffff; --panel-b:#fbfcff;
  --pulse-a:#ffffff; --pulse-b:#f8fafd;
  --side-card-a:#ffffff; --side-card-b:#f5f8fc;
  --concept-a:#ffffff; --concept-b:#f9fbfe;
  --elev:#f7f9fd;
  --input-bg:#ffffff;
  --surface-hover:#eef2f8;
  --sig-bg:#f8fafd; --sig-hover:#eef2f8;
  --th-bg:#f1f5fa;
  --btn-a:#ffffff; --btn-b:#f5f8fc;
  --mtab-a:#e8eef7; --mtab-b:#f4f7fb; --mtab-line:#d3dce9;
  --sq-a:#e9eff8; --sq-b:#f6f9fc; --sq-line:#d5deeb;
  --line:#e2e8f1; --line2:#d2dae6; --line3:#b7c3d4;
  --dash:rgba(30,45,70,.14);
  --text:#18202d; --muted:#5b6880; --faint:#8b95a8;
  --ink-gold:#8a5f14; --ink-gold2:#6f4c0e; --ink-gold3:#5d400b; --ink-cream:#6b4708;
  --up:#d92f3a; --down:#0f9d70; --flat:#8b95a8;
  --gold:#c08a2e; --gold2:#a8721c; --gold-ink:#ffffff; --gold-deep:#8a5a1c;
  --accent:#2f6bff; --purple:#7c5cf0; --cyan:#0e9aa8;
  --up-tint:rgba(217,47,58,.08); --up-tint2:rgba(217,47,58,.12); --up-text:#b3242e; --up-text2:#b3242e;
  --down-tint:rgba(15,157,112,.09); --down-tint2:rgba(15,157,112,.13); --down-text:#0a7d59; --down-text2:#0a7d59;
  --gold-tint:rgba(192,138,46,.10); --gold-tint2:rgba(192,138,46,.16); --gold-tint3:rgba(192,138,46,.12);
  --blue-tint:rgba(47,107,255,.08); --blue-text:#2354cc;
  --purple-tint:rgba(124,92,240,.10); --purple-text:#5b3fd0;
  --cyan-tint:rgba(14,154,168,.10); --cyan-text:#0b7d88;
  --shadow:0 6px 20px rgba(22,38,64,.10);
  --shadow-sm:0 1px 2px rgba(22,38,64,.08);
  --scroll-thumb:#c8d2e0; --scroll-thumb-h:#b0bdd0;
  --dot-ring:rgba(0,0,0,.04);
  --toast-bg:#ffffff;
  --modal-a:#ffffff; --modal-b:#fafcff; --mask:rgba(24,36,56,.38);
  --dim-mask:rgba(244,247,251,.66);
  --skel-a:#eef2f8; --skel-b:#e2e9f2;
  /* 图表 */
  --chart-grid:rgba(30,45,70,.08);
  --chart-text:#8b95a8;
  --candle-up:#d92f3a; --candle-down:#0f9d70;
  --bi:#b07c22; --seg:#7c5cf0;
  --pivot-fill:rgba(47,107,255,.08); --pivot-line:rgba(47,107,255,.45);
  --dif:#2f3b52; --dea:#c08a2e; --zero:rgba(30,45,70,.20);
  --r:14px;
}

*{margin:0;padding:0;box-sizing:border-box}
html{height:100%;background:var(--bg)}
body{height:100%}
body{
  background:var(--bg-grad);
  color:var(--text);
  font:13px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  -webkit-font-smoothing:antialiased;
  transition:background .2s ease,color .2s ease;
}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:var(--scroll-thumb);border-radius:4px}
::-webkit-scrollbar-thumb:hover{background:var(--scroll-thumb-h)}
a{color:inherit;text-decoration:none}
button{font-family:inherit}
.app{display:flex;height:100vh;overflow:hidden}

/* ---------------- 侧栏 ---------------- */
.sidebar{
  width:216px;flex:0 0 216px;display:flex;flex-direction:column;gap:14px;
  padding:18px 14px;background:var(--sidebar-bg);
  border-right:1px solid var(--line);transition:background .2s ease;
}
.brand{display:flex;align-items:center;gap:10px}
.brand-logo{
  width:36px;height:36px;border-radius:11px;display:grid;place-items:center;
  background:linear-gradient(145deg,var(--gold) 0%,var(--gold-deep) 100%);
  color:#1a1206;font-weight:800;font-size:18px;
  box-shadow:0 6px 18px rgba(224,177,90,.28);
}
.brand-name{font-size:14.5px;font-weight:700;letter-spacing:.4px}
.brand-sub{font-size:9.5px;letter-spacing:1.4px;color:var(--faint)}
.nav{display:flex;flex-direction:column;gap:2px;margin-top:6px}
.nav-item{
  display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:10px;
  color:var(--muted);font-size:13px;cursor:pointer;transition:.16s;position:relative;
}
.nav-item .ico{width:18px;text-align:center;color:var(--faint);font-size:13px}
.nav-item em{margin-left:auto;font-style:normal;font-size:9.5px;letter-spacing:.6px;color:var(--faint);opacity:.65;text-transform:uppercase}
.nav-item:hover{background:var(--surface-hover);color:var(--text)}
.nav-item.active{background:linear-gradient(90deg,var(--gold-tint2),transparent);color:var(--ink-cream);font-weight:600}
.nav-item.active .ico{color:var(--gold)}
.nav-item.active::before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:3px;height:18px;border-radius:0 3px 3px 0;background:var(--gold)}
.side-card{
  margin-top:auto;padding:12px;border-radius:12px;border:1px solid var(--line);
  background:linear-gradient(160deg,var(--side-card-a),var(--side-card-b));
}
.side-card-t{font-size:10px;letter-spacing:1.2px;color:var(--faint);text-transform:uppercase}
.side-date{font-size:12.5px;margin-top:6px;color:var(--text)}
.side-pillars{font-size:15px;letter-spacing:2px;color:var(--gold);margin-top:6px;font-family:"Songti SC","STSong",serif}
.side-foot{display:flex;align-items:center;gap:6px;font-size:10.5px;color:var(--faint)}
.dot{width:7px;height:7px;border-radius:50%;background:var(--flat);box-shadow:0 0 0 3px var(--dot-ring)}
.dot.ok{background:var(--down);box-shadow:0 0 8px var(--down-tint2)}
.dot.bad{background:var(--up)}

/* ---------------- 主区 ---------------- */
.main{flex:1;display:flex;flex-direction:column;overflow:hidden}
.topbar{
  height:58px;flex:0 0 58px;display:flex;align-items:center;gap:14px;padding:0 22px;
  border-bottom:1px solid var(--line);background:var(--topbar-bg);backdrop-filter:blur(10px);
}
.search-wrap{position:relative;flex:1;max-width:420px}
.search-ico{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--faint)}
.search-wrap input{
  width:100%;height:34px;border-radius:10px;border:1px solid var(--line);background:var(--input-bg);
  color:var(--text);padding:0 12px 0 30px;font-size:12.5px;outline:none;transition:.15s;
}
.search-wrap input::placeholder{color:var(--faint)}
.search-wrap input:focus{border-color:var(--gold2);box-shadow:0 0 0 3px var(--gold-tint)}
.search-pop{
  position:absolute;top:40px;left:0;right:0;background:var(--elev);border:1px solid var(--line2);
  border-radius:12px;box-shadow:var(--shadow);overflow:hidden;display:none;z-index:30;max-height:320px;overflow-y:auto;
}
.search-pop.show{display:block}
.search-item{display:flex;gap:8px;align-items:center;padding:8px 12px;cursor:pointer;font-size:12px}
.search-item:hover{background:var(--surface-hover)}
.search-item .mk{font-size:9.5px;padding:1px 5px;border-radius:4px;background:var(--blue-tint);color:var(--blue-text)}
.search-item .cd{color:var(--faint);font-family:ui-monospace,Menlo,monospace}
.market-tabs{display:flex;gap:2px;background:var(--input-bg);border:1px solid var(--line);border-radius:10px;padding:2px}
.mtab{background:none;border:0;color:var(--muted);padding:5px 11px;border-radius:8px;font-size:12px;cursor:pointer;transition:.15s}
.mtab:hover{color:var(--text)}
.mtab.active{background:linear-gradient(180deg,var(--mtab-a),var(--mtab-b));color:var(--ink-gold);box-shadow:inset 0 0 0 1px var(--mtab-line)}
.top-right{margin-left:auto;display:flex;align-items:center;gap:10px}
.clock{font-size:11.5px;color:var(--faint);font-family:ui-monospace,Menlo,monospace}
.cal-badge{
  font-size:11px;padding:5px 10px;border-radius:9px;cursor:pointer;
  background:linear-gradient(145deg,var(--gold-tint2),var(--gold-tint));
  border:1px solid var(--gold-tint2);color:var(--ink-gold);font-family:"Songti SC","STSong",serif;letter-spacing:1px;
}
.cal-badge:hover{background:var(--gold-tint2)}
.theme-toggle{
  width:34px;height:34px;border-radius:10px;border:1px solid var(--line);background:var(--input-bg);
  color:var(--muted);display:grid;place-items:center;cursor:pointer;transition:.16s;font-size:15px;line-height:1;
}
.theme-toggle:hover{color:var(--gold);border-color:var(--line2);transform:translateY(-1px)}

/* ---------------- 页面 ---------------- */
.page{display:none;padding:20px 22px 40px;overflow-y:auto;flex:1}
.page.active{display:block;animation:fade .22s ease}
/* 只用位移动画：避免某些渲染管线（截图/打印/低帧率）把入场动画冻结在半透明帧上 */
@keyframes fade{from{transform:translateY(6px)}to{transform:none}}
.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}
.page-title{font-size:21px;font-weight:700;letter-spacing:-.2px;display:flex;align-items:center;gap:10px}
.page-desc{font-size:12px;color:var(--faint);margin-top:6px;max-width:820px}
.tag-live{
  font-size:10px;font-weight:500;color:var(--gold);background:var(--gold-tint3);
  border:1px solid var(--gold-tint2);padding:2px 8px;border-radius:20px;letter-spacing:.4px;
}
.head-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
/* 期货品种 / 合约 切换条 */
.fut-bar{
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:-4px 0 14px;
  padding:8px 12px;background:var(--input-bg);border:1px solid var(--line);border-radius:10px;
}
.fut-label{font-size:10.5px;color:var(--faint);letter-spacing:.5px}
.fut-bar .hint{margin-left:auto}
.fut-go{background:linear-gradient(180deg,var(--sq-a),var(--sq-b));color:var(--ink-gold2);
  box-shadow:inset 0 0 0 1px var(--sq-line);padding:5px 13px}
.fut-go:hover{color:var(--ink-cream)}
@media (max-width:820px){
  .fut-bar .hint{display:none}
  .fut-bar .input{flex:1 1 120px;width:auto !important}
}

/* ---------------- 卡片 ---------------- */
.card{
  background:linear-gradient(180deg,var(--panel-a),var(--panel-b));
  border:1px solid var(--line);border-radius:var(--r);padding:14px 16px;margin-bottom:14px;
  box-shadow:var(--shadow),inset 0 1px 0 rgba(255,255,255,.03);
}
[data-theme="light"] .card{box-shadow:var(--shadow)}
.card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}
.card-head h3{font-size:13px;font-weight:650;letter-spacing:.2px}
.hint{font-size:10.5px;color:var(--faint)}
.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:14px}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.two-col > .card{margin-bottom:14px}

/* 脉动卡 */
.pulse{
  border:1px solid var(--line);border-radius:var(--r);padding:13px 15px;
  background:linear-gradient(155deg,var(--pulse-a),var(--pulse-b));position:relative;overflow:hidden;
}
.pulse::after{content:"";position:absolute;inset:0;background:radial-gradient(120px 60px at 90% 0%,var(--gold-tint),transparent 70%);pointer-events:none}
.pulse-top{display:flex;align-items:baseline;justify-content:space-between}
.pulse-name{font-size:12px;color:var(--muted)}
.pulse-val{font-size:22px;font-weight:700;font-family:ui-monospace,Menlo,monospace;letter-spacing:-.5px}
.pulse-sub{display:flex;align-items:center;justify-content:space-between;margin-top:6px;font-size:11px;color:var(--faint)}
.heatbar{height:5px;border-radius:3px;background:var(--line);margin-top:9px;overflow:hidden}
.heatbar i{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,var(--down),var(--gold),var(--up))}
.up{color:var(--up)}
.down{color:var(--down)}
.flat{color:var(--flat)}
.mono{font-family:ui-monospace,Menlo,monospace}

/* 指数 */
.idx-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}
.idx{border:1px solid var(--line);border-radius:11px;padding:10px 12px;background:var(--elev);cursor:pointer;transition:.15s}
.idx:hover{border-color:var(--line2);transform:translateY(-1px)}
.idx .n{font-size:11px;color:var(--muted);display:flex;justify-content:space-between}
.idx .p{font-size:16px;font-weight:650;font-family:ui-monospace,Menlo,monospace;margin-top:3px}
.idx .c{font-size:10.5px;margin-top:2px}

/* 表格 */
.tbl-wrap{overflow:auto;max-height:520px}
.tbl{width:100%;border-collapse:collapse;font-size:12px}
.tbl th{
  text-align:left;font-weight:500;color:var(--faint);font-size:10.5px;letter-spacing:.6px;
  padding:7px 8px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--th-bg);z-index:2;
}
.tbl td{padding:8px;border-bottom:1px solid var(--dash);vertical-align:middle}
.tbl tr:hover td{background:var(--gold-tint)}
.tbl .rowlink{cursor:pointer}
.sym{display:flex;flex-direction:column;gap:1px}
.sym b{font-size:12.5px;font-weight:600}
.sym span{font-size:10.5px;color:var(--faint);font-family:ui-monospace,Menlo,monospace}
.chip{display:inline-block;font-size:10px;padding:1px 6px;border-radius:5px;border:1px solid var(--line2);color:var(--muted)}
.chip.gold{color:var(--ink-gold);border-color:var(--gold-tint2);background:var(--gold-tint)}
.chip.red{color:var(--up-text);border-color:var(--up-tint2);background:var(--up-tint)}
.chip.green{color:var(--down-text);border-color:var(--down-tint2);background:var(--down-tint)}
.chip.blue{color:var(--blue-text);border-color:var(--blue-tint);background:var(--blue-tint)}

/* 信号列表 */
.sig-list{display:flex;flex-direction:column;gap:7px;max-height:420px;overflow:auto}
.sig-item{
  display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:10px;
  border:1px solid var(--line);background:var(--sig-bg);font-size:11.5px;cursor:pointer;transition:.15s;
}
.sig-item:hover{border-color:var(--line2);background:var(--sig-hover)}
.sig-item .badge{font-size:10px;padding:2px 7px;border-radius:6px;font-weight:600;white-space:nowrap}
.badge.buy{background:var(--down-tint2);color:var(--down-text2);border:1px solid var(--down-tint2)}
.badge.sell{background:var(--up-tint2);color:var(--up-text2);border:1px solid var(--up-tint2)}
.sig-item .nm{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sig-item .px{font-family:ui-monospace,Menlo,monospace;color:var(--muted)}
.sig-item .dt{font-size:10px;color:var(--faint)}

/* 按钮 / 输入 */
.btn{
  border:1px solid var(--line2);background:linear-gradient(180deg,var(--btn-a),var(--btn-b));color:var(--text);
  padding:7px 14px;border-radius:9px;font-size:12px;cursor:pointer;transition:.15s;box-shadow:var(--shadow-sm);
}
.btn:hover{border-color:var(--line3);transform:translateY(-1px);color:var(--gold)}
.btn.primary{background:linear-gradient(145deg,var(--gold),var(--gold2));color:var(--gold-ink);border-color:transparent;font-weight:650}
.btn.primary:hover{filter:brightness(1.06);color:var(--gold-ink)}
.btn.ghost{background:transparent;box-shadow:none}
.btn.sm{padding:5px 10px;font-size:11.5px}
.input{
  height:32px;border-radius:9px;border:1px solid var(--line);background:var(--input-bg);color:var(--text);
  padding:0 10px;font-size:12.5px;outline:none;width:100%;
}
.input:focus{border-color:var(--gold2)}
.input.sm{height:30px;width:220px}
.seg{display:flex;gap:2px;background:var(--input-bg);border:1px solid var(--line);border-radius:10px;padding:2px}
.sq{background:none;border:0;color:var(--muted);padding:5px 10px;border-radius:8px;font-size:11.5px;cursor:pointer;transition:.15s}
.sq:hover{color:var(--text)}
.sq.active{background:linear-gradient(180deg,var(--sq-a),var(--sq-b));color:var(--ink-gold2);box-shadow:inset 0 0 0 1px var(--sq-line)}
.seg.tiny .sq{padding:4px 9px;font-size:11px}

/* 雷达买卖点筛选器 */
.radar-filter{padding:9px 12px}
.fbar{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.fbar .flab{font-size:10.5px;color:var(--faint);letter-spacing:.5px;white-space:nowrap}
.fbar .fsep{width:1px;height:18px;background:var(--line);margin:0 1px}
.input.sel{width:auto;min-width:112px;height:30px;padding:0 8px;font-size:11.5px;cursor:pointer;background:var(--input-bg);color:var(--text)}
.fsum{font-size:11px;color:var(--muted);margin-left:auto;white-space:nowrap}
.fsum b{color:var(--ink-gold2);font-weight:600}
.fsum .hit-k{color:var(--ink-gold2)}
/* 排除停更勾选 */
.fbar .chk{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--muted);cursor:pointer;user-select:none;white-space:nowrap}
.fbar .chk input{width:13px;height:13px;margin:0;accent-color:var(--gold2);cursor:pointer}
.fbar .chk:hover{color:var(--text)}
/* 范围由期货下拉接管时，顶部市场段置灰 */
.seg.locked{opacity:.45;filter:grayscale(.4)}
.seg.locked .sq{color:var(--faint)}
.seg.locked .sq.active{color:var(--ink-gold2)}
.sigtag{display:inline-flex;align-items:baseline;gap:4px;font-size:10px;line-height:1.4;padding:2px 6px;border-radius:6px;border:1px solid transparent;white-space:nowrap}
.sigtag b{font-weight:600}
.sigtag em{font-style:normal;opacity:.66;font-size:9.5px}
.sigtag.buy{background:var(--down-tint2);color:var(--down-text2)}
.sigtag.sell{background:var(--up-tint2);color:var(--up-text2)}
.sigtag.hit{box-shadow:inset 0 0 0 1px currentColor}
.sigtag.off{opacity:.42}
.sig-cell{display:flex;gap:4px;flex-wrap:wrap;max-width:186px}
.radar-empty{padding:26px 8px;text-align:center;color:var(--muted);font-size:12.5px}
.radar-empty b{color:var(--ink-gold2)}
.tab-seg{display:inline-flex;margin-bottom:14px}

/* 结构页 */
.struct-layout{display:grid;grid-template-columns:1fr 320px;gap:14px;align-items:start}
.struct-main{min-width:0}
.struct-side{display:flex;flex-direction:column;gap:12px}
.side-block{margin-bottom:0}
.chart-card{padding:10px 12px 6px}
.chart-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:6px}
.legend{display:flex;gap:12px;flex-wrap:wrap;font-size:10.5px;color:var(--faint)}
.legend span{display:inline-flex;align-items:center;gap:5px;cursor:pointer;user-select:none}
.legend i{width:14px;height:2px;border-radius:2px;display:inline-block}
.legend .off{opacity:.35;text-decoration:line-through}
.chart-tools{display:flex;gap:6px}
.chart-wrap{position:relative;height:560px}
.chart-wrap canvas{width:100%;height:100%;display:block}
.crosshair-tip{
  position:absolute;pointer-events:none;display:none;background:var(--elev);border:1px solid var(--line2);
  border-radius:8px;padding:6px 9px;font-size:11px;color:var(--text);white-space:nowrap;z-index:5;line-height:1.5;
  box-shadow:var(--shadow);
}
.crosshair-tip b{font-family:ui-monospace,Menlo,monospace}
.chart-note{font-size:10.5px;color:var(--faint);padding:6px 2px 2px;display:flex;gap:14px;flex-wrap:wrap}
.kv{display:flex;flex-direction:column;gap:7px;font-size:11.5px}
.kv .row{display:flex;justify-content:space-between;gap:10px;padding-bottom:6px;border-bottom:1px dashed var(--dash);align-items:flex-start}
.kv .row:last-child{border-bottom:0;padding-bottom:0}
.kv .k{color:var(--faint)}
.kv .v{text-align:right;font-family:ui-monospace,Menlo,monospace;color:var(--text);max-width:62%;word-break:break-word}
.narrative{font-size:11.5px;line-height:1.9;color:var(--muted)}
.narrative p{margin-bottom:8px}
.narrative b{color:var(--ink-gold2)}
.suite{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:10px}
.suite-card{border:1px solid var(--line);border-radius:11px;padding:10px;background:var(--elev)}
.suite-card .lv{font-size:11px;color:var(--muted);display:flex;justify-content:space-between;align-items:center;gap:4px}
.suite-card .st{font-size:13px;font-weight:650;margin-top:5px}
.suite-card .ds{font-size:10.5px;color:var(--faint);margin-top:4px;line-height:1.6}
.suite-card.hl{border-color:var(--gold-tint2);box-shadow:0 0 0 1px var(--gold-tint) inset}

/* 雷达 */
.radar-tbl td{font-size:11.5px}
#page-radar .tbl-wrap{max-height:none}
.radar-tbl .rank{font-family:ui-monospace,Menlo,monospace;color:var(--faint);width:28px}
.radar-note{font-size:11.5px;color:var(--muted);line-height:1.8}
.scorebar{height:4px;border-radius:2px;background:var(--line);overflow:hidden;width:70px;display:inline-block;vertical-align:middle}
.scorebar i{display:block;height:100%;background:linear-gradient(90deg,var(--gold2),var(--gold))}

/* 形态选股（杯柄） */
#page-patterns .tbl-wrap{max-height:none}
#page-patterns .radar-tbl td{font-size:11.5px;vertical-align:middle}
.pat-score{font-style:normal;font-size:10.5px;color:var(--muted);margin-left:6px;font-family:ui-monospace,Menlo,monospace}
.mono.gold{color:var(--ink-gold)}
.radar-tbl td .chip + .chip{margin-left:4px}
#page-patterns th.sortable{cursor:pointer;user-select:none;white-space:nowrap}
#page-patterns th.sortable:hover{color:var(--text)}
.sort-ind{font-style:normal;color:var(--faint);font-size:9.5px;margin-left:2px}
/* 行内「点开看结构」提示 */
#page-patterns .rowlink{cursor:pointer}
#page-patterns .rowlink:hover td{background:var(--gold-tint)}
#page-patterns .rowlink td:first-child{position:relative}
#page-patterns .rowlink:hover td:first-child::before{
  content:"";position:absolute;left:0;top:5px;bottom:5px;width:2px;border-radius:2px;background:var(--gold);
}

/* ---- 形态详情弹窗 ----
   .modal 的基础宽度在后面才定义，这里必须叠加类名提权，否则宽度会被 880 覆盖 */
.modal.pat-modal{width:min(1240px,100%);max-height:94vh}
.pat-headline{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px;font-size:11px;color:var(--muted)}
.pat-headline .px{font-family:ui-monospace,Menlo,monospace;font-size:14px;font-weight:650;color:var(--text)}
.pat-body{padding:13px 16px 8px;line-height:1.55;font-size:11.5px}
.pat-layout{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(300px,1fr);gap:16px;align-items:start}
.pat-chart-col{min-width:0}
.pat-chart-wrap{position:relative;height:360px;border:1px solid var(--line);border-radius:12px;background:var(--elev);overflow:hidden}
.pat-chart-wrap canvas{width:100%;height:100%;display:block}
.pat-side{display:flex;flex-direction:column;gap:12px;min-width:0}
.pat-bottom{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:13px;align-items:start}
.pat-sec{border:1px solid var(--line);border-radius:12px;background:var(--elev);padding:9px 11px}
.pat-sec > h4{
  font-size:11px;font-weight:650;color:var(--ink-gold);letter-spacing:.5px;margin-bottom:7px;
  display:flex;align-items:center;gap:7px;
}
.pat-sec > h4::before{content:"";width:6px;height:6px;border-radius:2px;background:var(--gold)}
.pat-sec > h4 .hint{margin-left:auto;font-weight:400;letter-spacing:0}
.pat-kv{display:flex;flex-direction:column;gap:4px;font-size:11px;line-height:1.45}
.pat-kv .row{display:flex;justify-content:space-between;gap:10px;align-items:baseline}
.pat-kv .k{color:var(--faint);white-space:nowrap}
.pat-kv .v{font-family:ui-monospace,Menlo,monospace;color:var(--text);text-align:right}
.pat-kv .v em{font-style:normal;color:var(--faint);font-size:10.5px;margin-left:4px}
.pat-bar{display:flex;flex-direction:column;gap:3px;font-size:10.5px}
.pat-bar .brow{display:grid;grid-template-columns:74px 1fr 46px;align-items:center;gap:7px}
.pat-bar .bk{color:var(--faint);white-space:nowrap}
.pat-bar .bt{height:5px;border-radius:3px;background:var(--line);overflow:hidden}
.pat-bar .bt i{display:block;height:100%;background:linear-gradient(90deg,var(--gold2),var(--gold));border-radius:3px}
.pat-bar .brow.dim .bt i{background:var(--line2)}
.pat-bar .bv{font-family:ui-monospace,Menlo,monospace;color:var(--muted);text-align:right}
.pat-plan{margin:0;padding-left:17px;font-size:11.5px;line-height:1.85;color:var(--muted)}
.pat-plan li{margin-bottom:5px}
.pat-plan li::marker{color:var(--gold);font-family:ui-monospace,Menlo,monospace}
.pat-plan b{color:var(--ink-gold2);font-weight:600}
.pat-note{font-size:11px;line-height:1.75;color:var(--faint);margin-top:8px}
.pat-chan{font-size:11.5px;line-height:1.8;color:var(--muted)}
.pat-chan .row{display:flex;justify-content:space-between;gap:10px;padding-bottom:5px;border-bottom:1px dashed var(--dash)}
.pat-chan .row:last-child{border-bottom:0;padding-bottom:0}
.pat-chan .k{color:var(--faint);white-space:nowrap}
.pat-chan .v{text-align:right;font-family:ui-monospace,Menlo,monospace;color:var(--text);max-width:64%}
.pat-suite{display:flex;flex-wrap:wrap;gap:6px}
.pat-suite .sc{
  display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line);border-radius:8px;
  padding:3px 7px;background:var(--bg);font-size:10.5px;color:var(--muted);white-space:nowrap;
}
.pat-suite .sc b{font-weight:600;color:var(--text);font-size:10px}
.pat-suite .sc .chip{padding:0 5px;font-size:9.5px;line-height:1.5}
.pat-suite .sc.hl{border-color:var(--gold-tint2);background:var(--gold-tint)}
.pat-suite .sc.off{opacity:.5}
.pat-sub{
  font-size:10px;color:var(--faint);letter-spacing:.5px;margin:11px 0 7px;
  padding-top:9px;border-top:1px dashed var(--dash);
}
.pat-warn{font-size:11px;line-height:1.7;color:var(--up-text);background:var(--up-tint);border-left:2px solid var(--up);padding:7px 10px;border-radius:0 8px 8px 0}
.pat-ok{font-size:11px;line-height:1.7;color:var(--down-text);background:var(--down-tint);border-left:2px solid var(--down);padding:7px 10px;border-radius:0 8px 8px 0}
@media (max-width:980px){
  .modal.pat-modal{width:100%;max-height:96vh}
  .pat-layout{grid-template-columns:1fr}
  .pat-bottom{grid-template-columns:1fr}
  .pat-chart-wrap{height:320px}
}

/* 形态选股 · 保存清单 */
#page-patterns .pat-addcell{width:26px;text-align:center;padding-left:0}
.pat-add{
  width:20px;height:20px;line-height:1;border-radius:6px;border:1px solid var(--line2);
  background:transparent;color:var(--faint);cursor:pointer;font-size:13px;padding:0;
  transition:color .15s,border-color .15s,background .15s;
}
.pat-add:hover{border-color:var(--gold);color:var(--ink-gold);background:var(--gold-tint)}
.pat-add.done{border-color:var(--down-tint2);color:var(--down-text);background:var(--down-tint);cursor:default}

/* 保存弹窗（.modal 的宽度定义在文件靠后，必须叠加提权） */
.modal.pat-save-modal{width:min(520px,100%);max-height:min(84vh,620px)}
.pat-save-body{padding:16px 18px 14px;display:flex;flex-direction:column;gap:11px}
.pat-field{display:flex;flex-direction:column;gap:5px;font-size:11px;color:var(--faint)}
.pat-field .input{width:100%}
.pat-chk{display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--muted);cursor:pointer}
.pat-save-preview{border:1px dashed var(--dash);border-radius:10px;padding:9px 11px;background:var(--bg)}
.pat-save-count{font-size:11.5px;color:var(--muted)}
.pat-save-count b{color:var(--ink-gold2);font-size:15px;font-family:ui-monospace,Menlo,monospace}
.pat-save-names{font-size:11px;color:var(--faint);margin-top:5px;line-height:1.75}

/* 形态跟踪 */
#page-track .stat-strip .stat{min-width:104px}
#page-track .stat-strip .stat .hint{font-size:9.5px;color:var(--faint);line-height:1.4}
#page-track .tbl-wrap{max-height:none;overflow-x:auto}
#page-track .radar-tbl td{font-size:11.5px;vertical-align:middle}
#page-track .radar-tbl th{white-space:nowrap}
#page-track .trk-tbl td{padding:5px 8px}
#page-track .trk-tbl .sym{flex-direction:row;align-items:baseline;gap:6px}
#page-track .trk-tbl .sym span{font-size:9.5px}
.trk-batch{padding:12px 14px 6px;margin-bottom:12px}
.trk-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:9px}
.trk-title{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1 1 240px}
.trk-title b{font-size:13px;color:var(--text)}
.trk-title .hint{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.trk-metrics{display:flex;gap:16px;margin-left:auto;flex:0 0 auto;flex-wrap:nowrap}
.trk-m{display:flex;flex-direction:column;gap:1px;align-items:flex-start;flex:0 0 auto;white-space:nowrap}
.trk-m em{font-style:normal;font-size:9.5px;color:var(--faint);letter-spacing:.3px}
.trk-m b{font-size:13px;font-family:ui-monospace,Menlo,monospace;color:var(--text)}
.trk-row{cursor:pointer}
.trk-row:hover{background:var(--gold-tint)}
.trk-head .trk-del{margin-left:8px}
.trk-tbl .sym b{font-size:12px}
.trk-note{padding:2px 0 8px}
@media (max-width:760px){
  .trk-head{align-items:flex-start}
  .trk-head .trk-del{margin-left:auto}
  .trk-title{flex:1 1 100%}
  .trk-metrics{margin-left:0;gap:14px;width:100%;flex-wrap:wrap}
  .trk-m{align-items:flex-start}
}

/* 理论 */
.concept-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}
.concept{
  border:1px solid var(--line);border-radius:13px;background:linear-gradient(170deg,var(--concept-a),var(--concept-b));
  padding:13px 14px;cursor:pointer;transition:.16s;
}
.concept:hover{border-color:var(--gold-tint2);transform:translateY(-2px);box-shadow:var(--shadow)}
.concept .ch-top{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;min-width:0}
.concept .ch-top h4{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.concept .ch-top .hint{margin-left:auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:42%}
.concept h4{font-size:14px;font-weight:650}
.concept .lv{font-size:9.5px;padding:1px 6px;border-radius:5px;border:1px solid var(--line2);color:var(--muted);white-space:nowrap}
.concept .lv.基础{border-color:var(--cyan-tint);color:var(--cyan-text);background:var(--cyan-tint)}
.concept .lv.进阶{border-color:var(--purple-tint);color:var(--purple-text);background:var(--purple-tint)}
.concept .lv.实战{border-color:var(--gold-tint2);color:var(--ink-gold);background:var(--gold-tint)}
.concept .ol{font-size:11.5px;color:var(--muted);margin-top:7px;line-height:1.7}
.concept .body{display:none;margin-top:11px;padding-top:11px;border-top:1px dashed var(--dash);font-size:11.5px;color:var(--muted);line-height:1.85}
.concept.open .body{display:block}
.concept .body h5{font-size:11px;color:var(--ink-gold);margin:9px 0 4px;letter-spacing:.3px}
.concept .body ul{padding-left:16px}
.concept .body li{margin-bottom:3px}
.q-item{border:1px solid var(--line);border-radius:12px;background:var(--elev);padding:12px 14px;margin-bottom:10px}
.q-item .q{font-size:14px;font-weight:650;color:var(--ink-gold)}
.q-item .a{font-size:12px;color:var(--muted);margin-top:7px;line-height:1.85}
.q-item .steps{margin-top:8px;padding-left:16px;font-size:11.5px;color:var(--muted);line-height:1.85}
.q-item .pit{margin-top:8px;font-size:11px;color:var(--up-text);background:var(--up-tint);border-left:2px solid var(--up);padding:6px 9px;border-radius:0 8px 8px 0}
.lesson{border-left:2px solid var(--gold-tint2);padding:2px 0 2px 14px;margin-bottom:16px}
.lesson h4{font-size:13px;color:var(--ink-gold);margin-bottom:5px}
.lesson ul{padding-left:16px;font-size:11.5px;color:var(--muted);line-height:1.85}

/* 算卦 */
.div-layout{display:grid;grid-template-columns:320px 1fr;gap:14px;align-items:start}
.form-row{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}
.form-row label{font-size:11px;color:var(--faint)}
.form-note{font-size:10.5px;color:var(--faint);line-height:1.7;margin-top:10px}
.div-advice{margin-top:12px;font-size:11.5px;color:var(--muted);line-height:1.8}
.div-main{min-width:0}
.hex-head{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.hex-title{font-size:19px;font-weight:700;color:var(--ink-gold3);font-family:"Songti SC","STSong",serif;letter-spacing:2px}
.hex-sym{display:flex;flex-direction:column;gap:3px;width:64px}
.hex-sym .line{height:7px;border-radius:2px;background:var(--gold);position:relative;opacity:.85}
.hex-sym .line.yin{background:transparent;display:flex;justify-content:space-between}
.hex-sym .line.yin::before,.hex-sym .line.yin::after{content:"";width:44%;height:100%;background:var(--gold);border-radius:2px;opacity:.85}
.hex-sym .line.dong{background:var(--up);opacity:1;height:8px}
.hex-sym .line.yin.dong::before,.hex-sym .line.yin.dong::after{background:var(--up);opacity:1}
.hex-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin-top:14px}
.hex-box{border:1px solid var(--line);border-radius:11px;padding:10px;background:var(--elev)}
.hex-box .lb{font-size:10px;color:var(--faint);letter-spacing:.6px}
.hex-box .nm{font-size:14px;color:var(--ink-gold);margin-top:4px;font-family:"Songti SC","STSong",serif}
.hex-box .ds{font-size:10.5px;color:var(--muted);margin-top:4px;line-height:1.6}
.meter{height:8px;border-radius:4px;background:var(--line);overflow:hidden;margin-top:8px}
.meter i{display:block;height:100%;background:linear-gradient(90deg,var(--down),var(--gold),var(--up))}
.yao-tbl{width:100%;border-collapse:collapse;font-size:11px}
.yao-tbl th{font-size:10px;color:var(--faint);font-weight:500;padding:5px;border-bottom:1px solid var(--line)}
.yao-tbl td{padding:5px;border-bottom:1px solid var(--dash);font-family:ui-monospace,Menlo,monospace}
.yao-tbl tr.dong td{background:var(--up-tint)}
.yao-tbl tr.kong td{color:var(--faint)}
.sc-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.sc{border:1px solid var(--line);border-radius:9px;padding:6px 7px;font-size:10.5px;background:var(--elev)}
.sc.now{border-color:var(--gold2);background:var(--gold-tint)}
.sc .t{font-family:ui-monospace,Menlo,monospace;color:var(--muted)}
.sc .j{font-size:10px;margin-top:2px}
.sc .j.吉{color:var(--down-text)}.sc .j.凶{color:var(--up-text)}.sc .j.泄{color:var(--ink-gold)}.sc .j.平{color:var(--faint)}

/* 数据源 */
.src-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px}
.src{border:1px solid var(--line);border-radius:11px;padding:11px 13px;background:var(--elev);display:flex;gap:10px;align-items:flex-start}
.src .st{width:8px;height:8px;border-radius:50%;margin-top:5px;flex:0 0 8px}
.src .st.ok{background:var(--down);box-shadow:0 0 8px var(--down-tint2)}
.src .st.bad{background:var(--up)}
.src .nm{font-size:12px;font-weight:600}
.src .ms{font-size:10.5px;color:var(--faint);margin-top:3px}

/* 黄历条 */
.cal-strip{display:flex;align-items:center;gap:22px;flex-wrap:wrap;font-size:12px}
.cal-strip .ci{display:flex;align-items:center;gap:7px}
.cal-strip .lab{font-size:10px;color:var(--faint);letter-spacing:.6px}
.cal-strip .val{color:var(--ink-gold);font-family:"Songti SC","STSong",serif;font-size:14px;letter-spacing:1px}
.cal-strip .tip{color:var(--muted);font-size:11.5px}


/* 回测 / 择时实验室 */
.bt-body{font-size:11.5px;color:var(--muted);line-height:1.8}
.bt-table{width:100%;border-collapse:collapse;font-size:11px;margin-top:6px}
.bt-table th{font-size:10px;color:var(--faint);font-weight:500;padding:4px;border-bottom:1px solid var(--line);text-align:left}
.bt-table td{padding:4px;border-bottom:1px solid var(--dash);font-family:ui-monospace,Menlo,monospace}
.bt-table td.name{font-family:inherit}
.bt-warn{font-size:10.5px;color:var(--up-text);background:var(--up-tint);border-left:2px solid var(--up);padding:5px 8px;border-radius:0 6px 6px 0;margin-top:8px}
.bt-ok{font-size:10.5px;color:var(--down-text);background:var(--down-tint);border-left:2px solid var(--down);padding:5px 8px;border-radius:0 6px 6px 0;margin-top:8px}
.tm-chip{cursor:pointer;user-select:none}
.tm-chip.on{background:var(--gold-tint);border-color:var(--gold-tint2);color:var(--ink-gold)}
.tm-row{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px dashed var(--dash)}
.tm-row:last-child{border-bottom:0}
.tm-row .nm{width:104px;flex:none;font-size:11.5px}
.tm-row .bar{flex:1;height:6px;border-radius:3px;background:var(--line);overflow:hidden}
.tm-row .bar i{display:block;height:100%}
.tm-row .sc{width:30px;text-align:right;font-family:ui-monospace,Menlo,monospace;font-size:11.5px}
.tm-verdict{font-size:11px;color:var(--muted);line-height:1.75;margin-top:8px}


/* 统计条 / 书目 */
.stat-strip{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 12px}
.stat-strip .stat{display:flex;flex-direction:column;gap:1px;border:1px solid var(--line);border-radius:10px;padding:6px 11px;background:var(--elev);min-width:96px}
.stat-strip .stat b{font-size:13px;color:var(--ink-gold);font-family:ui-monospace,Menlo,monospace}
.stat-strip .stat em{font-style:normal;font-size:9.5px;color:var(--faint);letter-spacing:.4px}
.bib-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px;margin-top:10px}
.bib-item{border:1px solid var(--line);border-radius:10px;padding:10px;background:var(--elev)}
.bib-t{font-size:12.5px;font-weight:600}
.bib-m{font-size:10.5px;color:var(--faint);margin-top:4px}
.bib-n{font-size:11px;color:var(--muted);margin-top:5px;line-height:1.6}


/* 紫微 / 奇门 盘面 */
.tm-plate{margin-top:12px;border-top:1px dashed var(--dash);padding-top:10px}
.tm-plate-h{font-size:11.5px;color:var(--ink-gold);margin-bottom:8px}
.zw-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:5px}
.zw-cell{border:1px solid var(--line);border-radius:8px;padding:5px 6px;background:var(--elev);min-height:52px}
.zw-cell.soul{border-color:var(--gold);background:var(--gold-tint)}
.zw-h{font-size:10.5px;color:var(--muted);display:flex;justify-content:space-between;gap:4px}
.zw-h span{color:var(--faint)}
.zw-s{font-size:11px;color:var(--text);margin-top:4px;line-height:1.5}
.qm-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}
.qm-cell{border:1px solid var(--line);border-radius:8px;padding:5px 6px;background:var(--elev);min-height:56px}
.qm-cell.hg{border-color:var(--gold);background:var(--gold-tint)}
.qm-h{font-size:10.5px;color:var(--muted);display:flex;justify-content:space-between}
.qm-h span{color:var(--faint)}
.qm-yi{font-size:12px;color:var(--ink-gold);font-family:"Songti SC",serif;margin-top:2px}
.qm-s{font-size:10px;color:var(--muted);margin-top:2px;line-height:1.4}

/* toast */
.toast{
  position:fixed;left:50%;bottom:28px;transform:translateX(-50%) translateY(20px);
  background:var(--toast-bg);border:1px solid var(--line2);color:var(--text);padding:9px 16px;border-radius:10px;
  font-size:12px;opacity:0;pointer-events:none;transition:.2s;z-index:99;box-shadow:var(--shadow);
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.loading{display:grid;place-items:center;height:120px;color:var(--faint);font-size:12px}
.skel{height:12px;border-radius:6px;background:linear-gradient(90deg,var(--skel-a),var(--skel-b),var(--skel-a));background-size:200% 100%;animation:sh 1.2s infinite}
@keyframes sh{0%{background-position:200% 0}100%{background-position:-200% 0}}


/* ================= 理论详情弹窗 ================= */
.modal-mask{
  position:fixed;inset:0;z-index:120;display:none;align-items:center;justify-content:center;padding:26px;
  background:var(--mask);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
}
.modal-mask.show{display:flex;animation:maskIn .16s ease}
@keyframes maskIn{from{opacity:0}to{opacity:1}}
.modal{
  width:min(880px,100%);max-height:min(86vh,940px);display:flex;flex-direction:column;
  background:linear-gradient(180deg,var(--modal-a),var(--modal-b));
  border:1px solid var(--line2);border-radius:16px;overflow:hidden;
  box-shadow:0 26px 80px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.05);
  animation:modalIn .18s cubic-bezier(.2,.8,.3,1);
}
[data-theme="light"] .modal{box-shadow:0 24px 60px rgba(22,38,64,.22)}
@keyframes modalIn{from{opacity:0;transform:translateY(14px) scale(.985)}to{opacity:1;transform:none}}
.modal-head{
  display:flex;align-items:flex-start;justify-content:space-between;gap:16px;
  padding:16px 18px 13px;border-bottom:1px solid var(--line);
  background:linear-gradient(180deg,var(--gold-tint),transparent);
}
.modal-head-l{min-width:0}
.modal-kind{
  font-size:10px;letter-spacing:1px;color:var(--gold);background:var(--gold-tint3);
  border:1px solid var(--gold-tint2);padding:2px 8px;border-radius:20px;
}
.modal-title{
  font-size:18px;font-weight:700;letter-spacing:.4px;margin-top:8px;color:var(--ink-gold3);
  font-family:"Songti SC","STSong",serif;line-height:1.4;word-break:break-word;
}
.modal-tools{display:flex;align-items:center;gap:6px;flex:none}
.modal-count{font-size:11px;color:var(--faint);font-family:ui-monospace,Menlo,monospace;margin-right:4px}
.modal-btn{
  width:30px;height:30px;border-radius:9px;border:1px solid var(--line2);background:var(--input-bg);
  color:var(--muted);cursor:pointer;font-size:15px;line-height:1;display:grid;place-items:center;transition:.15s;
}
.modal-btn:hover{color:var(--gold);border-color:var(--gold2)}
.modal-btn:disabled{opacity:.35;cursor:not-allowed}
.modal-btn.close:hover{color:var(--up);border-color:var(--up)}
.modal-body{padding:16px 20px 6px;overflow-y:auto;flex:1;font-size:12.5px;line-height:1.95;color:var(--muted)}
.md-tags{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.md-tags .lv{font-size:10px;padding:1px 7px;border-radius:5px;border:1px solid var(--line2);color:var(--muted)}
.md-tags .lv.基础{border-color:var(--cyan-tint);color:var(--cyan-text);background:var(--cyan-tint)}
.md-tags .lv.进阶{border-color:var(--purple-tint);color:var(--purple-text);background:var(--purple-tint)}
.md-tags .lv.实战{border-color:var(--gold-tint2);color:var(--ink-gold);background:var(--gold-tint)}
.md-lead{
  font-size:13.5px;line-height:1.9;color:var(--text);
  background:var(--gold-tint);border-left:3px solid var(--gold);border-radius:0 10px 10px 0;
  padding:10px 14px;margin-bottom:16px;
}
.md-sec{margin-bottom:16px}
.md-sec h4{
  font-size:11.5px;font-weight:650;color:var(--ink-gold);letter-spacing:.6px;
  display:flex;align-items:center;gap:8px;margin-bottom:7px;
}
.md-sec h4::before{content:"";width:6px;height:6px;border-radius:2px;background:var(--gold);display:inline-block}
.md-sec p{margin:0}
.md-steps{padding-left:20px;margin:0}
.md-steps li{margin-bottom:6px}
.md-steps li::marker{color:var(--gold);font-family:ui-monospace,Menlo,monospace}
.md-warn{padding-left:18px;margin:0}
.md-warn li{margin-bottom:6px}
.md-warn li::marker{color:var(--up)}
.md-station{
  border:1px dashed var(--line2);border-radius:10px;padding:9px 12px;background:var(--elev);
  color:var(--muted);font-size:12px;
}
.md-pit{
  margin:0 0 16px;font-size:12px;color:var(--up-text);background:var(--up-tint);
  border-left:3px solid var(--up);padding:9px 13px;border-radius:0 10px 10px 0;line-height:1.8;
}
.md-pit b{margin-right:6px;color:var(--up)}
.md-chips{display:flex;flex-wrap:wrap;gap:6px}
.md-jump{
  cursor:pointer;font-family:inherit;background:transparent;color:var(--muted);
  border:1px solid var(--line2);transition:.15s;
}
.md-jump:hover{color:var(--ink-gold);border-color:var(--gold2);background:var(--gold-tint);transform:translateY(-1px)}
.modal-foot{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:11px 18px;border-top:1px solid var(--line);background:var(--elev);
}
.modal-kbd{font-size:10.5px;color:var(--faint);font-family:ui-monospace,Menlo,monospace}

/* 卡片上的「详情」提示 */
.concept, .q-item, .lesson-card, .practice-card{position:relative}
.concept::after, .q-item::after, .lesson-card::after, .practice-card::after{
  content:"›";position:absolute;right:12px;top:12px;font-size:15px;color:var(--faint);
  opacity:0;transition:.16s;line-height:1;
}
.concept:hover::after, .q-item:hover::after, .lesson-card:hover::after, .practice-card:hover::after{opacity:1;color:var(--gold);transform:translateX(2px)}
.q-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(380px,1fr));gap:10px;margin-bottom:10px}
.lesson-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(420px,1fr));gap:10px}
.q-item{margin-bottom:0}
.lesson-card{margin-bottom:0}
.q-item, .lesson-card, .practice-card{cursor:pointer;transition:.16s}
.q-item:hover, .lesson-card:hover, .practice-card:hover{border-color:var(--gold-tint2);box-shadow:var(--shadow)}
.lesson-card{border:1px solid var(--line);border-radius:12px;background:var(--elev);padding:13px 15px;margin-bottom:10px}
.lesson-card h4{font-size:13px;color:var(--ink-gold);margin-bottom:6px}
.lesson-card .tc{font-size:10.5px;color:var(--faint);margin-bottom:8px}
.lesson-card ul{padding-left:16px;font-size:11.5px;color:var(--muted);line-height:1.85}
.lesson-card .more{font-size:10.5px;color:var(--gold);margin-top:6px}

@media (max-width:820px){
  .modal-mask{padding:12px}
  .modal{max-height:92vh}
  .modal-body{padding:14px 15px 4px}
}


/* 算卦页：取数依据 / 实时跟随 / 历史 */
.row-inline{display:flex;gap:8px;margin-top:4px}
.row-inline .btn{flex:1}
.btn.live-on{border-color:var(--down);color:var(--down-text);background:var(--down-tint)}
.live-dot{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;color:var(--down-text)}
.live-dot i{width:6px;height:6px;border-radius:50%;background:var(--down);box-shadow:0 0 0 0 var(--down-tint2);animation:pulse 1.6s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 var(--down-tint2)}70%{box-shadow:0 0 0 6px transparent}100%{box-shadow:0 0 0 0 transparent}}
.div-basis{margin-top:14px;border-top:1px dashed var(--dash);padding-top:12px}
.div-basis h5{font-size:10.5px;color:var(--faint);letter-spacing:.8px;margin-bottom:8px;font-weight:500}
.basis-row{display:flex;justify-content:space-between;gap:10px;font-size:11px;line-height:1.9}
.basis-row .k{color:var(--muted);flex:none}
.basis-row .v{font-family:ui-monospace,Menlo,monospace;color:var(--ink-gold);text-align:right;word-break:break-all}
.basis-row .v small{display:block;font-family:inherit;color:var(--faint);font-size:9.5px;line-height:1.5}
.div-history{margin-top:14px;border-top:1px dashed var(--dash);padding-top:12px}
.div-history h5{font-size:10.5px;color:var(--faint);letter-spacing:.8px;margin-bottom:8px;font-weight:500}
.hist-item{display:flex;align-items:center;gap:8px;padding:5px 7px;border-radius:8px;font-size:10.5px;color:var(--muted);cursor:default}
.hist-item:hover{background:var(--surface-hover)}
.hist-item .h1{color:var(--ink-gold);font-family:"Songti SC","STSong",serif;font-size:12px}
.hist-item .h2{color:var(--faint);font-family:ui-monospace,Menlo,monospace;margin-left:auto}
.hex-live{display:inline-flex;align-items:center;gap:6px;font-size:10.5px;color:var(--faint)}
.hex-quote{font-size:12px;font-family:ui-monospace,Menlo,monospace;margin-top:6px}

/* 教学标注面板（结构分析页） */
.teach-card{border-color:var(--gold-tint2);background:linear-gradient(180deg,var(--gold-tint),var(--panel-a) 60%);}
.teach-card .card-head{align-items:center}
.teach-card .card-head h3{display:flex;align-items:center;gap:8px}
.teach-tag{font-size:9.5px;padding:1px 7px;border-radius:20px;border:1px solid var(--gold-tint2);color:var(--gold);background:var(--gold-tint)}
.teach-steps{margin:4px 0 0;padding-left:20px;font-size:11.5px;line-height:1.95;color:var(--muted)}
.teach-steps li{margin-bottom:5px}
.teach-steps li::marker{color:var(--gold);font-family:ui-monospace,Menlo,monospace}
.teach-steps b{color:var(--ink-gold2);font-weight:600}
.teach-foot{display:flex;align-items:center;gap:10px;margin-top:10px;flex-wrap:wrap}
.teach-pill{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;padding:2px 8px;border-radius:6px;border:1px solid var(--line2);color:var(--muted)}
.teach-pill i{width:8px;height:8px;border-radius:2px;display:inline-block}
.teach-empty{font-size:11.5px;color:var(--faint)}
.teach-tip{font-size:10.5px;color:var(--faint)}
.teach-stepbar{display:flex;align-items:center;gap:10px;margin-top:10px;padding-top:10px;border-top:1px dashed var(--dash);flex-wrap:wrap}
.teach-stepLabel{font-size:11px;color:var(--ink-gold);font-family:ui-monospace,Menlo,monospace}


/* 实时开关 / 更新时间 */
.live-btn{font-variant-numeric:tabular-nums}
.live-btn.on{border-color:var(--down);color:var(--down-text);background:var(--down-tint)}
.live-btn.on i{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--down);margin-right:6px;animation:pulse 1.6s infinite;vertical-align:1px}
.live-btn i{display:none}
.live-stamp{font-size:10.5px;color:var(--faint);font-family:ui-monospace,Menlo,monospace;display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.live-stamp i{width:6px;height:6px;border-radius:50%;background:var(--down);animation:pulse 1.6s infinite}

/* 自选池编辑器 */
.wl-modal{width:min(720px,100%)}
.wl-tabs{display:flex;gap:6px;margin-bottom:12px;flex-wrap:wrap}
.wl-add{display:flex;gap:8px;margin-bottom:12px;position:relative}
.wl-add input{flex:1}
.wl-sug{position:absolute;top:36px;left:0;right:110px;background:var(--elev);border:1px solid var(--line2);border-radius:10px;box-shadow:var(--shadow);z-index:5;max-height:220px;overflow:auto;display:none}
.wl-sug.show{display:block}
.wl-sug div{padding:7px 10px;font-size:12px;cursor:pointer;display:flex;gap:8px;align-items:center}
.wl-sug div:hover{background:var(--surface-hover)}
.wl-sug .mk{font-size:9.5px;padding:1px 5px;border-radius:4px;background:var(--blue-tint);color:var(--blue-text)}
.wl-list{display:flex;flex-direction:column;gap:6px;max-height:44vh;overflow:auto}
.wl-row{display:flex;align-items:center;gap:10px;padding:7px 10px;border:1px solid var(--line);border-radius:9px;background:var(--sig-bg)}
.wl-row .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wl-row .cd{font-family:ui-monospace,Menlo,monospace;font-size:10.5px;color:var(--faint)}
.wl-row .del{border:1px solid var(--line2);background:transparent;color:var(--faint);border-radius:7px;padding:2px 8px;font-size:11px;cursor:pointer;transition:.15s}
.wl-row .del:hover{color:var(--up);border-color:var(--up)}
.wl-empty{font-size:11.5px;color:var(--faint);padding:16px;text-align:center}

@media (max-width:1180px){.div-form{position:static}}

@media (max-width:1180px){
  .grid-4{grid-template-columns:repeat(2,1fr)}
  .idx-grid{grid-template-columns:repeat(3,1fr)}
  .struct-layout{grid-template-columns:1fr}
  .div-layout{grid-template-columns:1fr}
  .two-col{grid-template-columns:1fr}
}
@media (max-width:820px){
  .sidebar{display:none}
  .idx-grid{grid-template-columns:repeat(2,1fr)}
  .hex-grid{grid-template-columns:1fr}
}

/* =========================================================
   期货卦象 · 十二消息卦
   ========================================================= */
.fg-stats{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;margin-bottom:14px}
.fg-card{border:1px solid var(--line);border-radius:var(--r);padding:11px 13px;background:linear-gradient(180deg,var(--pulse-a),var(--pulse-b));box-shadow:var(--shadow-sm);min-width:0}
.fg-card .k{font-size:10.5px;color:var(--faint);letter-spacing:.4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fg-card .v{font-size:22px;font-weight:700;font-family:ui-monospace,Menlo,monospace;margin-top:5px;letter-spacing:-.5px;line-height:1.1}
.fg-card .v em{font-style:normal;font-size:11px;color:var(--faint);font-weight:400;margin-left:3px;font-family:inherit;letter-spacing:0}
.fg-card .s{font-size:10.5px;color:var(--faint);margin-top:5px;line-height:1.6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fg-card .s b{font-weight:600}

/* 卦阵 */
.fg-matrix{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px}
.fg-cell{display:flex;flex-direction:column;align-items:flex-start;gap:5px;padding:9px 10px;border:1px solid var(--line);border-radius:11px;background:var(--elev);cursor:pointer;text-align:left;font-family:inherit;color:var(--text);transition:.15s;min-width:0}
.fg-cell:hover{border-color:var(--line3);background:var(--surface-hover)}
.fg-cell.on{border-color:var(--gold);box-shadow:0 0 0 2px var(--gold-tint2)}
.fg-cell.empty{opacity:.42}
.fg-nm{font-size:13.5px;font-weight:700;color:var(--ink-gold2);display:flex;align-items:baseline;gap:4px;line-height:1.2}
.fg-nm em{font-style:normal;font-size:9.5px;color:var(--faint);font-weight:400}
.fg-n{font-size:19px;font-weight:700;font-family:ui-monospace,Menlo,monospace;line-height:1}
.fg-mem{font-size:9.5px;color:var(--faint);font-family:ui-monospace,Menlo,monospace;letter-spacing:.3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}

/* 六爻图 */
.fg-hex{display:inline-flex;flex-direction:column;gap:2px;width:32px;flex:0 0 auto}
.fg-hex .yl{display:flex;gap:3px;height:3px;border-radius:2px;width:100%}
.fg-hex .y1{background:var(--up)}
.fg-hex .y0 b{flex:1;background:var(--down);border-radius:2px}
.fg-hex.sm{width:19px;gap:1.5px;vertical-align:middle;margin-right:6px}
.fg-hex.sm .yl{height:2px;gap:2px;border-radius:1px}
.fg-legend{display:flex;gap:16px;flex-wrap:wrap;font-size:10.5px;color:var(--faint);margin-top:12px;align-items:center}
.fg-legend > span{display:inline-flex;align-items:center;gap:5px}
/* 图例里只放一条爻做色样，不走 .fg-hex 的六爻布局 */
.fg-legend .yl{display:inline-flex;gap:3px;width:16px;height:3px;border-radius:2px}
.fg-legend .y1{background:var(--up)}
.fg-legend .y0 b{flex:1;background:var(--down);border-radius:2px}

/* 板块分布条：位置由底到顶，用中性→金 的梯度，避免和涨跌红绿抢语义 */
.fg-stack{display:flex;height:7px;width:132px;border-radius:4px;overflow:hidden;background:var(--line)}
.fg-stack i{display:block;height:100%}
.fg-stack .b0{background:var(--down)}
.fg-stack .b1{background:var(--faint)}
.fg-stack .b2{background:var(--muted)}
.fg-stack .b3{background:var(--gold2)}
.fg-stack .b4{background:var(--gold)}
.fg-stack .b5{background:var(--ink-gold)}
.fg-sub{font-size:10px;color:var(--faint);margin-top:2px;line-height:1.4;font-family:ui-monospace,Menlo,monospace}

/* 分位条 */
.fg-pb{position:relative;display:inline-block;width:50px;height:4px;border-radius:2px;background:var(--line);vertical-align:middle;margin-right:6px}
.fg-pb i{position:absolute;top:-2px;width:3px;height:8px;border-radius:2px;background:var(--gold);transform:translateX(-50%)}

/* 品种表 */
#fgTable .fg-gn{font-size:12px;font-weight:600;color:var(--ink-gold2);vertical-align:middle}
#fgTable .fg-gy{font-size:9.5px;color:var(--faint);margin-left:3px;vertical-align:middle}
.fg-mv{display:inline-block;font-size:10px;padding:1px 6px;border-radius:5px;border:1px solid var(--line2);color:var(--muted);white-space:nowrap;font-family:ui-monospace,Menlo,monospace}
.fg-mv.mv-jin{color:var(--up-text);background:var(--up-tint);border-color:transparent}
.fg-mv.mv-tui{color:var(--down-text);background:var(--down-tint);border-color:transparent}
.fg-mv.mv-turnDown{color:var(--down-text);background:var(--down-tint);border-color:var(--down)}
.fg-mv.mv-turnUp{color:var(--up-text);background:var(--up-tint);border-color:var(--up)}
.fg-mv.mv-hold{color:var(--faint);border-color:var(--dash)}
.fg-dv{font-style:normal;font-size:9px;color:var(--gold2);border-bottom:1px dashed var(--gold2);margin-left:4px;cursor:help;white-space:nowrap}
.fg-tools{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-left:auto}
.fg-chk{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--muted);cursor:pointer;white-space:nowrap;user-select:none}
.fg-chk input{width:13px;height:13px;margin:0;accent-color:var(--gold2);cursor:pointer}
.fg-chk:hover{color:var(--text)}

/* 迁移 */
.fg-moves{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.fg-msec{border:1px solid var(--line);border-radius:11px;background:var(--elev);padding:9px 11px;min-width:0}
.fg-mhd{display:flex;align-items:center;gap:7px;margin-bottom:6px;font-size:12px}
.fg-mhd b{font-weight:650;white-space:nowrap}
.fg-mhd .hint{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fg-mhd em{font-style:normal;margin-left:auto;font-family:ui-monospace,Menlo,monospace;font-size:13px;color:var(--ink-gold2);font-weight:600}
.fg-mrow{display:grid;grid-template-columns:16px 62px minmax(0,1fr) 56px 60px;gap:6px;align-items:center;font-size:11px;padding:3px 0;border-bottom:1px dashed var(--dash);cursor:pointer}
.fg-mrow:last-child{border-bottom:0}
.fg-mrow:hover{background:var(--gold-tint)}
.fg-mrow b{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fg-mrow .hint{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:10px}
.fg-mtag{width:15px;height:15px;border-radius:4px;font-size:9px;display:flex;align-items:center;justify-content:center;flex:0 0 auto}
.fg-mtag.u{background:var(--up-tint);color:var(--up-text)}
.fg-mtag.d{background:var(--down-tint);color:var(--down-text)}
.fg-mright{text-align:right;font-family:ui-monospace,Menlo,monospace}

@media (max-width:1180px){
  .fg-stats{grid-template-columns:repeat(3,minmax(0,1fr))}
  .fg-matrix{grid-template-columns:repeat(4,minmax(0,1fr))}
  .fg-moves{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:820px){
  .fg-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .fg-matrix{grid-template-columns:repeat(3,minmax(0,1fr))}
  .fg-moves{grid-template-columns:1fr}
  .fg-tools{margin-left:0}
}
