:root{--page: #f6f5fb;--panel: #ffffff;--sunken: #f3f1fa;--line: #eceaf4;--line2: #f2f0f8;--strong: #d9d5e8;--ink: #17142b;--ink2: #433e5c;--ink3: #6b6685;--faint: #a7a2bd;--brand: #6a4df4;--brand2: #8b74ff;--brandsoft: #efebff;--brandink: #4b32c8;--ok: #0e7a4f;--okbg: #e6f7ef;--okfill: #12b76a;--warn: #a15c00;--warnbg: #fff4db;--warnfill: #f5a524;--bad: #c2332f;--badbg: #ffedec;--badln: #f6c4c1;--badfill: #e5484d;--sky: #0b6bcb;--skybg: #e7f1fd;--rose: #c4316c;--rosebg: #fdecf3;--series-1: #6a4df4;--series-crit: #e5484d;--grid: #eceaf4;--shadow: 0 1px 2px #17142b08, 0 10px 28px -20px #4b32c840;--float: 0 1px 2px #17142b0d, 0 28px 56px -24px #17142b59;--ease: cubic-bezier(.16, 1, .3, 1)}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--page);color:var(--ink);font:400 15px/1.5 Plus Jakarta Sans,Helvetica Neue,Arial,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}a{color:var(--brandink);text-underline-offset:4px}::selection{background:var(--brandsoft)}:focus-visible{outline:2px solid var(--brand);outline-offset:3px;border-radius:6px}.mono{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:12.5px}.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.app{display:grid;grid-template-columns:272px minmax(0,1fr);gap:20px;padding:16px;min-height:100vh}.side{background:linear-gradient(180deg,#fff,#fbfaff);border:1px solid var(--line);border-radius:28px;box-shadow:var(--shadow);padding:20px 14px 14px;display:flex;flex-direction:column;gap:4px;position:sticky;top:16px;height:calc(100vh - 32px);overflow-y:auto}.brand{display:flex;align-items:center;gap:10px;font-weight:800;font-size:22px;letter-spacing:-.04em;padding:0 8px 6px;color:var(--ink)}.dj{width:30px;height:30px;border-radius:50%;background:linear-gradient(140deg,var(--brand2),var(--brand));box-shadow:0 4px 12px -4px #6a4df480;position:relative;flex:none}.dj:before,.dj:after{content:"";position:absolute;top:10px;width:3px;height:10px;border-radius:2px;background:#fff}.dj:before{left:10px}.dj:after{right:10px}.brand small{display:none}.rolepill{display:inline-flex;align-items:center;gap:7px;align-self:flex-start;margin:6px 8px 10px;background:var(--brandsoft);color:var(--brandink);border-radius:999px;padding:4px 12px;font-size:12px;font-weight:700}.rolepill i{width:6px;height:6px;border-radius:50%;background:var(--brand)}.navlabel{font-size:12px;font-weight:600;color:var(--faint);padding:14px 14px 6px}a.nav{display:flex;align-items:center;gap:12px;padding:0 10px 0 14px;min-height:46px;border-radius:999px;color:var(--ink2);text-decoration:none;font-weight:600;font-size:15px;transition:background .2s var(--ease),color .2s var(--ease)}a.nav:hover{background:var(--sunken);color:var(--brandink)}a.nav.on{background:linear-gradient(135deg,var(--brand2),var(--brand));color:#fff;box-shadow:0 10px 22px -12px var(--brand)}a.nav svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}.ct{margin-left:auto;min-width:26px;height:26px;padding:0 8px;border-radius:999px;display:grid;place-items:center;font-size:13px;font-weight:700;background:var(--sunken);color:var(--ink);font-variant-numeric:tabular-nums}a.nav .ct.hot{background:var(--badfill);color:#fff}a.nav.on .ct,a.nav.on .ct.hot{background:#fff;color:var(--bad)}.sidefoot{margin-top:auto;padding:12px 6px 2px;border-top:1px solid var(--line);font-size:13px;color:var(--ink3);display:flex;gap:10px;align-items:center}.sidefoot b{display:block;color:var(--ink);font-weight:700;font-size:14px}.avatar{width:36px;height:36px;border-radius:50%;background:var(--brandsoft);display:grid;place-items:center;font-weight:700;color:var(--brandink);font-size:12px;flex:none}.out{border:1px solid var(--line);background:var(--panel);border-radius:999px;padding:0 14px;height:36px;font-size:13px;font-weight:600;color:var(--bad)}.out:hover{background:var(--badbg)}.mainwrap{min-width:0;display:flex;flex-direction:column}.main{padding:4px 8px 56px;display:flex;flex-direction:column;gap:20px;max-width:1360px;width:100%}.phead{display:flex;align-items:center;gap:12px;flex-wrap:wrap;min-height:64px}.phead h1{margin:0;font-size:clamp(28px,3vw,38px);font-weight:800;letter-spacing:-.035em;line-height:1.1}.countpill{display:inline-flex;align-items:center;gap:8px;height:36px;padding:0 14px;border-radius:999px;background:var(--okbg);color:var(--ok);font-size:14px;font-weight:700}.countpill i{width:7px;height:7px;border-radius:50%;background:var(--okfill);box-shadow:0 0 0 3px #12b76a2e}.countpill.demo{color:var(--warn);background:var(--warnbg)}.countpill.demo i{background:var(--warnfill);box-shadow:0 0 0 3px #f5a5242e}.phead .spacer{flex:1}.clock{font-size:13px;font-weight:600;color:var(--ink3);font-variant-numeric:tabular-nums}.iconbtn{width:44px;height:44px;border-radius:50%;border:1px solid var(--line);background:var(--panel);display:grid;place-items:center;box-shadow:var(--shadow);color:var(--ink2)}.iconbtn:hover{background:var(--brandsoft);color:var(--brandink)}.iconbtn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.lead{margin:-14px 0 0;color:var(--ink2);font-size:15px;max-width:72ch}.grid{display:grid;gap:16px}.g4{grid-template-columns:repeat(4,minmax(0,1fr))}.g3{grid-template-columns:repeat(3,minmax(0,1fr))}.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.g12{grid-template-columns:minmax(0,1fr) minmax(0,1.3fr)}.g21{grid-template-columns:minmax(0,1.6fr) minmax(0,1fr)}.top{align-items:start}@media(max-width:1200px){.g4{grid-template-columns:repeat(2,minmax(0,1fr))}.g3,.g12,.g21{grid-template-columns:minmax(0,1fr)}}@media(max-width:860px){.app{grid-template-columns:minmax(0,1fr);padding:10px}.side{position:static;height:auto}.g4,.g2{grid-template-columns:minmax(0,1fr)}}.card{background:var(--panel);border:1px solid var(--line);border-radius:24px;box-shadow:var(--shadow);padding:22px;display:flex;flex-direction:column;gap:14px;min-width:0}.card h2{margin:0;font-size:19px;font-weight:700;letter-spacing:-.015em}.ch{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.ch h2{margin-right:auto}.ch.tight{gap:6px;margin-bottom:6px}.k{font-size:13px;color:var(--ink3)}.card>.k:first-child{font-size:13px;font-weight:600;color:var(--ink2)}.big{font-size:clamp(24px,2.2vw,30px);font-weight:800;letter-spacing:-.03em;line-height:1;font-variant-numeric:tabular-nums}.big.md{font-size:22px}.delta{font-size:13px;color:var(--ink2)}.up{color:var(--ok);font-weight:600}.down{color:var(--bad);font-weight:600}.note{font-size:13px;color:var(--ink3);margin:0}.sub{margin:6px 0 0;font-size:15px;font-weight:600}.grow{flex:1;min-width:0}.min{min-width:220px}.right{text-align:right}.strong{font-weight:600}.wrap{flex-wrap:wrap}.stack{display:flex;flex-direction:column;gap:14px}.kpi{position:relative;padding-right:72px}.kpi .chip{position:absolute;top:18px;right:18px;width:42px;height:42px;border-radius:14px;display:grid;place-items:center}.kpi .chip svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}.chip.violet{background:var(--brandsoft);color:var(--brand)}.chip.green{background:var(--okbg);color:var(--ok)}.chip.amber{background:var(--warnbg);color:var(--warn)}.chip.rose{background:var(--rosebg);color:var(--rose)}.chip.sky{background:var(--skybg);color:var(--sky)}.kpi.alert{border-color:var(--badln);background:linear-gradient(180deg,#fff6f5,#fff 65%)}.kpi.alert .big{color:var(--bad)}.tag{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;border-radius:999px;padding:0 10px;height:26px;white-space:nowrap;background:var(--sunken);color:var(--ink2)}.tag:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.tag.ok{color:var(--ok);background:var(--okbg)}.tag.warn{color:var(--warn);background:var(--warnbg)}.tag.bad{color:var(--bad);background:var(--badbg)}.tag.acc{color:var(--brandink);background:var(--brandsoft)}.tag.mute{color:var(--ink3);background:var(--sunken)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--line);font-size:14px;font-weight:600;border-radius:999px;padding:0 18px;height:44px;background:var(--panel);color:var(--ink);white-space:nowrap;text-decoration:none;transition:background .2s var(--ease),border-color .2s var(--ease)}.btn:hover{background:var(--sunken)}.btn.dark{background:var(--brand);border-color:var(--brand);color:#fff;box-shadow:0 10px 20px -12px var(--brand)}.btn.dark:hover{background:var(--brandink);border-color:var(--brandink)}.btn.danger{color:var(--bad);border-color:var(--badln)}.btn.danger:hover{background:var(--badbg)}.modal .btn.danger,.banner .btn.danger{background:var(--badfill);border-color:var(--badfill);color:#fff}.btn[disabled]{opacity:.45;cursor:not-allowed;box-shadow:none}.lnk{border:0;background:none;padding:0;color:var(--brandink);font-weight:700;text-decoration:none}.lnk:hover{text-decoration:underline}.card a.delta{color:var(--brandink);font-weight:600}.scroll{overflow-x:auto;margin:0 -22px}.scroll .tbl th:first-child,.scroll .tbl td:first-child{padding-left:22px}.scroll .tbl th:last-child,.scroll .tbl td:last-child{padding-right:22px}.tbl{width:100%;border-collapse:collapse;font-size:14px}.tbl th{text-align:left;font-size:13px;font-weight:600;color:var(--ink3);padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap}.tbl td{padding:12px;border-bottom:1px solid var(--line2);vertical-align:middle}.tbl tbody tr:last-child td{border-bottom:0}.tbl tbody tr:hover td{background:#faf9fe}.tbl tr.sel td{background:var(--brandsoft)}.tbl tr.sel td:first-child{box-shadow:inset 3px 0 0 var(--brand)}.tbl .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.tbl td .k{margin-top:2px;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--line2)}.row:last-child{border-bottom:0;padding-bottom:0}.row b{display:block;font-weight:600}.row .k{display:block}.row.wrap{flex-wrap:wrap}.sw{width:44px;height:26px;border-radius:999px;border:0;position:relative;background:var(--badfill);flex:none;padding:0}.sw:after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #0003;transition:left .2s var(--ease)}.sw.on{background:var(--okfill)}.sw.on:after{left:21px}.sw.wait{background:var(--warnfill);cursor:wait}.meter{height:10px;border-radius:999px;background:var(--sunken);overflow:hidden}.meter i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--brand2),var(--brand))}.meter i.bad{background:linear-gradient(90deg,#ff8a80,var(--badfill))}.meter i.warn{background:linear-gradient(90deg,#ffc861,var(--warnfill))}.meter i.ok{background:linear-gradient(90deg,#4ade9b,var(--okfill))}.f{display:flex;flex-direction:column;gap:6px;font-size:14px;font-weight:600;color:var(--ink2)}.f input,.f select,.f textarea{font-size:15px;font-weight:400;border:1px solid var(--line);border-radius:12px;padding:0 14px;background:var(--panel);color:var(--ink);height:46px}.f textarea{height:auto;min-height:88px;padding:12px 14px;resize:vertical}.f input:focus,.f select:focus,.f textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 4px #6a4df41f}.f.inline{flex-direction:row;align-items:center}.f.inline select{min-width:160px;height:40px;border-radius:999px}.f.search input{height:42px;border-radius:999px;background:var(--sunken);border-color:transparent;width:min(260px,60vw);padding-left:18px}.row-check{flex-direction:row;align-items:center;gap:10px;font-weight:500}.row-check input{width:18px;height:18px;accent-color:var(--brand)}input[type=range]{accent-color:var(--brand);padding:0;border:0;height:28px}fieldset.seg{border:0;margin:0;min-width:0}.seg{display:inline-flex;align-self:flex-start;background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:5px;gap:4px;flex-wrap:wrap;box-shadow:var(--shadow)}.seg button{border:0;background:transparent;font-size:14px;font-weight:600;border-radius:999px;padding:0 16px;height:38px;color:var(--ink2);transition:background .2s var(--ease)}.seg button:hover{background:var(--sunken)}.seg button.on{background:var(--brand);color:#fff}.card .seg{box-shadow:none;background:var(--sunken);border-color:transparent}.card .seg button.on{background:var(--panel);color:var(--brandink);box-shadow:0 1px 2px #17142b1a}.empty{display:flex;flex-direction:column;gap:3px;padding:18px;border-radius:16px;background:var(--sunken);color:var(--ink3);font-size:13.5px}.empty b{color:var(--ink);font-size:15px}.empty.err{background:var(--badbg);color:var(--bad)}.empty.err b{color:var(--bad)}.result{background:var(--sunken);border-radius:16px;padding:16px;display:flex;flex-direction:column;gap:6px}.banner{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--badbg);border:1px solid var(--badln);color:var(--bad);border-radius:20px;padding:14px 20px;font-size:15px}.banner b{margin-right:auto;font-weight:600}.dot{width:8px;height:8px;border-radius:50%;flex:none}.dot.bad{background:var(--badfill);box-shadow:0 0 0 3px #e5484d22}.dot.ok{background:var(--okfill);box-shadow:0 0 0 3px #12b76a22}.tl{display:flex;flex-direction:column;margin:4px 0 0;padding:0;list-style:none}.tl .st{display:flex;gap:14px;padding-bottom:16px;position:relative}.tl .st:before{content:"";position:absolute;left:12px;top:28px;bottom:2px;width:2px;border-radius:1px;background:var(--line)}.tl .st:last-child:before{display:none}.tl .n{width:26px;height:26px;border-radius:50%;background:var(--okbg);color:var(--ok);display:grid;place-items:center;font-size:12px;font-weight:700;flex:none}.tl .n.cur{background:var(--brand);color:#fff;box-shadow:0 0 0 4px var(--brandsoft)}.tl .st b{display:block;font-size:15px;font-weight:600}.tl .st span{font-size:13px;color:var(--ink3)}.chart{position:relative;width:100%}.chart svg{display:block;overflow:visible}.chart .axis{fill:var(--ink3);font-size:12px;font-variant-numeric:tabular-nums}.chart .gridline{stroke:var(--grid);stroke-width:1}.chart .cap{stroke:var(--badfill);stroke-width:1.5;stroke-dasharray:5 4}.chart .caplabel{fill:var(--bad);font-size:12px;font-weight:600}.chart .label{fill:var(--ink);font-size:12.5px;font-weight:700}.chart .cross{stroke:var(--strong);stroke-width:1}.tip{position:absolute;top:0;z-index:3;pointer-events:none;transform:translate(-50%);background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:var(--float);padding:8px 12px;font-size:12.5px;white-space:nowrap}.tip b{display:block;font-size:14px;font-variant-numeric:tabular-nums}.tip .r{display:flex;align-items:center;gap:6px;color:var(--ink2)}.tip .r i,.legend i{width:10px;height:10px;border-radius:3px;flex:none}.legend{display:flex;gap:16px;flex-wrap:wrap;font-size:13px;color:var(--ink2);font-weight:600}.legend span{display:inline-flex;align-items:center;gap:7px}.hbars{display:flex;flex-direction:column;gap:10px}.hbar{display:grid;grid-template-columns:120px minmax(0,1fr) 70px;align-items:center;gap:12px;font-size:13.5px}.hbar .bar{height:12px;border-radius:4px;background:var(--sunken);overflow:hidden}.hbar .bar i{display:block;height:100%;border-radius:4px}.hbar b{text-align:right;font-variant-numeric:tabular-nums}.tabletoggle{border:1px solid var(--line);background:var(--panel);border-radius:999px;height:34px;padding:0 12px;font-size:13px;font-weight:600;color:var(--ink2)}.tabletoggle:hover,.tabletoggle[aria-pressed=true]{background:var(--brandsoft);color:var(--brandink);border-color:transparent}.modal{position:fixed;top:0;right:0;bottom:0;left:0;background:#17142bcc;display:flex;align-items:center;justify-content:center;padding:16px;z-index:10}dialog.sheet{position:static;border:0;margin:0;color:inherit}.sheet{background:var(--panel);border-radius:28px;padding:28px;width:min(500px,100%);display:flex;flex-direction:column;gap:16px;box-shadow:var(--float)}.sheet h3{margin:0;font-size:22px;font-weight:800;letter-spacing:-.025em}.sheet p{margin:0;color:var(--ink2)}.toast{position:fixed;right:24px;bottom:24px;background:#1e1838;color:#fff;border-radius:14px;padding:12px 18px;font-weight:600;font-size:14px;z-index:11;display:flex;gap:10px;align-items:center;box-shadow:var(--float)}.toast i{width:8px;height:8px;border-radius:50%;background:#4cc38a}.toast.err i{background:#ff8a8d}@media(prefers-reduced-motion:no-preference){.toast{animation:up .4s var(--ease)}@keyframes up{0%{transform:translateY(18px);opacity:0}}}.login{min-height:100vh;display:grid;place-items:center;padding:20px;background:radial-gradient(60% 50% at 50% 0%,#efebff,var(--page))}.loginbox{width:min(440px,100%);padding:36px;gap:16px;border-radius:28px}.loginbox h1{margin:24px 0 0;font-size:28px;font-weight:800;letter-spacing:-.03em}.brand.dark{padding:0}.formerr{margin:0;color:var(--bad);font-size:14px}.login{min-height:100vh;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:16px;padding:16px;background:var(--page);place-items:stretch}.loginside{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:40px 24px;position:relative}.loginbox{width:min(420px,100%);display:flex;flex-direction:column;gap:16px}.loginbox h1{margin:28px 0 0;font-size:clamp(28px,3vw,36px);font-weight:800;letter-spacing:-.035em;line-height:1.1}.loginbox .btn{width:100%;height:48px}.loginfoot{position:absolute;bottom:20px;margin:0;font-size:12.5px;color:var(--faint)}.art{position:relative;border-radius:28px;overflow:hidden;min-height:calc(100vh - 32px);background:#1b1240;isolation:isolate}.art-svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:-1}.art-cards{position:absolute;top:9%;left:8%;right:8%;display:flex;flex-direction:column;gap:14px;align-items:flex-start}.glass{display:flex;align-items:center;gap:12px;padding:14px 18px;border-radius:18px;color:#fff;background:#ffffff1f;border:1px solid rgba(255,255,255,.22);backdrop-filter:blur(14px) saturate(140%);-webkit-backdrop-filter:blur(14px) saturate(140%);box-shadow:0 20px 40px -24px #0a0428cc;max-width:340px}.glass b{display:block;font-size:15px;font-weight:700}.glass small{display:block;font-size:13px;opacity:.82}.glass .gbig{font-size:26px;font-weight:800;letter-spacing:-.03em;font-variant-numeric:tabular-nums}.glass svg{width:120px;height:36px}.glass.gc2{margin-left:18%}.glass.gc3{margin-left:6%;gap:24px}.gdot{width:10px;height:10px;border-radius:50%;flex:none}.gdot.ok{background:#4ade9b;box-shadow:0 0 0 4px #4ade9b40}.gdot.bad{background:#ff8a80;box-shadow:0 0 0 4px #ff8a8040}.art-caption{position:absolute;left:8%;right:8%;bottom:7%;color:#fff;display:flex;flex-direction:column;gap:4px}.art-caption b{font-size:clamp(22px,2.4vw,30px);font-weight:800;letter-spacing:-.03em}.art-caption span{font-size:15px;opacity:.85;max-width:42ch}@media(prefers-reduced-motion:no-preference){.glass{animation:floatin .8s var(--ease) both}.glass.gc2{animation-delay:.12s}.glass.gc3{animation-delay:.24s}@keyframes floatin{0%{opacity:0;transform:translateY(18px)}}}@media(max-width:900px){.login{grid-template-columns:minmax(0,1fr)}.art{min-height:360px;order:-1}.art-cards .gc2,.art-cards .gc3{display:none}}
