:root{--bg:#0d0f10;--metal:#1c2023;--metal2:#2a3034;--green:#39ff88;--amber:#ffb020;--red:#ff3b3b;--dim:#5b666d;}
*{box-sizing:border-box}
body{margin:0;background:radial-gradient(ellipse at top,#16201c 0%,var(--bg) 60%),var(--bg);color:#cfd8dc;font-family:'IBM Plex Mono',monospace;min-height:100vh}
body::before{content:"";position:fixed;inset:0;pointer-events:none;background:repeating-linear-gradient(0deg,rgba(255,255,255,.02) 0 1px,transparent 1px 3px);z-index:50}
.vt{font-family:'VT323',monospace}
.glow{color:var(--green);text-shadow:0 0 8px rgba(57,255,136,.7),0 0 24px rgba(57,255,136,.3)}
.panel{background:linear-gradient(180deg,#171b1d,#121516);border:1px solid #2b3236;border-radius:6px}
.rack{background:linear-gradient(90deg,#24292c,#1a1e20 8%,#1a1e20 92%,#24292c);border:2px solid #333b40;border-radius:6px;padding:10px 18px;position:relative}
.rack::before,.rack::after{content:"";position:absolute;top:8px;bottom:8px;width:6px;background:repeating-linear-gradient(180deg,#0b0d0e 0 4px,#3a4247 4px 12px)}
.rack::before{left:5px}.rack::after{right:5px}
.unit{background:linear-gradient(180deg,#2c3337,#20262a);border:1px solid #3c454a;border-radius:3px;position:relative;overflow:hidden;transition:filter .3s}
.unit.off{filter:brightness(.7) saturate(.5)}
.unit.husk{background:repeating-linear-gradient(45deg,#1a1210 0 6px,#140e0c 6px 12px);border-color:#4a2a20}
.led{width:9px;height:9px;border-radius:50%;display:inline-block}
.led.on{background:var(--green);box-shadow:0 0 8px var(--green)}
.led.boot{background:var(--amber);box-shadow:0 0 8px var(--amber);animation:blink .3s infinite}
.led.off{background:#3a3f42}
.led.dead{background:var(--red);box-shadow:0 0 8px var(--red);animation:blink 1s infinite}
@keyframes blink{50%{opacity:.2}}
.fan{width:18px;height:18px;border-radius:50%;border:2px dashed #6a767c}
.fan.spin{animation:spin .4s linear infinite}
.fan.slow{animation:spin 1.6s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.bar{height:4px;background:#0b0d0e;border-radius:2px;overflow:hidden}
.bar>i{display:block;height:100%;transition:width .8s}
.rocker{width:34px;height:20px;border-radius:4px;background:#0b0d0e;border:1px solid #444;position:relative;cursor:pointer}
.rocker>i{position:absolute;top:2px;width:14px;height:14px;border-radius:2px;transition:left .15s;background:#666}
.rocker.on>i{left:17px;background:var(--green);box-shadow:0 0 6px var(--green)}
.rocker.offk>i{left:2px}
.btn{font-family:'IBM Plex Mono',monospace;border:1px solid #3c454a;background:#1d2225;padding:4px 8px;border-radius:3px;font-size:11px;transition:all .15s}
.btn:hover{border-color:var(--green);color:var(--green)}
.btn.danger:hover{border-color:var(--red);color:var(--red)}
.bigbtn{background:var(--green);color:#04140b;font-weight:700;border-radius:4px;padding:10px;letter-spacing:.1em}
.bigbtn:hover{filter:brightness(1.15);box-shadow:0 0 18px rgba(57,255,136,.5)}
input,select{background:#0b0d0e;border:1px solid #333b40;color:#cfd8dc;padding:6px 8px;border-radius:3px;font-family:inherit;font-size:13px;width:100%}
input[type=range]{padding:0;accent-color:var(--green)}
.shake{animation:shake .5s}
@keyframes shake{20%{transform:translate(-8px,4px)}40%{transform:translate(7px,-5px)}60%{transform:translate(-5px,3px)}80%{transform:translate(4px,-2px)}}
.fire{animation:fire 1.2s forwards}
@keyframes fire{0%{background:#ff3b3b}30%{background:#ff8a00}100%{background:#1a1210}}
.dust{animation:dust 1s forwards}
@keyframes dust{to{opacity:.3;filter:grayscale(1) blur(2px);transform:scaleY(.6)}}
.glitch{animation:glitch .6s steps(2) 2}
@keyframes glitch{25%{transform:translateX(4px);filter:hue-rotate(90deg)}50%{transform:translateX(-4px);filter:invert(1)}75%{transform:skewX(10deg)}}
.spark{position:absolute;width:4px;height:4px;background:#ffd24a;border-radius:50%;pointer-events:none;animation:spark .8s forwards}
@keyframes spark{to{transform:translate(var(--dx),var(--dy));opacity:0}}
.flame{position:absolute;right:8px;top:-2px;animation:flick .2s infinite alternate}
@keyframes flick{to{transform:scale(1.2) translateY(-2px)}}
.toast{animation:tin .3s}
@keyframes tin{from{transform:translateY(20px);opacity:0}}
.console{background:#060807;font-family:'IBM Plex Mono',monospace;font-size:11px}
.fadein{animation:tin .4s both}