:root{--bg: #f6efe2;--surface: #fff8ea;--ink: #2a1c10;--muted: #6b5640;--line: #e3d3b8;--tile: #f1dcab;--tile-edge: #a87b45;--good: #2f8a3e;--bad: #c4372f;--gold: #c98a00;--chip: #f3e6cc;--pulse-fill: #e8cf9a;--accent: #c4532f;--accent-ink: #fff8ea;--sky: #9cc7e6;--sea: #2a85ad;--chip-bg: #fff8ea;--chip-ink: #2a1c10;--chip-edge: #5a3d1e;--found: #145a2a;--font: ui-rounded, "SF Pro Rounded", "Nunito", system-ui, -apple-system, sans-serif;color-scheme:light dark}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg: #1c1610;--surface: #2a2018;--ink: #f6ead6;--muted: #c2ab8c;--line: #4a3a2a;--tile: #4a3b28;--tile-edge: #b08a5a;--good: #5cc46c;--bad: #ff7a66;--gold: #f0bf2f;--chip: #3a2d20;--pulse-fill: #5a4630;--accent: #e0714a;--accent-ink: #1c1610;--sky: #20384a;--sea: #164c66}}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{margin:0;background:var(--bg);color:var(--ink)}body{font:16px/1.35 var(--font);-webkit-text-size-adjust:100%;background:linear-gradient(180deg,var(--sky) 0,var(--bg) 260px) no-repeat,var(--bg);min-height:100dvh}#app{max-width:480px;margin:0 auto;padding:max(12px,env(safe-area-inset-top)) 16px max(20px,env(safe-area-inset-bottom));min-height:100dvh}button{font:inherit;color:inherit;background:var(--surface);border:1px solid var(--line);border-radius:14px;min-height:44px;padding:0 16px;cursor:pointer;font-weight:600;box-shadow:0 1px 0 var(--line)}button.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent);font-weight:750;box-shadow:0 4px 12px #c4532f33}button:disabled{opacity:.4;cursor:default}button:focus-visible,summary:focus-visible{outline:3px solid var(--ink);outline-offset:2px}.muted{color:var(--muted)}.row{display:flex;gap:8px;align-items:center}.grow{flex:1}h1,h2,h3{margin:0}.top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.target{display:flex;flex-direction:column;line-height:1}.target small{font-size:13px;color:var(--muted);margin-bottom:4px}.target b{font-size:56px;font-weight:800;letter-spacing:-1px}.meta{text-align:right;display:flex;flex-direction:column;gap:2px}.counter{font-size:18px;font-weight:600}.clock{font-size:28px;font-variant-numeric:tabular-nums;color:var(--muted)}.clock.red{color:var(--bad)}.leave{min-height:36px;padding:0 10px;font-size:14px;margin-top:4px}.caption{min-height:28px;margin:6px 0 2px;font-size:15px;font-weight:500;text-align:center}.caption:empty:before{content:" "}.caption button{margin-left:8px}.rules{margin:2px 0 6px;font-size:14px;color:var(--muted)}.rules summary{min-height:32px;display:flex;align-items:center;cursor:pointer}.rules ul{margin:2px 0 6px;padding-left:18px}.board{display:flex;justify-content:center;align-items:center;min-height:140px;margin:4px 0 10px}.board svg{touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;overflow:visible}.tile polygon{fill:var(--tile);stroke:var(--tile-edge);stroke-width:1;transition:fill .12s}.lbl{pointer-events:none;transform-box:fill-box;transform-origin:center}.lbl text{fill:var(--ink);font-weight:700;-webkit-user-select:none;user-select:none}.lbl .sign{fill:var(--ink);transition:opacity .2s}.lbl.dropped .sign{opacity:0}.tile.sel polygon{stroke:var(--ink);stroke-width:4}.tile.reach polygon{stroke:var(--ink);stroke-width:2.5;stroke-dasharray:5 4}.tile.pulse polygon{fill:var(--pulse-fill);stroke:var(--ink);stroke-width:4;stroke-dasharray:1 7;stroke-linecap:round;animation:beat 1.4s infinite}.trail{fill:none;stroke:var(--ink);stroke-opacity:.5;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.tile{transform-box:fill-box;transform-origin:center}.tile.shake,.lbl.shake{animation:shake .28s}.tile.shake polygon{stroke:var(--bad);stroke-width:3}.tile.flash-ok polygon{animation:fok .28s}.tile.flash-bad polygon{animation:fbad .28s}.tile.flash-repeat polygon{animation:frep .28s}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-6px)}45%{transform:translate(6px)}70%{transform:translate(-4px)}}@keyframes fok{0%{fill:var(--good)}to{fill:var(--tile)}}@keyframes fbad{0%{fill:var(--bad)}to{fill:var(--tile)}}@keyframes frep{0%{fill:var(--muted)}to{fill:var(--tile)}}@keyframes beat{0%,22%,to{stroke-width:4}11%{stroke-width:9}}.tape{list-style:none;margin:0;padding:0;min-height:96px;max-height:210px;overflow:auto;border-top:1px solid var(--line)}.tape li{padding:6px 2px;border-bottom:1px solid var(--line);font-size:17px;font-variant-numeric:tabular-nums}.tape .bound{background:var(--chip);border-radius:6px;padding:0 5px;margin:0 -1px;box-shadow:inset 0 -2px 0 var(--tile-edge)}.tape .ok{color:var(--good);font-weight:700}.tape .no{color:var(--bad);font-weight:700;margin-left:6px}.tape .not{color:var(--muted)}.tape .chip{margin-left:8px;font-size:13px;background:var(--bad);color:var(--bg);border-radius:8px;padding:1px 7px}.tape .free{margin-left:8px;font-size:13px;color:var(--muted)}.tape li.msg{color:var(--muted);font-style:italic}.hintbar{margin-top:10px}.hintbar button{width:100%}button.hint.lit{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.result h2{font-size:28px}.stars{font-size:44px;letter-spacing:6px;color:var(--gold);line-height:1.1}.stars .off{color:var(--line)}.card{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:14px;margin:12px 0;box-shadow:0 6px 18px #2a1c1012}.minis{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:8px}.mini{text-align:center;font-size:14px}.mini svg{max-width:100%;height:auto}.mini polygon{fill:var(--tile);stroke:var(--tile-edge);stroke-width:1}.mini text{fill:var(--ink);font-weight:700;paint-order:stroke;stroke:var(--tile);stroke-width:3px}.mini polyline{fill:none;stroke:var(--ink);stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:.45}.mini circle{fill:var(--ink)}.actions{display:flex;gap:10px;margin-top:14px}.actions button{flex:1}.title{font-size:30px;font-weight:800;letter-spacing:-.01em;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;touch-action:manipulation;padding:6px 0}.next{width:100%;text-align:left;padding:14px 16px;min-height:72px}.next b{display:block;font-size:20px}.chapter{margin:12px 0}.chapter h3{display:flex;justify-content:space-between;font-size:17px;margin-bottom:6px}.cells{display:grid;grid-template-columns:repeat(6,1fr);gap:6px}.cells button{min-height:44px;padding:0;font-size:14px;line-height:1.1}.cells button .st{color:var(--gold);font-size:11px;display:block;letter-spacing:1px;min-height:12px}.cells button.locked{opacity:.35}.shapeline{height:56px;width:auto;display:block;margin:6px 0}.shapeline polygon{fill:var(--tile);stroke:var(--tile-edge)}.gold{color:var(--gold)}.stline{color:var(--ink)}.stline .gold{letter-spacing:1px}.debug table{width:100%;border-collapse:collapse;font-size:13px;font-variant-numeric:tabular-nums}.debug th,.debug td{text-align:left;padding:4px;border-bottom:1px solid var(--line)}.debug .line{font-size:20px;font-weight:700;margin:8px 0}.debug pre{max-height:120px;overflow:auto;font-size:11px;background:var(--surface);padding:6px;border-radius:8px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.tile.shake,.lbl.shake{animation:none}}.home h3:not(.chapter h3){margin-top:14px}.next small{color:inherit;opacity:.75}.card .tape{max-height:none;min-height:0;margin-top:6px}:root{--used-bg: #e7e1d6;--used-ink: #7a7266}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--used-bg: #3a332b;--used-ink: #a89e8f}}.tile.faded polygon{fill:var(--used-bg);stroke:var(--used-bg)}.lbl.faded text,.lbl.faded .sign{fill:var(--used-ink)}.leftline{font-size:13px;color:var(--muted);margin-top:2px}.hintbar{display:flex;gap:10px;align-items:center}.hintbar button{flex:1;width:auto}.meter{display:flex;gap:4px}.meter i{width:14px;height:30px;border-radius:4px;border:2px solid var(--ink)}.meter i.on{background:var(--accent);border-color:var(--accent)}.timeup{text-align:right;font-size:14px;display:flex;flex-direction:column;gap:4px;align-items:flex-end}.timeup .row button{min-height:38px;padding:0 12px}.donebtn{min-height:36px;padding:0 10px;font-size:14px;margin-top:4px}.sub{font-weight:600;margin:10px 0 2px;font-size:14px;color:var(--muted)}.islandmap{overflow:auto;max-height:70dvh;border-radius:14px;border:1px solid var(--line);background:#2a85ad;-webkit-overflow-scrolling:touch}.islandmap svg{display:block}.plot.slide{animation:slidein .28s ease-out}@keyframes slidein{0%{transform:translateY(-40px);opacity:0}to{transform:none;opacity:1}}@media(prefers-reduced-motion:reduce){.plot.slide{animation:none}}.gap{height:10px}.switch{display:flex;gap:10px;align-items:center;min-height:44px;margin:8px 0}.switch input{width:24px;height:24px}.welcome p,.settings p{margin:12px 0}.goal textarea{font:inherit;padding:8px;border-radius:10px;border:1px solid var(--line);background:var(--bg);color:var(--ink)}#scene3d{position:fixed;top:0;right:0;bottom:0;left:0;z-index:0}#scene3d canvas{position:absolute;top:0;right:0;bottom:0;left:0;display:block}#scene3d .xfade{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;opacity:0;pointer-events:none}#app{position:relative;z-index:1}#app:has(>.d3){padding:0;max-width:none}.d3{height:100dvh;display:flex;flex-direction:column;max-width:480px;margin:0 auto;padding:max(10px,env(safe-area-inset-top)) 12px max(10px,env(safe-area-inset-bottom))}.panel,.boardscreen.d3 .topband,.boardscreen.d3 .bottomband{background:color-mix(in srgb,var(--surface) 90%,transparent);border-radius:18px;padding:10px 12px;box-shadow:0 6px 22px #2a1c1022;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.boardscreen.d3 .topband .caption{margin:4px 0 0}.boardscreen.d3 .rules{margin:0}.boardscreen.d3 .board{flex:1;min-height:0;position:relative;margin:6px 0;display:block}.boardscreen.d3 .board svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.boardscreen.d3 .tape{min-height:52px;max-height:96px;border-top:0}.boardscreen.d3 .tape li{padding:3px 2px}.board.d3 .tile polygon{fill:transparent;stroke:none}.board.d3 .tile.sel polygon{stroke:var(--accent);stroke-width:3;fill:#fff8ea22}.board.d3 .tile.reach polygon{stroke:#fff8eacc;stroke-width:2;stroke-dasharray:5 4}.board.d3 .tile.pulse polygon{fill:#fff8ea55;stroke:#fff8ea;stroke-width:4}.board.d3 .tile.faded polygon{fill:transparent;stroke:none}.board.d3 .trail{stroke:#fff8ea;stroke-opacity:.85;stroke-width:10}@keyframes fok{0%{fill:#2f8a3e88}to{fill:transparent}}@keyframes fbad{0%{fill:#c4372f88}to{fill:transparent}}@keyframes frep{0%{fill:#6b564088}to{fill:transparent}}.board.d3 .tile.flash-ok polygon{animation:fok .28s}.board.d3 .tile.flash-bad polygon{animation:fbad .28s}.board.d3 .tile.flash-repeat polygon{animation:frep .28s}.chips{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;--chip: 46px}.chip.lbl{position:absolute;left:0;top:0;will-change:transform;width:var(--chip);height:calc(var(--chip) * .8);margin:calc(var(--chip) * -.4) 0 0 calc(var(--chip) * -.5);display:flex;align-items:center;justify-content:center;gap:1px;background:var(--chip-bg);color:var(--chip-ink);border-radius:12px;box-shadow:0 0 0 2px var(--chip-edge),0 3px 8px #3a220f55;font-weight:800;font-variant-numeric:tabular-nums;line-height:1;transition:box-shadow .12s,opacity .2s}.chip.lbl .sign{font-size:calc(var(--chip) * .4);font-weight:700;margin-top:-1px;transition:opacity .2s}.chip.lbl .num{font-size:calc(var(--chip) * .54);letter-spacing:-.02em}.chip.lbl.dropped .sign{opacity:.15}.chip.lbl.faded{opacity:1;background:#e7e1d6;color:#7a7266;box-shadow:none}.chip.lbl.sel{box-shadow:0 0 0 3.5px var(--accent),0 4px 12px #3a220f55}.chip.lbl.found{box-shadow:0 0 0 2px var(--chip-edge),0 0 0 4.5px var(--found),0 0 0 6.5px #ffffffe6,0 3px 10px #3a220f55}.chip.lbl .badge{position:absolute;top:-9px;right:-9px;width:18px;height:18px;border-radius:50%;display:none;place-items:center;background:var(--found);color:#fff;box-shadow:0 0 0 2px #fff}.chip.lbl.found .badge{display:grid}.chip.lbl .badge .icon{stroke-width:3.5}.chip.lbl.shake{animation:shake .28s}.islandscreen.d3 .panel h2{font-size:22px}.islandscreen.d3 .panel p{margin:0;font-size:13px}.islandframe{flex:1;min-height:0;position:relative;touch-action:none}.toast{position:absolute;left:50%;top:40%;transform:translate(-50%,8px) scale(.94);opacity:0;pointer-events:none;background:var(--surface);color:var(--ink);padding:12px 20px;border-radius:999px;font-weight:800;font-size:18px;box-shadow:0 10px 30px #0003;white-space:nowrap;transition:opacity .12s,transform .2s cubic-bezier(.3,1.6,.6,1)}.toast.on{opacity:1;transform:translate(-50%) scale(1)}.picks{margin:6px 0 0}.offers{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:8px;transition:opacity .25s,transform .25s}.offers.gone{opacity:0;transform:translateY(30px)}.offer{display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 4px 10px;min-height:0;border-radius:16px;animation:cardin .32s cubic-bezier(.3,1.5,.6,1) both}.offer:nth-child(2){animation-delay:.06s}.offer:nth-child(3){animation-delay:.12s}.offer img{width:100%;aspect-ratio:1;object-fit:contain}.offer b{font-size:14px}.offer.picked{box-shadow:0 0 0 3px var(--accent),0 10px 24px #0003;transform:scale(1.04)}@keyframes cardin{0%{opacity:0;transform:translateY(40px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.offer{animation:none}.toast{transition:opacity .3s}}.soundbtn{min-width:44px;padding:0 10px}.actions .choice{flex:1;min-height:52px;font-weight:600}.plink{display:inline-block;margin-top:14px;color:var(--ink);text-decoration:underline;min-height:44px;line-height:44px}.footer{margin-top:22px;text-align:center;font-size:13px}.footer a{color:var(--muted);text-decoration:underline}button.hero{display:block;width:100%;height:260px;padding:0;margin:10px 0 12px;border-radius:20px;overflow:hidden;border:0;background:var(--sea);box-shadow:0 10px 26px #2a1c1026}button.hero img,button.hero svg{display:block;width:100%;height:100%;object-fit:cover}.islandhead{gap:10px}.islandhead h2{font-size:20px;line-height:1.1}.islandhead p{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.iconbtn{min-width:44px;padding:0;font-size:22px;line-height:1}.coaststrip{margin-top:6px;display:flex;align-items:center;gap:10px;padding:8px 12px}.coaststrip b{font-size:13px;white-space:nowrap}.coaststrip .dots{display:grid;grid-template-columns:repeat(14,1fr);gap:3px;flex:1}.coaststrip i{font-style:normal;font-size:9px;font-weight:800;height:18px;border-radius:6px;display:grid;place-items:center;font-variant-numeric:tabular-nums}.coaststrip i.built{background:var(--good);color:#fff}.coaststrip i.missed{background:transparent;color:var(--bad);box-shadow:inset 0 0 0 2px var(--bad)}.coaststrip i.today{background:transparent;color:var(--accent);box-shadow:inset 0 0 0 2px var(--accent)}.coaststrip i.later{background:#2a1c1012;color:var(--muted)}.icon{display:inline-block;vertical-align:-3px;flex:none}.icon.off{color:var(--line)}.icon.on{color:var(--gold)}.stars{display:flex;gap:6px}.staricons{display:inline-flex;gap:2px;vertical-align:-2px;margin-right:6px}.cells button .st{display:flex;justify-content:center;gap:1px}.tape .ok .icon,.tape .no .icon{vertical-align:-3px;stroke-width:3}.toast .tick{color:var(--good);margin-right:6px;stroke-width:3;vertical-align:-4px}.soundbtn.iconbtn,.iconbtn{display:inline-grid;place-items:center}.tape li{overflow-wrap:anywhere}.tape .free,.tape .chip{display:inline-block;white-space:normal;max-width:100%}
