:root{
  --p:#6b3df0; --pk:#ff4d8d; --bg:#f4f5fa; --side:#1f2233; --side-h:#2c3049;
  --tx:#2b2f3a; --sub:#8a90a2; --bd:#e6e8f0; --card:#fff;
  --green:#12b886; --red:#f5222d; --orange:#ff922b; --blue:#2f7bff;
}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:-apple-system,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  color:var(--tx);background:var(--bg);-webkit-font-smoothing:antialiased}
.hidden{display:none!important}
button{font-family:inherit;cursor:pointer;border:none}
input,select{font-family:inherit}

/* 登录 */
#loginView{min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#1f2233,#3a2b6b 60%,#6b3df0)}
.login-card{background:#fff;width:380px;border-radius:16px;padding:38px 34px;box-shadow:0 20px 60px rgba(20,10,50,.4)}
.login-logo{font-size:24px;font-weight:800;background:linear-gradient(90deg,var(--p),var(--pk));
  -webkit-background-clip:text;background-clip:text;color:transparent}
.login-sub{color:var(--sub);font-size:13px;margin:6px 0 24px}
.field{margin-bottom:15px}
.field label{display:block;font-size:13px;color:var(--sub);margin-bottom:6px}
.field input{width:100%;height:42px;border:1px solid var(--bd);border-radius:10px;padding:0 13px;font-size:14px;outline:none}
.field input:focus{border-color:var(--p)}
.btn{width:100%;height:44px;border-radius:10px;color:#fff;font-weight:600;font-size:15px;
  background:linear-gradient(90deg,var(--p),var(--pk))}
.err{color:var(--red);font-size:12px;min-height:16px;margin-bottom:8px}
.foot{text-align:center;color:var(--sub);font-size:12px;margin-top:16px}

/* 顶栏 */
.topbar{height:58px;background:#fff;border-bottom:1px solid var(--bd);display:flex;align-items:center;
  padding:0 22px;gap:20px;position:sticky;top:0;z-index:20}
.brand{font-size:18px;font-weight:800;background:linear-gradient(90deg,var(--p),var(--pk));
  -webkit-background-clip:text;background-clip:text;color:transparent}
.arch{flex:1;font-size:12px;color:var(--sub);letter-spacing:.3px}
.right{display:flex;align-items:center;gap:12px}
.keytag{font-size:11px;color:var(--p);background:#f0ecfe;padding:4px 10px;border-radius:8px;font-family:monospace}
.logout{font-size:12px;color:var(--sub);border:1px solid var(--bd);padding:6px 12px;border-radius:8px;background:#fff}

/* 布局 */
.wrap{display:flex;min-height:calc(100vh - 58px)}
.side{width:200px;background:var(--side);padding:14px 0;flex-shrink:0}
.nav-item{padding:11px 22px;color:#c6cad8;font-size:14px;cursor:pointer;transition:.15s}
.nav-item:hover{background:var(--side-h);color:#fff}
.nav-item.active{background:linear-gradient(90deg,rgba(107,61,240,.4),transparent);color:#fff;
  border-left:3px solid var(--p);padding-left:19px;font-weight:600}
.main{flex:1;padding:22px 26px;overflow:auto}

/* 通用 */
h2.title{font-size:20px;font-weight:800;margin-bottom:4px}
.desc{font-size:13px;color:var(--sub);margin-bottom:18px}
.panel{background:#fff;border:1px solid var(--bd);border-radius:12px;padding:18px;margin-bottom:16px}
.panel h3{font-size:15px;margin-bottom:14px}
.row{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end}
.inp{display:flex;flex-direction:column;gap:5px}
.inp label{font-size:12px;color:var(--sub)}
.inp input,.inp select{height:38px;border:1px solid var(--bd);border-radius:9px;padding:0 12px;font-size:13px;outline:none;min-width:150px}
.btn-sm{height:38px;padding:0 18px;border-radius:9px;color:#fff;font-weight:600;font-size:13px;
  background:linear-gradient(90deg,var(--p),var(--pk))}
.btn-line{height:32px;padding:0 12px;border-radius:8px;font-size:12px;background:#f2f3f8;color:var(--tx)}
.btn-line.danger{background:#fdecec;color:var(--red)}
.btn-line.ok{background:#eafaf4;color:var(--green)}

/* 表格 */
table{width:100%;border-collapse:collapse;font-size:13px}
th{text-align:left;color:var(--sub);font-weight:600;padding:10px 12px;background:#fafbfd;border-bottom:1px solid var(--bd)}
td{padding:10px 12px;border-bottom:1px solid var(--bd)}
tr:hover td{background:#fafaff}
.badge{font-size:11px;padding:2px 9px;border-radius:12px;font-weight:600}
.b-on{background:#eafaf4;color:var(--green)} .b-off{background:#f2f3f8;color:var(--sub)}
.b-busy{background:#fff4e6;color:var(--orange)} .b-idle{background:#eef6ff;color:var(--blue)}
.b-warn{background:#fff7ed;color:var(--orange)}
.b-lv{background:#f3f0ff;color:#6b3df0}
.muted{color:var(--sub)}
/* 账号池拖拽排序 */
.drag-handle{cursor:grab;color:#c9ccd4;text-align:center;font-size:15px;user-select:none}
.drag-handle:active{cursor:grabbing}
tr.dragging{opacity:.45;background:#f8f7fe}
tbody tr[draggable="true"]:hover .drag-handle{color:#6b3df0}
td small{display:block;font-size:11px;color:var(--sub);margin-top:3px}
.b-in{background:#eafaf4;color:var(--green)} .b-out{background:#fdecec;color:var(--red)}
.mono{font-family:monospace;font-size:12px}
.src-live{color:var(--green);font-weight:600}
.src-mock{color:var(--orange);font-weight:600}

/* 统计卡 */
.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}
.mcard{background:#fff;border:1px solid var(--bd);border-radius:12px;padding:14px 16px}
.mcard .k{font-size:12px;color:var(--sub)} .mcard .v{font-size:22px;font-weight:800;margin-top:5px}

/* 结果 / 代码 */
pre{background:#1f2233;color:#c6f0d8;padding:14px;border-radius:10px;font-size:12px;overflow:auto;line-height:1.5;max-height:340px}
.note{font-size:12px;color:var(--sub);margin-top:8px;line-height:1.7}
.tag-mock{background:#fff4e6;color:var(--orange);font-size:11px;padding:2px 9px;border-radius:8px;font-weight:600}
.tag-live{background:#eafaf4;color:var(--green);font-size:11px;padding:2px 9px;border-radius:8px;font-weight:600}

.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%);background:#1f2233;color:#fff;
  padding:11px 20px;border-radius:10px;font-size:13px;z-index:60;box-shadow:0 8px 24px rgba(0,0,0,.25)}
.arch-flow{line-height:2;font-size:13px}
.arch-flow code{background:#f0ecfe;color:var(--p);padding:2px 7px;border-radius:6px;font-size:12px}
