.install[data-v-36e1e2ef]{display:flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--grid);border-radius:14px;padding:10px 10px 10px 14px;font-size:14px}.install p[data-v-36e1e2ef]{margin:0;flex:1}.install p svg[data-v-36e1e2ef]{vertical-align:-3px;fill:none;stroke:var(--accent);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.sync[data-v-f7081ad2]{background:var(--surface);border-radius:16px;padding:14px 18px;font-size:15px;line-height:1.5}p[data-v-f7081ad2]{margin:0}.label[data-v-f7081ad2]{font-weight:600;margin-bottom:6px;display:block}.code-row[data-v-f7081ad2]{display:flex;gap:8px;align-items:center}code[data-v-f7081ad2]{flex:1;font:600 17px ui-monospace,SF Mono,Menlo,monospace;letter-spacing:.04em;color:var(--maybe)}input[data-v-f7081ad2]{flex:1;min-width:0;font:600 16px ui-monospace,SF Mono,Menlo,monospace;color:var(--ink);background:var(--surface-2);border:1px solid var(--grid);border-radius:12px;padding:11px 12px;text-transform:uppercase}input[data-v-f7081ad2]:focus-visible{outline:3px solid var(--accent);outline-offset:1px}.code-row button[data-v-f7081ad2]{padding:10px 14px;font-size:15px;flex-shrink:0}.hint[data-v-f7081ad2],.status[data-v-f7081ad2]{color:var(--muted);font-size:13px;margin-top:6px}.enter[data-v-f7081ad2]{margin-top:16px;padding-top:14px;border-top:1px solid var(--grid)}.warn[data-v-f7081ad2]{color:var(--ink)}.warn span[data-v-f7081ad2]{color:var(--maybe)}.error[data-v-f7081ad2]{color:var(--bad);margin-top:6px}.ok[data-v-f7081ad2]{color:var(--ok);margin-top:6px}.menu[data-v-9c85733e]{justify-content:center;gap:28px}.hero[data-v-9c85733e]{text-align:center}.logo[data-v-9c85733e]{width:104px;height:104px}.logo-bg[data-v-9c85733e]{fill:var(--surface);stroke:var(--grid)}.logo-sleepers[data-v-9c85733e],.logo-rail[data-v-9c85733e]{fill:none}.logo-sleepers[data-v-9c85733e]{stroke:var(--sleeper);stroke-width:24;stroke-dasharray:4 7}.logo-rail[data-v-9c85733e]{stroke:var(--accent);stroke-width:6;stroke-linecap:round}h1[data-v-9c85733e]{margin:12px 0 4px;font-size:34px;letter-spacing:-.02em}.progress[data-v-9c85733e]{margin:0;color:var(--muted)}.actions[data-v-9c85733e]{display:flex;flex-direction:column;gap:10px;width:min(320px,100%);margin:0 auto}.links[data-v-9c85733e]{display:flex;justify-content:center;gap:8px}.rules[data-v-9c85733e]{background:var(--surface);border-radius:16px;padding:14px 18px;font-size:15px;line-height:1.5}.rules p[data-v-9c85733e]{margin:0 0 6px}.rules ul[data-v-9c85733e]{margin:0;padding-left:18px}.version[data-v-9c85733e]{margin:0;color:var(--muted);font-size:12px;text-align:center}.tabs[data-v-6695757e]{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;padding:4px;background:var(--surface-2);border-radius:14px}.tabs button[data-v-6695757e]{border:0;background:transparent;box-shadow:none;padding:8px 4px;display:flex;flex-direction:column;gap:2px}.tabs button small[data-v-6695757e]{font-size:12px;font-weight:500;color:var(--muted)}.tabs button.active[data-v-6695757e]{background:var(--surface);box-shadow:0 1px 3px #0000001f}.grid[data-v-6695757e]{flex:1;overflow-y:auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(56px,1fr));gap:8px;align-content:start;padding-bottom:8px}.lvl[data-v-6695757e]{aspect-ratio:1;padding:0;font-size:17px}.lvl.solved[data-v-6695757e]{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.board[data-v-00c5c0ad]{display:block;width:100%;height:auto;max-height:100%;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.cell[data-v-00c5c0ad]{fill:var(--cell);stroke:var(--grid);stroke-width:1}.cell.given[data-v-00c5c0ad]{fill:var(--given)}.cell.flash[data-v-00c5c0ad]{animation:flash-00c5c0ad 1.2s ease-out}@keyframes flash-00c5c0ad{0%,40%{fill:var(--hint)}}.frame[data-v-00c5c0ad]{fill:none;stroke:var(--frame);stroke-width:2}.ballast[data-v-00c5c0ad],.sleepers[data-v-00c5c0ad]{fill:none;stroke-linecap:butt;pointer-events:none}.ballast[data-v-00c5c0ad]{stroke:var(--ballast);stroke-width:28}.sleepers[data-v-00c5c0ad]{stroke:var(--sleeper);stroke-width:26;stroke-dasharray:3.5 6.5;stroke-dashoffset:-3}.rails[data-v-00c5c0ad]{fill:var(--rail);pointer-events:none;transition:fill .4s}.solved .rails[data-v-00c5c0ad]{fill:var(--accent)}.xmark[data-v-00c5c0ad]{stroke:var(--bad);stroke-width:2.5;stroke-linecap:round;pointer-events:none}.maybe[data-v-00c5c0ad]{fill:var(--maybe);pointer-events:none}.count[data-v-00c5c0ad]{font:600 17px var(--font);text-anchor:middle;fill:var(--ink);transition:fill .2s}.count.done[data-v-00c5c0ad]{fill:var(--ok)}.count.over[data-v-00c5c0ad]{fill:var(--bad)}.route[data-v-00c5c0ad]{fill:none;stroke:none}.rider[data-v-00c5c0ad]{pointer-events:none}.bubble[data-v-00c5c0ad]{pointer-events:none;animation:bubble-pop-00c5c0ad .35s cubic-bezier(.2,1.5,.4,1)}.bubble path[data-v-00c5c0ad]{fill:var(--surface);stroke:var(--accent);stroke-width:1.5;stroke-linejoin:round}.bubble text[data-v-00c5c0ad]{font:700 11px var(--font);text-anchor:middle;fill:var(--ink)}.bubble .new[data-v-00c5c0ad]{fill:var(--accent);font-size:9px}@keyframes bubble-pop-00c5c0ad{0%{opacity:0;transform:scale(.4)}}.endpoint[data-v-00c5c0ad]{font:700 15px var(--font);text-anchor:middle;fill:var(--accent)}.overlay[data-v-9179b89c]{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--scrim);display:grid;place-items:center;padding:16px;animation:fade-9179b89c .25s;z-index:10}.dialog[data-v-9179b89c]{width:min(320px,100%);background:var(--surface);border-radius:20px;padding:28px 22px 22px;display:flex;flex-direction:column;gap:10px;text-align:center;box-shadow:0 20px 50px #00000040;animation:pop-9179b89c .3s cubic-bezier(.2,1.4,.4,1)}.badge[data-v-9179b89c]{margin:0 auto 4px;width:56px;height:56px;border-radius:50%;display:grid;place-items:center;background:var(--accent)}.badge.warn[data-v-9179b89c]{background:var(--bad)}.badge path[data-v-9179b89c-s]{fill:none;stroke:var(--on-accent);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}h2[data-v-9179b89c]{margin:0;font-size:24px}p[data-v-9179b89c]{margin:0 0 8px;color:var(--muted)}@keyframes fade-9179b89c{0%{opacity:0}}@keyframes pop-9179b89c{0%{transform:scale(.85);opacity:0}}.cat-line[data-v-131dd53b]{margin:-4px 0 8px;color:var(--ink)}.danger[data-v-2d5bc064]{background:var(--bad);border-color:var(--bad);color:var(--on-accent)}.game[data-v-53b66022]{gap:10px}.title[data-v-53b66022]{display:flex;flex-direction:column;align-items:center;line-height:1.2}.title span[data-v-53b66022]{font-size:13px;color:var(--muted)}.goal[data-v-53b66022]{margin:0;text-align:center;font-size:14px;color:var(--muted)}.board-wrap[data-v-53b66022]{flex:1;min-height:0;display:flex;align-items:center;justify-content:center}.toast[data-v-53b66022]{margin:0;min-height:20px;text-align:center;font-size:14px;color:var(--accent);opacity:0;transition:opacity .2s}.toast.show[data-v-53b66022]{opacity:1}.tools[data-v-53b66022]{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.badges[data-v-998d2a9b]{flex:1;min-height:0;display:flex;flex-direction:column;gap:10px;width:100%}.summary[data-v-998d2a9b]{margin:0;text-align:center;font-size:14px;color:var(--muted)}.grid[data-v-998d2a9b]{list-style:none;margin:0;padding:2px 2px 8px;overflow-y:auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(78px,1fr));gap:12px 8px;align-content:start}.badge[data-v-998d2a9b]{display:flex;flex-direction:column;align-items:center;gap:6px;text-align:center}.medal[data-v-998d2a9b]{position:relative;width:64px;height:64px;border-radius:50%;background:#fbf3df;border:3px solid var(--accent);display:grid;place-items:center}.medal svg[data-v-998d2a9b]{width:58px;height:58px}.count[data-v-998d2a9b]{position:absolute;right:-6px;bottom:-4px;min-width:26px;padding:1px 6px;border-radius:999px;background:var(--accent);color:var(--on-accent);font-size:12px;font-weight:700}.name[data-v-998d2a9b]{font-size:12px;line-height:1.25;font-weight:600;overflow-wrap:anywhere}.locked .medal[data-v-998d2a9b]{background:var(--surface-2);border:3px dashed var(--grid);color:var(--muted);font-size:26px;font-weight:700}.name.blank[data-v-998d2a9b]{width:48px;height:10px;border-radius:5px;background:var(--surface-2)}.update[data-v-88145549]{position:fixed;left:50%;bottom:calc(env(safe-area-inset-bottom) + 16px);transform:translate(-50%);width:calc(100% - 32px);max-width:528px;display:flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--grid);border-radius:14px;padding:8px 6px 8px 14px;font-size:14px;box-shadow:0 8px 24px #0006;z-index:5}.update p[data-v-88145549]{margin:0;flex:1}.update .primary[data-v-88145549]{padding:8px 14px;font-size:15px}:root{--font: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--bg: #15171a;--surface: #1f2226;--surface-2: #0f1113;--cell: #1f2226;--given: #4a4538;--grid: #33373d;--frame: #6a6f77;--ink: #ece7de;--muted: #9a958c;--rail: #d3d8de;--sleeper: #7d5936;--ballast: #272a2f;--accent: #4fb389;--on-accent: #0f1a14;--ok: #5cc28f;--bad: #ef6b57;--hint: #7a6420;--maybe: #c9a93a;--scrim: rgb(0 0 0 / .6);color-scheme:dark}*{box-sizing:border-box}html,body{margin:0;height:100%;background:var(--bg);color:var(--ink);font-family:var(--font);-webkit-tap-highlight-color:transparent;overscroll-behavior:none;touch-action:manipulation}#app{height:100%;display:flex;justify-content:center}.screen{width:100%;max-width:560px;height:100%;display:flex;flex-direction:column;gap:14px;padding:calc(env(safe-area-inset-top) + 12px) calc(env(safe-area-inset-right) + 16px) calc(env(safe-area-inset-bottom) + 16px) calc(env(safe-area-inset-left) + 16px)}.bar{display:grid;grid-template-columns:44px 1fr 44px;align-items:center;text-align:center;font-size:17px}button{font:600 16px var(--font);color:var(--ink);background:var(--surface);border:1px solid var(--grid);border-radius:12px;padding:12px 14px;cursor:pointer;touch-action:manipulation;transition:transform .08s,background .15s}button:active:not(:disabled){transform:scale(.96)}button:disabled{opacity:.4;cursor:default}button:focus-visible{outline:3px solid var(--accent);outline-offset:2px}button.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}button.big{padding:16px;font-size:18px;border-radius:14px}button.link{background:none;border:0;color:var(--accent)}.icon-btn{width:44px;height:44px;padding:0;display:grid;place-items:center;background:transparent;border:0}.icon-btn svg{fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
