.admin-root{min-height:100vh;background:var(--bg)}.admin-topbar{display:flex;align-items:center;gap:14px;padding:10px 22px;background:var(--panel);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}.admin-topbar .admin-env{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--ink-muted);padding:2px 8px;border:1px solid var(--line-strong);border-radius:6px}.admin-body{display:grid;grid-template-columns:248px minmax(0,1fr);min-height:calc(100vh - 49px)}.admin-body main{padding:22px 26px 60px;min-width:0}.admin-error{border:1px solid var(--danger-zone-line);background:var(--danger-soft);border-radius:12px;padding:12px 14px;margin-bottom:14px}.admin-error-head{display:flex;align-items:center;gap:10px;margin-bottom:6px;color:var(--danger-ink)}.admin-error p{margin:4px 0}.admin-kv{margin:0;display:grid;gap:2px}.admin-kv-row{display:grid;grid-template-columns:minmax(90px,160px) minmax(0,1fr);gap:8px;font-size:12.5px;padding:2px 0;border-bottom:1px dashed var(--line)}.admin-kv-row:last-child{border-bottom:0}.admin-kv-row dt{color:var(--ink-muted);margin:0}.admin-kv-row dd{margin:0;word-break:break-all;color:var(--ink-2)}.admin-metric{padding:14px 16px}.admin-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:12px;margin-bottom:6px}.admin-body .sidebar{overflow-y:auto}.admin-body .sidebar-foot{flex-direction:column;align-items:stretch}.admin-body .acct-who{display:flex;align-items:center;gap:8px;min-width:0}.admin-body .acct-name,.admin-body .acct-mail{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin-meta-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.admin-meta-row>*{flex:0 0 auto;white-space:nowrap}.admin-body .log-list li{flex-direction:column;align-items:flex-start;gap:4px;padding:9px 0;border-bottom:1px solid var(--line)}.admin-body .log-list li:before{position:absolute;margin-left:-14px;margin-top:4px}.admin-body .log-list{position:relative;padding-left:14px}.admin-filters{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px;margin-bottom:14px}.admin-filters .field{margin-bottom:0;min-width:148px}.admin-payload{max-width:460px;max-height:220px;overflow:auto;margin:0;padding:10px 12px;border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--chip-bg);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;white-space:pre-wrap;word-break:break-all}.admin-login-hint{margin-top:12px;font-size:12.5px;color:var(--ink-muted)}.admin-table-clickable tbody tr{cursor:pointer}.admin-inline-note{font-size:12.5px;color:var(--ink-muted)}@media(max-width:900px){.admin-body{grid-template-columns:1fr}}.nav-section+.nav-section{margin-top:14px}.nav-group{padding:0 12px 5px;font-size:11.5px;letter-spacing:.06em;color:var(--ink-muted)}:root{--bg: #f6f7f8;--panel: #ffffff;--line: #ececec;--line-strong: #e0e2e5;--ink: #17181a;--ink-2: #4b5058;--ink-3: #8a8f98;--accent: #12b886;--accent-soft: #e8f8f2;--warn-soft: #fff4e0;--danger: #e03131;--danger-soft: #fdecec;--radius: 16px;--radius-sm: 10px;--shadow: 0 1px 2px rgba(16, 24, 40, .04);--shadow-lg: 0 18px 48px rgba(16, 24, 40, .16);--font: "Inter", "Segoe UI", system-ui, -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif}:root{--solid: #111;--solid-ink: #fff;--on-accent: #fff;--ink-muted: #5f6672;--chip-bg: #f4f5f6;--hover-bg: #f7f8f9;--row-hover: #fcfcfd;--track: #eceff1;--track-hover: #d7dde1;--switch-off: #dfe1e4;--switch-knob: #fff;--knob-shadow: 0 1px 3px rgba(16, 24, 40, .2);--mask: rgba(17, 18, 20, .42);--ok-ink: #0b7a5b;--warn-ink: #a35a00;--danger-ink: #a52222;--accent-ink: #0b6b51;--danger-btn-line: #f4c7c7;--danger-zone-line: #f4d7d7;--accent-grad-h: linear-gradient(90deg, #12b886, #0b8f6a);--accent-grad-v: linear-gradient(180deg, #12b886, #0b8f6a);--brand-grad: linear-gradient(135deg, #0b7a5b, #0a6b50)}:root[data-theme=dark]{color-scheme:dark;--bg: #0e0f11;--panel: #16181b;--line: #24272c;--line-strong: #34383e;--ink: #f2f3f5;--ink-2: #b9bfc7;--ink-3: #8b929c;--ink-muted: var(--ink-3);--accent: #21c99a;--accent-soft: rgba(33, 201, 154, .14);--warn-soft: rgba(240, 140, 0, .18);--danger: #ff6b6b;--danger-soft: rgba(224, 49, 49, .18);--shadow: 0 1px 2px rgba(0, 0, 0, .5);--shadow-lg: 0 18px 48px rgba(0, 0, 0, .62);--solid: #f2f3f5;--solid-ink: #16181b;--chip-bg: #1e2125;--hover-bg: #1d2024;--row-hover: #1b1e22;--track: #2a2e33;--track-hover: #363b42;--switch-off: #3a3f46;--switch-knob: #f2f3f5;--knob-shadow: 0 1px 3px rgba(0, 0, 0, .5);--mask: rgba(0, 0, 0, .6);--ok-ink: #4fd1a5;--warn-ink: #ffc078;--danger-ink: #ff8787;--accent-ink: #6fe0b6;--danger-btn-line: rgba(255, 107, 107, .36);--danger-zone-line: rgba(255, 107, 107, .28);--accent-grad-h: linear-gradient(90deg, #21c99a, #12a37b);--accent-grad-v: linear-gradient(180deg, #21c99a, #12a37b)}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font);font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font-family:inherit}.app{display:flex;min-height:100%}.sidebar{width:248px;flex:0 0 248px;position:sticky;top:0;height:100vh;background:var(--panel);border-right:1px solid var(--line);padding:18px 14px;display:flex;flex-direction:column}.brand{display:flex;align-items:center;gap:10px;padding:4px 6px 14px}.brand-mark{width:30px;height:30px;border-radius:9px;background:var(--brand-grad);color:var(--on-accent);display:grid;place-items:center;font-weight:700;font-size:15px;letter-spacing:-.5px}.brand-name{font-weight:650;letter-spacing:-.2px}.brand-sub{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-muted)}.brand-tag{border:1px solid var(--line-strong);border-radius:999px;padding:0 7px;font-size:11px;color:var(--ink-2);background:var(--chip-bg)}.nav{margin-top:22px;display:flex;flex-direction:column;gap:3px}.nav-item{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:var(--radius-sm);color:var(--ink-2);font-size:13.5px;transition:background .12s ease,color .12s ease}.nav-item:hover{background:var(--hover-bg);color:var(--ink)}.nav-item.active{background:var(--chip-bg);color:var(--ink);font-weight:600}.sidebar-foot{margin-top:auto;border-top:1px solid var(--line);padding-top:14px;display:flex;align-items:center;gap:10px}.avatar{width:32px;height:32px;border-radius:50%;background:var(--solid);color:var(--solid-ink);display:grid;place-items:center;font-size:12.5px;font-weight:600;flex:0 0 32px}.main{flex:1;min-width:0;padding:30px 44px 72px}.page-head{text-align:center;margin:14px auto 30px;max-width:720px}.page-title{font-size:40px;line-height:1.15;font-weight:700;letter-spacing:-1px;margin:0}.page-sub{margin:10px 0 0;color:var(--ink-muted);font-size:15px}.page-head.left{text-align:left;margin-left:0}.page-head.left .page-title{font-size:26px;letter-spacing:-.5px}.section-title{font-size:20px;font-weight:700;letter-spacing:-.3px;margin:34px 0 14px}.section-title.row{display:flex;align-items:center;justify-content:space-between;gap:12px}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px}.card.tight{padding:14px 16px}.card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}.card-title{font-size:15px;font-weight:650;margin:0}.card-desc{margin:4px 0 0;color:var(--ink-muted);font-size:12.5px}.grid{display:grid;gap:14px}.grid.c2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid.c3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.c4{grid-template-columns:repeat(4,minmax(0,1fr))}.row{display:flex;align-items:center;gap:10px}.row.between{justify-content:space-between}.row.wrap{flex-wrap:wrap}.spacer{flex:1}.btn{height:36px;padding:0 15px;border-radius:var(--radius-sm);font-size:13.5px;font-weight:550;display:inline-flex;align-items:center;justify-content:center;gap:7px;cursor:pointer;border:1px solid transparent;background:var(--panel);color:var(--ink);transition:filter .12s ease,background .12s ease;white-space:nowrap}.btn:hover{filter:brightness(.97)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--solid);color:var(--solid-ink)}.btn-ghost{border-color:var(--line-strong);color:var(--ink-2)}.btn-soft{background:var(--chip-bg);color:var(--ink)}.btn-danger{background:var(--panel);border-color:var(--danger-btn-line);color:var(--danger)}.btn-sm{height:30px;padding:0 11px;font-size:12.5px;border-radius:8px}.link-btn{background:none;border:none;padding:0;color:var(--ink-2);font-size:13px;cursor:pointer;text-decoration:underline;text-underline-offset:3px}.link-btn:hover{color:var(--ink)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.badge{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:999px;font-size:11.5px;font-weight:600;border:1px solid transparent}.badge.ok{background:var(--accent-soft);color:var(--ok-ink)}.badge.wait{background:var(--warn-soft);color:var(--warn-ink)}.badge.off{background:var(--chip-bg);color:var(--ink-muted)}.badge.bad{background:var(--danger-soft);color:var(--danger-ink)}.badge.line{background:var(--panel);border-color:var(--line-strong);color:var(--ink-2);font-weight:500}.chip{display:inline-flex;align-items:center;padding:1px 8px;border-radius:6px;background:var(--chip-bg);color:var(--ink-2);font-size:11.5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px}.muted{color:var(--ink-muted)}.small{font-size:12.5px}.stat-label{color:var(--ink-muted);font-size:12.5px}.stat-value{font-size:26px;font-weight:700;letter-spacing:-.6px;margin-top:6px}.stat-delta{font-size:12px;margin-top:4px}.trend-up{color:var(--ok-ink)}.trend-down{color:var(--danger-ink)}.table-wrap{overflow-x:auto}table.table{width:100%;border-collapse:collapse;font-size:13px}.table th{text-align:left;font-weight:550;color:var(--ink-muted);font-size:12.5px;padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap}.table td{padding:12px;border-bottom:1px solid var(--line);vertical-align:middle}.table tbody tr:last-child td{border-bottom:none}.table tbody tr:hover td{background:var(--row-hover)}.empty{padding:34px 12px;text-align:center;color:var(--ink-muted);font-size:13px}.progress{height:8px;border-radius:999px;background:var(--track);overflow:hidden}.progress>span{display:block;height:100%;border-radius:999px;background:var(--accent-grad-h)}.bars{display:flex;align-items:flex-end;gap:6px;height:214px;padding-top:8px}.bar-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;height:100%;justify-content:flex-end}.bar{width:100%;border-radius:6px 6px 3px 3px;background:var(--track);min-height:3px;transition:background .12s ease}.bar-col:hover .bar{background:var(--track-hover)}.bar.hot{background:var(--accent-grad-v)}.bar-label{font-size:10.5px;color:var(--ink-muted);white-space:nowrap}.switch{width:40px;height:23px;border-radius:999px;background:var(--switch-off);border:none;padding:0;cursor:pointer;position:relative;transition:background .15s ease;flex:0 0 40px}.switch:after{content:"";position:absolute;top:2px;left:2px;width:19px;height:19px;border-radius:50%;background:var(--switch-knob);box-shadow:var(--knob-shadow);transition:transform .15s ease}.switch.on{background:var(--solid)}.switch.on:after{transform:translate(17px)}.field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}.field>label{font-size:12.5px;color:var(--ink-2);font-weight:550}.input,.select,textarea.input{height:38px;border-radius:var(--radius-sm);border:1px solid var(--line-strong);background:var(--panel);padding:0 12px;font-size:13.5px;font-family:inherit;color:var(--ink);outline:none;width:100%}textarea.input{height:auto;padding:10px 12px;resize:vertical}.input:focus,.select:focus{border-color:var(--solid)}.check{display:flex;align-items:center;gap:8px;font-size:13px;padding:7px 10px;border:1px solid var(--line);border-radius:8px;cursor:pointer;background:var(--panel)}.check.on{border-color:var(--solid);background:var(--chip-bg)}.hint{font-size:12px;color:var(--ink-muted)}.modal-mask{position:fixed;inset:0;background:var(--mask);display:grid;place-items:center;padding:24px;z-index:40}.modal{width:min(560px,100%);background:var(--panel);border-radius:18px;box-shadow:var(--shadow-lg);padding:22px;max-height:88vh;overflow:auto}.modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:16px}.modal-head h3{margin:0;font-size:17px;letter-spacing:-.2px}.icon-btn{border:1px solid var(--line);background:var(--panel);width:36px;height:36px;border-radius:9px;display:grid;place-items:center;cursor:pointer;color:var(--ink-muted)}.icon-btn:hover{color:var(--ink)}.key-reveal{border:1px dashed var(--line-strong);background:var(--chip-bg);border-radius:12px;padding:13px;display:flex;align-items:center;gap:10px;justify-content:space-between}.notice{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:12px;background:var(--accent-soft);color:var(--accent-ink);font-size:12.5px}.danger-zone{border-color:var(--danger-zone-line)}.toast{position:fixed;left:50%;bottom:28px;transform:translate(-50%);background:var(--solid);color:var(--solid-ink);padding:10px 18px;border-radius:999px;font-size:13px;z-index:60;box-shadow:var(--shadow-lg)}.list-plain{margin:0;padding:0;list-style:none}.list-plain li{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}.list-plain li:last-child{border-bottom:none}.scroll-y{max-height:360px;overflow:auto}.acct{position:relative;margin-top:auto;border-top:1px solid var(--line);padding-top:10px}.acct-trigger{width:100%;display:flex;align-items:center;gap:10px;padding:8px;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--ink);cursor:pointer;text-align:left;transition:background .12s ease}.acct-trigger:hover,.acct-trigger.open{background:var(--chip-bg)}.acct-who{min-width:0;flex:1}.acct-who b{display:block;font-size:13px;font-weight:600}.acct-who i{display:block;font-style:normal;font-size:12px;color:var(--ink-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.acct-caret{color:var(--ink-muted);transform:rotate(-90deg);transition:transform .15s ease}.acct-trigger.open .acct-caret{transform:rotate(90deg)}.acct-scrim{position:fixed;inset:0;z-index:30}.acct-panel{position:absolute;left:0;bottom:calc(100% + 8px);width:306px;max-height:min(74vh,640px);overflow:auto;background:var(--panel);border:1px solid var(--line-strong);border-radius:14px;box-shadow:var(--shadow-lg);padding:10px;z-index:31;animation:acct-in .12s ease-out}@keyframes acct-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.acct-id{display:flex;align-items:center;gap:10px;padding:8px 8px 12px}.acct-id .avatar{width:38px;height:38px;flex:0 0 38px;font-size:15px}.acct-name{display:flex;align-items:center;gap:6px;font-weight:600;font-size:13.5px}.acct-mail{font-size:12px;color:var(--ink-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.acct-metrics{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:0 4px 10px}.acct-metric{border:1px solid var(--line);border-radius:12px;padding:8px 10px;background:var(--chip-bg)}.acct-metric>span{font-size:11.5px;color:var(--ink-muted)}.acct-metric b{display:block;font-size:15px;font-weight:650;margin-top:2px}.acct-metric i{display:block;font-style:normal;font-size:11.5px;color:var(--ink-muted);margin-top:2px}.acct-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:0 4px 10px}.acct-rows{display:flex;flex-direction:column}.acct-row{display:flex;align-items:center;gap:10px;width:100%;padding:9px 10px;border:none;background:transparent;border-radius:10px;cursor:pointer;text-align:left;color:var(--ink)}.acct-row:hover{background:var(--chip-bg)}.acct-ico{color:var(--ink-muted);display:grid;place-items:center;width:18px;flex:0 0 18px}.acct-main{flex:1;min-width:0}.acct-label{font-size:13.5px;display:flex;align-items:center;gap:6px}.acct-sub{font-size:11.5px;color:var(--ink-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.acct-go{color:var(--ink-muted);flex:0 0 auto}.acct-row.danger .acct-label,.acct-row.danger .acct-ico{color:var(--danger)}.acct-sep{height:1px;background:var(--line);margin:6px 4px}.kbd{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;color:var(--ink-muted);border:1px solid var(--line-strong);border-radius:5px;padding:0 5px;background:var(--chip-bg)}.theme-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.theme-opt{border:1px solid var(--line-strong);border-radius:12px;padding:10px;background:var(--panel);cursor:pointer;text-align:center;color:var(--ink)}.theme-opt.on{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.theme-swatch{height:54px;border-radius:8px;border:1px solid var(--line);display:flex;overflow:hidden;margin-bottom:8px}.theme-swatch s{flex:1}.theme-opt>span{font-size:12.5px}.theme-opt.on>span{font-weight:600}.login{min-height:100vh;display:grid;place-items:center;padding:32px;background:var(--bg)}.login-card{width:min(420px,100%);background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-lg);padding:26px}.login-brand{display:flex;align-items:center;gap:10px;margin-bottom:18px}.login h1{font-size:22px;letter-spacing:-.4px;margin:0 0 6px}.login-sub{color:var(--ink-muted);font-size:13px;margin:0 0 18px}.code-box{display:flex;align-items:center;gap:10px;justify-content:space-between;border:1px dashed var(--line-strong);background:var(--chip-bg);border-radius:12px;padding:12px 14px}.code-box b{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:15px;letter-spacing:.5px}.rule-list{margin:0;padding-left:18px;color:var(--ink-2);font-size:12.5px}.rule-list li{margin:4px 0}.ver-box{border:1px solid var(--line);border-radius:12px;padding:12px 14px;background:var(--chip-bg)}.log-list{margin:0;padding:0;list-style:none;font-size:12.5px;color:var(--ink-2)}.log-list li{display:flex;gap:8px;padding:5px 0}.log-list li:before{content:"";width:5px;height:5px;border-radius:50%;background:var(--accent);margin-top:7px;flex:0 0 5px}@media(max-width:820px){.acct{border-top:none;padding-top:0}.acct-panel{width:min(92vw,306px)}}@media(max-width:1080px){.grid.c4,.grid.c3{grid-template-columns:repeat(2,minmax(0,1fr))}.main{padding:22px 22px 60px}.page-title{font-size:30px}}@media(max-width:820px){.app{flex-direction:column}.sidebar{width:auto;flex:none;height:auto;position:static;border-right:none;border-bottom:1px solid var(--line)}.nav{flex-direction:row;overflow-x:auto;margin-top:12px}.sidebar-foot{display:none}.grid.c2,.grid.c3,.grid.c4{grid-template-columns:minmax(0,1fr)}}
