:root{--bg0: #070a12;--bg1: #0b101c;--bg2: #0f1626;--panel: rgba(19, 26, 43, .72);--panel-solid: #131a2b;--panel2: rgba(30, 39, 61, .6);--border: rgba(148, 163, 204, .14);--border-strong: rgba(148, 163, 204, .28);--text: #e7ecf6;--text2: #aab4c8;--muted: #74809a;--accent: #818cf8;--accent2: #c084fc;--accent3: #38bdf8;--grad: linear-gradient(135deg, #6366f1 0%, #8b5cf6 55%, #d946ef 120%);--grad-soft: linear-gradient(135deg, rgba(99, 102, 241, .18), rgba(217, 70, 239, .1));--ok: #34d399;--warn: #fbbf24;--danger: #f87171;--radius: 16px;--radius-sm: 10px;--shadow: 0 10px 34px rgba(2, 6, 17, .45);--shadow-glow: 0 0 0 1px rgba(129, 140, 248, .35), 0 8px 30px rgba(99, 102, 241, .18);--font: "Inter", -apple-system, "Segoe UI", "PingFang SC", "HarmonyOS Sans SC", "Microsoft YaHei", "Noto Sans SC", Roboto, sans-serif;--mono: "JetBrains Mono", ui-monospace, "SF Mono", Consolas, "Cascadia Code", monospace}*{box-sizing:border-box;margin:0;padding:0}html{color-scheme:dark}body{background:radial-gradient(1100px 500px at 85% -10%,rgba(99,102,241,.14),transparent 60%),radial-gradient(900px 480px at -10% 30%,rgba(56,189,248,.08),transparent 55%),linear-gradient(180deg,var(--bg1),var(--bg0));background-attachment:fixed;color:var(--text);font-family:var(--font);font-size:14px;line-height:1.55;min-height:100vh;-webkit-font-smoothing:antialiased}::selection{background:#818cf859}::-webkit-scrollbar{width:9px;height:9px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#94a3cc2e;border-radius:20px;border:2px solid transparent;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background:#94a3cc59;background-clip:content-box}.app{display:flex;min-height:100vh}.sidebar{width:232px;flex-shrink:0;position:sticky;top:0;height:100vh;display:flex;flex-direction:column;padding:20px 14px 16px;border-right:1px solid var(--border);background:#0b101c99;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);z-index:10}.brand{display:flex;align-items:center;gap:12px;padding:4px 10px 22px}.brand-logo{width:40px;height:40px;border-radius:12px;background:var(--grad);display:flex;align-items:center;justify-content:center;font-size:20px;color:#fff;box-shadow:0 6px 18px #8b5cf666;flex-shrink:0}.brand-name{font-weight:700;font-size:17px;letter-spacing:.2px}.brand-name b{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}.brand-sub{color:var(--muted);font-size:11px;letter-spacing:.4px}.nav-group{color:var(--muted);font-size:10.5px;letter-spacing:1.2px;padding:12px 12px 6px}nav{display:flex;flex-direction:column;gap:3px;flex:1}.nav-item{display:flex;align-items:center;gap:11px;padding:10px 13px;border-radius:12px;color:var(--text2);text-decoration:none;font-size:13.5px;font-weight:500;border:1px solid transparent;transition:all .18s ease;position:relative}.nav-item:hover{background:#94a3cc14;color:var(--text)}.nav-item.active{background:var(--grad-soft);border-color:#8b5cf652;color:#fff;box-shadow:0 4px 18px #6366f129}.nav-item.active:before{content:"";position:absolute;left:-14px;top:50%;transform:translateY(-50%);width:3px;height:20px;border-radius:3px;background:var(--grad)}.nav-icon{width:20px;height:20px;border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:13px;background:#94a3cc1a;transition:all .18s ease}.nav-item.active .nav-icon{background:#8b5cf659}.sidebar-foot{color:var(--muted);font-size:11px;padding:12px 10px 2px;border-top:1px solid var(--border);display:flex;align-items:center;gap:8px}.content{flex:1;min-width:0;padding:0 30px 48px;max-width:1400px}.topbar{position:sticky;top:0;z-index:9;display:flex;align-items:center;justify-content:space-between;padding:20px 4px 14px;background:linear-gradient(180deg,var(--bg0) 55%,transparent);margin-bottom:6px}.topbar .pg-title{font-size:22px;font-weight:700;letter-spacing:.2px}.topbar .pg-sub{color:var(--muted);font-size:12.5px;margin-top:2px}.topbar-right{display:flex;align-items:center;gap:10px}.pill{display:inline-flex;align-items:center;gap:7px;padding:6px 13px;border-radius:999px;background:var(--panel2);border:1px solid var(--border);color:var(--text2);font-size:12px;font-weight:500}.pill .dot{width:7px;height:7px;border-radius:50%;background:var(--muted)}.pill .dot.on{background:var(--ok);box-shadow:0 0 #34d39999;animation:pulse 2.2s infinite}@keyframes pulse{0%{box-shadow:0 0 #34d3998c}70%{box-shadow:0 0 0 7px #34d39900}to{box-shadow:0 0 #34d39900}}.page-title{font-size:22px;font-weight:700;letter-spacing:.2px}.page-sub{color:var(--muted);margin:2px 0 20px;font-size:12.5px}.page{animation:fadeUp .32s ease}@keyframes fadeUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:20px;margin-bottom:16px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:var(--shadow);transition:border-color .2s ease}.card:hover{border-color:var(--border-strong)}.card-title{font-weight:600;margin-bottom:14px;display:flex;align-items:center;gap:10px;font-size:14.5px}.card-title .tag{margin-left:auto}.grid{display:grid;gap:16px}.grid-2{grid-template-columns:1fr 1fr}.grid-3{grid-template-columns:repeat(3,1fr)}.grid-4{grid-template-columns:repeat(4,1fr)}@media (max-width: 1200px){.grid-3,.grid-4{grid-template-columns:repeat(2,1fr)}}@media (max-width: 860px){.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}}.stat-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:18px 20px;position:relative;overflow:hidden;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:var(--shadow);transition:transform .2s ease,border-color .2s ease}.stat-card:hover{transform:translateY(-2px);border-color:var(--border-strong)}.stat-card:after{content:"";position:absolute;right:-40px;top:-40px;width:130px;height:130px;border-radius:50%;background:var(--grad-soft);filter:blur(6px);pointer-events:none}.stat-label{color:var(--muted);font-size:12px;display:flex;align-items:center;gap:7px}.stat-label .ico{width:26px;height:26px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;font-size:13px;background:var(--grad-soft);border:1px solid rgba(139,92,246,.3)}.stat-value{font-size:30px;font-weight:700;margin-top:8px;letter-spacing:.3px}.stat-value b{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}.stat-note{color:var(--muted);font-size:11px;margin-top:3px}.dev-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:18px;position:relative;overflow:hidden;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:var(--shadow);transition:transform .2s ease,border-color .2s ease}.dev-card:hover{transform:translateY(-2px);border-color:var(--border-strong)}.dev-card .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:7px}.dot.on{background:var(--ok);box-shadow:0 0 #34d39999;animation:pulse 2.2s infinite}.dot.off{background:var(--muted)}.dev-name{font-size:15.5px;font-weight:600;display:flex;align-items:center}.dev-id{color:var(--muted);font-size:12px;margin:4px 0 12px;font-family:var(--mono)}.dev-meta{display:flex;flex-wrap:wrap;gap:7px}.tag{font-size:11px;padding:4px 10px;border-radius:999px;background:#94a3cc17;border:1px solid var(--border);color:var(--text2);white-space:nowrap}.tag.ok{color:var(--ok);border-color:#34d39959;background:#34d39914}.tag.warn{color:var(--warn);border-color:#fbbf2459;background:#fbbf2414}.tag.badge{background:var(--grad);border:none;color:#fff;font-weight:600}.device-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px}.device-big{background:var(--panel);border:1px solid var(--border);border-radius:18px;padding:20px;position:relative;overflow:hidden;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:var(--shadow);transition:transform .2s ease,border-color .2s ease}.device-big:hover{transform:translateY(-3px);border-color:var(--border-strong)}.device-big:before{content:"";position:absolute;inset:0 0 auto 0;height:3px;background:var(--grad);opacity:.85}.device-head{display:flex;align-items:center;gap:14px;margin-bottom:16px}.device-icon{width:48px;height:48px;border-radius:14px;background:var(--grad-soft);border:1px solid rgba(139,92,246,.3);display:flex;align-items:center;justify-content:center;font-size:22px;flex-shrink:0}.device-model{font-size:16px;font-weight:700}.device-sub{color:var(--muted);font-size:11.5px;font-family:var(--mono);margin-top:2px}.device-stats{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px}.dev-stat{background:#94a3cc0f;border:1px solid var(--border);border-radius:10px;padding:9px 12px}.dev-stat .k{color:var(--muted);font-size:10.5px;letter-spacing:.4px}.dev-stat .v{font-size:13px;font-weight:600;margin-top:2px}.dev-stat .v.on{color:var(--ok)}.dev-stat .v.off{color:var(--muted)}.topology{display:flex;align-items:center;justify-content:center;gap:18px;padding:26px 10px;flex-wrap:wrap}.topo-node{background:var(--panel2);border:1px solid var(--border);border-radius:16px;padding:18px 26px;text-align:center;min-width:148px;position:relative;transition:border-color .2s ease,transform .2s ease}.topo-node:hover{border-color:#8b5cf666;transform:translateY(-2px)}.topo-node.online{border-color:#34d39959}.topo-node .big{font-size:30px}.topo-node .t{font-weight:600;margin-top:8px;font-size:13.5px}.topo-node .sub{color:var(--muted);font-size:11px;margin-top:2px;font-family:var(--mono)}.topo-line{color:var(--accent);font-size:13px;display:flex;flex-direction:column;align-items:center;gap:4px;font-family:var(--mono);letter-spacing:.5px}.topo-line .flow{animation:flow 2s linear infinite}@keyframes flow{0%{opacity:.4;transform:translate(-2px)}50%{opacity:1}to{opacity:.4;transform:translate(2px)}}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:11px 12px;border-bottom:1px solid var(--border)}th{color:var(--muted);font-weight:500;font-size:11.5px;letter-spacing:.5px;text-transform:uppercase}tr:last-child td{border-bottom:none}tbody tr{transition:background .15s ease}tbody tr:hover{background:#94a3cc0d}td.mono,.mono{font-family:var(--mono)}.log-list{max-height:340px;overflow:auto;font-family:var(--mono);font-size:12px;display:flex;flex-direction:column;gap:2px}.log-item{padding:5px 10px;border-radius:8px;display:flex;gap:10px;align-items:baseline;border-left:2px solid transparent}.log-item:hover{background:#94a3cc0f}.log-item .ts{color:var(--muted);flex-shrink:0;font-size:11px}.log-item .kind{flex-shrink:0;font-size:10.5px;color:var(--accent3);background:#38bdf81a;padding:1px 7px;border-radius:6px}.log-item.err{border-left-color:var(--danger)}.log-item.err .detail{color:var(--danger)}.log-item.ok{border-left-color:var(--ok)}.log-item .detail{color:var(--text2);word-break:break-all}label{display:block;color:var(--muted);font-size:12px;margin:14px 0 6px;font-weight:500}input,select,textarea{width:100%;background:#94a3cc12;color:var(--text);border:1px solid var(--border);border-radius:10px;padding:10px 14px;font-size:13.5px;font-family:inherit;outline:none;transition:border-color .15s ease,background .15s ease,box-shadow .15s ease}input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px #818cf826;background:#94a3cc17}textarea{font-family:var(--mono);min-height:130px;resize:vertical;line-height:1.6}.btn{background:var(--grad);color:#fff;border:none;border-radius:10px;padding:10px 20px;font-size:13.5px;font-weight:600;cursor:pointer;transition:all .18s ease;box-shadow:0 4px 16px #6366f14d;font-family:inherit}.btn:hover{transform:translateY(-1px);box-shadow:0 6px 22px #6366f16b;filter:brightness(1.05)}.btn:active{transform:translateY(0)}.btn:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none}.btn.ghost{background:#94a3cc14;color:var(--text2);border:1px solid var(--border);box-shadow:none}.btn.ghost:hover{background:#94a3cc24;color:var(--text);box-shadow:none}.btn.danger{background:linear-gradient(135deg,#ef4444,#dc2626);box-shadow:0 4px 16px #ef44444d}.btn.sm{padding:6px 14px;font-size:12px;border-radius:8px}.btn.active-preset{background:var(--grad);color:#fff!important;border-color:transparent!important}.chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:4px}.warn-bar{background:#fbbf241a;border:1px solid rgba(251,191,36,.32);color:var(--warn);padding:11px 15px;border-radius:12px;margin-bottom:16px;display:flex;gap:9px;align-items:center;font-size:13px}.split{display:grid;grid-template-columns:320px 1fr;gap:16px;align-items:start}@media (max-width: 960px){.split{grid-template-columns:1fr}}.list-panel .card-title{margin-bottom:12px}.list-item{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:12px;cursor:pointer;border:1px solid transparent;transition:all .15s ease}.list-item:hover{background:#94a3cc14}.list-item.active{background:var(--grad-soft);border-color:#8b5cf659}.list-item .li-ic{width:36px;height:36px;border-radius:10px;background:var(--panel2);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0;transition:transform .15s ease}.list-item.active .li-ic{transform:scale(1.06);background:#8b5cf640}.list-item .li-main{min-width:0;flex:1}.list-item .li-title{font-size:13.5px;font-weight:500;display:flex;align-items:center;gap:7px}.list-item .li-sub{color:var(--muted);font-size:11px;font-family:var(--mono);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-item .li-note{margin-left:auto;flex-shrink:0}.a11y-wrap{display:grid;grid-template-columns:320px 1fr;gap:16px;align-items:start}@media (max-width: 960px){.a11y-wrap{grid-template-columns:1fr}}.app-search{margin-bottom:12px}.app-list{max-height:600px;overflow:auto;padding-right:4px;display:flex;flex-direction:column;gap:2px}.app-item{display:flex;align-items:center;gap:12px;padding:9px 11px;border-radius:12px;cursor:pointer;transition:all .15s ease;border:1px solid transparent}.app-item:hover{background:#94a3cc14}.app-item.active{background:var(--grad-soft);border-color:#8b5cf659}.app-ic{width:34px;height:34px;border-radius:10px;background:var(--panel2);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0;transition:transform .15s ease}.app-item.active .app-ic{transform:scale(1.08);background:#8b5cf640}.app-item .app-name{font-size:13.5px;font-weight:500}.app-item .app-pkg{color:var(--muted);font-size:10.5px;font-family:var(--mono)}.tree-view{max-height:660px;overflow:auto;font-family:var(--mono);font-size:12.5px;background:#070a1280;border:1px solid var(--border);border-radius:12px;padding:10px 6px}.tree-row{padding:3px 8px;border-radius:7px;cursor:pointer;white-space:nowrap;display:flex;gap:8px;align-items:center;border-left:2px solid transparent;transition:background .12s ease;position:relative}.tree-row:hover{background:#818cf81a}.tree-row .cls{color:var(--muted)}.tree-row .txt{color:var(--text2)}.tree-row.clickable{cursor:pointer}.tree-row.clickable .txt{color:var(--text);font-weight:500}.tree-row.clickable:before{content:"";width:7px;height:7px;border-radius:50%;background:var(--ok);box-shadow:0 0 6px #34d399b3;flex-shrink:0}.tree-row .bounds{color:#54617c;font-size:10.5px}.tree-row .chev{color:var(--muted);font-size:10px;flex-shrink:0}.step-row{display:grid;grid-template-columns:190px 1fr 74px 64px;gap:9px;margin-bottom:9px;align-items:center}@media (max-width: 900px){.step-row{grid-template-columns:1fr}}.step-row textarea{min-height:64px}.step-index{font-size:11px;color:var(--muted);text-align:center;font-family:var(--mono);white-space:nowrap}.run-item{border:1px solid var(--border);border-radius:12px;padding:13px 15px;margin-bottom:10px;display:flex;align-items:center;gap:14px;background:#94a3cc0a;transition:border-color .15s ease}.run-item:hover{border-color:var(--border-strong)}.run-item .st{font-weight:700;font-size:13px;flex-shrink:0}.st-success{color:var(--ok)}.st-failed{color:var(--danger)}.st-running{color:var(--warn)}.run-status-ico{width:30px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0}.run-status-ico.success{background:#34d3991f;color:var(--ok)}.run-status-ico.failed{background:#f871711f;color:var(--danger)}.run-status-ico.running{background:#fbbf241f;color:var(--warn);animation:spin 1.6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}pre.json{background:#070a1299;border:1px solid var(--border);border-radius:12px;padding:14px;overflow:auto;font-size:12px;font-family:var(--mono);max-height:340px;line-height:1.6}.result-panel{border-radius:12px;overflow:hidden;border:1px solid var(--border)}.result-panel .rp-head{display:flex;align-items:center;gap:8px;padding:9px 14px;font-size:12px;font-weight:600;background:#94a3cc12;border-bottom:1px solid var(--border);color:var(--text2);font-family:var(--mono)}.result-panel .rp-head .ok-dot{width:8px;height:8px;border-radius:50%;background:var(--ok)}.result-panel pre{margin:0;border:none;border-radius:0;max-height:400px}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.row .grow{flex:1;min-width:0}.muted{color:var(--muted)}.small{font-size:12px}.divider{height:1px;background:var(--border);margin:16px 0}.url-box{background:#070a1280;border:1px solid var(--border);border-radius:10px;padding:10px 14px;font-family:var(--mono);font-size:13px;color:var(--accent3);display:flex;align-items:center;gap:10px}.url-box .copy{margin-left:auto}.empty{text-align:center;color:var(--muted);padding:34px 10px;font-size:13px}.empty .big{font-size:30px;margin-bottom:8px;opacity:.7}.device-select{display:flex;align-items:center;gap:10px;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:8px 14px;max-width:420px;margin-bottom:16px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}.device-select .lbl{color:var(--muted);font-size:12px;white-space:nowrap}.device-select select{border:none;background:transparent;padding:6px 8px;font-weight:500}.device-select select:focus{box-shadow:none}.grad-text{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;font-weight:700}.step-box{border:1px solid var(--border);border-radius:10px;padding:8px;margin-bottom:8px;background:#94a3cc0a}.step-box select{max-width:190px}.step-box textarea{min-height:42px}.step-box .btn.sm{flex-shrink:0}
