:root{
  --bg:#f4f7fb; --bg2:#ffffff; --panel:#ffffff; --panel2:#f7f9fc;
  --line:#e3e9f2; --line2:#c9d4e3;
  --txt:#0f1b2d; --muted:#5a6b80; --dim:#8c9bad;
  --up:#e5484d; --down:#0f9d58; --accent:#2563eb; --gold:#b45309;
  --mono:"SF Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:
    radial-gradient(1200px 500px at 15% -10%,rgba(37,99,235,.08),transparent 60%),
    radial-gradient(900px 420px at 90% 0%,rgba(229,72,77,.05),transparent 60%),
    var(--bg);
  color:var(--txt);font-family:var(--sans);font-size:15px;line-height:1.55;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
button{font-family:inherit;color:inherit;background:none;border:0;cursor:pointer}
.wrap{max-width:1180px;margin:0 auto;padding:0 22px 72px}

/* ---------- header ---------- */
.top{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:26px 0 18px;border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:center;gap:12px}
.logo{width:38px;height:38px;border-radius:10px;background:linear-gradient(135deg,#54c8ff,#2b6cff);display:grid;place-items:center;color:#04121c;font-weight:800;font-family:var(--mono);font-size:15px;box-shadow:0 6px 18px rgba(37,99,235,.28)}
.brand h1{font-size:19px;margin:0;letter-spacing:.4px}
.brand p{margin:1px 0 0;color:var(--muted);font-size:12px}
.topmeta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:flex-end}
.chip{font-family:var(--mono);font-size:11.5px;color:var(--muted);border:1px solid var(--line);background:var(--panel2);padding:5px 10px;border-radius:999px;white-space:nowrap}
.chip b{color:var(--txt);font-weight:600}
.dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--down);margin-right:6px;vertical-align:1px;box-shadow:0 0 8px var(--down)}
.dot.warn{background:var(--gold);box-shadow:0 0 8px var(--gold)}
.dot.err{background:var(--up);box-shadow:0 0 8px var(--up)}

/* ---------- hero ---------- */
.hero{display:grid;grid-template-columns:1.35fr 1fr 1fr;gap:16px;margin:22px 0 26px}
.intro{padding:20px 22px;border:1px solid var(--line);border-radius:16px;background:linear-gradient(160deg,rgba(37,99,235,.07),rgba(255,255,255,.7))}
.intro .date{font-family:var(--mono);color:var(--accent);font-size:12px;letter-spacing:.5px}
.intro h2{margin:8px 0 8px;font-size:22px;line-height:1.3}
.intro p{margin:0;color:var(--muted);font-size:13.5px}
.intro .mini{margin-top:14px;display:flex;gap:18px;font-family:var(--mono);font-size:12px;color:var(--dim)}
.intro .mini b{color:var(--txt);font-size:15px;display:block;font-weight:600}
.mode{padding:18px;border:1px solid var(--line);border-radius:16px;background:var(--panel);position:relative;overflow:hidden;cursor:pointer;transition:border-color .18s,transform .18s}
.mode:hover{border-color:var(--line2);transform:translateY(-1px)}
.mode.active{border-color:var(--accent);box-shadow:0 0 0 1px rgba(37,99,235,.18) inset}
.mode .tag{font-family:var(--mono);font-size:11px;color:var(--dim);letter-spacing:.6px}
.mode h3{margin:6px 0 6px;font-size:16px}
.mode p{margin:0;font-size:12.5px;color:var(--muted);line-height:1.6}
.mode .count{position:absolute;right:16px;top:14px;font-family:var(--mono);font-size:26px;font-weight:700;color:var(--accent);opacity:.9}
.mode.ch .count{color:var(--gold)}
.mode .bar{height:2px;background:linear-gradient(90deg,var(--accent),transparent);margin-top:14px;border-radius:2px}
.mode.ch .bar{background:linear-gradient(90deg,var(--gold),transparent)}

/* ---------- toolbar ---------- */
.toolbar{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:16px;flex-wrap:wrap}
.tabs{display:inline-flex;background:var(--panel2);border:1px solid var(--line);padding:4px;border-radius:12px;gap:2px}
.tabs button{padding:8px 16px;border-radius:9px;font-size:13px;color:var(--muted);font-weight:500}
.tabs button.on{background:var(--panel);color:var(--txt);box-shadow:0 1px 3px rgba(15,27,45,.10)}
.tabs .n{font-family:var(--mono);font-size:11px;color:var(--dim);margin-left:6px}
.asof{font-family:var(--mono);font-size:11.5px;color:var(--dim)}

