:root{--bg: #f7f7f5;--bg-sunk: #f2f2f0;--panel: #ffffff;--panel-2: #fbfbfa;--line: #e8e8e5;--line-strong: #dcdcd8;--fg: #141414;--fg-2: #4a4a48;--dim: #77776f;--dim-2: #9d9d94;--primary: #00c896;--primary-hi: #00b386;--primary-soft: #e6faf3;--ink: #141414;--ok: #00a878;--ok-soft: #e4f8f1;--warn: #b3760a;--warn-soft: #fdf3e0;--danger: #d93a3a;--danger-soft: #fdeceb;--info: #1f7ae0;--info-soft: #eaf2fd;--violet: #7a5af8;--violet-soft: #f0ecfe;--r: 8px;--r-lg: 14px;--r-xl: 18px;--mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;--sans: Inter, "Inter var", "HarmonyOS Sans SC", "Source Han Sans SC", "Noto Sans SC", -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif;--glass: rgba(255, 255, 255, .66);--glass-line: rgba(255, 255, 255, .7);--sh-1: 0 1px 2px rgba(20, 20, 18, .04), 0 1px 1px rgba(20, 20, 18, .03);--sh-2: 0 8px 24px -10px rgba(20, 20, 18, .16), 0 2px 8px -4px rgba(20, 20, 18, .06);--sh-3: 0 24px 64px -20px rgba(20, 20, 18, .28), 0 8px 24px -12px rgba(20, 20, 18, .12);--inset: inset 0 1px 0 rgba(255, 255, 255, .9);--ease: cubic-bezier(.22, .8, .3, 1)}*{box-sizing:border-box}html,body,#app{height:100%}body{margin:0;background:var(--bg);color:var(--fg);font:15px/1.55 var(--sans);letter-spacing:-.005em;-webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums}.ic{width:16px;height:16px;flex:0 0 auto}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit;color:inherit;letter-spacing:inherit}::selection{background:#c9f5e6;color:#06422f}::-webkit-scrollbar{width:11px;height:11px}::-webkit-scrollbar-thumb{background:#dcdcd8;border-radius:99px;border:3px solid var(--bg)}::-webkit-scrollbar-thumb:hover{background:#cbccc6}::-webkit-scrollbar-track{background:transparent}:focus-visible{outline:2px solid var(--primary);outline-offset:2px}h1,h2,h3,h4{margin:0;font-weight:600;letter-spacing:-.022em}h1{font-size:28px;line-height:1.2}h2{font-size:15px}h3{font-size:14px}.mono{font-family:var(--mono);font-variant-numeric:tabular-nums;letter-spacing:-.01em}.muted{color:var(--dim)}.dim2{color:var(--dim-2)}.tiny{font-size:13px;color:var(--dim)}.mid{font-size:14px}.strong{font-weight:600}.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.right{text-align:right}.center{text-align:center}.nowrap{white-space:nowrap}.upper{text-transform:uppercase;letter-spacing:.07em}.label{font-size:12px;font-weight:600;color:var(--dim);text-transform:uppercase;letter-spacing:.08em}.num{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:14px}.row{display:flex;align-items:center;gap:10px}.row-tight{display:flex;align-items:center;gap:6px}.col{display:flex;flex-direction:column;gap:10px}.wrap{flex-wrap:wrap}.push{margin-left:auto}.grow{flex:1;min-width: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))}.g5{grid-template-columns:repeat(5,minmax(0,1fr))}@media(max-width:1280px){.g5{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:1080px){.g4,.g5,.g3{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:720px){.g2,.g3,.g4,.g5{grid-template-columns:minmax(0,1fr)}}.shell{display:grid;grid-template-columns:232px minmax(0,1fr);gap:12px;height:100vh;padding:12px}.shell.collapsed{grid-template-columns:68px minmax(0,1fr)}.rail{border:1px solid var(--glass-line);border-radius:var(--r-xl);background:var(--glass);-webkit-backdrop-filter:blur(24px) saturate(1.5);backdrop-filter:blur(24px) saturate(1.5);box-shadow:var(--sh-2),var(--inset);display:flex;flex-direction:column;overflow:hidden}.brand{height:62px;display:flex;align-items:center;gap:10px;padding:0 14px}.brand-mark{width:30px;height:30px;border-radius:9px;background:var(--ink);color:#fff;display:grid;place-items:center;font:700 13px/1 var(--mono);flex:0 0 auto;box-shadow:0 4px 12px -4px #00000080}.brand-name{font-size:14px;font-weight:650;letter-spacing:-.02em}.nav{padding:2px 10px 10px;overflow-y:auto;flex:1}.nav-group{padding:14px 8px 6px;font-size:11px;font-weight:650;color:var(--dim-2);text-transform:uppercase;letter-spacing:.1em}.nav-item{display:flex;align-items:center;gap:10px;height:36px;padding:0 10px;margin-bottom:2px;border-radius:9px;color:var(--fg-2);font-size:14px;font-weight:500;cursor:pointer;transition:background .15s var(--ease),color .15s var(--ease)}.nav-item:hover{background:#1414120d;color:var(--fg)}.nav-item.on{background:var(--primary-soft);color:#06785a;font-weight:600}.nav-item.on .ic{color:var(--primary-hi)}.rail-foot{border-top:1px solid var(--line);padding:10px;margin:6px;border-radius:0 0 var(--r-xl) var(--r-xl)}.top{height:56px;display:flex;align-items:center;gap:12px;padding:0 14px;margin-bottom:14px;border:1px solid var(--glass-line);border-radius:var(--r-lg);background:var(--glass);-webkit-backdrop-filter:blur(24px) saturate(1.5);backdrop-filter:blur(24px) saturate(1.5);box-shadow:var(--sh-1),var(--inset);position:sticky;top:0;z-index:20}.crumb{font-size:14px;color:var(--dim);display:flex;align-items:center;gap:7px}.crumb b{color:var(--fg);font-weight:600}.main{overflow-y:auto;padding:0 2px 72px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-1)}.panel-h{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--line)}.panel-h h2{font-size:15px}.panel-b{padding:16px}.panel-f{padding:12px 16px;border-top:1px solid var(--line);background:var(--panel-2);border-radius:0 0 var(--r-lg) var(--r-lg)}.flat{box-shadow:none;border-radius:var(--r)}.sunk{background:var(--bg-sunk)}.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);padding:14px 16px 13px;position:relative;overflow:hidden;box-shadow:var(--sh-1);transition:box-shadow .15s var(--ease),transform .15s var(--ease)}.kpi:hover{box-shadow:var(--sh-2);transform:translateY(-1px)}.kpi-k{font-size:13px;color:var(--dim);font-weight:500;display:flex;align-items:center;gap:6px}.kpi-v{font-family:var(--mono);font-size:30px;font-weight:600;letter-spacing:-.03em;margin:6px 0 2px;line-height:1.05}.kpi-s{font-size:13px;color:var(--dim-2)}.kpi.p .kpi-v{color:#06785a}.kpi.ok .kpi-v{color:var(--ok)}.kpi.warn .kpi-v{color:var(--warn)}.kpi.v .kpi-v{color:var(--violet)}.kpi:after{content:"";position:absolute;right:14px;top:14px;width:6px;height:6px;border-radius:99px;background:var(--line-strong)}.kpi.p:after{background:var(--primary);box-shadow:0 0 0 4px var(--primary-soft)}.kpi.ok:after{background:var(--ok);box-shadow:0 0 0 4px var(--ok-soft)}.kpi.warn:after{background:var(--warn);box-shadow:0 0 0 4px var(--warn-soft)}.kpi.v:after{background:var(--violet);box-shadow:0 0 0 4px var(--violet-soft)}.tbl-wrap{overflow-x:auto}.tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:14px}.tbl th{position:sticky;top:0;z-index:1;background:var(--panel-2);text-align:left;font-size:12px;font-weight:600;color:var(--dim);text-transform:uppercase;letter-spacing:.06em;padding:11px 14px;border-bottom:1px solid var(--line);white-space:nowrap}.tbl td{padding:7px 12px;border-bottom:1px solid var(--line);height:48px;vertical-align:middle;font-size:13.5px}.tbl td.tiny,.tbl td .tiny{font-size:13px}.tbl td.strong,.tbl td .strong{font-size:14px}.tbl tbody tr{transition:background .12s var(--ease)}.tbl tbody tr:hover td{background:#fbfbfa}.tbl tbody tr.sel td{background:var(--primary-soft)}.tbl tbody tr:last-child td{border-bottom:0}.tbl .acts{opacity:.62;transition:opacity .15s var(--ease);display:flex;gap:6px;justify-content:flex-end}.tbl tr:hover .acts{opacity:1}.tbl a.link{color:#06785a;font-weight:500}.tbl a.link:hover{text-decoration:underline;text-underline-offset:3px}.th-sort{cursor:pointer;-webkit-user-select:none;user-select:none}.th-sort:hover{color:var(--fg)}.btn{height:34px;padding:0 14px;border-radius:var(--r);border:1px solid var(--line-strong);background:var(--panel);font-size:14px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:7px;white-space:nowrap;box-shadow:var(--sh-1);transition:background .15s var(--ease),border-color .15s var(--ease),transform .12s var(--ease)}.btn:hover{background:var(--panel-2);border-color:#c9c9c4}.btn:active{transform:scale(.985)}.btn.primary{background:var(--ink);border-color:var(--ink);color:#fff;box-shadow:0 6px 18px -8px #0000008c}.btn.primary:hover{background:#000;border-color:#000}.btn.danger{color:var(--danger);border-color:#f0c9c6;background:#fff}.btn.danger:hover{background:var(--danger-soft)}.btn.ghost{border-color:transparent;background:transparent;box-shadow:none;color:var(--dim)}.btn.ghost:hover{background:#1414120f;color:var(--fg)}.btn.sm{height:30px;padding:0 11px;font-size:13.5px;border-radius:7px}.btn.xs{height:27px;padding:0 10px;font-size:13px;border-radius:6px}.btn[disabled]{opacity:.45;cursor:not-allowed;transform:none}.btn .ic{width:15px;height:15px}.inp,.sel,.ta{height:34px;width:100%;padding:0 12px;border:1px solid var(--line-strong);border-radius:var(--r);background:var(--panel);font-size:14px;box-shadow:var(--sh-1);transition:border-color .15s var(--ease),box-shadow .15s var(--ease)}.ta{height:auto;padding:10px 12px;min-height:84px;resize:vertical;line-height:1.6}.inp:focus,.sel:focus,.ta:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 4px #00c89624}.inp::placeholder,.ta::placeholder{color:var(--dim-2)}.inp.sm{height:30px;font-size:13.5px}.tgl{width:34px;height:20px;border-radius:999px;background:#d8d8d4;border:1px solid transparent;position:relative;transition:background var(--t);cursor:pointer}.tgl i{position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:999px;background:#fff;box-shadow:var(--sh-1);transition:transform var(--t)}.tgl.on{background:var(--primary)}.tgl.on i{transform:translate(14px)}.sel{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:30px;background-image:linear-gradient(45deg,transparent 50%,var(--dim) 50%),linear-gradient(135deg,var(--dim) 50%,transparent 50%);background-position:calc(100% - 16px) 15px,calc(100% - 11px) 15px;background-size:5px 5px;background-repeat:no-repeat}.field{display:flex;flex-direction:column;gap:6px}.field>span{font-size:13px;color:var(--fg-2);font-weight:550}.chk{width:16px;height:16px;accent-color:var(--ink);cursor:pointer;margin:0;border-radius:4px}.seg{display:inline-flex;border:1px solid var(--line);border-radius:9px;overflow:hidden;background:var(--bg-sunk);padding:2px;gap:2px}.seg>button{height:28px;padding:0 12px;border:0;border-radius:7px;background:transparent;font-size:13.5px;cursor:pointer;color:var(--dim);transition:background .15s var(--ease)}.seg>button.on{background:var(--panel);color:var(--fg);font-weight:600;box-shadow:var(--sh-1)}.tag{display:inline-flex;align-items:center;gap:5px;height:23px;padding:0 9px;border-radius:6px;font-size:13px;font-weight:550;border:1px solid var(--line);background:var(--bg-sunk);color:var(--fg-2);white-space:nowrap}.tag.ok{background:var(--ok-soft);border-color:#b7ecdc;color:#06694f}.tag.warn{background:var(--warn-soft);border-color:#f0dcb4;color:#8a5a06}.tag.danger{background:var(--danger-soft);border-color:#f5cbca;color:#b32b2b}.tag.info{background:var(--info-soft);border-color:#c2dbf8;color:#1a5fae}.tag.v{background:var(--violet-soft);border-color:#ddd3fb;color:#5b3fd0}.tag.p{background:var(--primary-soft);border-color:#b7ecdc;color:#06785a}.dot{width:7px;height:7px;border-radius:99px;background:var(--dim-2);display:inline-block}.dot.ok{background:var(--ok);box-shadow:0 0 0 3px var(--ok-soft)}.dot.warn{background:var(--warn);box-shadow:0 0 0 3px var(--warn-soft)}.dot.danger{background:var(--danger);box-shadow:0 0 0 3px var(--danger-soft)}.dot.p{background:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.empty{padding:52px 20px;text-align:center;color:var(--dim);display:flex;flex-direction:column;align-items:center;gap:10px}.empty .ic{width:26px;height:26px;color:var(--dim-2)}.empty b{font-size:15px;color:var(--fg);font-weight:600}.empty span{font-size:13.5px;color:var(--dim-2);max-width:400px;line-height:1.6}.sk{background:linear-gradient(90deg,#f0f0ee 25%,#f7f7f5 37%,#f0f0ee 63%);background-size:400% 100%;animation:sk 1.4s ease infinite;border-radius:7px}@keyframes sk{0%{background-position:100% 50%}to{background-position:0 50%}}.scrim{position:fixed;top:0;right:0;bottom:0;left:0;background:#18181638;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:60;display:flex}.scrim.center{align-items:center;justify-content:center}.drawer{margin:12px 12px 12px auto;width:560px;max-width:94vw;border-radius:var(--r-xl);border:1px solid var(--glass-line);background:#ffffffe6;-webkit-backdrop-filter:blur(30px) saturate(1.6);backdrop-filter:blur(30px) saturate(1.6);box-shadow:var(--sh-3);display:flex;flex-direction:column;animation:drawerIn .22s var(--ease)}@keyframes drawerIn{0%{transform:translate(18px) scale(.99);opacity:.4}}.modal{width:500px;max-width:92vw;border-radius:var(--r-xl);border:1px solid var(--glass-line);background:#fffffff0;-webkit-backdrop-filter:blur(30px) saturate(1.6);backdrop-filter:blur(30px) saturate(1.6);box-shadow:var(--sh-3);animation:pop .18s var(--ease)}@keyframes pop{0%{transform:scale(.97);opacity:.5}}.modal-h{padding:16px 18px;border-bottom:1px solid var(--line);display:flex;align-items:center}.modal-h h2{font-size:16px}.modal-b{padding:18px}.modal-f{padding:14px 18px;border-top:1px solid var(--line);display:flex;gap:10px;justify-content:flex-end}.drawer-h{padding:16px 18px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:10px}.drawer-b{padding:18px;overflow-y:auto;flex:1}.palette{position:fixed;top:0;right:0;bottom:0;left:0;background:#18181633;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:80;display:flex;justify-content:center;padding-top:14vh}.palette-box{width:580px;max-width:92vw;height:fit-content;max-height:62vh;border-radius:var(--r-xl);overflow:hidden;border:1px solid var(--glass-line);background:#fffffff2;-webkit-backdrop-filter:blur(30px);backdrop-filter:blur(30px);box-shadow:var(--sh-3);display:flex;flex-direction:column;animation:pop .18s var(--ease)}.palette-in{height:52px;border:0;border-bottom:1px solid var(--line);padding:0 18px;font-size:15px;outline:none;background:transparent}.palette-list{overflow-y:auto;padding:8px}.palette-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:9px;font-size:14px;cursor:pointer;color:var(--fg-2)}.palette-item.on{background:var(--primary-soft);color:#06785a}.palette-foot{padding:10px 16px;border-top:1px solid var(--line);font-size:13px;color:var(--dim-2);display:flex;gap:16px}.spark{display:block;width:100%;height:34px;overflow:visible}.spark path.line{fill:none;stroke:var(--primary);stroke-width:1.8}.spark path.area{fill:var(--primary);opacity:.1}.spark .bar{fill:var(--primary);opacity:.85}.hero-chart{display:block;width:100%;height:300px}.hero-chart .grid-line{stroke:var(--line);stroke-width:1;stroke-dasharray:3 5}.hero-chart .axis{fill:var(--dim-2);font-size:12px;font-family:var(--mono)}.hero-chart .zero{stroke:var(--line-strong);stroke-width:1;stroke-dasharray:5 5}.hero-chart .band{fill:var(--primary);opacity:.1}.hero-chart .band-line{fill:none;stroke:var(--primary);stroke-width:2;stroke-linecap:round}.hero-chart .hit{fill:var(--primary);opacity:1}.donut{width:104px;height:104px}.legend{display:flex;flex-direction:column;gap:7px;font-size:13px}.legend .sw{width:9px;height:9px;border-radius:3px}.pane{padding:4px 2px 0;animation:rise .22s var(--ease) both}@keyframes rise{0%{opacity:0;transform:translateY(4px)}}.hd{display:flex;align-items:flex-end;gap:12px;margin-bottom:18px}.hd h1{font-size:28px}.hd .sub{font-size:13.5px;color:var(--dim);margin:4px 0 3px}.toolbar{display:flex;align-items:center;gap:8px;margin-bottom:14px;flex-wrap:wrap}.toolbar .inp{width:240px}.toolbar .sel{width:auto;min-width:118px}.hr{height:1px;background:var(--line);margin:16px 0}.selbar{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:var(--r-lg);background:#ffffffdb;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid var(--glass-line);box-shadow:var(--sh-3);font-size:14px}.split{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:14px;align-items:start}.shell.collapsed .brand-name,.shell.collapsed .nav-item span,.shell.collapsed .nav-group{display:none}.shell.collapsed .nav-item{justify-content:center;padding:0}@media(max-width:1140px){.split{grid-template-columns:minmax(0,1fr)}}.kv{display:grid;grid-template-columns:104px minmax(0,1fr);gap:8px 12px;font-size:14px}.kv dt{color:var(--dim);font-size:13px}.kv dd{margin:0;min-width:0}.copy{cursor:pointer;border-bottom:1px dashed var(--line-strong)}.copy:hover{color:#06785a;border-color:var(--primary)}.pager{display:flex;align-items:center;gap:8px;padding:12px 16px;font-size:13px;color:var(--dim);border-top:1px solid var(--line)}.toast{position:fixed;bottom:22px;left:50%;transform:translate(-50%);background:#141412f0;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);color:#fff;font-size:14px;padding:11px 18px;border-radius:11px;z-index:90;box-shadow:var(--sh-3);animation:rise .18s var(--ease)}.toast.err{background:#b42828f2}.login{height:100vh;display:grid;grid-template-columns:1fr 440px;gap:12px;padding:12px}@media(max-width:940px){.login{grid-template-columns:1fr}.login .art{display:none}}.login .art{border-radius:var(--r-xl);background:#0f0f0e;color:#f2f2ef;padding:44px;display:flex;flex-direction:column;justify-content:space-between;box-shadow:var(--sh-3);position:relative;overflow:hidden}.login .art:after{content:"";position:absolute;inset:auto -20% -40% auto;width:460px;height:460px;background:radial-gradient(circle,rgba(0,200,150,.3),transparent 62%);filter:blur(20px)}.login .art h2{font-size:38px;letter-spacing:-.035em;line-height:1.12;font-weight:600}.login .art p{color:#a5a59e;font-size:14px;max-width:400px;line-height:1.7}.login .art .stats{display:flex;gap:34px;font-family:var(--mono);font-size:13px;color:#86867f}.login .art .stats b{display:block;color:#f2f2ef;font-size:21px;font-weight:600}.login form{border-radius:var(--r-xl);border:1px solid var(--line);background:var(--panel);box-shadow:var(--sh-2);padding:40px 36px;display:flex;flex-direction:column;justify-content:center;gap:16px}
