:root{
  --purple:#663399;--purple-dark:#4D2673;--purple-light:#8B5CB3;--purple-pale:#F3EDF8;
  --green:#99CC33;--green-pale:#F4FBE5;--fg:#333;--muted:#666;--soft:#A0A0A0;
  --bg:#F5F5F5;--surface:#fff;--line:#E5E5E5;--red:#DC3545;--orange:#F5A623;
  --yellow:#D4A830;--ok:#17A34A;--shadow:0 1px 3px rgba(0,0,0,.06);
  --raise:0 4px 16px rgba(0,0,0,.10);
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--fg);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",system-ui,sans-serif}
.app{display:grid;grid-template-columns:240px 1fr;min-height:100vh}
.nav{position:sticky;top:0;height:100vh;background:var(--purple);color:#fff;padding:18px 12px;box-shadow:0 2px 12px rgba(102,51,153,.25)}
.brand{padding:4px 10px 20px;font-weight:800;font-size:20px;line-height:1.25}
.brand small{display:block;margin-top:6px;color:rgba(255,255,255,.7);font-size:12px;font-weight:500}
.brand i{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--green);margin-left:6px}
.nav-label{padding:14px 10px 6px;color:rgba(255,255,255,.52);font-size:12px}
.nav button,.export{display:block;width:100%;border:0;border-radius:8px;background:transparent;color:rgba(255,255,255,.84);text-align:left;padding:10px 12px;font-size:14px;font-weight:600;text-decoration:none;cursor:pointer}
.nav button.active,.nav button:hover,.export:hover{background:#fff;color:var(--purple)}
.export{margin-top:12px;border:1px solid rgba(255,255,255,.24);text-align:center}
.nav-foot{position:absolute;left:22px;right:22px;bottom:24px;color:rgba(255,255,255,.68);font-size:12px;line-height:1.6}
main{padding:22px 24px 36px;min-width:0}
.top{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:14px}
h1,h2,p{margin:0}h1{margin-bottom:6px;font-size:30px;line-height:1.15;font-family:"PingFang SC","Microsoft YaHei",sans-serif}
h2{margin-bottom:5px;font-size:18px;font-family:"PingFang SC","Microsoft YaHei",sans-serif}.sub,.hint{color:var(--muted)}
.sub{font-size:14px}.hint{margin-bottom:12px;font-size:12px;line-height:1.5}
.filters{display:flex;gap:8px;flex-wrap:wrap}
select,.btn{border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--fg);padding:8px 12px;font-size:13px;font-weight:600;box-shadow:var(--shadow);text-decoration:none}
.btn.primary{background:var(--purple);border-color:var(--purple);color:#fff}
.overview{display:grid;grid-template-columns:minmax(520px,1fr) minmax(520px,1.25fr);gap:14px;margin-bottom:14px;align-items:stretch}
.overview-side{display:grid;grid-template-rows:auto 1fr;gap:10px;min-width:0}
.strip{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.kpi,.panel{background:var(--surface);border:1px solid var(--line);border-radius:8px;box-shadow:var(--shadow)}
.kpi{padding:14px 16px;min-height:92px}.kpi b{display:block;font-size:24px;line-height:1;color:var(--purple);font-family:"PingFang SC","Microsoft YaHei",sans-serif}
.kpi span{display:block;margin-top:6px;color:var(--muted);font-size:12px}
.funnel-panel{min-height:310px}
.funnel-chart{height:212px;margin-top:4px}
.rate-row{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:10px 0 2px}
.rate-row div{border:1px solid #D8C7E8;background:var(--purple-pale);border-radius:8px;padding:8px 10px}
.rate-row b{display:block;color:var(--purple);font-size:17px;line-height:1}.rate-row span{display:block;margin-top:4px;color:var(--muted);font-size:11px}
.side-panel{padding-bottom:12px}
.future-box{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.future-box div{border:1px solid var(--line);border-radius:8px;background:#fff;padding:8px 10px}
.future-box .pool-card{background:var(--purple-pale);border-color:#D8C7E8}
.future-box .pool-title{grid-column:1/-1;border:0;background:transparent;padding:0;color:var(--fg);font-weight:800;font-size:13px}
.future-box .muted-title{margin-top:2px;color:var(--muted)}
.future-box .future-card{background:#FAFAFA}
.future-box b{display:block;color:var(--purple);font-size:14px}
.future-box span,.future-box em{display:block;margin-top:3px;color:var(--muted);font-size:11px;line-height:1.35;font-style:normal}
.notice{border:1px solid #F3D58C;background:#FFFBEB;color:#735000;border-radius:8px;padding:10px 14px;font-size:12px;line-height:1.55;margin-bottom:14px}
.notice b{margin-right:4px;color:#4D2673}
.notice-boundary{border:1px solid var(--line);background:#FAFAFA;color:var(--muted);border-radius:8px;padding:10px 14px;font-size:12px;line-height:1.55;margin-bottom:14px}
.notice-boundary b{margin-right:4px;color:var(--purple)}
.ver-badge{display:inline-block;padding:1px 8px;border-radius:999px;font-size:11px;font-weight:700;background:var(--purple-pale);color:var(--purple);margin-left:6px;vertical-align:middle}
.levels{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}.pill{border:1px solid var(--line);border-radius:999px;background:#fff;padding:6px 12px;font-size:12px;font-weight:700;cursor:pointer;color:var(--muted)}
.pill.active{background:var(--purple);border-color:var(--purple);color:#fff}
.layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:14px;margin-bottom:14px;align-items:stretch}.panel{padding:16px}
.layout>.panel{height:500px;overflow:hidden}
.layout>.panel:nth-child(2){display:flex;flex-direction:column}
.chart{height:420px}.alerts{display:flex;flex-direction:column;gap:8px}
.layout .alerts{min-height:0;overflow-y:auto;padding-right:4px}
.layout .alerts::-webkit-scrollbar{width:6px}
.layout .alerts::-webkit-scrollbar-thumb{background:rgba(102,51,153,.28);border-radius:999px}
.alert{border-left:4px solid var(--line);border-radius:8px;padding:12px;background:#fff;cursor:pointer}
.alert:hover{box-shadow:var(--raise)}.alert.red{border-color:var(--red);background:#FFF5F5}.alert.orange{border-color:var(--orange);background:#FFFCF5}
.alert.yellow{border-color:var(--yellow);background:#FFFEF8}.alert.green{border-color:var(--ok);background:#F5FFF8}
.alert b{display:block;font-size:15px;margin-bottom:3px}.alert span{color:var(--muted);font-size:12px;line-height:1.45}
.cards{display:grid;grid-template-columns:repeat(7,1fr);gap:10px}.card{border:2px solid var(--line);border-radius:8px;background:#fff;padding:14px 10px;text-align:center;cursor:pointer;transition:.15s}
.card:hover,.card.sel{border-color:var(--purple);box-shadow:var(--raise);transform:translateY(-1px)}.card strong{display:block;font-size:22px;line-height:1;margin-bottom:5px;font-family:"PingFang SC","Microsoft YaHei",sans-serif}
.card span{display:block;color:var(--muted);font-size:12px}
#drill{display:none;margin-top:14px}.show{display:block!important}.drill-head{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:12px}
.metrics{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin-bottom:12px}.metric{background:var(--purple-pale);border-radius:8px;padding:10px;text-align:center}
.metric b{display:block;color:var(--purple);font-size:18px}.metric span{font-size:11px;color:var(--muted)}
.drill-grid{display:grid;grid-template-columns:1.15fr 1fr 1fr;gap:12px}.mini{height:230px}.advice{font-size:13px;line-height:1.65;color:var(--muted)}
.advice .box{border-left:4px solid var(--green);background:var(--green-pale);border-radius:8px;padding:10px 12px;margin-bottom:8px;color:#40502A}
.advice .box.warn{border-color:var(--orange);background:#FDF0D5;color:#7A5200}
.data-line{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:10px}.data-line div{border:1px solid var(--line);border-radius:8px;padding:9px;background:#fff;font-size:12px;color:var(--muted)}
.data-line b{display:block;color:var(--fg);font-size:14px;margin-bottom:3px}
.section-block{margin-top:14px}
.status-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.status-grid div{border:1px solid var(--line);border-radius:8px;background:#fff;padding:12px;min-height:76px}
.status-grid b{display:block;margin-bottom:6px;color:var(--purple)}
.status-grid span{display:block;color:var(--muted);font-size:12px;line-height:1.5}
.trend-empty{display:flex;align-items:center;justify-content:center}
.empty-state{border:1px dashed #D8C7E8;background:#FAF7FC;border-radius:8px;padding:18px;text-align:center;color:var(--muted);line-height:1.6}
.empty-state b{display:block;margin-bottom:6px;color:var(--purple);font-size:16px}
.empty-state span{display:block;font-size:12px}
@media(max-width:1280px){.overview,.layout{grid-template-columns:1fr}.cards{grid-template-columns:repeat(4,1fr)}.drill-grid{grid-template-columns:1fr 1fr}.metrics,.strip,.future-box{grid-template-columns:repeat(3,1fr)}}
@media(max-width:760px){.app{grid-template-columns:1fr}.nav{height:auto;position:relative}.nav-foot{position:static;margin:18px 10px 0}.top{display:block}.strip,.cards,.metrics,.drill-grid,.future-box,.rate-row{grid-template-columns:1fr}main{padding:14px}h1{font-size:24px}}

/* ── 新增模块 ── */
.anomaly-list{margin-top:12px}
.anomaly-table{width:100%;border-collapse:collapse;font-size:13px}
.anomaly-table th,.anomaly-table td{border-bottom:1px solid var(--line);padding:8px 12px;text-align:left}
.anomaly-table th{background:var(--purple-pale);color:var(--purple);font-weight:700}
.anomaly-table .num{text-align:right;font-weight:700;color:var(--purple)}
#migrationChart{min-height:460px}
