:root{--brand-50:#eff6ff;--brand-100:#dbeafe;--brand-300:#93c5fd;--brand-500:#2563eb;--brand-600:#1d4ed8;--brand-700:#1e40af;--accent-400:#fbbf24;--accent-600:#f59e0b;--surface:#f8fafc;--card:#fff;--ink:#0f172a;--ink-2:#334155;--muted:#64748b;--muted-2:#94a3b8;--line:#e5e7eb;--line-2:#f1f5f9;--success:#22c55e;--success-ink:#15803d;--danger:#ef4444;--danger-ink:#b91c1c;--warn-ink:#b45309;--shadow-soft:0 4px 16px #0f172a0f;--shadow-lift:0 12px 32px #0f172a1f;--shadow-modal:0 24px 60px #0f172a38;--ring:0 0 0 3px #93c5fd73;--r-sm:12px;--r-md:16px;--r-lg:24px;--sidebar:252px}*{box-sizing:border-box}body,html{background:var(--surface);color:var(--ink);margin:0;padding:0}body{-webkit-font-smoothing:antialiased;font-family:Inter,system-ui,-apple-system,Segoe UI,sans-serif;font-size:14px;line-height:1.5}a{color:var(--brand-500);text-decoration:none}a:hover{color:var(--brand-600)}h1,h2,h3,h4{margin:0}button,input,select,textarea{font:inherit;color:inherit}.mono{font-family:JetBrains Mono,ui-monospace,monospace;font-size:12.5px}.muted{color:var(--muted)}.small{font-size:12px}.nowrap{white-space:nowrap}.right{text-align:right}.center{text-align:center}.row{align-items:center;gap:8px;display:flex}.row.wrap{flex-wrap:wrap}.row.between{justify-content:space-between}.stack{flex-direction:column;gap:16px;display:flex}.grow{flex:1;min-width:0}.gap-16{gap:16px}.mt-8{margin-top:8px}.mt-16{margin-top:16px}.mt-24{margin-top:24px}.mb-16{margin-bottom:16px}.grid{gap:16px;display:grid}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-5{grid-template-columns:repeat(5,minmax(0,1fr))}.span-2{grid-column:span 2}@media (width<=1100px){.grid-3,.grid-4,.grid-5{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=720px){.grid-2,.grid-3,.grid-4,.grid-5{grid-template-columns:minmax(0,1fr)}.span-2{grid-column:auto}}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:24px;display:flex}.crumbs{margin-bottom:6px;font-size:12px}.crumbs,.crumbs a{color:var(--muted)}.page-title{letter-spacing:-.03em;font-size:28px;font-weight:700;line-height:1.15}.page-sub{color:var(--muted);margin-top:4px}.section-title{letter-spacing:-.01em;font-size:18px;font-weight:600}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-md);padding:24px}.card.soft{box-shadow:var(--shadow-soft)}.card.flush{padding:0;overflow:hidden}.card-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.card-head.pad{padding:20px 24px 0}.card-title{font-size:16px;font-weight:600}.divider{background:var(--line);height:1px;margin:16px 0}.stat{background:var(--card);border:1px solid var(--line);border-radius:var(--r-md);padding:20px;transition:transform .18s,box-shadow .18s}.stat:hover{box-shadow:var(--shadow-soft);transform:translateY(-1px)}.stat-label{color:var(--muted);align-items:center;gap:8px;font-size:12px;font-weight:500;display:flex}.stat-value{letter-spacing:-.03em;margin-top:6px;font-size:28px;font-weight:700;line-height:1.1}.stat-hint{color:var(--muted);margin-top:6px;font-size:12px}.stat-icon{background:var(--brand-50);width:30px;height:30px;color:var(--brand-500);border-radius:10px}.btn,.stat-icon{justify-content:center;align-items:center;display:inline-flex}.btn{border-radius:var(--r-sm);cursor:pointer;white-space:nowrap;border:1px solid #0000;gap:8px;height:40px;padding:0 16px;font-size:14px;font-weight:600;text-decoration:none;transition:background .15s,border-color .15s,box-shadow .15s,transform 50ms}.btn:focus-visible{box-shadow:var(--ring);outline:none}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.btn-primary{background:var(--brand-500);color:#fff;box-shadow:0 4px 12px #2563eb33}.btn-primary:hover:not(:disabled){background:var(--brand-600);color:#fff}.btn-secondary{color:var(--ink);border-color:var(--line);background:#fff}.btn-secondary:hover:not(:disabled){background:var(--surface);color:var(--ink);border-color:#cbd5e1}.btn-ghost{color:var(--brand-500);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--brand-50)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover:not(:disabled){background:#dc2626}.btn-danger-soft{color:var(--danger-ink);background:#fef2f2;border-color:#fecaca}.btn-sm{border-radius:10px;height:32px;padding:0 12px;font-size:13px}.btn-lg{height:48px;padding:0 22px;font-size:15px}.btn-icon{width:34px;height:34px;color:var(--muted);background:0 0;border:1px solid #0000;border-radius:10px;padding:0}.btn-icon:hover:not(:disabled){background:var(--line-2);color:var(--ink)}.btn-icon.danger:hover:not(:disabled){color:var(--danger-ink);background:#fef2f2}.spin{animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(1turn)}}.field{flex-direction:column;gap:6px;min-width:0;display:flex}.label{color:var(--ink-2);font-size:13px;font-weight:500}.label .req{color:var(--danger)}.help{color:var(--muted)}.err,.help{font-size:12px}.err{color:var(--danger-ink);align-items:center;gap:4px;display:flex}.input,.select,.textarea{border:1px solid var(--line);border-radius:var(--r-sm);background:#fff;outline:none;width:100%;height:40px;padding:0 12px;font-size:14px;transition:border-color .15s,box-shadow .15s}.textarea{resize:vertical;height:auto;min-height:88px;padding:10px 12px}.input:focus,.select:focus,.textarea:focus{border-color:var(--brand-500);box-shadow:var(--ring)}.input.invalid,.select.invalid{border-color:var(--danger)}.input:disabled,.select:disabled{background:var(--line-2);color:var(--muted)}.input[readonly]{background:var(--surface)}.select{appearance:none;background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22none%22%20stroke%3D%22%2364748b%22%20stroke-width%3D%222%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22m6%209%206%206%206-6%22%2F%3E%3C%2Fsvg%3E);background-position:right 10px center;background-repeat:no-repeat;padding-right:32px}.input-sm,.select.input-sm{height:36px;font-size:13px}.search{position:relative}.search svg{color:var(--muted-2);position:absolute;top:50%;left:11px;transform:translateY(-50%)}.search .input{padding-left:34px}.check{cursor:pointer;align-items:center;gap:8px;font-size:14px;display:inline-flex}.check input{width:16px;height:16px;accent-color:var(--brand-500)}.form-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.form-grid .full{grid-column:1/-1}@media (width<=720px){.form-grid{grid-template-columns:1fr}}.switch{flex:none;width:38px;height:22px;position:relative}.switch input{opacity:0;width:0;height:0}.switch span{cursor:pointer;background:#cbd5e1;border-radius:999px;inset:0}.switch span,.switch span:before{transition:all .18s;position:absolute}.switch span:before{content:"";background:#fff;border-radius:50%;width:16px;height:16px;top:3px;left:3px;box-shadow:0 1px 2px #0f172a33}.switch input:checked+span{background:var(--brand-500)}.switch input:checked+span:before{transform:translate(16px)}.badge{white-space:nowrap;border-radius:999px;align-items:center;gap:5px;height:24px;padding:0 10px;font-size:12px;font-weight:600;display:inline-flex}.badge.dot:before{content:"";background:currentColor;border-radius:50%;width:6px;height:6px}.b-blue{color:var(--brand-600);background:#2563eb1a}.b-green{color:var(--success-ink);background:#22c55e1f}.b-yellow{color:var(--warn-ink);background:#f59e0b26}.b-red{color:var(--danger-ink);background:#ef44441a}.b-gray{background:var(--line-2);color:#475569}.b-purple{color:#6d28d9;background:#7c3aed1a}.table-wrap{overflow-x:auto}.table{border-collapse:collapse;width:100%;font-size:14px}.table th{text-align:left;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);background:var(--surface);border-bottom:1px solid var(--line);white-space:nowrap;padding:12px 16px;font-size:11px;font-weight:600}.table td{border-bottom:1px solid var(--line-2);vertical-align:middle;padding:12px 16px}.table tr:last-child td{border-bottom:0}.table tbody tr:hover td{background:#fcfdfe}.table th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.table td.right,.table th.right{text-align:right}.table .actions,.table td .mono,.table td.mono{white-space:nowrap}.table .actions{text-align:right}.toolbar{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:8px;padding:16px 20px;display:flex}.toolbar .search{flex:1;min-width:200px;max-width:360px}.toolbar .select{width:auto;min-width:140px}.bulkbar{background:var(--brand-50);border-bottom:1px solid var(--brand-100);color:var(--brand-700);gap:8px;padding:10px 20px;font-weight:600}.bulkbar,.pager{align-items:center;font-size:13px;display:flex}.pager{border-top:1px solid var(--line);color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:12px;padding:12px 20px}.pager .pages{gap:4px;display:flex}.pager button{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:10px;min-width:32px;height:32px;font-size:13px}.pager button.on{background:var(--brand-500);color:#fff;border-color:var(--brand-500)}.pager button:disabled{opacity:.45;cursor:default}.avatar{background:var(--brand-100);width:36px;height:36px;color:var(--brand-700);border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:13px;font-weight:600;display:inline-flex;overflow:hidden}.avatar img{-o-object-fit:cover;object-fit:cover;width:100%;height:100%}.avatar.lg{width:72px;height:72px;font-size:22px}.avatar.sm{width:28px;height:28px;font-size:11px}.empty{text-align:center;color:var(--muted);padding:48px 24px}.empty-icon{background:var(--brand-50);width:52px;height:52px;color:var(--brand-500);border-radius:16px;justify-content:center;align-items:center;margin-bottom:12px;display:inline-flex}.empty h4{color:var(--ink);margin-bottom:4px;font-size:16px;font-weight:600}.skeleton{background:linear-gradient(90deg,#f1f5f9 25%,#e8eef5 37%,#f1f5f9 63%) 0 0/400px 100%;border-radius:8px;height:14px;animation:1.3s infinite shimmer}@keyframes shimmer{0%{background-position:-200px 0}to{background-position:200px 0}}.alert{border-radius:var(--r-sm);align-items:flex-start;gap:10px;padding:12px 14px;font-size:13px;display:flex}.alert-info{background:var(--brand-50);color:var(--brand-700)}.alert-warn{color:#92400e;background:#fffbeb;border:1px solid #fde68a}.alert-danger{color:var(--danger-ink);background:#fef2f2}.tabs{border-bottom:1px solid var(--line);gap:4px;margin-bottom:20px;display:flex;overflow-x:auto}.tab{color:var(--muted);cursor:pointer;white-space:nowrap;background:0 0;border:0;border-bottom:2px solid #0000;margin-bottom:-1px;padding:10px 14px;font-weight:500}.tab:hover{color:var(--ink)}.tab.on{color:var(--brand-500);border-bottom-color:var(--brand-500);font-weight:600}.seg{background:var(--line-2);border-radius:12px;gap:2px;padding:3px;display:inline-flex}.seg button{cursor:pointer;color:var(--muted);background:0 0;border:0;border-radius:9px;padding:6px 12px;font-size:13px;font-weight:500}.seg button.on{color:var(--ink);background:#fff;box-shadow:0 1px 2px #0f172a14}@keyframes feedIn{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}.feed-item{border-bottom:1px solid var(--line-2);align-items:center;gap:12px;padding:12px 0;animation:.3s feedIn;display:flex}.feed-item:last-child{border-bottom:0}.live{color:var(--success-ink);align-items:center;gap:6px;font-size:12px;font-weight:600;display:inline-flex}.live:before{content:"";background:var(--success);border-radius:50%;width:8px;height:8px;animation:1.4s infinite pulseDot}.live.off{color:var(--muted)}.live.off:before{background:var(--muted-2);animation:none}@keyframes pulseDot{0%,to{opacity:1}50%{opacity:.35}}.kv{grid-template-columns:160px 1fr;gap:10px 16px;font-size:14px;display:grid}.kv dt{color:var(--muted)}.kv dd{word-break:break-word;margin:0;font-weight:500}@media (width<=600px){.kv{grid-template-columns:1fr;gap:2px}.kv dd{margin-bottom:8px}}.code{color:#e2e8f0;white-space:pre;background:#0f172a;border-radius:12px;padding:14px 16px;font-family:JetBrains Mono,monospace;font-size:12px;overflow-x:auto}.bars{align-items:flex-end;gap:10px;height:160px;padding-top:8px;display:flex}.bars .bar{flex-direction:column;flex:1;justify-content:flex-end;align-items:center;gap:6px;height:100%;display:flex}.bars .bar i{background:var(--brand-500);border-radius:8px 8px 4px 4px;width:100%;max-width:38px;min-height:2px;transition:height .3s;display:block}.bars .bar i.dim{background:var(--brand-100)}.bars .bar span{color:var(--muted);font-size:11px}.progress{background:var(--line-2);border-radius:999px;height:8px;overflow:hidden}.progress i{background:var(--brand-500);border-radius:999px;height:100%;display:block}@media print{.no-print{display:none!important}body{background:#fff}.main-area{margin:0!important;padding:0!important}}.toasts[data-v-fec36580]{z-index:100;flex-direction:column;gap:8px;width:min(360px,100vw - 32px);display:flex;position:fixed;top:16px;right:16px}.toast[data-v-fec36580]{border:1px solid var(--line);box-shadow:var(--shadow-lift);background:#fff;border-radius:14px;align-items:flex-start;gap:10px;padding:12px 12px 12px 14px;animation:.2s toastIn-fec36580;display:flex}.toast.success .ti[data-v-fec36580]{color:var(--success)}.toast.error .ti[data-v-fec36580]{color:var(--danger)}.toast.info .ti[data-v-fec36580]{color:var(--brand-500)}.ti[data-v-fec36580]{flex:none;margin-top:1px}.tt[data-v-fec36580]{font-size:14px;font-weight:600}.td[data-v-fec36580]{color:var(--muted);margin-top:2px;font-size:12px}@keyframes toastIn-fec36580{0%{opacity:0;transform:translate(16px)}to{opacity:1;transform:none}}.overlay[data-v-b33a236a]{z-index:60;background:#0f172a73;justify-content:center;align-items:flex-start;padding:6vh 16px 16px;display:flex;position:fixed;inset:0;overflow-y:auto}.modal[data-v-b33a236a]{border-radius:var(--r-lg);width:100%;box-shadow:var(--shadow-modal);background:#fff;animation:.18s modalIn-b33a236a}.mh[data-v-b33a236a]{justify-content:space-between;align-items:flex-start;gap:12px;padding:22px 24px 0;display:flex}.mt[data-v-b33a236a]{letter-spacing:-.01em;font-size:18px;font-weight:600}.mb[data-v-b33a236a]{padding:20px 24px}.mf[data-v-b33a236a]{border-top:1px solid var(--line);flex-wrap:wrap;justify-content:flex-end;gap:8px;padding:16px 24px;display:flex}@keyframes modalIn-b33a236a{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:none}}.ic[data-v-ee21dc7b]{background:var(--brand-50);width:40px;height:40px;color:var(--brand-500);border-radius:12px;flex:none;justify-content:center;align-items:center;display:flex}.ic.danger[data-v-ee21dc7b]{color:var(--danger);background:#fef2f2}
