/* app.css */
*,*::before,*::after{box-sizing:border-box}
:root{
  --bg:#0f1117; --bg2:#161922; --bg3:#1d2130; --line:#282d3d;
  --tx:#e6e9f2; --tx2:#9aa2b8; --tx3:#6b7389;
  --acc:#d9a94a; --acc2:#5b9dff; --ok:#4ec9a0; --bad:#ff6b6b;
  --radius:10px; --mono:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
}
body.light{
  --bg:#f5f6f9; --bg2:#fff; --bg3:#eef0f5; --line:#dde0e8;
  --tx:#1a1d26; --tx2:#5b6479; --tx3:#8a93a8;
  --acc:#9c7420; --acc2:#2f6fd0;
}
html,body{margin:0;height:100%}
body{background:var(--bg);color:var(--tx);font:14px/1.55 -apple-system,"Segoe UI",system-ui,"PingFang SC","Microsoft YaHei",sans-serif;-webkit-font-smoothing:antialiased}
button{font:inherit;color:inherit;background:none;border:none;cursor:pointer}
input{font:inherit;color:inherit}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:var(--line);border-radius:6px}
::-webkit-scrollbar-thumb:hover{background:var(--tx3)}

.app{display:flex;height:100vh;overflow:hidden}
.sidebar{width:212px;flex:0 0 212px;background:var(--bg2);border-right:1px solid var(--line);display:flex;flex-direction:column;padding:18px 12px}
.brand{display:flex;align-items:center;gap:9px;padding:4px 8px 16px}
.brand .logo{width:30px;height:30px;border-radius:8px;background:linear-gradient(135deg,var(--acc),#8a6420);display:grid;place-items:center;font-weight:700;font-size:13px;color:#1a1400}
.brand b{font-size:15px;letter-spacing:.3px}
.brand span{display:block;font-size:11px;color:var(--tx3);font-weight:400;letter-spacing:.2px}
.nav{display:flex;flex-direction:column;gap:2px}
.nav button{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px 11px;border-radius:8px;color:var(--tx2);text-align:left;transition:.13s}
.nav button:hover{background:var(--bg3);color:var(--tx)}
.nav button.on{background:var(--bg3);color:var(--tx);box-shadow:inset 2px 0 0 var(--acc)}
.nav .n{font-size:11px;color:var(--tx3);font-variant-numeric:tabular-nums}
.side-foot{margin-top:auto;padding:10px 8px 0;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:8px}
.side-foot button{font-size:12px;color:var(--tx2);padding:6px 8px;border-radius:7px;text-align:left}
.side-foot button:hover{background:var(--bg3);color:var(--tx)}

.main{flex:1;display:flex;flex-direction:column;min-width:0;overflow:hidden}
.topbar{padding:16px 22px 12px;border-bottom:1px solid var(--line);background:var(--bg2)}
.topbar h1{margin:0 0 3px;font-size:17px;font-weight:600;letter-spacing:.2px}
.topbar p{margin:0;font-size:12px;color:var(--tx3)}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px;align-items:center}
.chip{padding:5px 11px;border-radius:999px;border:1px solid var(--line);font-size:12px;color:var(--tx2);transition:.13s;white-space:nowrap}
.chip:hover{border-color:var(--tx3);color:var(--tx)}
.chip.on{background:var(--acc);border-color:var(--acc);color:#1a1400;font-weight:600}
.chip .c{opacity:.65;margin-left:5px;font-variant-numeric:tabular-nums}
.chip-mini{font-size:11px;padding:4px 9px;color:var(--tx3)}
.body{flex:1;overflow:auto;padding:0}
.pane{display:none;height:100%;flex-direction:column}
.pane.on{display:flex}
.toolbar{display:flex;align-items:center;gap:10px;padding:11px 22px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.toolbar .sp{flex:1}
.stat{font-size:12px;color:var(--tx2);font-variant-numeric:tabular-nums}
.stat b{color:var(--acc);font-weight:600}
.btn{padding:6px 12px;border-radius:7px;border:1px solid var(--line);font-size:12px;color:var(--tx2);transition:.13s}
.btn:hover{border-color:var(--tx3);color:var(--tx);background:var(--bg3)}
.btn.primary{background:var(--acc);border-color:var(--acc);color:#1a1400;font-weight:600}
.btn.primary:hover{filter:brightness(1.08);background:var(--acc)}

.scroller{flex:1;overflow-y:auto;position:relative}
.vspace{position:relative;width:100%}
.row{position:absolute;left:0;right:0;height:56px;display:flex;align-items:center;gap:14px;padding:0 22px;border-bottom:1px solid var(--line)}
.row:hover{background:var(--bg2)}
.row .idx{width:62px;flex:0 0 62px;font-size:11px;color:var(--tx3);font-variant-numeric:tabular-nums}
.num{font-family:var(--mono);font-size:15px;letter-spacing:.7px;white-space:nowrap;cursor:pointer;flex:0 0 auto}
.num .p{color:var(--tx3)}
.num .r{color:var(--tx2)}
.num .s{color:var(--tx);font-weight:600}
.row:hover .num .s{color:var(--acc)}
.reg{font-size:11px;padding:2px 8px;border-radius:5px;background:var(--bg3);color:var(--tx2);flex:0 0 auto}
.tags{display:flex;gap:5px;flex-wrap:wrap;flex:1;min-width:0;overflow:hidden}
.tag{font-size:10.5px;padding:2px 7px;border-radius:5px;background:rgba(217,169,74,.13);color:var(--acc);white-space:nowrap}
.tag.b{background:rgba(91,157,255,.13);color:var(--acc2)}
.sc{font-size:12px;color:var(--ok);font-variant-numeric:tabular-nums;flex:0 0 auto;cursor:help}
.star{flex:0 0 auto;width:30px;height:30px;border-radius:7px;display:grid;place-items:center;font-size:15px;color:var(--tx3);transition:.13s}
.star:hover{background:var(--bg3);color:var(--acc)}
.star.on{color:var(--acc)}
.empty{padding:60px 22px;text-align:center;color:var(--tx3);font-size:13px}
.empty b{display:block;color:var(--tx2);font-size:14px;margin-bottom:6px}
/* 规则视图 */
.rwrap{padding:18px 22px 40px;overflow-y:auto;flex:1}
.rgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(258px,1fr));gap:12px}
.rcard{background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius);padding:14px 15px;cursor:pointer;transition:.13s}
.rcard:hover{border-color:var(--acc);transform:translateY(-1px)}
.rcard.on{border-color:var(--acc);background:var(--bg3)}
.rcard h3{margin:0 0 3px;font-size:14px;font-weight:600;display:flex;align-items:center;gap:8px}
.rcard .pat{font-family:var(--mono);font-size:11.5px;color:var(--acc);letter-spacing:.5px}
.rcard p{margin:7px 0 10px;font-size:11.5px;color:var(--tx3);line-height:1.5;min-height:34px}
.rcard .cnt{font-size:19px;font-weight:600;font-variant-numeric:tabular-nums}
.rcard .cnt small{font-size:11px;color:var(--tx3);font-weight:400;margin-left:4px}
.rcard.dead{opacity:.62;cursor:default}
.rcard.dead:hover{border-color:var(--line);transform:none}
.rcard.dead .cnt{color:var(--bad)}
.sec{margin:26px 0 12px;font-size:12px;color:var(--tx3);text-transform:uppercase;letter-spacing:1.1px;display:flex;align-items:center;gap:10px}
.sec::after{content:"";flex:1;height:1px;background:var(--line)}

/* 盲搜 */
.sbox{padding:16px 22px;border-bottom:1px solid var(--line);background:var(--bg2)}
.sinput{display:flex;gap:9px;align-items:stretch}
.sinput input{flex:1;background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:11px 14px;font-family:var(--mono);font-size:15px;letter-spacing:1.2px;outline:none;transition:.13s}
.sinput input:focus{border-color:var(--acc)}
.sinput input::placeholder{color:var(--tx3);letter-spacing:.5px}
.sopts{display:flex;gap:16px;flex-wrap:wrap;margin-top:11px;align-items:center;font-size:12px;color:var(--tx2)}
.sopts label{display:flex;align-items:center;gap:6px;cursor:pointer}
.sopts input[type=checkbox],.sopts input[type=radio]{accent-color:var(--acc);cursor:pointer;margin:0}
.sopts .g{display:flex;gap:12px;align-items:center;padding-right:16px;border-right:1px solid var(--line)}
.sopts .g:last-child{border:none}
.smsg{margin-top:10px;font-size:12px;padding:8px 12px;border-radius:7px;display:none}
.smsg.on{display:block}
.smsg.err{background:rgba(255,107,107,.1);color:var(--bad)}
.smsg.info{background:var(--bg3);color:var(--tx2)}
.exs{padding:14px 22px;border-bottom:1px solid var(--line)}
.exs h4{margin:0 0 9px;font-size:11px;color:var(--tx3);text-transform:uppercase;letter-spacing:1px}
.extable{display:grid;grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:7px}
.ex{display:flex;flex-direction:column;gap:2px;padding:8px 11px;border:1px solid var(--line);border-radius:8px;text-align:left;transition:.13s}
.ex:hover{border-color:var(--acc);background:var(--bg2)}
.ex code{font-family:var(--mono);font-size:13px;color:var(--acc);letter-spacing:.8px}
.ex span{font-size:11px;color:var(--tx3);line-height:1.45}
/* 遮罩 / 进度 */
.boot{position:fixed;inset:0;background:var(--bg);display:grid;place-items:center;z-index:99;transition:opacity .3s}
.boot.gone{opacity:0;pointer-events:none}
.boot .in{width:330px;text-align:center}
.boot h2{margin:0 0 6px;font-size:16px;font-weight:600}
.boot p{margin:0 0 18px;font-size:12px;color:var(--tx3)}
.bar{height:5px;background:var(--bg3);border-radius:3px;overflow:hidden}
.bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--acc),#f0c96a);transition:width .18s}
.boot .pct{margin-top:9px;font-size:11px;color:var(--tx3);font-variant-numeric:tabular-nums}

