:root{--bg:#0b0e13;--panel:#10151c;--panel2:#151b24;--line:#1f2833;--line2:#2a3544;--text:#d6dde6;--muted:#76849a;--dim:#4b5668;--accent:#f2b741;--accent-bg:#f2b74121;--green:#7ccc6f;--red:#ef6b6b;--blue:#62a8ff;--purple:#c38cff;--cyan:#5fd7d3;--orange:#ff9a57;--pink:#ff7ab6;--mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--sans:"IBM Plex Sans", -apple-system, Segoe UI, Helvetica, Arial, sans-serif;--f-opcode:var(--accent);--f-rd:var(--green);--f-funct3:var(--blue);--f-rs1:var(--purple);--f-rs2:var(--cyan);--f-funct7:var(--orange);--f-imm:var(--red);--f-shamt:var(--pink);--f-unknown:var(--dim)}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font:13px/1.45 var(--sans);-webkit-font-smoothing:antialiased;overflow:hidden}button,input,select,textarea{font:inherit;color:inherit}code{font-family:var(--mono);background:var(--panel2);padding:0 4px;font-size:12px}b{font-weight:600}.muted{color:var(--muted)}.small{font-size:11.5px}.good{color:var(--green)}.bad{color:var(--red)}.spacer{flex:1}.app{grid-template-rows:auto minmax(0,1fr);height:100%;display:grid;overflow:hidden}.top{border-bottom:1px solid var(--line);background:var(--panel);flex-wrap:wrap;align-items:center;gap:8px 14px;min-height:46px;padding:6px 14px;display:flex}.brand{flex:0 auto;align-items:baseline;gap:10px;min-width:0;display:flex}.logo{font-family:var(--mono);letter-spacing:.04em;color:var(--accent);font-size:17px;font-weight:600}.tag{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:12px;overflow:hidden}@media (width<=1640px){.tag{display:none}}.controls,.right{align-items:center;gap:6px;margin-left:auto;display:flex}.sep{background:var(--line2);width:1px;height:20px;margin:0 4px}.main{background:var(--line);flex-direction:row;gap:0;min-height:0;display:flex;overflow:hidden}.splitter{background:var(--line);touch-action:none;flex:none;position:relative}.splitter.horizontal{cursor:col-resize;width:5px}.splitter.vertical{cursor:row-resize;height:5px}.splitter:hover,.splitter.active{background:var(--accent)}.splitter:focus-visible{background:var(--accent);outline:none}.splitter .grip{background:var(--line2);position:absolute}.splitter.horizontal .grip{width:3px;height:26px;margin-top:-13px;top:50%;left:1px}.splitter.vertical .grip{width:26px;height:3px;margin-left:-13px;top:1px;left:50%}.splitter:hover .grip,.splitter.active .grip{background:var(--accent)}.col{background:var(--bg);flex-direction:column;gap:1px;min-width:0;min-height:0;display:flex;overflow:hidden}.col>.panel+.panel{border-top:1px solid var(--line)}.panel{background:var(--panel);flex-direction:column;min-width:0;min-height:0;display:flex;overflow:hidden}.panel-head{border-bottom:1px solid var(--line);text-transform:uppercase;letter-spacing:.08em;height:28px;min-height:28px;color:var(--muted);flex:none;align-items:center;gap:10px;padding:0 10px;font-size:11px;display:flex}.panel-head .title{color:var(--text);font-weight:600}.panel-tools{border-bottom:1px solid var(--line);color:var(--muted);flex:none;align-items:center;gap:10px;padding:4px 8px;font-size:11.5px;display:flex}.editor-panel,.console-panel,.narration-panel{flex:1 1 0;min-height:60px}.narration{flex:1;min-height:0;padding:4px 0 8px;font-size:12.5px;line-height:1.5;overflow:auto}.narration.empty{color:var(--muted);padding:10px 12px}.nar-group{padding:2px 0}.nar-group+.nar-group{border-top:1px solid var(--line)}.nar-line{align-items:baseline;gap:8px;padding:3px 10px 1px;display:flex}.nar-lineno{color:var(--dim);font-family:var(--mono);flex:none;font-size:11px}.nar-src{font-family:var(--mono);color:var(--cyan);white-space:nowrap;text-overflow:ellipsis;font-size:11.5px;overflow:hidden}.nar-item{gap:8px;padding:1px 10px 1px 14px;display:flex}.nar-item.current{background:var(--accent-bg);box-shadow:inset 3px 0 0 var(--accent)}.nar-step{color:var(--dim);font-family:var(--mono);text-align:right;flex:none;min-width:34px;font-size:11px}.nar-text{color:var(--text)}.nar-item.current .nar-text{color:var(--accent)}.listing-panel{flex:1 1 0;min-height:60px}.decoder-panel,.regs-panel{flex:1 1 0;min-height:60px;overflow:auto}.mem-panel,.frames-panel{flex:1 1 0;min-height:60px}@media (width<=1180px){body{overflow:auto}.app{grid-template-rows:auto auto;height:auto;min-height:100%;overflow:visible}.top{flex-wrap:wrap;gap:8px;height:auto;padding:8px 14px}.controls,.right{margin-left:0}.main{display:block;overflow:visible}.splitter.horizontal{display:none}.col{min-height:0;display:block;overflow:visible;flex:none!important}.col>.panel{display:flex;flex:none!important}.editor-panel{min-height:300px;height:52vh!important}.console-panel{min-height:120px;height:24vh!important}.narration-panel{min-height:140px;height:32vh!important}.listing-panel{height:60vh!important}.decoder-panel{max-height:46vh;overflow:auto;height:auto!important}.regs-panel{height:44vh!important}.mem-panel{height:40vh!important}.frames-panel{height:32vh!important}.splitter.vertical{display:none}.reg-grid{grid-template-columns:minmax(0,1fr)}}@media (width<=620px){.top{padding:8px 10px}.controls{flex-wrap:wrap;row-gap:6px;width:100%}.btn{padding:4px 8px}.sep{display:none}.right{width:100%}.examples{flex:1;max-width:none}.speed input{width:90px}.col-bin,.listing-head .col-bin{display:none}.reg-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.dec-field .dec-val{font-size:10px}}.btn{background:var(--panel2);border:1px solid var(--line2);color:var(--text);cursor:pointer;white-space:nowrap;height:28px;padding:4px 10px;font-size:12.5px}.btn:hover:not(:disabled){border-color:var(--muted);background:#1a2230}.btn:disabled{opacity:.4;cursor:default}.btn.primary{background:var(--accent);color:#12100a;border-color:var(--accent);min-width:84px;font-weight:600}.btn.primary:hover:not(:disabled){background:#ffc857;border-color:#ffc857}.btn.primary.pause{background:var(--panel2);color:var(--accent);border-color:var(--accent)}.link{color:var(--blue);cursor:pointer;text-transform:none;letter-spacing:0;background:0 0;border:none;padding:0;font-size:11.5px}.link:hover{text-decoration:underline}.seg{border:1px solid var(--line2);display:inline-flex}.seg button{color:var(--muted);cursor:pointer;border:none;border-right:1px solid var(--line2);white-space:nowrap;background:0 0;height:26px;padding:3px 9px;font-size:12px}.seg button:last-child{border-right:none}.seg button.on{background:var(--panel2);color:var(--text)}.seg.mode button.on{color:var(--accent)}.speed{color:var(--muted);align-items:center;gap:6px;font-size:12px;display:flex}.speed input{width:110px;accent-color:var(--accent)}.speed-val{font-family:var(--mono);min-width:44px;color:var(--text)}.examples{background:var(--panel2);border:1px solid var(--line2);color:var(--text);max-width:200px;height:28px;padding:0 6px}.chk{text-transform:none;letter-spacing:0;cursor:pointer;align-items:center;gap:4px;font-size:11.5px;display:flex}.chk input{accent-color:var(--accent);margin:0}.pill{border:1px solid var(--line2);text-transform:none;letter-spacing:0;padding:1px 7px;font-size:11px}.pill.ok{color:var(--green);border-color:#7ccc6f59}.pill.bad{color:var(--red);border-color:#ef6b6b73}.pill.warn{color:var(--accent);border-color:#f2b74166}.toast{background:var(--accent);color:#12100a;padding:6px 14px;font-size:12.5px;font-weight:600;position:fixed;bottom:18px;left:50%;transform:translate(-50%)}.editor{font-family:var(--mono);background:var(--panel);flex:1;min-height:0;font-size:12.5px;line-height:19px;position:relative;overflow:auto}.editor-inner{min-width:max-content;min-height:100%;display:flex}.gutter{background:var(--panel);border-right:1px solid var(--line);width:48px;color:var(--dim);text-align:right;-webkit-user-select:none;user-select:none;z-index:2;flex:none;padding:8px 0;position:sticky;left:0}.gutter-line{cursor:pointer;justify-content:flex-end;align-items:center;gap:4px;height:19px;padding-right:8px;display:flex}.gutter-line:hover{color:var(--muted)}.gutter-line.active{color:var(--accent)}.gutter-line.active .ln{font-weight:600}.bp-dot{background:0 0;border:1px solid #0000;width:8px;height:8px;display:inline-block}.gutter-line:hover .bp-dot{border-color:var(--red)}.gutter-line.bp .bp-dot{background:var(--red);border-color:var(--red)}.editor-body{flex:1;min-width:max-content;position:relative}.hl,.ta{font:inherit;line-height:inherit;white-space:pre;tab-size:4;margin:0;padding:8px 12px}.hl{color:var(--text);pointer-events:none;min-height:100%}.hl .line{min-height:19px}.hl .line.active{background:var(--accent-bg);box-shadow:inset 3px 0 0 var(--accent);margin-left:-12px;padding-left:9px}.hl .line.hovered{background:#62a8ff14}.hl .line.error{box-shadow:inset 3px 0 0 var(--red);background:#ef6b6b24;margin-left:-12px;padding-left:9px}.ta{color:#0000;width:100%;height:100%;caret-color:var(--text);resize:none;background:0 0;border:none;outline:none;position:absolute;inset:0;overflow:hidden}.ta::selection{background:#62a8ff4d}.tk-kw{color:var(--purple)}.tk-ty{color:var(--cyan)}.tk-num{color:var(--orange)}.tk-str{color:var(--green)}.tk-cm{color:var(--dim);font-style:italic}.tk-pp{color:var(--muted)}.tk-fn,.tk-bi{color:var(--blue)}.tk-op{color:var(--text)}.tk-lbl{color:var(--accent)}.tk-mn{color:var(--purple)}.tk-dir{color:var(--cyan)}.tk-reg{color:var(--blue)}.error-bar{color:#ffb3b3;font-size:12px;font-family:var(--mono);background:#ef6b6b1f;border-top:1px solid #ef6b6b66;flex:none;padding:6px 10px}.listing{font-family:var(--mono);flex:1;min-height:0;font-size:12px;line-height:19px;overflow:auto}.listing-body{position:relative}.listing-head{background:var(--panel2);color:var(--muted);text-transform:uppercase;letter-spacing:.08em;border-bottom:1px solid var(--line);z-index:1;padding:2px 0;font-size:10.5px;display:flex;position:sticky;top:0}.lrow{white-space:pre;height:19px;display:flex}.lrow.instr:hover{background:var(--panel2)}.lrow.hovered{background:#62a8ff14}.lrow.pc{background:var(--accent-bg);box-shadow:inset 3px 0 0 var(--accent)}.lrow.bp .bp-dot{background:var(--red);border-color:var(--red)}.lrow.label .col-asm{color:var(--accent)}.lrow.comment .col-asm{color:var(--dim);font-style:italic}.lrow.directive .col-asm{color:var(--cyan)}.lrow.sub .col-asm{color:var(--muted)}.col-bp{cursor:pointer;flex:none;justify-content:center;align-items:center;width:18px;display:flex}.col-bp:hover .bp-dot{border-color:var(--red)}.col-addr{width:72px;color:var(--muted);cursor:pointer;flex:none}.lrow.pc .col-addr{color:var(--accent)}.col-hex{width:74px;color:var(--text);flex:none}.col-bin{flex:none;width:238px}.col-asm{text-overflow:ellipsis;flex:1;padding-left:8px;overflow:hidden}.expanded{color:var(--dim)}.bits{display:inline-block}.f-opcode{color:var(--f-opcode)}.f-rd{color:var(--f-rd)}.f-funct3{color:var(--f-funct3)}.f-rs1{color:var(--f-rs1)}.f-rs2{color:var(--f-rs2)}.f-funct7{color:var(--f-funct7)}.f-imm{color:var(--f-imm)}.f-shamt{color:var(--f-shamt)}.f-unknown{color:var(--f-unknown)}.lrow.sub .col-bin,.lrow.sub .col-hex,.lrow.sub .col-addr{opacity:.85}.decoder{font-family:var(--mono);flex-direction:column;gap:8px;padding:8px 10px 10px;font-size:12px;display:flex}.decoder.empty{color:var(--muted)}.dec-head{flex-wrap:wrap;align-items:baseline;gap:12px;display:flex}.dec-pc{color:var(--muted)}.dec-text{color:var(--text);font-size:13px;font-weight:600}.dec-fmt{border:1px solid var(--line2);color:var(--muted);padding:0 6px;font-size:11px}.dec-desc{color:var(--muted)}.dec-fields{gap:3px;display:flex}.dec-field{border:1px solid var(--line2);background:var(--panel2);flex-direction:column;flex-basis:0;align-items:center;min-width:0;padding:3px 4px;display:flex}.dec-field .dec-range{color:var(--muted);font-size:10px}.dec-field .dec-bits{letter-spacing:.08em;font-size:13px;font-weight:600}.dec-field .dec-name{text-transform:uppercase;letter-spacing:.06em;font-size:10.5px}.dec-field .dec-val{color:var(--text);white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:11px;overflow:hidden}.dec-field.f-opcode{border-color:var(--f-opcode)}.dec-field.f-opcode .dec-bits,.dec-field.f-opcode .dec-name{color:var(--f-opcode)}.dec-field.f-rd{border-color:var(--f-rd)}.dec-field.f-rd .dec-bits,.dec-field.f-rd .dec-name{color:var(--f-rd)}.dec-field.f-funct3{border-color:var(--f-funct3)}.dec-field.f-funct3 .dec-bits,.dec-field.f-funct3 .dec-name{color:var(--f-funct3)}.dec-field.f-rs1{border-color:var(--f-rs1)}.dec-field.f-rs1 .dec-bits,.dec-field.f-rs1 .dec-name{color:var(--f-rs1)}.dec-field.f-rs2{border-color:var(--f-rs2)}.dec-field.f-rs2 .dec-bits,.dec-field.f-rs2 .dec-name{color:var(--f-rs2)}.dec-field.f-funct7{border-color:var(--f-funct7)}.dec-field.f-funct7 .dec-bits,.dec-field.f-funct7 .dec-name{color:var(--f-funct7)}.dec-field.f-imm{border-color:var(--f-imm)}.dec-field.f-imm .dec-bits,.dec-field.f-imm .dec-name{color:var(--f-imm)}.dec-field.f-shamt{border-color:var(--f-shamt)}.dec-field.f-shamt .dec-bits,.dec-field.f-shamt .dec-name{color:var(--f-shamt)}.dec-field.f-unknown{border-color:var(--f-unknown)}.dec-explain{color:var(--text);min-height:18px;font-size:12.5px}.dec-explain b{color:var(--accent)}.registers{font-family:var(--mono);font-size:12px}.reg-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);display:grid}.reg{border-left:3px solid #0000;grid-template-columns:26px 34px 72px minmax(0,1fr);gap:5px;min-width:0;padding:1px 6px;line-height:18px;display:grid}.reg.pcreg{border-bottom:1px solid var(--line);border-left-color:var(--accent);color:var(--accent)}.r-x{color:var(--dim)}.r-abi{color:var(--muted)}.r-hex{color:var(--text)}.r-dec{color:var(--muted);text-align:right;text-overflow:ellipsis;padding-right:2px;overflow:hidden}.reg.written{background:var(--accent-bg);border-left-color:var(--accent)}.reg.written .r-hex,.reg.written .r-dec{color:var(--accent)}.reg.reads{background:#62a8ff1a}.reg.reads .r-abi{color:var(--blue)}.reg.willwrite{border-left-color:var(--green)}.reg.willwrite .r-abi{color:var(--green)}.sw{vertical-align:-1px;border:1px solid var(--line2);width:9px;height:9px;margin:0 3px 0 6px;display:inline-block}.sw.willwrite{border-color:var(--green)}.sw.written{background:var(--accent-bg);border-color:var(--accent)}.sw.sp{border-color:var(--blue);background:#62a8ff4d}.sw.fp{border-color:var(--purple)}.sw.wr{background:var(--accent-bg);border-color:var(--accent)}.sw.rd{border-color:var(--cyan)}.memory{min-height:0;font-family:var(--mono);flex-direction:column;flex:1;font-size:12px;display:flex}.memory.empty,.frames.empty{color:var(--muted);font-family:var(--sans);padding:10px}.mem-rows{flex:1;padding:4px 0;overflow:auto}.mrow{white-space:pre;gap:10px;padding:0 8px;line-height:18px;display:flex}.mrow.dim{opacity:.45}.m-addr{color:var(--muted);flex:none}.m-bytes{flex:none}.m-ascii{color:var(--dim);flex:none}.m-note{color:var(--purple);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:11px;overflow:hidden}.byte{display:inline}.byte.below{color:var(--dim)}.byte.sp{background:#62a8ff47}.byte.fp{box-shadow:inset 0 -2px 0 var(--purple)}.byte.wr{background:var(--accent-bg);color:var(--accent);font-weight:600}.byte.rd{box-shadow:inset 0 0 0 1px var(--cyan)}.addr-input{background:var(--panel2);border:1px solid var(--line2);width:110px;font-family:var(--mono);padding:1px 6px;font-size:12px}.legend{white-space:nowrap;align-items:center;margin-left:auto;display:flex}.frames{font-family:var(--mono);flex:1;font-size:12px;overflow:auto}.frame{border-bottom:1px solid var(--line)}.frame-head{background:var(--panel2);align-items:baseline;gap:8px;padding:3px 10px;display:flex}.frame.top .frame-head{box-shadow:inset 3px 0 0 var(--accent)}.frame-depth{color:var(--dim)}.frame-name{color:var(--accent);font-weight:600}.frame-args{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.frame-pc{color:var(--dim);white-space:nowrap;margin-left:auto;font-size:11px}.frame-locals{padding:2px 10px 4px 22px}.local.clickable{cursor:pointer}.local.clickable:hover{background:#62a8ff1a}.local{grid-template-columns:90px 90px 86px 1fr;gap:8px;line-height:18px;display:grid}.l-type{color:var(--cyan)}.l-name{color:var(--text)}.l-addr{color:var(--dim)}.l-val{color:var(--green);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.console{flex-direction:column;flex:1;min-height:0;display:flex}.con-out{font-family:var(--mono);white-space:pre-wrap;word-break:break-all;color:var(--text);flex:1;min-height:0;margin:0;padding:8px 10px;font-size:12.5px;overflow:auto}.con-bar{border-top:1px solid var(--line);align-items:center;gap:8px;min-height:24px;padding:3px 10px;font-size:11.5px;display:flex}.st{color:var(--muted)}.st.ok{color:var(--green)}.st.bad{color:var(--red)}.st.warn{color:var(--accent)}.con-input{border-top:1px solid var(--line);align-items:center;gap:6px;padding:6px 10px;display:flex}.con-input .prompt{color:var(--accent);font-family:var(--mono)}.con-input input{background:var(--panel2);border:1px solid var(--accent);font-family:var(--mono);flex:1;padding:3px 8px}.con-input button{background:var(--accent);color:#12100a;cursor:pointer;border:none;padding:4px 10px;font-weight:600}.con-stdin{resize:none;background:var(--panel2);border:none;border-top:1px solid var(--line);height:64px;font-family:var(--mono);outline:none;padding:6px 10px;font-size:12px}.modal-bg{z-index:10;background:#05070ab3;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--panel);border:1px solid var(--line2);flex-direction:column;width:min(760px,92vw);max-height:86vh;display:flex}.modal-head{border-bottom:1px solid var(--line);align-items:center;padding:10px 16px;display:flex}.modal-head .title{font-family:var(--mono);color:var(--accent);font-size:15px;font-weight:600}.modal-body{padding:6px 18px 18px;font-size:13px;line-height:1.55;overflow:auto}.modal-body h3{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:16px 0 4px;font-size:11.5px}.modal-body ul{margin:4px 0;padding-left:18px}.modal-body p{margin:6px 0}.help-table{border-collapse:collapse;font-size:12.5px}.help-table td{border:1px solid var(--line);padding:2px 10px}.help-table td:nth-child(odd){font-family:var(--mono);color:var(--accent)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--line2);border:2px solid var(--panel)}::-webkit-scrollbar-track{background:0 0}
