: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;display:block;object-fit:contain;filter:drop-shadow(0 6px 12px rgba(19,0,124,.18))}.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}.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-view.locked .params-note{opacity:.75}.devices-head{display:flex;flex-direction:column;align-items:stretch;gap:4px;margin:2px 2px 10px}.devices-title-row{display:flex;align-items:center;flex-wrap:wrap;gap:12px}.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}}.tabbar{display:flex;align-items:center;justify-content:center;gap:4px;padding:4px;border:1px solid var(--line);border-radius:999px;background:var(--pale2)}.tab-button{display:inline-flex;align-items:center;gap:7px;padding:8px 18px;border:1px solid transparent;border-radius:999px;background:transparent;color:var(--muted);font:inherit;font-size:13px;font-weight:650;line-height:1.2;cursor:pointer;transition:background .14s ease,color .14s ease,border-color .14s ease}.tab-button:hover{color:var(--blue);background:#1f5bd80f}.tab-button.active{border-color:#cfe0f5;background:#fff;color:var(--blue);box-shadow:0 1px 3px #2f80ed14}.tab-badge{display:inline-flex;align-items:center;min-height:17px;padding:2px 6px;border:1px solid rgba(47,128,237,.22);border-radius:999px;background:#f2f7ff;color:var(--blue);font-size:10px;font-weight:700;line-height:1}.tab-panels{display:block}.tab-panels>[role=tabpanel][hidden]{display:none}.tab-shell{position:relative;margin-top:12px}.flash-head{display:flex;align-items:flex-start;gap:12px}.flash-head .stepbar{flex:1 1 auto}.log-crosslink{flex:0 0 auto;margin-top:14px;border-color:#cfe0f5;background:#f4f9ff;color:var(--blue);font-weight:650}.tab-coach{position:absolute;top:52px;left:calc(50% + 8px);z-index:30;display:flex;align-items:flex-start;gap:8px;max-width:340px;padding:10px 12px;border:1px solid #cfe0f5;border-radius:12px;background:#fff;box-shadow:0 12px 28px #13007c24;font-size:12px;line-height:1.5;color:#36506f}.tab-shell.coach-open .tab-panels{padding-top:56px}.tab-coach-arrow{position:absolute;top:-10px;left:18px;color:var(--blue);font-size:14px;line-height:1}.tab-coach-copy{flex:1 1 auto}.tab-coach-dismiss{flex:0 0 auto;width:22px;height:22px;display:grid;place-items:center;padding:0;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--muted);font-size:15px;line-height:1;cursor:pointer}.tab-coach-dismiss:hover{border-color:var(--line);background:var(--pale2);color:var(--text)}.log-panel{padding-top:6px}.log-app{display:flex;flex-direction:column;gap:12px}.log-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:#ffffffeb;box-shadow:var(--shadow)}.log-toolbar-group{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.log-toolbar-actions{margin-left:auto}.log-dictionary-status{color:var(--muted);font-size:12px}.log-dictionary-status.error{color:var(--red)}.log-notice{padding:8px 11px;border:1px solid var(--line);border-radius:9px;background:var(--pale2);color:var(--muted);font-size:12px}.log-notice.warn{border-color:#d977064d;background:#fff8eb;color:#92400e}.log-notice.error{border-color:#dc26264d;background:#fef2f2;color:#b91c1c}.log-columns{display:grid;grid-auto-flow:column;grid-auto-columns:max(560px,calc((100% - 14px)/2));align-items:start;gap:14px;overflow-x:auto;padding-bottom:8px}.log-device{min-width:0;display:flex;flex-direction:column;border:1px solid var(--line);border-radius:14px;background:var(--card);box-shadow:var(--shadow);overflow:hidden}.log-device-header{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;border-bottom:1px solid var(--line2);background:#fff}.log-device-heading{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px;min-width:0}.log-device-name{font-weight:700;color:var(--text)}.log-device-status{color:var(--muted);font-size:12px}.log-open-toggle{flex:0 0 auto}.log-open-toggle.close{border-color:#f3c4ca;background:#fff3f4;color:#b91c1c}.log-device-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:7px;padding:9px 12px;border-bottom:1px solid var(--line2)}.log-port-control{display:flex;align-items:center;gap:6px;min-width:0}.log-port-select{border:1px dashed #bcd4f2;border-radius:8px;background:#f7fbff;color:var(--blue);padding:5px 10px;font-size:12px;cursor:pointer}.log-port-control .port-selected{font-family:ui-monospace,Consolas,monospace;font-size:12px;color:var(--text)}.log-port-control .change-port{border:0;background:transparent;color:var(--blue);font-size:12px;cursor:pointer;padding:3px 4px}.log-baud-wrap,.log-signal{display:inline-flex;align-items:center;gap:5px;color:var(--muted);font-size:12px}.log-baud{min-height:28px;padding:3px 7px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--text);font-size:12px}.log-record-hint{color:var(--dim);font-size:11px}.log-stats{padding:6px 12px;color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums}.log-filter-wrap{display:flex;flex-direction:column;gap:4px;padding:0 12px 9px}.log-filter{width:100%;min-height:46px;resize:vertical;padding:7px 9px;border:1px solid var(--line);border-radius:8px;background:#fbfdff;color:var(--text);font:12px/1.5 ui-monospace,Consolas,monospace}.log-filter-meta{display:flex;justify-content:space-between;gap:8px;color:var(--dim);font-size:11px}.log-filter-count{flex:0 0 auto;font-variant-numeric:tabular-nums}.log-filter-error{color:var(--red);font-size:12px}.log-filter-error:empty{display:none}.log-lines-wrap{display:flex;flex-direction:column;gap:4px;padding:0 12px 12px}.log-auto-scroll{align-self:flex-end;color:var(--muted);font-size:11px}.log-lines{height:340px;overflow:auto;border:1px solid var(--line2);border-radius:9px;background:#f8fbff;padding:6px 8px;font:12px/1.6 ui-monospace,Consolas,monospace;color:#5f7390;white-space:pre}.log-empty{color:var(--dim);font-size:12px}.log-lines .log-line{white-space:pre}.cli-dock{border-top:1px solid var(--line2);padding:8px 12px 12px}.cli-dock>summary{cursor:pointer;color:var(--blue);font-size:12px;font-weight:650}.cli-panel{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px;margin-top:8px}.cli-status{grid-column:1 / -1;min-height:20px;padding:5px 8px;border:1px solid var(--line2);border-radius:8px;background:var(--pale2);color:var(--muted);font-size:12px}.cli-status:empty{display:none}.cli-card{min-width:0;padding:8px 9px;border:1px solid var(--line);border-radius:10px;background:#fbfdff}.cli-card-title{margin:0 0 5px;color:var(--text);font-size:12px;font-weight:700}.card-row,.cli-card-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:6px}.cli-card input,.cli-card select{min-width:0;max-width:100%;padding:4px 6px;border:1px solid var(--line);border-radius:7px;background:#fff;font-size:12px}.preset-buttons{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.preset-btn{border:1px solid var(--line);border-radius:8px;background:#fff;color:#36506f;padding:5px 8px;font-size:12px;line-height:1.4;cursor:pointer}.preset-btn:hover:not(:disabled){border-color:#bcd4f2;background:#f8fbff}.preset-btn:disabled{opacity:.52;cursor:not-allowed}.preset-btn.danger{border-color:#f3c4ca;background:#fff3f4;color:#b91c1c}.cli-settings-row{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:8px;padding-top:8px;border-top:1px dashed var(--line2);color:var(--muted);font-size:11px}.cli-settings-row input{width:76px;height:26px}.cli-settings-label{color:var(--text)}.cli-settings-unit{color:var(--dim)}.cli-settings-hint{color:var(--dim);font-size:10.5px}.preset-results{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:6px;margin-top:8px}.preset-result{display:flex;align-items:baseline;gap:8px;min-width:0;padding:6px 8px;border:1px solid var(--line2);border-radius:8px;background:#f8fbff}.preset-result-label{flex:0 0 auto;color:var(--muted);font-size:11px}.preset-result-value{min-width:0;color:var(--text);font-size:12px;font-weight:600;overflow-wrap:anywhere}.event-list{display:flex;flex-direction:column;gap:4px;max-height:140px;overflow:auto;margin-top:6px}.event-option{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text)}.event-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.event-value{flex:0 0 auto;color:var(--dim);font-family:ui-monospace,Consolas,monospace;font-size:11px}.event-empty{color:var(--dim);font-size:12px}.inline-error{color:var(--red);font-size:12px}.inline-error:empty{display:none}.cli-history{display:flex;flex-direction:column;gap:3px;max-height:170px;overflow:auto;margin-top:6px;font:11px/1.5 ui-monospace,Consolas,monospace}.cli-history-empty{color:var(--dim);font-size:12px}.cli-history-row{display:grid;grid-template-columns:74px 34px 58px 38px 44px minmax(0,1fr) minmax(0,1fr);gap:4px;padding:2px 0;border-bottom:1px solid var(--line2);overflow-wrap:anywhere;white-space:nowrap}.cli-history-row>span{min-width:0;overflow:hidden;text-overflow:ellipsis}.history-time,.history-seq{color:var(--dim);font-variant-numeric:tabular-nums}.history-dir{font-weight:700;color:var(--blue)}.history-mm{color:var(--muted)}.history-payload{color:var(--text)}.history-result{color:var(--muted);font-variant-numeric:tabular-nums}.history-error{color:var(--red)}@media (max-width: 900px){.log-columns{grid-auto-flow:row;grid-auto-columns:auto;grid-template-columns:1fr;overflow-x:visible}.tab-coach{right:8px;left:8px;max-width:none}}.app-shell{display:flex;height:100vh;max-width:1400px;margin:0 auto;overflow:hidden}.app-sidebar{width:236px;flex:0 0 236px;height:100%;display:flex;flex-direction:column;padding:18px 12px 14px;border-right:1px solid var(--line);background:#ffffffb8;backdrop-filter:blur(14px);overflow:hidden;transition:width .18s ease,flex-basis .18s ease}.app-shell.collapsed .app-sidebar{width:68px;flex-basis:68px;padding-left:10px;padding-right:10px}.app-brand{display:flex;align-items:center;gap:10px;padding:0 6px 18px;white-space:nowrap}.app-brand-logo{width:34px;height:34px;flex:0 0 34px;filter:drop-shadow(0 6px 12px rgba(19,0,124,.18))}.app-brand-text strong{display:block;font-size:14px;letter-spacing:.2px}.app-brand-text span{display:block;color:var(--dim);font-size:11px}.app-shell.collapsed .app-brand-text{display:none}.app-nav{display:flex;flex-direction:column;gap:4px}.app-nav-label{padding:10px 10px 4px;color:var(--dim);font-size:10px;letter-spacing:.12em}.app-shell.collapsed .app-nav-label{visibility:hidden;height:10px;padding:0}.app-nav-item{display:flex;align-items:center;gap:11px;width:100%;padding:10px 11px;border:0;border-radius:10px;background:transparent;color:var(--muted);text-align:left;white-space:nowrap}.app-nav-item:hover{background:var(--pale);color:var(--text)}.app-nav-item.active{background:#e7f0ff;color:var(--blue);font-weight:650}.app-nav-icon{width:20px;flex:0 0 20px;display:grid;place-items:center;font-size:15px}.app-nav-badge{margin-left:auto;font-size:10px;font-weight:700;color:#fff;background:var(--blue2);border-radius:999px;padding:1px 7px}.app-shell.collapsed .app-nav-item{justify-content:center;padding:11px 0}.app-shell.collapsed .app-nav-text,.app-shell.collapsed .app-nav-badge{display:none}.app-side-foot{margin-top:auto;display:flex;flex-direction:column;gap:6px}.app-version{color:var(--dim);font-size:10px;padding:0 10px;white-space:nowrap}.app-shell.collapsed .app-version{display:none}.app-collapse{display:flex;align-items:center;gap:10px;width:100%;border:1px solid var(--line);background:#fff;color:var(--muted);border-radius:10px;padding:8px 10px;white-space:nowrap}.app-collapse:hover{border-color:#bdd6f5;color:var(--text)}.app-shell.collapsed .app-collapse{justify-content:center;padding:8px 0}.app-shell.collapsed .app-collapse-text{display:none}.app-main{flex:1;min-width:0;height:100%;display:flex;flex-direction:column}.app-header{flex:0 0 auto;height:64px;display:flex;align-items:center;gap:12px;padding:0 24px;background:#fff;border-bottom:1px solid var(--line)}.app-page-icon{width:20px;flex:0 0 20px;display:grid;place-items:center;color:var(--blue);font-size:17px}.app-page-heading h1{margin:0;font-size:19px;letter-spacing:.2px}.app-page-heading p{margin:1px 0 0;color:var(--muted);font-size:12px}.app-header-actions{margin-left:auto;display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.app-header-actions .btn.small.ghost{min-height:30px;padding:0 12px;border:1px solid #d7e4f4;border-radius:999px;background:linear-gradient(180deg,#fff,#f7faff);color:#405877;font-weight:600;box-shadow:0 1px 2px #1736620f;transition:color .15s ease,border-color .15s ease,background .15s ease,box-shadow .15s ease,transform .15s ease}.app-header-actions .btn.small.ghost:hover:not(:disabled){border-color:#b8d2f4;background:#fff;color:var(--blue);box-shadow:0 3px 10px #1f5bd821;transform:translateY(-1px)}.app-header-actions .btn.small.ghost:active:not(:disabled){transform:translateY(0);box-shadow:0 1px 2px #1736620f}.app-header-actions .btn.small.feedback-button{border-color:#c6dbf8;background:linear-gradient(180deg,#fbfdff,#eef6ff);color:var(--blue)}.app-header-actions .btn.small.feedback-button:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--blue2);box-shadow:0 0 0 3px #2f80ed1f}.app-header-actions .btn.small.ghost:focus-visible{outline:2px solid rgba(47,128,237,.45);outline-offset:2px}.app-content{flex:1;min-height:0;overflow-y:auto;padding:16px 24px 28px;display:flex;flex-direction:column;gap:14px}.app-page{display:flex;flex-direction:column;gap:14px}.app-page[hidden]{display:none!important}.app-inline-notice:empty{display:none}.app-inline-notice .notice{margin:0}.app-placeholder-card{display:flex;flex-direction:column;align-items:flex-start;gap:10px;padding:32px;color:var(--muted)}.app-placeholder-card h2{margin:0;color:var(--text);font-size:18px}.app-placeholder-card p{margin:0;max-width:620px;line-height:1.7}.app-placeholder-icon{width:46px;height:46px;display:grid;place-items:center;border-radius:12px;background:#eef5ff;color:var(--blue);font-size:20px}@media (max-width: 1100px){.app-shell{max-width:none}}@media (max-width: 900px){.app-sidebar{width:68px;flex-basis:68px;padding-left:10px;padding-right:10px}.app-brand-text,.app-nav-text,.app-nav-badge,.app-version,.app-collapse-text{display:none}.app-nav-item,.app-collapse{justify-content:center;padding-left:0;padding-right:0}.app-nav-label{visibility:hidden;height:10px;padding:0}.app-content{padding-left:16px;padding-right:16px}}.flash-panel,.log-panel{display:flex;flex-direction:column;gap:14px}.tour-layout-stack{display:flex;flex-direction:column;gap:10px}.log-panel{padding-top:0}.log-toolbar{border:0;border-radius:0;background:transparent;box-shadow:none;padding:0 2px;gap:12px}.log-toolbar-session{gap:12px}.log-save-hint{color:var(--dim);font-size:11px}.log-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-flow:row;align-items:start;gap:14px;overflow-x:visible;padding-bottom:0}.log-columns.single{grid-template-columns:minmax(0,1fr)}.log-device{min-width:0}.log-device-header{align-items:flex-start;padding:11px 14px 8px}.log-device-heading{align-items:center;gap:8px;padding-top:3px}.log-recording{display:inline-flex;align-items:center;gap:5px;color:var(--red);font-size:11px}.log-recording i{width:7px;height:7px;border-radius:50%;background:var(--red);box-shadow:0 0 0 3px #dc26261f}.log-device-right{margin-left:auto;display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:flex-end}.log-port-info{color:var(--muted);font:11px/1.4 ui-monospace,Consolas,monospace;white-space:nowrap}.log-port-select{border:1px dashed #b9d2f2;background:#f8fbff;color:var(--blue);padding:5px 10px;font-size:11.5px;border-radius:8px}.log-port-select:disabled{opacity:.52;cursor:not-allowed}.log-device-meta{display:flex;align-items:center;flex-wrap:wrap;gap:9px;padding:0 14px 8px}.log-device-meta .log-stats{margin-left:auto;color:var(--dim);font-size:10.5px;white-space:nowrap}.log-device-meta .log-baud-wrap,.log-device-meta .log-signal{font-size:11.5px}.log-device-meta .log-baud{padding:3px 6px;border:1px solid var(--line);border-radius:7px;background:#fff;font-size:11.5px}.log-filter-wrap{padding:0 14px}.log-filter{width:100%;min-height:46px;resize:vertical;border:1px solid var(--line);border-radius:8px;background:#fff;padding:5px 9px;font:11.5px/1.55 ui-monospace,Consolas,monospace}.log-lines-wrap{padding:0 14px 8px}.log-lines{height:260px}.log-device-actions{display:flex;align-items:center;gap:4px;padding:0 14px 10px}.log-device-actions .btn.ghost{color:var(--muted)}.log-device-actions .log-cli{color:var(--blue)}.log-stats{color:var(--dim);font-size:10.5px}.log-notice{margin:0}.cli-dock{border:1px solid var(--line);border-radius:14px;background:var(--card);box-shadow:var(--shadow);overflow:hidden}.cli-dock-head{display:flex;align-items:center;gap:10px;padding:9px 14px;border-bottom:1px solid var(--line2);background:#fbfdff}.cli-dock-title{color:var(--blue);font-size:12.5px;font-weight:700}.cli-device-tabs{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}.cli-device-tab{border:0;border-radius:0;background:#fff;color:var(--muted);padding:4px 10px;min-height:26px;font-size:11.5px}.cli-device-tab+.cli-device-tab{border-left:1px solid var(--line)}.cli-device-tab.active{background:#e7f0ff;color:var(--blue);font-weight:650}.cli-dock-status{color:var(--dim);font-size:11px}.cli-dock-toggle{margin-left:auto}.cli-dock-body{padding:12px 14px 14px}.cli-panel{display:flex;flex-direction:column;gap:10px;margin:0}.cli-main{display:grid;grid-template-columns:132px minmax(0,1fr);gap:12px;align-items:start}.cli-nav{display:flex;flex-direction:column;gap:2px;border-right:1px solid var(--line2);padding-right:8px}.cli-nav-item{border:0;background:transparent;color:var(--muted);text-align:left;padding:7px 9px;border-radius:7px;font-size:11.5px;cursor:pointer}.cli-nav-item:hover{background:var(--pale);color:var(--text)}.cli-nav-item.active{background:#e7f0ff;color:var(--blue);font-weight:650}.cli-content{min-width:0}.cli-content .cli-card{border:0;background:transparent;padding:0}.cli-content .cli-card-title{display:none}.cli-history{max-height:190px}.history-card{border:0;border-top:1px solid var(--line2);border-radius:0;background:transparent;padding:8px 0 0;box-shadow:none}.cli-status{margin-top:0}@media (max-width: 1100px){.log-columns{grid-template-columns:minmax(0,1fr)}}.package-view{padding:12px 14px}.package-view .pkg-empty{flex-direction:row;justify-content:flex-start;text-align:left;gap:10px;padding:12px 14px;border-radius:10px}.package-view .pkg-empty-icon{font-size:20px}.package-view .pkg-empty-title{font-size:14px}.package-view .pkg-empty-sub{max-width:none;font-size:11.5px}.package-view .pkg-empty .btn{margin:0 0 0 auto}.settings-view .settings-body{display:flex;flex-direction:column;gap:12px}.settings-fields{display:flex;align-items:flex-end;flex-wrap:wrap;gap:10px 18px}.settings-fields .baud-field,.settings-fields .bt-field{display:flex;flex-direction:column;align-items:stretch;gap:4px;font-size:11px;color:var(--muted)}.settings-fields .baud-field{width:200px}.settings-fields .bt-field{width:min(320px,100%)}.settings-fields .bt-input{width:100%}.settings-options{display:flex;align-items:center;flex-wrap:wrap;gap:10px 14px;border-top:1px solid var(--line2);padding-top:10px}.settings-options-label{color:var(--dim);font-size:10px;letter-spacing:.12em}.settings-image-slot{border-top:1px solid var(--line2);padding-top:10px}.settings-image-slot:empty{display:none}.image-selection{margin-top:0;border-top:0;padding-top:0}.device .dev-head{align-items:flex-start;flex-wrap:wrap}.device .dev-head .dev-port{margin-left:auto;display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:flex-end;padding:0;border:0}.device .dev-port .port-info{text-align:right}.device .dev-port .port-name{font:11px/1.4 ui-monospace,Consolas,monospace;color:var(--muted)}.device .dev-port .port-meta{display:none}.device .dev-port .port-select{max-width:150px}.package-view .pkg-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:"icon main actions" "icon chips actions";gap:3px 14px;align-items:center}.package-view .file-icon{grid-area:icon;align-self:start}.package-view .pkg-main{grid-area:main}.package-view .pkg-chips{grid-area:chips;justify-content:flex-start}.package-view .pkg-actions{grid-area:actions;align-self:start}.package-view .pkg-name{font-size:14px}.cli-dock.locked .cli-nav,.cli-dock.locked .cli-content{opacity:.5}.cli-dock.locked .cli-dock-status{color:var(--amber)}
