:root{--case: #d3ccb8;--case-dark: #b9b19c;--case-shadow: #8d8674;--cap: #3b3129;--cap-2: #4a3f34;--cap-edge: #241d17;--legend: #f2efe6;--legend-dim: #b9b0a0;--screen: #0a0a0a;--phosphor: #20e820;--page: #1b1a17;--ink: #e8e4d8;--dim: #8d887c;--accent: #b8531f;--ok: #6fbf5a;--warn: #d8a33a;--err: #d05a4a;--mono: ui-monospace, "SF Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace;--sans: "Helvetica Neue", Helvetica, Arial, sans-serif}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--page);color:var(--ink);font-family:var(--sans);font-size:14px;-webkit-font-smoothing:antialiased}.app{display:flex;flex-direction:column;min-height:100%}main{display:grid;grid-template-columns:minmax(420px,1fr) minmax(560px,1fr);gap:14px;padding:14px;align-items:start}main.no-left-col{grid-template-columns:minmax(560px,1fr);max-width:960px;margin:0 auto;width:100%}@media(max-width:1100px){main{grid-template-columns:1fr}}.col-left,.col-right{display:flex;flex-direction:column;gap:14px;min-width:0}.pane{background:#211f1b;border:1px solid #35322b;border-radius:6px;padding:10px 12px 12px}.pane>header{display:flex;align-items:center;gap:10px;margin-bottom:8px;border-bottom:1px solid #35322b;padding-bottom:6px}.pane h2{font-size:12px;text-transform:uppercase;letter-spacing:.1em;margin:0;color:var(--legend-dim);font-weight:600}.pane h3{font-size:11px;text-transform:uppercase;letter-spacing:.09em;color:var(--dim);margin:0 0 6px;display:flex;align-items:center;gap:8px}.hint{font-family:var(--mono);font-size:11px;color:var(--dim);flex:1}.dim{color:var(--dim)}.small{font-size:12px}.warn{color:var(--warn);font-size:12px;margin:0 0 8px}button{font-family:var(--sans);font-size:12px;color:var(--ink);background:#35322b;border:1px solid #4a463d;border-radius:4px;padding:4px 9px;cursor:pointer}button:hover:not(:disabled){background:#45413a}button:disabled{opacity:.4;cursor:not-allowed}button.tiny{font-size:10px;padding:1px 6px}kbd{font-family:var(--mono);font-size:10px;background:#17160f;border:1px solid #4a463d;border-bottom-width:2px;border-radius:3px;padding:0 4px;color:var(--legend-dim)}.flashbar{display:flex;align-items:center;gap:10px;padding:8px 14px;background:#26241f;border-bottom:1px solid #35322b;font-size:12px;position:sticky;top:0;z-index:10}.flashbar .spacer{flex:1}.flashbar .state{font-family:var(--mono);color:var(--dim)}.dot{width:8px;height:8px;border-radius:50%;background:var(--dim)}.dot.open{background:var(--ok)}.dot.probing,.dot.connecting{background:var(--warn)}.dot.error{background:var(--err)}.dot.wrong-port{background:var(--warn)}.btn-warn-action{font-family:var(--sans);font-size:11px;background:transparent;border:1px solid var(--warn);color:var(--warn);padding:4px 8px;border-radius:4px;cursor:pointer;transition:all .15s ease}.btn-warn-action:hover{background:#f59e0b26;border-color:#fbbf24}.view-toggles{display:flex;align-items:center;gap:6px}button.toggle-btn{font-family:var(--sans);font-size:11px;background:#1c1a16;border:1px solid #3c382f;color:var(--dim);padding:3px 8px;border-radius:4px;cursor:pointer;transition:all .15s ease}button.toggle-btn:hover{color:var(--ink);background:#2a2721;border-color:#554f42}button.btn-connect-primary{background:linear-gradient(180deg,#b45309,#92400e);border:1px solid #d97706;color:#fff;font-family:var(--sans);font-size:11px;font-weight:600;padding:4px 10px;border-radius:4px;cursor:pointer;box-shadow:0 1px 3px #0006,0 0 6px #d977064d;transition:all .15s ease}button.btn-connect-primary:hover:not(:disabled){background:linear-gradient(180deg,#d97706,#b45309);border-color:#f59e0b;box-shadow:0 1px 4px #00000080,0 0 8px #f59e0b80;transform:translateY(-1px)}button.btn-connect-primary:disabled{opacity:.5;cursor:not-allowed}button.toggle-btn.active{background:#383127;border-color:var(--accent);color:var(--ink);font-weight:500;box-shadow:inset 0 1px 2px #0006}.console-pane pre{font-family:var(--mono);font-size:12px;line-height:1.35;background:var(--screen);color:var(--phosphor);border:1px solid #0f1a0f;border-radius:4px;padding:8px 10px;height:260px;overflow:auto;margin:0;white-space:pre-wrap;word-break:break-word}.console-pane pre .dim{color:#2f6b2f}.pane-close-btn{background:transparent;border:none;color:var(--dim);font-size:16px;line-height:1;padding:0 4px;cursor:pointer;border-radius:3px;transition:color .15s ease,background .15s ease}.pane-close-btn:hover{color:var(--ink);background:#ffffff14}.btn-capture{font-family:var(--sans);font-size:11px;background:#24211c;border:1px solid #3c382f;color:var(--ink);padding:3px 8px;border-radius:4px;cursor:pointer;transition:all .15s ease}.btn-capture:hover:not(:disabled){border-color:var(--accent);background:#2e2a22}.btn-capture:disabled{opacity:.5;cursor:not-allowed}.btn-options-toggle{font-family:var(--sans);font-size:11px;background:#1c1a16;border:1px solid #3c382f;color:var(--dim);padding:3px 8px;border-radius:4px;cursor:pointer;transition:all .15s ease}.btn-options-toggle:hover,.btn-options-toggle.active{color:var(--ink);background:#2a2721;border-color:var(--accent)}.options-strip{display:flex;flex-wrap:wrap;align-items:center;gap:12px;background:#181613;border:1px solid #2e2a22;border-radius:5px;padding:6px 10px;margin-bottom:10px}.option-group{display:flex;align-items:center;gap:5px}.opt-label{font-size:10px;color:var(--dim);text-transform:uppercase;letter-spacing:.06em;margin-right:2px;font-weight:600}button.opt-pill{font-family:var(--sans);font-size:11px;background:#24211c;border:1px solid #3c382f;color:var(--dim);padding:2px 8px;border-radius:12px;cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:all .15s ease}button.opt-pill:hover{color:var(--ink);border-color:#554f42;background:#2a2721}button.opt-pill.selected{background:#3c3327;border-color:var(--accent);color:var(--ink);font-weight:600}.color-swatch{width:7px;height:7px;border-radius:50%;display:inline-block}.opt-checkbox-label{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--dim);cursor:pointer;-webkit-user-select:none;user-select:none}.opt-checkbox-label:hover{color:var(--ink)}.opt-checkbox-label input[type=checkbox]{accent-color:var(--accent);cursor:pointer}.screen-container{position:relative;width:100%;max-width:560px;border-radius:4px;overflow:hidden}.screen-container.with-scanlines:after{content:" ";position:absolute;inset:0;background:linear-gradient(#12101000 50%,#00000059 50%);background-size:100% 4px;pointer-events:none;z-index:2}.screen{width:100%;max-width:560px;image-rendering:pixelated;display:block;background:#000;border:1px solid #0f1a0f;border-radius:4px}.screen-status{font-family:var(--mono);font-size:11px;color:var(--dim);margin:6px 0 0}.screen-fallback,.screen-text pre{font-family:var(--mono);font-size:12px;line-height:1.25;background:var(--screen);color:var(--phosphor);padding:8px;border-radius:4px;overflow:auto;margin:6px 0 0}.screen-text summary{cursor:pointer;font-size:11px;color:var(--dim);margin-top:6px}.debug-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px;margin-bottom:12px}.regs{font-family:var(--mono);font-size:12px;border-collapse:collapse}.regs th{text-align:right;color:var(--dim);font-weight:400;padding:0 6px 0 0}.regs td{padding:0 12px 0 0}.flags .on{color:var(--phosphor);font-weight:700}.flags .off{color:#4a463d}.flags .legend{color:var(--dim);font-size:10px;margin-left:6px}.cmd-row{display:flex;flex-wrap:wrap;gap:6px}.mem-jumps{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:8px}.mem{font-family:var(--mono);font-size:11px;line-height:1.5;margin:0;max-height:220px;overflow:auto}.mem .addr{color:var(--accent)}.mem .gap{margin-left:6px}.mem .ascii{color:var(--dim);margin-left:8px}.gamepad-options{margin-bottom:8px}.gamepad-badge{font-size:11px;color:var(--ok);background:#6fbf5a1f;border:1px solid rgba(111,191,90,.35);padding:2px 7px;border-radius:4px;display:inline-flex;align-items:center;gap:4px;font-weight:500}.joystick-wrapper{display:flex;flex-direction:column;align-items:center;gap:8px;margin:10px 0 12px;padding:10px;background:#191714;border:1px solid #2e2a22;border-radius:6px}.joystick-pad{position:relative;width:140px;height:140px;background:#141210;border:2px solid #3c382f;border-radius:8px;touch-action:none;cursor:crosshair;-webkit-user-select:none;user-select:none;box-shadow:inset 0 2px 6px #000000b3}.joystick-crosshair-h{position:absolute;top:50%;left:0;right:0;height:1px;background:#ffffff1a;pointer-events:none}.joystick-crosshair-v{position:absolute;left:50%;top:0;bottom:0;width:1px;background:#ffffff1a;pointer-events:none}.joystick-thumb{position:absolute;width:22px;height:22px;margin-left:-11px;margin-top:-11px;background:linear-gradient(135deg,#d97706,#92400e);border:2px solid #fbbf24;border-radius:50%;pointer-events:none;box-shadow:0 0 10px #f59e0b99,0 2px 4px #00000080;transition:transform .05s ease-out}.joystick-readout{display:flex;gap:16px;font-family:var(--mono);font-size:11px;color:var(--legend-dim)}.joystick-readout strong{color:var(--ink)}.paddles-sliders{margin-top:8px}.gamepad-buttons{display:flex;gap:8px;margin-bottom:10px}.paddle-btn{flex:1;padding:10px;font-size:13px}.paddle-btn.on{background:var(--accent);border-color:var(--accent);color:#fff}.paddle{display:flex;align-items:center;gap:8px;margin-bottom:6px;font-size:12px}.paddle span{width:80px;color:var(--dim)}.paddle input{flex:1;accent-color:var(--accent)}.paddle output{font-family:var(--mono);width:34px;text-align:right;color:var(--legend-dim)}.keyboard-case{background:linear-gradient(180deg,var(--case) 0%,var(--case-dark) 100%);border-radius:10px;padding:12px 16px;box-shadow:inset 0 1px #e6e0cd,inset 0 -2px 6px var(--case-shadow),0 3px 10px #00000080;overflow-x:auto;border:1px solid transparent;transition:border-color .2s ease,box-shadow .2s ease}.keyboard-case.offline-case{border-color:#d9770640}.keyboard-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;padding:0 4px}.keyboard-brand{display:flex;align-items:center;gap:12px}.apple-badge{font-family:Garamond,Apple Garamond,Times New Roman,serif;font-style:italic;font-weight:700;font-size:15px;color:#5a4f40;letter-spacing:-.02em;text-shadow:0 1px 0 rgba(255,255,255,.6);-webkit-user-select:none;user-select:none}.pwr-indicator{display:inline-flex;align-items:center;gap:6px;background:#2a231c;padding:3px 8px;border-radius:4px;border:1px solid #1a1510;box-shadow:inset 0 1px 3px #0009;font-family:var(--sans);font-size:9px;letter-spacing:.08em;font-weight:700;-webkit-user-select:none;user-select:none}.pwr-led{width:7px;height:7px;border-radius:50%;display:inline-block;transition:all .1s ease}.pwr-indicator.on .pwr-led{background:#10b981;box-shadow:0 0 6px #10b981,inset 0 1px 1px #ffffffe6}.pwr-indicator.on .pwr-led.tx-active{background:#a7f3d0;box-shadow:0 0 10px #34d399,0 0 3px #fff;transform:scale(1.2)}.pwr-indicator.on .pwr-text{color:#34d399}.tx-tag{font-size:8px;color:#065f46;background:#064e3b;padding:1px 3px;border-radius:2px;opacity:.4;transition:all .08s ease}.tx-tag.active{opacity:1;background:#10b981;color:#022c22;font-weight:800}.pwr-indicator.probing .pwr-led{background:#f59e0b;box-shadow:0 0 6px #f59e0b;animation:probe-pulse 1s infinite alternate}.pwr-indicator.probing .pwr-text{color:#fbbf24}@keyframes probe-pulse{0%{opacity:.4}to{opacity:1}}.pwr-indicator.off .pwr-led{background:#4a4036;box-shadow:inset 0 1px 2px #000c}.pwr-indicator.off .pwr-text{color:#8c8273}.pwr-indicator.error .pwr-led{background:#ef4444;box-shadow:0 0 6px #ef4444cc}.pwr-indicator.error .pwr-text{color:#f87171}.keyboard-status-bar{display:flex;align-items:center}.kb-notice{display:inline-flex;align-items:center;gap:8px;background:#2a231ccc;border:1px solid #4a3e30;padding:2px 8px;border-radius:4px;transition:all .2s ease}.kb-notice.alert{background:#b4530959;border-color:#f59e0b;box-shadow:0 0 8px #f59e0b80;animation:kb-shake .3s ease}@keyframes kb-shake{0%,to{transform:translate(0)}25%{transform:translate(-3px)}75%{transform:translate(3px)}}.kb-notice-msg{font-family:var(--sans);font-size:11px;color:#d1b490}.kb-notice.alert .kb-notice-msg{color:#fbbf24;font-weight:600}.kb-quick-connect{background:linear-gradient(180deg,#b45309,#92400e);border:1px solid #d97706;color:#fff;font-family:var(--sans);font-size:10px;font-weight:700;padding:3px 8px;border-radius:3px;cursor:pointer;box-shadow:0 1px 2px #0006;transition:all .15s ease}.kb-quick-connect:hover:not(:disabled){background:linear-gradient(180deg,#d97706,#b45309);border-color:#f59e0b;box-shadow:0 0 6px #f59e0b99}.kb-connected-tag{display:inline-flex;align-items:center;gap:5px;font-family:var(--sans);font-size:11px;font-weight:600;color:#34d399}.online-dot{width:6px;height:6px;border-radius:50%;background:#10b981;box-shadow:0 0 4px #10b981}.status-highlight{font-weight:700;padding:1px 4px;border-radius:3px;display:inline-block;margin-right:4px}.status-highlight.offline{background:#ef444426;color:#f87171;border:1px solid rgba(239,68,68,.3)}.status-highlight.online{background:#10b98126;color:#34d399;border:1px solid rgba(16,185,129,.3)}.status-highlight.paused{background:#f59e0b26;color:#fbbf24;border:1px solid rgba(245,158,11,.3)}.link-inline-btn{background:none;border:none;color:#f59e0b;text-decoration:underline;cursor:pointer;padding:0;font:inherit;font-weight:600}.link-inline-btn:hover{color:#fbbf24}.keyboard-bezel{background:#2a231c;border-radius:8px;padding:10px 12px;box-shadow:inset 0 2px 6px #000000bf,0 1px #ffffff26;display:flex;justify-content:center;align-items:center;width:100%;overflow-x:auto}.board{position:relative;margin:0 auto;--unit: 34px}.cap{position:absolute;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0;background:linear-gradient(180deg,var(--cap-2) 0%,var(--cap) 55%,var(--cap-edge) 100%);border:1px solid var(--cap-edge);border-radius:calc(var(--unit, 34px) * .1);color:var(--legend);font-family:var(--sans);font-size:calc(var(--unit, 34px) * .32);line-height:1.05;padding:0;cursor:pointer;box-shadow:0 2px 0 var(--cap-edge),inset 0 1px #ffffff17;user-select:none;-webkit-user-select:none;touch-action:none}.cap:hover{background:linear-gradient(180deg,#574a3d 0%,#453a2f 55%,var(--cap-edge) 100%)}.cap.down{transform:translateY(2px);box-shadow:inset 0 2px 4px #0009;background:linear-gradient(180deg,var(--cap-edge) 0%,#332b23 100%);color:#fff}.cap.mod{background:linear-gradient(180deg,#463d33,#38312a 60%,#221c16)}.cap.latch{border-radius:calc(var(--unit, 34px) * .09);box-shadow:inset 0 0 0 1px #00000080,0 2px 0 var(--cap-edge)}.cap-top{font-size:calc(var(--unit, 34px) * .38);color:var(--legend)}.cap-bottom{font-size:calc(var(--unit, 34px) * .32);color:var(--legend-dim)}.cap-main{font-size:calc(var(--unit, 34px) * .36)}.cap-word{font-size:calc(var(--unit, 34px) * .25);letter-spacing:.06em;color:var(--legend);text-transform:uppercase}.cap[aria-label=apple-o],.cap[aria-label=apple-c]{font-size:calc(var(--unit, 34px) * .52)}.cap[aria-label=reset]{background:linear-gradient(180deg,#7a4a3a,#5c3628);border-color:#40241a;color:#ffe9df}.keyboard-note{font-size:11px;color:#6d675a;margin:8px 2px 0;line-height:1.5}.keyboard-note kbd{background:#2a231c;border-color:#6d675a;color:var(--legend-dim)}.disk-pane{background:var(--pane-bg, #1a1714);border:1px solid var(--pane-border, #332d26);border-radius:8px;overflow:hidden;box-shadow:0 4px 12px #0006}.disk-drives-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px;padding:12px}.disk-drive-card{background:#231f1a;border:1px solid #383129;border-radius:6px;padding:12px;display:flex;flex-direction:column;gap:10px;transition:border-color .2s,background-color .2s}.disk-drive-card.drag-over{border-color:#6fbf5a;background:#202b1c}.disk-drive-card.has-disk{border-color:#4a4237}.disk-drive-card.busy{border-color:#d97706}.disk-drive-header{display:flex;justify-content:space-between;align-items:center}.disk-drive-title{display:flex;align-items:center;gap:8px}.disk-drive-title h3{margin:0;font-size:14px;font-weight:600;color:#e4dfd5}.disk-led{width:10px;height:10px;border-radius:50%;display:inline-block;background:#3c382f;box-shadow:inset 0 1px 2px #00000080;transition:background-color .2s,box-shadow .2s}.disk-led.active{background:#22c55e;box-shadow:0 0 6px #22c55eb3}.disk-led.busy{background:#f59e0b;box-shadow:0 0 8px #f59e0be6;animation:pulse-busy .8s infinite alternate}@keyframes pulse-busy{0%{opacity:.6}to{opacity:1}}.disk-status-tag{font-size:11px;text-transform:uppercase;letter-spacing:.05em;padding:2px 6px;border-radius:4px;background:#2d2720;color:#9c9488;font-weight:500}.disk-drive-card.has-disk .disk-status-tag{background:#22c55e26;color:#4ade80}.disk-drive-card.busy .disk-status-tag{background:#f59e0b26;color:#fbbf24}.disk-drive-body{min-height:52px;display:flex;align-items:center}.disk-info{display:flex;align-items:center;gap:10px;width:100%}.disk-icon{font-size:22px;line-height:1}.disk-details{display:flex;flex-direction:column;min-width:0;overflow:hidden}.disk-filename{font-size:13px;font-weight:600;color:#f3efe6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.disk-meta{font-size:11px;color:#8a8274}.disk-dropzone{width:100%;border:1px dashed #443c32;border-radius:4px;padding:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-size:12px;color:#8c8374;cursor:pointer;background:#1c1814;transition:border-color .2s,background-color .2s}.disk-dropzone:hover{border-color:#6fbf5a;background:#22201b;color:#d1cbbe}.drop-icon{font-size:16px;line-height:1}.drop-sub{font-size:10px;color:#686154}.disk-drive-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto}.btn-disk-insert{width:100%;padding:6px 10px;background:#2e2821;border:1px solid #443c32;border-radius:4px;color:#e4dfd5;font-size:12px;cursor:pointer;font-weight:500;transition:background-color .15s,border-color .15s}.btn-disk-insert:hover:not(:disabled){background:#3d352b;border-color:#6fbf5a}.btn-disk-action{padding:4px 8px;background:#2e2821;border:1px solid #443c32;border-radius:4px;color:#e4dfd5;font-size:11px;cursor:pointer;transition:background-color .15s,border-color .15s}.btn-disk-action:hover:not(:disabled){background:#3d352b;border-color:#5c5244}.btn-disk-action.secondary{margin-left:auto;color:#a39c90}.btn-disk-action:disabled,.btn-disk-insert:disabled{opacity:.5;cursor:not-allowed}.disk-error-banner{background:#ef444426;border:1px solid rgba(239,68,68,.4);color:#fca5a5;padding:8px 12px;margin:10px 12px 0;border-radius:4px;display:flex;justify-content:space-between;align-items:center;font-size:12px}.disk-error-banner button{background:transparent;border:none;color:#fca5a5;font-size:16px;cursor:pointer;padding:0 4px}.disk-progress-bar-container{padding:8px 12px 0}.disk-progress-labels{display:flex;justify-content:space-between;font-size:11px;margin-bottom:4px}.progress-phase{font-weight:600;color:#f59e0b}.progress-detail{color:#a39c90}.progress-track{width:100%;height:6px;background:#231f1a;border-radius:3px;overflow:hidden}.progress-fill{height:100%;background:linear-gradient(90deg,#f59e0b,#10b981);transition:width .2s ease-out}.disk-pane-footer{padding:8px 12px;border-top:1px solid #2a251e;background:#171411}.disk-tip{font-size:11px;color:#787063;line-height:1.4}
