:root{--ink: #17161c;--paper: #f6f3ec;--card: #ffffff;--muted: #4e4a57;--muted-2: #5e5a66;--blue: #2e47e0;--blue-hover: #1c2fa8;--red: #ff5a4e;--yellow: #ffc93c;--green: #2bb673;--green-text: #1e7f50;--outline: 2px solid var(--ink);--shadow-key: 0 4px 0 var(--ink);--shadow-key-up: 0 6px 0 var(--ink);--shadow-key-down: 0 0 0 var(--ink);--shadow-card: 8px 8px 0 var(--ink);--r-key: 12px;--r-tile: 14px;--r-card: 24px;--press: 80ms ease-out;--font-display: Unbounded, "Arial Black", system-ui, sans-serif;--font-body: Outfit, system-ui, -apple-system, "Segoe UI", sans-serif;--bg: var(--paper);--surface: var(--card);--border: var(--ink);--line: #dad4c6;--solved: var(--green);--accent-ink: #ffffff;color-scheme:light}*{box-sizing:border-box}html,body{margin:0}html{touch-action:manipulation}a,button{touch-action:manipulation;-webkit-tap-highlight-color:transparent}body{background:var(--paper);color:var(--ink);font:16px/1.5 var(--font-body);padding:env(safe-area-inset-top,0) 16px env(safe-area-inset-bottom,0)}a{color:var(--blue);font-weight:600;text-underline-offset:3px}a:hover{color:var(--blue-hover)}h1,h2{line-height:1.2;margin:0}:focus-visible{outline:3px solid var(--blue);outline-offset:3px}[hidden]{display:none!important}.page{max-width:880px;margin:0 auto;padding-block:20px 64px}.page-head{margin-bottom:32px}.back{display:inline-flex;align-items:center;min-height:44px;text-decoration:none;font-weight:600}.eyebrow{display:flex;align-items:center;gap:6px;margin:10px 0 0;font:700 14px/1 var(--font-body);letter-spacing:.14em;text-transform:uppercase}.eyebrow-dot{width:12px;height:12px;border-radius:50%;background:var(--c)}.eyebrow-dot:last-of-type{margin-right:6px}.page-head h1{margin-top:14px;font:900 clamp(40px,7vw,74px) / .98 var(--font-display);letter-spacing:-.02em}.lede{color:var(--muted);font-size:1.1rem;max-width:58ch;margin:16px 0 0}.howto-row{display:flex;flex-wrap:wrap;align-items:center;gap:12px 20px;margin:22px 0 0}.account-line{min-height:1.5em}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:46px;padding:0 18px;border:var(--outline);border-radius:var(--r-key);background:var(--card);color:var(--ink);box-shadow:var(--shadow-key);font:600 1rem/1 var(--font-body);text-decoration:none;cursor:pointer;transition:transform var(--press),box-shadow var(--press)}.btn:hover:not(:disabled){color:var(--ink);transform:translateY(-2px);box-shadow:var(--shadow-key-up)}.btn:active:not(:disabled){transform:translateY(4px);box-shadow:var(--shadow-key-down)}.btn:disabled{opacity:.45;cursor:default}.btn.primary,.btn.primary:hover{background:var(--blue);color:#fff}.btn[aria-pressed=true],.btn[aria-pressed=true]:hover{background:var(--ink);color:#fff}.btn.small{min-height:44px;padding:0 14px;font-size:.95rem}.tabs{display:flex;flex-wrap:wrap;gap:12px;margin:0 0 24px}.tab small{margin-left:2px;color:var(--muted-2);font-weight:500;font-size:.85rem}.tab[aria-pressed=true] small{color:inherit;opacity:.8}.continue{display:flex;align-items:center;gap:24px;background:var(--blue);color:#fff;border:var(--outline);border-radius:var(--r-card);box-shadow:var(--shadow-card);padding:22px 26px 22px 22px;margin-bottom:36px}.continue p{margin:0}.continue-text{flex:1;min-width:0}.continue-label{font:700 13px/1.3 var(--font-body);letter-spacing:.14em;text-transform:uppercase;color:#dce2ff}.continue-big{margin-top:8px!important;font:800 32px/1.1 var(--font-display);letter-spacing:-.01em}.continue-sub{margin-top:8px!important;font-weight:500;font-size:1.05rem}.continue :focus-visible{outline-color:#fff}.btn.cta,.btn.cta:hover{flex-shrink:0;min-height:58px;padding:0 26px;background:var(--yellow);color:var(--ink);font:800 20px/1 var(--font-display)}.btn.cta:hover:not(:disabled){animation:wiggle .36s ease-in-out infinite}.btn.cta:active:not(:disabled){animation:none}.cta-icon{font-size:.8em}@keyframes wiggle{0%,to{transform:translateY(-2px) rotate(-3deg)}50%{transform:translateY(-2px) rotate(3deg)}}.daily{display:flex;align-items:center;gap:18px;background:var(--yellow);color:var(--ink);border:var(--outline);border-radius:var(--r-card);box-shadow:var(--shadow-card);padding:16px 20px 16px 16px;margin-bottom:22px}.daily p{margin:0}.daily-cal{flex:none;width:64px;display:flex;flex-direction:column;overflow:hidden;background:var(--card);border:var(--outline);border-radius:12px;text-align:center}.daily-month{background:var(--red);color:#fff;font:700 12px/1 var(--font-body);letter-spacing:.12em;text-transform:uppercase;padding:5px 0 4px;border-bottom:var(--outline)}.daily-day{font:900 28px/1 var(--font-display);padding:7px 0 8px}.daily-text{flex:1;min-width:0}.daily-label{font:700 12px/1.3 var(--font-body);letter-spacing:.14em;text-transform:uppercase}.daily-big{margin-top:4px!important;font:800 22px/1.15 var(--font-display)}.daily-sub{margin-top:4px!important;font-weight:500;font-size:.95rem}.btn.daily-play{flex:none;background:var(--ink);color:#fff}.btn.daily-play:hover:not(:disabled){background:var(--ink);color:#fff}.daily-done{flex:none;font:800 16px/1 var(--font-display);padding:10px 14px;border:var(--outline);border-radius:999px;background:var(--card)}@media(max-width:719px){.daily{flex-wrap:wrap;gap:12px 14px;padding:14px}.daily-cal{width:56px}.daily-day{font-size:24px}.daily-text{flex:1 1 160px}.daily-big{font-size:18px}.btn.daily-play{flex:1 1 100%}}.win-card .streak{margin:-10px 0 18px;color:var(--ink);font-weight:700}.preview{flex:0 0 auto;width:190px;aspect-ratio:1;background:var(--card);border:var(--outline);border-radius:16px;overflow:hidden;animation:bob 2.4s ease-in-out infinite}.preview svg{display:block;width:100%;height:100%}@keyframes bob{50%{transform:translateY(-6px)}}@media(max-width:719px){.continue{flex-wrap:wrap;gap:16px 18px;padding:18px}.preview{width:112px}.continue-text{flex:1 1 150px}.continue-big{font-size:22px}.tabs{display:grid;grid-template-columns:1fr 1fr}.continue-sub{font-size:.95rem}.btn.cta{flex:1 1 100%}}.sets{display:flex;flex-direction:column;gap:18px}.set{background:var(--card);border:var(--outline);border-radius:var(--r-card)}.set.open{padding:24px;box-shadow:var(--shadow-card)}.set.open:focus{outline:none}.set-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:14px}.set-head h2,.set-title{font:800 1.15rem/1.25 var(--font-display)}.set-count{font:800 1.15rem/1.25 var(--font-display);color:var(--green-text);white-space:nowrap;font-variant-numeric:tabular-nums}.bar{display:block;height:14px;border:var(--outline);border-radius:999px;background:var(--paper);overflow:hidden}.bar-fill{display:block;height:100%;width:0;background:var(--green);box-shadow:2px 0 0 var(--ink);transition:width .7s cubic-bezier(.3,1.2,.5,1)}.set.closed{display:grid;grid-template-columns:15rem 1fr auto auto;align-items:center;gap:16px;width:100%;min-height:64px;padding:0 22px;color:var(--ink);font:inherit;text-align:left;cursor:pointer;box-shadow:var(--shadow-key);transition:transform var(--press),box-shadow var(--press)}.set.closed:hover{transform:translateY(-2px);box-shadow:var(--shadow-key-up)}.set.closed:active{transform:translateY(4px);box-shadow:var(--shadow-key-down)}.set.closed .set-title,.set.closed .set-count{font-size:1rem}.chev{width:18px;height:18px}.levels{display:grid;grid-template-columns:repeat(10,1fr);gap:12px;margin-top:22px}.level{position:relative;aspect-ratio:1;min-height:44px;padding:0;border:var(--outline);border-radius:var(--r-tile);background:var(--card);color:var(--ink);box-shadow:var(--shadow-key);font:700 22px/1 var(--font-body);font-variant-numeric:tabular-nums;cursor:pointer;transition:transform var(--press),box-shadow var(--press);animation:drop .5s cubic-bezier(.3,1.5,.5,1) calc(var(--i, 0) * 30ms) backwards}.level:hover{transform:translateY(-3px) rotate(-2deg);box-shadow:0 7px 0 var(--ink)}.level:active{transform:translateY(4px);box-shadow:var(--shadow-key-down)}.level.solved{background:var(--green)}.level.next{background:var(--yellow);animation:drop .5s cubic-bezier(.3,1.5,.5,1) calc(var(--i, 0) * 30ms) backwards,bob-next 1.4s ease-in-out calc(var(--i, 0) * 30ms + .5s) infinite}.level.next:hover,.level.next:active{animation:none}.check{position:absolute;top:-7px;right:-7px;width:20px;height:20px;padding:3px;border-radius:50%;background:var(--ink);color:#fff}@keyframes drop{0%{opacity:0;transform:translateY(-24px)}}@keyframes bob-next{50%{transform:translateY(-5px)}}@media(max-width:719px){.set.open{padding:18px}.levels{grid-template-columns:repeat(5,1fr)}.set.closed{grid-template-columns:1fr auto auto;row-gap:10px;padding-block:14px}.set.closed .bar{grid-row:2;grid-column:1 / -1}}.play{max-width:560px;margin:0 auto;padding-block:12px 24px;min-height:calc(100dvh - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;gap:12px}.play-head{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:8px}.play-head .back{white-space:nowrap}.play-head h1{font:800 1.1rem/1.2 var(--font-display);text-align:center}.timer{justify-self:end;font-weight:600;font-variant-numeric:tabular-nums;color:var(--muted)}.play-foot{display:flex;flex-direction:column;align-items:center;gap:12px;margin-bottom:auto}.status{color:var(--muted);font-size:.95rem;font-variant-numeric:tabular-nums}.actions{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}.win{position:absolute;inset:0;display:grid;place-items:center;overflow:auto;background:color-mix(in srgb,var(--paper) 55%,transparent);border-radius:6px;animation:fade .25s ease-out}.win-card{background:var(--card);border:var(--outline);border-radius:var(--r-card);box-shadow:var(--shadow-card);padding:24px 28px;text-align:center;max-width:min(340px,calc(100% - 16px))}.win-card h2{font:800 1.5rem/1.2 var(--font-display)}.win-card p{color:var(--muted);margin:8px 0 18px}.book{max-width:340px;margin-inline:auto;display:flex;align-items:center;gap:12px;margin-top:18px;padding-top:16px;border-top:2px dashed var(--line);text-align:left}.book .book-text{margin:0;color:var(--ink);font-size:.92rem;line-height:1.4}.book-cover{width:52px;height:auto;border:2px solid var(--ink);border-radius:4px;flex:none}.book-fan{display:flex;flex:none}.book-fan .book-cover{width:40px}.book-fan .book-cover+.book-cover{margin-left:-18px}.book-fan .book-cover:nth-child(2){position:relative;z-index:1;transform:translateY(-3px)}.book-fan .book-cover:nth-child(1){transform:rotate(-8deg)}.book-fan .book-cover:nth-child(3){transform:rotate(8deg)}.book-link{font-weight:700;color:var(--blue)}.book-link:after{content:" →"}@keyframes fade{0%{opacity:0}}.help{justify-self:end;display:flex;align-items:center;gap:10px}.help-btn{width:44px;height:44px;padding:0;border:var(--outline);border-radius:50%;background:var(--card);color:var(--ink);box-shadow:var(--shadow-key);font:700 1.05rem/1 var(--font-body);cursor:pointer;transition:transform var(--press),box-shadow var(--press)}.help-btn:hover{transform:translateY(-2px);box-shadow:var(--shadow-key-up)}.help-btn:active{transform:translateY(4px);box-shadow:var(--shadow-key-down)}.ht-overlay{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:16px;background:#17161c8c;animation:ht-fade .2s ease-out}.ht-card{position:relative;width:min(100% - 8px,440px);max-height:calc(100dvh - 40px);overflow-y:auto;background:var(--card);border:var(--outline);border-radius:var(--r-card);box-shadow:var(--shadow-card);padding:66px 22px 22px;text-align:center}.ht-close{position:absolute;top:12px;right:12px;width:44px;height:44px;padding:0 0 2px;border:var(--outline);border-radius:50%;background:var(--card);color:var(--ink);box-shadow:var(--shadow-key);font:600 1.5rem/1 var(--font-body);cursor:pointer;transition:transform var(--press),box-shadow var(--press)}.ht-close:hover{transform:translateY(-2px);box-shadow:var(--shadow-key-up)}.ht-close:active{transform:translateY(4px);box-shadow:var(--shadow-key-down)}.ht-art{aspect-ratio:4 / 3;display:grid;place-items:center;margin:0 0 14px;background:var(--paper);border:var(--outline);border-radius:16px;overflow:hidden}.ht-art svg{width:100%;height:100%;display:block}.ht-card h2{font:800 1.2rem/1.25 var(--font-display)}.ht-text{color:var(--muted);margin:8px 0 16px;min-height:4.5em}.ht-dots{display:flex;justify-content:center;gap:2px;margin-bottom:16px}.ht-dot{width:26px;height:26px;border:0;padding:0;background:transparent;cursor:pointer;display:grid;place-items:center}.ht-dot:before{content:"";width:10px;height:10px;border-radius:50%;background:var(--card);border:2px solid var(--ink)}.ht-dot[aria-current=step]:before{width:22px;border-radius:6px;background:var(--yellow)}.ht-nav{display:flex;gap:12px}.ht-nav .btn{flex:1}@keyframes ht-fade{0%{opacity:0}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}:root{--accent: #be185d;--accent-soft: #fce7f3;--danger: #d13b3b}.board-wrap{position:relative;width:min(100%,calc(100dvh - 200px));min-width:260px;margin:auto auto 0}.board-wrap{position:relative;width:min(100%,480px,calc(100dvh - 330px));min-width:260px;margin:auto auto 0}.nb-board{container-type:inline-size;display:grid;aspect-ratio:1;user-select:none;-webkit-user-select:none}.nb-board .sign{display:grid;place-items:center;color:var(--muted);font-weight:700;font-size:calc(66cqw / (var(--n) * 1.42));line-height:1}.nb-board .sign.v{transform:rotate(90deg)}.nb-board .sign.bad{color:var(--danger, #d13b3b)}.nb-board .cell{display:grid;place-items:center;padding:0;min-width:0;min-height:0;border:2px solid var(--border);border-radius:8px;background:var(--surface);color:var(--accent);font:inherit;font-weight:500;font-size:calc(62cqw / (var(--n) * 1.42));cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.nb-board .cell *{pointer-events:none}.nb-board .cell.given{color:var(--ink);font-weight:700}.nb-board .cell.peer{background:color-mix(in srgb,var(--accent-soft) 55%,var(--surface))}.nb-board .cell.same{background:var(--accent-soft)}.nb-board .cell.selected{background:var(--accent-soft);outline:3px solid var(--accent);outline-offset:-3px;position:relative;z-index:1}.nb-board .cell.bad{color:var(--danger, #d13b3b)}.nb-board .cell:focus-visible{outline:3px solid var(--accent);outline-offset:-3px}.nb-board .notes{display:grid;grid-template-columns:repeat(3,1fr);width:88%;height:88%;font-size:calc(21cqw / (var(--n) * 1.42));color:var(--muted);font-weight:500;line-height:1}.nb-board .notes span{display:grid;place-items:center}.keypad{display:flex;flex-direction:column;align-items:center;gap:8px;width:100%;max-width:480px;margin:0 auto}.keyrow{display:flex;justify-content:center;gap:6px;width:100%}.keyrow:first-child .key{flex:1 1 0;max-width:56px;min-width:0}.key{min-width:48px;min-height:48px;border-radius:10px;border:1px solid var(--line);background:var(--surface);color:var(--ink);font:inherit;font-size:1.25rem;font-weight:600;cursor:pointer}.key.wide{font-size:.95rem;padding:0 14px}.key[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:#fff}.keypad.notes-on .key:not(.wide){color:var(--muted);font-size:1rem}.key:disabled{opacity:.45;cursor:default}.ht-art .grid{stroke:var(--line);stroke-width:.4}.ht-art .frame{fill:none;stroke:var(--ink);stroke-width:.8}.ht-art .cell{fill:var(--surface)}.ht-art .num{fill:var(--ink);font-weight:600;text-anchor:middle;font-family:Outfit,system-ui,sans-serif}.ht-art .num.mut{fill:var(--muted);font-weight:500}.ht-art .num.acc{fill:var(--accent)}.ht-art .num.red{fill:var(--danger, #d13b3b)}.ht-art .num.light{fill:#fff}.ht-art .ink{fill:var(--ink)}.ht-art .acc{fill:var(--accent)}.ht-art .acc-line{fill:none;stroke:var(--accent);stroke-linecap:round;stroke-linejoin:round}.ht-art .red-line{fill:none;stroke:var(--danger, #d13b3b);stroke-linecap:round;stroke-linejoin:round}.ht-art .ink-line{fill:none;stroke:var(--ink);stroke-linecap:round;stroke-linejoin:round}.ht-art .mut-line{fill:none;stroke:var(--muted);stroke-linecap:round}.ht-art .red{fill:var(--danger, #d13b3b)}.ht-art .mutd{fill:var(--muted)}.ht-art .isl{fill:var(--surface);stroke:var(--ink);stroke-width:.7}.ht-art .isl.done{fill:color-mix(in srgb,var(--accent) 16%,var(--surface));stroke:var(--accent)}.ht-art .good-bg{fill:var(--solved)}.ht-art .bad-bg{fill:var(--danger, #d13b3b)}.ht-art .mark{fill:none;stroke:#fff;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}.ht-art .soft{fill:color-mix(in srgb,var(--accent) 16%,var(--surface))}.ht-art .tap{fill:none;stroke:var(--ink);stroke-width:.8;opacity:0;animation:ht-tap .7s ease-out var(--d, 0s)}.ht-art .draw{stroke-dasharray:1;stroke-dashoffset:1;animation:ht-draw .9s ease-in-out var(--d, 0s) forwards}.ht-art .pop{opacity:0;transform-box:fill-box;transform-origin:center;animation:ht-pop .35s ease-out var(--d, 0s) forwards}.ht-art .appear{opacity:0;animation:fade-in .4s ease-out var(--d, 0s) forwards}.ht-art .vanish{animation:fade-out .3s ease-in var(--d, 0s) forwards}@keyframes ht-draw{to{stroke-dashoffset:0}}@keyframes ht-pop{0%{opacity:0;transform:scale(.3)}70%{opacity:1;transform:scale(1.12)}to{opacity:1;transform:scale(1)}}@keyframes fade-in{to{opacity:1}}@keyframes fade-out{to{opacity:0}}@keyframes ht-tap{0%{opacity:.8;transform:scale(.4)}to{opacity:0;transform:scale(1.6)}}.ht-art .tap{transform-box:fill-box;transform-origin:center}@media(prefers-reduced-motion:reduce){.ht-art .draw{animation:none;stroke-dashoffset:0}.ht-art .pop,.ht-art .appear{animation:none;opacity:1}.ht-art .vanish{animation:none;opacity:0}.ht-art .tap{display:none}}
