*{box-sizing:border-box}html,body{width:100%;height:100%;margin:0;overflow:hidden;background:#020304;color:#e5f5f6c7;font-family:Inter,system-ui,sans-serif;letter-spacing:0}#scene{display:block;width:100vw;height:100vh;cursor:crosshair}.frame{position:fixed;inset:clamp(14px,3.6vw,52px);pointer-events:none;border:1px solid rgba(226,241,255,.08);box-shadow:inset 0 0 0 1px #86f3ff06,0 0 70px #c6e0ff14}.frame:before,.frame:after{content:"";position:absolute;top:10px;right:10px;bottom:10px;left:10px;border:1px solid rgba(134,243,255,.025)}.corner{position:absolute;width:32px;height:32px;border-color:#e3f3ff40}.corner--tl{left:-1px;top:-1px;border-left:1px solid;border-top:1px solid}.corner--tr{right:-1px;top:-1px;border-right:1px solid;border-top:1px solid}.corner--bl{left:-1px;bottom:-1px;border-left:1px solid;border-bottom:1px solid}.corner--br{right:-1px;bottom:-1px;border-right:1px solid;border-bottom:1px solid}.topline{position:absolute;left:10px;right:10px;top:-1px;display:grid;grid-template-columns:repeat(6,1fr);color:#dcf6ff2e;font:600 8px/1 IBM Plex Mono,monospace;text-align:center;transform:translateY(-10px)}.side-scale{position:absolute;left:8px;top:16%;bottom:14%;display:flex;flex-direction:column;justify-content:space-between;color:#dcf6ff2e;font:600 8px/1 IBM Plex Mono,monospace}.title{position:absolute;left:clamp(18px,3vw,34px);top:clamp(14px,2vw,24px);color:#e2f1ffd1;font:700 10px/1 IBM Plex Mono,monospace;text-transform:uppercase;letter-spacing:.2em}.title i{display:inline-block;width:8px;height:8px;margin-right:10px;border:1px solid rgba(126,248,255,.66);border-radius:50%;box-shadow:0 0 14px #7ef8ffcc}#launch{pointer-events:auto;position:absolute;left:50%;bottom:18px;min-width:118px;min-height:28px;transform:translate(-50%);border:1px solid rgba(228,245,255,.11);background:#02030461;color:#e4f5ff73;font:700 9px/1 IBM Plex Mono,monospace;text-transform:uppercase;letter-spacing:.18em;cursor:pointer}#launch:hover{border-color:#7ef8ff61;color:#e4f5ffc7}.nodes{position:fixed;left:clamp(22px,5vw,92px);bottom:clamp(42px,6vw,86px);width:min(250px,38vw);color:#d5edee6b;font:500 9px/1.4 IBM Plex Mono,monospace;text-transform:uppercase;pointer-events:none}.nodes strong{display:block;margin-bottom:6px;color:#e5f5f699;letter-spacing:.2em}#nodes{display:grid;grid-template-columns:minmax(0,1fr) 34px;gap:2px 14px}#nodes span,#nodes b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#nodes b{text-align:right;color:#7ef8ffb8}.readout{position:fixed;left:clamp(22px,5vw,92px);right:clamp(22px,5vw,92px);bottom:clamp(18px,2vw,28px);display:flex;justify-content:space-between;gap:18px;color:#e0f1f65c;font:600 8px/1 IBM Plex Mono,monospace;text-transform:uppercase;letter-spacing:.16em;pointer-events:none}.panel{position:fixed;top:clamp(14px,2vw,26px);right:clamp(14px,2vw,26px);width:min(330px,calc(100vw - 28px));padding:12px;border:1px solid rgba(229,245,246,.1);background:#00000094;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);box-shadow:0 24px 80px #0000006b}.panel-top{display:flex;justify-content:space-between;gap:12px;margin-bottom:11px}.panel strong{display:block;color:#e5f5f6e0;font:800 11px/1.25 IBM Plex Mono,monospace;text-transform:uppercase;letter-spacing:.13em}.panel span{display:block;margin-top:3px;color:#7ef8ff6b;font:600 9px/1.25 IBM Plex Mono,monospace;text-transform:uppercase}.panel label{display:grid;grid-template-columns:64px minmax(0,1fr);align-items:center;min-height:28px;gap:10px;color:#e5f5f69e;font:700 9px/1 IBM Plex Mono,monospace;text-transform:uppercase}.panel input{width:100%;accent-color:#dff8ff}.panel button{min-height:30px;border:1px solid rgba(229,245,246,.13);background:#e5f5f60b;color:#e5f5f6cc;cursor:pointer;font:800 10px/1 IBM Plex Mono,monospace;text-transform:uppercase}.panel button:hover{border-color:#7ef8ff6b}.panel-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin-top:10px}#reset{width:30px;min-width:30px;font-size:15px}@media(max-width:760px){.frame{top:14px;right:14px;bottom:14px;left:14px}.panel{left:10px;right:10px;top:auto;bottom:10px;width:auto;padding:10px}.nodes{left:24px;bottom:210px;width:160px}.readout{display:none}#launch{bottom:188px}}
