@import"https://fonts.googleapis.com/css2?family=Press+Start+2P&family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap";:root{--void: #0a0b0e;--ink: #14161b;--ink-raised:#1a1d24;--line: #262a33;--line-soft: #1c1f26;--paper: #eceff5;--dim: #838a9c;--faint: #4c5262;--gold: #d3a34c;--gold-dim: #8a6f38;--signal: #ff5c5c;--led-green: #57e08a;--face-pixel: "Press Start 2P", monospace;--face-sans: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--face-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--radius: 3px;--radius-sm: 2px;--sidebar-w: 380px}*{box-sizing:border-box}html,body{margin:0;height:100%}body{background:var(--void);color:var(--paper);font-family:var(--face-sans);font-size:13px;overflow:hidden;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}#app{height:100vh;display:flex;flex-direction:column}.mono{font-family:var(--face-mono);font-variant-numeric:tabular-nums}::selection{background:var(--gold);color:#1a1300}:focus-visible{outline:2px solid var(--gold);outline-offset:2px;border-radius:var(--radius-sm)}.toolbar{display:flex;align-items:center;gap:8px;padding:8px 16px;background:linear-gradient(180deg,rgba(255,255,255,.03),transparent 40%),var(--ink-raised);border-bottom:1px solid var(--line);box-shadow:0 1px #ffffff05 inset,0 4px 12px #0000004d;flex-shrink:0;position:relative;z-index:5}.toolbar:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:linear-gradient(90deg,transparent,rgba(211,163,76,.55) 18%,rgba(211,163,76,.55) 82%,transparent)}.toolbar .brand,.play-bar .brand{display:flex;align-items:center;gap:9px;margin-right:4px}.brand .led{width:8px;height:8px;border-radius:50%;flex-shrink:0;background:#3a1414;box-shadow:inset 0 0 0 1px #00000080;transition:background .2s,box-shadow .2s}body.is-running .brand .led{background:var(--led-green);box-shadow:0 0 6px 2px #57e08a8c,inset 0 0 2px #fff6}.brand .brand-word{font-family:var(--face-pixel);font-size:13px;color:var(--paper);letter-spacing:1px}.brand .brand-sub{font-family:var(--face-mono);font-size:10px;font-weight:600;letter-spacing:3px;color:var(--gold);padding-top:2px}.toolbar .rom-name{color:var(--dim);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-family:var(--face-mono)}.btn{background:var(--ink);color:var(--paper);border:1px solid var(--line);border-radius:var(--radius-sm);padding:6px 13px;cursor:pointer;font-size:12.5px;font-weight:500;font-family:var(--face-sans);transition:border-color .15s ease,color .15s ease,background .15s ease}.btn:hover{border-color:var(--gold);color:#fff;background:#1d2029}.btn:active{transform:translateY(1px)}.btn.primary{background:var(--gold);color:#201704;border-color:var(--gold);font-weight:700}.btn.primary:hover{background:#e0b25c;border-color:#e0b25c;color:#201704}.btn.danger{color:var(--signal);border-color:#ff5c5c59}.btn.danger:hover{border-color:var(--signal);color:#fff;background:#ff5c5c1f}.btn.icon-btn{padding:6px 8px;font-size:14px;line-height:1}select,input[type=text],input[type=number]{background:var(--ink);color:var(--paper);border:1px solid var(--line);border-radius:var(--radius-sm);padding:5px 8px;font-size:12px;font-family:var(--face-sans);transition:border-color .15s}select:focus,input:focus{outline:none;border-color:var(--gold)}.spacer{flex:1}.divider{width:1px;height:22px;background:var(--line)}.status{color:var(--dim);font-size:11px;font-family:var(--face-mono);letter-spacing:.3px}input[type=range]{accent-color:var(--gold)}.emu-layout{display:flex;flex:1;min-height:0;overflow:hidden}.emu-viewport{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:0;background:radial-gradient(120% 100% at 50% 0%,#111318 0%,var(--void) 70%);position:relative}.screen-wrap{--par: 4 / 3;position:relative;aspect-ratio:var(--par);background:#000;border-radius:var(--radius-sm);overflow:hidden;box-shadow:inset 0 0 0 1px #d3a34c2e,inset 0 0 60px #0009,0 12px 40px #0009;width:min(90vw,calc((100vh - 140px) * var(--par)));max-height:calc(100vh - 140px);transition:width .2s ease}.screen-wrap.native{--par: 256 / 240}#screen{width:100%;height:100%;image-rendering:pixelated;display:block}.screen-wrap.smooth #screen{image-rendering:auto}.screen-wrap:after{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at center,transparent 62%,rgba(0,0,0,.32) 100%)}.screen-wrap.crt{border-radius:20px;box-shadow:inset 0 0 0 1px #d3a34c2e,inset 0 0 60px #0009,0 12px 40px #0009,0 0 40px 6px #d3a34c1a,0 0 90px 18px #78c8960d}.screen-wrap.crt #screen{filter:contrast(1.06) saturate(1.1) brightness(1.02)}.screen-wrap.crt:after{background:radial-gradient(ellipse 60% 40% at 28% 18%,rgba(255,255,255,.05),transparent 70%),radial-gradient(ellipse at center,transparent 60%,rgba(0,0,0,.34) 100%)}.screen-wrap.crt:before{content:"";position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(to bottom,#0000 0px 1px,#00000038 2px 3px),repeating-linear-gradient(to right,#ff3c3c0d 0px 1px,#3cff780d 1px 2px,#5078ff0d 2px 3px)}.screen-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;text-align:center;color:var(--faint);font-size:12.5px;pointer-events:none;flex-direction:column;gap:12px;z-index:2;font-family:var(--face-sans)}.screen-overlay .big{font-family:var(--face-pixel);font-size:28px;letter-spacing:6px;color:var(--dim)}.screen-overlay .big b{color:var(--gold);text-shadow:0 0 20px rgba(211,163,76,.5);font-weight:400}.screen-overlay .sub{color:var(--faint);font-size:12px;margin-top:4px}.emu-controls{display:flex;align-items:center;justify-content:center;gap:16px;padding:10px 16px;flex-shrink:0;background:var(--ink-raised);border-top:1px solid var(--line);color:var(--dim);font-family:var(--face-mono);font-size:11px;letter-spacing:.3px}.emu-controls .hint{opacity:.7}.emu-controls kbd{display:inline-block;padding:1px 5px;background:var(--ink);border:1px solid var(--line);border-radius:2px;font-family:var(--face-mono);font-size:10px;color:var(--dim)}.sidebar{width:var(--sidebar-w);flex-shrink:0;background:var(--ink);border-left:1px solid var(--line);display:flex;flex-direction:column;overflow:hidden;transition:width .2s ease,opacity .2s ease}.sidebar.closed{width:0;border-left:none;opacity:0;pointer-events:none}.sidebar-inner{width:var(--sidebar-w);flex:1;display:flex;flex-direction:column;min-height:0;overflow-y:auto;overflow-x:hidden}.sidebar-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--ink-raised);border-bottom:1px solid var(--line-soft);font-size:10.5px;letter-spacing:1.4px;text-transform:uppercase;color:var(--dim);font-weight:600;flex-shrink:0}.sidebar-header .close-btn{background:none;border:none;color:var(--dim);cursor:pointer;font-size:16px;padding:2px 6px;line-height:1}.sidebar-header .close-btn:hover{color:var(--signal)}.panel{background:var(--ink);border:1px solid var(--line-soft);border-radius:var(--radius);margin:6px 8px;display:flex;flex-direction:column;min-height:0;overflow:hidden;transition:border-color .2s}.panel:hover{border-color:var(--line)}.panel-title{display:flex;align-items:center;justify-content:space-between;padding:7px 10px 7px 12px;background:var(--ink-raised);border-bottom:1px solid var(--line-soft);font-size:10.5px;letter-spacing:1.4px;text-transform:uppercase;color:var(--dim);cursor:pointer;user-select:none;font-weight:600;font-family:var(--face-sans)}.panel-title .eyebrow{position:relative;color:var(--gold);font-weight:700;padding:3px 7px 3px 9px;background:#d3a34c14;border:1px solid rgba(211,163,76,.3);border-radius:2px;font-family:var(--face-mono);font-size:9.5px;letter-spacing:1px}.panel-title .eyebrow:before{content:"";position:absolute;top:-1px;left:-1px;width:4px;height:4px;border-top:1px solid var(--gold);border-left:1px solid var(--gold)}.panel-body{padding:8px 10px;overflow:auto;flex:1}.collapsed .panel-body{display:none}.dasm{font-size:12px;line-height:1.55}.dasm .line{white-space:pre;padding:1px 6px;border-radius:2px;border-left:2px solid transparent;transition:background .1s}.dasm .line.hit{background:#d3a34c24;border-left-color:var(--gold)}.dasm .line.clickable:hover{background:#ffffff0a;cursor:pointer}.dasm .mnem{color:var(--gold);font-weight:600}.dasm .addr{color:var(--dim)}.dasm .bytes{color:#5a606f}.reg-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:4px 10px}.reg{display:flex;justify-content:space-between;padding:4px 8px;font-size:12px;background:var(--ink-raised);border-radius:2px;border:1px solid var(--line-soft)}.reg .k{color:var(--dim);font-weight:500;font-family:var(--face-sans)}.reg .v{color:var(--gold);font-family:var(--face-mono)}.flag-bits{display:flex;gap:4px;margin-top:6px}.flag{flex:1;text-align:center;padding:3px 0;background:var(--ink-raised);border:1px solid var(--line-soft);border-radius:2px;color:var(--faint);font-size:11px;font-weight:700;font-family:var(--face-mono);transition:all .15s}.flag.on{background:var(--gold);border-color:var(--gold);color:#201704;box-shadow:0 0 8px #d3a34c59}.mem-dump{font-size:11px;line-height:1.5;white-space:pre;color:#b9c1d3;font-family:var(--face-mono)}.trace-out{font-size:11px;font-family:var(--face-mono);color:var(--dim)}.list-row{padding:4px 8px;font-size:12px;border-bottom:1px solid var(--line-soft);display:flex;align-items:center;gap:6px;border-radius:2px;font-family:var(--face-sans)}.list-row:hover{background:var(--ink-raised)}.list-row .addr{color:var(--gold);font-family:var(--face-mono)}.del{color:var(--signal);cursor:pointer;font-weight:700;opacity:.6}.del:hover{opacity:1}.console{background:#07080a;border:1px solid var(--line-soft);border-radius:var(--radius-sm);height:160px;overflow:auto;font-family:var(--face-mono);font-size:12px;padding:8px 10px;box-shadow:inset 0 2px 10px #00000080}.console .out{color:var(--dim);white-space:pre-wrap;word-break:break-word}.console .in{color:var(--gold)}.console-input{width:100%;background:#07080a;border:1px solid var(--line-soft);color:var(--paper);padding:7px 10px;margin-top:6px;border-radius:var(--radius-sm);font-family:var(--face-mono);font-size:12px}.console-input:focus{border-color:var(--gold);outline:none}.console-input::placeholder{color:var(--faint)}.info-line{font-size:12px;padding:3px 0;font-family:var(--face-sans)}.info-line .k{color:var(--dim);display:inline-block;min-width:100px;font-weight:500}.info-line b{color:var(--paper);font-family:var(--face-mono);font-weight:600}.ppu-canv{background:#000;border:1px solid var(--line-soft);border-radius:var(--radius-sm);margin-bottom:6px}.tabs{display:flex;gap:4px;flex-wrap:wrap;padding:0 8px 8px}.tab{padding:4px 11px;background:var(--ink-raised);border:1px solid var(--line-soft);border-radius:2px;cursor:pointer;font-size:10.5px;font-weight:600;letter-spacing:.4px;transition:all .15s;color:var(--dim);font-family:var(--face-sans)}.tab:hover{border-color:var(--gold);color:#fff}.tab.active{background:var(--gold);color:#201704;border-color:var(--gold);font-weight:700}.statusbar{display:none}.statusbar.visible{display:flex;gap:18px;padding:6px 16px;background:var(--ink-raised);border-top:1px solid var(--line);font-size:11px;color:var(--faint);font-family:var(--face-mono);flex-shrink:0}.statusbar .val{color:var(--gold);font-weight:600}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--line);border-radius:6px;border:2px solid var(--ink)}::-webkit-scrollbar-thumb:hover{background:var(--gold-dim)}.hidden{display:none!important}.flash{animation:flash 1s ease}@keyframes flash{0%{box-shadow:0 0 0 3px var(--gold)}to{box-shadow:0 0 0 0 transparent}}:fullscreen .toolbar,:fullscreen .emu-controls,:fullscreen .sidebar{display:none!important}:fullscreen .emu-viewport{background:#000}:fullscreen .screen-wrap{width:100vw;max-height:100vh;border-radius:0;box-shadow:none}.modal-backdrop{position:fixed;inset:0;z-index:30;background:#060709b8;display:flex;align-items:center;justify-content:center;padding:20px}.modal-backdrop.hidden{display:none}.modal{width:min(420px,100%);background:var(--ink);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 24px 70px #0009;overflow:hidden}.modal-body{padding:12px 16px}.modal-note{color:var(--faint);font-size:11px;margin-top:10px;font-family:var(--face-sans)}.modal-actions{display:flex;justify-content:space-between;gap:8px;padding:12px 16px;border-top:1px solid var(--line-soft)}.key-list{display:flex;flex-direction:column;gap:6px}.key-row{display:flex;align-items:center;justify-content:space-between;padding:6px 4px}.key-row-label{font-family:var(--face-mono);font-size:12px;font-weight:600;letter-spacing:1px;color:var(--dim)}.key-chip{min-width:96px;background:var(--ink-raised);color:var(--paper);border:1px solid var(--line);border-radius:2px;padding:6px 12px;font-family:var(--face-mono);font-size:12px;cursor:pointer;transition:border-color .15s,background .15s}.key-chip:hover{border-color:var(--gold)}.key-chip.on{border-color:var(--gold);color:#201704;background:var(--gold);font-weight:700}.key-chip.listening{border-color:var(--gold);color:var(--gold);background:#d3a34c1a;animation:pulse-gold 1s ease-in-out infinite}@keyframes pulse-gold{0%,to{box-shadow:0 0 #d3a34c59}50%{box-shadow:0 0 0 4px #d3a34c00}}.link-btn{background:none;border:none;color:var(--gold);cursor:pointer;font-family:var(--face-sans);font-size:11.5px;font-weight:600;text-decoration:underline;text-underline-offset:2px;padding:0}.link-btn:hover{color:#e0b25c}.touch-controls{display:none;position:fixed;bottom:0;left:0;right:0;padding:12px 16px;background:linear-gradient(transparent,#0a0b0ef2 30%);z-index:15;pointer-events:none}.touch-controls.active{display:flex;justify-content:space-between;align-items:flex-end}.touch-controls>*{pointer-events:auto}.dpad{display:grid;grid-template-columns:44px 44px 44px;grid-template-rows:44px 44px 44px;gap:2px}.dpad-btn{background:#ffffff14;border:1px solid rgba(255,255,255,.12);border-radius:6px;color:var(--dim);font-size:18px;display:flex;align-items:center;justify-content:center;-webkit-tap-highlight-color:transparent;touch-action:manipulation;user-select:none}.dpad-btn:active{background:#d3a34c40;border-color:var(--gold)}.dpad-center{background:transparent;border:none}.ab-btns{display:flex;gap:12px;align-items:center}.ab-btn{width:52px;height:52px;border-radius:50%;background:#d3a34c26;border:2px solid rgba(211,163,76,.4);color:var(--gold);font-family:var(--face-pixel);font-size:14px;display:flex;align-items:center;justify-content:center;-webkit-tap-highlight-color:transparent;touch-action:manipulation;user-select:none}.ab-btn:active{background:#d3a34c59;transform:scale(.95)}.ab-btn.offset{transform:translateY(-10px)}.system-btns{position:absolute;top:-60px;left:50%;transform:translate(-50%);display:flex;gap:16px}.sys-btn{padding:6px 14px;background:#ffffff0f;border:1px solid rgba(255,255,255,.1);border-radius:4px;color:var(--faint);font-family:var(--face-mono);font-size:10px;letter-spacing:.5px;text-transform:uppercase;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.sys-btn:active{background:#d3a34c33;color:var(--gold)}@media (max-width: 768px){.toolbar{padding:6px 10px;gap:6px}.toolbar .btn{padding:5px 8px;font-size:11px}.brand .brand-word{font-size:11px}.brand .brand-sub{display:none}.toolbar .rom-name{max-width:120px;font-size:10px}.screen-wrap{width:min(95vw,calc((100vh - 200px) * var(--par)))}.emu-controls{font-size:10px;gap:10px;padding:8px 12px}.touch-controls.active~.emu-controls{display:none}}@media (max-width: 480px){.toolbar{flex-wrap:wrap}.toolbar .divider{display:none}}@media (prefers-reduced-motion: reduce){*{transition-duration:.01ms!important;animation-duration:.01ms!important}}body.drag-over .emu-viewport:before{content:"";position:absolute;inset:0;z-index:10;background:#d3a34c14;border:2px dashed var(--gold);border-radius:8px;pointer-events:none}
