/* ===== 基础 ===== */
*{margin:0;padding:0;box-sizing:border-box}
:root{
  --green:#34c98a; --green-bg:#e8f9f0; --green-bd:#bdeed7;
  --red:#ff5d7a; --red-bg:#ffeef1; --red-bd:#ffc9d4;
  --orange:#ffa53b; --orange-bg:#fff3e3; --orange-bd:#ffdcae;
  --blue:#5b9bff; --blue-bg:#eaf2ff; --blue-bd:#c4dbff;
  --ink:#3a4654; --ink2:#6b7785; --line:#eef2f5;
  --card-sh:0 6px 18px rgba(120,140,160,.10);
}
html,body{height:100%}
body{
  font-family:"PingFang SC","Microsoft YaHei","Noto Sans SC",system-ui,sans-serif;color:var(--ink);
  background:linear-gradient(160deg,#eaf7f1 0%,#e9f4fb 45%,#eef0fb 100%);
  background-attachment:fixed;overflow-x:hidden;
}
h1,h2{font-weight:900}
small{font-size:.55em;font-weight:700}

/* ===== 网格布局 ===== */
.app{
  display:grid;
  grid-template-columns:208px 1fr 312px;
  grid-template-rows:84px 1fr;
  grid-template-areas:"top top top" "side main alerts";
  min-height:100vh;gap:0;
}
.topbar{grid-area:top}
.sidebar{grid-area:side}
.main{grid-area:main}
.alerts{grid-area:alerts}

/* ===== 顶栏 ===== */
.topbar{
  display:flex;align-items:center;gap:24px;padding:0 26px;
  background:rgba(255,255,255,.82);backdrop-filter:blur(8px);
  border-bottom:1px solid rgba(255,255,255,.6);
}
.brand{display:flex;align-items:center;gap:12px;min-width:200px}
.brand-txt h1{font-size:26px;letter-spacing:1px;background:linear-gradient(90deg,#1f9e6e,#16a3b8);-webkit-background-clip:text;background-clip:text;color:transparent}
.brand-txt p{font-size:11px;color:var(--ink2);margin-top:2px;letter-spacing:.5px}
.radar-sweep{transform-origin:24px 24px;animation:sweep 3s linear infinite}
@keyframes sweep{to{transform:rotate(360deg)}}

.search{flex:1;max-width:760px;margin:0 auto;display:flex;align-items:center;gap:10px;
  background:#fff;border:2px solid #eef2f5;border-radius:30px;padding:13px 22px;box-shadow:inset 0 1px 3px rgba(0,0,0,.02)}
.search input{border:0;outline:0;font-size:15px;flex:1;color:var(--ink);font-family:inherit;background:transparent}
.search input::placeholder{color:#aeb8c2}

.top-right{display:flex;align-items:center;gap:18px}
.bell{position:relative;background:none;border:0;cursor:pointer;padding:4px}
.bell .badge{position:absolute;top:-2px;right:-4px;background:var(--red);color:#fff;font-size:11px;font-weight:700;
  min-width:18px;height:18px;border-radius:9px;display:grid;place-items:center;padding:0 4px;box-shadow:0 2px 5px rgba(255,93,122,.5)}
.user{display:flex;align-items:center;gap:8px;cursor:pointer}
.user .avatar{width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg,#ffd9a0,#ffb877);display:grid;place-items:center;font-size:20px;box-shadow:0 2px 6px rgba(255,170,90,.35)}
.user span{font-weight:700;font-size:15px}

/* ===== 侧边导航 ===== */
.sidebar{padding:18px 14px}
.nav-item{display:flex;align-items:center;gap:12px;padding:13px 16px;border-radius:14px;
  font-size:15px;font-weight:500;color:var(--ink2);cursor:pointer;margin-bottom:4px;position:relative;transition:.2s}
.nav-item .ic{font-size:18px}
.nav-item:hover{background:rgba(255,255,255,.6);color:var(--ink)}
.nav-item.active{background:linear-gradient(135deg,#4bd3a0,#35c0b0);color:#fff;font-weight:700;box-shadow:0 6px 14px rgba(60,200,160,.35)}
.nav-badge{position:absolute;right:14px;background:var(--red);color:#fff;font-size:11px;font-weight:700;padding:1px 7px;border-radius:10px}

/* ===== 主区 ===== */
.main{padding:20px 18px 30px;display:flex;flex-direction:column;gap:18px;min-width:0}
.panel{background:rgba(255,255,255,.9);border:2px solid rgba(255,255,255,.9);border-radius:22px;box-shadow:var(--card-sh)}
.panel-h{display:flex;align-items:center;gap:8px;padding:16px 20px 4px}
.panel-h h2{font-size:19px}
.warn-tri{font-size:20px}
.hint{margin-left:4px;width:18px;height:18px;border-radius:50%;background:#eef2f5;color:#9aa6b2;font-size:12px;font-weight:700;display:grid;place-items:center}

/* KPI */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.kpi{position:relative;border-radius:20px;padding:18px 20px;overflow:hidden;border:2px solid;min-height:104px}
.kpi-label{font-size:14px;font-weight:700;display:flex;align-items:center;gap:6px}
.kpi-val{font-size:38px;font-weight:900;margin-top:6px;line-height:1}
.kpi-ic{position:absolute;right:14px;bottom:10px;font-size:34px;opacity:.9}
.kpi-green{background:var(--green-bg);border-color:var(--green-bd);color:#1f9e6e}
.kpi-red{background:var(--red-bg);border-color:var(--red-bd);color:#e8395a}
.kpi-orange{background:var(--orange-bg);border-color:var(--orange-bd);color:#e8851a}
.kpi-blue{background:var(--blue-bg);border-color:var(--blue-bd);color:#3a7de0}
.dot-red{width:10px;height:10px;border-radius:50%;background:var(--red);display:inline-block;animation:blink 1.2s infinite}
@keyframes blink{50%{opacity:.3}}
.pulse-card{animation:pcard 2.2s ease-in-out infinite}
@keyframes pcard{0%,100%{box-shadow:0 0 0 0 rgba(255,93,122,0)}50%{box-shadow:0 0 0 6px rgba(255,93,122,.12)}}

/* 中部布局 */
.mid{display:grid;grid-template-columns:1fr 420px;gap:18px}
@media(max-width:1500px){.mid{grid-template-columns:1fr 360px}}
@media(max-width:1340px){.mid{grid-template-columns:1fr}}

/* 候选卡 */
.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;padding:10px 18px 20px}
.coin-card{border-radius:18px;padding:16px 14px;border:2px solid;position:relative;overflow:hidden}
.coin-card.extreme{background:linear-gradient(180deg,#fff5f7,#ffeef1);border-color:var(--red-bd)}
.coin-card.high{background:linear-gradient(180deg,#fff8ee,#fff3e3);border-color:var(--orange-bd)}
.corner{position:absolute;top:0;left:0;width:0;height:0;border-style:solid;border-width:30px 30px 0 0}
.coin-card.extreme .corner{border-color:var(--red) transparent transparent transparent}
.coin-card.high .corner{border-color:var(--orange) transparent transparent transparent}
.corner-ic{position:absolute;top:3px;left:3px;font-size:13px;color:#fff;z-index:2}
.cc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.cc-face{font-size:24px}
.cc-name{font-size:21px;font-weight:900;letter-spacing:.5px}
.cc-warn{font-size:18px;animation:shake 2.5s infinite}
@keyframes shake{0%,92%,100%{transform:rotate(0)}94%{transform:rotate(-12deg)}96%{transform:rotate(12deg)}98%{transform:rotate(-8deg)}}
.score-pill{display:flex;align-items:center;gap:6px;color:#fff;font-weight:900;border-radius:20px;padding:6px 12px;font-size:18px;width:fit-content;margin-bottom:10px}
.extreme .score-pill{background:linear-gradient(90deg,#ff6b84,#ff4d6d);box-shadow:0 4px 10px rgba(255,77,109,.4)}
.high .score-pill{background:linear-gradient(90deg,#ffb255,#ffa53b);box-shadow:0 4px 10px rgba(255,165,59,.4)}
.score-pill .lv{font-size:13px;background:rgba(255,255,255,.28);padding:2px 8px;border-radius:12px;display:flex;align-items:center;gap:3px}
.sig-tags{font-size:11px;font-weight:700;border-radius:10px;padding:6px 8px;margin-bottom:12px;text-align:center}
.extreme .sig-tags{background:#ffe1e7;color:#e8395a}
.high .sig-tags{background:#ffe9cf;color:#e8851a}
.metrics{display:flex;flex-direction:column;gap:9px;margin-bottom:14px}
.metric{display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:500}
.metric .m-ic{width:15px;text-align:center;opacity:.7}
.metric .m-name{width:78px;color:var(--ink2)}
.bar{flex:1;height:8px;border-radius:5px;background:#f0e6e6;overflow:hidden}
.bar i{display:block;height:100%;border-radius:5px;transform-origin:left;animation:grow 1s ease-out}
@keyframes grow{from{transform:scaleX(0)}}
.extreme .bar i{background:linear-gradient(90deg,#ff8aa0,#ff4d6d)}
.high .bar i{background:linear-gradient(90deg,#ffc074,#ffa53b)}
.metric .m-val{width:34px;text-align:right;font-weight:700}
.detail-btn{width:100%;border:0;border-radius:12px;padding:9px;font-weight:700;font-size:14px;cursor:pointer;font-family:inherit;color:#fff;transition:.2s}
.extreme .detail-btn{background:linear-gradient(90deg,#ff7b91,#ff5d7a)}
.high .detail-btn{background:linear-gradient(90deg,#ffb45e,#ffa53b)}
.detail-btn:hover{filter:brightness(1.06);transform:translateY(-1px)}

/* 雷达 */
.radar{display:flex;flex-direction:column;align-items:center}
#radar{padding:8px}
.legend{display:flex;gap:22px;padding-bottom:16px}
.legend span{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:var(--ink2)}
.legend i{width:18px;height:4px;border-radius:2px}

/* 概览 */
.overview{padding:6px 0 18px}
.ov-title{font-size:18px;padding:14px 22px 8px}
.ov-grid{display:grid;grid-template-columns:repeat(4,150px) 1fr;gap:14px;padding:0 22px}
@media(max-width:1340px){.ov-grid{grid-template-columns:repeat(4,1fr);}.ov-trend{grid-column:1/-1}}
.ov-stat{background:#f4faf8;border:1.5px solid #e3efeb;border-radius:16px;padding:14px 16px;position:relative}
.ov-l{font-size:13px;color:var(--ink2);font-weight:500}
.ov-v{font-size:26px;font-weight:900;margin-top:4px}
.ov-i{position:absolute;right:12px;top:14px;font-size:20px;opacity:.8}
.ov-trend{background:#f7fafc;border:1.5px solid #eef2f5;border-radius:16px;padding:12px 16px}
#trend{min-height:120px}
#trend svg{display:block;width:100%;height:auto}
.trend-h{display:flex;justify-content:space-between;align-items:center;font-size:13px;font-weight:700;color:var(--ink2);margin-bottom:4px}
.trend-leg{display:flex;gap:12px}
.trend-leg span{display:flex;align-items:center;gap:4px;font-size:11px}
.trend-leg i{width:12px;height:3px;border-radius:2px}
/* 本轮风险结构柱(真实快照,替代原伪造7日趋势) */
.risk-bars{display:flex;align-items:flex-end;gap:18px;height:96px;padding:8px 12px 0;justify-content:center}
.rbar{flex:0 0 48px;height:100%;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:4px}
.rbar i{display:block;width:100%;border-radius:8px 8px 0 0;min-height:4px;transition:height .6s ease-out}
.rbar b{font-size:14px;font-weight:900;color:var(--ink)}
.stat-na{color:#c4ccd4;font-weight:700}

/* ===== 右侧预警 ===== */
.alerts{padding:20px 18px}
.alert-panel{border:2px solid var(--red-bd);background:linear-gradient(180deg,#fff6f8,#fff)}
.alert-h h2{color:#e8395a}.alert-h span{font-size:18px}
.alert-list{list-style:none;padding:10px 16px}
.alert-list li{display:flex;gap:10px;background:#fff0f3;border-radius:14px;padding:12px 14px;margin-bottom:10px;align-items:flex-start}
.a-ic{font-size:16px;margin-top:1px}
.alert-list p{font-size:13.5px;font-weight:700;color:#c9405c;line-height:1.4}
.alert-list time{font-size:12px;color:#e89aa8;font-weight:500}
.alert-btn{margin:6px 16px 18px;width:calc(100% - 32px);background:linear-gradient(90deg,#ff7b91,#ff5d7a);color:#fff;border:0;border-radius:14px;padding:12px;font-weight:700;font-size:14px;cursor:pointer;font-family:inherit;box-shadow:0 6px 14px rgba(255,93,122,.35)}
.alert-btn:hover{filter:brightness(1.05)}

/* ===== 图表动画 ===== */
.radar-poly{animation:radarpop .8s ease-out backwards;animation-delay:var(--d);transform-origin:center}
@keyframes radarpop{from{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}
.trend-line{animation:draw 1.6s ease-out forwards}
@keyframes draw{to{stroke-dashoffset:0}}

/* ===== 柴柴酱 ===== */
.mascot{position:fixed;right:18px;bottom:0;width:300px;height:300px;z-index:50;pointer-events:none}
.dog{animation:bob 3s ease-in-out infinite;transform-origin:center bottom}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-9px)}}
.tail{transform-origin:78px 240px;animation:wag .55s ease-in-out infinite}
@keyframes wag{0%,100%{transform:rotate(-10deg)}50%{transform:rotate(14deg)}}
.head{transform-origin:150px 140px;animation:tilt 4s ease-in-out infinite}
@keyframes tilt{0%,100%{transform:rotate(0)}25%{transform:rotate(-3deg)}75%{transform:rotate(3deg)}}
.ear-l{transform-origin:100px 100px;animation:earl 4s ease-in-out infinite}
.ear-r{transform-origin:200px 100px;animation:earl 4s ease-in-out infinite reverse}
@keyframes earl{0%,100%{transform:rotate(0)}50%{transform:rotate(-6deg)}}
.eye{transition:transform .14s}
.glass{transform-origin:236px 226px;animation:glassmove 4s ease-in-out infinite}
@keyframes glassmove{0%,100%{transform:translate(0,0)}50%{transform:translate(-6px,4px)}}
.shine{animation:shine 2.5s ease-in-out infinite}
@keyframes shine{0%,100%{opacity:.2}50%{opacity:.9}}
.bubble{animation:bubble 3s ease-in-out infinite;transform-origin:80px 50px}
@keyframes bubble{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}
.st{animation:tw 2s ease-in-out infinite}
.st2{animation-delay:.6s}.st3{animation-delay:1.2s}
@keyframes tw{0%,100%{opacity:.2;transform:scale(.7)}50%{opacity:1;transform:scale(1.15)}}

/* 柴柴酱萌动画:漂浮爱心 / 舔舌 / 腮红脉冲 */
.hearts .hb{opacity:0;transform-origin:center;animation:floatHeart 3.6s ease-in infinite}
.hearts .hb2{animation-delay:1.8s}
@keyframes floatHeart{0%{opacity:0;transform:translateY(8px) scale(.5)}25%{opacity:.95}65%{opacity:.7}100%{opacity:0;transform:translateY(-28px) scale(1.05)}}
.tongue{transform-origin:150px 173px;animation:lick 4.2s ease-in-out infinite}
@keyframes lick{0%,86%,100%{transform:scaleY(1)}90%{transform:scaleY(1.3)}95%{transform:scaleY(.88)}}
.blush{animation:blushPulse 3s ease-in-out infinite}
@keyframes blushPulse{0%,100%{opacity:.55}50%{opacity:.9}}
@media(max-width:1400px){.mascot{width:240px;height:240px}}

/* ========== 主区滚动 ========== */
.main{overflow-y:auto;max-height:calc(100vh - 84px)}
.alerts{overflow-y:auto;max-height:calc(100vh - 84px)}

/* ========== 问候 ========== */
.hello{font-size:24px;font-weight:900;color:#3a4654;padding:2px 4px 2px}
.hello .sun{font-size:22px}

/* ========== 侧栏底部 ========== */
.sidebar{display:flex;flex-direction:column}
.side-foot{margin-top:auto;padding:10px 6px}
.mood-card{background:rgba(255,255,255,.6);border:1.5px solid #e8eef2;border-radius:16px;padding:12px 14px}
.mood-l{font-size:12px;color:var(--ink2);font-weight:500}
.mood-r{display:flex;align-items:center;gap:8px;margin-top:6px}
.mood-face{font-size:22px}
.mood-tip{background:#fff3e3;color:#e8851a;font-size:12px;font-weight:700;padding:3px 10px;border-radius:12px}
.update-t{font-size:10.5px;color:#aeb8c2;text-align:center;margin-top:10px}
.nav-badge-soft{background:#cdd6df!important}

/* ========== 搜索下拉 ========== */
.search{position:relative}
.search-drop{position:absolute;top:52px;left:0;right:0;background:#fff;border:2px solid #eef2f5;border-radius:16px;box-shadow:0 12px 30px rgba(120,140,160,.2);padding:6px;display:none;z-index:60}
.search-drop.show{display:block}
.sd-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;cursor:pointer}
.sd-item:hover{background:#f4faf8}
.sd-item b{font-size:14px}.sd-item span{font-size:12px;color:var(--ink2)}
.sd-item .score-mini{margin-left:auto}
.sd-empty{padding:14px;text-align:center;color:var(--ink2);font-size:13px}

/* ========== 候选卡补充 ========== */
.cc-sub{font-size:11px;color:var(--ink2);margin:-4px 0 8px}
.cc-foot{display:flex;gap:8px;align-items:center}
.cc-foot .detail-btn{flex:1}
.fav-btn{background:#fff;border:1.5px solid #ffd9e0;border-radius:12px;width:38px;height:36px;cursor:pointer;font-size:16px;transition:.2s;flex-shrink:0}
.fav-btn:hover{transform:scale(1.1)}
.fav-btn.sm{width:32px;height:30px;font-size:14px;border-radius:9px}
.sub-link,.sub-link{margin-left:auto;font-size:13px;color:#3a9d80;font-weight:700;cursor:pointer}
.sub-link:hover{text-decoration:underline}
.miss-tag{display:inline-block;background:#fff;color:#b08a4a;border:1px dashed #d8c08a;font-size:10px;padding:1px 6px;border-radius:8px;margin-left:4px}
.cards.grid4{grid-template-columns:repeat(4,1fr)}
.candidates.full,.panel.full{padding-bottom:8px}

/* ========== 页面通用 ========== */
.page-h{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;padding:2px 4px 4px}
.page-h h2{font-size:22px}
.page-h small{color:var(--ink2);margin-left:8px}
.panel.pad{padding:6px 4px 18px}
.panel.pad .panel-h{padding:14px 20px 8px}
.mid2{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-bottom:18px}

/* 筛选段 */
.filters{display:flex;gap:10px;flex-wrap:wrap}
.seg{display:inline-flex;background:#fff;border:1.5px solid #eef2f5;border-radius:12px;padding:3px;gap:2px}
.seg button{border:0;background:none;padding:7px 14px;border-radius:9px;font-size:13px;font-weight:700;color:var(--ink2);cursor:pointer;font-family:inherit;transition:.15s}
.seg button.on{background:linear-gradient(135deg,#4bd3a0,#35c0b0);color:#fff}
.seg button:hover:not(.on){background:#f4faf8}

/* ========== 表格 ========== */
.table-wrap{padding:6px;overflow-x:auto}
.ttable{width:100%;border-collapse:collapse;font-size:13px}
.ttable th{text-align:left;padding:12px 12px;color:var(--ink2);font-weight:700;font-size:12px;border-bottom:2px solid #f0f4f7;white-space:nowrap}
.ttable th.sortable{cursor:pointer;user-select:none}
.ttable th.sortable:hover{color:#3a9d80}
.ttable th.sortable::after{content:' ⇅';opacity:.4;font-size:10px}
.ttable td{padding:11px 12px;border-bottom:1px solid #f4f7f9;vertical-align:middle}
.ttable tbody tr{cursor:pointer;transition:.12s}
.ttable tbody tr:hover{background:#f6fbf9}
.ttable .rk{color:#aeb8c2;font-weight:700}
.t-name{display:block;font-size:11px;color:var(--ink2);font-weight:400}
.addr{color:#3a8de0;text-decoration:none;font-size:12px}
.addr:hover{text-decoration:underline}
.chip{font-size:11px;font-weight:700;padding:3px 9px;border-radius:10px}
.chip-BSC{background:#fef3d7;color:#c89020}
.chip-Base{background:#e3edff;color:#3a6fd0}
.chip-Sui{background:#e0f2fb;color:#2b9fc9}
.chip-Ethereum{background:#ecebff;color:#6a5acd}
.score-mini{display:inline-block;color:#fff;font-weight:900;font-size:12px;padding:3px 9px;border-radius:9px;min-width:34px;text-align:center}
.score-mini.extreme{background:#ff5d7a}.score-mini.high{background:#ffa53b}.score-mini.watch{background:#f4c430}
.tbar{display:inline-block;width:54px;height:7px;background:#f0e6e6;border-radius:4px;overflow:hidden;vertical-align:middle;margin-right:6px}
.tbar i{display:block;height:100%;border-radius:4px}
.tbar i.extreme{background:#ff5d7a}.tbar i.high{background:#ffa53b}.tbar i.watch{background:#f4c430}.tbar i.blue{background:#5b9bff}
.ttable em{font-style:normal;font-weight:700;font-size:12px}
.chg.up{color:#22a06b;font-weight:700}.chg.down{color:#e8395a;font-weight:700}
.ok{color:#22a06b;font-weight:700}.bad{color:#e8395a;font-weight:700}.na{color:#aeb8c2}
.empty{text-align:center;color:var(--ink2);padding:40px}

/* ========== 分布条 ========== */
.dist{padding:12px 22px}
.dist-row{display:flex;align-items:center;gap:12px;padding:9px 0;font-size:13px;font-weight:700}
.dist-row[data-detail]{cursor:pointer}
.dist-row>span:first-child{width:80px}
.dist-bar{flex:1;height:12px;background:#f0f4f7;border-radius:7px;overflow:hidden}
.dist-bar i{display:block;height:100%;background:linear-gradient(90deg,#ff8aa0,#ff5d7a);border-radius:7px;animation:grow 1s ease-out}
.dist-bar i.blue{background:linear-gradient(90deg,#8ab8ff,#5b9bff)}
.dist-bar i.extreme{background:linear-gradient(90deg,#ff8aa0,#ff5d7a)}
.dist-bar i.high{background:linear-gradient(90deg,#ffc074,#ffa53b)}
.dist-bar i.watch{background:linear-gradient(90deg,#ffe08a,#f4c430)}
.dist-row>b:last-child{width:50px;text-align:right}

/* ========== 预警中心 ========== */
.alert-full{padding:10px}
.alert-row{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:14px;margin:8px;background:#fafcfe;border:1.5px solid #eef2f5;cursor:pointer;transition:.15s}
.alert-row:hover{transform:translateX(3px)}
.alert-row.extreme{background:#fff4f6;border-color:#ffd0d8}
.alert-row.high{background:#fff8ee;border-color:#ffdcae}
.ar-ic{font-size:20px}
.ar-main{flex:1}
.ar-top b{font-size:15px}
.ar-name{font-size:12px;color:var(--ink2)}
.ar-msg{font-size:13.5px;color:#c9405c;font-weight:600;margin-left:4px}
.ar-meta{font-size:12px;color:var(--ink2);margin-top:3px}
.alert-row time{font-size:13px;color:var(--ink2);font-weight:700}

/* ========== 空状态 ========== */
.empty-page{text-align:center;padding:60px 20px}
.empty-big{font-size:64px;margin-bottom:10px;animation:bob 3s ease-in-out infinite}
.empty-page p{font-size:17px;font-weight:700;color:var(--ink)}
.empty-page span{display:block;font-size:13px;color:var(--ink2);margin-top:6px}
.link-btn,.alert-btn{font-family:inherit}
.link-btn{margin-top:18px;background:linear-gradient(135deg,#4bd3a0,#35c0b0);color:#fff;border:0;border-radius:14px;padding:11px 24px;font-weight:700;cursor:pointer}

/* ========== 设置 ========== */
.set-panel{padding:8px 6px 16px}
.set-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 22px;border-bottom:1px solid #f4f7f9}
.set-row b{font-size:15px}.set-row p{font-size:12.5px;color:var(--ink2);margin-top:3px}
.switch{width:46px;height:26px;background:#dde4ea;border-radius:14px;position:relative;cursor:pointer;transition:.2s;flex-shrink:0}
.switch.on{background:#4bd3a0}
.switch i{position:absolute;top:3px;left:3px;width:20px;height:20px;background:#fff;border-radius:50%;transition:.2s;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.switch.on i{left:23px}
.src-ok{color:#22a06b;font-weight:700;font-size:13px}
.set-note{font-size:12px;color:#b08a4a;background:#fff8ec;border:1px dashed #e8d0a0;border-radius:12px;padding:12px 16px;margin:16px 22px 0;line-height:1.6}

/* ========== 弹窗 ========== */
.modal-mask{position:fixed;inset:0;background:rgba(40,50,65,.4);backdrop-filter:blur(3px);display:none;align-items:center;justify-content:center;z-index:200;padding:20px}
.modal-mask.show{display:flex;animation:fade .2s}
@keyframes fade{from{opacity:0}}
.modal{background:#fff;border-radius:24px;width:min(760px,96vw);max-height:92vh;overflow-y:auto;padding:24px 28px;position:relative;box-shadow:0 24px 60px rgba(40,50,65,.3);animation:pop .25s}
@keyframes pop{from{transform:scale(.93);opacity:0}}
.modal-x{position:absolute;top:18px;right:18px;width:34px;height:34px;border:0;background:#f0f4f7;border-radius:50%;cursor:pointer;font-size:15px;color:var(--ink2)}
.modal-x:hover{background:#ffe1e7;color:#e8395a}
.md-head{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;padding-right:40px}
.md-title{display:flex;align-items:center;gap:10px}
.md-title .cc-face{font-size:26px}
.md-title h2{font-size:26px}
.md-name{color:var(--ink2);font-size:14px}
.score-pill.big{font-size:22px;padding:8px 16px}
.score-pill.extreme{background:linear-gradient(90deg,#ff6b84,#ff4d6d)}
.score-pill.high{background:linear-gradient(90deg,#ffb255,#ffa53b)}
.score-pill.watch{background:linear-gradient(90deg,#ffe08a,#f4c430)}
.md-warn{background:#fff8ec;border:1px dashed #e8d0a0;color:#b08a4a;font-size:13px;padding:10px 14px;border-radius:12px;margin-top:14px}
.md-warn.danger{background:#fff1f3;border-color:#ffc2cd;color:#d23a57}
.md-warn.info{background:#eef5ff;border-color:#bcd6ff;color:#3a6fd0}
/* LP 状态标签 */
.lp-tag{display:inline-block;font-size:11px;font-weight:700;padding:3px 8px;border-radius:8px;white-space:nowrap;cursor:help}
.lp-tag.lp-norm{background:#e6f7ef;color:#22a06b}
.lp-tag.lp-nft{background:#eef5ff;color:#3a6fd0;border:1px solid #cfe0ff}
.lp-tag.lp-risk{background:#ffe9ed;color:#e8395a}
.lp-tag.lp-na{background:#f0f4f7;color:#9aa6b2}
.md-body{display:grid;grid-template-columns:300px 1fr;gap:20px;margin-top:18px}
.md-radar{background:#fafcfe;border-radius:16px;padding:8px;display:flex;justify-content:center}
.md-sec-t{font-size:14px;font-weight:900;margin:16px 0 8px;color:#3a4654}
.md-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.md-cell{background:#f7fafc;border-radius:12px;padding:10px 12px}
.md-cell span{font-size:11px;color:var(--ink2);display:block}
.md-cell b{font-size:16px}
.md-safe{display:flex;flex-wrap:wrap;gap:8px}
.safe-pill{font-size:12px;font-weight:700;padding:6px 12px;border-radius:10px}
.safe-pill.ok{background:#e6f7ef;color:#22a06b}
.safe-pill.bad{background:#ffe9ed;color:#e8395a}
.md-grid2{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.md-cell2{background:#f7fafc;border-radius:10px;padding:8px 10px;text-align:center}
.md-cell2 span{font-size:10.5px;color:var(--ink2);display:block}
.md-cell2 b{font-size:14px}
.md-notes{display:flex;flex-wrap:wrap;gap:8px}
.note-chip{background:#ffeef1;color:#e8395a;font-size:12px;font-weight:700;padding:6px 12px;border-radius:10px}
.note-chip.soft{background:#f4f0e6;color:#b08a4a}
.md-foot{display:flex;gap:12px;margin-top:20px}
.fav-btn.lg{flex:1;width:auto;height:auto;padding:12px;font-size:14px;font-weight:700;border-radius:14px}
.fav-btn.lg.on{background:#ffeef1;border-color:#ffc9d4;color:#e8395a}
.scan-btn{flex:1;text-align:center;padding:12px;background:linear-gradient(135deg,#4bd3a0,#35c0b0);color:#fff;text-decoration:none;border-radius:14px;font-weight:700;font-size:14px}
.scan-btn:hover{filter:brightness(1.05)}

/* ========== Toast ========== */
.toast{position:fixed;bottom:30px;left:50%;transform:translateX(-50%) translateY(20px);background:rgba(40,50,65,.92);color:#fff;padding:12px 24px;border-radius:14px;font-size:14px;font-weight:700;opacity:0;pointer-events:none;transition:.3s;z-index:300}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* ========== 甜甜圈/雷达动画 ========== */
.donut-arc{transition:stroke-dashoffset 1s ease-out}
.rail-badge{margin-left:auto;background:var(--red);color:#fff;font-size:11px;font-weight:700;padding:2px 8px;border-radius:10px}

/* ========== 响应式 ========== */
@media(max-width:1340px){.mid{grid-template-columns:1fr}.mid2{grid-template-columns:1fr}.cards.grid4{grid-template-columns:repeat(2,1fr)}}

/* 收起右侧预警栏：两栏布局。grid-template-areas 必须同步成两列，
   否则区域命名与列数不符会让整套 areas 失效、四个区块塌成自动流 */
@media(max-width:1100px){
  .app{grid-template-columns:72px 1fr;grid-template-areas:"top top" "side main"}
  .alerts{display:none}
  .brand-txt{display:none}
  .brand{min-width:0}
  .search{max-width:none}
  /* 侧栏收成图标轨：标签是裸文本节点，用 font-size:0 收起，再在图标上恢复 */
  .sidebar{padding:14px 8px}
  .nav-item{justify-content:center;font-size:0;padding:13px 0;gap:0}
  .nav-item .ic{font-size:20px}
  .nav-badge{right:6px;top:6px;padding:0 5px;font-size:10px}
  .side-foot{display:none}
}

/* 平板：候选卡两列，概览四宫格压缩为两列 */
@media(max-width:900px){
  .cards{grid-template-columns:repeat(2,1fr)}
  .ov-grid{grid-template-columns:repeat(2,1fr)}
  .ov-trend{grid-column:1/-1}
}

/* 手机：内容单列化，保留图标导航轨，消除横向溢出；收起吉祥物腾出空间 */
@media(max-width:680px){
  .topbar{gap:10px;padding:0 12px}
  .search{padding:10px 14px}
  .search input{min-width:0}      /* 允许搜索框收缩到内容以下，否则撑破顶栏 */
  .top-right{gap:10px}
  .user span{display:none}        /* 隐藏用户名，仅留头像 */
  .user svg{display:none}
  .main{padding:14px 12px 24px}
  .kpis{grid-template-columns:repeat(2,1fr)}
  .cards{grid-template-columns:1fr}
  .cards.grid4{grid-template-columns:1fr}
  .ov-grid{grid-template-columns:1fr 1fr;padding:0 14px}
  .mid2{grid-template-columns:1fr}
  .mascot{display:none}
  .md-body{grid-template-columns:1fr}
  .md-grid2{grid-template-columns:repeat(2,1fr)}
  .md-radar{max-width:300px;margin:0 auto}
}

/* 窄手机：KPI 单列，避免 38px 大字撑破卡片 */
@media(max-width:420px){
  .kpis{grid-template-columns:1fr}
  .kpi-val{font-size:32px}
  .page-h h2{font-size:19px}
}

/* ========== 设置页:cron 命令桥接 + 真实状态 ========== */
.cron-box{margin:14px 22px;background:#f7fafc;border:1.5px solid #eef2f5;border-radius:14px;padding:14px 16px}
.cron-h{font-size:12.5px;font-weight:700;color:var(--ink2);margin-bottom:10px}
.cron-cmd{display:flex;align-items:center;gap:10px;margin-top:8px}
.cron-cmd code{flex:1;background:#2b3440;color:#a6e3c0;font-family:"SF Mono","Cascadia Code",Consolas,monospace;
  font-size:12.5px;padding:9px 12px;border-radius:9px;overflow-x:auto;white-space:nowrap;line-height:1.5}
.copy-btn{flex-shrink:0;border:0;background:linear-gradient(135deg,#4bd3a0,#35c0b0);color:#fff;font-weight:700;
  font-size:12.5px;padding:9px 14px;border-radius:9px;cursor:pointer;font-family:inherit;transition:.15s}
.copy-btn:hover{filter:brightness(1.06)}
.run-status{margin:0 22px 8px;font-size:12px;color:#b08a4a;background:#fff8ec;border:1px dashed #e8d0a0;
  border-radius:10px;padding:9px 14px;line-height:1.6}
.rail-empty{list-style:none;text-align:center;color:var(--ink2);font-size:13px;padding:24px 12px}

/* ========== 爆拉发动区(BEAT/VELVET 式) ========== */
.ignite-zone{background:linear-gradient(135deg,#fff4ec,#ffeef0);border:2px solid #ffc9a8;border-radius:22px;
  box-shadow:0 6px 20px rgba(255,120,80,.16);padding:4px 0 14px;position:relative;overflow:hidden;flex-shrink:0}
.ignite-zone::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;
  background:linear-gradient(90deg,#ff5d3a,#ffa53b,#ff5d7a)}
.iz-head{display:flex;align-items:center;gap:9px;padding:16px 20px 6px}
.iz-head h2{font-size:18px;color:#e8541a}
.iz-fire{font-size:20px;animation:shake 2.5s infinite}
.iz-sub{margin-left:auto;font-size:12px;font-weight:700;color:#e8851a;background:#fff0e0;padding:3px 10px;border-radius:10px}
.iz-cards{display:flex;gap:12px;padding:8px 18px 12px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:thin}
.iz-cards::-webkit-scrollbar{height:7px}
.iz-cards::-webkit-scrollbar-thumb{background:#ffc9a8;border-radius:4px}
.iz-cards::-webkit-scrollbar-track{background:transparent}
.ignite-card{flex:0 0 250px;scroll-snap-align:start;background:#fff;border:1.5px solid #ffd9c0;border-radius:16px;padding:13px 14px;cursor:pointer;transition:.18s}
@media(max-width:480px){.ignite-card{flex-basis:84%}}
.ignite-card:hover{transform:translateY(-2px);box-shadow:0 8px 18px rgba(255,120,80,.2)}
.ignite-card.igniting{border-color:#ff9a7a;background:linear-gradient(180deg,#fff6f2,#fff)}
.ic-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.ignite-tag{font-size:11.5px;font-weight:800;padding:3px 9px;border-radius:10px}
.ignite-tag.igniting{background:#ffe1d6;color:#e8451a}
.ignite-tag.pumping{background:#fff0d8;color:#e8851a}
.ignite-tag.sm{font-size:10.5px;padding:2px 7px;margin-left:6px}
.ic-name{margin-bottom:9px}
.ic-name b{font-size:18px;font-weight:900}
.ic-name span{font-size:11px;color:var(--ink2);margin-left:4px}
.ic-pump{display:flex;align-items:center;gap:9px;margin-bottom:8px}
.ic-bar{flex:1;height:8px;background:#ffe4d4;border-radius:5px;overflow:hidden}
.ic-bar i{display:block;height:100%;border-radius:5px;background:linear-gradient(90deg,#ffa53b,#ff5d3a);animation:grow 1s ease-out}
.ic-pump-v{font-size:17px;font-weight:900;color:#e8541a;min-width:26px;text-align:right}
.ic-meta{font-size:11.5px;color:var(--ink2);font-weight:600}
.ic-meta b{color:#e8541a;font-weight:800}

/* 数据新鲜度提示(预警栏/中心) */
.freshness{font-size:11.5px;color:#9aa6b2;padding:2px 18px 8px;display:flex;align-items:center;gap:5px;line-height:1.45}
.freshness.stale{color:#d0900a;background:#fff8ec;border:1px dashed #e8d0a0;border-radius:10px;padding:8px 14px;margin:4px 14px 8px;font-weight:600}

/* ============ UI 美化:字体排版 ============ */
body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}
/* 数字等宽对齐(数据感):KPI/分数/概览/表格/爆拉度 */
.kpi-val,.ov-v,.score-pill b,.score-mini,.ttable,.ic-pump-v,.metric .m-val,.tbar+em,
.md-cell b,.md-cell2 b,.dist-row b,.rail-badge,.nav-badge,.badge{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}
.brand-txt h1{letter-spacing:1.2px}
.page-h h2,.panel-h h2{letter-spacing:.3px}
.kpi-label{letter-spacing:.2px}
.cc-name{letter-spacing:.6px;font-variant-numeric:tabular-nums}

/* ============ UI 美化:交互动效 ============ */
/* 卡片 hover 上浮(交互反馈) */
.coin-card,.kpi,.ignite-card,.alert-row,.dist-row[data-detail]{transition:transform .22s cubic-bezier(.34,1.4,.64,1),box-shadow .22s ease}
.coin-card:hover{transform:translateY(-4px);box-shadow:0 12px 26px rgba(255,120,140,.22)}
.kpi:hover{transform:translateY(-3px)}
.ignite-card:hover{transform:translateY(-4px);box-shadow:0 12px 24px rgba(255,140,80,.28)}
.alert-row:hover{transform:translateX(4px)}
.score-mini{transition:transform .15s}
.ttable tbody tr:hover .score-mini{transform:scale(1.12)}
/* 爆拉 pump 条流光 */
.ic-bar i{position:relative;overflow:hidden}
.ic-bar i::after{content:"";position:absolute;inset:0;background:linear-gradient(100deg,transparent 20%,rgba(255,255,255,.65) 50%,transparent 80%);transform:translateX(-100%);animation:shimmer 2.2s ease-in-out infinite}
@keyframes shimmer{0%{transform:translateX(-100%)}60%,100%{transform:translateX(220%)}}
/* 火焰区标题图标跳动 */
.iz-fire{display:inline-block;animation:fireBounce 1.4s ease-in-out infinite}
@keyframes fireBounce{0%,100%{transform:translateY(0) scale(1)}50%{transform:translateY(-3px) scale(1.12)}}
/* 入场:面板/卡片淡入上浮(克制,仅首次渲染) */
.kpi,.panel,.ignite-zone,.coin-card{animation:fadeUp .5s ease-out backwards}
.kpis .kpi:nth-child(2){animation-delay:.05s}
.kpis .kpi:nth-child(3){animation-delay:.1s}
.kpis .kpi:nth-child(4){animation-delay:.15s}
@keyframes fadeUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
/* 分数 pill 进入微缩放 */
.score-pill{transition:transform .2s}
.coin-card:hover .score-pill{transform:scale(1.05)}

/* ===== 龙头雷达 ===== */
.dragon-card{display:flex;justify-content:space-between;align-items:center;padding:16px;margin:12px 0;
  background:#fff;border:1.5px solid var(--line);border-radius:12px;cursor:pointer;transition:all .2s}
.dragon-card:hover{border-color:var(--blue);box-shadow:var(--card-sh);transform:translateY(-2px)}
.dragon-card.igniting{border-color:#ff6b9d;background:linear-gradient(135deg,#fff5f8 0%,#fff 100%)}
.dragon-card.leading{border-color:#ffa53b;background:linear-gradient(135deg,#fff8f0 0%,#fff 100%)}
.dc-left{flex:1}
.dc-sym{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.dc-sym b{font-size:18px;color:var(--ink)}
.dc-name{font-size:13px;color:var(--ink2)}
.dc-badge{display:inline-block;padding:3px 8px;font-size:11px;font-weight:600;
  background:linear-gradient(135deg,#ff6b9d,#ff8fab);color:#fff;border-radius:12px}
.dragon-card.leading .dc-badge{background:linear-gradient(135deg,#ffa53b,#ffb960)}
.dc-meta{font-size:13px;color:var(--ink2)}
.dc-right{text-align:right}
.dc-chg{font-size:24px;font-weight:700;margin-bottom:4px}
.dc-chg.up{color:var(--green)}
.dc-chg.down{color:var(--red)}
.dc-score{font-size:12px;color:var(--ink2)}

.dragon-timeline{padding:8px 0}
.dt-row{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--line)}
.dt-row:last-child{border-bottom:none}
.dt-row time{font-size:13px;color:var(--ink2);min-width:50px}
.dt-events{display:flex;flex-wrap:wrap;gap:6px}
.dt-tag{display:inline-block;padding:4px 10px;font-size:12px;font-weight:600;
  border-radius:12px;background:var(--line);color:var(--ink2)}
.dt-tag.igniting{background:linear-gradient(135deg,#ff6b9d,#ff8fab);color:#fff}
.dt-tag.leading{background:linear-gradient(135deg,#ffa53b,#ffb960);color:#fff}
.empty-hint{padding:24px;text-align:center;color:var(--ink2);font-size:14px}
