:root{font-family:Courier New,monospace;line-height:1.5;font-weight:400;color-scheme:dark;color:silver;background-color:#0f0f1e;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{font-weight:500;color:#8b0000;text-decoration:inherit}a:hover{color:#a00;text-decoration:underline}body{margin:0;min-width:320px;min-height:100vh}h1{font-size:1.5em;line-height:1.1}button{border-radius:4px;border:1px solid #2d2d44;padding:.5em 1em;font-size:.9em;font-weight:500;font-family:inherit;background-color:#1a1a2e;color:silver;cursor:pointer;transition:background-color .2s,border-color .2s}button:hover{background-color:#2d2d44;border-color:#8b0000}button:focus,button:focus-visible{outline:2px solid #8b0000;outline-offset:2px}select{border-radius:4px;border:1px solid #2d2d44;padding:.5em;font-size:.9em;font-family:inherit;background-color:#1a1a2e;color:silver}input[type=file]{display:none}pre,code{font-family:Courier New,monospace}:root{--doom-red: #8b0000;--doom-dark: #1a1a2e;--doom-darker: #0f0f1e;--doom-gray: #2d2d44;--doom-light: #c0c0c0;--doom-green: #00ff00;--doom-yellow: #ffff00}*{box-sizing:border-box;margin:0;padding:0}body{background-color:var(--doom-darker);color:var(--doom-light);font-family:Courier New,monospace}#root{max-width:100%;margin:0;padding:0;text-align:left}.app{display:flex;flex-direction:column;min-height:100vh}.app-header{background:linear-gradient(180deg,var(--doom-red),var(--doom-dark));padding:.75rem 2rem;display:flex;align-items:center;gap:1rem;border-bottom:2px solid var(--doom-red)}.app-header h1{font-size:1.5rem;color:#fff;text-transform:uppercase;letter-spacing:2px;text-shadow:0 0 10px var(--doom-red)}.app-header .subtitle{color:var(--doom-light);font-size:.9rem}.header-controls{margin-left:auto;display:flex;align-items:center;gap:.75rem}.about-btn{padding:.35rem .75rem;background:transparent;color:var(--doom-light);border:1px solid var(--doom-light);border-radius:3px;cursor:pointer;font-family:monospace;font-size:.75rem;text-transform:uppercase;transition:background .2s,border-color .2s}.about-btn:hover{background:var(--doom-red);border-color:var(--doom-red)}.about-modal-overlay{position:fixed;inset:0;background:#000000d9;display:flex;align-items:center;justify-content:center;z-index:1000}.about-modal{background:var(--doom-dark);border:2px solid var(--doom-red);border-radius:8px;max-width:600px;max-height:80vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 0 40px #8b000080}.about-header{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.25rem;background:linear-gradient(180deg,var(--doom-red),var(--doom-dark));border-bottom:1px solid var(--doom-red)}.about-header h2{margin:0;font-size:1.1rem;color:#fff;text-transform:uppercase;letter-spacing:2px}.about-close-btn{background:transparent;border:none;color:var(--doom-light);font-size:1.25rem;cursor:pointer;padding:.25rem .5rem;line-height:1}.about-close-btn:hover{color:#fff}.about-content{padding:1.25rem;overflow-y:auto}.about-content section{margin-bottom:1.25rem}.about-content section:last-child{margin-bottom:0}.about-content h3{color:var(--doom-red);font-size:.9rem;text-transform:uppercase;margin-bottom:.5rem;letter-spacing:1px}.about-content p{color:var(--doom-light);font-size:.85rem;line-height:1.6;margin:0}.about-content ul{margin:0;padding-left:1.25rem;color:var(--doom-light);font-size:.85rem;line-height:1.8}.about-content li{margin-bottom:.25rem}.about-content strong{color:var(--doom-green)}.about-content a{color:var(--doom-green);text-decoration:none}.about-content a:hover{text-decoration:underline}.about-footer-section{border-top:1px solid var(--doom-gray);padding-top:1rem;text-align:center}.about-footer-section p{color:#888;font-size:.8rem}.app-main{flex:1;display:flex;padding:1rem;overflow:hidden}.app-footer{background:var(--doom-gray);padding:.5rem 2rem;text-align:center;font-size:.75rem;color:#888}.app-footer a{color:var(--doom-light)}.triple-renderer-layout{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:1rem;width:100%;height:calc(100vh - 120px)}.triple-renderer-layout .scad-three-panel{grid-column:1 / -1;grid-row:1}.triple-renderer-layout .js-engine-panel{grid-column:1;grid-row:2}.triple-renderer-layout .scad-code-panel{grid-column:2;grid-row:2}.panel{display:flex;flex-direction:column;background:var(--doom-dark);border:2px solid var(--doom-gray);border-radius:4px;overflow:hidden}.panel-header{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;background:var(--doom-gray);border-bottom:1px solid var(--doom-dark)}.panel-title{font-size:.85rem;font-weight:700;text-transform:uppercase;color:var(--doom-light)}.sync-indicator{font-size:.7rem;padding:.2rem .5rem;border-radius:3px;font-weight:700;text-transform:uppercase}.sync-indicator.live,.sync-indicator.synced{background:var(--doom-green);color:#000}.sync-indicator.stale{background:var(--doom-yellow);color:#000}.sync-indicator.waiting{background:var(--doom-gray);color:var(--doom-light)}.sync-indicator.error{background:var(--doom-red);color:#fff}.sync-indicator.paused{background:var(--doom-yellow);color:#000}.pause-btn{padding:.25rem .6rem;background:var(--doom-gray);color:var(--doom-light);border:1px solid var(--doom-dark);border-radius:3px;cursor:pointer;font-family:monospace;font-size:.7rem;margin-right:.5rem}.pause-btn:hover{background:var(--doom-red)}.pause-btn.paused{background:var(--doom-green);color:#000}.panel-controls{display:flex;gap:.25rem;margin-right:.5rem}.control-btn{padding:.2rem .4rem;background:var(--doom-gray);color:var(--doom-light);border:1px solid var(--doom-dark);border-radius:3px;cursor:pointer;font-size:.8rem;line-height:1}.control-btn:hover{background:var(--doom-red)}.control-btn.active{background:var(--doom-green);color:#000}.control-btn.paused{background:var(--doom-yellow);color:#000}.sync-indicator.hidden{background:var(--doom-gray);color:var(--doom-light)}.preview-placeholder{display:flex;align-items:center;justify-content:center;position:absolute;inset:0;background:var(--doom-darker);cursor:pointer;z-index:10}.preview-placeholder:hover{background:#1a1a2e}.preview-placeholder:hover .placeholder-content p:first-child{color:var(--doom-light)}.placeholder-content{text-align:center;color:#666}.placeholder-content p{margin:.5rem 0}.placeholder-content .hint{font-size:.75rem;color:#555}.show-preview-btn{margin-top:1rem;padding:.5rem 1rem;background:var(--doom-gray);color:var(--doom-light);border:1px solid var(--doom-dark);border-radius:4px;cursor:pointer;font-family:monospace;font-size:.8rem}.show-preview-btn:hover{background:var(--doom-red)}.toggle-btn{padding:.25rem .5rem;background:var(--doom-gray);color:var(--doom-light);border:1px solid var(--doom-dark);border-radius:3px;cursor:pointer;font-family:monospace;font-size:.65rem;opacity:.6}.toggle-btn:hover{opacity:1}.toggle-btn.active{background:var(--doom-green);color:#000;opacity:1}.panel-toolbar{display:flex;align-items:center;gap:.75rem;padding:.5rem .75rem;background:#0000004d;border-bottom:1px solid var(--doom-gray);font-size:.75rem}.toggle-label{display:flex;align-items:center;gap:.35rem;cursor:pointer}.toggle-label input[type=checkbox]{cursor:pointer}.code-stats{color:#888;margin-left:auto}.toolbar-buttons{display:flex;gap:.5rem}.toolbar-buttons button{padding:.25rem .5rem;background:var(--doom-gray);color:var(--doom-light);border:1px solid var(--doom-dark);border-radius:3px;cursor:pointer;font-family:monospace;font-size:.7rem}.toolbar-buttons button:hover:not(:disabled){background:var(--doom-red)}.toolbar-buttons button:disabled{opacity:.5;cursor:not-allowed}.panel-content{flex:1;overflow:hidden;position:relative}.js-engine-panel .panel-content{background:#000;position:relative}.js-engine-panel .game-area{width:100%;height:100%;position:relative}.js-engine-panel .game-area.hidden{position:absolute;width:1px;height:1px;overflow:hidden;opacity:0;pointer-events:none}.code-content{overflow:auto}.scad-code{margin:0;padding:.75rem;font-size:.65rem;line-height:1.4;white-space:pre;overflow-x:auto;color:var(--doom-green);background:transparent}.placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:#666;text-align:center;padding:2rem}.placeholder p{margin:.5rem 0}.placeholder .hint{font-size:.75rem;color:#555}.placeholder .progress{font-size:1.2rem;color:var(--doom-yellow);margin-top:.5rem}.stl-content{display:flex;flex-direction:column}.error-banner{padding:.5rem .75rem;background:#8b00004d;border-bottom:1px solid var(--doom-red);color:var(--doom-red);font-size:.75rem}.stl-viewer{flex:1;position:relative;min-height:0}.stl-viewer-canvas{width:100%;height:100%}.stl-reset-btn{position:absolute;bottom:.5rem;right:.5rem;padding:.25rem .5rem;background:#000000b3;color:var(--doom-light);border:1px solid var(--doom-gray);border-radius:3px;cursor:pointer;font-family:monospace;font-size:.7rem}.stl-reset-btn:hover{background:var(--doom-gray)}.game-canvas-container{width:100%;height:100%;position:relative}.game-canvas{width:100%;height:100%;display:block}.reticle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);pointer-events:none;z-index:15}.reticle:before,.reticle:after{content:"";position:absolute;background:#fffc}.reticle:before{width:16px;height:2px;top:50%;left:50%;transform:translate(-50%,-50%)}.reticle:after{width:2px;height:16px;top:50%;left:50%;transform:translate(-50%,-50%)}.controls-hint{position:absolute;bottom:0;left:0;right:0;background:#000000b3;padding:.5rem;font-size:.7rem;text-align:center;color:var(--doom-light)}.stats-overlay{position:absolute;top:10px;left:10px;background:#000c;padding:.5rem;border:1px solid var(--doom-gray);font-size:.7rem;font-family:monospace}.game-hud{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,#000000e6);padding:.75rem;font-family:Courier New,monospace;z-index:20;pointer-events:none}.hud-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:.25rem}.hud-row:last-child{margin-bottom:0}.hud-item{display:flex;flex-direction:column;align-items:center;min-width:80px}.hud-label{font-size:.6rem;color:#888;text-transform:uppercase;letter-spacing:1px}.hud-value{font-size:1.2rem;font-weight:700;color:var(--doom-green)}.hud-item.health .hud-value{color:var(--doom-green)}.hud-item.health.dead .hud-value{color:var(--doom-red)}.hud-item.armor .hud-value{color:#69f}.hud-item.ammo .hud-value{color:var(--doom-yellow)}.hud-item.ammo-all{flex-direction:row;gap:.75rem;font-size:.7rem}.ammo-type{color:#888}.death-overlay{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;pointer-events:none}.death-text{display:block;font-size:2rem;font-weight:700;color:var(--doom-red);text-shadow:0 0 20px var(--doom-red),0 0 40px var(--doom-red);letter-spacing:4px;animation:pulse 1s ease-in-out infinite}.death-subtext{display:block;font-size:.8rem;color:#888;margin-top:.5rem}@keyframes pulse{0%,to{opacity:1}50%{opacity:.7}}.stat-row{display:flex;gap:.5rem;margin-bottom:.15rem}.stat-row .label{color:#888;min-width:50px}.stat-row .value{color:var(--doom-green)}.stat-row .status-idle{color:#888}.stat-row .status-loading{color:var(--doom-yellow)}.stat-row .status-ready{color:var(--doom-green)}.stat-row .status-rendering{color:var(--doom-yellow)}.stat-row .status-error{color:var(--doom-red)}.wad-uploader{width:100%;max-width:500px;padding:3rem;border:3px dashed var(--doom-gray);border-radius:8px;text-align:center;transition:border-color .2s,background-color .2s;margin:auto}.wad-uploader.dragging{border-color:var(--doom-red);background:#8b00001a}.wad-uploader h2{color:var(--doom-red);margin-bottom:1rem;text-transform:uppercase}.wad-uploader p{margin:.5rem 0;color:var(--doom-light)}.wad-uploader .or{color:#666;margin:1rem 0}.wad-uploader .file-input{display:inline-block;padding:.75rem 1.5rem;background:var(--doom-red);color:#fff;border-radius:4px;cursor:pointer;font-weight:700;text-transform:uppercase}.wad-uploader .file-input:hover{background:#a00}.wad-uploader .file-input input{display:none}.wad-uploader .error{color:var(--doom-red);margin-top:1rem}.wad-uploader .note{font-size:.75rem;color:#666;margin-top:1.5rem}.wad-uploader .note a{color:var(--doom-light)}.wad-uploader.loading{border-color:var(--doom-red)}.wad-uploader .loading-text{color:var(--doom-yellow);font-size:1.1rem}.wad-uploader.compact{width:auto;max-width:none;padding:0;border:none;background:transparent;display:flex;align-items:center;gap:.75rem}.wad-uploader.compact h2,.wad-uploader.compact p:not(.wad-name),.wad-uploader.compact .or,.wad-uploader.compact .note{display:none}.wad-uploader.compact .wad-info{display:flex;align-items:center;gap:.75rem;padding:0;background:transparent}.wad-uploader.compact .wad-info h3{display:none}.wad-uploader.compact .map-selector{display:flex;align-items:center;gap:.5rem}.wad-uploader.compact .map-selector label{font-size:.75rem;color:var(--doom-light)}.wad-uploader.compact .map-selector select{padding:.35rem .5rem;background:var(--doom-dark);color:var(--doom-light);border:1px solid var(--doom-gray);border-radius:3px;font-family:monospace;font-size:.8rem}.loading-spinner{width:40px;height:40px;margin:1rem auto;border:4px solid var(--doom-gray);border-top-color:var(--doom-red);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.wad-hint{font-size:.7rem;color:#666;margin-top:.5rem}.wad-info{background:var(--doom-gray);padding:1rem;border-radius:4px}.wad-info h3{margin-bottom:.75rem;color:var(--doom-green);font-size:.9rem}.map-selector{display:flex;align-items:center;gap:.5rem}.map-selector label{font-size:.8rem}.map-selector select{flex:1;padding:.5rem;background:var(--doom-dark);color:var(--doom-light);border:1px solid var(--doom-gray);border-radius:4px;font-family:monospace}.openscad-panel{background:var(--doom-gray);padding:1rem;border-radius:4px;flex:1;overflow-y:auto}.openscad-panel h3{margin-bottom:1rem;color:var(--doom-red);font-size:1rem;text-transform:uppercase}.openscad-panel h4{margin:1rem 0 .5rem;color:var(--doom-light);font-size:.85rem}.openscad-panel .hint{color:#888;font-size:.75rem}.panel-section{margin-bottom:1rem}.primary-btn{width:100%;padding:.75rem;background:var(--doom-red);color:#fff;border:none;border-radius:4px;cursor:pointer;font-family:monospace;font-weight:700;text-transform:uppercase}.primary-btn:hover:not(:disabled){background:#a00}.primary-btn:disabled{opacity:.5;cursor:not-allowed}.button-group{display:flex;gap:.5rem;margin-top:.5rem}.button-group button{flex:1;padding:.5rem;background:var(--doom-dark);color:var(--doom-light);border:1px solid var(--doom-gray);border-radius:4px;cursor:pointer;font-family:monospace;font-size:.75rem}.button-group button:hover{background:var(--doom-gray)}.error-message{background:#8b000033;border:1px solid var(--doom-red);padding:.5rem;border-radius:4px;color:var(--doom-red);font-size:.75rem;margin:.5rem 0}.scad-preview{margin-top:1rem}.scad-preview pre{background:var(--doom-dark);padding:.75rem;border-radius:4px;font-size:.7rem;overflow-x:auto;max-height:200px;overflow-y:auto}.instructions{border-top:1px solid var(--doom-dark);padding-top:1rem;margin-top:1rem}.instructions ol{padding-left:1.25rem;font-size:.75rem;color:#888}.instructions li{margin-bottom:.25rem}.worker-status{margin-bottom:1rem;padding:.5rem;background:var(--doom-dark);border-radius:4px;font-size:.75rem}.worker-status .ready{color:var(--doom-green)}.worker-status .loading{color:var(--doom-yellow)}.console-log{background:#000;border:1px solid var(--doom-dark);border-radius:4px;padding:.5rem;font-size:.7rem;font-family:monospace;max-height:150px;overflow-y:auto}.console-log div{color:var(--doom-green);margin-bottom:.25rem}.console-log div.error{color:var(--doom-red)}.render-result{margin-top:.75rem;padding:.75rem;background:#00ff001a;border:1px solid var(--doom-green);border-radius:4px}.render-result .success{color:var(--doom-green);font-size:.85rem;margin-bottom:.5rem}.render-result .primary-btn{background:var(--doom-green);color:#000}.render-result .primary-btn:hover{background:#0c0}.scad-three-panel .panel-content{background:#000}.scad-three-panel canvas{width:100%;height:100%;display:block}.scad-three-panel .error-overlay{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#8b0000e6;padding:1rem;border-radius:4px;color:#fff;font-size:.75rem;max-width:80%;text-align:center}.scad-three-panel .panel-footer{display:flex;gap:1rem;padding:.35rem .75rem;background:#0000004d;border-top:1px solid var(--doom-gray);font-size:.65rem;color:#888}.scad-three-panel .panel-footer .stat{white-space:nowrap}.scad-three-panel .panel-stats{font-size:.7rem;color:var(--doom-green)}.canvas-content{display:flex;align-items:stretch;justify-content:center}.canvas-content canvas{max-width:100%;max-height:100%}.mobile-controls-panel{display:none}@media(max-width:800px){.triple-renderer-layout{grid-template-columns:1fr;grid-template-rows:2fr auto 1fr 1fr;height:calc(100vh - 100px)}.triple-renderer-layout .scad-three-panel{grid-column:1;grid-row:1}.triple-renderer-layout .mobile-controls-panel{grid-column:1;grid-row:2}.triple-renderer-layout .js-engine-panel{grid-column:1;grid-row:3}.triple-renderer-layout .scad-code-panel{grid-column:1;grid-row:4}.mobile-controls-panel{display:flex}.mobile-controls-panel .panel-content{display:flex;align-items:center;justify-content:center;padding:.5rem;background:var(--doom-dark);overflow:visible}.mobile-controls-panel{overflow:visible}.mobile-controls-content{display:flex;align-items:center;justify-content:space-between;width:100%;max-width:500px;gap:1rem}.control-group{display:flex;flex-direction:column;align-items:center;gap:.25rem}.control-label{font-size:.65rem;font-weight:700;color:var(--doom-light);text-transform:uppercase;opacity:.7}.joystick-zone{width:80px;height:80px;border-radius:50%;background:#0009;border:3px solid var(--doom-gray);position:relative;display:flex;align-items:center;justify-content:center;touch-action:none}.joystick-knob{width:36px;height:36px;border-radius:50%;background:var(--doom-light);border:2px solid #fff;transition:transform .05s ease-out}.action-buttons{display:flex;flex-direction:row;gap:.5rem}.action-btn{width:56px;height:56px;min-width:56px;min-height:56px;flex-shrink:0;border-radius:50%;border:3px solid rgba(255,255,255,.5);font-size:.7rem;font-weight:700;text-transform:uppercase;color:#fff;cursor:pointer;touch-action:none;position:relative;z-index:10;-webkit-user-select:none;user-select:none}.shoot-btn{background:#b42828e6}.shoot-btn:active{background:#ff5050;transform:scale(.95)}.use-btn{background:#287828e6}.use-btn:active{background:#50c850;transform:scale(.95)}}
