:root{--bg: #f4f8fe;--bg2: #eef5ff;--card: #ffffff;--line: #dce8f7;--line2: #eaf2fb;--text: #17243a;--muted: #657792;--dim: #8b9bb2;--brand: #13007c;--blue: #1f5bd8;--blue2: #2f80ed;--sky: #56ccf2;--teal: #12b8a6;--green: #0e9f6e;--amber: #d97706;--red: #dc2626;--pale: #eef5ff;--pale2: #f7faff;--shadow: 0 10px 30px rgba(19, 0, 124, .06);--radius: 16px;--focus: #8bbcf4}*{box-sizing:border-box}[hidden]{display:none!important}html,body{margin:0}body{min-height:100vh;background:radial-gradient(900px 420px at 8% -10%,rgba(47,128,237,.1),transparent 60%),radial-gradient(700px 320px at 100% 0,rgba(86,204,242,.12),transparent 55%),var(--bg);color:var(--text);font:14px/1.55 Segoe UI,Microsoft YaHei,system-ui,sans-serif}button,input,select{font:inherit;color:inherit}button{touch-action:manipulation}:where(button,select,input,[tabindex]):focus-visible{outline:3px solid var(--focus);outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.dim{color:var(--dim)}.mono{font-family:ui-monospace,Consolas,monospace;font-variant-numeric:tabular-nums}.app{max-width:1420px;margin:0 auto;padding:20px 24px 34px}.topbar{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:13px 18px;border:1px solid var(--line);border-radius:18px;background:#ffffffeb;box-shadow:var(--shadow)}.brand{display:flex;align-items:center;gap:13px;min-width:0}.logo{width:46px;height:46px;border-radius:13px;display:grid;place-items:center;font-weight:800;letter-spacing:.5px;background:linear-gradient(135deg,var(--brand),var(--blue2));color:#fff;box-shadow:0 8px 18px #13007c33}.brand h1{font-size:18px;line-height:1.15;margin:0;color:var(--brand);letter-spacing:.2px}.brand p{margin:2px 0 0;color:var(--muted);font-size:12px}.top-right{display:flex;align-items:center;gap:9px;flex-wrap:wrap;justify-content:flex-end}.top-guide{border-color:#cfe0f5;background:#f4f9ff;color:var(--blue);font-weight:650}.batch-toggle{min-width:88px;justify-content:center}.badge{display:inline-flex;align-items:center;gap:7px;padding:6px 10px;border-radius:999px;border:1px solid var(--line);background:#fff;color:var(--muted);font-size:12px;white-space:nowrap}.badge.ok{color:#0b7a55;border-color:#0e9f6e40;background:#effaf5}.badge.blue{color:var(--blue);border-color:#2f80ed38;background:#f2f7ff}.badge .dot{width:7px;height:7px}.stepbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:14px 2px 12px;color:var(--dim);font-size:12px}.step{display:flex;align-items:center;gap:8px}.step .n{width:22px;height:22px;border-radius:7px;display:grid;place-items:center;border:1px solid var(--line);background:#fff;color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums}.step.done .n{color:#0b7a55;border-color:#0e9f6e40;background:#effaf5}.step.active{color:var(--blue)}.step.active .n{color:var(--blue);border-color:#2f80ed59;background:#f2f7ff;box-shadow:0 0 0 4px #2f80ed12}.arrow{color:#b9c8dd}.footer{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:16px;color:var(--dim);font-size:12px;padding:0 3px}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.eyebrow{display:block;color:var(--dim);font-size:12px;letter-spacing:.14em;text-transform:uppercase;font-weight:700;margin-bottom:3px}h2{font-size:18px;margin:0;letter-spacing:.1px}h3{font-size:17px;margin:0}.sub{color:var(--muted);font-size:12px;margin-top:3px}.btn{border:1px solid var(--line);background:#fff;color:#36506f;border-radius:9px;padding:7px 12px;font-size:12px;line-height:1.4;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;min-height:32px}.btn:hover:not(:disabled){border-color:#bcd4f2;background:#f8fbff}.btn.primary{background:linear-gradient(180deg,var(--blue2),var(--blue));border-color:var(--blue);color:#fff;box-shadow:0 6px 14px #1f5bd82e}.btn.danger{background:#fff3f4;border-color:#f3c4ca;color:#b91c1c}.btn.ghost{background:transparent;color:var(--muted)}.btn.small{padding:5px 10px;font-size:12px;min-height:28px}.btn:disabled{opacity:.52;cursor:not-allowed}.pill{display:inline-flex;align-items:center;gap:5px;border-radius:999px;padding:4px 9px;font-size:12px;line-height:1.35;border:1px solid var(--line);background:#fff;color:var(--muted);white-space:nowrap}.pill.ok{color:#0b7a55;border-color:#0e9f6e3d;background:#effaf5}.pill.active{color:var(--blue);border-color:#2f80ed40;background:#f2f7ff}.pill.warn{color:#9a6206;border-color:#f1dcad;background:#fffaef}.pill.bad{color:#b91c1c;border-color:#f3c4ca;background:#fff3f4}.pill.gray{color:#7386a0;background:#f7faff}.badge,.pill{font-variant-numeric:tabular-nums}.notice{margin-top:10px;padding:9px 11px;border-radius:9px;border:1px solid #d7e6f8;background:#f5f9ff;color:#3c5574;font-size:12px;line-height:1.55;display:flex;gap:8px;align-items:flex-start}.notice.warn{border-color:#f2e3bd;background:#fffaef;color:#8a6a2c}.notice.error{border-color:#f3c9cf;background:#fff5f6;color:#a52a3a}.notice.info{border-color:#cfe0f5;background:#f2f7ff;color:#33547a}.notice-icon{flex:0 0 auto;font-weight:800;color:var(--amber);line-height:1.4}.notice.info .notice-icon{color:var(--blue)}.notice.error .notice-icon{color:var(--red)}.notice strong{color:inherit}.issue-list{margin:4px 0 0;padding-left:18px}.issue-list li{margin:2px 0;font-size:12px;line-height:1.5;overflow-wrap:anywhere}.package{padding:15px 18px;margin-bottom:14px}.pkg-row{display:flex;align-items:center;gap:14px;min-width:0}.file-icon{width:44px;height:44px;border-radius:12px;background:var(--pale);border:1px solid #d6e6fb;display:grid;place-items:center;color:var(--blue);font-size:18px;flex:0 0 auto}.pkg-main{min-width:0;flex:1}.pkg-name{font-size:15px;font-weight:700;letter-spacing:.1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pkg-sub{color:var(--muted);font-size:12px;margin-top:2px}.pkg-chips{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.pkg-actions{display:flex;align-items:center;gap:8px;flex:0 0 auto}.pkg-local-badge{white-space:nowrap}.chip{font-size:12px;color:#4b607d;background:var(--pale2);border:1px solid var(--line2);border-radius:7px;padding:4px 8px;white-space:nowrap}.chip b{color:var(--text);font-weight:650}.chip.bad{color:#b91c1c;border-color:#f3c4ca;background:#fff3f4}.pkg-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;text-align:center;padding:28px 14px;border:1px dashed #bcd4f2;border-radius:12px;background:#f7fbff}.pkg-empty-icon{font-size:26px;color:var(--blue2)}.pkg-empty-title{font-size:16px;font-weight:700}.pkg-empty-sub{font-size:12px;color:var(--muted);max-width:46ch}.pkg-empty .btn{margin-top:6px}.pkg-notices:empty{display:none}.image-selection{margin-top:12px;padding-top:10px;border-top:1px solid var(--line2)}.image-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.image-row .label{color:var(--muted);font-size:12px;font-weight:650;margin-right:2px}.image-chips{display:flex;gap:6px;flex-wrap:wrap;min-width:0}.img-chip{display:inline-flex;align-items:center;gap:5px;border:1px solid #cfe0f5;background:#f2f7ff;color:#33547a;border-radius:7px;padding:5px 8px;font-size:12px;line-height:1.3;cursor:pointer;min-height:30px}.img-chip[aria-pressed=true]{border-color:#9cc3f5;background:#eaf3ff;color:#1f4d8a}.img-chip[aria-pressed=false]{background:#fff;color:#7386a0;border-color:#dce8f7}.img-chip:hover:not(:disabled){border-color:#9cc3f5}.img-chip:disabled{opacity:.58;cursor:not-allowed}.img-check{width:14px;height:14px;border-radius:3px;background:var(--blue2);color:#fff;display:inline-grid;place-items:center;font-size:10px;font-weight:800;flex:0 0 auto}.img-chip[aria-pressed=false] .img-check{background:#e8f0f9;border:1px solid #cfe0f5}.img-chip em{font-style:normal;color:var(--dim);font-size:12px;font-variant-numeric:tabular-nums}.image-count{color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:auto}.image-count.all-selected{color:#0b7a55;font-weight:650}.params-note{margin-top:8px;color:var(--muted);font-size:12px;line-height:1.6}.flash{padding:15px 18px 14px;margin-bottom:14px}.cap{text-align:right;flex:0 0 auto}.cap .cap-label{display:block;color:var(--dim);font-size:12px;margin-bottom:1px}.cap strong{display:block;font-size:20px;color:var(--brand);font-variant-numeric:tabular-nums;letter-spacing:.2px}.cap span{display:block;color:var(--dim);font-size:12px;font-variant-numeric:tabular-nums;margin-top:1px;font-family:ui-monospace,Consolas,monospace}.card-title-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.layout-collapse,.settings-collapse{white-space:nowrap}.bar-wrap{margin-top:12px}.bar{position:relative;height:48px;border-radius:9px;background:#f3f7fc;border:1px solid #dbe8f7;overflow:hidden}.seg{position:absolute;top:0;bottom:0;border-right:1px solid rgba(255,255,255,.85);display:flex;align-items:center;justify-content:center;overflow:hidden;white-space:nowrap;background:#edf3fb;cursor:default}.seg-fill{position:absolute;left:0;top:0;bottom:0;background:linear-gradient(180deg,#5aa4ff,#2f80ed)}.seg.used.alt .seg-fill{background:linear-gradient(180deg,#49d8c8,#12b8a6)}.seg.missing{background:repeating-linear-gradient(135deg,#edf3fb 0 7px,#e5eef9 7px 14px)}.seg.gap{background:#f5f8fc}.seg.bad{background:linear-gradient(180deg,#f87171,#dc2626)}.seg-label{position:relative;z-index:1;font-size:12px;font-weight:700;letter-spacing:.2px;color:#fff;padding:0 4px;overflow:hidden;text-overflow:ellipsis}.seg.missing .seg-label,.seg.gap .seg-label{color:#7386a0}.seg.tiny .seg-label{display:none}.seg.active,.zseg.active{outline:2px solid var(--brand);outline-offset:-2px;z-index:5}.scale{display:flex;justify-content:space-between;color:var(--dim);font-size:12px;font-variant-numeric:tabular-nums;margin-top:5px;font-family:ui-monospace,Consolas,monospace}.zoom-wrap{margin-top:9px}.zoom-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;color:var(--muted);font-size:12px}.zoom-head b{color:var(--text);font-weight:650}.zoom-clock{font-variant-numeric:tabular-nums}.zoom-bar{display:flex;gap:2px;height:30px;margin-top:5px;border-radius:6px;overflow:hidden;background:#f3f7fc}.zseg{position:relative;flex:1 1 0;min-width:0;display:flex;align-items:center;justify-content:center;overflow:hidden;white-space:nowrap;font-size:12px;font-weight:650;color:#556b86;border-right:1px solid #fff;background:#edf3fb;cursor:default}.zseg-fill{position:absolute;left:0;top:0;bottom:0;background:linear-gradient(180deg,#5aa4ff,#2f80ed)}.zseg.used.alt .zseg-fill{background:linear-gradient(180deg,#49d8c8,#12b8a6)}.zseg.used .zseg-label{color:#fff}.zseg.missing{background:repeating-linear-gradient(135deg,#edf3fb 0 6px,#e5eef9 6px 12px);color:#7386a0}.zseg.bad{background:linear-gradient(180deg,#f87171,#dc2626);color:#fff}.zseg-label{position:relative;z-index:1;padding:0 3px;overflow:hidden;text-overflow:ellipsis}.bar-tip{position:fixed;z-index:80;min-width:220px;max-width:300px;background:#fff;border:1px solid #dbe8f7;border-radius:10px;box-shadow:0 14px 34px #13007c29;padding:9px 11px;pointer-events:none}.tip-title{font-size:12px;font-weight:750;color:var(--text);margin-bottom:5px;display:flex;justify-content:space-between;gap:8px}.tip-row{display:flex;justify-content:space-between;gap:12px;font-size:12px;line-height:1.65;color:var(--muted)}.tip-row b{color:#2d4664;font-weight:600;font-variant-numeric:tabular-nums}.tip-status{font-size:12px;padding:1px 6px;border-radius:99px;background:#effaf5;color:#0b7a55;font-weight:600;white-space:nowrap}.tip-status.gray{background:#f2f6fb;color:#7386a0}.legend{display:flex;gap:14px;flex-wrap:wrap;margin-top:9px;color:var(--muted);font-size:12px;align-items:center}.legend span{display:inline-flex;gap:5px;align-items:center}.sw{width:10px;height:10px;border-radius:3px;display:inline-block}.sw.used{background:var(--blue2)}.sw.free{background:#edf3fb;border:1px solid #dbe8f7}.sw.missing{background:repeating-linear-gradient(135deg,#edf3fb 0 3px,#dfe9f5 3px 6px);border:1px solid #cfdeee}.sw.gap{background:#f5f8fc;border:1px solid #dbe8f7}.sw.bad{background:var(--red)}.layout-capacity{margin-top:10px;padding:8px 11px;border-radius:9px;border:1px solid var(--line2);background:var(--pale2);color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums}.layout-capacity.ok{color:#0b7a55;border-color:#0e9f6e3d;background:#effaf5}.layout-capacity.bad{color:#a52a3a;border-color:#f3c9cf;background:#fff5f6}.metrics{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin-top:10px}.metric{border:1px solid var(--line2);background:var(--pale2);border-radius:9px;padding:7px 9px;min-width:0}.metric .k{color:var(--dim);font-size:12px}.metric .v{font-size:14px;font-weight:700;margin-top:2px;color:var(--text);font-variant-numeric:tabular-nums;white-space:nowrap}.flash-summary{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-top:10px;padding-top:10px;border-top:1px solid var(--line2);color:var(--muted);font-size:12px}.flash-summary b{color:var(--text)}.layout-errors{margin-top:8px}.layout-errors .notice{margin-top:0}.layout-detail{margin-top:10px;border:1px solid var(--line);border-radius:10px;overflow:auto;max-height:620px;background:#fff}.partition-table{width:100%;border-collapse:collapse;font-size:12px;font-variant-numeric:tabular-nums}.partition-table th{position:sticky;top:0;z-index:1;text-align:left;padding:8px 9px;border-bottom:1px solid var(--line);background:#f7faff;color:var(--dim);font-weight:600;white-space:nowrap}.partition-table th.num{text-align:right}.partition-table td{padding:6px 9px;border-bottom:1px solid #f0f5fb;vertical-align:top;overflow-wrap:anywhere}.partition-table td.num{text-align:right;white-space:nowrap}.partition-table td.mono{color:#57708e;font-size:12px;white-space:nowrap}.partition-table tbody tr:hover td,.partition-table tbody tr.active td{background:#eef5ff}.partition-table tbody tr.row-bad td{background:#fff8f8}.partition-table .dim{color:var(--dim)}.partition-table .pill{padding:2px 8px}.params{padding:14px 18px;margin-bottom:14px}.params-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:10px}.param-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.checkline{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#435a76;white-space:nowrap;cursor:pointer}.checkline input{accent-color:var(--blue);width:16px;height:16px;margin:0}.baud-field{color:var(--muted)}.select{appearance:none;border:1px solid #cfe0f5;background-color:#fff;border-radius:8px;padding:6px 28px 6px 10px;font-size:12px;color:#2d4664;cursor:pointer;background-image:linear-gradient(45deg,transparent 50%,#6b7f9c 50%),linear-gradient(135deg,#6b7f9c 50%,transparent 50%);background-position:calc(100% - 14px) 50%,calc(100% - 9px) 50%;background-size:5px 5px,5px 5px;background-repeat:no-repeat;min-width:132px;min-height:34px}.select:disabled{opacity:.6;cursor:not-allowed}.param-divider{width:1px;height:20px;background:var(--line);margin:0 1px;flex:0 0 auto}.bt-field{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:12px;white-space:nowrap}.bt-input{border:1px solid #cfe0f5;background:#fff;border-radius:8px;padding:6px 9px;font-size:12px;color:#2d4664;width:200px;min-height:34px;outline:none}.bt-input:focus{border-color:var(--blue2)}.bt-input:disabled{background:#f6f9fd;color:#a3b1c4}.settings-image-slot:empty{display:none}.settings-view.locked .params-note{opacity:.75}.devices-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:2px 2px 10px}.devices-head h2{font-size:18px}.devices-actions{display:flex;gap:7px;align-items:center;flex-wrap:wrap}.device-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;align-items:start}.device{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden;min-width:0}.device[data-state=running]{border-color:#bcd7fb;box-shadow:0 10px 30px #2f80ed1f}.device[data-state=error]{border-color:#f1cdd2}.dev-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:13px 14px 0}.dev-title{display:flex;align-items:center;gap:8px;font-weight:700;font-size:14px;min-width:0}.dev-title .dev-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dot{width:8px;height:8px;border-radius:50%;background:var(--green);flex:0 0 auto}.dot.ok{background:var(--green);box-shadow:0 0 0 3px #0e9f6e1f}.dot.active{background:var(--blue2);box-shadow:0 0 0 3px #2f80ed24}.dot.warn{background:var(--amber);box-shadow:0 0 0 3px #d977061f}.dot.bad{background:var(--red);box-shadow:0 0 0 3px #dc26261f}.dot.gray{background:#b9c8dd;box-shadow:none}.dev-port{display:flex;align-items:center;gap:8px;margin:10px 14px 0;padding:8px 9px;border:1px solid var(--line2);border-radius:9px;background:var(--pale2);min-width:0}.port-info{min-width:0}.port-name{font-size:12px;font-weight:650;color:#2e4867;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.port-meta{font-size:12px;color:var(--dim);margin-top:1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.spacer{flex:1;min-width:0}.port-select{min-width:150px;max-width:190px;font-size:12px}.dev-params{display:grid;grid-template-columns:1.3fr 1.3fr .55fr .85fr;gap:7px;padding:10px 14px 0}.kv{border:1px solid var(--line2);border-radius:8px;background:#fff;padding:5px 8px;min-width:0;min-height:56px;display:flex;flex-direction:column;justify-content:center}.kv .k{color:var(--dim);font-size:12px;white-space:nowrap;display:flex;align-items:center;gap:4px}.kv .auto{font-size:12px;color:var(--blue);background:#f2f7ff;border:1px solid #cfe0f5;border-radius:4px;padding:0 4px;line-height:1.3;font-weight:600}.kv .inp{width:100%;border:0;background:transparent;font:13px/1.45 ui-monospace,Consolas,monospace;color:#2d4664;padding:2px 0 0;outline:none;min-width:0}.kv .inp:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:3px}.kv .inp:disabled{color:#a3b1c4;cursor:not-allowed}.kv.off{background:#f6f9fd;border-color:#e8f0f9}.kv.has-error{border-color:#f3c4ca;background:#fff8f9}.field-error{color:#b91c1c;font-size:12px;line-height:1.4;margin-top:2px}.ear-seg{display:flex;gap:2px;background:#f2f7ff;border:1px solid #dce8f7;border-radius:6px;padding:2px;margin-top:3px;height:30px;align-items:stretch;width:100%}.ear-option{position:relative;flex:1;display:flex;align-items:center;justify-content:center;padding:0 4px;border-radius:4px;font-size:12px;color:var(--muted);white-space:nowrap;cursor:pointer;line-height:1.25}.ear-option input{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none}.ear-option.on{background:#fff;color:var(--blue);border:1px solid #cfe0f5;font-weight:650;box-shadow:0 1px 3px #2f80ed14}.ear-option:focus-within{outline:2px solid var(--focus);outline-offset:1px}.ear-option.disabled{cursor:not-allowed;opacity:.6}.dev-actions{display:flex;gap:7px;padding:10px 14px 0;align-items:center;flex-wrap:wrap}.dev-progress{padding:10px 14px 0}.prog-top{display:flex;justify-content:space-between;align-items:flex-end;gap:10px}.prog-phase{font-size:12px;color:#3c5574;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.prog-phase b{color:var(--text);font-weight:650}.prog-pct{font-size:17px;font-weight:750;color:var(--blue);font-variant-numeric:tabular-nums;flex:0 0 auto}.prog-pct.dim{color:var(--dim)}.progress{height:8px;border-radius:99px;background:#edf3fb;border:1px solid #e2ecf8;margin-top:6px;overflow:hidden}.progress>i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--blue2),var(--sky));transition:width .12s linear}.time-row{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;color:var(--dim);font-size:12px;margin-top:5px;font-variant-numeric:tabular-nums}.device-alerts{padding:0 14px}.device-alerts:empty{display:none}.device-alerts .notice{margin-top:10px}.dev-log-wrap{margin:9px 14px 13px}.dev-log-head{display:flex;justify-content:space-between;gap:8px;margin-bottom:5px}.dev-log-head .btn{color:var(--muted)}.dev-log{border:1px solid var(--line2);border-radius:9px;background:#f8fbff;padding:8px 10px;height:96px;overflow:auto;font:12px/1.6 ui-monospace,Consolas,monospace;color:#5f7390;overflow-wrap:anywhere}.log-line{white-space:pre-wrap}.log-time{color:#8b9bb2}.log-level{font-weight:700}.log-info{color:#2563b8}.log-warn{color:#a16207}.log-error{color:#b91c1c}.log-success{color:#0b8a5f}.ready-note{height:96px;display:flex;align-items:center;justify-content:center;text-align:center;color:var(--dim);font-size:12px;background:#f8fbff;border:1px dashed #dbe8f7;border-radius:9px}.add-device{border:1px dashed #bcd4f2;background:#f7fbff;color:var(--blue);border-radius:12px;display:flex;align-items:center;justify-content:center;gap:8px;font-size:12px;min-height:260px}.modal-backdrop{position:fixed;inset:0;background:#1225424d;backdrop-filter:blur(4px);display:none;align-items:center;justify-content:center;z-index:100;padding:20px}.modal-backdrop.show{display:flex}.modal{width:min(560px,100%);max-height:calc(100vh - 40px);overflow:auto;background:#fff;border:1px solid #d9e7f8;border-radius:17px;box-shadow:0 30px 90px #12254238}.modal-head{display:flex;gap:12px;padding:19px 19px 0}.warn-icon{width:42px;height:42px;border-radius:12px;background:#fff8e8;border:1px solid #f0d69a;display:grid;place-items:center;color:#b77908;font-size:20px;font-weight:800;flex:0 0 auto}.warn-icon.info{background:#eef6ff;border-color:#cfe0f5;color:var(--blue)}.modal h3{font-size:17px;margin:0;color:var(--text)}.modal .sub{color:var(--muted);font-size:12px;margin-top:3px}.compare{display:grid;grid-template-columns:1fr auto 1fr;gap:9px;align-items:center;padding:16px 19px 0}.compare .box{border:1px solid var(--line);border-radius:10px;background:var(--pale2);padding:9px 10px;min-width:0}.compare .k{color:var(--dim);font-size:12px}.compare .v{font-size:14px;font-weight:750;margin-top:2px;color:var(--text);overflow-wrap:anywhere}.compare .v.blue{color:var(--blue)}.compare .v.amber{color:#a16207}.compare .vs{color:var(--red);font-weight:800;font-size:13px}.risk{margin:14px 19px 0;padding:10px 11px;border:1px solid #f3c9cf;background:#fff5f6;border-radius:9px;color:#a52a3a;font-size:12px;line-height:1.6}.modal-note{margin:9px 19px 0;color:var(--dim);font-size:12px;line-height:1.55}.modal-actions{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap;padding:16px 19px 18px}.preflight-package{margin:14px 19px 0;padding:10px 11px;border:1px solid var(--line);border-radius:9px;background:var(--pale2);font-size:12px;line-height:1.6;color:var(--muted);overflow-wrap:anywhere}.preflight-package strong{color:var(--text)}.preflight-summary{display:flex;gap:8px;flex-wrap:wrap;margin:12px 19px 0}.preflight-devices{display:grid;grid-template-columns:1fr;gap:9px;margin:12px 19px 0}.preflight-device{border:1px solid var(--line);border-radius:10px;background:#fff;padding:10px 11px}.preflight-device.ready{border-color:#0e9f6e3d}.preflight-device.blocked{border-color:#f3c4ca;background:#fffafb}.preflight-device-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.preflight-device-head .preflight-port{color:var(--muted);font-size:12px}.preflight-device-head .pill{margin-left:auto}.preflight-lines{margin-top:6px;color:var(--muted);font-size:12px;line-height:1.6;overflow-wrap:anywhere}.preflight-issue-title{margin-top:6px;font-size:12px;font-weight:700;color:#a52a3a}.preflight-risk{border-color:#f0d69a;background:#fff8e8;color:#8a5a08}.preflight-risk[hidden]{display:none!important}.warn-list{color:#8a6a2c}.app-notice-host{margin-bottom:14px}.app-notice-host:empty{display:none}.app-notice-host .notice{margin-top:0}.package-view.drag-over{border-color:var(--blue2);background:#f2f7ff;box-shadow:0 0 0 3px #2f80ed1a,var(--shadow)}.devices-section{margin-top:2px}.footer-help{flex-basis:100%;margin-top:4px;color:var(--muted);font-size:12px}.footer-help summary{cursor:pointer;color:var(--blue);width:fit-content}.footer-help ul{margin:6px 0 0;padding-left:18px;line-height:1.65}@media (max-width: 1000px){.app{padding:14px}.device-grid{grid-template-columns:1fr}.metrics{grid-template-columns:repeat(3,minmax(0,1fr))}.topbar{flex-wrap:wrap}.top-right{justify-content:flex-start}}@media (max-width: 720px){.pkg-row{flex-wrap:wrap}.pkg-chips{justify-content:flex-start}.dev-params,.metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.image-count{margin-left:0}.cap{text-align:left}.card-head{flex-wrap:wrap}.modal-backdrop{padding:10px}.compare{grid-template-columns:1fr}.compare .vs{text-align:center}.dev-port{flex-wrap:wrap}.port-select{max-width:none;flex:1 1 150px}}@media (prefers-reduced-motion: reduce){*{transition:none!important;animation:none!important}}.port-picker-guide{position:fixed;top:78px;left:20px;z-index:80;display:flex;align-items:flex-start;gap:10px;max-width:380px;padding:12px 14px 13px;border:1px solid #b9d4f3;border-radius:12px;background:#fff;box-shadow:0 18px 48px #17345838;color:var(--text)}.port-picker-guide[hidden]{display:none}.port-picker-arrow{flex:0 0 auto;margin-top:-8px;color:var(--blue);font-size:38px;font-weight:800;line-height:1;animation:port-picker-nudge .9s ease-in-out infinite alternate}.port-picker-copy{font-size:12.5px;line-height:1.65}@keyframes port-picker-nudge{0%{transform:translate(0)}to{transform:translate(-5px,-6px)}}.tour-layer{position:fixed;inset:0;z-index:90;pointer-events:none}.tour-layer[hidden]{display:none}.tour-panel{position:fixed;z-index:90;background:#12254273;pointer-events:auto}.tour-highlight{position:fixed;z-index:91;border:3px solid #65a9ff;border-radius:13px;box-shadow:0 0 0 1px #ffffffd9 inset,0 0 0 6px #2f80ed29;pointer-events:none;transition:left .16s ease,top .16s ease,width .16s ease,height .16s ease}.tour-tooltip{position:fixed;z-index:92;max-height:calc(100vh - 24px);overflow:auto;padding:15px 16px 14px;border:1px solid #cfe0f5;border-radius:14px;background:#fff;box-shadow:0 20px 60px #12254242;color:var(--text);pointer-events:auto}.tour-tooltip:before{position:absolute;width:0;height:0;border:9px solid transparent;content:""}.tour-tooltip[data-placement=below]:before{top:-18px;left:calc(var(--arrow-x, 24px) - 9px);border-bottom-color:#fff;filter:drop-shadow(0 -1px 0 #cfe0f5)}.tour-tooltip[data-placement=above]:before{bottom:-18px;left:calc(var(--arrow-x, 24px) - 9px);border-top-color:#fff;filter:drop-shadow(0 1px 0 #cfe0f5)}.tour-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.tour-meta{display:flex;align-items:center;gap:8px;min-width:0}.tour-step-count{flex:0 0 auto;padding:3px 6px;border-radius:5px;background:#eef6ff;color:var(--blue);font-size:10px;font-weight:800;letter-spacing:.04em}.tour-eyebrow{overflow:hidden;color:var(--blue);font-size:9.5px;font-weight:800;letter-spacing:.1em;text-overflow:ellipsis;white-space:nowrap}.tour-close{flex:0 0 auto;width:26px;height:26px;border:1px solid #dbe8f7;border-radius:7px;background:#f7fbff;color:var(--muted);font-size:17px;line-height:1;cursor:pointer}.tour-title{margin:9px 0 0;font-size:17px;line-height:1.35}.tour-body{margin:7px 0 0;color:#4f6684;font-size:12.5px;line-height:1.65}.tour-bullets{margin:9px 0 0;padding-left:17px;color:#506784;font-size:12px;line-height:1.65}.tour-bullets li+li{margin-top:3px}.tour-hint{margin-top:10px;padding:7px 9px;border:1px solid #cfe0f5;border-radius:8px;background:#f4f9ff;color:#2e5a8c;font-size:11.5px;line-height:1.55}.tour-hint[hidden]{display:none}.tour-footer{display:flex;align-items:center;gap:7px;margin-top:13px}.tour-footer-spacer{flex:1}.tour-next:disabled{opacity:.5;cursor:not-allowed}.tour-skip{padding-left:0;color:var(--muted)}.onboarding-backdrop{position:fixed;inset:0;z-index:90;display:grid;place-items:center;padding:24px;background:#12254257;backdrop-filter:blur(5px)}.onboarding-backdrop[hidden]{display:none}.onboarding-modal{width:min(780px,100%);max-height:min(760px,calc(100vh - 48px));overflow:auto;border:1px solid #d5e4f7;border-radius:20px;background:#fff;box-shadow:0 32px 100px #12254247;color:var(--text)}.onboarding-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:22px 24px 16px;border-bottom:1px solid #eaf1fa}.onboarding-kicker{display:block;color:var(--blue);font-size:10px;font-weight:800;letter-spacing:.16em}.onboarding-title{margin:4px 0 0;font-size:22px;line-height:1.25}.onboarding-close{width:32px;height:32px;border:1px solid #dbe8f7;border-radius:9px;background:#f7fbff;color:var(--muted);font-size:20px;line-height:1;cursor:pointer}.onboarding-layout{display:grid;grid-template-columns:190px minmax(0,1fr);min-height:390px}.onboarding-steps{display:flex;flex-direction:column;gap:4px;padding:18px 14px;border-right:1px solid #eaf1fa;background:#f8fbff}.onboarding-step{display:flex;align-items:center;gap:9px;padding:10px 9px;border:1px solid transparent;border-radius:9px;background:transparent;color:var(--muted);text-align:left;cursor:pointer}.onboarding-step:hover{background:#eef6ff}.onboarding-step.active{border-color:#cfe0f5;background:#fff;color:var(--blue);box-shadow:0 4px 14px #2f80ed14}.onboarding-step-index{flex:0 0 auto;font-size:10px;font-weight:800;letter-spacing:.06em;opacity:.8}.onboarding-step-label{font-size:12px;font-weight:650;line-height:1.35}.onboarding-main{display:grid;grid-template-columns:minmax(0,1fr) 220px;gap:20px;padding:24px;align-items:start}.onboarding-eyebrow{color:var(--blue);font-size:10px;font-weight:800;letter-spacing:.12em}.onboarding-heading{margin:5px 0 0;font-size:19px}.onboarding-body{margin:9px 0 0;color:#4f6684;font-size:13px;line-height:1.7}.onboarding-bullets{margin:12px 0 0;padding-left:18px;color:#506784;font-size:12.5px;line-height:1.7}.onboarding-bullets li+li{margin-top:4px}.onboarding-action{margin-top:14px}.onboarding-action-button:disabled{opacity:.55;cursor:not-allowed}.onboarding-illustration{min-width:0}.onboarding-illo{border:1px solid #dbe8f7;border-radius:13px;background:#f8fbff;padding:12px}.onboarding-illo-file{display:grid;gap:10px}.illo-file{display:flex;align-items:center;gap:8px;padding:10px;border:1px solid #d6e6f8;border-radius:9px;background:#fff}.illo-file-icon{color:var(--blue);font-size:21px}.illo-file-name{font:11.5px/1.4 ui-monospace,Consolas,monospace;color:#33547a}.illo-lines,.illo-start-rows{display:grid;gap:4px}.illo-line{color:#5c7390;font-size:11px;line-height:1.45}.onboarding-illo-flash{display:grid;gap:8px}.illo-flash-bar{display:flex;height:34px;overflow:hidden;border-radius:7px;background:#dbe8f7}.illo-flash-seg{display:grid;place-items:center;min-width:0;border-right:1px solid rgba(255,255,255,.7);color:#fff;font-size:8px;font-weight:700;background:linear-gradient(135deg,#5a9df0,#2f80ed)}.illo-flash-seg:nth-child(2n){background:linear-gradient(135deg,#7bb8f5,#5a9df0)}.illo-caption{color:var(--dim);font-size:10px;line-height:1.45}.illo-flash-zoom{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:3px}.illo-flash-cell{padding:5px 2px;border:1px solid #cfe0f5;border-radius:4px;background:#fff;color:#55708e;font-size:8.5px;text-align:center}.onboarding-illo-params{display:grid;gap:10px}.illo-chip-row{display:flex;flex-wrap:wrap;gap:5px}.illo-chip{padding:4px 6px;border:1px solid #cfe0f5;border-radius:999px;background:#fff;color:#3b5f88;font-size:9.5px}.illo-param-row{display:grid;gap:5px}.illo-param{display:flex;justify-content:space-between;gap:8px;padding:5px 7px;border:1px solid #dbe8f7;border-radius:6px;background:#fff;font-size:10px}.illo-param-key{color:var(--dim)}.illo-param-value{color:#345577}.onboarding-illo-port{display:grid;gap:8px}.illo-device{display:grid;gap:6px;padding:9px;border:1px solid #d6e6f8;border-radius:9px;background:#fff}.illo-device-title{color:#33547a;font-size:11px;font-weight:700}.illo-device-port{color:var(--dim);font-size:9.5px}.illo-device-button,.illo-start-button{justify-self:start;padding:5px 8px;border-radius:6px;background:#2f80ed;color:#fff;font-size:10px;font-weight:650}.illo-arrow{justify-self:end;color:var(--blue);font-size:28px;font-weight:800;line-height:1}.illo-progress{height:8px;overflow:hidden;border-radius:99px;background:#e7f0fa}.illo-progress i{display:block;width:68%;height:100%;background:linear-gradient(90deg,#2f80ed,#6cb6ff)}.onboarding-illo-start{display:grid;gap:9px}.onboarding-footer{display:flex;align-items:center;gap:9px;padding:14px 24px 18px;border-top:1px solid #eaf1fa}.onboarding-footer-spacer{flex:1}.onboarding-skip{color:var(--muted)}.onboarding-highlight{outline:3px solid #65a9ff;outline-offset:5px;border-radius:12px;transition:outline-color .2s ease}@media (max-width: 760px){.onboarding-layout{grid-template-columns:1fr}.onboarding-steps{flex-direction:row;overflow-x:auto;border-right:0;border-bottom:1px solid #eaf1fa}.onboarding-step{flex:0 0 auto}.onboarding-main{grid-template-columns:1fr}.onboarding-illustration{order:-1}}
