*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#0f0f0f;--surface:#1a1a1a;--surface-2:#242424;--border:#2e2e2e;--border-strong:#444;--text:#f0ede8;--text-muted:#888;--accent:#c8a96e;--accent-dim:#c8a96e1f;--accent-dim2:#c8a96e38;--peer:#ffffff0a;--same:#c8a96e2e;--given-color:#f0ede8;--player-color:#c8a96e;--cell-size:min(52px, calc((min(100vw, 500px) - 3rem) / 9));--cell-size-desktop:62px;--board-size:calc(var(--cell-size) * 9 + 2px);font-family:Georgia,serif}@media (width>=600px){:root{--cell-size:var(--cell-size-desktop)}}body{background:var(--bg);color:var(--text);justify-content:center;min-height:100dvh;padding:2rem 1rem 4rem;display:flex}.app{flex-direction:column;align-items:center;gap:1.5rem;width:100%;max-width:580px;display:flex}.header{justify-content:center;align-items:center;width:100%;min-height:48px;display:flex;position:relative}.header-left{align-items:center;gap:.75rem;display:flex}.header-right{align-items:center;gap:.5rem;display:flex;position:absolute;top:50%;right:0;transform:translateY(-50%)}.header h1{letter-spacing:.35em;color:var(--text);font-family:Georgia,serif;font-size:2rem;font-weight:400}.diff-badge{letter-spacing:.1em;text-transform:uppercase;color:var(--accent);border:1px solid var(--accent);opacity:.8;border-radius:3px;padding:2px 8px;font-family:system-ui,sans-serif;font-size:11px}.start-screen{flex-direction:column;align-items:center;gap:1.5rem;padding-top:2rem;display:flex}.start-label{letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);font-family:system-ui,sans-serif;font-size:13px}.diff-buttons{gap:.75rem;display:flex}.diff-btn{letter-spacing:.08em;color:var(--text);background:var(--surface);border:1px solid var(--border-strong);cursor:pointer;border-radius:4px;padding:10px 22px;font-family:system-ui,sans-serif;font-size:13px;transition:background .15s,border-color .15s,color .15s}.diff-btn:hover{background:var(--surface-2);border-color:var(--accent);color:var(--accent)}.key-hint{color:var(--text-muted);text-align:center;max-width:320px;font-family:system-ui,sans-serif;font-size:11px;line-height:1.6}.game-layout{flex-direction:column;align-items:center;gap:1.25rem;width:100%;display:flex}.status-bar{gap:2.5rem;font-family:system-ui,sans-serif;display:flex}.stat{flex-direction:column;align-items:center;gap:2px;display:flex}.stat-label{letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);font-size:10px}.stat-value{letter-spacing:.05em;font-family:Georgia,serif;font-size:16px;font-weight:500}.board-wrapper{position:relative}.board-wrapper.paused .board{filter:blur(8px);pointer-events:none;-webkit-user-select:none;user-select:none}.pause-overlay{z-index:10;cursor:pointer;letter-spacing:.05em;color:var(--text-muted);justify-content:center;align-items:center;font-family:system-ui,sans-serif;font-size:14px;display:flex;position:absolute;inset:0}.board{grid-template-columns:repeat(9, var(--cell-size));grid-template-rows:repeat(9, var(--cell-size));border:3px solid var(--border-strong);background:var(--bg);display:grid}.cell{width:var(--cell-size);height:var(--cell-size);cursor:pointer;border-right:1px solid var(--border);border-bottom:1px solid var(--border);-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;transition:background .1s;display:flex;position:relative}.cell[data-col="2"],.cell[data-col="5"]{border-right:3px solid var(--border-strong)}.cell[data-row="2"],.cell[data-row="5"]{border-bottom:3px solid var(--border-strong)}.cell[data-col="8"]{border-right:none}.cell[data-row="8"]{border-bottom:none}.cell:hover:not(.given):not(.selected){background:var(--surface)}.cell.peer{background:var(--peer)}.cell.same-value{background:var(--same)}.cell.selected{background:var(--accent-dim2)!important}.cell-value{font-size:calc(var(--cell-size) * .48);color:var(--player-color);font-family:Georgia,serif;font-weight:400;line-height:1}.cell.given .cell-value{color:var(--given-color)}.notes-grid{grid-template-rows:repeat(3,1fr);grid-template-columns:repeat(3,1fr);width:100%;height:100%;padding:1px;display:grid}.note{font-size:calc(var(--cell-size) * .22);color:#0000;justify-content:center;align-items:center;font-family:system-ui,sans-serif;line-height:1;display:flex}.note.active{color:#7aabcf}.controls{flex-direction:column;gap:.75rem;width:100%;display:flex}.numpad{grid-template-columns:repeat(9,1fr);gap:4px;display:grid}.num-btn{aspect-ratio:1;background:var(--surface);border:1px solid var(--border);cursor:pointer;border-radius:4px;flex-direction:column;justify-content:center;align-items:center;gap:1px;transition:background .1s,border-color .1s;display:flex}.num-btn:hover:not(:disabled){background:var(--surface-2);border-color:var(--accent)}.num-btn:active:not(:disabled){transform:scale(.95)}.num-btn.exhausted{opacity:.22;cursor:default}.num{color:var(--text);font-family:Georgia,serif;font-size:18px}.remaining{color:var(--text-muted);font-family:system-ui,sans-serif;font-size:9px}.action-bar{flex-wrap:wrap;gap:6px;display:flex}.action-btn{letter-spacing:.04em;min-width:80px;color:var(--text-muted);background:var(--surface);border:1px solid var(--border);cursor:pointer;white-space:nowrap;border-radius:4px;flex:1;padding:8px 6px;font-family:system-ui,sans-serif;font-size:12px;transition:background .1s,color .1s,border-color .1s}.action-btn:hover{background:var(--surface-2);color:var(--text);border-color:var(--border-strong)}.action-btn.active{color:var(--accent);border-color:var(--accent);background:var(--accent-dim)}.win-screen{background:var(--surface);border:1px solid var(--border-strong);text-align:center;border-radius:8px;flex-direction:column;align-items:center;gap:1rem;width:100%;padding:2rem;display:flex}.win-icon{font-size:2.5rem}.win-screen h2{letter-spacing:.1em;font-family:Georgia,serif;font-size:1.4rem;font-weight:400}.win-stats{gap:2.5rem;display:flex}.win-stat{flex-direction:column;align-items:center;gap:4px;display:flex}.win-stat-label{letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);font-family:system-ui,sans-serif;font-size:10px}.win-stat-value{font-family:Georgia,serif;font-size:1.5rem}.win-stat-value.highlight{color:var(--accent)}.score-breakdown{color:var(--text-muted);font-family:system-ui,sans-serif;font-size:11px}.sign-in-btn{letter-spacing:.08em;color:var(--text-muted);background:var(--surface);border:1px solid var(--border);cursor:pointer;border-radius:4px;padding:6px 14px;font-family:system-ui,sans-serif;font-size:12px;transition:color .15s,border-color .15s}.sign-in-btn:hover{color:var(--text);border-color:var(--border-strong)}.auth-toast{z-index:100;white-space:nowrap;border-radius:6px;align-items:center;gap:.75rem;padding:10px 16px;font-family:system-ui,sans-serif;font-size:13px;animation:.2s slide-down;display:flex;position:fixed;top:1rem;left:50%;transform:translate(-50%);box-shadow:0 4px 24px #0006}.auth-toast.success{color:#7dcf7d;background:#1a3a1a;border:1px solid #3a7a3a}.auth-toast.error{color:var(--error-color);background:#3a1a1a;border:1px solid #7a3a3a}.toast-dismiss{cursor:pointer;color:inherit;opacity:.6;background:0 0;border:none;padding:0;font-size:12px}.toast-dismiss:hover{opacity:1}@keyframes slide-down{0%{opacity:0;transform:translate(-50%)translateY(-8px)}to{opacity:1;transform:translate(-50%)translateY(0)}}.leaderboard-link{letter-spacing:.06em;color:var(--text-muted);border:1px solid var(--border);cursor:pointer;background:0 0;border-radius:4px;padding:7px 14px;font-family:system-ui,sans-serif;font-size:12px;transition:color .15s,border-color .15s}.leaderboard-link:hover{color:var(--accent);border-color:var(--accent)}.leaderboard-link-small{cursor:pointer;opacity:.5;background:0 0;border:none;padding:2px 4px;font-size:16px;line-height:1;transition:opacity .15s}.leaderboard-link-small:hover{opacity:1}.link-btn{color:var(--accent);cursor:pointer;font:inherit;background:0 0;border:none;padding:0;text-decoration:underline}.win-signin-nudge{color:var(--text-muted);margin-top:-.25rem;font-family:system-ui,sans-serif;font-size:12px}.user-menu{position:relative}.avatar-btn{border:1px solid var(--border-strong);background:var(--surface-2);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;width:32px;height:32px;padding:0;transition:border-color .15s;display:flex;overflow:hidden}.avatar-btn:hover{border-color:var(--accent)}.avatar-img{object-fit:cover;width:100%;height:100%}.avatar-initials{color:var(--text-muted);letter-spacing:.05em;font-family:system-ui,sans-serif;font-size:11px;font-weight:600}.user-dropdown{background:var(--surface);border:1px solid var(--border-strong);z-index:50;border-radius:6px;min-width:180px;animation:.1s fade-in;position:absolute;top:calc(100% + 8px);right:0;overflow:hidden;box-shadow:0 8px 32px #00000080}@keyframes fade-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.user-dropdown-header{padding:10px 14px 8px}.user-name{color:var(--text);font-family:system-ui,sans-serif;font-size:12px;font-weight:600}.dropdown-divider{border:none;border-top:1px solid var(--border);margin:0}.dropdown-item{text-align:left;width:100%;color:var(--text-muted);cursor:pointer;background:0 0;border:none;padding:9px 14px;font-family:system-ui,sans-serif;font-size:12px;transition:background .1s,color .1s;display:block}.dropdown-item:hover{background:var(--surface-2);color:var(--text)}.dropdown-item.danger:hover{color:var(--error-color)}.modal-backdrop{z-index:40;background:#000000b3;justify-content:center;align-items:center;padding:1rem;animation:.15s fade-backdrop;display:flex;position:fixed;inset:0}@keyframes fade-backdrop{0%{opacity:0}to{opacity:1}}.modal{background:var(--surface);border:1px solid var(--border-strong);border-radius:10px;width:100%;max-width:380px;max-height:90dvh;padding:2rem;animation:.15s modal-in;position:relative;overflow-y:auto;box-shadow:0 24px 64px #0009}.modal-wide{max-width:560px}@keyframes modal-in{0%{opacity:0;transform:scale(.97)translateY(8px)}to{opacity:1;transform:scale(1)translateY(0)}}.modal-close{cursor:pointer;color:var(--text-muted);background:0 0;border:none;padding:4px;font-size:14px;line-height:1;position:absolute;top:1rem;right:1rem}.modal-close:hover{color:var(--text)}.modal-title{letter-spacing:.08em;margin-bottom:.5rem;font-family:Georgia,serif;font-size:1.25rem;font-weight:400}.modal-subtitle{color:var(--text-muted);margin-bottom:1.5rem;font-family:system-ui,sans-serif;font-size:13px;line-height:1.5}.oauth-buttons{flex-direction:column;gap:.6rem;margin-bottom:1rem;display:flex}.oauth-btn{cursor:pointer;border:1px solid var(--border-strong);border-radius:5px;justify-content:center;align-items:center;gap:10px;padding:11px;font-family:system-ui,sans-serif;font-size:13px;font-weight:500;transition:background .15s,border-color .15s;display:flex}.oauth-btn.github{background:var(--surface-2);color:var(--text)}.oauth-btn.github:hover{background:#2a2a2a;border-color:#555}.oauth-btn.google{background:var(--surface-2);color:var(--text)}.oauth-btn.google:hover{background:#2a2a2a;border-color:#555}.modal-note{color:var(--text-muted);text-align:center;font-family:system-ui,sans-serif;font-size:11px;line-height:1.5}.tab-row{gap:4px;margin-bottom:.75rem;display:flex}.tab-row.small{margin-bottom:1rem}.tab-btn{letter-spacing:.07em;text-transform:uppercase;border:1px solid var(--border);color:var(--text-muted);cursor:pointer;background:0 0;border-radius:3px;padding:5px 12px;font-family:system-ui,sans-serif;font-size:11px;transition:background .1s,color .1s,border-color .1s}.tab-btn:hover{background:var(--surface-2);color:var(--text)}.tab-btn.active{background:var(--accent-dim);color:var(--accent);border-color:var(--accent)}.lb-table-wrap{border:1px solid var(--border);border-radius:5px;margin-bottom:1rem;overflow-x:auto}.lb-table{border-collapse:collapse;width:100%;font-family:system-ui,sans-serif;font-size:12px}.lb-table th{text-align:left;color:var(--text-muted);letter-spacing:.1em;text-transform:uppercase;border-bottom:1px solid var(--border);background:var(--surface-2);padding:8px 10px;font-size:10px}.lb-table td{border-bottom:1px solid var(--border);color:var(--text-muted);padding:9px 10px}.lb-table tbody tr:last-child td{border-bottom:none}.lb-table tbody tr:hover td{background:var(--surface-2)}.lb-row-self td{color:var(--accent)}.lb-rank{font-variant-numeric:tabular-nums;width:36px}.medal{font-size:16px}.lb-player{align-items:center;gap:6px;display:flex}.lb-avatar{object-fit:cover;border-radius:50%;width:20px;height:20px}.lb-name{color:var(--text)}.lb-score{color:var(--accent);font-family:Georgia,serif;font-size:13px}.lb-time{font-variant-numeric:tabular-nums}.lb-empty{text-align:center;color:var(--text-muted);padding:2rem;font-family:system-ui,sans-serif;font-size:13px}.lb-pagination{justify-content:center;align-items:center;gap:1rem;display:flex}.lb-page-label{color:var(--text-muted);font-family:system-ui,sans-serif;font-size:12px}@media (width<=480px){.hide-mobile{display:none}}.stats-grid{grid-template-columns:repeat(3,1fr);gap:.75rem;margin-bottom:1.5rem;display:grid}@media (width<=440px){.stats-grid{grid-template-columns:1fr}}.stats-card{background:var(--surface-2);border:1px solid var(--border);border-radius:6px;padding:.75rem}.stats-card-title{letter-spacing:.1em;text-transform:uppercase;color:var(--accent);margin-bottom:.6rem;font-family:system-ui,sans-serif;font-size:10px;font-weight:400}.stats-rows{flex-direction:column;gap:4px;display:flex}.stat-row{justify-content:space-between;align-items:center;font-family:system-ui,sans-serif;font-size:11px;display:flex}.stat-row-label{color:var(--text-muted)}.stat-row-value{color:var(--text);font-variant-numeric:tabular-nums}.stat-row-value.highlight{color:var(--accent);font-family:Georgia,serif;font-size:13px}.stats-section-title{letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);margin-bottom:.5rem;font-family:system-ui,sans-serif;font-size:11px;font-weight:400}.daily-banner{background:var(--surface);border:1px solid var(--border);border-radius:8px;flex-direction:column;gap:.75rem;width:100%;padding:1rem 1.25rem;display:flex}.daily-header{text-align:center;flex-direction:column;align-items:center;gap:3px;display:flex}.daily-title-row{justify-content:center;align-items:center;gap:.5rem;display:flex}.daily-icon{font-size:15px}.daily-title{letter-spacing:.08em;text-transform:uppercase;color:var(--text);font-family:system-ui,sans-serif;font-size:12px;font-weight:600}.daily-streak{color:var(--accent);font-family:system-ui,sans-serif;font-size:12px}.daily-date{color:var(--text-muted);font-family:system-ui,sans-serif;font-size:11px}.daily-diff-row{justify-content:center;gap:4px;display:flex}.daily-diff-btn{letter-spacing:.06em;border:1px solid var(--border);color:var(--text-muted);cursor:pointer;background:0 0;border-radius:3px;padding:4px 10px;font-family:system-ui,sans-serif;font-size:11px;transition:color .1s,border-color .1s,background .1s}.daily-diff-btn:hover{color:var(--text);border-color:var(--border-strong)}.daily-diff-btn.active{color:var(--accent);border-color:var(--accent);background:var(--accent-dim)}.daily-start-btn{letter-spacing:.06em;color:var(--bg);background:var(--accent);cursor:pointer;border:none;border-radius:4px;align-self:center;padding:9px 16px;font-family:system-ui,sans-serif;font-size:12px;font-weight:500;transition:opacity .15s}.daily-start-btn:hover:not(:disabled){opacity:.85}.daily-start-btn:disabled{opacity:.4;cursor:default}.daily-loading{align-items:center;gap:6px;display:flex}.daily-done{color:#7dcf7d;justify-content:center;align-items:center;gap:.75rem;font-family:system-ui,sans-serif;font-size:12px;display:flex}.daily-streak-label{color:var(--accent);font-size:11px}.cell,.num-btn,.action-btn,.diff-btn,.daily-start-btn{-webkit-tap-highlight-color:transparent;touch-action:manipulation}.board{touch-action:none;-webkit-user-select:none;user-select:none}@media (width<=480px){.action-btn{padding:10px 6px;font-size:11px}.num-btn{border-radius:5px}@media (width<=360px){.action-bar{grid-template-columns:1fr 1fr;display:grid}}.modal{border-radius:12px 12px 0 0;max-width:100%;max-height:85dvh;margin:0;padding:1.5rem 1.25rem;position:fixed;bottom:0;left:0;right:0}.modal-backdrop{align-items:flex-end}@keyframes modal-in{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}}:focus{outline:none}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}.cell:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;z-index:1}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.board{animation:.2s board-enter}@keyframes board-enter{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:scale(1)}}.controls{animation:.25s 50ms both controls-enter}@keyframes controls-enter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.win-screen{animation:.3s cubic-bezier(.34,1.56,.64,1) win-enter}@keyframes win-enter{0%{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}.win-icon{animation:.4s cubic-bezier(.34,1.56,.64,1) .1s both bounce-in;display:inline-block}@keyframes bounce-in{0%{transform:scale(0)rotate(-15deg)}to{transform:scale(1)rotate(0)}}.cell-value{animation:.15s cubic-bezier(.34,1.56,.64,1) value-pop}@keyframes value-pop{0%{opacity:.5;transform:scale(.7)}to{opacity:1;transform:scale(1)}}@media (forced-colors:active){.cell.selected{forced-color-adjust:none;background:highlight}.cell.given .cell-value{forced-color-adjust:none;color:buttontext}.cell-value{forced-color-adjust:none;color:highlight}}@media print{.header,.controls,.status-bar,.win-screen,.daily-banner,.modal-backdrop{display:none!important}.board-wrapper{page-break-inside:avoid}.cell{border-color:#000!important}.cell-value{color:#000!important}}
