:root{--bg: #f5f7fb;--surface: #ffffff;--surface-soft: #f8fafc;--panel: #ffffff;--panel-solid: #ffffff;--line: #e9eef5;--line-strong: #dbe2ec;--text: #0f172a;--muted: #64748b;--dim: #94a3b8;--brand: #2563eb;--brand-ink: #1d4ed8;--cyan: #0891b2;--violet: #7c3aed;--blue: #2563eb;--green: #16a34a;--amber: #d97706;--red: #dc2626;--radius: 14px;--radius-sm: 10px;--shadow-xs: 0 1px 2px rgba(15, 23, 42, .04);--shadow-sm: 0 1px 3px rgba(15, 23, 42, .06), 0 1px 2px rgba(15, 23, 42, .04);--shadow: 0 10px 30px -18px rgba(15, 23, 42, .28)}*{box-sizing:border-box}html,body,#app{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,system-ui,sans-serif;font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:var(--brand);text-decoration:none}h1,h2,h3,h4{margin:0;font-weight:650;letter-spacing:-.2px;color:var(--text)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#d5dce6;border-radius:99px;border:2px solid var(--bg)}::-webkit-scrollbar-thumb:hover{background:#b8c2d0}.shell{min-height:100%;display:flex;flex-direction:column}.container{width:100%;max-width:1340px;margin:0 auto;padding:0 24px}.topbar{position:sticky;top:0;z-index:30;background:#fff;border-bottom:1px solid var(--line)}.topbar-inner{display:flex;align-items:center;gap:14px;height:62px}.brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:15px;letter-spacing:-.2px;color:var(--text)}.brand svg{display:block}.brand-sub{font-size:10px;color:var(--dim);font-weight:600;letter-spacing:1.6px;text-transform:uppercase}.spacer{flex:1}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-xs)}.panel{padding:20px}.panel-title{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted);letter-spacing:.8px;text-transform:uppercase;font-weight:600;margin-bottom:16px}.panel-title:before{content:"";width:3px;height:12px;border-radius:3px;background:var(--brand)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:36px;padding:0 14px;border-radius:9px;border:1px solid var(--line-strong);background:#fff;color:var(--text);font-size:13px;font-weight:500;font-family:inherit;cursor:pointer;transition:background-color .14s,border-color .14s,color .14s,box-shadow .14s;white-space:nowrap;user-select:none}.btn:hover{background:var(--surface-soft);border-color:#c9d3e0}.btn:active{background:#eef2f8}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}.btn-primary:hover{background:var(--brand-ink);border-color:var(--brand-ink);box-shadow:0 4px 14px -6px #2563eb8c}.btn-primary:active{background:#1e40af}.btn-violet{background:var(--violet);border-color:var(--violet);color:#fff;font-weight:600}.btn-violet:hover{background:#6d28d9;border-color:#6d28d9;box-shadow:0 4px 14px -6px #7c3aed80}.btn-danger{color:var(--red);border-color:#f3c9c9;background:#fff}.btn-danger:hover{background:#fef2f2;border-color:#f0b4b4}.btn-ghost{border-color:transparent;background:transparent}.btn-ghost:hover{background:var(--surface-soft);border-color:var(--line)}.btn-sm{height:30px;padding:0 11px;font-size:12px;border-radius:8px}.btn-lg{height:46px;padding:0 22px;font-size:15px;border-radius:11px}.btn-block{width:100%}.input,.textarea,.select{width:100%;height:38px;padding:0 12px;border-radius:9px;border:1px solid var(--line-strong);background:#fff;color:var(--text);font-size:13px;font-family:inherit;outline:none;transition:border-color .14s,box-shadow .14s}.textarea{height:auto;min-height:96px;padding:10px 12px;line-height:1.6;resize:vertical}.input::placeholder,.textarea::placeholder{color:var(--dim)}.input:focus,.textarea:focus,.select:focus{border-color:var(--brand);box-shadow:0 0 0 3px #2563eb1f}.field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}.field>label{font-size:12.5px;font-weight:500;color:var(--muted)}.field-hint{font-size:11.5px;color:var(--dim)}.row{display:flex;gap:12px;flex-wrap:wrap}.row>*{flex:1;min-width:0}.switch{display:inline-flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;color:var(--muted);user-select:none}.switch input{appearance:none;width:38px;height:22px;border-radius:99px;background:#cbd5e1;position:relative;cursor:pointer;transition:background-color .16s;margin:0;flex:none}.switch input:after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #0f172a40;transition:transform .16s}.switch input:checked{background:var(--brand)}.switch input:checked:after{transform:translate(16px)}.tag{display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 9px;border-radius:999px;font-size:11px;font-weight:500;letter-spacing:.2px;border:1px solid var(--line-strong);color:var(--muted);background:var(--surface-soft);white-space:nowrap}.tag-cyan{color:#0e7490;border-color:#cffafe;background:#ecfeff}.tag-green{color:#15803d;border-color:#d7f5e3;background:#f0fdf4}.tag-amber{color:#b45309;border-color:#fde8c4;background:#fffbeb}.tag-red{color:#b91c1c;border-color:#fbdcdc;background:#fef2f2}.tag-violet{color:#6d28d9;border-color:#e6dcfb;background:#f5f3ff}.tag-gray{color:var(--muted)}.dot{width:8px;height:8px;border-radius:50%;background:var(--dim);flex:none}.dot.online{background:#22c55e;box-shadow:0 0 0 3px #22c55e29}.dot.offline{background:#cbd5e1}.dot.warn{background:#f59e0b;box-shadow:0 0 0 3px #f59e0b29}.bar{position:relative;height:6px;border-radius:99px;background:#eef2f7;overflow:hidden}.bar>i{position:absolute;inset:0 auto 0 0;border-radius:99px;background:var(--brand);transition:width .4s ease}.bar.ok>i{background:#22c55e}.bar.warn>i{background:#f59e0b}.bar.danger>i{background:#ef4444}.table-wrap{overflow-x:auto}table.data{width:100%;border-collapse:collapse;font-size:13px}table.data th{text-align:left;font-weight:500;font-size:11px;letter-spacing:.6px;text-transform:uppercase;color:var(--dim);padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap;background:var(--surface-soft)}table.data td{padding:12px;border-bottom:1px solid var(--line);vertical-align:middle}table.data tbody tr:last-child td{border-bottom:none}table.data tr:hover td{background:#fafcff}.empty{padding:56px 20px;text-align:center;color:var(--dim)}.mono{font-family:JetBrains Mono,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px}.muted{color:var(--muted)}.dim{color:var(--dim)}.nowrap{white-space:nowrap}.flex{display:flex;align-items:center}.gap8{gap:8px}.gap12{gap:12px}.grid{display:grid;gap:16px}.fade-enter-active,.fade-leave-active{transition:opacity .16s ease}.fade-enter-from,.fade-leave-to{opacity:0}.toasts{position:fixed;right:20px;bottom:20px;display:flex;flex-direction:column;gap:10px;z-index:999;pointer-events:none}.toast{min-width:220px;max-width:380px;padding:11px 15px;border-radius:10px;font-size:13px;color:var(--text);background:#fff;border:1px solid var(--line-strong);box-shadow:0 8px 24px -10px #0f172a3d;animation:toastIn .18s ease}.toast.ok{border-color:#bbf7d0;background:#f0fdf4;color:#14532d}.toast.err{border-color:#fecaca;background:#fef2f2;color:#7f1d1d}@keyframes toastIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 720px){.container{padding:0 14px}.topbar-inner{height:56px}.hide-sm{display:none!important}}
