*{box-sizing:border-box;margin:0;padding:0}:root{--page:#dee2e8;--app:#eaedf1;--surface:#fff;--fill-a:#fafbfc;--fill-b:#f7f9fb;--fill-c:#fbfcfd;--chip:#f2f5f8;--bd-1:#d5dae1;--bd-2:#d9dee5;--bd-3:#dfe3e9;--bd-4:#dfe4ea;--bd-5:#edf0f4;--bd-6:#f2f4f7;--ink:#1b2027;--ink-2:#2a313b;--ink-3:#4a5261;--mut-1:#6c7684;--mut-2:#8a93a1;--mut-3:#9aa3b0;--faint:#b0b8c4;--primary:#2f6fb5;--primary-h:#265b96;--primary-tint:#eaf1f8;--primary-tint-bd:#a9c4e0;--primary-tint-tx:#245c9b;--success:#2f9e6b;--danger:#b8483d;--danger-fill:#fdf6f5;--danger-bd:#e8d5d3;--danger-tx:#c0453a;--warn:#b06a15;--warn-fill:#fdf4e5;--warn-bd:#f0dfc2;--con-bg:#151a21;--con-rule:#1b2129;--con-rule2:#232a33;--con-ctl:#1c232c;--con-ctl-bd:#2c343f;--con-tx1:#c8d2de;--con-tx2:#c2ccd9;--con-tx3:#a8b2c0;--con-tx4:#8b95a4;--con-tx5:#5f6a78;--con-tx6:#4d5766;--tx:#7fb2e8;--rx:#69c79a;--err:#e88b82;--sans:"IBM Plex Sans", system-ui, sans-serif;--mono:"IBM Plex Mono", ui-monospace, monospace}html,body,#root{height:100%}body{background:var(--page);font-family:var(--sans);color:var(--ink)}input,select,textarea,button{font:inherit;color:inherit}input:focus-visible,select:focus-visible,textarea:focus-visible,button:focus-visible{outline-offset:-1px;outline:2px solid #9dc0e6}input[type=range]{accent-color:var(--primary)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#c3cad4 padding-box content-box;border:3px solid #0000;border-radius:6px}::-webkit-scrollbar-thumb:hover{background-color:#a7b1bf}::-webkit-scrollbar-track{background:0 0}.app{background:var(--app);border-left:1px solid var(--bd-1);border-right:1px solid var(--bd-1);flex-direction:column;width:100%;max-width:1020px;height:100vh;min-height:640px;margin:0 auto;display:flex}.hdr{background:var(--surface);border-bottom:1px solid var(--bd-2);flex:none;align-items:center;gap:16px;height:56px;padding:0 16px;display:flex;box-shadow:0 1px 3px #1419230d}.hdr-brand{align-items:center;gap:10px;min-width:216px;display:flex}.hdr-tile{background:var(--ink);color:#fff;width:26px;height:26px;font:600 11px var(--mono);border-radius:6px;justify-content:center;align-items:center;display:flex}.hdr-title{font:600 14px var(--sans);letter-spacing:-.01em}.hdr-sub{font:400 10px var(--mono);color:var(--mut-2);letter-spacing:.04em}.hdr-mid{flex:1;align-items:center;gap:8px;min-width:0;display:flex;overflow:hidden}.hdr-devsel{font:500 12.5px var(--sans);background:var(--fill-c);border:1px solid #d5dbe3;border-radius:6px;flex:0 auto;max-width:300px;padding:8px 10px}.btn-primary{background:var(--primary);border:1px solid var(--primary);color:#fff;font:600 12.5px var(--sans);white-space:nowrap;cursor:pointer;border-radius:6px;flex:none;padding:9px 16px}.btn-primary:hover{background:var(--primary-h)}.btn-primary:disabled{opacity:.6;cursor:default}.pill{background:#f6f8fa;border:1px solid #e0e5ec;border-radius:20px;flex:0 auto;align-items:center;gap:7px;min-width:0;max-width:300px;padding:6px 11px;display:flex;overflow:hidden}.pill-dot{background:#b6bdc7;border-radius:50%;flex:none;width:7px;height:7px}.pill-dot.on{background:var(--success)}.pill-tx{font:500 11.5px var(--mono);color:var(--ink-3);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.chip-warn{color:var(--warn);background:var(--warn-fill);border:1px solid var(--warn-bd);white-space:nowrap;text-overflow:ellipsis;border-radius:5px;padding:4px 8px;font-size:11px;overflow:hidden}.seg{background:#eef1f5;border:1px solid #e2e6ec;border-radius:7px;flex:none;padding:3px;display:flex}.seg.on-gray{background:#e4e8ee}.seg button{font:500 12px var(--sans);color:var(--mut-1);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:5px;padding:7px 13px}.seg button.active{color:var(--ink);background:#fff;border-color:#d3dae2;box-shadow:0 1px 2px #1419230f}.screen{flex:auto;min-height:0;overflow:hidden auto}.tester{grid-template-columns:fit-content(590px) minmax(0,1fr);place-content:start;gap:10px;padding:10px;display:grid}.tester-col{flex-direction:column;gap:10px;min-width:0;display:flex}.card{background:var(--surface);border:1px solid var(--bd-3);border-radius:9px;box-shadow:0 1px 2px #1419230a}.card-h{border-bottom:1px solid var(--bd-5);background:var(--fill-a);border-radius:9px 9px 0 0;justify-content:space-between;align-items:center;gap:8px;padding:7px 12px;display:flex}.card-t{font:600 10.5px var(--sans);text-transform:uppercase;letter-spacing:.1em;color:var(--mut-1)}.card-acts{gap:6px;display:flex}.btn-mini{font:500 11px var(--sans);cursor:pointer;background:#fff;border:1px solid #dde2e9;border-radius:5px;padding:5px 9px}.btn-mini:hover{color:var(--primary);background:#f0f4f8;border-color:#c7d6e6}.btn-mini.primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn-mini.primary:hover{background:var(--primary-h);color:#fff}.crow{border-bottom:1px solid var(--bd-6);align-items:center;gap:8px;padding:5px 12px;display:flex}.crow:last-child{border-bottom:0}.crow-lbl{flex:none;width:118px;min-width:0}.crow-name{font:500 12.5px var(--sans);color:var(--ink-2);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.crow-op{font:400 10px var(--mono);color:var(--mut-3);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.crow-val{width:142px;font:400 12.5px var(--mono);background:var(--fill-c);border:1px solid #d5dbe3;border-radius:6px;flex:0 0 142px;padding:7px 9px}.crow-val.flexi{flex:auto;width:100%;max-width:340px}.crow-val::placeholder{color:var(--mut-3)}.crow-btns{flex:none;gap:6px;display:flex}.btn-gs{font:500 12px var(--sans);background:var(--fill-b);color:var(--ink-2);cursor:pointer;border:1px solid #cfd6de;border-radius:5px;min-width:46px;padding:6px 12px}.btn-gs:hover{background:var(--primary-tint);border-color:var(--primary-tint-bd);color:var(--primary-tint-tx)}.crow.multi{align-items:flex-start;padding-top:7px;padding-bottom:7px}.crow.multi .crow-btns{padding-top:14px}.crow-fields{flex-wrap:wrap;flex:260px;gap:6px;min-width:260px;display:flex}.cfield{flex-direction:column;gap:2px;display:flex}.cfield>span{font:400 9.5px var(--mono);color:var(--mut-3);white-space:nowrap}.cfield .crow-val{flex:none;width:96px}.cfield .crow-val.wide{width:142px}.eq-body{justify-content:flex-start;gap:2px;padding:11px 12px 9px;display:flex}.eq-band{flex-direction:column;flex:34px;align-items:center;gap:6px;max-width:58px;display:flex}.eq-band input[type=range]{writing-mode:vertical-lr;cursor:ns-resize;direction:rtl;width:20px;height:118px}.eq-val{font:500 11px var(--mono);background:var(--chip);text-align:center;border-radius:3px;min-width:26px;padding:1px 3px}.eq-hz{font:400 9.5px var(--mono);color:var(--mut-3)}.slider-row{align-items:center;gap:10px;padding:11px 13px;display:flex}.slider-lbl{min-width:96px;max-width:130px;overflow:hidden}.slider-row input[type=range]{flex:60px;min-width:40px}.slider-chip{font:500 12px var(--mono);background:var(--chip);text-align:center;border-radius:3px;min-width:34px;padding:2px 4px}.ledframe{flex-direction:column;flex:260px;gap:7px;min-width:260px;display:flex}.ledframe .crow-fields{flex:none;min-width:0}.led-grid{flex-wrap:wrap;gap:5px;display:flex}.led-cell{border:1px solid var(--bd-5);background:var(--fill-a);border-radius:5px;align-items:center;gap:3px;padding:3px 5px;display:flex}.led-idx{font:500 9.5px var(--mono);color:var(--mut-3);text-align:right;min-width:20px}.led-swatch{cursor:pointer;background:0 0;border:1px solid #d5dbe3;border-radius:4px;width:26px;height:24px;padding:1px}.led-byte{width:36px;font:400 11.5px var(--mono);text-align:center;background:var(--fill-c);border:1px solid #d5dbe3;border-radius:4px;padding:4px 2px}.led-note{font:400 10.5px var(--mono);color:var(--mut-3)}.led-fill{align-items:center;gap:4px;display:flex}.led-fill .btn-mini{padding:4px 10px}.status-vals{flex-wrap:wrap;flex:auto;align-items:center;gap:4px;min-width:0;padding:4px 0;display:flex}.status-chip{font:500 11px var(--mono);background:var(--chip);white-space:nowrap;border-radius:4px;padding:3px 7px}.status-chip em{color:var(--mut-2);font-style:normal}.status-empty{font:400 12.5px var(--mono);color:var(--mut-3);padding:4px 2px}.acts-body{flex-wrap:wrap;gap:7px;padding:11px 12px;display:flex}.btn-act{font:500 12px var(--sans);background:var(--fill-b);color:var(--ink-2);cursor:pointer;border:1px solid #cfd6de;border-radius:5px;padding:8px 13px}.btn-act:hover{background:var(--primary-tint);border-color:var(--primary-tint-bd);color:var(--primary-tint-tx)}.btn-act.danger{border-color:var(--danger-bd);background:var(--danger-fill);color:var(--danger)}.btn-act.danger:hover{filter:brightness(.97)}.lock-card{background:var(--surface);border:1px solid var(--bd-3);border-radius:11px;max-width:400px;margin:56px auto 0;padding:28px;box-shadow:0 4px 20px #14192312}.lock-glyph{background:#f1f4f8;border:1px solid #e2e7ee;border-radius:8px;justify-content:center;align-items:center;width:34px;height:34px;margin-bottom:14px;display:flex}.lock-glyph i{border:2px solid var(--mut-1);border-radius:2px;width:12px;height:10px;display:block;position:relative}.lock-glyph i:before{content:"";border:2px solid var(--mut-1);border-bottom:0;border-radius:4px 4px 0 0;width:6px;height:6px;position:absolute;top:-7px;left:1px}.lock-card h2{font:600 16px var(--sans);margin-bottom:8px}.lock-card p{color:var(--mut-1);margin-bottom:14px;font-size:12.5px;line-height:1.5}.lock-card input{width:100%;font:400 13px var(--mono);background:var(--fill-c);border:1px solid #d5dbe3;border-radius:7px;margin-bottom:10px;padding:8px 10px}.lock-card .btn-primary{width:100%}.lock-err{color:var(--danger-tx);margin-top:8px;font-size:12px}.lock-hint{color:var(--mut-2);margin-top:10px;font-size:11.5px}.cfg{max-width:1180px;padding:12px}.cfg-top{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.cfg-section{margin-bottom:14px}.cfg-caption{color:var(--mut-2);padding:6px 2px;font-size:11.5px}.tbl{border-collapse:collapse;width:100%}.tbl th{font:600 10px var(--sans);text-transform:uppercase;letter-spacing:.09em;color:var(--mut-2);text-align:left;border-bottom:1px solid var(--bd-5);white-space:nowrap;background:#fcfdfe;padding:7px 8px}.tbl td{border-bottom:1px solid var(--bd-6);vertical-align:middle;padding:4px 6px}.tbl input,.tbl select{border:1px solid var(--bd-4);background:#fff;border-radius:5px;width:100%;padding:7px 9px;font-size:12.5px}.tbl input.mono{font-family:var(--mono)}.btn-rm{font:500 11.5px var(--sans);color:var(--danger);background:var(--danger-fill);border:1px solid var(--danger-bd);cursor:pointer;border-radius:5px;padding:6px 10px}.tbl-scroll{overflow-x:auto}.tbl-scroll .tbl{min-width:920px}.proto-grid{grid-template-columns:repeat(6,minmax(120px,1fr));gap:8px;padding:10px 12px;display:grid}.proto-grid label{font:500 10.5px var(--sans);color:var(--mut-1);flex-direction:column;gap:4px;display:flex}.proto-grid input,.proto-grid select{border:1px solid var(--bd-4);background:#fff;border-radius:5px;padding:7px 9px;font-size:12.5px}.frame-preview{font:400 11.5px var(--mono);color:#7d8695;background:var(--fill-b);white-space:nowrap;border:1px solid #e9edf2;border-radius:6px;margin:0 12px 10px;padding:8px 10px;overflow-x:auto}.raw-grid{flex-wrap:wrap;align-items:center;gap:8px;padding:12px;display:flex}.raw-grid input.rid{width:110px}.raw-grid input{font:400 12.5px var(--mono);border:1px solid var(--bd-4);background:#fff;border-radius:5px;padding:8px 10px}.raw-grid input.payload{flex:1;min-width:240px}.raw-out{font:400 12px/1.7 var(--mono);color:var(--con-tx1);background:var(--con-bg);white-space:pre-wrap;word-break:break-all;border-radius:7px;min-height:64px;margin:0 12px 12px;padding:12px 13px}.sec-grid{grid-template-columns:minmax(300px,1fr) minmax(320px,1.3fr);align-items:start;gap:12px;display:grid}.sec-col{flex-direction:column;gap:12px;display:flex}.sec-card-body{flex-direction:column;gap:8px;padding:12px;display:flex}.sec-card-body input{font:400 12.5px var(--mono);border:1px solid var(--bd-4);background:#fff;border-radius:5px;padding:8px 10px}.sec-card-body textarea{font:400 11.5px/1.6 var(--mono);resize:vertical;border:1px solid var(--bd-4);background:#fff;border-radius:5px;height:210px;padding:8px 10px}.sec-status{color:var(--mut-2);font-size:12px}.sec-row{flex-wrap:wrap;gap:7px;display:flex}.log{flex-direction:column;flex:none;display:flex}.log-bar{background:var(--con-bg);border-bottom:1px solid var(--con-rule2);align-items:center;gap:10px;height:36px;padding:0 12px;display:flex}.log-title{font:600 10px var(--sans);text-transform:uppercase;letter-spacing:.11em;color:var(--con-tx4)}.log-filters{gap:4px;display:flex}.log-filters button{font:500 10.5px var(--mono);color:var(--mut-1);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;padding:5px 9px}.log-filters button.active{color:#dbe3ec;background:#242c37;border-color:#3a4655}.log-count{font:400 11px var(--mono);color:var(--con-tx5);flex:1}.btn-con{font:500 11px var(--sans);background:var(--con-ctl);border:1px solid var(--con-ctl-bd);color:var(--con-tx3);cursor:pointer;border-radius:5px;padding:5px 10px}.btn-con.clear:hover{color:#f0a9a2;background:#2e2224;border-color:#4a3236}.log-body{background:var(--con-bg);height:188px;padding:4px 0;overflow:auto}.log-body.closed{height:0;padding:0;overflow:hidden}.log-row{border-bottom:1px solid var(--con-rule);grid-template-columns:96px 40px 152px minmax(180px,1fr) minmax(150px,1fr) 62px;align-items:baseline;gap:10px;padding:3px 12px;display:grid}.log-row>span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.log-time{font:400 11px var(--mono);color:var(--con-tx5)}.log-dir{font:600 10px var(--mono)}.log-lbl{font:400 11.5px var(--sans);color:var(--con-tx2)}.log-hex{font:400 11px var(--mono);color:var(--con-tx4)}.log-dec{font:400 11px var(--mono)}.log-ms{font:400 10.5px var(--mono);color:var(--con-tx5);text-align:right}.log-empty{font:400 11.5px var(--mono);color:var(--con-tx6);padding:14px 12px}.dir-TX{color:var(--tx)}.dir-RX{color:var(--rx)}.dir-SYS{color:var(--con-tx4)}.dir-ERR{color:var(--err)}.ftr{background:var(--surface);border-top:1px solid var(--bd-2);height:26px;font:400 10.5px var(--mono);flex:none;align-items:center;gap:14px;padding:0 14px;display:flex}.ftr-status{white-space:nowrap;text-overflow:ellipsis;max-width:280px;overflow:hidden}.ftr-dim{color:var(--mut-2);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.ftr-right{color:var(--faint);white-space:nowrap;margin-left:auto}
