:root{--bg: #f5f5f4;--side: #fbfbfa;--panel: #ffffff;--panel-2: #fafaf9;--ink: #171717;--ink-2: #5c5c5a;--ink-3: #9a9a97;--ink-4: #bcbcb9;--line: #ececea;--line-2: #f4f4f2;--line-strong: #e2e2df;--fill: #f3f3f2;--fill-2: #ebebea;--brand: #171717;--brand-deep: #000;--brand-soft: #f0f0ee;--accent: #2f7ff0;--accent-soft: #e8f1fe;--ok: #1d9a57;--ok-soft: #e6f5ec;--warn: #e89a0c;--warn-soft: #fdf3df;--danger: #e5483b;--danger-soft: #fdecea;--psych: #7a5af5;--psych-soft: #f1edfe;--lock: #ad5136;--lock-soft: #f8eee8;--r-s: 6px;--r-m: 10px;--r-l: 14px;--r-xl: 18px;--sh-1: 0 1px 2px rgba(23, 23, 23, .04);--sh-2: 0 2px 8px rgba(23, 23, 23, .06);--sh-3: 0 8px 28px rgba(23, 23, 23, .1);--font: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Source Han Sans SC", sans-serif;--mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--nav-w: 208px;--head-h: 56px}*{box-sizing:border-box}html,body,#app{height:100%}body{margin:0;font-family:var(--font);font-size:13px;line-height:1.55;color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#dcdcda;border-radius:8px;border:3px solid var(--bg)}::-webkit-scrollbar-thumb:hover{background:#c9c9c6}::-webkit-scrollbar-track{background:transparent}.shell{display:flex;height:100%}.rail{width:var(--nav-w);flex:0 0 var(--nav-w);background:var(--side);border-right:1px solid var(--line);display:flex;flex-direction:column;padding:14px 10px 10px;gap:2px;overflow-y:auto}.rail-brand{display:flex;align-items:center;gap:9px;padding:4px 8px 14px}.rail-name{font-weight:600;font-size:13px;letter-spacing:.2px}.rail-sub{font-size:11px;color:var(--ink-3);margin-top:-2px}.rail-group{font-size:11px;color:var(--ink-4);padding:14px 10px 5px;letter-spacing:.4px}.nav-item{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:var(--r-s);color:var(--ink-2);font-size:13px;font-weight:500;border:1px solid transparent;transition:background .12s,color .12s}.nav-item:hover{background:var(--fill);color:var(--ink)}.nav-item.on{background:var(--panel);color:var(--ink);border-color:var(--line-strong);box-shadow:var(--sh-1)}.nav-item .i{width:16px;text-align:center;opacity:.75}.nav-item.on .i{opacity:1}.nav-badge{margin-left:auto;min-width:17px;height:17px;padding:0 5px;border-radius:9px;background:var(--danger);color:#fff;font-size:10px;display:grid;place-items:center;font-weight:600}.main{flex:1;min-width:0;display:flex;flex-direction:column}.head{height:var(--head-h);flex:0 0 var(--head-h);display:flex;align-items:center;gap:12px;padding:0 20px;border-bottom:1px solid var(--line);background:#f5f5f4db;-webkit-backdrop-filter:saturate(180%) blur(8px);backdrop-filter:saturate(180%) blur(8px);position:sticky;top:0;z-index:20}.head h1{font-size:15px;font-weight:600;margin:0;letter-spacing:-.1px}.head .sub{font-size:12px;color:var(--ink-3)}.head .spacer{flex:1}.body{flex:1;min-height:0;overflow-y:auto;padding:20px}.body.flush{padding:0}.wrap{max-width:1180px;margin:0 auto}.wrap.wide{max-width:1440px}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-l);box-shadow:var(--sh-1)}.card-h{display:flex;align-items:center;gap:10px;padding:13px 16px;border-bottom:1px solid var(--line-2)}.card-h h3{margin:0;font-size:13px;font-weight:600}.card-h .spacer{flex:1}.card-b{padding:16px}.card-b.tight{padding:10px 12px}.card-b.flush{padding:0}.grid{display:grid;gap:14px}.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(3,minmax(0,1fr))}.g4{grid-template-columns:repeat(4,minmax(0,1fr))}@media (max-width: 1080px){.g4,.g3{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 760px){.g2,.g3,.g4{grid-template-columns:1fr}}.row{display:flex;align-items:center;gap:10px}.row.wrap{flex-wrap:wrap}.col{display:flex;flex-direction:column;gap:10px}.spacer{flex:1}.stat{padding:14px 16px}.stat .k{font-size:11px;color:var(--ink-3);letter-spacing:.3px}.stat .v{font-size:24px;font-weight:650;letter-spacing:-.6px;margin-top:3px;font-variant-numeric:tabular-nums}.stat .v small{font-size:12px;font-weight:500;color:var(--ink-3);margin-left:3px}.stat .d{font-size:11px;color:var(--ink-3);margin-top:2px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:30px;padding:0 12px;border-radius:var(--r-s);border:1px solid var(--line-strong);background:var(--panel);color:var(--ink);font-size:12.5px;font-weight:500;transition:background .12s,border-color .12s,transform .06s;white-space:nowrap}.btn:hover{background:var(--fill)}.btn:active{transform:translateY(.5px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--brand);color:#fff;border-color:var(--brand-deep)}.btn.primary:hover{background:#2a2a2a}.btn.ghost{border-color:transparent;background:transparent;color:var(--ink-2)}.btn.ghost:hover{background:var(--fill);color:var(--ink)}.btn.danger{color:var(--danger);border-color:#f3cdc8;background:var(--danger-soft)}.btn.danger:hover{background:#fbe0dd}.btn.sm{height:26px;padding:0 9px;font-size:12px}.btn.lg{height:36px;padding:0 18px;font-size:13px}.btn.block{width:100%}.field{display:flex;flex-direction:column;gap:5px}.field>label{font-size:12px;color:var(--ink-2);font-weight:500}.input,.select,.textarea{height:32px;padding:0 10px;border:1px solid var(--line-strong);border-radius:var(--r-s);background:var(--panel);font-size:13px;outline:none;transition:border-color .12s,box-shadow .12s;width:100%}.textarea{height:auto;min-height:74px;padding:8px 10px;resize:vertical;line-height:1.6}.input:focus,.select:focus,.textarea:focus{border-color:var(--ink-3);box-shadow:0 0 0 3px #1717170d}.input::placeholder,.textarea::placeholder{color:var(--ink-4)}.hint{font-size:11.5px;color:var(--ink-3)}.table{width:100%;border-collapse:separate;border-spacing:0;font-size:12.5px}.table th{text-align:left;font-weight:500;color:var(--ink-3);font-size:11.5px;letter-spacing:.2px;padding:9px 12px;background:var(--panel-2);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:1;white-space:nowrap}.table td{padding:9px 12px;border-bottom:1px solid var(--line-2);vertical-align:middle}.table tbody tr:hover td{background:#fcfcfb}.table tbody tr:last-child td{border-bottom:0}.table .num{font-variant-numeric:tabular-nums;text-align:right}.table .c{text-align:center}.table.compact th,.table.compact td{padding:6px 9px}.tag{display:inline-flex;align-items:center;gap:4px;height:20px;padding:0 7px;border-radius:5px;font-size:11px;font-weight:500;background:var(--fill);color:var(--ink-2);border:1px solid var(--line);white-space:nowrap}.tag.ok{background:var(--ok-soft);color:var(--ok);border-color:#cfe9da}.tag.warn{background:var(--warn-soft);color:#a06a00;border-color:#f5e0b3}.tag.danger{background:var(--danger-soft);color:var(--danger);border-color:#f3cdc8}.tag.info{background:var(--accent-soft);color:var(--accent);border-color:#cfe0fb}.tag.psych{background:var(--psych-soft);color:var(--psych);border-color:#ddd4fb}.tag.lock{background:var(--lock-soft);color:var(--lock);border-color:#eccfc3}.tag.solid{background:var(--brand);color:#fff;border-color:var(--brand)}.note{display:block;font-size:12px;font-weight:400;line-height:1.7;padding:9px 11px;border-radius:8px;background:var(--fill);color:var(--ink-2);border:1px solid var(--line);white-space:normal;word-break:break-word}.note b,.note strong{color:var(--ink);font-weight:600}.note.ok{background:var(--ok-soft);color:var(--ok);border-color:#cfe9da}.note.warn{background:var(--warn-soft);color:#a06a00;border-color:#f5e0b3}.note.danger{background:var(--danger-soft);color:var(--danger);border-color:#f3cdc8}.note.info{background:var(--accent-soft);color:var(--accent);border-color:#cfe0fb}.note.lock{background:var(--lock-soft);color:var(--lock);border-color:#eccfc3}.note.psych{background:var(--psych-soft);color:var(--psych);border-color:#ddd4fb}.dot{width:6px;height:6px;border-radius:50%;background:currentColor;display:inline-block}.seg{display:inline-flex;padding:2px;background:var(--fill);border-radius:8px;gap:2px}.seg button{height:26px;padding:0 11px;border:0;border-radius:6px;background:transparent;color:var(--ink-2);font-size:12px;font-weight:500}.seg button.on{background:var(--panel);color:var(--ink);box-shadow:var(--sh-1)}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);padding:0 16px;overflow-x:auto}.tabs a{padding:10px 12px;font-size:12.5px;font-weight:500;color:var(--ink-2);border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap}.tabs a:hover{color:var(--ink)}.tabs a.on{color:var(--ink);border-bottom-color:var(--ink)}.ava{width:28px;height:28px;border-radius:50%;background:var(--fill-2);color:var(--ink-2);display:grid;place-items:center;font-size:11.5px;font-weight:600;flex:none;border:1px solid var(--line)}.ava.lg{width:40px;height:40px;font-size:14px}.ava.sm{width:22px;height:22px;font-size:10px}.empty{padding:44px 20px;text-align:center;color:var(--ink-3)}.empty .t{font-size:13px;color:var(--ink-2);margin-bottom:4px}.skel{background:linear-gradient(90deg,#f3f3f2 25%,#ececeb 37%,#f3f3f2 63%);background-size:400% 100%;animation:sk 1.3s ease infinite;border-radius:6px}@keyframes sk{0%{background-position:100% 50%}to{background-position:0 50%}}.mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#17171757;display:grid;place-items:center;z-index:100;padding:20px;animation:fade .14s ease}.modal{width:100%;max-width:520px;max-height:84vh;overflow:auto;background:var(--panel);border-radius:var(--r-xl);box-shadow:var(--sh-3);animation:pop .16s ease}.modal.wide{max-width:780px}.modal-h{display:flex;align-items:center;padding:16px 18px 10px}.modal-h h3{margin:0;font-size:14px;font-weight:600}.modal-b{padding:4px 18px 16px}.modal-f{display:flex;justify-content:flex-end;gap:8px;padding:12px 18px 16px;border-top:1px solid var(--line-2)}@keyframes fade{0%{opacity:0}}@keyframes pop{0%{opacity:0;transform:translateY(6px) scale(.99)}}.toasts{position:fixed;top:16px;right:16px;display:flex;flex-direction:column;gap:8px;z-index:200}.toast{min-width:180px;max-width:380px;padding:9px 13px;border-radius:var(--r-m);background:var(--brand);color:#fff;font-size:12.5px;box-shadow:var(--sh-3);animation:pop .16s ease}.toast.err{background:var(--danger)}.toast.ok{background:var(--ok)}.bar{height:6px;border-radius:4px;background:var(--fill-2);overflow:hidden}.bar>i{display:block;height:100%;background:var(--ink);border-radius:4px;transition:width .3s}.auth{min-height:100%;display:grid;place-items:center;background:radial-gradient(1000px 460px at 50% -20%,#fff,#fff0 62%),var(--bg);padding:24px}.auth-card{width:100%;max-width:366px}.mobile-only{display:none}@media (max-width: 900px){.rail{position:fixed;inset:0 auto 0 0;z-index:60;transform:translate(-100%);transition:transform .2s;box-shadow:var(--sh-3)}.rail.open{transform:none}.mobile-only{display:inline-flex}.body{padding:14px}.head{padding:0 12px}}@media print{.rail,.head,.no-print{display:none!important}.body{overflow:visible;padding:0}}.force-pwd{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;background:#0a0a0c8c;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center;padding:20px}.force-card{width:100%;max-width:380px;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:22px;box-shadow:0 18px 48px #0000002e}.force-card h2{margin:0;font-size:16px;font-weight:600}
