/* 授权后台(和软件同一套蓝色风格)。CSP 不许内联样式,所有样式都在这里。 */
:root{--bg:#eef1f6;--card:#fff;--line:#e2e8f0;--text:#1e293b;--sub:#475569;--muted:#94a3b8;--acc:#2563eb;--acc2:#1d4ed8;--soft:#eff4ff;--ok:#14804a;--okbg:#e9f7ef;--warn:#8a5a12;--warnbg:#fff8eb;--err:#c93c3c;--errbg:#fff5f5}
*{box-sizing:border-box}html,body{margin:0}body{min-height:100vh;background:var(--bg);color:var(--text);font:14px/1.5 "Microsoft YaHei","PingFang SC",system-ui,sans-serif}
button,input,select,textarea{font:inherit;color:inherit}
.hidden{display:none!important}
/* 登录 / 设置 */
.gate{display:grid;place-items:center;min-height:100vh;padding:24px 16px;background:linear-gradient(150deg,#0d1b2e,#173a67 60%,#1769e0)}
.gate-card{width:min(400px,100%);padding:28px;border-radius:16px;background:#fff;box-shadow:0 30px 80px -20px #0008}
.gate-card h1{margin:0;font-size:20px}.gate-card p{margin:4px 0 18px;color:var(--muted);font-size:13px}
.field{display:grid;gap:6px;margin-bottom:12px}.field span{color:var(--sub);font-size:13px;font-weight:700}.field small{color:var(--muted);font-size:12px}
.in{width:100%;height:40px;padding:0 12px;border:1px solid var(--line);border-radius:10px;background:#fff;outline:none}.in:focus{border-color:var(--acc);box-shadow:0 0 0 3px var(--soft)}
.btn{height:36px;padding:0 14px;border:1px solid var(--line);border-radius:9px;background:#fff;font-weight:700;cursor:pointer;white-space:nowrap}.btn:hover{border-color:#cbd5e1;background:#f8fafc}
a.btn{display:inline-flex;align-items:center;text-decoration:none;color:var(--text)}
.btn.pri{border-color:var(--acc);color:#fff;background:var(--acc)}.btn.pri:hover{background:var(--acc2)}.btn.danger{color:var(--err)}.btn.danger:hover{border-color:#f5c2c4;background:var(--errbg)}
.btn.sm{height:28px;padding:0 9px;font-size:12px}.btn.block{width:100%;height:42px;margin-top:6px}.btn:disabled{opacity:.5;cursor:not-allowed}
.msg{margin-top:10px;padding:8px 12px;border-radius:9px;font-size:13px}.msg.err{color:var(--err);background:var(--errbg);border:1px solid #f5c2c4}.msg.ok{color:var(--ok);background:var(--okbg);border:1px solid #bfe5cf}
/* 主界面 */
.top{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:14px;padding:10px 20px;background:#0d1b2e;color:#fff}
.top b{font-size:16px}.top .grow{flex:1}.top select{height:32px;padding:0 8px;border:0;border-radius:8px;color:var(--text);background:#fff}
.top .who{color:#c9d8f2;font-size:13px}.top .btn{height:30px;border-color:#ffffff33;color:#fff;background:transparent}.top .btn:hover{background:#ffffff1a}
.tabs{display:flex;gap:4px;padding:0 20px;background:#fff;border-bottom:1px solid var(--line);overflow-x:auto}
.tabs button{padding:12px 14px;border:0;border-bottom:2px solid transparent;background:none;color:var(--sub);font-weight:700;cursor:pointer;white-space:nowrap}.tabs button.on{border-color:var(--acc);color:var(--acc)}
.page{width:min(1280px,100%);margin:0 auto;padding:20px}
.stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:12px}
.stat{padding:16px;border:1px solid var(--line);border-radius:12px;background:#fff}.stat small{display:block;color:var(--muted)}.stat b{font-size:28px}
.panel{margin-top:16px;padding:16px;border:1px solid var(--line);border-radius:12px;background:#fff}.panel h3{margin:0 0 12px;font-size:15px}
.bar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px;margin-bottom:12px}.bar .field{margin:0}.bar .in{height:36px;min-width:120px}.bar .grow{flex:1}
.chips{display:flex;flex-wrap:wrap;gap:6px}.chips button{height:30px;padding:0 12px;border:1px solid var(--line);border-radius:99px;background:#fff;font-size:13px;font-weight:700;cursor:pointer}.chips button.on{border-color:var(--acc);color:#fff;background:var(--acc)}
.tbl{width:100%;border-collapse:collapse;font-size:13px}.tbl th{padding:9px 10px;border-bottom:1px solid var(--line);color:var(--muted);font-weight:700;text-align:left;white-space:nowrap}
.tbl td{padding:9px 10px;border-bottom:1px solid #f1f5f9;vertical-align:middle}.tbl tr:hover td{background:#fafbfe}.wrap{overflow-x:auto}
.mono{font-family:Consolas,"Courier New",monospace;letter-spacing:.5px}.muted{color:var(--muted)}.nowrap{white-space:nowrap}
.tag{display:inline-block;padding:1px 8px;border-radius:6px;font-size:12px;font-weight:700;white-space:nowrap}.tag.ok{color:var(--ok);background:var(--okbg)}.tag.warn{color:var(--warn);background:var(--warnbg)}.tag.err{color:var(--err);background:var(--errbg)}.tag.gray{color:var(--sub);background:#f1f5f9}.tag.blue{color:var(--acc);background:var(--soft)}
.dot{display:inline-block;width:8px;height:8px;margin-right:6px;border-radius:50%;background:#cbd5e1}.dot.on{background:#22c55e}
.acts{display:flex;flex-wrap:wrap;gap:4px}.pager{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-top:12px;color:var(--muted);font-size:13px}
.empty{padding:28px;color:var(--muted);text-align:center}
/* 弹窗 */
.mask{position:fixed;inset:0;z-index:20;display:grid;place-items:center;padding:16px;background:#0b112080}
.dialog{width:min(520px,100%);max-height:calc(100vh - 32px);overflow:auto;padding:22px;border-radius:14px;background:#fff}.dialog h3{margin:0 0 6px}.dialog p{margin:0 0 14px;color:var(--sub)}
.dialog .foot{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}
.codes{width:100%;min-height:180px;padding:10px;border:1px solid var(--line);border-radius:10px;background:#f8fafc;font:14px/1.7 Consolas,monospace;resize:vertical}
.toast{position:fixed;right:20px;bottom:20px;z-index:30;max-width:360px;padding:10px 14px;border-radius:10px;color:#fff;background:#1e293b;box-shadow:0 12px 30px #0004}.toast.err{background:var(--err)}
.key{display:block;max-width:420px;overflow:hidden;text-overflow:ellipsis}
@media(max-width:640px){.top{flex-wrap:wrap}.page{padding:14px}}
