:root{--ui-scale: 1;font-size:calc(16px * var(--ui-scale));--cell: 1.875rem;--touch: 2.75rem;--gap: .25rem;--ground: #F4F1EA;--ink: #241F1B;--panel: #FFFDF8;--line: #241F1B;--face: #FFF4E0;--ok: #16B364;--bad: #FF4D4D;color-scheme:light dark}@media(prefers-color-scheme:dark){:root{--ground: #14161B;--ink: #F2EFE9;--panel: #1C2027;--line: #4A5262}}*{box-sizing:border-box}html,body{margin:0;height:100%;overscroll-behavior:none}body{background:var(--ground);color:var(--ink);font:500 1rem/1.4 system-ui,sans-serif;-webkit-text-size-adjust:100%}#app{display:flex;flex-direction:column;height:100dvh;overflow:hidden}.stage{position:relative;flex:1 1 0;min-height:0}#board{position:absolute;inset:0;display:block;width:100%;height:100%;touch-action:none}.hud{position:absolute;top:0;left:0;right:0;display:flex;gap:var(--gap);padding:.75rem;pointer-events:none}.hud>*{pointer-events:auto}.grow{flex-grow:1}.pill{display:flex;align-items:center;gap:.75rem;min-height:var(--touch);padding:0 .75rem;background:var(--panel);border:2px solid var(--line);border-radius:.625rem;box-shadow:0 2.5px 0 var(--line)}button.pill{font:inherit;font-size:.85rem;font-weight:600;color:inherit;cursor:pointer}.score{display:flex;align-items:center;gap:.35rem;line-height:1.1;opacity:.45}.score-text{display:flex;flex-direction:column}.score.on{opacity:1}.score b{font-size:1.05rem;font-variant-numeric:tabular-nums}.score span{font-size:.6rem;font-weight:500}.compass{position:absolute;right:.75rem;bottom:.75rem;width:var(--touch);height:var(--touch);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;padding:0;cursor:pointer;background:var(--panel);color:var(--ink);border:2.5px solid var(--line);border-radius:.625rem;box-shadow:0 2.5px 0 var(--line);-webkit-tap-highlight-color:transparent}.compass svg{display:block;transition:transform .12s linear}.compass small{font:600 .5rem/1 system-ui,sans-serif;opacity:.6;font-variant-numeric:tabular-nums}.compass.here{background:var(--ok);border-color:var(--line);color:#fffdf8}.sheet{flex:0 0 auto;background:var(--panel);border-top:2.5px solid var(--line);border-radius:1.375rem 1.375rem 0 0;padding:.625rem .75rem calc(.75rem + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:.55rem}.grab{width:2.75rem;height:5px;border-radius:3px;background:var(--ink);opacity:.22;align-self:center}.row{display:flex;justify-content:space-between;align-items:baseline;font-size:.8rem}.row .who{font-weight:600}.row .bag{opacity:.55;font-size:.72rem}.note{min-height:1.1rem;font-size:.78rem;font-weight:600;color:var(--bad)}.note.good{color:var(--ok)}.note.warn{color:#b85a12}.rack{display:flex;gap:var(--gap);justify-content:center;flex-shrink:0}.tile{position:relative;width:var(--touch);height:var(--touch);padding:0;display:flex;align-items:center;justify-content:center;cursor:grab;background:var(--face);color:#241f1b;border:2.5px solid #241F1B;border-radius:.625rem;box-shadow:0 2.5px #241f1b;font:600 1.4rem/1 system-ui,sans-serif;touch-action:none;-webkit-tap-highlight-color:transparent}.tile.bomb{background:#ff8a3d}.tile.block{background:#8b5cf6}.tile .v{position:absolute;right:4px;bottom:2px;font-size:.6rem;font-weight:600;opacity:.55}.tile.used{opacity:.25;box-shadow:none}.tile.dragging{transform:translateY(-3px) scale(1.06);box-shadow:0 5px #241f1b;cursor:grabbing;z-index:2}.actions{display:flex;gap:.5rem;flex-shrink:0}.btn{flex-shrink:0;height:var(--touch);padding:0 .5rem;cursor:pointer;background:var(--panel);color:var(--ink);border:2.5px solid var(--line);border-radius:.625rem;box-shadow:0 2.5px 0 var(--line);font:600 .85rem/1 system-ui,sans-serif}.btn.go{background:var(--ok);color:#fffdf8;border-color:#241f1b;box-shadow:0 2.5px #241f1b;letter-spacing:.04em}.actions .btn{flex-grow:1}.actions .btn.go{flex-grow:2}.btn.go.bomb{background:#ff8a3d;color:#241f1b}.btn.go.block{background:#8b5cf6;color:#fffdf8}.ghost{position:fixed;left:0;top:0;z-index:50;pointer-events:none;cursor:grabbing;line-height:1}.ghost.bad{background:#ff4d4d;color:#fffdf8}.ghost.returning{transition:transform .18s cubic-bezier(.2,.7,.3,1)}.sheet-page{flex-grow:1;overflow-y:auto;padding:1.5rem 1rem calc(1.5rem + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:.9rem;max-width:30rem;width:100%;margin:0 auto}.sheet-page h1{font-size:1.6rem;margin:0}.muted{opacity:.6;font-size:.82rem;margin:0}.code{font:700 2rem/1 system-ui,sans-serif;letter-spacing:.16em;margin:0;color:var(--ok)}.field{flex-shrink:0;height:var(--touch);padding:0 .75rem;font:inherit;background:var(--panel);color:inherit;border:2.5px solid var(--line);border-radius:.625rem}.list{display:flex;flex-direction:column;gap:.5rem}.row-btn{display:flex;align-items:center;justify-content:space-between;gap:.75rem;min-height:var(--touch);padding:.6rem .85rem;font:inherit;text-align:left;background:var(--panel);color:inherit;cursor:pointer;border:2.5px solid var(--line);border-radius:.625rem;box-shadow:0 2.5px 0 var(--line)}.row-btn b{font-family:system-ui,sans-serif;letter-spacing:.08em}.link{color:var(--ok);font-size:.75rem;word-break:break-all}.btn:disabled,.row-btn:disabled{opacity:.4;box-shadow:none;cursor:default}.btn.small{height:auto;min-height:var(--touch);padding:0 .7rem;font-size:.75rem}.linkrow{display:flex;flex-direction:column;gap:.3rem}.linkrow-body{display:flex;gap:.5rem;align-items:stretch;background:var(--panel);border:2.5px solid var(--line);border-radius:.625rem;padding:.4rem .4rem .4rem .6rem}.urltext{flex-grow:1;min-width:0;align-self:center;font:.72rem/1.35 ui-monospace,Menlo,monospace;word-break:break-all;user-select:all;-webkit-user-select:all}.row-btn.mine{border-color:var(--ok);box-shadow:0 2.5px 0 var(--ok)}.row-btn .turn{color:var(--ok);font-weight:600;font-size:.8rem}.avatar{position:relative;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;border:2px solid var(--line);transition:transform .16s cubic-bezier(.2,.7,.3,1)}.avatar img{position:absolute;inset:0;width:100%;height:100%;display:block;border-radius:50%}.avatar-initial{font-weight:700;color:#fffdf8;line-height:1}.avatar-gap{width:32px;flex-shrink:0}.score.on .avatar{border-color:var(--ok);transform:scale(1.25)}.score.on .avatar:after{content:"";position:absolute;left:50%;top:calc(100% + 6px);transform:translate(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid var(--ok)}