.toast{position:fixed;bottom:26px;left:50%;transform:translate(-50%,14px);background:var(--bg3);border:1px solid var(--line);color:var(--tx);padding:9px 18px;border-radius:9px;font-size:13px;opacity:0;pointer-events:none;transition:.2s;z-index:120;box-shadow:0 8px 26px rgba(0,0,0,.34)}
.toast.on{opacity:1;transform:translate(-50%,0)}

/* 详情弹层 */
.modal{position:fixed;inset:0;background:rgba(0,0,0,.55);display:none;place-items:center;z-index:110}
.modal.on{display:grid}
.mbox{background:var(--bg2);border:1px solid var(--line);border-radius:14px;padding:22px;width:400px;max-width:92vw;max-height:80vh;overflow:auto}
.mbox h3{margin:0 0 4px;font-size:15px}
.mbox .mnum{font-family:var(--mono);font-size:17px;letter-spacing:1px;margin:10px 0 16px;color:var(--acc)}
.dl{display:flex;justify-content:space-between;font-size:12.5px;padding:6px 0;border-bottom:1px solid var(--line)}
.dl span{color:var(--tx2)}
.dl b{font-variant-numeric:tabular-nums}
.dl b.pos{color:var(--ok)}
.dl b.neg{color:var(--bad)}
.dl.tot{border:none;margin-top:8px;font-size:14px;font-weight:600}

@media(max-width:900px){
  .sidebar{width:60px;flex:0 0 60px;padding:14px 8px}
  .brand b,.brand span,.nav .n,.side-foot button span{display:none}
  .nav button{justify-content:center;padding:10px 0}
  .row{gap:10px;padding:0 12px}
  .row .idx,.sc{display:none}
  .topbar,.toolbar,.sbox,.exs,.rwrap{padding-left:14px;padding-right:14px}
}
