:root{--bg:#f5f6f8;--panel:#fff;--ink:#1a1a1a;--muted:#8a8f99;--line:#e7e9ed;--brand:#2f6bff;--brand-2:#1f57e8;--brand-soft:#eaf0ff;--brand-ink:#1e4fd0;--ok:#2f6bff;--ok-soft:#eaf0ff;--warn:#d48806;--warn-soft:#fff7e8;--danger:#e5484d;--danger-soft:#fff1f0;--info:#1677ff;--info-soft:#e8f3ff;--gray:#8a8f99;--gray-soft:#f2f3f5;--radius:8px;--shadow:0 1px 2px #1618230a}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Noto Sans SC,sans-serif;font-size:14px;line-height:1.55}::selection{background:#dce6ff}a{color:var(--brand);text-decoration:none}ul{margin:6px 0 10px;padding-left:1.35em}li{margin:3px 0}code{background:var(--gray-soft);color:#3b3f55;border-radius:5px;padding:1px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.88em}#login-view{background:#fff;grid-template-columns:minmax(360px,42%) 1fr;min-height:100vh;display:grid}.login-brand{color:#fff;background:linear-gradient(165deg,#163a8c 0%,#2f6bff 62%,#6d94ff 100%);flex-direction:column;justify-content:center;padding:64px 56px;display:flex}.login-brand .mark{width:44px;height:44px;color:var(--brand-ink);background:#fff;border-radius:10px;justify-content:center;align-items:center;margin-bottom:28px;font-size:20px;font-weight:700;display:flex}.login-brand h1{letter-spacing:-.02em;font-size:32px;font-weight:650;line-height:1.25}.login-brand p{color:#ffffffe0;max-width:380px;margin-top:14px;font-size:15px;line-height:1.7}.login-brand ul{margin:28px 0 0;padding:0;list-style:none}.login-brand li{color:#ffffffeb;padding:7px 0 7px 16px;font-size:14px;position:relative}.login-brand li:before{content:"";background:#fff;border-radius:50%;width:6px;height:6px;position:absolute;top:15px;left:0}.login-panel{background:#f7f8fa;justify-content:center;align-items:center;padding:40px 24px;display:flex}.login-card{border:1px solid var(--line);background:#fff;border-radius:12px;width:420px;padding:36px 36px 28px;box-shadow:0 8px 28px #1618230f}.login-card .eyebrow{color:var(--brand-ink);letter-spacing:.08em;margin-bottom:8px;font-size:12px;font-weight:650}.login-card h1{letter-spacing:-.02em;font-size:22px;font-weight:650}.login-card .sub{color:var(--muted);margin:8px 0 24px;font-size:13px}.login-foot{color:var(--muted);margin-top:14px;font-size:12px;line-height:1.6}@media (max-width:860px){#login-view{grid-template-columns:1fr}.login-brand{display:none}}#app-view{flex-direction:column;min-height:100vh;display:none}#app-view.on{display:flex}.topbar{height:56px;color:var(--ink);z-index:50;border-bottom:1px solid var(--line);background:#fff;align-items:center;padding:0 20px;display:flex;position:sticky;top:0}.topbar .logo{background:var(--brand);color:#fff;border-radius:7px;justify-content:center;align-items:center;width:28px;height:28px;margin-right:10px;font-size:14px;font-weight:700;display:flex}.topbar .name{letter-spacing:-.01em;font-size:15px;font-weight:650}.topbar .name small{color:var(--muted);margin-top:1px;font-size:11px;font-weight:400;display:block}.topbar .viewbadge{background:var(--gray-soft);color:#3d424d;border-radius:4px;margin-left:14px;padding:2px 8px;font-size:12px;font-weight:600}.topbar .viewbadge.admin{background:var(--warn-soft);color:#ad6800}.topbar .viewbadge.user{background:var(--ok-soft);color:var(--brand-ink)}.topbar .right{color:#3d424d;align-items:center;gap:12px;margin-left:auto;font-size:13px;display:flex}.topbar .right .avatar{background:var(--brand-soft);width:28px;height:28px;color:var(--brand-ink);border-radius:50%;justify-content:center;align-items:center;font-size:12px;font-weight:700;display:flex}.shell{min-height:calc(100vh - 56px);display:flex}.menu{border-right:1px solid var(--line);background:#fff;flex:0 0 208px;width:208px;padding:12px 10px}.menu .m-item{color:#3d424d;cursor:pointer;border-radius:6px;align-items:center;gap:8px;margin:1px 0;padding:8px 12px;font-size:13.5px;display:flex;position:relative}.menu .m-item:hover{background:#f5f6f8}.menu .m-item.active{background:var(--brand-soft);color:var(--brand-ink);font-weight:650}.menu .m-item .n{color:#fff;background:#ff4d4f;border-radius:10px;margin-left:auto;padding:0 6px;font-size:11px;font-weight:650;line-height:16px}.menu .m-group{color:#9aa0b8;letter-spacing:.12em;padding:14px 13px 4px;font-size:11px}.content{flex:1;min-width:0;padding:20px 28px 56px}.page{display:none}.page.active{animation:.18s fadein;display:block}@keyframes fadein{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.phead{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:14px;margin-bottom:18px;display:flex}.phead h2{letter-spacing:-.01em;flex-wrap:wrap;align-items:center;gap:8px;font-size:18px;font-weight:650;display:flex}.phead .desc{color:var(--muted);margin-top:4px;font-size:13px}.crumb{color:var(--muted);margin-bottom:6px;font-size:12.5px}.crumb a{color:var(--muted);cursor:pointer}.crumb a:hover{color:var(--brand)}.phead .actions{align-items:center;gap:8px;display:flex}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:none;margin:12px 0;padding:16px 18px}.card-h{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;display:flex}.card-h b{font-size:14.5px}.grid2{grid-template-columns:1fr 1fr;gap:14px;display:grid}.grid3{grid-template-columns:repeat(3,1fr);gap:14px;display:grid}@media (max-width:1000px){.grid2,.grid3{grid-template-columns:1fr}}.stats{grid-template-columns:repeat(5,1fr);gap:13px;margin:6px 0 14px;display:grid}@media (max-width:1100px){.stats{grid-template-columns:repeat(2,1fr)}}.stat{background:var(--panel);border:1px solid var(--line);box-shadow:none;cursor:default;border-radius:8px;padding:14px 16px 12px}.stat .ic{display:none}.stat .v{font-variant-numeric:tabular-nums;letter-spacing:-.03em;margin:6px 0 2px;font-size:26px;font-weight:650;line-height:1.1}.stat .l{color:var(--muted);font-size:11.5px}.stat .d{margin-top:4px;font-size:11px}.stat .d.up{color:var(--ok)}.stat .d.down{color:var(--danger)}.stat.warn .v{color:var(--warn)}.stat.click{cursor:pointer}.stat.click:hover{border-color:var(--brand)}.twrap{background:var(--panel);border:1px solid var(--line);box-shadow:none;border-radius:8px;margin:12px 0;overflow-x:auto}table{border-collapse:collapse;background:var(--panel);width:100%;font-size:13px}th,td{text-align:left;vertical-align:middle;white-space:nowrap;border-bottom:1px solid #f0f1f3;padding:11px 14px}th{color:#6b707a;background:#fafbfc;font-size:12px;font-weight:600}tr:last-child td{border-bottom:none}tr:hover td{background:#f6f8ff}td.wrap{white-space:normal;min-width:200px}tr.dying td{background:#fffaf3}.pill{white-space:nowrap;border-radius:4px;align-items:center;gap:5px;padding:1px 8px;font-size:12px;font-weight:600;display:inline-flex}.pill:before{content:"";background:currentColor;border-radius:50%;width:6px;height:6px}.pill.ok{background:var(--ok-soft);color:var(--ok)}.pill.warn{background:var(--warn-soft);color:var(--warn)}.pill.danger{background:var(--danger-soft);color:var(--danger)}.pill.info{background:var(--info-soft);color:var(--info)}.pill.gray{background:var(--gray-soft);color:var(--gray)}.tag{background:var(--gray-soft);color:#3d424d;white-space:nowrap;border-radius:4px;margin:2px 4px 2px 0;padding:0 6px;font-size:12px;line-height:20px;display:inline-block}.tag.brand{background:var(--brand-soft);color:var(--brand)}.tag.ok{background:var(--ok-soft);color:var(--ok)}.tag.warn{background:var(--warn-soft);color:var(--warn)}.btn{cursor:pointer;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;gap:4px;height:32px;padding:0 14px;font-family:inherit;font-size:13px;font-weight:600;transition:background .15s,border-color .15s;display:inline-flex}.btn.primary{background:var(--brand);color:#fff}.btn.primary:hover{background:var(--brand-2)}.btn.ghost{color:#1a1a1a;background:#fff;border-color:#d9dce3}.btn.ghost:hover{border-color:var(--brand);color:var(--brand-ink)}.btn.danger{color:var(--danger);background:#fff;border-color:#ffccc7}.btn.danger:hover{background:var(--danger-soft)}.btn.warn{color:#ad6800;background:#fff;border-color:#ffe1b3}.btn.warn:hover{background:var(--warn-soft)}.btn.sm{border-radius:4px;height:26px;padding:0 10px;font-size:12px}.btns{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.btn.linklike{color:var(--brand);background:0 0;border:none;padding:2px 4px;font-weight:600}.tabs{border-bottom:1px solid var(--line);gap:4px;margin:6px 0 14px;display:flex}.tabs .t{color:var(--muted);cursor:pointer;-webkit-user-select:none;user-select:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:8px 15px;font-size:13px}.tabs .t:hover{color:var(--ink)}.tabs .t.active{color:var(--brand-ink);border-color:var(--brand);font-weight:650}.tabs .t .n{background:var(--gray-soft);color:#4d5468;border-radius:999px;margin-left:4px;padding:0 6px;font-size:10.5px}.tabs .t.active .n{background:var(--brand-soft);color:var(--brand-ink)}.tabpane{display:none}.tabpane.active{display:block}.prog{background:var(--gray-soft);border-radius:999px;min-width:80px;height:7px;overflow:hidden}.prog i{background:var(--brand);border-radius:999px;height:100%;display:block}.prog i.ok{background:var(--brand)}.prog i.warn{background:#faad14}.prog i.danger{background:#ff4d4f}.barchart{align-items:flex-end;gap:12px;height:140px;padding:6px 2px 0;display:flex}.barchart .bcol{flex-direction:column;flex:1;justify-content:flex-end;align-items:center;gap:5px;height:100%;display:flex}.barchart .bar{background:var(--brand);border-radius:3px 3px 0 0;width:56%;max-width:28px}.barchart .bl{color:var(--muted);font-size:10.5px}.barchart .bv{color:var(--muted);font-size:10px}.rank{flex-direction:column;gap:9px;display:flex}.rank .row{align-items:center;gap:10px;font-size:13px;display:flex}.rank .row .no{background:var(--gray-soft);width:20px;height:20px;color:var(--muted);border-radius:6px;flex:0 0 20px;justify-content:center;align-items:center;font-size:11px;font-weight:700;display:flex}.rank .row:first-child .no{background:var(--warn-soft);color:var(--warn)}.rank .row .nm{white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.rank .row .vv{color:var(--muted);white-space:nowrap;font-size:12px}.note{background:var(--info-soft);color:#28456e;border:1px solid #cdddff;border-radius:11px;align-items:flex-start;gap:10px;margin:12px 0;padding:11px 14px;font-size:13px;display:flex}.note.warn{background:var(--warn-soft);color:#7a5514;border-color:#ecd9ae}.note.danger{background:var(--danger-soft);color:#8f2219;border-color:#f2c4c1}.hgrid{grid-template-columns:repeat(4,1fr);gap:13px;margin:12px 0;display:grid}@media (max-width:1080px){.hgrid{grid-template-columns:repeat(2,1fr)}}@media (max-width:640px){.hgrid{grid-template-columns:1fr}}.hcard{background:var(--panel);border:1px solid var(--line);box-shadow:none;cursor:pointer;border-radius:8px;transition:border-color .15s,box-shadow .15s;overflow:hidden}.hcard:hover{border-color:#c9d6ff;box-shadow:0 6px 16px #2f6bff14}.cover{justify-content:center;align-items:center;height:120px;font-size:28px;display:flex;position:relative}.cover .portrait,#d-emoji{color:#1a1a1a;letter-spacing:0;background:#fffffff0;border-radius:50%;justify-content:center;align-items:center;width:56px;height:56px;font-size:20px;font-weight:650;display:inline-flex;box-shadow:0 4px 14px #0000001f}.cover .state{position:absolute;top:10px;left:10px}.cover .run{color:#1a1a1a;background:#fffffff0;border-radius:4px;padding:2px 8px;font-size:12px;font-weight:600;position:absolute;bottom:10px;right:10px}.cover .run b{color:var(--brand-ink);font-weight:700}.hcard .body{padding:12px 14px 14px}.hcard .name{align-items:center;gap:6px;font-size:14px;font-weight:650;display:flex}.hcard .desc{color:var(--muted);min-height:36px;margin:4px 0 7px;font-size:12px;line-height:1.5}.hcard .ops{flex-wrap:wrap;gap:6px;margin-top:9px;display:flex}.chatpanel{background:var(--panel);border:1px solid var(--line);height:440px;box-shadow:none;border-radius:8px;flex-direction:column;display:flex;overflow:hidden}.chathead{border-bottom:1px solid var(--line);background:#fafbfe;justify-content:space-between;align-items:center;gap:8px;padding:11px 15px;display:flex}.chatbody{background:#f7f8fc;flex-direction:column;flex:1;gap:11px;padding:15px;display:flex;overflow-y:auto}.msg{border-radius:13px;max-width:80%;padding:9px 13px;font-size:13.5px;line-height:1.55;position:relative}.msg .who{color:var(--muted);margin-bottom:2px;font-size:10.5px;display:block}.msg.user{color:#1a2b4d;background:#eef3ff;border:1px solid #d5e2ff;border-bottom-right-radius:4px;align-self:flex-end}.msg.user .who{color:#5c7299}.msg.bot{border:1px solid var(--line);background:#fff;border-bottom-left-radius:4px;align-self:flex-start}.msg.sys{background:var(--gray-soft);color:var(--muted);border-radius:999px;align-self:center;max-width:100%;padding:3px 12px;font-size:11.5px}.msg .typing span{background:#aab1c6;border-radius:50%;width:5px;height:5px;margin:0 1px;animation:1s infinite blink;display:inline-block}.msg .typing span:nth-child(2){animation-delay:.2s}.msg .typing span:nth-child(3){animation-delay:.4s}@keyframes blink{0%,to{opacity:.25}50%{opacity:1}}.chatinput{border-top:1px solid var(--line);background:#fff;gap:8px;padding:11px;display:flex}.chatinput input{border:1px solid var(--line);border-radius:9px;outline:none;flex:1;padding:9px 12px;font-family:inherit;font-size:13.5px}.chatinput input:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}.kv{grid-template-columns:88px 1fr;gap:6px 12px;margin:8px 0;font-size:13px;display:grid}.kv .k{color:var(--muted)}.frow{margin:13px 0}.frow label{margin-bottom:6px;font-size:12.5px;font-weight:650;display:block}.frow label .req{color:var(--danger)}.frow .hint{color:var(--muted);margin-top:5px;font-size:11.5px;font-weight:400}.inp{width:100%;color:var(--ink);background:#fff;border:1px solid #d9dce3;border-radius:6px;outline:none;height:34px;padding:8px 12px;font-family:inherit;font-size:13px}textarea.inp{height:auto}.inp:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}.inp::placeholder{color:#aab1c6}.radioline{flex-wrap:wrap;gap:9px;display:flex}.radiocard{color:#3d424d;cursor:pointer;-webkit-user-select:none;user-select:none;background:#fff;border:1px solid #d9dce3;border-radius:6px;padding:6px 12px;font-size:13px}.radiocard:hover{border-color:var(--brand)}.radiocard.sel{border-color:var(--brand);background:var(--brand-soft);color:var(--brand-ink);font-weight:650}.checkline{color:#3d4257;align-items:flex-start;gap:7px;margin:10px 0;font-size:12.5px;display:flex}.modal{z-index:100;background:#16182373;justify-content:center;align-items:center;padding:20px;display:none;position:fixed;inset:0}.modal.open{display:flex}.modal .mbox{background:#fff;border-radius:10px;width:100%;max-width:480px;animation:.16s pop;overflow:hidden;box-shadow:0 16px 48px #1618232e}@keyframes pop{0%{opacity:0;transform:scale(.96)translateY(8px)}to{opacity:1;transform:none}}.mbox .mhead{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:15px 20px;font-size:15px;font-weight:650;display:flex}.mbox .mclose{cursor:pointer;color:var(--muted);border-radius:6px;padding:2px 6px;font-size:16px;line-height:1}.mbox .mclose:hover{background:var(--gray-soft);color:var(--ink)}.mbox .mbody{max-height:65vh;padding:18px 20px;overflow-y:auto}.mbox .mfoot{border-top:1px solid var(--line);background:#fafbfc;justify-content:flex-end;gap:8px;padding:12px 20px;display:flex}.code{color:#e6e8ee;white-space:pre;background:#1c212b;border-radius:8px;margin:12px 0;padding:14px 16px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:1.75;overflow-x:auto}.code .c{color:#6f7aa8}.code .s{color:#a5e08f}.code .m{color:#ffd479}.arch{flex-wrap:wrap;align-items:center;gap:10px;margin:14px 0;display:flex}.arch .box{border:1px solid var(--line);background:var(--panel);box-shadow:none;border-radius:8px;padding:12px 14px}.arch .box b{margin-bottom:3px;font-size:13px;display:block}.arch .box p{color:var(--muted);font-size:11px}.arch .box.ext{background:#f7f8ff;border-style:dashed;border-color:#b9c1e8}.arch .arr{color:#aab1c6;font-size:14px;font-weight:700}.arch .arr small{color:var(--muted);font-size:10px;font-weight:400;display:block}.flow{flex-wrap:wrap;align-items:stretch;margin:14px 0;display:flex}.flow .step{background:var(--panel);border:1px solid var(--line);min-width:160px;box-shadow:none;border-radius:8px;flex:1;margin:0 20px 10px 0;padding:12px 14px;position:relative}.flow .step:last-child{margin-right:0}.flow .step:after{content:"→";color:#b6bccf;font-size:14px;font-weight:700;position:absolute;top:38%;right:-17px}.flow .step:last-child:after{content:""}.flow .step .no{color:#fff;background:var(--brand);text-align:center;border-radius:50%;width:20px;height:20px;margin-bottom:8px;font-size:12px;font-weight:700;line-height:20px;display:inline-block}.flow .step b{margin-bottom:3px;font-size:13.5px;display:block}.flow .step p{color:var(--muted);font-size:12px}.timeline{border-left:2px solid #d9dcef;margin:14px 0;padding-left:24px}.tl-item{padding:0 0 22px 16px;position:relative}.tl-item:before{content:"";background:var(--brand);width:11px;height:11px;box-shadow:0 0 0 4px var(--brand-soft);border-radius:50%;position:absolute;top:5px;left:-31px}.tl-item.done:before{background:var(--ok);box-shadow:0 0 0 4px var(--ok-soft)}.tl-item.future:before{background:#c3c8dc;box-shadow:0 0 0 4px #eef0f6}.tl-head{flex-wrap:wrap;align-items:center;gap:9px;margin-bottom:4px;display:flex}.tl-head b{font-size:14px}.tl-date{color:var(--muted);background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:1px 9px;font-size:11.5px}.tl-item p{color:#3d4257;margin:2px 0;font-size:12.5px}#toast{color:var(--ink);border:1px solid var(--line);border-left:3px solid var(--brand);opacity:0;pointer-events:none;z-index:200;background:#fff;border-radius:8px;max-width:72vw;padding:10px 16px;font-size:13px;transition:all .2s;position:fixed;top:72px;left:50%;transform:translate(-50%)translateY(-12px);box-shadow:0 8px 28px #1618231f}#toast.show{opacity:1;transform:translate(-50%)translateY(0)}#toast.warn{border-left-color:#faad14}@media (max-width:760px){.menu{display:none}.content{padding:16px 14px 50px}}.btn:disabled,.btn.disabled{opacity:.5;cursor:not-allowed}.btn:disabled:hover{background:inherit}.btn.primary:disabled:hover{background:var(--brand)}.btn.block{width:100%;height:38px}select.inp{appearance:auto;padding:6px 10px}.inp[readonly]{color:#3d424d;background:#fafbfc}.inp:disabled{color:var(--muted);cursor:not-allowed;background:#f5f6f8}.frow .unit{color:#3d424d;margin-left:6px;font-size:13px}.frow .err{color:var(--danger);margin-top:5px;font-size:11.5px}.fsec{color:var(--muted);letter-spacing:.06em;border-top:1px dashed var(--line);margin:18px 0 4px;padding-top:12px;font-size:12px;font-weight:650}.muted{color:var(--muted)}.foot-tip{color:var(--muted);margin-top:8px;font-size:12px}.empty{color:var(--muted);padding:20px;font-size:13px}.empty-cell{color:var(--muted);text-align:center;padding:22px 14px}.loading{color:var(--muted);padding:20px;font-size:13px}.note b{font-weight:650}.note .note-act{flex:none;margin-left:auto}.tabs .t .n.hot{color:#fff;background:#ff4d4f}.tag.danger{background:var(--danger-soft);color:var(--danger)}.stat .d:empty:before{content:" "}.rank .row.click{cursor:pointer}.rank .row.click:hover .nm{color:var(--brand-ink)}.cover img.cover-img{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.cover .state,.cover .run{z-index:1}.code.key{white-space:pre-wrap;word-break:break-all;font-size:13px}.copyline{align-items:stretch;gap:8px;display:flex}.copyline .code{flex:1;margin:0}.menu .m-item{text-decoration:none}.chatpanel.live{height:auto}.screen{background:#11151d;justify-content:center;align-items:center;height:300px;display:flex;position:relative;overflow:hidden}.screen .dh-video{position:absolute;inset:0}.screen .dh-video video{object-fit:contain;width:100%;height:100%}.screen .screen-over{z-index:2;color:#c9cfdd;text-align:center;flex-direction:column;align-items:center;gap:10px;padding:0 20px;font-size:12.5px;display:flex;position:relative}.screen .screen-over .btn{height:38px;padding:0 22px;font-size:14px}.screen .screen-tip{z-index:3;color:#fff;cursor:pointer;white-space:nowrap;background:#0009;border-radius:999px;padding:4px 10px;font-size:12px;position:absolute;bottom:10px;left:50%;transform:translate(-50%)}.chatpanel.live .chatbody{flex:none;height:220px}.chatinput.live{flex-wrap:wrap}.chatinput .row{gap:8px;width:100%;display:flex}.chatinput .row.ctrls{justify-content:flex-end}.chatwarn{color:var(--danger);border-top:1px solid var(--line);background:#fff;padding:6px 12px 0;font-size:12px}.chatwarn+.chatinput{border-top:none}.msg .trace{color:var(--muted);margin-top:3px;font-size:10.5px;display:block}.msg.pending{opacity:.75}pre.code{display:block}
