:root{--bg:#0e1014;--s1:#151821;--s2:#1b1f29;--line:#262b36;--text:#e7eaf0;--muted:#8e95a3;--faint:#5f6775;--accent:#5b8cff;--accent2:#4a7cf5;--good:#2fb36a;--info:#4a90e2;--warn:#e6a700;--crit:#e5484d;--mono:"JetBrains Mono",ui-monospace,Menlo,monospace;--sans:Inter,system-ui,-apple-system,"Segoe UI",sans-serif;--shadow:0 12px 32px rgba(0,0,0,.35)}[data-theme=light]{--bg:#f5f6f8;--s1:#fff;--s2:#f1f3f6;--line:#e4e7ec;--text:#1a1d24;--muted:#667085;--faint:#98a2b3;--accent:#3b6ff0;--accent2:#2f5fd8;--good:#1f9d57;--info:#2f74d0;--warn:#b7791f;--crit:#d23c3c;--shadow:0 12px 32px rgba(16,24,40,.12)}*{box-sizing:border-box}html,body{margin:0;height:100%}body{background:var(--bg);color:var(--text);font:14px/1.5 var(--sans);-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font:inherit}.mono{font-family:var(--mono);font-size:13px}.muted{color:var(--muted)}.good{color:var(--good)}.accent{color:var(--accent)}.hidden{display:none!important}.app{display:flex;min-height:100vh}.side{width:200px;flex:none;position:sticky;top:0;height:100vh;display:flex;flex-direction:column;background:var(--s1);border-right:1px solid var(--line);padding:18px 12px}.brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:16px;padding:4px 8px 18px}.brand i{width:26px;height:26px;border-radius:8px;background:linear-gradient(135deg,var(--accent),#36c6b0);display:block}.nav{display:flex;flex-direction:column;gap:2px}.nav a{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:9px;color:var(--muted);font-weight:500;cursor:pointer}.nav a:hover{color:var(--text)}.nav a.on{background:var(--s2);color:var(--text)}.nav a svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}.side .bottom{margin-top:auto;display:grid;gap:8px}.side .bottom .btn{justify-content:center}.main{flex:1;min-width:0}.spacer{flex:1}.btn{display:inline-flex;align-items:center;gap:7px;padding:8px 14px;border:1px solid var(--line);border-radius:10px;background:var(--s1);color:var(--text);font-weight:500;cursor:pointer;transition:background .12s,border-color .12s}.btn:hover{background:var(--s2)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{background:var(--accent2)}.btn.ghost{border-color:transparent;background:transparent;color:var(--muted)}.btn.ghost:hover{color:var(--text);background:var(--s2)}.btn.icon{padding:8px 10px}.page{max-width:1600px;margin:0 auto;padding:30px 32px 70px}@media(max-width:1500px){.page{max-width:none}}td.actions,th.actions{display:table-cell;white-space:nowrap;text-align:right}td.actions .btn{white-space:nowrap;display:inline-flex;vertical-align:middle}td.actions .btn+.btn{margin-left:6px}td .nowrap,td.nowrap{white-space:nowrap}.head{display:flex;align-items:flex-start;gap:20px;margin-bottom:24px}.head h1{margin:0;font-size:26px;font-weight:600;letter-spacing:-.3px;display:flex;align-items:center;gap:10px}.head .sub{color:var(--muted);margin-top:4px}.back{color:var(--muted);font-size:13px;display:inline-block;margin-bottom:8px}.back:hover{color:var(--text)}h2{font-size:16px;font-weight:600;margin:30px 0 12px}h3{font-size:15px;font-weight:600;margin:0 0 14px}.card{background:var(--s1);border:1px solid var(--line);border-radius:14px;padding:20px}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px}.pcard .row{display:flex;align-items:center;gap:12px}.avatar{width:40px;height:40px;border-radius:12px;background:var(--s2);display:grid;place-items:center;font-weight:700;color:var(--accent);font-size:16px}.pcard .name{font-weight:600;font-size:16px}.pcard .nums{display:flex;gap:26px;margin:18px 0 14px}.nums b{display:block;font-size:28px;font-weight:600;line-height:1.1}.nums span{color:var(--muted);font-size:13px}.last{color:var(--muted);font-size:13px;display:flex;align-items:center;gap:8px;margin-bottom:16px}.dot{width:8px;height:8px;border-radius:50%;background:var(--faint);display:inline-block;flex:none}.dot.good{background:var(--good)}.dot.info{background:var(--info)}.dot.warn{background:var(--warn)}.dot.crit{background:var(--crit)}div.actions{display:flex;gap:8px}.add{display:grid;place-items:center;color:var(--muted);border-style:dashed;cursor:pointer;min-height:180px}.add:hover{color:var(--text)}.chip{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;border-radius:999px;font-size:12px;font-weight:500;background:var(--s2);color:var(--muted);white-space:nowrap}.chip.good{background:color-mix(in srgb,var(--good) 14%,transparent);color:var(--good)}.chip.info{background:color-mix(in srgb,var(--info) 16%,transparent);color:var(--info)}.chip.warn{background:color-mix(in srgb,var(--warn) 16%,transparent);color:var(--warn)}.chip.crit{background:color-mix(in srgb,var(--crit) 16%,transparent);color:var(--crit)}.chip.accent{background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent)}.stats{display:flex;gap:30px;margin-left:auto;align-self:center}.stats b{display:block;font-size:28px;font-weight:600;line-height:1.1}.stats span{color:var(--muted);font-size:13px}.toolbar{display:flex;align-items:center;gap:10px;margin-bottom:14px;position:relative}.input{display:flex;align-items:center;gap:8px;flex:1;max-width:420px;background:var(--s1);border:1px solid var(--line);border-radius:10px;padding:0 12px;height:38px;color:var(--muted)}.input input{flex:1;background:transparent;border:0;outline:0;color:var(--text);font:inherit;min-width:0}.seg{display:inline-flex;background:var(--s1);border:1px solid var(--line);border-radius:10px;padding:3px;gap:2px}.seg button{border:0;background:transparent;color:var(--muted);padding:6px 12px;border-radius:8px;cursor:pointer;font-weight:500}.seg button.on{background:var(--s2);color:var(--text)}.seg button span{color:var(--faint);margin-left:5px;font-weight:400}.menu{position:absolute;top:44px;right:92px;background:var(--s1);border:1px solid var(--line);border-radius:12px;padding:14px;box-shadow:var(--shadow);display:grid;gap:10px;min-width:280px;z-index:5}.menu label{display:grid;gap:4px;font-size:12px;color:var(--muted)}.menu select{background:var(--s2);border:1px solid var(--line);color:var(--text);border-radius:8px;padding:7px 9px;font:inherit}.tcard{padding:0;overflow:hidden}table{width:100%;border-collapse:collapse}.results-table{table-layout:fixed}thead tr{background:var(--s1)}th{text-align:left;font-size:12px;font-weight:500;color:var(--muted);padding:12px 16px;border-bottom:1px solid var(--line);background:var(--s1);white-space:nowrap;vertical-align:middle;height:42px}th:empty:after{content:" "}td{padding:0 16px;height:46px;border-bottom:1px solid var(--line);vertical-align:middle}tbody tr.row{cursor:pointer}tbody tr.row:hover td{background:var(--s2)}tbody tr.row.open td{background:var(--s2);border-bottom-color:transparent}.host{font-family:var(--mono);font-size:13px;font-weight:500;display:flex;align-items:center;gap:10px}.host .dot{width:7px;height:7px}.new{font-size:10.5px;font-weight:600;color:var(--accent);letter-spacing:.3px}.title{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tech{display:flex;gap:6px;flex-wrap:nowrap;overflow:hidden;min-width:0}.tech .chip{font-size:11.5px;padding:1px 8px;flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis}td{min-width:0;overflow:hidden}td .host{min-width:0;overflow:hidden;text-overflow:ellipsis}.none{color:var(--faint);white-space:nowrap}tr.detail td{height:auto;padding:4px 16px 18px;background:var(--s2)}.dgrid{display:grid;grid-template-columns:1.4fr .9fr .9fr;gap:26px}.dgrid h4{margin:0 0 8px;font-size:12px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.4px}.kv{display:grid;grid-template-columns:76px 1fr;gap:5px 10px;font-size:13px}.kv b{font-weight:500;color:var(--muted)}.kv span{font-family:var(--mono);font-size:12.5px;overflow-wrap:anywhere}.chips{display:flex;flex-wrap:wrap;gap:6px}.footer{display:flex;align-items:center;gap:12px;padding:12px 16px;color:var(--muted);font-size:13px}.progress{height:10px;background:var(--s2);border-radius:5px;overflow:hidden}.progress div{height:100%;background:var(--accent);border-radius:5px}.big4{display:flex;gap:40px;margin-top:18px}.grid2{display:grid;grid-template-columns:1.2fr 1fr;gap:16px;margin-top:16px}.stage{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--line)}.stage:last-child{border-bottom:0}.stage .ic{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:700;flex:none}.ic.done{background:color-mix(in srgb,var(--good) 18%,transparent);color:var(--good)}.ic.skip{background:var(--s2);color:var(--faint)}.ic.run{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent)}.ic.fail{background:color-mix(in srgb,var(--crit) 18%,transparent);color:var(--crit)}.stage .lbl{font-weight:500}.stage.skip .lbl{color:var(--muted)}.stage .res{margin-left:auto;color:var(--muted);font-size:13px;text-align:right}.bar{display:grid;grid-template-columns:120px 1fr 40px;align-items:center;gap:12px;height:26px;font-size:13px}.bar div{height:8px;border-radius:4px;background:var(--info)}.bar .n{text-align:right;color:var(--muted);font-variant-numeric:tabular-nums}.log{margin-top:14px;background:#0b0d12;border:1px solid var(--line);border-radius:10px;padding:12px 14px;font-family:var(--mono);font-size:12.5px;line-height:1.6;max-height:420px;overflow:auto;color:#c9d1dc}[data-theme=light] .log{background:#111827;color:#d8dee8}.log .ln{display:flex;gap:12px}.log .ts{color:#6b7482;flex:none}.tabs{display:flex;gap:4px;margin-top:4px}.tabs button{border:0;background:transparent;color:var(--muted);padding:6px 10px;border-radius:8px;cursor:pointer;font-weight:500}.tabs button.on{background:var(--s2);color:var(--text)}.list .item{display:flex;align-items:center;gap:14px;padding:12px 0;border-bottom:1px solid var(--line)}.list .item:last-child{border-bottom:0}.screen{display:none}.screen.on{display:block}@keyframes pulse{0%,to{opacity:1}50%{opacity:.25}}.dot.pulse{animation:pulse 1.2s infinite}@keyframes spin{to{transform:rotate(360deg)}}.ic.run.spin{border:2px solid color-mix(in srgb,var(--accent) 30%,transparent);border-top-color:var(--accent);background:transparent;color:transparent;animation:spin .9s linear infinite}.ic.pend{background:transparent;border:2px solid var(--line);color:transparent}.subtabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin:-6px 0 18px}.subtabs a{padding:8px 12px;color:var(--muted);font-weight:500;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}.subtabs a.on{color:var(--text);border-bottom-color:var(--accent)}.backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:grid;place-items:center;z-index:50}.modal{width:520px;max-width:calc(100vw - 40px);background:var(--s1);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);padding:22px;max-height:90vh;overflow:auto}.modal h3{margin-bottom:4px}.tg{display:flex;align-items:center;gap:10px;padding:8px 0;cursor:pointer}.tg .sw{width:34px;height:20px;border-radius:999px;background:var(--line);position:relative;flex:none;transition:background .12s}.tg .sw:after{content:"";position:absolute;top:3px;left:3px;width:14px;height:14px;border-radius:50%;background:#fff;transition:left .12s}.tg.on .sw{background:var(--accent)}.tg.on .sw:after{left:17px}.tg.nest{margin-left:44px;padding:4px 0}.tg .muted{margin-left:auto;font-size:12px}.panel{background:var(--s2);border-radius:12px;padding:8px 14px;margin-top:10px}.field{display:grid;gap:5px;font-size:13px;color:var(--muted);align-content:start}.field input,.field select{background:var(--s2);border:1px solid var(--line);color:var(--text);border-radius:8px;padding:8px 10px;font:inherit;width:100%}.field input.mono{font-family:var(--mono);font-size:12.5px}.fgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px}.hostlist{font-family:var(--mono);font-size:12.5px;line-height:1.7;max-height:300px;overflow:auto;background:var(--s2);border-radius:10px;padding:10px 14px;margin-top:12px}.sec{display:flex;align-items:center;gap:10px}.sec h3{margin:0}.savebar{position:sticky;bottom:0;background:var(--bg);padding:14px 0;margin-top:20px;border-top:1px solid var(--line);display:flex;gap:10px;align-items:center}.banner{display:flex;align-items:center;gap:12px;padding:14px 18px;border-radius:12px;background:color-mix(in srgb,var(--good) 12%,transparent);color:var(--good);font-weight:500;margin-bottom:16px}.banner.crit{background:color-mix(in srgb,var(--crit) 12%,transparent);color:var(--crit)}td .cmd{font-family:var(--mono);font-size:12px;color:var(--muted);max-width:min(360px,28vw);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;vertical-align:middle}.tools-table{table-layout:fixed}.tools-table td{white-space:normal;min-width:0}.tools-table td.actions{white-space:nowrap}.tools-table td .cmd{max-width:100%}.spinner{width:14px;height:14px;border:2px solid color-mix(in srgb,var(--accent) 30%,transparent);border-top-color:var(--accent);border-radius:50%;display:inline-block;animation:spin .9s linear infinite;vertical-align:middle}.empty{padding:48px 20px;text-align:center;color:var(--muted)}.toast-wrap{position:fixed;right:18px;bottom:18px;display:flex;flex-direction:column;gap:8px;z-index:100}.toast{background:var(--s1);border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:10px;padding:10px 14px;box-shadow:var(--shadow);max-width:380px}.toast.err{border-left-color:var(--crit)}.toast.ok{border-left-color:var(--good)}.modal-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}.modal-head h3{margin:0;flex:1}.modal-foot{display:flex;gap:10px;justify-content:flex-end;margin-top:18px}.modal.wide{width:860px}.err{display:flex;align-items:center;gap:12px;padding:14px 18px;border-radius:12px;background:color-mix(in srgb,var(--crit) 12%,transparent);color:var(--crit);margin-bottom:16px}.nav a.active{background:var(--s2);color:var(--text)}.side .brand{color:var(--text)}textarea.input{display:block;height:auto;min-height:90px;padding:8px 12px;font-family:var(--mono);font-size:12.5px;color:var(--text);resize:vertical;max-width:none;width:100%}.table-wrap{overflow:auto}.pager{display:flex;align-items:center;gap:8px}.right{margin-left:auto}div.row,.modal .row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.nowrap{white-space:nowrap}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.pcard .actions .btn{white-space:nowrap;flex:none}.pcard .actions .btn.ghost{padding-left:8px;padding-right:8px}.pcard .last>span:not(.dot){min-width:0}.pcard .last .nowrap{white-space:nowrap}.scan-stages .stage .lbl{flex:none;white-space:nowrap}.scan-stages .stage .res{min-width:0;flex:0 1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.scan-log .tabs{flex-wrap:wrap}.scan-log .tabs button{white-space:nowrap;flex:none}.tech .chip{display:inline-block;line-height:1.5}.tech .chip.more{flex:none}.host .hostname{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.host .chip,.host .new{flex:none}.settings-page .field input.mono{line-height:19.5px}
