:root{--bg:#f6f7f9;--surface:#fff;--ink:#1b2330;--muted:#667085;--line:#c3cad5;--line-strong:#1b2330;--accent:#2b6cff;--sel:#bcd3ff;--peer:#e8eef9;--same:#d3e2ff;--bad:#d92d20;--bad-bg:#fde7e5;--given:#1b2330;--entry:#2b6cff;--brand:#600087;--on-brand:#fff;--header-h:calc(56px + env(safe-area-inset-top,0px));--bottom-h:150px;--ad-h:50px;--hint:#ffe9a8;--hint-strong:#ffd34d;--hint-elim:#ffd0cb;--role-chain_a:#9ec5ff;--role-chain_b:#ffc48a;--role-pivot:#d8c4ff;--role-wing:#a8e6d4;--role-floor:#b8e6a8;--role-roof:#f4b8dc;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--bg:#11151c;--surface:#1a2029;--ink:#e8ecf3;--muted:#93a0b4;--line:#3a4455;--line-strong:#8d9bb0;--accent:#6c9bff;--sel:#2f4a82;--peer:#232c3a;--same:#2a3c63;--bad:#ff7a70;--bad-bg:#4a2321;--given:#e8ecf3;--entry:#7fa8ff;--hint:#4d4222;--hint-strong:#8a6d12;--hint-elim:#5a2a27;--role-chain_a:#2f5aa8;--role-chain_b:#8a5a1d;--role-pivot:#5b3f9a;--role-wing:#1f6a58;--role-floor:#3c6b2c;--role-roof:#7a2f5c}}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--ink);overscroll-behavior:none;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;margin:0;font:16px/1.3 system-ui,-apple-system,Segoe UI,sans-serif}button{font:inherit;color:inherit;touch-action:manipulation}.app{--board:min(calc(100vw - 16px), calc(100dvh - 84px - var(--bottom-h) - var(--header-h) - var(--ad-h)), 520px);min-height:calc(100% - var(--header-h) - var(--ad-h));flex-direction:column;align-items:center;gap:10px;padding:8px;display:flex}header{width:var(--board);flex-direction:column;gap:6px;display:flex}.meta{color:var(--muted);font-variant-numeric:tabular-nums;justify-content:space-between;display:flex}.board{width:var(--board);height:var(--board);border:2px solid var(--line-strong);background:var(--surface);touch-action:none;border-radius:6px;grid-template-rows:repeat(9,1fr);grid-template-columns:repeat(9,1fr);display:grid;overflow:hidden}.cell{border:0;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--surface);cursor:pointer;font-size:calc(var(--board) / 15);color:var(--entry);justify-content:center;align-items:center;padding:0;display:flex}.cell.given{color:var(--given);font-weight:650}.cell.br{border-right:2px solid var(--line-strong)}.cell.bb{border-bottom:2px solid var(--line-strong)}.cell.ec{border-right:0}.cell.er{border-bottom:0}.cell.peer{background:var(--peer)}.cell.same{background:var(--same)}.cell.selected{background:var(--sel)}.cell.hint-unit{background:var(--hint)}.cell.hint-elim{background:var(--hint-elim)}.cell.hint-cell{background:var(--hint-strong)}.cell.conflict{color:var(--bad);background:var(--bad-bg)}.cell:focus-visible{outline:3px solid var(--accent);outline-offset:-3px}.notes{width:100%;height:100%;font-size:calc(var(--board) / 38);color:var(--muted);grid-template-rows:repeat(3,1fr);grid-template-columns:repeat(3,1fr);padding:2px;font-weight:500;line-height:1;display:grid}.notes span{justify-content:center;align-items:center;display:flex}.controls{width:var(--board);height:var(--bottom-h);flex-direction:column;justify-content:flex-end;gap:8px;display:flex}.tools{grid-template-columns:repeat(6,1fr);gap:6px;display:grid}.tools button{border:1px solid var(--line);background:var(--surface);border-radius:10px;min-height:48px;padding:0 2px;font-size:12px;line-height:1.15}.tools button.icon{justify-content:center;align-items:center;padding:0;display:flex}.tools button:disabled{opacity:.4}.tools .toggle.on{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.pad{grid-template-columns:repeat(9,1fr);gap:4px;display:grid}.pad button{border:1px solid var(--line);background:var(--surface);border-radius:10px;justify-content:center;align-items:center;min-height:60px;display:flex;position:relative}.pad .num{color:var(--entry);font-size:26px}.pad .left{color:var(--muted);font-size:10px;position:absolute;top:3px;right:5px}.pad button:disabled{opacity:.25}.pad.notes-mode button{border-style:dashed;border-color:var(--accent)}.pad.notes-mode .num{font-size:20px}.win{left:50%;bottom:calc(64px + env(safe-area-inset-bottom,0px));text-align:center;background:var(--surface);width:min(100% - 32px,340px);color:var(--ink);border:1px solid var(--line);border-radius:14px;flex-direction:column;align-items:center;gap:12px;padding:14px 16px;font-weight:600;display:flex;position:fixed;transform:translate(-50%);box-shadow:0 8px 28px #0000004d}.win p{margin:0}.win-button{background:var(--brand);min-height:48px;color:var(--on-brand);cursor:pointer;border:0;border-radius:10px;padding:0 28px;font-size:16px;font-weight:600}.win-button:hover{filter:brightness(1.12)}.win-button:focus-visible{outline:3px solid var(--accent);outline-offset:2px}.hint-actions{justify-content:flex-end;gap:6px;display:flex}.hint-actions button{border:1px solid var(--line);background:var(--surface);border-radius:8px;min-height:36px;padding:0 14px}.hint-actions .primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.app.no-hints{--bottom-h:116px}.meta{flex-wrap:wrap;align-items:center;gap:4px 8px}.meta span{white-space:nowrap}.scrim{z-index:10;background:#00000073;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.dialog{background:var(--surface);border:1px solid var(--line);border-radius:14px;flex-direction:column;gap:12px;width:min(100%,380px);padding:16px;display:flex}.dialog h2{margin:0;font-size:18px}.settings-list{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.settings-list label{justify-content:space-between;align-items:center;gap:12px;min-height:48px;display:flex}.settings-list .text{flex-direction:column;gap:2px;display:flex}.settings-list .name{font-weight:600}.settings-list .desc{color:var(--muted);font-size:13px}.settings-list input{width:22px;height:22px;accent-color:var(--accent);flex:none}.settings-list input:disabled{opacity:.4}.dialog .close{background:var(--accent);color:#fff;border:0;border-radius:10px;min-height:44px;font-weight:600}.cell{position:relative}.cell.role-chain_a{background:var(--role-chain_a)}.cell.role-chain_b{background:var(--role-chain_b)}.cell.role-pivot{background:var(--role-pivot)}.cell.role-wing{background:var(--role-wing)}.cell.role-floor{background:var(--role-floor)}.cell.role-roof{background:var(--role-roof)}.badge{background:var(--ink);color:var(--surface);font-size:calc(var(--board) / 42);border-radius:4px;padding:0 3px;font-weight:700;line-height:1.25;position:absolute;top:1px;left:1px}.hint-panel .hint-text{flex:1;min-height:0;overflow-y:auto}.hint-panel .insight{color:var(--muted);margin-top:4px;font-size:12.5px}.site-header{z-index:5;height:var(--header-h);padding-top:env(safe-area-inset-top,0px);background:var(--brand);color:var(--on-brand);grid-template-columns:56px 1fr 56px;align-items:center;display:grid;position:relative;box-shadow:0 2px 4px #00000040}.site-title{text-align:center;letter-spacing:.02em;white-space:nowrap;text-overflow:ellipsis;color:inherit;grid-column:2;margin:0;font-size:18px;font-weight:600;overflow:hidden}.menu-button{width:48px;height:48px;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:50%;grid-area:1/1;justify-content:center;align-items:center;margin-left:4px;display:flex}.menu-button:hover,.menu-button[aria-expanded=true]{background:#ffffff26}.menu-button:focus-visible,.menu button:focus-visible{outline-offset:-3px;outline:3px solid #fff}.menu{background:var(--surface);min-width:190px;color:var(--ink);border:1px solid var(--line);border-radius:10px;flex-direction:column;padding:6px;display:flex;position:absolute;top:100%;left:8px;box-shadow:0 8px 24px #0000004d}.menu button{text-align:left;background:0 0;border:0;border-radius:8px;min-height:48px;padding:0 14px;font-size:16px}.menu button:hover{background:var(--peer)}.menu button[aria-current=page]{color:var(--brand);font-weight:700}@media (prefers-color-scheme:dark){.menu button[aria-current=page]{color:var(--accent)}}.page{flex-direction:column;align-items:flex-start;gap:12px;max-width:520px;margin:0 auto;padding:32px 16px;display:flex}.page h2{margin:0;font-size:24px}.page p{color:var(--muted);margin:0}.button-link{background:var(--accent);color:#fff;border-radius:10px;align-items:center;min-height:48px;margin-top:8px;padding:0 22px;font-weight:600;text-decoration:none;display:inline-flex}.dialog .muted{color:var(--muted);margin:0;font-size:14px}.level-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.level{border:1px solid var(--line);background:var(--surface);text-align:left;cursor:pointer;border-radius:10px;flex-direction:column;gap:2px;width:100%;min-height:60px;padding:8px 14px;display:flex}.level:hover{background:var(--peer)}.level:focus-visible{outline:3px solid var(--accent);outline-offset:1px}.level .name{font-size:16px;font-weight:600}.level .blurb{color:var(--muted);font-size:13px}.dialog .cancel{border:1px solid var(--line);background:0 0;border-radius:10px;min-height:44px}.confirm-message{color:var(--muted);margin:0}.confirm-actions{gap:8px;display:flex}.confirm-actions button{border:1px solid var(--line);background:var(--surface);border-radius:10px;flex:1;min-height:48px;font-weight:600}.confirm-actions .danger{background:var(--bad);border-color:var(--bad);color:#fff}@media (prefers-color-scheme:dark){.confirm-actions .danger{color:#3b0b07}}.ad-slot{width:100%;height:var(--ad-h);background:var(--surface);border-bottom:1px dashed var(--line);justify-content:center;align-items:center;display:flex}.level.daily{border-color:var(--accent)}.level.daily .name{color:var(--accent)}.level:disabled{opacity:.6;cursor:default}.dialog .error{background:var(--bad-bg);color:var(--bad);border-radius:8px;margin:0;padding:8px 10px;font-size:14px;font-weight:600}.app.no-ads{--ad-h:0px}.update-banner{left:12px;right:12px;bottom:calc(12px + env(safe-area-inset-bottom,0px));z-index:30;background:var(--brand);max-width:520px;color:var(--on-brand);border-radius:12px;align-items:center;gap:8px;margin:0 auto;padding:10px 12px;font-size:15px;display:flex;position:fixed;box-shadow:0 6px 24px #00000059}.update-banner span{flex:1}.update-banner button{min-height:44px;color:inherit;background:0 0;border:1px solid #ffffff80;border-radius:8px;padding:0 14px;font-weight:600}.update-banner button.primary{color:var(--brand);background:#fff;border-color:#fff}.update-banner button:focus-visible{outline-offset:2px;outline:3px solid #fff}.menu-version{border-top:1px solid var(--line);color:var(--muted);margin:4px 0 0;padding:8px 14px 6px;font-size:12px}.hint-panel{width:var(--board);height:var(--bottom-h);background:var(--surface);border:1px solid var(--line);border-radius:10px;flex-direction:column;justify-content:space-between;gap:6px;padding:8px 10px;font-size:13.5px;display:flex}.hint-panel p{margin:0}.scrim.top{z-index:20}.setting-row{text-align:left;width:100%;min-height:48px;color:inherit;cursor:pointer;background:0 0;border:0;justify-content:space-between;align-items:center;gap:12px;padding:0;display:flex}.setting-row .chevron{color:var(--muted);font-size:26px;line-height:1}.dialog.picker{max-height:calc(100dvh - 32px);overflow:hidden}.picker-preview{justify-content:center;display:flex}.dialog .caption{text-align:center;font-size:12.5px}.palette-options{flex-direction:column;flex:1;gap:8px;min-height:0;padding:2px;display:flex;overflow-y:auto}.option{border:1px solid var(--line);cursor:pointer;border-radius:10px;align-items:center;gap:10px;min-height:56px;padding:8px 10px;display:flex}.option.on{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset}.option input{width:20px;height:20px;accent-color:var(--accent);flex:none;margin:0}.option .text{flex-direction:column;gap:2px;min-width:0;display:flex}.option .name{font-weight:600}.option .desc{color:var(--muted);font-size:12.5px}.swatches{flex:none;gap:2px;display:flex}.swatches span{border:1px solid #80808080;border-radius:4px;width:14px;height:28px}.option:has(input:focus-visible){outline:3px solid var(--accent);outline-offset:2px}.board.sample{--board:216px;pointer-events:none;touch-action:auto;flex:none;grid-template-rows:repeat(6,1fr);grid-template-columns:repeat(6,1fr)}.board.sample .cell{cursor:default;font-size:20px}.board.sample .notes,.board.sample .badge{font-size:8px}.pad.number-first{outline:2px solid var(--accent);outline-offset:3px;border-radius:12px}.pad button.active{background:var(--accent);border-color:var(--accent)}.pad button.active .num{color:#fff}.pad button.active .left{color:#ffffffd9}.tools-wrap{position:relative}.coach{z-index:6;background:var(--brand);width:min(320px,100%);color:var(--on-brand);border-radius:12px;padding:12px 14px;font-size:14px;line-height:1.35;position:absolute;bottom:calc(100% + 12px);right:0;box-shadow:0 8px 24px #00000059}.coach:after{content:"";border:9px solid #0000;border-top-color:var(--brand);border-bottom:0;position:absolute;bottom:-8px;right:26px}.coach p{margin:0 0 10px}.coach-actions{justify-content:flex-end;gap:8px;display:flex}.coach-actions button{min-height:40px;color:inherit;background:0 0;border:1px solid #fff9;border-radius:8px;padding:0 16px;font-size:14px;font-weight:600}.coach-actions button.primary{color:var(--brand);background:#fff;border-color:#fff}.coach-actions button:focus-visible{outline-offset:2px;outline:3px solid #fff}
