:root{--bg: #07080c;--panel: #0d1119;--panel-2: #131826;--grid: #1a2236;--cyan: #00f0ff;--magenta: #ff2ea8;--yellow: #ffd400;--green: #00ff88;--red: #ff3344;--dim: #6b7a9c;--text: #d6e2ff}*{box-sizing:border-box}html,body{margin:0;padding:0;height:100%;background:radial-gradient(ellipse at center,#0a0f1e,#050608);color:var(--text);font-family:JetBrains Mono,Fira Code,Consolas,monospace;overflow:hidden;-webkit-user-select:none;user-select:none}.btn{background:linear-gradient(180deg,#142037,#0a1224);color:var(--cyan);border:1px solid var(--cyan);padding:8px 16px;border-radius:4px;cursor:pointer;font-family:inherit;font-size:12px;letter-spacing:.15em;transition:all .15s}.btn:hover{background:var(--cyan);color:#001218;box-shadow:0 0 14px var(--cyan)}.btn.danger{color:var(--red);border-color:var(--red)}.btn.danger:hover{background:var(--red);color:#1a0000;box-shadow:0 0 14px var(--red)}.btn:disabled{opacity:.35;cursor:not-allowed}.btn-group{display:flex;gap:8px}.serial{background:#000;color:var(--cyan);padding:6px 12px;border-radius:4px;font-weight:700;letter-spacing:.3em;border:1px solid #1c2740;box-shadow:0 0 12px #00f0ff40 inset}.badge{background:#000;color:var(--yellow);padding:4px 10px;border-radius:4px;font-size:11px;letter-spacing:.15em;border:1px solid #2a2410}.badge.dim{color:var(--dim)}.badge.cyan{color:var(--cyan);border-color:#1c2740}.badge.green{color:var(--green);border-color:#0a3a22}.badge.red{color:var(--red);border-color:#3a0a14}.badge.magenta{color:var(--magenta);border-color:#3a0a28}.device-row{display:flex;gap:14px;align-items:center;justify-content:space-between;margin-bottom:14px;flex-wrap:wrap}.center-row{justify-content:center!important}.rule{background:var(--panel-2);border-left:2px solid var(--cyan);padding:6px 10px;margin:6px 0;font-size:12px}.rule.note{border-left-color:var(--yellow);color:var(--yellow)}.rule.warn{border-left-color:var(--red)}.wires{display:flex;flex-direction:column;gap:10px;margin:10px 0}.wire{display:flex;align-items:center;gap:12px;padding:6px 10px;background:#0a1020;border-radius:4px;cursor:pointer;border:1px solid transparent}.wire:hover:not(.cut){border-color:var(--cyan)}.wire .index{color:var(--dim);width:24px;font-size:11px}.wire .strand{flex:1;height:8px;border-radius:4px;position:relative;background:var(--c, #888);box-shadow:0 0 8px var(--c, #888)}.wire.cut{cursor:not-allowed}.wire.cut .strand{opacity:.25}.wire.cut .strand:after{content:"";position:absolute;left:50%;top:-4px;bottom:-4px;width:2px;background:var(--bg)}.wire .tag{font-size:11px;color:var(--dim);width:80px;text-align:right}.btn-panel{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin:10px 0}.btn-panel.cols-4{grid-template-columns:repeat(4,1fr)}.pbtn{height:64px;border-radius:6px;cursor:pointer;font-weight:700;letter-spacing:.15em;font-size:13px;border:2px solid;background:#0a1020;transition:transform .08s;font-family:inherit}.pbtn:active{transform:scale(.97)}.pbtn.lit{box-shadow:0 0 18px currentColor inset}.pbtn:disabled{opacity:.4;cursor:not-allowed}.dial-wrap{display:flex;align-items:center;gap:24px;justify-content:center;margin:16px 0;flex-wrap:wrap}.dial{width:160px;height:160px;border-radius:50%;background:radial-gradient(circle at 30% 30%,#2a3656,#0a0e1c);border:3px solid var(--cyan);position:relative;cursor:grab;box-shadow:0 0 30px #00f0ff26}.dial:active{cursor:grabbing}.dial .needle{position:absolute;left:50%;top:10px;width:2px;height:70px;background:var(--magenta);transform-origin:50% 70px;box-shadow:0 0 10px var(--magenta)}.dial .ctr{position:absolute;left:50%;top:50%;width:12px;height:12px;background:var(--cyan);border-radius:50%;transform:translate(-50%,-50%)}.freq-display{font-size:32px;color:var(--cyan);letter-spacing:.15em;background:#000;padding:12px 20px;border-radius:4px;border:1px solid #1c2740;min-width:130px;text-align:center}.signal-bar{width:100%;height:14px;background:#000;border:1px solid #1c2740;border-radius:3px;overflow:hidden;margin-top:10px}.signal-fill{height:100%;background:linear-gradient(90deg,var(--red),var(--yellow),var(--green));transition:width .2s}.lcd{background:#000;color:var(--green);font-size:28px;padding:10px 18px;border-radius:4px;border:1px solid #1c2740;letter-spacing:.2em;text-shadow:0 0 8px var(--green);min-width:90px;text-align:center}.stage-dots{display:flex;gap:6px;margin-top:8px;justify-content:center}.stage-dot{width:10px;height:10px;border-radius:50%;background:#1c2740;border:1px solid #2a3656}.stage-dot.done{background:var(--green);box-shadow:0 0 8px var(--green)}.stage-dot.active{background:var(--cyan);box-shadow:0 0 8px var(--cyan)}.switches{display:flex;gap:14px;justify-content:center;margin:14px 0;flex-wrap:wrap}.sw{display:flex;flex-direction:column;align-items:center;gap:4px;cursor:pointer}.sw .toggle{width:34px;height:60px;border-radius:4px;background:#0a1020;border:1px solid #2a3656;position:relative}.sw .knob{position:absolute;left:4px;right:4px;height:22px;border-radius:3px;background:#2a3656;transition:top .15s;top:32px}.sw.on .knob{top:4px;background:var(--green);box-shadow:0 0 10px var(--green)}.sw .label{font-size:11px;color:var(--dim)}.sw .val{font-size:11px;color:var(--cyan)}.meter{font-size:14px;color:var(--cyan);text-align:center;margin:8px 0}.meter.ok{color:var(--green)}.meter.over{color:var(--red)}.symbol-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:10px 0}.sym{background:#0a1020;border:1px solid #2a3656;border-radius:4px;padding:14px;text-align:center;cursor:pointer;font-size:28px;color:var(--magenta);text-shadow:0 0 10px var(--magenta)}.sym:hover{border-color:var(--cyan)}.sym.picked{background:#1a2236;border-color:var(--cyan);color:var(--cyan);text-shadow:0 0 10px var(--cyan)}.chart{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;font-size:12px;margin:10px 0}.chart .cell{background:var(--panel-2);padding:6px;border-radius:3px;text-align:center}.chart .ch-sym{color:var(--magenta);font-size:18px}.picked-row{background:#000;padding:8px;border-radius:3px;color:var(--cyan);letter-spacing:.3em;font-size:20px;min-height:32px;text-align:center}.detonate{background:linear-gradient(180deg,#4a0612,#1a0306);color:var(--red);border:2px solid var(--red);padding:14px 32px;border-radius:6px;cursor:pointer;font-weight:800;letter-spacing:.3em;font-size:16px;box-shadow:0 0 20px #f346;animation:pulseRed 1.6s ease-in-out infinite;font-family:inherit}.detonate:hover{background:var(--red);color:#1a0000}@keyframes pulseRed{0%,to{box-shadow:0 0 14px #f346}50%{box-shadow:0 0 30px #f34c}}.modules{display:grid;grid-template-columns:1fr 1fr;gap:14px}.module-card{background:#0a1020;border:1px solid #2a3656;border-radius:6px;padding:12px}.module-card h4{margin:0 0 8px;font-size:11px;letter-spacing:.2em;color:var(--cyan);text-transform:uppercase}.light{width:14px;height:14px;border-radius:50%;display:inline-block;background:#2a3656}.light.on{background:var(--yellow);box-shadow:0 0 10px var(--yellow)}.light.red{background:var(--red);box-shadow:0 0 10px var(--red)}.light.green{background:var(--green);box-shadow:0 0 10px var(--green)}.num-input,input.num-input{background:#000;color:var(--cyan);border:1px solid #1c2740;padding:8px 12px;font:inherit;font-size:16px;letter-spacing:.2em;border-radius:4px;outline:none;width:110px}.num-input:focus{border-color:var(--cyan);box-shadow:0 0 10px #00f0ff4d}.tile{background:#0a1020;border:2px solid var(--cyan);color:var(--cyan);padding:10px 14px;min-width:38px;border-radius:4px;cursor:pointer;font:inherit;font-size:18px;font-weight:700;letter-spacing:.15em;transition:all .12s}.tile:hover{background:var(--cyan);color:#001}.tile.used{opacity:.35;cursor:not-allowed}.combo-lock{display:flex;gap:22px;justify-content:center;margin:16px 0}.wheel{display:flex;flex-direction:column;align-items:center;gap:4px}.wheel-btn{background:#0a1020;border:1px solid var(--cyan);color:var(--cyan);width:56px;height:28px;cursor:pointer;border-radius:3px;font:inherit}.wheel-btn:hover{background:var(--cyan);color:#001}.wheel-digit{background:#000;color:var(--green);font-size:32px;padding:8px 14px;border-radius:4px;border:1px solid #1c2740;min-width:50px;text-align:center;text-shadow:0 0 8px var(--green);letter-spacing:.1em}.input-bit{width:48px;height:48px;border:2px solid var(--cyan);color:var(--cyan);display:flex;align-items:center;justify-content:center;border-radius:6px;cursor:pointer;font-size:22px;font-weight:700;background:#0a1020}.input-bit.on{background:var(--cyan);color:#001;box-shadow:0 0 18px var(--cyan)}.bits-row{display:flex;gap:6px;justify-content:center;margin:14px 0;flex-wrap:wrap}.bit-col{display:flex;flex-direction:column;align-items:center;gap:3px}.bit-weight{font-size:10px;color:var(--dim)}.bit-cell{width:38px;height:38px;border:1px solid var(--cyan);color:var(--cyan);display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:16px;font-weight:700;background:#0a1020}.bit-cell.on{background:var(--green);color:#001;border-color:var(--green);box-shadow:0 0 12px var(--green)}.bit-pos{font-size:9px;color:var(--dim)}.hex-display{background:#000;color:var(--magenta);padding:10px 18px;border:1px solid #1c2740;border-radius:4px;font-size:26px;letter-spacing:.25em;min-width:90px;text-align:center;text-shadow:0 0 10px var(--magenta)}.byte-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:10px 0}.byte-cell{background:#0a1020;border:1px solid #2a3656;border-radius:4px;padding:10px;text-align:center;cursor:pointer}.byte-cell.on{border-color:var(--green);background:#0a2018;box-shadow:0 0 10px #00ff884d}.byte-hex{color:var(--cyan);font-weight:700;letter-spacing:.1em}.byte-state{font-size:10px;color:var(--dim);margin-top:2px}.keypad{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:10px 0}.keypad-btn{background:#0a1020;border:1px solid var(--cyan);color:var(--cyan);border-radius:4px;cursor:pointer;padding:10px 0;font:inherit}.keypad-btn:hover{background:var(--cyan);color:#001}.kp-d{font-size:22px;font-weight:700}.kp-l{font-size:10px;color:var(--dim);letter-spacing:.15em}.keypad-btn:hover .kp-l{color:#001}.lights-out{display:flex;flex-direction:column;gap:6px;align-items:center;margin:14px 0}.lo-row{display:flex;gap:6px}.lo-cell{width:44px;height:44px;border-radius:5px;background:#0a1020;border:1px solid #2a3656;cursor:pointer;transition:all .12s}.lo-cell.on{background:var(--yellow);border-color:var(--yellow);box-shadow:0 0 15px var(--yellow)}.dot-btn,.dash-btn{background:#0a1020;border:2px solid var(--cyan);color:var(--cyan);padding:12px 24px;border-radius:6px;cursor:pointer;font:inherit;font-size:14px;letter-spacing:.15em}.dot-btn:hover,.dash-btn:hover{background:var(--cyan);color:#001}.morse-chart{display:grid;grid-template-columns:repeat(6,1fr);gap:4px;font-size:10.5px;color:var(--dim);margin-top:12px}.morse-cell{background:var(--panel-2);padding:4px;border-radius:3px;text-align:center}.morse-cell b{color:var(--cyan);margin-right:4px}.mm-slot{width:40px;height:40px;border-radius:50%;border:1px solid #2a3656;cursor:pointer}.mm-color{width:30px;height:30px;border-radius:50%;border:1px solid #2a3656;cursor:pointer;padding:0}.mm-pip{display:inline-block;width:22px;height:22px;border-radius:50%;margin-right:3px;border:1px solid #2a3656}.mm-row{display:flex;align-items:center;gap:4px;margin:4px 0;font-size:11px}.cue-box{background:#000;color:var(--cyan);font-size:48px;font-weight:800;letter-spacing:.3em;padding:26px;border:2px solid var(--cyan);border-radius:8px;text-align:center;box-shadow:0 0 25px #00f0ff4d}.cue-box.miss{color:var(--red);border-color:var(--red);box-shadow:0 0 25px #f346}.sudoku{--su-size: 4;display:flex;flex-direction:column;gap:4px;align-items:center;margin:14px 0}.su-row{display:flex;gap:4px}.su-cell{width:44px;height:44px;background:#0a1020;border:1px solid #2a3656;border-radius:3px;display:flex;align-items:center;justify-content:center;color:var(--cyan);font-size:18px;font-weight:700}.su-cell.target{border-color:var(--magenta);cursor:pointer;color:var(--magenta)}.su-cell.given{color:var(--cyan)}.chess{display:flex;flex-direction:column;gap:0;align-items:center;margin:14px 0}.ch-row{display:flex}.ch-cell{width:50px;height:50px;background:#d6c2a0;cursor:pointer;display:flex;align-items:center;justify-content:center;position:relative}.ch-cell.dark{background:#654321}.ch-cell.path:before{content:"";position:absolute;inset:6px;background:#00f0ff40;border-radius:4px}.ch-cell.start{box-shadow:inset 0 0 0 3px var(--yellow)}.ch-cell.end{box-shadow:inset 0 0 0 3px var(--cyan)}.ch-pawn{font-size:30px;color:#000;z-index:2}.simon-grid{display:grid;grid-template-columns:repeat(2,70px);gap:10px;margin:14px auto;justify-content:center}.simon-btn{width:70px;height:70px;border-radius:8px;border:2px solid;background:#0a1020;color:#fff;font-weight:700;font-size:18px;cursor:pointer;transition:all .08s;opacity:.7;font-family:inherit}.simon-btn.flash{opacity:1;box-shadow:0 0 25px currentColor;transform:scale(1.05)}.simon-btn:disabled{cursor:not-allowed}.sky{position:relative;width:100%;height:280px;background:radial-gradient(ellipse at center,#06091a,#02030a);border:1px solid #1c2740;border-radius:6px;margin:14px 0}.sky svg{position:absolute;inset:0;width:100%;height:100%}.star{position:absolute;transform:translate(-50%,-50%);width:32px;height:32px;border-radius:50%;background:#1a2236;color:var(--cyan);border:1px solid var(--cyan);display:flex;align-items:center;justify-content:center;font-size:13px;cursor:pointer;z-index:2}.star.lit{background:var(--cyan);color:#001;box-shadow:0 0 14px var(--cyan)}.coord-grid{display:flex;flex-direction:column;gap:3px;align-items:center;margin:14px 0}.cg-row{display:flex;gap:3px}.cg-cell{width:50px;height:36px;background:#0a1020;border:1px solid #2a3656;border-radius:3px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--dim);font-size:10px}.cg-cell:hover{border-color:var(--cyan)}.cg-cell.picked{background:var(--cyan);color:#001;border-color:var(--cyan)}.cg-coord{letter-spacing:.05em}.hold-display{background:#000;color:var(--yellow);font-size:36px;padding:14px 26px;border-radius:6px;border:1px solid #1c2740;letter-spacing:.15em;min-width:160px;text-align:center;text-shadow:0 0 12px var(--yellow)}.hold-display.lit{color:var(--green);text-shadow:0 0 12px var(--green)}.relay-light{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;font-weight:700;color:#001;border:2px solid}.relay-light.red{background:var(--red);border-color:var(--red);box-shadow:0 0 14px var(--red)}.relay-light.on{background:var(--yellow);border-color:var(--yellow);box-shadow:0 0 14px var(--yellow)}.relay-light.green{background:var(--green);border-color:var(--green);box-shadow:0 0 14px var(--green)}.relay-light.done{opacity:.35;cursor:not-allowed}
