:root{--bg:#0b0618;--panel:#0e0920db;--line:#2ff3ff59;--cyan:#2ff3ff;--magenta:#ff2fd6;--text:#e7e3ff;--dim:#8c84b5;--bad:#ff6b81;--ok:#5dffa8;--mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace}*{box-sizing:border-box}html,body{background:var(--bg);height:100%;color:var(--text);margin:0;font:15px/1.35 system-ui,-apple-system,Segoe UI,sans-serif;overflow:hidden}#app{position:fixed;inset:0}#app[hidden]{display:none}#city{position:absolute;inset:0}#city canvas.gl{cursor:pointer;width:100%;height:100%;display:block;position:absolute;inset:0}#city .tags{pointer-events:none;position:absolute;inset:0}.panel{background:var(--panel);border:1px solid var(--line);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);border-radius:10px;position:absolute;box-shadow:0 0 24px #2ff3ff1f,inset 0 0 18px #ff2fd60f}#wall{opacity:.55;width:min(260px,30vw);max-height:calc(100% - 24px - 46vh);padding:8px 10px 10px;top:12px;left:12px;overflow:auto}#wall.on{opacity:1}#wall h2{font:700 12px/1 var(--mono);letter-spacing:.3em;color:var(--cyan);text-shadow:0 0 8px var(--cyan);margin:0 0 6px}#wall:not(.on) h2{color:var(--dim);text-shadow:none}.slots{gap:4px;display:grid}#wall.many{width:min(330px,34vw)}#wall.many .slots{grid-template-columns:1fr 1fr}#wall.many .slot{grid-template-columns:10px 1fr;gap:1px 6px;padding:3px 6px;font-size:12px}#wall.many .slot i{grid-row:span 2;width:10px;height:10px}#wall.many .slot small{grid-column:2;font-size:10px;line-height:1}.slot{font:13px/1.2 var(--mono);background:#ffffff08;border:1px solid #ffffff0f;border-radius:6px;grid-template-columns:12px 1fr auto;align-items:center;gap:8px;padding:4px 8px;display:grid}.slot i{border:1px solid #4d4475;border-radius:3px;width:12px;height:12px}.slot.full i{background:var(--c);border-color:var(--c);box-shadow:0 0 10px var(--c)}.slot.full{border-color:color-mix(in srgb, var(--c) 45%, transparent)}.slot small{color:var(--dim);font-size:11px}.slot.mine b{color:var(--cyan)}.slot.stray{opacity:.55}.slot.stray b{color:var(--dim)}.slot.flash{animation:1.2s ease-out slotflash}@keyframes slotflash{0%{background:#ff2fd666}}#goal{max-width:min(620px,100% - min(260px,30vw) - 48px);margin-left:calc(min(260px,30vw)/2);position:absolute;top:12px;left:50%;transform:translate(-50%)}.goal-line{background:var(--panel);border:1px solid var(--line);white-space:nowrap;border-radius:999px;align-items:center;gap:10px;padding:7px 8px 7px 12px;display:flex}.goal-line .lvl{font:700 11px/1 var(--mono);letter-spacing:.15em;color:var(--magenta)}.goal-line .dots{gap:4px;display:flex}.goal-line .dots i{background:#3a3260;border-radius:50%;width:7px;height:7px}.goal-line .dots i.done{background:var(--ok)}.goal-line .dots i.now{background:var(--cyan);box-shadow:0 0 6px var(--cyan)}.goal-line .num{font:700 15px/1 var(--mono);color:var(--cyan)}.goal-line .text{white-space:normal;font-weight:600}.goal-line.done .num{color:var(--ok)}.hint-btn{border:1px solid var(--line);width:26px;height:26px;color:var(--dim);font:700 14px/1 var(--mono);cursor:pointer;background:0 0;border-radius:50%;flex:none}.hint-btn:hover{color:var(--cyan);border-color:var(--cyan)}.hint{background:var(--panel);border:1px dashed var(--line);border-radius:10px;gap:4px;margin-top:6px;padding:8px 12px;display:grid}.hint code{font:13px/1.3 var(--mono);color:#c9f9ff;white-space:pre-wrap}#goal.flash .goal-line{animation:.9s ease-out goalflash}@keyframes goalflash{0%{box-shadow:0 0 0 4px #5dffa899}}#sky{text-align:center;pointer-events:none;width:min(760px,70vw);margin-left:calc(min(260px,30vw)/2);position:absolute;top:60px;left:50%;transform:translate(-50%)}.sky-line{font:800 clamp(12px, 1.6vw, 20px)/1.35 var(--mono);letter-spacing:.08em;color:#0000;text-shadow:0 0 10px #ff2fd640;filter:blur(5px);opacity:.35;transition:all 1.2s}.sky-line.on{color:#ffe9fb;text-shadow:0 0 6px var(--magenta), 0 0 18px var(--magenta), 0 0 36px #ff2fd699;filter:none;opacity:1}.sky-line.fresh{animation:2.4s ease-out skyin}@keyframes skyin{0%{opacity:0;letter-spacing:.5em;filter:blur(8px)}60%{opacity:1}}#sky.all .sky-line.on{color:#fff;text-shadow:0 0 6px var(--cyan), 0 0 22px var(--magenta), 0 0 44px var(--magenta)}#announce{border:2px solid var(--magenta);color:#fff;opacity:0;pointer-events:none;text-align:center;background:#280622eb;border-radius:12px;max-width:80vw;padding:12px 20px;font-size:18px;font-weight:700;transition:opacity .3s,transform .3s;position:absolute;top:38%;left:50%;transform:translate(-50%,-50%)scale(.96);box-shadow:0 0 30px #ff2fd680}#announce.show{opacity:1;transform:translate(-50%,-50%)scale(1)}#term{width:min(560px,48vw);height:min(46vh,380px);font:14px/1.4 var(--mono);flex-direction:column;display:flex;bottom:12px;right:12px;overflow:hidden}#term .pin{min-height:28px;color:var(--dim);border-bottom:1px solid #2ff3ff26;padding:6px 12px;font-size:13px}#term .pin.on .ok{color:var(--ok);text-shadow:0 0 8px #5dffa899}#term .pin .wait{color:var(--dim)}#term .pin .bad{color:var(--bad)}#term .log{flex:1;padding:6px 12px;overflow-y:auto}#term .log>div{white-space:pre-wrap;word-break:break-word;padding:2px 0}#term .in .prompt,#term .line .prompt{color:var(--cyan);margin-right:8px}#term .in code{font:inherit;color:var(--text)}#term .out .arrow{color:var(--dim);margin-right:8px}#term .str{color:#ffb86b}#term .num{color:#9a8cff}#term .nil{color:var(--dim)}#term .fn,#term .obj{color:#c9f9ff}#term .sealed{letter-spacing:.08em;text-shadow:0 0 6px}#term .err{color:var(--bad);padding-left:18px!important}#term .err:before{content:"✕ ";margin-left:-18px}#term .say.ok{color:var(--ok)}#term .say.bad{color:#ffb0bd}#term .say.info{color:var(--dim)}#term .line{cursor:text;border-top:1px solid #2ff3ff26;align-items:flex-start;padding:8px 12px 10px;display:flex}#term textarea{resize:none;color:#fff;font:inherit;caret-color:var(--cyan);background:0 0;border:0;outline:0;flex:1;padding:0}.tag{font:600 12px/1.1 var(--mono);color:#fff;white-space:nowrap;pointer-events:none}.name-tag{background:#0e0920cc;border:1px solid #8a5cff99;border-radius:6px;padding:3px 8px;font-size:13px}.name-tag.mine{border-color:var(--cyan);color:var(--cyan)}.cell-tag{background:#0e0920d9;border-radius:5px;align-items:center;gap:4px;padding:2px 6px;display:flex}.cell-tag i{border-radius:50%;width:9px;height:9px}.bubble{border:1px solid var(--line);background:#0e0920e6;border-radius:8px;padding:4px 9px;font-size:15px}.bubble .sealed{letter-spacing:.1em;text-shadow:0 0 6px}.bubble .lockmark{color:var(--cyan)}#jump{position:absolute;bottom:12px;left:12px}#jump select{background:var(--panel);color:var(--dim);border:1px solid var(--line);font:12px var(--mono);border-radius:8px;padding:4px 6px}#start{text-align:center;background:radial-gradient(circle at 50% 40%, #241046, var(--bg));place-content:center;gap:14px;display:grid;position:fixed;inset:0}#start[hidden]{display:none}#start h1{font:800 44px/1 var(--mono);letter-spacing:.2em;color:#fff;text-shadow:0 0 10px var(--magenta), 0 0 30px var(--magenta);margin:0 0 8px}#start label{font:12px var(--mono);color:var(--dim);text-align:left;gap:4px;display:grid}#start input{border:1px solid var(--line);background:var(--panel);color:#fff;width:280px;font:16px var(--mono);border-radius:8px;padding:9px 12px}#start button{border:1px solid var(--cyan);color:var(--cyan);font:700 16px var(--mono);letter-spacing:.2em;cursor:pointer;background:#2ff3ff1f;border-radius:8px;padding:10px}@media (max-width:760px){#term{width:calc(100% - 24px);height:40vh}#wall{max-height:28vh}}
