:root{--paper:#f5ead7;--paper-2:#f0dcc0;--paper-3:#fbf5ea;--ink:#1f1a14;--muted:#5f564a;--accent:#2f6da4;--x-color:#d24a3a;--o-color:#2f6da4;--panel:rgba(255, 255, 255, 0.78);--border:rgba(31, 26, 20, 0.14);--shadow:0 16px 30px -24px rgba(31, 26, 20, 0.35);--board-edge:rgba(31, 26, 20, 0.22);--cell:#f1e9df;--cell-hover:#e8dccb;--cell-win:rgba(47, 109, 164, 0.18);--font-ui:"Space Grotesk",sans-serif;--font-display:"Fraunces",serif}body[data-theme=dark],html[data-theme=dark]{--paper:#1e1b18;--paper-2:#26221f;--paper-3:#2d2926;--ink:#f2ede3;--muted:#d6cbb9;--panel:rgba(42, 38, 34, 0.9);--border:rgba(245, 239, 230, 0.16);--shadow:0 16px 30px -24px rgba(0, 0, 0, 0.45);--cell:#5a504a;--cell-hover:#665b55;--x-color:#d24a3a;--o-color:#2f6da4}*,::after,::before{box-sizing:border-box}body{margin:0;min-height:100vh;color:var(--ink);font-family:var(--font-ui);background:radial-gradient(circle at top,#fff7e2 0,var(--paper) 40%,var(--paper-2) 100%);position:relative}body::before{content:"";position:fixed;inset:-10%;background:radial-gradient(circle at 12% 18%,rgba(47,109,164,.18),transparent 45%),radial-gradient(circle at 88% 80%,rgba(210,74,58,.16),transparent 45%);z-index:-2}body::after{content:"";position:fixed;inset:0;background-image:linear-gradient(120deg,rgba(255,255,255,.6),transparent 45%);opacity:.6;z-index:-1;pointer-events:none}body[data-theme=dark],html[data-theme=dark] body{background:radial-gradient(circle at top,#24211e 0,var(--paper) 45%,#1a1815 100%)}body[data-theme=dark]::before,html[data-theme=dark] body::before{background:radial-gradient(circle at 12% 18%,rgba(47,109,164,.16),transparent 45%),radial-gradient(circle at 88% 80%,rgba(210,74,58,.16),transparent 45%);opacity:.75}body[data-theme=dark]::after,html[data-theme=dark] body::after{background-image:linear-gradient(120deg,rgba(255,255,255,.12),transparent 45%);opacity:.45}.app{position:relative;max-width:1100px;margin:0 auto;padding:24px;display:flex;flex-direction:column;gap:24px;min-height:100vh}.top{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.top-actions{display:flex;align-items:center;gap:clamp(4px,1.6vw,12px);flex-wrap:nowrap}.top-actions #helpBtn,.top-actions #restartBtn,.top-actions .portal-link{padding:0;width:36px;height:36px;min-width:36px;border-radius:999px}.top-actions .theme-toggle{padding:0;width:36px;height:36px}.top-actions .portal-link{order:0}#restartBtn{order:2}#helpBtn{order:1}.top-actions .theme-toggle{order:3}.theme-toggle{padding:10px;border-radius:999px;display:inline-grid;place-items:center;aspect-ratio:1}.theme-toggle__icon{width:16px;height:16px;display:block}.theme-toggle__icon--moon{display:none}body[data-theme=dark] .theme-toggle__icon--sun,html[data-theme=dark] .theme-toggle__icon--sun{display:none}body[data-theme=dark] .theme-toggle__icon--moon,html[data-theme=dark] .theme-toggle__icon--moon{display:block}.title{font-size:clamp(28px, 5vw, 40px);letter-spacing:.04em;font-family:var(--font-display);font-weight:600}.portal-link,button{padding:10px 18px;border:1px solid var(--border);background:var(--ink);color:var(--paper-3);font-family:var(--font-ui);font-weight:600;letter-spacing:.8px;border-radius:999px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1;text-decoration:none;transition:transform .15s ease,box-shadow .15s ease}.portal-link:hover,button:hover{transform:translateY(-1px);box-shadow:0 6px 16px rgba(0,0,0,.2)}.portal-link{gap:8px}.control-icon,.portal-icon{width:16px;height:16px;display:block}.control-icon--restart{width:17px;height:17px}.control-icon--help{width:17px;height:17px}.button-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}body.help-open{overflow:hidden}.help-modal[hidden]{display:none}.help-modal{position:fixed;inset:0;z-index:1200;display:grid;place-items:center}.help-modal__backdrop{position:absolute;inset:0;background:rgba(22,17,13,.4)}.help-modal__sheet{position:relative;width:min(92vw,420px);border-radius:16px;background:rgba(255,255,255,.92);border:1px solid var(--border);box-shadow:0 20px 45px -24px rgba(0,0,0,.4);padding:14px 14px 12px;display:flex;flex-direction:column;gap:10px}.help-modal__header{display:flex;align-items:center;justify-content:space-between;gap:10px}.help-modal__header h2{margin:0;font-family:var(--font-display);font-size:1.05rem;line-height:1.2;color:var(--ink)}.help-modal__close{width:36px;height:36px;min-width:36px;padding:0;border-radius:999px;background:var(--ink);color:var(--paper-3)!important;-webkit-appearance:none;appearance:none}.help-modal__close:focus,.help-modal__close:focus-visible{outline:0;box-shadow:0 0 0 2px rgba(47,109,164,.55),0 6px 16px rgba(0,0,0,.2)}.help-modal__close .control-icon{width:16px;height:16px;display:block;flex:0 0 16px;color:currentColor;opacity:1;visibility:visible}.help-modal__close .control-icon circle,.help-modal__close .control-icon path{stroke:currentColor!important;fill:none!important;opacity:1}.help-modal__list{margin:0;padding-left:18px;display:grid;gap:6px;color:var(--ink);font-size:.9rem;line-height:1.35}body[data-theme=dark] .help-modal__backdrop,html[data-theme=dark] .help-modal__backdrop{background:rgba(5,6,10,.54)}body[data-theme=dark] .help-modal__sheet,html[data-theme=dark] .help-modal__sheet{background:rgba(32,36,44,.9);box-shadow:0 24px 54px -30px rgba(0,0,0,.72)}button:disabled{opacity:.6;cursor:default;box-shadow:none;transform:none}select{padding:6px 12px;border-radius:999px;border:1px solid var(--border);background:rgba(255,255,255,.8);font-family:var(--font-ui);font-size:12px;font-weight:600}.main{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,320px);gap:24px;align-items:start}.board-wrap{display:flex;flex-direction:column;gap:16px;align-items:center}.board-wrap,.board-wrap *{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}.status{font-size:13px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink)}#statusText{color:var(--accent);font-weight:700}.status-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.board{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);gap:clamp(8px,2.2vw,12px);width:min(80vmin,420px);aspect-ratio:1;padding:clamp(8px,2.2vw,12px);background:var(--board-edge);border-radius:22px;box-shadow:var(--shadow);touch-action:manipulation;-webkit-tap-highlight-color:transparent;user-select:none}.cell{border:none;border-radius:18px;background:var(--cell);font-family:var(--font-display);font-size:clamp(2.4rem, 10vmin, 4.2rem);font-weight:600;line-height:1;color:var(--ink);display:flex;align-items:center;justify-content:center;width:100%;height:100%;cursor:pointer;transition:background .2s ease,transform .15s ease,box-shadow .2s ease;box-shadow:inset 0 0 0 1px rgba(31,26,20,.12);-webkit-tap-highlight-color:transparent;touch-action:manipulation}.cell:hover{background:var(--cell-hover);transform:translateY(-1px)}.cell:disabled{cursor:default;transform:none;opacity:1;-webkit-text-fill-color:currentColor}.cell.cell--x:disabled{color:var(--x-color);-webkit-text-fill-color:var(--x-color)}.cell.cell--o:disabled{color:var(--o-color);-webkit-text-fill-color:var(--o-color)}.cell--dim{opacity:.45;filter:grayscale(.15)}.cell--x{color:var(--x-color);font-weight:700}.cell--o{color:var(--o-color);font-weight:700}.cell.cell--win{background:rgba(47,109,164,.28);box-shadow:inset 0 0 0 2px rgba(47,109,164,.65),0 6px 16px rgba(47,109,164,.25)}.panel{padding:18px;border-radius:18px;background:var(--panel);border:1px solid var(--border);box-shadow:var(--shadow);display:flex;flex-direction:column;gap:12px}.panel .status{margin-bottom:8px}.panel .status+.panel-title{border-top:1px solid var(--border);padding-top:12px;margin-top:4px}.panel-divider{width:100%;height:1px;background:var(--border);margin:4px 0 8px}.panel-title{font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);font-weight:600}.panel-row{display:flex;justify-content:space-between;align-items:center;gap:12px;font-size:.95rem;font-weight:600}.label{color:var(--muted);font-size:.85rem;text-transform:uppercase;letter-spacing:.08em}.panel-note{font-size:.85rem;color:var(--muted)}.site-footer{margin-top:auto;padding-top:16px;border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:.95rem;color:var(--muted)}.site-footer a{color:inherit;text-decoration:none;font-weight:600}.site-footer a:hover{text-decoration:underline}.footer-copy{font-weight:600;letter-spacing:.02em}@media (max-width:900px){.title{flex:1 1 auto;min-width:0;font-size:clamp(20px, 5vw, 36px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1}.top-actions{flex-shrink:0}.top{flex-wrap:nowrap;align-items:center;justify-content:space-between}.top-actions{gap:clamp(4px,1.6vw,12px);flex-wrap:nowrap}.top-actions #helpBtn,.top-actions #restartBtn,.top-actions .portal-link{padding:0;width:36px;height:36px;min-width:36px;border-radius:999px}.top-actions .theme-toggle{padding:0;width:36px;height:36px}.top-actions .control-icon,.top-actions .portal-icon{display:block}.top-actions .button-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.main{grid-template-columns:1fr}.board{width:min(90vmin,520px)}.panel{width:min(90vmin,520px);margin:0 auto}}@media (max-width:640px){.app{padding:24px 18px 48px}.board{width:min(92vmin,420px)}.site-footer{flex-direction:column;align-items:flex-start}}@media (hover:hover){.top-actions .portal-link,.top-actions button{position:relative}.top-actions .button-label{position:absolute;left:50%;bottom:calc(100% + 8px);transform:translate(-50%,4px);opacity:0;pointer-events:none;width:auto;height:auto;margin:0;overflow:visible;clip:auto;padding:6px 10px;border-radius:999px;background:var(--ink);color:var(--paper-3);font-size:11px;font-weight:600;letter-spacing:.04em;white-space:nowrap;box-shadow:0 8px 18px rgba(0,0,0,.18);transition:opacity .15s ease,transform .15s ease;z-index:60}.top-actions .portal-link:focus-visible .button-label,.top-actions .portal-link:hover .button-label,.top-actions button:focus-visible .button-label,.top-actions button:hover .button-label{opacity:1;transform:translate(-50%,0)}.top-actions .theme-toggle::after{content:attr(aria-label);position:absolute;left:50%;bottom:calc(100% + 8px);transform:translate(-50%,4px);opacity:0;pointer-events:none;padding:6px 10px;border-radius:999px;background:var(--ink);color:var(--paper-3);font-size:11px;font-weight:600;letter-spacing:.04em;white-space:nowrap;box-shadow:0 8px 18px rgba(0,0,0,.18);transition:opacity .15s ease,transform .15s ease;z-index:60}.top-actions .theme-toggle:focus-visible::after,.top-actions .theme-toggle:hover::after{opacity:1;transform:translate(-50%,0)}}@media (hover:hover) and (max-height:700px),(hover:hover) and (max-width:900px){.top-actions .button-label,.top-actions .theme-toggle::after{bottom:auto;top:calc(100% + 8px);transform:translate(-50%,-4px)}}body[data-theme=dark] .cookie-banner,html[data-theme=dark] .cookie-banner{background:rgba(38,34,30,.92);border-color:rgba(245,239,230,.12);color:var(--ink)}body[data-theme=dark] .cookie-accept,html[data-theme=dark] .cookie-accept{background:#f2e8db;color:#1f1a14}body[data-theme=dark] .cookie-reject,html[data-theme=dark] .cookie-reject{background:rgba(255,255,255,.18);color:#f2e8db}.cookie-banner{position:fixed;left:16px;right:16px;bottom:16px;z-index:999;display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between;padding:14px 16px;border-radius:14px;background:rgba(255,255,255,.92);border:1px solid rgba(31,26,20,.12);box-shadow:0 12px 30px -18px rgba(31,26,20,.35);color:var(--ink,#1f1a14);font-size:.95rem;line-height:1.4}.cookie-text{margin:0;flex:1 1 320px}.cookie-text a{color:inherit;text-decoration:underline}.cookie-actions{display:flex;gap:8px;flex:0 0 auto}.cookie-btn{border:0;border-radius:999px;padding:8px 14px;font-weight:600;cursor:pointer;font-size:.9rem}.cookie-accept{background:#1f1a14;color:#fff}.cookie-reject{background:rgba(31,26,20,.08);color:#1f1a14}@media (max-width:600px){.cookie-banner{left:12px;right:12px;bottom:12px}.cookie-actions{width:100%;justify-content:flex-start}}