/* ---------- cards ---------- */
.grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.card{border:1px solid var(--line);border-radius:16px;background:linear-gradient(180deg,#ffffff,#fbfdff);padding:16px 16px 14px;cursor:pointer;transition:border-color .18s,transform .18s,box-shadow .18s;position:relative;overflow:hidden}
.card:hover{border-color:var(--line2);transform:translateY(-2px);box-shadow:0 14px 34px rgba(15,27,45,.10)}
.card:before{content:"";position:absolute;inset:0 0 auto 0;height:1px;background:linear-gradient(90deg,transparent,rgba(37,99,235,.35),transparent);opacity:0;transition:opacity .2s}
.card:hover:before{opacity:1}
.card.ch:before{background:linear-gradient(90deg,transparent,rgba(180,83,9,.35),transparent)}
.chead{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}
.cname{font-size:15.5px;font-weight:600;letter-spacing:.2px;line-height:1.35}
.ccode{font-family:var(--mono);font-size:11px;color:var(--dim);margin-top:2px}
.cprice{text-align:right;font-family:var(--mono);white-space:nowrap}
.cprice .p{font-size:17px;font-weight:600}
.cprice .d{font-size:11.5px;margin-top:1px}
.up{color:var(--up)}.down{color:var(--down)}.flat{color:var(--muted)}
.spark{display:block;width:100%;height:44px;margin:12px 0 10px}
.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:7px 10px;font-family:var(--mono);font-size:11px}
.metrics div{display:flex;flex-direction:column;gap:1px}
.metrics span{color:var(--dim);font-size:10px}
.metrics b{font-weight:500;color:var(--txt);font-size:12px;white-space:nowrap}
.reasons{display:flex;flex-wrap:wrap;gap:5px;margin-top:12px}
.reasons i{font-style:normal;font-size:10.5px;color:var(--muted);border:1px solid var(--line);background:rgba(15,27,45,.03);padding:3px 7px;border-radius:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.cfoot{display:flex;align-items:center;justify-content:space-between;margin-top:12px;padding-top:10px;border-top:1px dashed var(--line)}
.score{font-family:var(--mono);font-size:11px;color:var(--dim)}
.score b{font-size:16px;color:var(--gold);font-weight:700}
.score.mid b{color:var(--accent)}
.zonebar{position:relative;height:22px;margin-top:10px}
.zonebar .track{position:absolute;left:0;right:0;top:9px;height:4px;border-radius:3px;background:linear-gradient(90deg,rgba(34,201,138,.85),rgba(255,200,87,.55),rgba(255,90,106,.8))}
.zonebar .mark{position:absolute;top:2px;width:2px;height:18px;background:#0f1b2d;box-shadow:0 0 6px rgba(15,27,45,.35)}
.zonebar .lab{position:absolute;top:-13px;font-family:var(--mono);font-size:9.5px;color:var(--dim);transform:translateX(-50%)}
.levels{display:flex;justify-content:space-between;font-family:var(--mono);font-size:10.5px;color:var(--dim);margin-top:2px}
.levels b{color:var(--txt);font-weight:500}

/* ---------- states ---------- */
.loading,.empty{border:1px dashed var(--line);border-radius:16px;padding:42px 24px;text-align:center;color:var(--muted);background:rgba(15,27,45,.02)}
.loading .spin{width:26px;height:26px;border:2px solid var(--line2);border-top-color:var(--accent);border-radius:50%;margin:0 auto 14px;animation:sp 1s linear infinite}
@keyframes sp{to{transform:rotate(360deg)}}
.loading p{margin:2px 0;font-size:13px}
.loading code{font-family:var(--mono);color:var(--accent);font-size:12px}

/* ---------- modal ---------- */
.mask{position:fixed;inset:0;background:rgba(15,27,45,.38);backdrop-filter:blur(6px);z-index:50;display:grid;place-items:center;padding:24px}
.modal{width:min(880px,100%);max-height:90vh;overflow:auto;background:var(--bg2);border:1px solid var(--line2);border-radius:18px;box-shadow:0 24px 70px rgba(15,27,45,.22)}
.mhead{display:flex;justify-content:space-between;align-items:flex-start;padding:20px 22px 0}
.mhead h3{margin:0;font-size:19px}
.mhead .sub{font-family:var(--mono);font-size:11.5px;color:var(--dim);margin-top:3px}
.x{width:32px;height:32px;border-radius:9px;border:1px solid var(--line);display:grid;place-items:center;color:var(--muted)}
.x:hover{color:var(--txt);border-color:var(--line2)}
.chart{padding:8px 12px 0}
.chart svg{width:100%;height:auto;display:block}
.legend{display:flex;gap:16px;padding:2px 24px 10px;font-family:var(--mono);font-size:10.5px;color:var(--dim);flex-wrap:wrap}
.legend s{width:14px;height:2px;display:inline-block;margin-right:5px;vertical-align:3px;text-decoration:none}
.mgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.mgrid div{background:var(--panel2);padding:12px 16px;font-family:var(--mono)}
.mgrid span{display:block;color:var(--dim);font-size:10px}
.mgrid b{font-size:13px;font-weight:500}
.mlevels{padding:16px 22px 20px;display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.mlevels div{border:1px solid var(--line);border-radius:12px;padding:12px 14px;background:var(--panel)}
.mlevels span{display:block;color:var(--dim);font-size:10.5px;font-family:var(--mono)}
.mlevels b{font-family:var(--mono);font-size:16px;font-weight:600}
.mlevels small{display:block;color:var(--muted);font-size:10.5px;margin-top:3px}
.reasons.big{margin:0;padding:0 22px 18px}
.reasons.big i{font-size:11.5px;padding:5px 9px}

/* ---------- footer ---------- */
.foot{margin-top:34px;padding-top:18px;border-top:1px solid var(--line);color:var(--dim);font-size:11.5px;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap}
.foot p{margin:0}
.foot b{color:var(--muted);font-weight:500}

@media (max-width:980px){
  .hero{grid-template-columns:1fr 1fr}
  .intro{grid-column:1/-1}
  .grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:640px){
  .wrap{padding:0 14px 56px}
  .top{padding-top:18px}
  .hero{grid-template-columns:1fr}
  .grid{grid-template-columns:1fr}
  .topmeta{justify-content:flex-start}
  .mgrid{grid-template-columns:repeat(2,1fr)}
  .mlevels{grid-template-columns:1fr}
  .mask{padding:10px}
  .modal{max-height:94vh}
}

[x-cloak]{display:none!important}
