:root{color-scheme:light;--bg: #f5f4f0;--paper: #ffffff;--ink: #16191d;--muted: #5f6672;--line: #22262b;--hair: #d9dcd6;--grid-hair: #c3c7c0;--def: #eceee8;--accent: #b4440e;--accent-ink: #ffffff;--accent-soft: #fbe3d3;--user: #1f5fb4;--mark: #ffd54a;--mark-soft: #fff1b8;--danger: #b42318;--danger-soft: #fde3e0;--ok: #1f7a3e;--ok-soft: #dcf3e3;--focus: #b4440e;--easy: #2e9a4a;--medium: #b98900;--hard: #d0571c;--expert: #8b4fcf;--shadow: 0 1px 2px rgba(20, 25, 30, .06), 0 8px 24px rgba(20, 25, 30, .06);--radius: 10px;--font: "Atkinson Hyperlegible Next", "Atkinson Hyperlegible", system-ui, -apple-system, "Segoe UI", sans-serif;--mono: "Atkinson Hyperlegible Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){color-scheme:dark;--bg: #16181b;--paper: #1f2327;--ink: #e8eaec;--muted: #9aa3ad;--line: #cfd4d9;--hair: #343a41;--grid-hair: #454c54;--def: #292e34;--accent: #ff9a5c;--accent-ink: #231208;--accent-soft: #4a2b18;--user: #86b7ff;--mark: #f2c94c;--mark-soft: #4a4020;--danger: #ff8a80;--danger-soft: #4a2320;--ok: #6fd48f;--ok-soft: #1f3d2a;--focus: #ff9a5c;--easy: #6fd48f;--medium: #f2c94c;--hard: #ff9a5c;--expert: #c49bff;--shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 8px 24px rgba(0, 0, 0, .35)}}:root[data-theme=dark]{color-scheme:dark;--bg: #16181b;--paper: #1f2327;--ink: #e8eaec;--muted: #9aa3ad;--line: #cfd4d9;--hair: #343a41;--grid-hair: #454c54;--def: #292e34;--accent: #ff9a5c;--accent-ink: #231208;--accent-soft: #4a2b18;--user: #86b7ff;--mark: #f2c94c;--mark-soft: #4a4020;--danger: #ff8a80;--danger-soft: #4a2320;--ok: #6fd48f;--ok-soft: #1f3d2a;--focus: #ff9a5c;--easy: #6fd48f;--medium: #f2c94c;--hard: #ff9a5c;--expert: #c49bff;--shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 8px 24px rgba(0, 0, 0, .35)}*{box-sizing:border-box}html{font-family:var(--font);color:var(--ink);background:var(--bg);-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);line-height:1.5;font-size:16px}h1,h2,h3{line-height:1.15;text-wrap:balance;margin:0}p{margin:0}a{color:var(--accent)}.muted{color:var(--muted)}.small{font-size:.85rem}.error{color:var(--danger)}.ok{color:var(--ok)}.warn{color:var(--danger);font-weight:600}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.skip{position:absolute;left:.5rem;top:-3rem;background:var(--accent);color:var(--accent-ink);padding:.5rem .8rem;border-radius:8px;z-index:10}.skip:focus{top:.5rem}:focus-visible{outline:3px solid var(--focus);outline-offset:2px}button,.button{font:inherit;cursor:pointer;border-radius:var(--radius);border:1px solid var(--hair);background:var(--paper);padding:.5rem .9rem;color:var(--ink);min-height:40px;transition:background .12s,border-color .12s;display:inline-flex;align-items:center;justify-content:center;gap:.4rem;text-decoration:none}button:hover,.button:hover{border-color:var(--muted)}button:disabled{opacity:.55;cursor:default}button.primary,.button.primary{background:var(--accent);color:var(--accent-ink);border-color:transparent;font-weight:700}button.primary:hover,.button.primary:hover{filter:brightness(1.06)}button.big{font-size:1.1rem;padding:.8rem 1.4rem;min-height:52px}button.subtle{background:transparent;border-color:transparent;color:var(--muted)}button.subtle:hover{color:var(--ink);border-color:var(--hair)}input{font:inherit;padding:.6rem .8rem;border-radius:var(--radius);border:1px solid var(--hair);background:var(--paper);color:var(--ink);min-width:0;min-height:44px}input::placeholder{color:var(--muted);opacity:1}input[aria-invalid=true]{border-color:var(--danger)}label,legend,.label{font-size:.9rem;color:var(--muted);font-weight:500}.field{display:flex;flex-direction:column;gap:.4rem}.row{display:flex;gap:.5rem}.row input{flex:1}.row.wrap{flex-wrap:wrap}.center{text-align:center;padding:3rem 1rem;display:flex;flex-direction:column;align-items:center;gap:1rem}.tag{font-size:.68rem;text-transform:uppercase;letter-spacing:.06em;padding:.05rem .45rem;border-radius:999px;background:var(--accent-soft);color:var(--ink);font-weight:700;margin-left:.4rem;vertical-align:.1em}footer{margin:2.5rem auto 1.5rem;text-align:center;padding:0 1rem}.seg{display:inline-flex;border:1px solid var(--hair);border-radius:999px;padding:2px;background:var(--paper);align-self:flex-start}.seg button{border:none;background:transparent;border-radius:999px;padding:.3rem .75rem;min-height:34px;display:inline-flex;align-items:center;gap:.35rem;font-size:.9rem;color:var(--muted)}.seg button.on{background:var(--accent-soft);color:var(--ink)}.seg-label{display:none}@media (min-width: 420px){.seg-label{display:inline}}.topbar{max-width:1120px;margin:0 auto;display:flex;align-items:center;gap:.5rem;padding:.6rem 1rem}.brand{display:inline-flex;align-items:center;gap:.5rem;font-weight:800;font-size:1.15rem;letter-spacing:-.01em;color:var(--ink);text-decoration:none;padding:.25rem .35rem;border-radius:8px}.logo{color:var(--accent);flex:none}.actions{display:flex;align-items:center;gap:.25rem;margin-left:auto}.icon-btn{display:inline-flex;align-items:center;gap:.4rem}.nav-link{color:var(--muted);text-decoration:none;padding:.5rem .7rem;border-radius:var(--radius);border:1px solid transparent;min-height:40px}.nav-link:hover{color:var(--ink);border-color:var(--hair)}.nav-link.on{color:var(--ink);background:var(--paper);border-color:var(--hair)}.btn-label{display:none}@media (min-width: 700px){.btn-label{display:inline}}.page{max-width:1120px;margin:0 auto;padding:0 1rem}.narrow-page{max-width:620px;display:flex;flex-direction:column;gap:1rem;padding-top:.5rem}.narrow-page h1{font-size:clamp(1.5rem,4vw,2rem);font-weight:800;letter-spacing:-.02em}.card{background:var(--paper);border:1px solid var(--hair);border-radius:16px;padding:1.25rem;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:.8rem;min-width:0}.card h2{font-size:.85rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);display:flex;align-items:center;gap:.4rem}.big-line{font-size:1.15rem;font-weight:600}.archive{margin:0 -1rem .75rem}.archive ol{list-style:none;margin:0;padding:.25rem 1rem .6rem;display:flex;gap:.4rem;overflow-x:auto;scroll-snap-type:x proximity;scrollbar-width:thin;-webkit-overflow-scrolling:touch}.archive li{scroll-snap-align:center;flex:none}.chip{position:relative;display:flex;flex-direction:column;align-items:center;gap:.05rem;min-width:4.6rem;padding:.45rem .55rem .35rem;border-radius:12px;background:var(--paper);border:1px solid var(--hair);color:var(--ink);text-decoration:none;overflow:hidden}.chip:before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:var(--c, var(--hair))}.chip.easy{--c: var(--easy)}.chip.medium{--c: var(--medium)}.chip.hard{--c: var(--hard)}.chip.expert{--c: var(--expert)}.chip:hover{border-color:var(--muted)}.chip[aria-current=date]{border:2px solid var(--accent);background:var(--accent-soft)}.chip-wd{font-size:.68rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:700;white-space:nowrap}.chip-day{font-weight:800;font-size:.92rem;white-space:nowrap}.chip-state{font-size:.72rem;font-variant-numeric:tabular-nums;color:var(--muted);min-height:1.1em}.chip.done .chip-state{color:var(--ok);font-weight:700}.chip.started .chip-state{color:var(--accent);font-weight:800}.day-head{padding:.25rem 0 .75rem}.day-head h1{font-size:clamp(1.5rem,4vw,2.1rem);font-weight:800;letter-spacing:-.02em;text-transform:capitalize}.day-head p{margin-top:.2rem}.diff{font-weight:700}.day-actions{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin:.35rem 0 0 -.6rem}.day-actions button{min-height:36px;padding:.3rem .6rem}.diff.easy{color:var(--easy)}.diff.medium{color:var(--medium)}.diff.hard{color:var(--hard)}.diff.expert{color:var(--expert)}.play{display:grid;grid-template-columns:minmax(0,480px) minmax(260px,1fr);gap:1.25rem 2rem;align-items:start}@media (max-width: 880px){.play{grid-template-columns:minmax(0,1fr)}}.play-main{display:flex;flex-direction:column;gap:1rem;min-width:0;max-width:480px;width:100%;margin:0 auto}.side{display:flex;flex-direction:column;gap:1rem;min-width:0}.sudoku{--size: min( calc(100vw - 2rem) , 480px);--cell: calc((var(--size) - 4px) / 9);width:var(--size);display:grid;grid-template-rows:repeat(9,1fr);border:2px solid var(--line);border-radius:6px;background:var(--paper);overflow:hidden;user-select:none;-webkit-user-select:none;touch-action:manipulation}.s-row{display:grid;grid-template-columns:repeat(9,1fr)}.s-cell{position:relative;aspect-ratio:1;border-right:1px solid var(--grid-hair);border-bottom:1px solid var(--grid-hair);display:grid;place-items:center;background:var(--paper);transition:background .08s;min-width:0}.s-cell:last-child{border-right:none}.s-row:last-child .s-cell{border-bottom:none}.s-cell.box-r{border-right:2px solid var(--line)}.s-cell.box-b{border-bottom:2px solid var(--line)}.interactive .s-cell{cursor:pointer}.s-digit{font-size:calc(var(--cell) * .58);line-height:1;font-weight:500;color:var(--user);font-variant-numeric:tabular-nums}.s-cell.given .s-digit{color:var(--ink);font-weight:800}.s-cell.related{background:var(--def)}.s-cell.same{background:var(--mark-soft)}.s-cell.selected{background:var(--mark)}.s-cell.selected .s-digit,.s-cell.same .s-digit{color:#16191d}:root[data-theme=dark] .s-cell.same .s-digit{color:var(--ink)}@media (prefers-color-scheme: dark){:root:not([data-theme=light]) .s-cell.same .s-digit{color:var(--ink)}}.s-cell.conflict{background:var(--danger-soft)}.s-cell.conflict .s-digit{color:var(--danger)}.s-cell.conflict.given .s-digit{text-decoration:underline wavy var(--danger);text-underline-offset:3px}.s-cell.conflict.selected{background:var(--mark)}.s-cell.conflict.selected .s-digit{color:#9b1c12}.s-notes{position:absolute;top:1px;right:1px;bottom:1px;left:1px;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);place-items:center;font-size:calc(var(--cell) * .25);line-height:1;color:var(--muted);font-weight:700;font-variant-numeric:tabular-nums}.s-notes .hl{color:var(--accent)}.s-cell.selected .s-notes{color:#3d434b}.sudoku.solved .s-cell{background:var(--ok-soft)}.sudoku.solved .s-digit{color:var(--ink)}.sudoku.hidden .s-cell{background:repeating-linear-gradient(135deg,var(--paper) 0 6px,var(--def) 6px 7px)}.game{display:flex;flex-direction:column;gap:.75rem}.game-bar{display:flex;align-items:baseline;justify-content:space-between;gap:1rem}.clock{font-family:var(--mono);font-size:1.6rem;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:.02em}.penalty{font-size:.9rem;color:var(--danger);font-weight:600;font-variant-numeric:tabular-nums}.game-status{display:flex;flex-direction:column;gap:.35rem;min-height:1.5rem}.game-status .error button{margin-left:.4rem;min-height:32px;padding:.2rem .7rem}.tools{display:grid;grid-template-columns:repeat(4,1fr);gap:.4rem}.tool{flex-direction:column;gap:.15rem;padding:.4rem .2rem;min-height:56px;font-size:.78rem;color:var(--muted)}.tool:hover:not(:disabled){color:var(--ink)}.tool.on{background:var(--accent-soft);border-color:var(--accent);color:var(--ink);font-weight:700}.keypad{display:grid;grid-template-columns:repeat(9,1fr);gap:.3rem}.key{position:relative;padding:0;min-height:58px;flex-direction:column;font-family:var(--mono)}.key-digit{font-size:1.55rem;font-weight:700;color:var(--user);line-height:1}.keypad.notes .key-digit{font-size:1.05rem;color:var(--accent)}.key-left{position:absolute;top:3px;right:5px;font-size:.62rem;color:var(--muted);font-family:var(--font)}.key.spent{opacity:.35}.key:active:not(:disabled){background:var(--mark-soft)}@media (min-width: 881px){.keypad{grid-template-columns:repeat(9,1fr)}}.intro{position:relative}.intro .sudoku{opacity:.7}.intro-card{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:min(88%,360px);text-align:center;align-items:center}.intro-card h2{font-size:1.4rem;text-transform:none;letter-spacing:-.01em;color:var(--ink)}.result{text-align:center;align-items:center}.result.fresh{border-color:var(--ok)}.result h2{color:var(--ok);font-size:1.3rem;text-transform:none;letter-spacing:-.01em}.result-label{font-size:.85rem;text-transform:uppercase;letter-spacing:.08em}.result-time{font-family:var(--mono);font-size:clamp(2.4rem,10vw,3.4rem);font-weight:700;line-height:1;font-variant-numeric:tabular-nums}.result-rank{font-weight:700;font-size:1.1rem}.result-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:.5rem;margin-top:.25rem}.ranking{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.3rem}.ranking li{display:flex;align-items:center;gap:.6rem;padding:.45rem .6rem;border-radius:10px;background:var(--bg)}.ranking li.me{background:var(--accent-soft)}.rank{width:1.7rem;height:1.7rem;flex:none;display:grid;place-items:center;border-radius:50%;font-weight:800;font-size:.85rem;background:var(--def);font-variant-numeric:tabular-nums}.rank.r1{background:var(--mark);color:#16191d}.who{font-weight:600;flex:1;min-width:0;overflow-wrap:anywhere}.time{font-family:var(--mono);font-weight:700;font-variant-numeric:tabular-nums}.waiting{line-height:1.45}.season table{border-collapse:collapse;width:100%;font-size:.9rem;font-variant-numeric:tabular-nums}.season th,.season td{padding:.3rem .2rem;text-align:center}.season thead th{font-size:.72rem;color:var(--muted);font-weight:700}.season thead th.today{color:var(--accent)}.season tbody th{text-align:left;font-weight:600;max-width:9rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.season tbody tr+tr{border-top:1px solid var(--hair)}.season tr.me th{color:var(--accent)}.season td.none{color:var(--hair)}.season td.p3{font-weight:800;color:var(--ink)}.season td.p2{font-weight:700}.season td.p1{color:var(--muted)}.season .total{text-align:right;font-weight:800;white-space:nowrap}.duel{border-color:var(--accent)}.duel h2{color:var(--accent)}.duel-times{font-variant-numeric:tabular-nums}.duel-verdict{font-weight:800;font-size:1.15rem}.duel button{align-self:flex-start}.code-row{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.friend-code{font-family:var(--mono);font-size:1.8rem;letter-spacing:.18em;font-weight:700}.friend-code.small-code{font-size:1rem;letter-spacing:.12em}.code-input{text-transform:uppercase;letter-spacing:.18em;font-weight:700;font-family:var(--mono)}code.link,code.secret{font-family:var(--mono);font-size:.9rem;background:var(--bg);border:1px solid var(--hair);border-radius:8px;padding:.45rem .6rem;overflow-wrap:anywhere;display:block}.friend-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}.friend-list li{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.55rem 0}.friend-list li+li{border-top:1px solid var(--hair)}.friend-list li>div{display:flex;flex-direction:column;min-width:0}.switch{display:flex;align-items:flex-start;gap:.7rem;color:var(--ink);cursor:pointer}.switch input{min-height:0;width:1.25rem;height:1.25rem;margin-top:.15rem;accent-color:var(--accent);flex:none}.switch span{display:flex;flex-direction:column}.transfer{display:flex;flex-direction:column;align-items:flex-start;gap:.6rem}.qr{border-radius:8px;border:1px solid var(--hair);max-width:100%;height:auto}.restore{padding-top:.8rem;border-top:1px solid var(--hair)}dialog.help{border:1px solid var(--hair);border-radius:16px;background:var(--paper);color:var(--ink);padding:1.5rem;max-width:min(92vw,520px);box-shadow:var(--shadow)}dialog.help::backdrop{background:#00000073}dialog.help h2{margin-bottom:.8rem}dialog.help p{margin-bottom:.7rem}dialog.help dl{display:grid;grid-template-columns:auto 1fr;gap:.5rem .9rem;margin:.4rem 0 1.2rem}dialog.help dl div{display:contents}dialog.help dt{justify-self:start}dialog.help dd{margin:0}kbd{font-family:inherit;font-size:.85rem;background:var(--bg);border:1px solid var(--hair);border-bottom-width:2px;border-radius:6px;padding:.1rem .45rem;white-space:nowrap}@media (max-width: 600px){.topbar{padding:.4rem .75rem}.page{padding:0 .75rem}.archive{margin:0 -.75rem .5rem}.archive ol{padding:.25rem .75rem .5rem}.sudoku{--size: min( calc(100vw - 1.5rem) , 480px)}.icon-btn{padding:.5rem;min-width:40px;justify-content:center}.card{padding:1rem}.key{min-height:54px}.keypad{gap:.2rem}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{transition:none!important;animation:none!important;scroll-behavior:auto!important}}@media (forced-colors: active){.s-cell.selected,.s-cell.same,.chip[aria-current=date],.tool.on,.seg button.on{outline:2px solid CanvasText;outline-offset:-2px}.s-cell.conflict .s-digit{text-decoration:underline}}
