*,*:before,*:after{box-sizing:border-box}:root{color-scheme:light;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}body{margin:0;font:14px/1.4 system-ui,-apple-system,Segoe UI,sans-serif}img{max-width:100%}[hidden]{display:none!important}:root{--paper: #f3f6f9;--grid: #dbe3ec;--ink: #232a3d;--ink-soft: #66708a;--card: #ffffff;--line: #d3dae4;--wall: #2d3448;--wall-hatch: #3c4560;--p1: #2b5fd9;--p1-soft: #d9e4fb;--p2: #e0407a;--p2-soft: #fbdbe6;--eye: #ffffff;--k-a: #d08a12;--k-b: #2f9452;--k-c: #1f9493;--k-d: #7d57c4;--k-x: #d9631f;--k-y: #6f8a12;--k-z: #a14e8f;--ok: #2f9452;--warn: #b5541c;--crate: #c99a62;--crate-edge: #8a6236;--hard: #c2273f;--beam: #e3263f;--mirror: #5f8fb3;--fog: #c3ccd9;--pt-3: #12a19e;--pt-4: #8a4fd6;--pt-5: #d4800f;--pt-6: #2e7fd4;--k-w: #a0602a;--crack: #8a7a64;--hole: #0e1119;--rope: #8a6a3e;--f-display: "Shantell Sans", "Comic Sans MS", "Chalkboard SE", ui-rounded, system-ui, sans-serif;--f-body: "Nunito", ui-rounded, system-ui, -apple-system, "Segoe UI", sans-serif}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--paper: #141924;--grid: #1f2636;--ink: #e8ecf5;--ink-soft: #9aa4bd;--card: #1c2230;--line: #2d364a;--wall: #3a4360;--wall-hatch: #4a5476;--p1: #6b94ff;--p1-soft: #22325c;--p2: #ff6b9c;--p2-soft: #4f2537;--eye: #ffffff;--k-a: #f0ae3a;--k-b: #52c27a;--k-c: #40c2c0;--k-d: #a585ec;--k-x: #f08648;--k-y: #a6c23a;--k-z: #d27cbd;--ok: #52c27a;--warn: #f08648;--crate: #a77a46;--crate-edge: #6b4a24;--hard: #ff6b7d;--beam: #ff4d63;--mirror: #8fbbdb;--fog: #0b0e16;--pt-3: #33cfcb;--pt-4: #b07cff;--pt-5: #ffa53a;--pt-6: #5aa2ff;--k-w: #e09a5c;--crack: #a8977c;--hole: #000000;--rope: #c79a5c;color-scheme:dark}}:root[data-theme=dark]{--paper: #141924;--grid: #1f2636;--ink: #e8ecf5;--ink-soft: #9aa4bd;--card: #1c2230;--line: #2d364a;--wall: #3a4360;--wall-hatch: #4a5476;--p1: #6b94ff;--p1-soft: #22325c;--p2: #ff6b9c;--p2-soft: #4f2537;--eye: #ffffff;--k-a: #f0ae3a;--k-b: #52c27a;--k-c: #40c2c0;--k-d: #a585ec;--k-x: #f08648;--k-y: #a6c23a;--k-z: #d27cbd;--ok: #52c27a;--warn: #f08648;--crate: #a77a46;--crate-edge: #6b4a24;--hard: #ff6b7d;--beam: #ff4d63;--mirror: #8fbbdb;--fog: #0b0e16;--pt-3: #33cfcb;--pt-4: #b07cff;--pt-5: #ffa53a;--pt-6: #5aa2ff;--k-w: #e09a5c;--crack: #a8977c;--hole: #000000;--rope: #c79a5c;color-scheme:dark}html,body{height:100%}body{background:var(--paper);color:var(--ink);font-family:var(--f-body);font-size:15px;line-height:1.4;-webkit-tap-highlight-color:transparent}.app{max-width:520px;margin:0 auto;min-height:100%;display:flex;flex-direction:column;gap:10px;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));padding-block:12px 18px}header{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}h1{font-family:var(--f-display);font-weight:800;font-size:1.55rem;margin:0;letter-spacing:-.01em;line-height:1.1}h1 .y{color:var(--p1)}h1 .t{color:var(--p2)}.pills{display:flex;gap:6px}.pill{display:inline-flex;align-items:center;gap:6px;font-size:.8rem;font-weight:700;padding:4px 10px 4px 6px;border-radius:999px;background:var(--card);border:1px solid var(--line);color:var(--ink-soft)}.pill .dot{width:14px;height:14px;border-radius:50%;background:var(--c);opacity:.35}.pill.on{color:var(--ink)}.pill.on .dot{opacity:1;box-shadow:0 0 0 3px color-mix(in srgb,var(--c) 25%,transparent)}.pill.me{border-color:var(--c)}.levelbar{display:flex;align-items:center;gap:8px}.levelbar .name{flex:1;min-width:0;text-align:center}.levelbar .num{font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft)}.levelbar .num.hard{color:var(--hard)}.levelbar .title{font-family:var(--f-display);font-weight:700;font-size:1.15rem;line-height:1.15}button{font:inherit;color:inherit;cursor:pointer;border:1px solid var(--line);background:var(--card);border-radius:12px;padding:8px 12px;font-weight:700;touch-action:manipulation}button:focus-visible{outline:3px solid var(--p1);outline-offset:2px}button:disabled{opacity:.35;cursor:default}.icon-btn{width:40px;height:40px;padding:0;display:grid;place-items:center;font-size:1.3rem}.small{font-size:.82rem;padding:6px 10px;border-radius:10px}.stage{position:relative;display:flex;justify-content:center}.board{--cols: 9;--rows: 7;position:relative;width:min(100%,460px,max(260px,calc((100svh - 330px) * var(--cols) / var(--rows))));aspect-ratio:var(--cols) / var(--rows);max-width:100%;overflow:hidden;background-color:var(--paper);background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:calc(100% / var(--cols)) calc(100% / var(--rows));border-radius:10px;touch-action:none;user-select:none;-webkit-user-select:none;outline:1px solid var(--line)}.tile{position:relative;display:grid;place-items:center;font-weight:800}.tile.wall{background:repeating-linear-gradient(135deg,var(--wall) 0 6px,var(--wall-hatch) 6px 8px);border-radius:3px;margin:-.5px}.tile.exit:before{content:"";position:absolute;inset:14%;border-radius:50%;border:2.5px dashed var(--ink-soft)}.tile.exit:after{content:"★";color:var(--ink-soft);font-size:min(3.4vw,15px)}.tile .sym{position:relative;font-size:min(3.6vw,16px);line-height:1;color:var(--k)}.tile.plate:before{content:"";position:absolute;inset:20%;border-radius:5px;border:2.5px solid var(--k);background:color-mix(in srgb,var(--k) 18%,transparent);transition:background .15s,inset .15s}.tile.plate.down:before{background:var(--k);inset:24%}.tile.plate.down .sym{color:var(--paper)}.tile.door:before{content:"";position:absolute;inset:4%;border-radius:4px;background:repeating-linear-gradient(90deg,var(--k) 0 5px,color-mix(in srgb,var(--k) 70%,var(--paper)) 5px 8px);transition:opacity .2s,transform .2s}.tile.door .sym{color:var(--paper)}.tile.door.open:before{opacity:0}.tile.door.open{box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--k) 55%,transparent);border-radius:4px}.tile.door.open .sym{color:var(--k);opacity:.55}.tile.door.inv:before{background:radial-gradient(circle,var(--k) 0 2.2px,transparent 2.6px) 0 0 / 7px 7px,color-mix(in srgb,var(--k) 40%,var(--paper))}.tile.door.inv.open:before{opacity:.3}.tile.door.inv .sym{color:var(--ink)}.tile.door.inv.open .sym{color:var(--k)}.tile.arrow:before{content:"";width:26%;height:26%;border-top:3px solid var(--ink-soft);border-right:3px solid var(--ink-soft);transform:rotate(var(--rot)) translate(-14%,14%)}.tile.switch:before{content:"";position:absolute;inset:18%;border-radius:50%;border:2.5px solid var(--k);background:transparent;transition:background .15s}.tile.switch.on:before{background:var(--k)}.tile.switch.on .sym{color:var(--paper)}.tile.gate1,.tile.gate2{background:repeating-linear-gradient(90deg,color-mix(in srgb,var(--c) 45%,transparent) 0 3px,transparent 3px 7px)}.tile.gate1{--c: var(--p1)}.tile.gate2{--c: var(--p2)}.token{position:absolute;left:0;top:0;width:calc(100% / var(--cols));height:calc(100% / var(--rows));display:grid;place-items:center;pointer-events:none;transition:transform .14s ease-out;z-index:2}.token.instant{transition:none}.blob{width:74%;height:74%;border-radius:50% 50% 46% 46%;background:var(--c);position:relative;box-shadow:inset 0 -3px color-mix(in srgb,#000 18%,transparent)}.blob:before,.blob:after{content:"";position:absolute;top:34%;width:17%;height:22%;border-radius:50%;background:var(--eye)}.blob:before{left:26%}.blob:after{right:26%}.token.box{z-index:1}.crate{width:78%;height:78%;border-radius:4px;background:var(--crate);border:2px solid var(--crate-edge);background-image:linear-gradient(45deg,transparent 46%,var(--crate-edge) 46% 54%,transparent 54%),linear-gradient(-45deg,transparent 46%,var(--crate-edge) 46% 54%,transparent 54%)}.token.p1{--c: var(--p1)}.token.p2{--c: var(--p2)}.token.me .blob{outline:3px solid color-mix(in srgb,var(--c) 35%,transparent);outline-offset:2px}.token.bump .blob{animation:bump .22s}@keyframes bump{30%{transform:scale(.86) rotate(-6deg)}60%{transform:scale(1.04) rotate(4deg)}}.ping{position:absolute;width:calc(100% / var(--cols));height:calc(100% / var(--rows));pointer-events:none;z-index:3;display:grid;place-items:center}.ping:before{content:"";width:90%;height:90%;border-radius:50%;border:3px solid var(--c);animation:ping 1.1s ease-out 2}@keyframes ping{0%{transform:scale(.4);opacity:1}to{transform:scale(1.5);opacity:0}}.overlay{position:absolute;inset:0;display:grid;place-items:center;z-index:5;background:color-mix(in srgb,var(--paper) 70%,transparent);border-radius:10px}.card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px 18px 16px;width:min(92%,340px);text-align:center;display:grid;gap:10px;box-shadow:0 10px 30px color-mix(in srgb,var(--ink) 14%,transparent)}.card h2{font-family:var(--f-display);font-size:1.35rem;margin:0;text-wrap:balance}.card p{margin:0;color:var(--ink-soft);text-wrap:pretty}.primary{background:var(--ink);color:var(--paper);border-color:var(--ink);padding:11px 14px}.roles{display:grid;grid-template-columns:1fr 1fr;gap:10px}.role-btn{display:grid;justify-items:center;gap:6px;padding:14px 8px;border-width:2px}.role-btn .blob{width:46px;height:46px}.role-btn.p1{--c: var(--p1);border-color:var(--p1);background:var(--p1-soft)}.role-btn.p2{--c: var(--p2);border-color:var(--p2);background:var(--p2-soft)}.role-btn small{font-weight:600;color:var(--ink-soft);font-size:.75rem}.hint{margin:0;text-align:center;color:var(--ink-soft);font-size:.92rem;min-height:2.6em;text-wrap:balance}.hint.warn{color:var(--warn);font-weight:700}.controls{display:flex;align-items:center;justify-content:space-between;gap:12px}.side{display:grid;gap:8px;justify-items:start;min-width:0;flex:1}.side.right{justify-items:end}.dpad{display:grid;grid-template-columns:repeat(3,58px);grid-template-rows:repeat(3,58px);gap:4px}.dpad button{border-radius:14px;font-size:1.4rem;padding:0;background:var(--card);border:2px solid var(--line);color:var(--ink)}.dpad button:active,.dpad button.held{background:var(--line)}.dpad .up{grid-column:2;grid-row:1}.dpad .left{grid-column:1;grid-row:2}.dpad .right{grid-column:3;grid-row:2}.dpad .down{grid-column:2;grid-row:3}.dpad .mid{grid-column:2;grid-row:2;display:grid;place-items:center}.dpad .mid .blob{width:30px;height:30px}.mover{font-size:.8rem;color:var(--ink-soft);font-weight:700}details.help{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:10px 14px}details.help summary{font-weight:800;cursor:pointer}.legend{list-style:none;padding:0;margin:10px 0 2px;display:grid;gap:8px}.legend li{display:grid;grid-template-columns:34px 1fr;gap:10px;align-items:center}.legend .tile.box-demo .crate,.legend .tile.box-demo .mirror{width:70%;height:70%}.legend .tile{position:relative;display:grid;place-items:center}.legend .tile{width:34px;height:34px;border-radius:6px;background-color:var(--paper);outline:1px solid var(--line)}.note{font-size:.8rem;color:var(--ink-soft);margin:8px 0 0}@media (prefers-reduced-motion: reduce){.token{transition:none}.token.bump .blob,.ping:before{animation:none}}@media (max-width: 360px){.dpad{grid-template-columns:repeat(3,50px);grid-template-rows:repeat(3,50px)}}.tile.portal:before{content:"";position:absolute;inset:12%;border-radius:50%;background:radial-gradient(circle,var(--k) 0 18%,transparent 20% 38%,var(--k) 40% 50%,transparent 52% 64%,var(--k) 66% 72%,transparent 74%)}.tile.emitter,.tile.receptor{background:var(--wall);border-radius:3px;margin:-.5px}.tile.emitter:before{content:"";position:absolute;left:28%;top:28%;width:44%;height:44%;background:var(--beam);clip-path:polygon(0 0,100% 50%,0 100%);transform:rotate(var(--rot))}.tile.receptor:before{content:"";position:absolute;inset:22%;border-radius:50%;border:3px solid var(--beam);opacity:.55}.tile.receptor.on:before{background:var(--beam);opacity:1;box-shadow:0 0 12px var(--beam)}.beam{position:absolute;inset:0;pointer-events:none;z-index:1}.beam.h{background:linear-gradient(var(--beam),var(--beam)) center / 100% 4px no-repeat;filter:drop-shadow(0 0 3px var(--beam))}.beam.v{background:linear-gradient(var(--beam),var(--beam)) center / 4px 100% no-repeat;filter:drop-shadow(0 0 3px var(--beam))}.beam.hv{background:linear-gradient(var(--beam),var(--beam)) center / 100% 4px no-repeat,linear-gradient(var(--beam),var(--beam)) center / 4px 100% no-repeat}.mirror{width:80%;height:80%;border-radius:4px;position:relative;border:2px solid var(--mirror);background:color-mix(in srgb,var(--mirror) 22%,var(--paper))}.mirror:after{content:"";position:absolute;left:50%;top:-10%;width:4px;height:120%;background:var(--mirror);border-radius:2px;transform:translate(-50%) rotate(45deg)}.mirror.m2:after{transform:translate(-50%) rotate(-45deg)}.tile.trap{background:repeating-linear-gradient(90deg,var(--hard) 0 2.5px,transparent 2.5px 9px),repeating-linear-gradient(0deg,var(--hard) 0 2.5px,transparent 2.5px 9px),color-mix(in srgb,var(--hard) 14%,var(--paper));border-radius:3px;box-shadow:inset 0 0 0 2px var(--hard)}.tile.release:before{content:"";position:absolute;inset:20%;border-radius:50%;background:var(--hard)}.tile.release .sym{color:var(--paper)}.tile.mirador:before{content:"";position:absolute;inset:14%;border-radius:50%;border:2.5px solid var(--ink-soft)}.tile.mirador .sym{color:var(--ink-soft)}.tile.concealed:before,.tile.concealed .sym{display:none}.fog{position:absolute;inset:-.5px;background:var(--fog);opacity:0;transition:opacity .25s;pointer-events:none;z-index:2}.fog.on{opacity:1}.token{z-index:4}.token.box{z-index:3}.token.hidden{opacity:0}.token.jailed .blob{outline:3px dashed var(--hard);outline-offset:2px;animation:shake .6s infinite}@keyframes shake{25%{transform:translate(-6%)}75%{transform:translate(6%)}}.moves{font-size:.74rem;color:var(--ink-soft);font-variant-numeric:tabular-nums;margin-top:1px}.jail{display:grid;gap:6px;padding:8px 12px;border-radius:12px;background:color-mix(in srgb,var(--hard) 12%,var(--card));border:1px solid var(--hard)}.jail .row{display:flex;justify-content:space-between;gap:10px;font-weight:800;font-size:.88rem}.jail .row span:last-child{font-variant-numeric:tabular-nums;color:var(--hard);white-space:nowrap}.jail .bar{height:6px;border-radius:3px;background:var(--line);overflow:hidden}.jail .bar span{display:block;height:100%;width:100%;background:var(--hard);transition:width .25s linear}.stars{font-size:2rem;line-height:1;color:var(--k-a);letter-spacing:.12em}@media (prefers-reduced-motion: reduce){.token.jailed .blob{animation:none}}.tile.crack{background:linear-gradient(115deg,transparent 45%,var(--crack) 46% 50%,transparent 51%),linear-gradient(30deg,transparent 58%,var(--crack) 59% 62%,transparent 63%),linear-gradient(160deg,transparent 22%,var(--crack) 23% 25%,transparent 26%),color-mix(in srgb,var(--crack) 16%,transparent);border-radius:3px}.tile.crack.hole{background:radial-gradient(circle at 50% 45%,var(--hole) 0 48%,color-mix(in srgb,var(--hole) 60%,var(--wall)) 72%)}.tile.weight:before{border:4px double var(--k);inset:16%}.rope{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:3;overflow:visible}.rope path{fill:none;stroke:var(--rope);stroke-width:.1;stroke-linecap:round;stroke-dasharray:.2 .1;transition:d .14s ease-out}.rope path.taut{stroke:var(--hard);stroke-dasharray:none}.levelbar .name{display:grid;justify-items:center;gap:0;border:0;background:transparent;padding:2px 6px;border-radius:10px}.levelbar .name:hover{background:var(--card)}.levelbar .name .title:after{content:" ▾";color:var(--ink-soft);font-size:.8em}.sheet{position:fixed;inset:0;z-index:30;display:grid;align-items:end;justify-items:center;background:color-mix(in srgb,var(--ink) 35%,transparent)}.sheet-card{background:var(--paper);width:min(560px,100%);max-height:86%;overflow:auto;border-radius:18px 18px 0 0;border:1px solid var(--line);border-bottom:0;padding-top:14px;padding-bottom:calc(18px + env(safe-area-inset-bottom,0px));padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));display:grid;gap:12px;align-content:start}.sheet-head{display:flex;align-items:center;justify-content:space-between}.sheet-head h2{font-family:var(--f-display);margin:0;font-size:1.35rem}.blocks{display:flex;gap:6px;overflow-x:auto;padding-bottom:4px;scrollbar-width:thin}.blocks button{flex:none;font-size:.82rem;padding:6px 10px;border-radius:999px;white-space:nowrap}.blocks button[aria-pressed=true]{background:var(--ink);color:var(--paper);border-color:var(--ink)}.block-desc{margin:0;color:var(--ink-soft);font-size:.88rem}.lvgrid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}.lvgrid button{display:grid;gap:2px;justify-items:center;padding:8px 2px;border-radius:12px;font-variant-numeric:tabular-nums}.lvgrid button .n{font-weight:800;font-size:1.02rem}.lvgrid button .st{font-size:.7rem;letter-spacing:.05em;color:var(--k-a);min-height:1em}.lvgrid button .st.none{color:var(--line)}.lvgrid button .ic{font-size:.66rem;color:var(--ink-soft);min-height:1em}.lvgrid button.cur{border-color:var(--p1);box-shadow:0 0 0 2px var(--p1-soft)}.world{position:absolute;left:0;top:0;width:100%;height:100%;display:grid;grid-template-columns:repeat(var(--cols),1fr);grid-template-rows:repeat(var(--rows),1fr);background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:calc(100% / var(--cols)) calc(100% / var(--rows));transition:left .35s ease,top .35s ease}.world.instant{transition:none}.board{background-image:none}.away{position:absolute;left:50%;top:6px;transform:translate(-50%);z-index:6;background:var(--card);border:1.5px solid var(--c);color:var(--ink);white-space:nowrap;font-size:.76rem;font-weight:800;padding:3px 10px;border-radius:999px}.tile.roomdoor:before{content:"";position:absolute;inset:8% 14% 0;border-radius:45% 45% 0 0;border:3px solid var(--k);border-bottom:0;background:color-mix(in srgb,var(--k) 22%,transparent)}.tile.roomdoor .sym{color:var(--k);font-size:min(3.4vw,14px)}.mirrorbar{text-align:center;font-weight:800;font-size:.86rem;padding:6px 10px;border-radius:12px;color:var(--k-z);background:color-mix(in srgb,var(--k-z) 12%,var(--card));border:1px solid var(--k-z)}.token.linked .blob{outline:2.5px dashed var(--k-z);outline-offset:2px}@media (prefers-reduced-motion: reduce){.world{transition:none}}.home{display:grid;gap:18px;align-content:start;padding-block:28px 12px}.home h1.big{font-size:2.6rem}.home .lead{margin:0;color:var(--ink-soft);font-size:1.02rem;text-wrap:balance}.home-card{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:16px;display:grid;gap:12px}.home-card h2{font-family:var(--f-display);font-size:1.05rem;margin:0}.seatpick{display:grid;grid-template-columns:1fr 1fr;gap:8px}.seatpick button{display:flex;align-items:center;gap:8px;justify-content:center;border-width:2px}.seatpick button .blob{width:22px;height:22px}.seatpick button.p1{--c: var(--p1)}.seatpick button.p2{--c: var(--p2)}.seatpick button[aria-pressed=true].p1{border-color:var(--p1);background:var(--p1-soft)}.seatpick button[aria-pressed=true].p2{border-color:var(--p2);background:var(--p2-soft)}.join{display:flex;gap:8px}.join input{flex:1;min-width:0;font:inherit;font-size:1.1rem;font-weight:800;letter-spacing:.18em;text-transform:uppercase;padding:10px 12px;border-radius:12px;border:1px solid var(--line);background:var(--paper);color:var(--ink)}.join input:focus-visible{outline:3px solid var(--p1);outline-offset:2px}.divider{display:flex;align-items:center;gap:10px;color:var(--ink-soft);font-size:.8rem}.divider:before,.divider:after{content:"";flex:1;height:1px;background:var(--line)}.net-note{margin:0;font-size:.82rem;color:var(--ink-soft)}.net-note.warn{color:var(--warn);font-weight:700}.roombar{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.roomcode{font-weight:800;letter-spacing:.14em;font-variant-numeric:tabular-nums}.share{display:grid;gap:6px;padding:10px 12px;border-radius:12px;background:var(--card);border:1px dashed var(--line);text-align:center}.share b{letter-spacing:.14em;font-size:1.15rem}.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.home,.home-card{min-width:0;grid-template-columns:minmax(0,1fr)}.seatpick button{min-width:0;flex-wrap:wrap;text-align:center}
