
:root{--bg:#07090d;--panel:rgba(10,14,20,.82);--line:rgba(126,240,255,.18);--ink:#dfe8ee;--mute:#6f8594;--cyan:#7ef0ff;--amber:#ffb454;--mono:"JetBrains Mono",monospace}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;background:var(--bg);color:var(--ink);font-family:"Space Grotesk",system-ui,sans-serif;font-size:13px;line-height:1.45;-webkit-font-smoothing:antialiased;overflow:hidden}
three-d-stage:not(:defined){visibility:hidden}
three-d-stage{position:absolute;inset:0;width:100%;height:100%}
#app{position:relative;height:100%;display:grid;grid-template-columns:300px minmax(0,1fr) 260px;grid-template-rows:52px minmax(0,1fr)}
header{grid-column:1/-1;display:flex;align-items:center;gap:18px;padding:0 18px;border-bottom:1px solid var(--line);background:var(--panel);backdrop-filter:blur(10px);z-index:3}
.brand{display:flex;align-items:center;gap:10px;margin-right:auto;white-space:nowrap}
.dot{width:9px;height:9px;background:var(--cyan);box-shadow:0 0 12px var(--cyan);animation:pulse 1.8s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}
.brand b{font-weight:600;letter-spacing:.12em;text-transform:uppercase;font-size:14px}
.brand span{font-family:var(--mono);font-size:11px;color:var(--mute)}
.mono{font-family:var(--mono);font-size:11px;color:var(--mute);white-space:nowrap}
button{cursor:pointer;font:inherit;color:var(--ink);background:transparent;border:1px solid var(--line);padding:7px 12px;font-family:var(--mono);font-size:11px;white-space:nowrap;transition:background .15s,border-color .15s,color .15s}
button:hover{border-color:var(--cyan);color:#fff}
button.primary{background:var(--cyan);color:#06080c;border-color:var(--cyan)}
button.primary:hover{background:#fff;border-color:#fff}
button.on{background:rgba(126,240,255,.14);border-color:var(--cyan);color:var(--cyan)}
button.amber{color:var(--amber);border-color:rgba(255,180,84,.5)}
button.amber:hover{background:rgba(255,180,84,.12)}
aside{position:relative;z-index:2;overflow:auto;background:var(--panel);backdrop-filter:blur(10px);padding:14px;display:grid;gap:14px;align-content:start}
aside.left{border-right:1px solid var(--line)}
aside.right{border-left:1px solid var(--line)}
section{border:1px solid var(--line);padding:12px;display:grid;gap:10px}
h2{margin:0;font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--mute);font-weight:500;display:flex;justify-content:space-between;align-items:baseline}
h2 i{font-style:normal;color:var(--cyan)}
.row{display:grid;gap:4px}
.row label{display:flex;justify-content:space-between;font-family:var(--mono);font-size:11px;color:#8fa6b5}
.row label output{color:var(--ink);white-space:nowrap}
input[type=range]{width:100%;accent-color:var(--cyan);margin:0}
.seg{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;border:1px solid var(--line)}
.seg button{border:0;border-left:1px solid var(--line);padding:7px 2px}
.seg button:first-child{border-left:0}
.seg button.on{background:var(--cyan);color:#06080c}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chips button{padding:5px 9px}
.swatches{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.sw{height:34px;border:1px solid var(--line);display:grid;grid-template-columns:repeat(3,1fr);padding:0;overflow:hidden;cursor:pointer}
.sw.on{outline:1px solid var(--cyan);outline-offset:2px}
.sw i{display:block}
.stats{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.stat{border:1px solid var(--line);padding:8px 10px}
.stat small{display:block;font-family:var(--mono);font-size:10px;color:var(--mute);letter-spacing:.08em;text-transform:uppercase}
.stat b{display:block;font-weight:500;font-size:18px;margin-top:2px;font-variant-numeric:tabular-nums}
.stat b.c{color:var(--cyan)}.stat b.a{color:var(--amber)}
.viewport{position:relative;min-width:0}
.hud{position:absolute;z-index:2;pointer-events:none;font-family:var(--mono);font-size:11px;color:var(--mute)}
.hud.tl{top:14px;left:16px}.hud.br{top:14px;right:16px;text-align:right}.hud.bl{bottom:64px;left:16px}
.hud b{color:var(--cyan);font-weight:500}
.corner{position:absolute;width:18px;height:18px;border-color:rgba(126,240,255,.5);border-style:solid;z-index:2;pointer-events:none}
.corner.a{top:10px;left:10px;border-width:1px 0 0 1px}.corner.b{top:10px;right:10px;border-width:1px 1px 0 0}.corner.c{bottom:10px;left:10px;border-width:0 0 1px 1px}.corner.d{bottom:10px;right:10px;border-width:0 1px 1px 0}
.log{display:grid;gap:4px;max-height:220px;overflow:auto;font-family:var(--mono);font-size:11px}
.log div{display:grid;grid-template-columns:auto 1fr;gap:8px;padding:4px 0;border-top:1px solid rgba(126,240,255,.08);color:#b8c7d1}
.log div span:first-child{color:var(--mute)}
.parts{display:grid;gap:3px;font-family:var(--mono);font-size:11px}
.parts div{display:flex;justify-content:space-between;color:#b8c7d1;padding:3px 0;border-top:1px solid rgba(126,240,255,.08)}
.parts div span:last-child{color:var(--mute)}
.name{font-size:22px;font-weight:600;letter-spacing:.02em;line-height:1.1}
.name small{display:block;font-family:var(--mono);font-size:11px;color:var(--mute);font-weight:400;margin-top:4px}
@media (max-width:980px){#app{grid-template-columns:260px minmax(0,1fr)}aside.right{display:none}}
@media (max-width:680px){#app{grid-template-columns:minmax(0,1fr);grid-template-rows:52px minmax(0,1fr) auto}aside.left{border-right:0;border-top:1px solid var(--line);max-height:42vh}}

:root{--mute:#94a7b6}
.portfolio-back{font-family:var(--mono);font-size:10px;color:var(--mute);text-decoration:none;white-space:nowrap;padding:8px 0}
.portfolio-back:hover{color:var(--cyan)}
button,a,input{touch-action:manipulation}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--amber);outline-offset:4px}
.estimate-note{margin:0;font-size:11px;line-height:1.6;color:#a1b2bf}
.mobile-jump{display:none}.noscript{position:fixed;z-index:10;inset:0;background:#07090d;padding:40px;color:#dfe8ee}.noscript a{color:var(--cyan)}
@media (max-width:1120px){header{gap:9px;padding:0 12px}.brand span{display:none}.mono{font-size:10px}}
@media (min-width:681px) and (max-width:980px){#app{grid-template-columns:250px minmax(0,1fr);grid-template-rows:auto minmax(0,1fr) minmax(160px,28vh)}header{min-height:60px;flex-wrap:wrap;gap:7px;padding:8px 12px}.viewport{grid-column:2;grid-row:2/4}aside.left{grid-row:2}aside.right{display:grid;grid-column:1;grid-row:3;border-top:1px solid var(--line);border-left:0;border-right:1px solid var(--line)}header .mono{display:none}header button{padding:7px 8px}}
@media (max-width:680px){html,body{height:auto;min-height:100%;overflow:auto}#app{height:auto;display:flex;flex-direction:column}header{order:0;min-height:100px;position:relative;flex-wrap:wrap;gap:7px;padding:12px}.brand{flex:1}.brand b{font-size:16px}header .mono{display:none}header button{font-size:10px;flex:1;min-height:38px;padding:8px 6px}header .portfolio-back{order:0}.mobile-jump{order:1;display:flex;gap:6px;padding:8px 12px;border-bottom:1px solid var(--line);font-family:var(--mono);font-size:10px}.mobile-jump a{color:var(--cyan);padding:8px;text-decoration:none;border:1px solid var(--line)}.viewport{order:2;height:430px;min-height:390px;width:100%}.hud.tl{left:16px;top:14px}.hud.br{right:16px;top:80px;font-size:10px}.hud.bl{bottom:88px;font-size:9px;max-width:calc(100% - 32px)}.name{font-size:22px}.name small{font-size:10px}aside.left{order:3;border-top:1px solid var(--line);max-height:none;overflow:visible}aside.right{order:4;display:grid;border-top:1px solid var(--line);border-left:0;overflow:visible}section{padding:14px}.row{gap:8px}.row label{font-size:12px}input[type=range]{min-height:28px}.seg button,.chips button{min-height:38px}.sw{height:40px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
