:root{--p: #b242ff;--p-deep: #8a2be2;--p-light: #f0e2ff;--ink: #241a35;--muted: #77688a;--line: #ece1fb;--bg: #f7f4fd;--ok: #12a150;--warn: #d97706;--bad: #dc2626}*{box-sizing:border-box}html,body,#app{height:100%;margin:0}body{font-family:PingFang SC,Microsoft YaHei,-apple-system,sans-serif;background:var(--bg);color:var(--ink);font-size:14px}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit}.shell{display:flex;min-height:100%}.sidebar{width:208px;background:#1f1730;color:#cbbde0;display:flex;flex-direction:column;padding:18px 14px;position:sticky;top:0;height:100vh}.sidebar .brand{display:flex;gap:10px;align-items:center;color:#fff;font-weight:700;padding:6px 8px 18px}.sidebar .badge{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;background:linear-gradient(135deg,#d98bff,#b242ff 60%,#8a2be2);font-size:12px}.sidebar nav{display:flex;flex-direction:column;gap:4px}.sidebar nav a{padding:9px 12px;border-radius:8px;font-size:13px}.sidebar nav a.router-link-active{background:#b242ff38;color:#fff}.sidebar nav a:hover{background:#ffffff0f}.sidebar .foot{margin-top:auto;font-size:12px;color:#8c7da3;padding:10px 12px}.main{flex:1;min-width:0;display:flex;flex-direction:column}.topbar{height:58px;display:flex;align-items:center;justify-content:space-between;padding:0 22px;background:#fff;border-bottom:1px solid var(--line)}.topbar h1{font-size:17px;margin:0}.content{padding:22px}.card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.spread{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.muted{color:var(--muted)}.small{font-size:12px}.btn{border:none;cursor:pointer;padding:8px 14px;border-radius:8px;font-weight:600;background:linear-gradient(135deg,#c972ff,#b242ff 60%,#8a2be2);color:#fff;box-shadow:0 4px 12px #b242ff40}.btn:disabled{opacity:.55;cursor:not-allowed;box-shadow:none}.btn.ghost{background:#fff;color:var(--p-deep);border:1px solid var(--line);box-shadow:none}.btn.danger{background:#fff;color:var(--bad);border:1px solid #f3c6c6;box-shadow:none}.btn.small{padding:5px 10px;font-size:12px}.btn.link{background:none;color:var(--p-deep);box-shadow:none;padding:4px 6px}.input,.select,.textarea{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;outline:none}.input:focus,.select:focus,.textarea:focus{border-color:var(--p);box-shadow:0 0 0 3px #b242ff1f}.label{display:block;font-size:12px;color:var(--muted);margin-bottom:5px}.field{margin-bottom:12px}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.grid3{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}@media(max-width:900px){.grid3{grid-template-columns:1fr 1fr}.grid2{grid-template-columns:1fr}}.stat{background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px}.stat b{display:block;font-size:26px;margin-top:6px}.stat span{color:var(--muted);font-size:13px}.table{width:100%;border-collapse:collapse}.table th,.table td{text-align:left;padding:10px 8px;border-bottom:1px solid var(--line);font-size:13px;vertical-align:top}.table th{color:var(--muted);font-weight:500;font-size:12px}.table tr:hover td{background:#fbf8ff}.mono{font-family:ui-monospace,monospace}.tag{display:inline-flex;padding:2px 9px;border-radius:999px;font-size:12px;background:var(--p-light);color:var(--p-deep);font-weight:600}.tag.ok{background:#e7f8ee;color:var(--ok)}.tag.warn{background:#fff4e5;color:var(--warn)}.tag.bad{background:#fdecec;color:var(--bad)}.alert{padding:9px 12px;border-radius:8px;font-size:13px}.alert.err{background:#fdecec;color:var(--bad)}.alert.ok{background:#e7f8ee;color:var(--ok)}.alert.info{background:#f4eaff;color:var(--p-deep)}.log-panel{background:#1c152b;color:#d5c6ee;border-radius:10px;padding:12px;height:420px;overflow:auto;font-family:ui-monospace,monospace;font-size:12px;line-height:1.6;white-space:pre-wrap}.log-panel .l-success{color:#7ee2a8}.log-panel .l-error{color:#ff8f8f}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#1810268c;display:flex;align-items:center;justify-content:center;padding:24px;z-index:50}.modal{background:#fff;border-radius:16px;width:min(900px,100%);padding:18px;max-height:90vh;display:flex;flex-direction:column;gap:12px}.modal .head{display:flex;justify-content:space-between;align-items:center}.login-page{min-height:100vh;display:grid;place-items:center;background:linear-gradient(160deg,#20182f,#3a2158 60%,#6d28d9)}.login-card{width:360px;background:#fff;border-radius:18px;padding:28px;box-shadow:0 30px 80px #00000059}.login-card h1{margin:0 0 6px;font-size:22px}
