:root{--scale:1;--bg:#0e0a08;--panel-text:#f4e3a1;--muted:#b89a72;--dialog-bg:#2b1d14;--dialog-border:#c9a15a;--button-bg:#5c4332;--button-hover:#7a5a3f;--primary:#f08a24;--star:#f2c14e;--star-empty:#2b1d14;--paper:#efe6d2;--ink:#3b2a20;--font:ui-monospace, "Cascadia Mono", Menlo, Consolas, monospace}*{box-sizing:border-box}html,body{height:100%;margin:0}body{background:var(--bg);color:var(--panel-text);font-family:var(--font);touch-action:none;-webkit-user-select:none;user-select:none;place-items:center;display:grid;overflow:hidden}#stage{width:calc(320px * var(--scale));height:calc(180px * var(--scale));font-size:calc(6px * var(--scale));position:relative}.field{width:100%;height:100%;position:relative}#screen{width:100%;height:100%;image-rendering:pixelated;display:block}.panel{flex-direction:column;gap:.6em;width:15%;padding:0 .5em;display:flex;position:absolute;top:10%;bottom:10%}.panel p{margin:0}.panel-left{left:0}.panel-right{align-items:stretch;right:0}.level-name{font-weight:700}.muted{color:var(--muted)}button{font:inherit;color:var(--panel-text);background:var(--button-bg);border:calc(.5px * var(--scale)) solid var(--dialog-border);cursor:pointer;padding:.3em .4em}button:hover{background:var(--button-hover)}button:focus-visible{background:var(--button-hover)}button:focus-visible{outline:2px solid var(--panel-text);outline-offset:1px}.panel-right button{flex-direction:column;align-items:center;line-height:1.1;display:flex}.panel-right button span{font-size:.75em}.dialog{background:var(--dialog-bg);border:calc(1px * var(--scale)) solid var(--dialog-border);text-align:center;min-width:45%;padding:.8em 1.2em;position:absolute;top:50%;bottom:auto;left:50%;right:auto;transform:translate(-50%,-50%)}.dialog[hidden]{display:none}.dialog h2{margin:0 0 .4em;font-size:1.3em}.dialog p{margin:.3em 0}.stars{letter-spacing:.1em;color:var(--star);font-size:2em}.stars .empty{color:var(--star-empty)}.actions{justify-content:center;gap:.6em;margin-top:.6em;display:flex}button.primary{background:var(--primary);color:var(--bg)}.dialog.note{max-width:70%}.note-text{background:var(--paper);color:var(--ink);padding:.5em .8em;font-style:italic}.dialog .muted{font-size:.85em}.level-grid{grid-template-columns:repeat(5,1fr);gap:.4em;display:grid}.level-grid button{flex-direction:column;align-items:center;display:flex}.level-grid .stars{font-size:.8em}.level-grid button.locked{opacity:.55;cursor:not-allowed}.lock{background:currentColor;width:.8em;height:.6em;margin:.55em 0 .25em;position:relative}.lock:before{content:"";box-sizing:border-box;border:.12em solid;border-bottom:none;width:.5em;height:.4em;position:absolute;bottom:100%;left:.15em}.level-grid .riddle-room{grid-column:span 3}.debug-badge{color:#fff;background:#c0392b;align-self:flex-start;padding:0 .3em;font-size:.75em}.debug-badge[hidden]{display:none}.dial-list{margin:.6em 0 0;padding:0;list-style:none}.dial-list:empty{display:none}.note-list{margin:.3em 0;padding:0;list-style:none}.note-list li{margin:.2em 0}.note-list .note-text{display:inline-block}.toast{background:var(--dialog-bg);border:calc(1px * var(--scale)) solid var(--dialog-border);white-space:nowrap;margin:0;padding:.3em .8em;position:absolute;bottom:3%;left:50%;transform:translate(-50%)}.toast[hidden]{display:none}.level-select-body{align-items:flex-start;gap:.8em;display:flex}.collected{text-align:left;min-width:7em}.collected h3{margin:0 0 .3em;font-size:1em}.collected ul{margin:0;padding:0;list-style:none}.collected li{white-space:nowrap}.collected li+li{margin-top:.3em}.collected button{text-align:left;width:100%}.collected .locked{color:var(--muted)}.legal-links{font-size:.75em}.legal-links a{color:var(--muted)}.rating{justify-content:center;gap:.3em;margin:.2em 0 .5em;display:flex}.rating button{color:var(--star-empty);-webkit-text-stroke:calc(.3px * var(--scale)) var(--star);padding:.05em .2em;font-size:1.6em;line-height:1}.rating button.on{color:var(--star)}#feedback label{text-align:left;font-size:.85em;display:block}#feedback textarea{width:100%;min-width:18em;font:inherit;color:var(--ink);background:var(--paper);border:calc(.5px * var(--scale)) solid var(--dialog-border);resize:none;-webkit-user-select:text;user-select:text;touch-action:auto;margin:.2em 0 .3em;padding:.3em;font-size:.85em;display:block}.dialog .muted a{color:var(--muted)}fieldset.rating{border:none;padding:0}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.key-red{color:#e0463a}.key-blue{color:#4a8fe7}.key-yellow{color:#f2d23c}#keys .key+.key{margin-left:.3em}#keys-row[hidden]{display:none}.hint{background:var(--paper);max-width:70%;color:var(--ink);text-align:center;pointer-events:none;margin:0;padding:.2em .7em;font-size:.85em;position:absolute;top:.5%;left:50%;transform:translate(-50%)}.hint[hidden]{display:none}.link-button{color:var(--muted);background:0 0;border:none;padding:0;text-decoration:underline}.link-button:hover{color:var(--panel-text);background:0 0}.link-button:focus-visible{color:var(--panel-text);background:0 0}body.portrait{touch-action:pan-y;place-items:start center;overflow-y:auto}body.portrait #stage{width:calc(224px * var(--scale));flex-direction:column;justify-content:center;gap:8px;height:auto;min-height:100vh;font-size:clamp(13px,3.8vw,18px);display:flex}body.portrait .field{touch-action:none;width:calc(224px * var(--scale));height:calc(144px * var(--scale));order:3;overflow:hidden}body.portrait #screen{left:calc(-48px * var(--scale));top:calc(-18px * var(--scale));width:calc(320px * var(--scale));height:calc(180px * var(--scale));position:absolute}body.portrait .panel{width:auto;padding:0;position:static}body.portrait .panel-left{flex-flow:wrap;order:1;align-items:baseline;gap:.3em 1em}body.portrait .dial-list{gap:.8em;margin:0;display:flex}body.portrait .dial-list:empty{display:none}body.portrait .hint{order:2;max-width:none;position:static;transform:none}body.portrait .panel-right{flex-direction:row;order:4}body.portrait .panel-right button{flex:1}body.portrait .dialog{z-index:10;width:min(94vw,32em);min-width:0;max-height:92vh;padding:.8em;position:fixed;top:50%;bottom:auto;left:50%;right:auto;overflow-y:auto}body.portrait .dialog.note{max-width:none}body.portrait .level-select-body{flex-direction:column;align-items:stretch}body.portrait .collected ul{flex-wrap:wrap;gap:.3em;display:flex}body.portrait .collected li+li{margin-top:0}body.portrait .toast{z-index:11;white-space:normal;max-width:92vw;position:fixed;bottom:1.5em}body.portrait #feedback textarea{min-width:0}.house{flex:1;min-width:0}.roof{clip-path:polygon(8% 100%,50% 0,92% 100%);background:#4a3528;height:1.6em;margin:0 -.4em}.ground{background:var(--bg);height:.5em;margin:0 -.6em}.storeys{border:calc(.5px * var(--scale)) solid var(--dialog-border);border-top:none;border-bottom:none;flex-direction:column;display:flex}.storey{border:none;border-bottom:calc(1px * var(--scale)) solid var(--bg);text-align:left;background:#3a2a1f;align-items:center;gap:.6em;width:100%;padding:.25em .5em;display:flex}.storey.closed:hover:not(:disabled){filter:brightness(1.3);background:#3a2a1f}.storey.closed:focus-visible{filter:brightness(1.3);background:#3a2a1f}.storey.closed:disabled{color:var(--muted);cursor:not-allowed;filter:brightness(.6)}.storey.coming{color:var(--muted);filter:brightness(.6);background:repeating-linear-gradient(to bottom, #3a2a1f 0 .9em, #2b1d14 .9em calc(.9em + 1px * var(--scale)));padding-block-start:.8em;padding-block-end:.8em}.storey-name{flex:1}.storey-stars{color:var(--star)}.storey-status{font-size:.85em}.storey .lock{margin:.3em 0 0}.storey.open{background:#4a3528;flex-direction:column;align-items:stretch;padding:.4em .5em .5em}.storey-header{gap:.6em;margin-bottom:.4em;font-weight:700;display:flex}.level-grid .room{background:var(--dialog-bg);border-color:var(--button-bg)}.level-grid .room.lit{background:var(--dialog-border);color:var(--ink);border-color:var(--dialog-border)}.level-grid .room.lit .stars{color:#6b3a12}.level-grid .room.lit .stars .empty{color:#0003}.level-grid .room.lit:hover{background:#dbb56e}.level-grid .room.current{outline:calc(1px * var(--scale)) solid var(--primary);outline-offset:1px}.floor-name{font-size:.8em}.level-grid .room.riddle-room:not(.lit){background:var(--dialog-bg);color:var(--panel-text);border-color:var(--dialog-border)}#level-select{width:80%;max-height:96%;padding:.5em 1em;overflow-y:auto}#level-select h2{margin:0}.storey.closed{white-space:nowrap;font-size:.85em}body.portrait #level-select{width:min(94vw,32em);max-height:92vh}
