:root{--bg: #1e1e24;--surface: #2a2a32;--text: #f0f0f0;--muted: #9a9aa8;--accent: #facb2e;--light-square: #eeeed1;--dark-square: #769656;--selected: rgba(217, 184, 46, .55);--last-move: rgba(217, 184, 46, .35);--legal-dot: rgba(30, 30, 30, .28);--capture-ring: rgba(217, 51, 38, .55);--hint: rgba(56, 189, 248, .42);--hint-ring: rgba(56, 189, 248, .95);--check: rgba(220, 40, 40, .45);--frame: rgba(250, 203, 46, .25);--board-edge-inset: 12px;--game-chrome-reserve: 240px;--piece-scale: .88;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}*{box-sizing:border-box}html,body{margin:0;height:100%;min-height:100%;background:var(--bg);color:var(--text)}#app{min-height:100dvh;height:100dvh;display:flex;flex-direction:column}#boot-loading,.boot-error{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:24px;text-align:center;color:var(--muted)}.boot-error button{background:var(--accent);color:#1e1e24;font-weight:600}button{font:inherit;cursor:pointer;border:none;border-radius:10px;padding:12px 18px;background:var(--surface);color:var(--text);transition:background .15s,transform .1s}button:hover:not(:disabled){background:#363640}button:disabled{opacity:.45;cursor:not-allowed}button.primary{background:var(--accent);color:#1a1a1a;font-weight:600}button.primary:hover:not(:disabled){background:#ffd84d}button.danger{background:#5c2a2a;color:#ffb4b4}input,select{font:inherit;padding:10px 12px;border-radius:8px;border:1px solid #444;background:var(--bg);color:var(--text);width:100%}.home{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px;gap:20px;max-width:420px;margin:0 auto;position:relative}.home-logo{width:72px;height:72px;border-radius:16px;display:block}.home h1{margin:0;font-size:1.75rem;text-align:center}.home .tagline{margin:0;color:var(--muted);text-align:center;font-size:.95rem;line-height:1.45}.home-actions{display:flex;flex-direction:column;gap:12px;width:100%}.difficulty-picker{display:flex;gap:8px;width:100%}.difficulty-picker button{flex:1;padding:10px}.difficulty-picker button.active{outline:2px solid var(--accent)}.settings-panel{width:100%;padding:16px;background:var(--surface);border-radius:12px;display:flex;flex-direction:column;gap:10px}.settings-panel label{font-size:.8rem;color:var(--muted)}.settings-toggle{background:transparent;color:var(--accent);padding:8px;font-size:.9rem}.engine-status{font-size:.85rem;color:var(--muted)}.engine-status.ok{color:#7dce82}.engine-status.err{color:#ff8a80}.game-screen{flex:1 1 auto;display:flex;flex-direction:column;max-width:720px;margin:0 auto;width:100%;padding:8px 12px 16px;min-height:0;height:100%}.game-top,.game-bottom{flex:0 0 auto}.game-board-slot{flex:1 1 0;display:flex;align-items:center;justify-content:center;min-height:0}.game-header{display:flex;align-items:center;gap:12px;padding:8px 0}.game-header h2{flex:1;margin:0;font-size:1.1rem;font-weight:600}.game-header .back{padding:8px 12px}.game-header .auto-flip{font-size:.75rem;padding:6px 10px;white-space:nowrap;color:var(--muted)}.game-header .auto-flip.active{color:var(--accent)}.game-header .sound-toggle{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;padding:0;border-radius:50%;border:1px solid color-mix(in srgb,var(--muted) 30%,transparent);background:transparent;color:var(--accent);cursor:pointer;transition:color .15s ease,background .15s ease,border-color .15s ease}.game-header .sound-toggle svg{display:block}.game-header .sound-toggle:hover{background:color-mix(in srgb,var(--muted) 14%,transparent)}.game-header .sound-toggle:active{transform:scale(.92)}.game-header .sound-toggle.muted{color:var(--muted);border-color:color-mix(in srgb,var(--muted) 22%,transparent)}.game-header .hint-toggle{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;padding:0;border-radius:50%;border:1px solid color-mix(in srgb,var(--muted) 30%,transparent);background:transparent;color:var(--accent);cursor:pointer;transition:color .15s ease,background .15s ease,border-color .15s ease}.game-header .hint-toggle svg{display:block}.game-header .hint-toggle:hover:not(:disabled){background:color-mix(in srgb,var(--muted) 14%,transparent)}.game-header .hint-toggle:active:not(:disabled){transform:scale(.92)}.game-header .hint-toggle:disabled{color:var(--muted);border-color:color-mix(in srgb,var(--muted) 22%,transparent);opacity:.5;cursor:default}.game-header .hint-toggle.computing{animation:hint-pulse .9s ease-in-out infinite}@keyframes hint-pulse{0%,to{opacity:.5}50%{opacity:1}}.status-wrap{margin-bottom:6px}.status-bar{display:flex;align-items:center;justify-content:center;gap:8px;text-align:center;font-size:.9rem;color:var(--muted);min-height:1.4em}.status-spinner{width:14px;height:14px;border:2px solid var(--accent);border-top-color:transparent;border-radius:50%;animation:status-spin .8s linear infinite;flex-shrink:0}.status-spinner[hidden]{display:none}@keyframes status-spin{to{transform:rotate(360deg)}}.status-hint{display:none!important}.status-bar.error{color:#ff8a80}.status-bar.thinking{color:var(--accent)}.game-controls button.retry-emphasis:not([hidden]){box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 35%,transparent);font-weight:600}.captured-bar{display:flex;justify-content:space-between;align-items:flex-start;gap:6px;min-height:32px;max-width:100%;font-size:.85rem;color:var(--muted)}.captured-side{flex:1 1 0;min-width:0;max-width:calc(50% - 20px)}.captured-side-white .captured-pieces{justify-content:flex-end}.captured-pieces{display:flex;flex-wrap:wrap;gap:2px;align-content:flex-start}.captured-pieces img{width:24px;height:24px;flex:0 0 auto}.board-wrap{position:relative;width:min(100%,calc(100dvw - 2 * var(--board-edge-inset) - env(safe-area-inset-left) - env(safe-area-inset-right)),calc(100dvh - var(--game-chrome-reserve) - env(safe-area-inset-top) - env(safe-area-inset-bottom)),560px);max-width:100%;margin:0 auto;aspect-ratio:1;flex-shrink:0;align-self:center;touch-action:none}.board-grid{display:grid;grid-template-columns:repeat(10,1fr);grid-template-rows:repeat(10,1fr);width:100%;height:100%;gap:0;border-radius:0;overflow:hidden;box-shadow:0 4px 24px #00000073;touch-action:none;-webkit-user-select:none;user-select:none;background-color:var(--dark-square)}.board-frame{position:absolute;pointer-events:none;border:3px solid var(--frame);border-radius:0;top:10%;left:10%;width:80%;height:80%}.square{position:relative;display:flex;align-items:center;justify-content:center;border:none;border-radius:0;padding:0;margin:0;min-width:0;min-height:0;background:var(--light-square);touch-action:none;cursor:pointer;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}.square.dark{background:var(--dark-square)}.square.selected{background-color:var(--selected)!important}.square.last-move{background-color:var(--last-move)!important}.square.in-check{background-color:var(--check)!important}.square.hint{background-color:var(--hint)!important}.square.hint:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;box-shadow:inset 0 0 0 3px var(--hint-ring);pointer-events:none}.square .piece-img{width:calc(var(--piece-scale) * 100%);height:calc(var(--piece-scale) * 100%);pointer-events:none;-webkit-user-select:none;user-select:none}.square .legal-dot{position:absolute;width:28%;height:28%;border-radius:50%;background:var(--legal-dot)}.square .capture-ring{position:absolute;top:8%;right:8%;bottom:8%;left:8%;border-radius:50%;border:4px solid var(--capture-ring);pointer-events:none}.coord{position:absolute;font-size:.55rem;font-weight:700;pointer-events:none;line-height:1}.square.light .coord{color:var(--dark-square);opacity:.9}.square.dark .coord{color:var(--light-square);opacity:.85}.coord.file{bottom:2px;right:3px}.coord.rank{top:2px;left:3px}.move-list-wrap{margin-top:12px;background:var(--surface);border-radius:10px;max-height:120px;overflow-y:auto}.move-list{display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px;padding:10px 12px;font-size:.85rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.move-list .move-num{display:inline-flex;align-items:center;color:var(--muted);margin-left:4px;margin-right:0}.move-list .move-num:first-child{margin-left:0}.move-list button.move-entry{padding:4px 8px;font-size:inherit;font-family:inherit;background:transparent}.move-list button.move-entry.active{background:#facb2e33;color:var(--accent)}.game-controls{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;justify-content:center}.game-controls button{flex:1;min-width:80px}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000a6;display:flex;align-items:center;justify-content:center;z-index:100;padding:20px}.overlay-panel{background:var(--surface);border-radius:16px;padding:24px;max-width:340px;width:100%;text-align:center}.overlay-panel h3{margin:0 0 8px}.promotion-options{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:16px}.promotion-options button{aspect-ratio:1;padding:8px;background:var(--bg)}.promotion-options img{width:100%;height:100%}@media(min-width:600px){.game-screen{padding:16px 24px 24px}}@media(max-width:599px){:root{--board-edge-inset: 6px;--game-chrome-reserve: 0px;--piece-scale: .94}.board-grid.shared-screen .piece-img[data-color=black]{transform:rotate(180deg)}.game-screen{max-width:none;display:grid;grid-template-rows:auto minmax(0,1fr) auto;height:100%;padding-top:max(4px,env(safe-area-inset-top));padding-right:max(var(--board-edge-inset),env(safe-area-inset-right));padding-bottom:max(8px,env(safe-area-inset-bottom));padding-left:max(var(--board-edge-inset),env(safe-area-inset-left))}.game-top{grid-row:1}.game-board-slot{grid-row:2;flex:none;width:100%;min-height:0}.game-bottom{grid-row:3}.board-wrap{width:min(100%,calc(100dvw - 2 * var(--board-edge-inset) - env(safe-area-inset-left) - env(safe-area-inset-right)));max-height:100%;height:auto}.game-header{padding:4px 0;gap:8px}.game-header h2{font-size:1rem}.game-header .back,.game-header .auto-flip{padding:6px 10px;font-size:.85rem}.captured-bar:not(:has(img)){display:none;min-height:0}.status-bar{font-size:.85rem;min-height:1.2em}.move-list-wrap{margin-top:8px;max-height:72px}.move-list{padding:8px 10px;font-size:.8rem}.game-controls{margin-top:8px;gap:6px}.game-controls button{min-width:0;padding:10px 6px;font-size:.8rem}}.online-players{text-align:center;font-size:.82rem;color:var(--muted);margin-bottom:6px}.share-panel{background:var(--surface);border:1px solid color-mix(in srgb,var(--accent) 35%,transparent);border-radius:12px;padding:12px;margin-bottom:8px}.share-label{margin:0 0 8px;font-size:.85rem;color:var(--text)}.share-row{display:flex;gap:8px}.share-input{flex:1;min-width:0;padding:8px 10px;border-radius:8px;border:1px solid color-mix(in srgb,var(--muted) 30%,transparent);background:var(--bg);color:var(--text);font-size:.8rem}.share-copy{white-space:nowrap}.rematch-pending{color:var(--muted);font-size:.9rem;align-self:center}.elo-note{margin:-8px 0 0;font-size:.8rem;color:var(--muted);text-align:center}.join-row{display:flex;gap:8px;width:100%}.join-input{flex:1;min-width:0}.settings-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;display:flex;align-items:center;justify-content:center;padding:24px;z-index:50}.settings-modal{max-width:420px;max-height:min(80dvh,560px);overflow-y:auto}.settings-modal h2{margin:0;font-size:1.1rem}.theme-swatches{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:10px}.theme-swatch{display:flex;flex-direction:column;align-items:center;gap:6px;padding:8px;background:var(--bg);border-radius:10px}.theme-swatch:before{content:"";width:56px;height:56px;border-radius:8px;background:conic-gradient(var(--sw-light) 25%,var(--sw-dark) 0 50%,var(--sw-light) 0 75%,var(--sw-dark) 0)}.theme-swatch span{font-size:.7rem;color:var(--muted)}.theme-swatch.active{outline:2px solid var(--accent)}.theme-swatch:hover{background:var(--bg)}.home-settings{position:absolute;top:calc(12px + env(safe-area-inset-top));right:max(12px,env(safe-area-inset-right));color:var(--muted)}.home-auth{position:absolute;top:calc(12px + env(safe-area-inset-top));left:max(12px,env(safe-area-inset-left));display:flex;flex-direction:column;align-items:flex-start;z-index:10}.home-auth-signin{font-size:.85rem;padding:7px 14px;background:transparent;color:var(--muted);border:1px solid color-mix(in srgb,var(--muted) 35%,transparent);border-radius:20px}.home-auth-signin:hover{background:color-mix(in srgb,var(--muted) 12%,transparent);color:var(--text)}.home-auth-trigger{display:flex;align-items:center;gap:8px;padding:4px 10px 4px 4px;background:transparent;border:1px solid color-mix(in srgb,var(--muted) 30%,transparent);border-radius:20px;font-size:.85rem;color:var(--text)}.home-auth-trigger:hover{background:color-mix(in srgb,var(--muted) 12%,transparent)}.home-auth-avatar{width:28px;height:28px;border-radius:50%;object-fit:cover;flex-shrink:0}.home-auth-avatar--initials{display:flex;align-items:center;justify-content:center;background:var(--accent);color:#1a1a1a;font-weight:700;font-size:.85rem}.home-auth-name{max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.home-auth-popover{margin-top:6px;background:var(--surface);border:1px solid color-mix(in srgb,var(--muted) 25%,transparent);border-radius:12px;padding:12px;display:flex;flex-direction:column;gap:10px;min-width:220px;box-shadow:0 4px 16px #00000059}.home-auth-menu{margin-top:6px;background:var(--surface);border:1px solid color-mix(in srgb,var(--muted) 25%,transparent);border-radius:12px;padding:10px 12px;display:flex;flex-direction:column;gap:8px;min-width:180px;box-shadow:0 4px 16px #00000059}.home-auth-menu[hidden],.home-auth-popover[hidden]{display:none}.home-auth-menu-email{margin:0;font-size:.78rem;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.home-auth-signout{font-size:.85rem;padding:7px 12px;color:var(--muted);background:transparent}.home-auth-signout:hover{background:color-mix(in srgb,var(--muted) 14%,transparent);color:var(--text)}.home-auth-apple{font-size:.85rem;width:100%}.home-auth-error{margin:0;font-size:.78rem;color:#ff8a80;line-height:1.4}.past-games{display:flex;flex-direction:column;max-width:480px;width:100%;margin:0 auto;padding:0 16px 24px}.past-games-content{display:flex;flex-direction:column;gap:24px;margin-top:16px}.past-games-section{display:flex;flex-direction:column;gap:8px}.past-games-section-title{font-size:.85rem;color:var(--muted);margin:0 0 4px;text-transform:uppercase;letter-spacing:.05em}.past-games-list{display:flex;flex-direction:column;gap:6px}.past-game-row{display:flex;align-items:center;gap:12px;background:var(--surface);border-radius:10px;padding:12px 14px;cursor:pointer;text-align:left;width:100%;border:none;color:var(--text)}.past-game-row:hover{background:color-mix(in srgb,var(--surface) 80%,var(--accent) 20%)}.past-game-info{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.past-game-top{display:flex;align-items:center;gap:8px}.past-game-opponent{font-size:.95rem;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.past-game-meta{font-size:.8rem;color:var(--muted)}.result-badge{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;font-size:.8rem;font-weight:700;flex-shrink:0;background:color-mix(in srgb,var(--muted) 20%,transparent);color:var(--muted)}.result-badge.win{background:color-mix(in srgb,#4caf50 25%,transparent);color:#81c784}.result-badge.loss{background:color-mix(in srgb,#f44336 25%,transparent);color:#e57373}.result-badge.draw{background:color-mix(in srgb,var(--muted) 20%,transparent);color:var(--muted)}.result-badge.neutral{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent)}.past-games-note{color:var(--muted);font-size:.9rem;text-align:center;margin:16px 0}.past-games-load-more{margin-top:4px;font-size:.85rem;color:var(--accent);background:transparent;padding:8px}.leaderboard{display:flex;flex-direction:column;max-width:480px;width:100%;margin:0 auto;padding:0 16px 24px}.leaderboard-content{display:flex;flex-direction:column;gap:16px;margin-top:16px}.leaderboard-note{color:var(--muted);font-size:.9rem;text-align:center;margin:16px 0}.leaderboard-note--separator{margin:8px 0 4px;font-size:.78rem;text-transform:uppercase;letter-spacing:.05em}.leaderboard-table{display:flex;flex-direction:column;gap:4px}.leaderboard-row{display:grid;grid-template-columns:auto 1fr auto auto auto;align-items:center;gap:8px;background:var(--surface);border-radius:10px;padding:10px 12px;font-size:.9rem}.leaderboard-row--header{background:transparent;font-size:.78rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;padding:4px 12px}.lb-me{border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);background:color-mix(in srgb,var(--accent) 8%,var(--surface))}.lb-cell{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lb-rank{min-width:24px;text-align:right;color:var(--muted);font-size:.82rem}.lb-player{display:flex;align-items:center;gap:8px;min-width:0}.lb-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.leaderboard-avatar{width:20px;height:20px;border-radius:50%;object-fit:cover;flex-shrink:0}.lb-wins,.lb-games,.lb-winrate{text-align:right;min-width:36px}.lb-winrate{color:var(--muted);font-size:.85rem}.your-stats{background:var(--surface);border-radius:12px;padding:14px 16px}.your-stats h3{margin:0 0 10px;font-size:.85rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}.lb-stats-grid{display:flex;flex-direction:column;gap:6px}.lb-stats-row{display:flex;align-items:center;gap:8px;font-size:.9rem}.lb-stats-label{flex:1;font-weight:500}.lb-stats-wld{font-size:.85rem;color:var(--muted)}.lb-stats-rate{min-width:40px;text-align:right;font-size:.85rem;color:var(--muted)}.coach-badge{display:inline-block;font-size:.7em;font-weight:700;border-radius:4px;padding:0 3px;margin-left:2px;vertical-align:middle}.coach-badge--inaccuracy{background:#7a5c00;color:#ffe090}.coach-badge--mistake{background:#7a3000;color:#ffb060}.coach-badge--blunder{background:#7a0000;color:#faa}.coach-progress{margin:8px 0;display:flex;flex-direction:column;gap:6px}.coach-progress-track{width:100%;height:6px;background:var(--surface);border-radius:3px;overflow:hidden}.coach-progress-fill{height:100%;background:var(--accent);border-radius:3px;transition:width .15s ease}.coach-progress-label{font-size:.8rem;color:var(--muted)}.coach-progress-row{display:flex;justify-content:space-between;align-items:center;gap:8px}.coach-accuracy{font-size:.85rem;color:var(--text);padding:6px 0;text-align:center}.coach-moments{margin-top:8px}.coach-moments h4{font-size:.8rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin:0 0 6px}.coach-moment-row{display:flex;align-items:center;gap:6px;padding:4px 6px;border-radius:6px;cursor:pointer;font-size:.82rem;color:var(--text)}.coach-moment-row:hover{background:var(--surface)}.coach-moment-row:focus{outline:2px solid var(--accent);outline-offset:1px}.coach-moment-ply{color:var(--muted);min-width:28px;flex-shrink:0}.coach-moment-move{font-weight:500;min-width:52px}.coach-moment-swing{color:var(--muted);flex:1}.coach-moment-best{font-size:.75em;color:var(--muted)}.coach-unavailable{font-size:.82rem;color:var(--muted);text-align:center;padding:8px 0}.history-banner[hidden]{display:none}.history-banner{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 12px;background:color-mix(in srgb,var(--accent) 15%,var(--surface));border:1px solid color-mix(in srgb,var(--accent) 40%,transparent);border-radius:8px;margin-top:4px;font-size:.85rem;color:var(--text)}.history-banner-text{color:var(--muted)}.history-banner-live{padding:4px 10px;font-size:.8rem}.signin-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100dvh;padding:32px 24px;gap:12px;text-align:center}.signin-screen h1{font-size:1.6rem;font-weight:700;margin:0}.signin-tagline{font-size:.9rem;color:var(--muted);margin:0 0 8px}.signin-logo{width:88px;height:88px;border-radius:20px}.signin-card{width:100%;max-width:340px;background:var(--surface);border-radius:16px;padding:24px;display:flex;flex-direction:column;gap:16px}.signin-prompt{margin:0;font-size:.85rem;color:var(--muted);line-height:1.5}.signin-gis-wrap{display:flex;justify-content:center}.signin-sep{display:flex;align-items:center;gap:10px}.signin-sep-line{flex:1;height:1px;background:color-mix(in srgb,var(--muted) 25%,transparent)}.signin-sep-text{font-size:.75rem;color:var(--muted)}.signin-guest{width:100%;background:transparent;border:1px solid color-mix(in srgb,var(--muted) 35%,transparent);color:var(--text);font-size:.9rem}.signin-guest:hover{background:color-mix(in srgb,var(--muted) 12%,transparent)}.signin-error{margin:0;font-size:.8rem;color:#ff8a80;text-align:center}
