@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/admin-ui/fonts/jetbrains-mono-latin-400-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/admin-ui/fonts/jetbrains-mono-latin-500-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/admin-ui/fonts/jetbrains-mono-latin-600-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(/admin-ui/fonts/jetbrains-mono-latin-700-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg-deep: #03060d;--bg0: #030710;--bg1: #081322;--ink: #e6eef8;--ink2: #9aabbe;--dim: #7a8ba3;--faint: #33404f;--line: rgba(138,168,200,.1);--line-strong: rgba(138,168,200,.18);--panel: rgba(8,15,26,.62);--glass: rgba(14,25,40,.46);--field: rgba(5,9,16,.55);--accent: #4dd0e1;--cyan: #4dd0e1;--blue: #7c9bff;--grad: linear-gradient(100deg, var(--cyan), var(--blue));--mono: "JetBrains Mono", "SF Mono", ui-monospace, "PingFang SC", "Microsoft YaHei", monospace;--sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;--fs-sm: 12px;--fs-label: 13px;--fs-body: 15px;--fs-h2: 18px;--fs-h1: 24px;--fs-display: 30px}*{box-sizing:border-box;margin:0;padding:0}html,body,#app{height:100%}body{font-family:var(--sans);color:var(--ink);font-size:var(--fs-body);line-height:1.6;letter-spacing:0;overflow:hidden;background:linear-gradient(160deg,var(--bg0),var(--bg1) 56%,var(--bg-deep))}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:6px}#admin-app{height:100%;display:flex;flex-direction:column}.admin-header{flex:0 0 auto;height:36px;display:flex;align-items:center;gap:10px;padding:0 14px;background:#050a12d1;border-bottom:1px solid var(--line)}.admin-header .brand{font-size:12px;color:var(--ink2)}.admin-header .brand b{color:var(--ink);font-weight:600}.admin-header .sp{flex:1}.version{font-family:var(--mono);font-size:11px;line-height:1.5;color:var(--ink2);background:#ffffff09;border:1px solid var(--line);padding:1px 8px;border-radius:6px}.admin-nav{flex:0 0 auto;display:flex;align-items:center;gap:4px;padding:6px 14px;border-bottom:1px solid var(--line)}.admin-nav a{display:inline-flex;align-items:center;white-space:nowrap;font-size:13px;line-height:1;color:var(--ink2);text-decoration:none;padding:7px 10px;border:1px solid transparent;border-radius:8px;transition:background .16s ease,border-color .16s ease,color .16s ease,box-shadow .16s ease}.admin-nav a:hover{color:var(--ink);background:#ffffff09;border-color:var(--line)}.admin-nav a.router-link-active{color:var(--ink);background:linear-gradient(180deg,#ffffff13,#ffffff09);border-color:#4dd0e142;box-shadow:inset 0 1px #ffffff0d,0 8px 24px -20px #4dd0e18c}.admin-main{flex:1;min-height:0;overflow:auto;padding:14px 18px}.page h2{font-size:18px;margin-bottom:16px}table{width:100%;border-collapse:collapse}th{text-align:left;font-size:11px;color:var(--ink2);text-transform:uppercase;letter-spacing:.05em;padding:8px 12px;border-bottom:1px solid rgba(255,255,255,.06)}td{padding:10px 12px;font-size:13px;border-bottom:1px solid rgba(255,255,255,.04)}code{font-family:var(--mono);font-size:11px;background:#0000004d;padding:2px 6px;border-radius:3px}.stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:24px}.stat-card{background:var(--glass);border-radius:12px;padding:20px;text-align:center}.stat-card .num{font-size:36px;font-weight:700;color:var(--accent)}.stat-card .label{font-size:12px;color:var(--ink2);margin-top:6px}.stats-bar{margin-bottom:16px;font-size:13px;color:var(--ink2)}.stats-bar b{color:var(--ink)}.btn{display:inline-block;padding:7px 14px;border:1px solid var(--line-strong);background:#ffffff09;color:var(--ink2);border-radius:8px;cursor:pointer;font-size:13px;transition:background .16s ease,border-color .16s ease,color .16s ease,box-shadow .16s ease}.btn:hover{color:var(--ink);border-color:var(--accent)}.btn:focus-visible{outline:none;box-shadow:0 0 0 2px #4dd0e129}.btn.pri{color:#04121d;background:var(--grad);border-color:transparent;font-weight:600}.btn.pri:hover{color:#04121d;filter:brightness(1.08)}.empty{color:var(--ink2);padding:40px;text-align:center;font-size:13px;border:1px dashed var(--line-strong);border-radius:12px}input{background:var(--field);border:1px solid var(--line);color:var(--ink);padding:8px 12px;border-radius:8px;font-size:13px;transition:border-color .16s ease,box-shadow .16s ease}select{-webkit-appearance:none;-moz-appearance:none;appearance:none;color-scheme:dark;min-width:0;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 14 14'%3E%3Cpath d='M4 5.4 7 8.4l3-3' fill='none' stroke='%234dd0e1' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") right 12px center/14px 14px no-repeat,linear-gradient(180deg,#15263dd1,#0a1626e0);border:1px solid rgba(77,208,225,.16);color:var(--ink);padding:8px 34px 8px 12px;border-radius:8px;font-size:13px;box-shadow:inset 0 1px #4dd0e11a,0 10px 24px -22px #4dd0e16b;outline:none;cursor:pointer;transition:border-color .16s ease,box-shadow .16s ease,background .16s ease,color .16s ease}select:hover{border-color:#4dd0e17a;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 14 14'%3E%3Cpath d='M4 5.4 7 8.4l3-3' fill='none' stroke='%234dd0e1' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") right 12px center/14px 14px no-repeat,linear-gradient(180deg,#1a2f49e6,#0b192bf0);box-shadow:inset 0 1px #ffffff14,0 12px 28px -22px #4dd0e185}select:focus{border-color:var(--accent);box-shadow:0 0 0 2px #4dd0e133,inset 0 1px #ffffff1a,0 14px 34px -24px #4dd0e199}select option,select optgroup{background:#081422;color:var(--ink)}select option:checked{background:#123149;color:#fff}.toolbar{margin-bottom:16px}:root{--green: #6fe0a8;--amber: #f2c27a}.status-active,.status-inactive,.status-revoked,.status-expired,.status-pending,.badge{display:inline-block;padding:2px 9px;border-radius:999px;font-family:var(--mono);font-size:11px;line-height:1.6;border:1px solid transparent;white-space:nowrap}.status-active{color:var(--accent);background:#4dd0e11f;border-color:#4dd0e147}.status-inactive{color:var(--ink2);background:#8899b41f;border-color:#8899b442}.status-revoked{color:#ff8a93;background:#ff6b761f;border-color:#ff6b7647}.status-expired{color:var(--amber);background:#f2c27a1f;border-color:#f2c27a47}.status-pending{color:var(--amber);background:#f2c27a14;border-color:#f2c27a3d;border-style:dashed}.badge{color:var(--ink2);background:#8899b41a;border-color:#8899b43d}.badge-super-admin{color:var(--blue);background:#7c9bff1f;border-color:#7c9bff4d}.badge-tenant-admin{color:var(--accent);background:#4dd0e11f;border-color:#4dd0e147}.badge-member{color:var(--ink2);background:#8899b41a;border-color:#8899b43d}.drawer-card{display:flex;flex-wrap:wrap;gap:32px;background:#00000040;border:1px solid rgba(255,255,255,.07);border-radius:10px;padding:14px 16px}.drawer-card .k{font-family:var(--mono);font-size:11px;color:var(--ink2);text-transform:uppercase;letter-spacing:.05em;margin-bottom:4px}.drawer-card .v{font-size:13px;color:var(--ink)}.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.toolbar .spacer{flex:1}.inline-form{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:#00000040;border:1px dashed rgba(77,208,225,.25);border-radius:10px;padding:12px 14px;margin-bottom:16px}.inline-form label{font-size:12px;color:var(--ink2);flex-shrink:0}.btn-sm{padding:4px 10px;font-size:12px}.btn+.btn{margin-left:6px}.row-click{cursor:pointer}.row-click:hover td{background:#ffffff05}.chart-empty{display:flex;align-items:center;justify-content:center;min-height:160px;border:1px dashed rgba(136,153,180,.3);border-radius:10px;color:var(--ink2);font-size:13px}.stats-bar{display:flex;gap:24px;flex-wrap:wrap}.err-bar{background:#ff6b6b1f;border:1px solid rgba(255,107,107,.35);color:#ff8a8a;padding:8px 12px;border-radius:8px;font-size:13px;margin:10px 0}.plan-tag{display:inline-block;padding:2px 8px;border-radius:6px;font-size:12px;background:#4dd0e11f;border:1px solid rgba(77,208,225,.3);color:#7fe3ef}.mono{font-family:var(--mono);font-size:12px;color:var(--ink2)}.drawer-card select,.role-sel{background:var(--field);border:1px solid var(--line-strong);border-radius:6px;color:var(--ink);padding:4px 8px;font-size:12px}.admin-who{font-size:12px;color:var(--ink2);margin-right:12px}:root{--accent: #0a84ff;--cyan: #0a84ff;--blue: #409cff;--grad: linear-gradient(135deg, #0a84ff, #0069d9);--bg-deep: #050507;--bg0: #0a0a0d;--bg1: #131317;--ink: #f5f5f7;--ink2: #a6a6ad;--dim: #818189;--faint: #3a3a40;--line: rgba(255,255,255,.07);--line-strong: rgba(255,255,255,.13);--panel: rgba(20,20,24,.96);--glass: #17171b;--field: #1e1e23}html,body,#app,#admin-app{height:100%}body{background:var(--bg0)}#admin-app{display:block}.admin-shell{display:flex;height:100vh;overflow:hidden}.admin-sidebar{flex:0 0 224px;display:flex;flex-direction:column;min-height:0;background:color-mix(in srgb,var(--bg1) 55%,var(--bg0));border-right:1px solid var(--line)}.sb-brand{display:flex;align-items:center;gap:10px;padding:16px 16px 12px}.sb-logo{width:34px;height:34px;border-radius:9px;background:var(--grad);color:#fff;font-weight:700;display:flex;align-items:center;justify-content:center;font-size:16px;flex:0 0 auto}.sb-brand .t b{display:block;font-size:15px;letter-spacing:-.01em}.sb-brand .t span{display:block;font-size:11px;color:var(--dim);margin-top:1px}.admin-shell .admin-nav{flex:1 1 auto;min-height:0;overflow-y:auto;display:flex;flex-direction:column;align-items:stretch;gap:0;padding:4px 10px 10px;border-bottom:0}.nav-group{margin-top:10px}.nav-group .gl{font-size:11px;color:var(--dim);padding:0 8px 5px}.admin-shell .admin-nav a{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:9px;border:0;font-size:13.5px;color:var(--ink2)}.admin-shell .admin-nav a:hover{background:#0a84ff12;color:var(--ink);border:0}.admin-shell .admin-nav a.router-link-active{background:#0a84ff21;color:var(--accent);border:0;box-shadow:none}.admin-nav a .ico{display:inline-flex;width:18px;height:18px;align-items:center;justify-content:center;flex:0 0 auto}.admin-nav a .ico svg{width:17px;height:17px}.sb-foot{flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:12px 14px;border-top:1px solid var(--line)}.sb-foot .who{flex:1;min-width:0}.sb-foot .who b{display:block;font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sb-foot .who .r{font-size:10.5px;color:var(--accent);background:#0a84ff1f;border-radius:999px;padding:1px 8px;display:inline-block;margin-top:3px}.admin-content{flex:1 1 auto;min-width:0;overflow:auto;padding:22px 26px}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--bg0);padding:24px}.login-card{width:380px;max-width:94vw;background:var(--glass);border:1px solid var(--line);border-radius:18px;padding:30px 30px 24px;box-shadow:0 18px 48px -18px #0009}.login-brand{display:flex;align-items:center;gap:12px;margin-bottom:20px}.login-mark{width:42px;height:42px;border-radius:11px;background:var(--grad);color:#fff;font-weight:700;font-size:19px;display:flex;align-items:center;justify-content:center;flex:0 0 auto}.login-title{font-size:17px;font-weight:700;letter-spacing:-.01em}.login-sub{font-size:12px;color:var(--dim);margin-top:2px}.login-seg{display:flex;background:var(--field);border-radius:10px;padding:3px;margin-bottom:16px}.login-seg button{flex:1;border:0;background:transparent;color:var(--ink2);font-size:13px;padding:7px 0;border-radius:8px;cursor:pointer}.login-seg button.on{background:#3a3a3f;color:var(--ink);box-shadow:0 1px 4px #00000052}.login-field{margin-bottom:13px}.login-field label{display:block;font-size:12.5px;color:var(--ink2);margin-bottom:6px}.login-field input{width:100%;box-sizing:border-box;background:var(--field);border:1px solid transparent;border-radius:10px;color:var(--ink);font-size:14px;padding:10px 12px;outline:none}.login-field input:focus{border-color:#0a84ff8c;box-shadow:0 0 0 3px #0a84ff24}.code-row{display:flex;gap:8px}.code-row input{flex:1}.code-row .btn{flex:0 0 auto}.login-submit{width:100%;margin-top:4px;padding:11px 0;font-size:14.5px;font-weight:600;border-radius:11px}.login-msg{font-size:12.5px;margin-top:10px}.login-msg.err{color:#ff453a}.login-msg.ok{color:#30d158}.login-hint{font-size:11.5px;color:var(--dim);margin-top:14px;line-height:1.6}:root{--s1: 4px;--s2: 6px;--s3: 8px;--s4: 12px;--s5: 16px;--s6: 20px;--s7: 28px;--r-chip: 8px;--r-ctrl: 10px;--r-panel: 16px;--r-pill: 999px;--surface: #17171b;--surface-2: #1e1e23;--hair: rgba(255,255,255,.07);--ok: #30d158;--ok-soft: rgba(48,209,88,.12);--ok-line: rgba(48,209,88,.35);--warn: #ff9f0a;--warn-soft: rgba(255,159,10,.12);--warn-line: rgba(255,159,10,.35);--bad: #ff453a;--bad-soft: rgba(255,69,58,.12);--bad-line: rgba(255,69,58,.35);--accent-soft: rgba(10,132,255,.12);--accent-line: rgba(10,132,255,.35);--accent-ink: #ffffff;--ring: 0 0 0 3px rgba(10,132,255,.18);--shadow-sm: 0 1px 2px rgba(0,0,0,.28);--shadow: 0 4px 14px rgba(0,0,0,.32);--shadow-pop: 0 18px 48px -12px rgba(0,0,0,.55);--t: .16s;--ease: cubic-bezier(.2,.7,.3,1)}.page{max-width:1480px}.page-head{display:flex;align-items:center;gap:var(--s4);margin-bottom:var(--s5);flex-wrap:wrap}.page-head .eh,h2.eh{font-size:var(--fs-h1);font-weight:700;letter-spacing:-.015em}.page-head .sub{font-size:var(--fs-sm);color:var(--dim);width:100%}.spacer{flex:1}.btn{background:var(--surface);border:1px solid var(--line-strong);color:var(--ink2);border-radius:var(--r-ctrl);padding:7px 13px;font-size:var(--fs-body);font-family:var(--sans);cursor:pointer;transition:background var(--t) var(--ease),border-color var(--t) var(--ease),color var(--t) var(--ease)}.btn:hover{color:var(--ink);border-color:var(--faint)}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.pri{background:var(--accent);border-color:transparent;color:#fff;font-weight:600}.btn.pri:hover{background:var(--blue);color:#fff}.btn.danger,.btn-sm.danger{color:var(--bad);border-color:var(--bad-line);background:transparent}.btn.danger:hover,.btn-sm.danger:hover{background:var(--bad-soft);color:var(--bad)}.btn-sm{padding:5px 10px;font-size:var(--fs-sm);border-radius:var(--r-chip)}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:var(--s4);margin-bottom:var(--s6)}.kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:var(--s4);margin-bottom:var(--s5)}.stat-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-panel);padding:var(--s5);box-shadow:none}.stat-card .label,.stat-card .k{font-size:var(--fs-sm);color:var(--ink2);font-weight:500}.stat-card .num,.stat-card .v{font-size:28px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums;margin-top:6px;color:var(--ink)}.num.accent{color:var(--accent)}.num.neg{color:var(--bad)}a{color:var(--accent);text-decoration:none}a:hover{opacity:.85}.card,.cfg-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-panel);padding:var(--s6);margin-bottom:var(--s5)}.cfg-h{font-size:var(--fs-h2);font-weight:600;letter-spacing:-.01em}.sec-head,.block-head{display:flex;align-items:center;gap:var(--s4);margin-bottom:var(--s4)}.cfg-actions{display:flex;align-items:center;gap:var(--s4);margin-top:var(--s5)}.hint,.fld-note,.trunc-hint{font-size:var(--fs-sm);color:var(--dim);line-height:1.6}table{width:100%;border-collapse:collapse;font-size:var(--fs-body)}th{text-align:left;font-size:var(--fs-sm);font-weight:500;color:var(--ink2);padding:9px 12px;border-bottom:1px solid var(--line-strong);white-space:nowrap}td{padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:middle}tbody tr{transition:background var(--t) var(--ease)}tbody tr:hover{background:#0a84ff0b}.op-col{white-space:nowrap}.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.sort-ind{color:var(--accent);font-size:10px;margin-left:3px}.field,.fld,.gf-field{margin-bottom:var(--s4)}.field label,.fld label,.gf-field label{display:block;font-size:var(--fs-sm);color:var(--ink2);margin-bottom:5px}.field-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:var(--s4) var(--s5)}input,select,textarea{font-family:var(--sans)}input:not([type=checkbox]):not([type=radio]),select,textarea,.search-input{width:100%;box-sizing:border-box;background:var(--field);border:1px solid transparent;border-radius:var(--r-ctrl);color:var(--ink);font-size:var(--fs-body);padding:8px 11px;outline:none;transition:border-color var(--t) var(--ease),box-shadow var(--t) var(--ease)}input:focus,select:focus,textarea:focus{border-color:var(--accent-line);box-shadow:var(--ring)}input.invalid,input.bad{border-color:var(--bad-line)}.field-err,.fld-err{font-size:var(--fs-sm);color:var(--bad);margin-top:4px}.readonly{color:var(--ink2);font-size:var(--fs-body)}.kv{display:flex;gap:var(--s3);align-items:baseline}.kv .k{color:var(--ink2);font-size:var(--fs-sm)}.kv .v{color:var(--ink)}.status-active,.status-pending,.status-expired,.status-inactive,.status-revoked{display:inline-block;font-size:var(--fs-sm);border-radius:var(--r-pill);padding:2px 10px}.status-active{color:var(--ok);background:var(--ok-soft)}.status-pending{color:var(--warn);background:var(--warn-soft)}.status-expired,.status-inactive,.status-revoked{color:var(--dim);background:#7f7f8724}.err-bar{background:var(--bad-soft);border:1px solid var(--bad-line);color:var(--bad);border-radius:var(--r-ctrl);padding:9px 13px;font-size:var(--fs-body);display:flex;align-items:center;gap:var(--s4);flex-wrap:wrap;margin-bottom:var(--s4)}.ok-bar{background:var(--ok-soft);border:1px solid var(--ok-line);color:var(--ok);border-radius:var(--r-ctrl);padding:9px 13px;font-size:var(--fs-body);margin-bottom:var(--s4)}.plan-tag{display:inline-block;font-size:var(--fs-sm);color:var(--accent);background:var(--accent-soft);border-radius:var(--r-pill);padding:2px 10px}.empty{text-align:center;color:var(--dim);padding:40px 16px;font-size:var(--fs-body)}.skeleton{position:relative;overflow:hidden;background:#ffffff0d;border-radius:8px;display:inline-block}.skeleton:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.06),transparent);animation:sk-shimmer 1.4s infinite}@keyframes sk-shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.sk-num{width:64px;height:28px}.sk-line{display:block;height:14px;margin:8px 0}.sk-cell{width:80%;height:13px}.sk-pill{width:72px;height:20px;border-radius:999px}.sk-row{display:block;height:36px;margin:6px 0}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;background:#0000008c;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center;padding:24px}.modal-mask>div{background:var(--panel);border:1px solid var(--line-strong);border-radius:var(--r-panel);box-shadow:var(--shadow-pop);padding:var(--s6);max-width:min(560px,92vw);max-height:84vh;overflow:auto}.toolbar{display:flex;align-items:center;gap:var(--s3);flex-wrap:wrap;margin-bottom:var(--s4)}.dim{color:var(--dim)}.sub{color:var(--ink2);font-size:var(--fs-sm)}
