:root{--color-bg: #1a1a2e;--color-surface: #16213e;--color-primary: #0f3460;--color-accent: #e94560;--color-text: #eaeaea;--color-text-muted: #a0a0a0;--color-x: #e94560;--color-o: #0f3460;--color-grid: #eaeaea;--color-win: #4ade80;--cell-size: min(80px, 25vw);--gap-size: 8px;--border-radius: 8px;--font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;--font-size-base: 16px;--font-size-lg: 1.5rem;--font-size-xl: 2rem;--transition-fast: .1s ease;--transition-normal: .2s ease}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:var(--font-size-base)}body{font-family:var(--font-family);background-color:var(--color-bg);color:var(--color-text);min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1rem;line-height:1.5}#app{display:flex;flex-direction:column;align-items:center;gap:1.5rem;max-width:400px;width:100%}.game-title{font-size:var(--font-size-xl);font-weight:700;color:var(--color-text);text-align:center;margin-bottom:.5rem}.player-names-container{width:100%}.player-names{display:flex;gap:1rem;justify-content:center;align-items:center;width:100%}.player-name-field{display:flex;align-items:center;gap:.5rem;flex:1;max-width:180px}.player-name-label{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:4px;font-weight:700;font-size:1.2rem;flex-shrink:0}.player-name-label--x{background-color:var(--color-x);color:var(--color-text)}.player-name-label--o{background-color:var(--color-o);color:var(--color-text)}.player-mark{display:block}.player-name-input{flex:1;padding:.5rem .75rem;font-size:.9rem;font-family:inherit;background-color:var(--color-surface);color:var(--color-text);border:2px solid transparent;border-radius:var(--border-radius);transition:border-color var(--transition-fast)}.player-name-input:focus{outline:none;border-color:var(--color-accent)}.player-name-input::placeholder{color:var(--color-text-muted)}.status{font-size:var(--font-size-lg);font-weight:600;text-align:center;padding:.75rem 1.5rem;background-color:var(--color-surface);border-radius:var(--border-radius);min-width:200px;transition:background-color var(--transition-normal)}.status--x-turn{border-left:4px solid var(--color-x)}.status--o-turn{border-left:4px solid var(--color-o)}.status--winner{background-color:var(--color-win);color:var(--color-bg)}.status--draw{background-color:var(--color-primary)}.status--thinking{border-left:4px solid var(--color-o)}.status--thinking:after{content:"";display:inline-block;animation:thinking-dots 1.5s infinite}@keyframes thinking-dots{0%{content:""}25%{content:"."}50%{content:".."}75%{content:"..."}to{content:""}}.board{display:grid;grid-template-columns:repeat(3,var(--cell-size));grid-template-rows:repeat(3,var(--cell-size));gap:var(--gap-size);background-color:var(--color-grid);padding:var(--gap-size);border-radius:var(--border-radius);transition:opacity var(--transition-normal)}.board--thinking{pointer-events:none;opacity:.7}.cell{width:var(--cell-size);height:var(--cell-size);background-color:var(--color-surface);border:none;border-radius:calc(var(--border-radius) / 2);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:calc(var(--cell-size) * .6);font-weight:700;transition:background-color var(--transition-fast),transform var(--transition-fast);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.cell:hover:not(.cell--occupied):not(.cell--disabled){background-color:var(--color-primary);transform:scale(1.02)}.cell:active:not(.cell--occupied):not(.cell--disabled){transform:scale(.98)}.cell--x{color:var(--color-x)}.cell--o{color:var(--color-o)}.cell--occupied{cursor:not-allowed}.cell--disabled{cursor:not-allowed;opacity:.7}.controls{display:flex;gap:1rem}.btn{padding:.75rem 1.5rem;font-size:1rem;font-weight:600;font-family:inherit;background-color:var(--color-accent);color:var(--color-text);border:none;border-radius:var(--border-radius);cursor:pointer;transition:background-color var(--transition-fast),transform var(--transition-fast)}.btn:hover{background-color:color-mix(in srgb,var(--color-accent) 85%,white);transform:scale(1.02)}.btn:active{transform:scale(.98)}.btn:focus-visible{outline:2px solid var(--color-text);outline-offset:2px}.btn-demo{background-color:var(--color-primary)}.btn-demo:hover{background-color:color-mix(in srgb,var(--color-primary) 85%,white)}.mode-selector{border:none;padding:0;margin:0;width:100%}.mode-selector__legend{font-size:.875rem;color:var(--color-text-muted);text-align:center;margin-bottom:.5rem;width:100%}.mode-selector__options{display:flex;gap:.5rem;justify-content:center}.mode-selector__option{display:flex;align-items:center;justify-content:center;padding:.625rem 1.25rem;min-width:100px;min-height:44px;font-size:.9rem;font-weight:600;background-color:var(--color-surface);color:var(--color-text);border:2px solid transparent;border-radius:var(--border-radius);cursor:pointer;transition:background-color var(--transition-fast),border-color var(--transition-fast)}.mode-selector__option:hover:not(.mode-selector__option--disabled){border-color:var(--color-accent)}.mode-selector__option--selected{background-color:var(--color-accent);color:var(--color-text)}.mode-selector__option--disabled{opacity:.5;cursor:not-allowed}.mode-selector__input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.mode-selector__input:focus-visible+.mode-selector__label{outline:3px solid var(--color-accent);outline-offset:2px}.mode-selector__label{pointer-events:none}@media(min-width:768px){:root{--cell-size: 100px;--gap-size: 10px}.game-title{font-size:2.5rem}}@media(min-width:1024px){:root{--cell-size: 120px;--gap-size: 12px}}@media(max-width:360px){:root{--cell-size: 70px;--gap-size: 6px}.status{font-size:1.1rem;padding:.5rem 1rem}.mode-selector__option{min-width:80px;padding:.5rem .75rem;font-size:.8rem}}.cell:focus-visible{outline:3px solid var(--color-accent);outline-offset:2px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition-duration:.01ms!important}}@media(hover:none){.cell:active:not(.cell--occupied):not(.cell--disabled){background-color:var(--color-primary)}}
