:root{--accent:#A16207;--tint:color-mix(in oklab,var(--accent) 7%,var(--surface));--tint2:color-mix(in oklab,var(--accent) 18%,var(--surface));--selc:color-mix(in oklab,var(--accent) 30%,var(--surface));--ink:#3b3833;--grid:#dcd9d2;--bad:#c2410c;--flag:#c2410c}
@media (prefers-color-scheme:dark){:root{--accent:#FACC15;--accent-ink:#1f1a05;--ink:#b9b5ac;--grid:#34332f;--bad:#fb923c;--flag:#fb923c;--tint:color-mix(in oklab,var(--accent) 6%,var(--surface));--tint2:color-mix(in oklab,var(--accent) 16%,var(--surface));--selc:color-mix(in oklab,var(--accent) 26%,var(--surface))}}

/* shared game chrome */
.g-top{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 16px;margin-bottom:14px}
.g-title{display:flex;flex-direction:column;line-height:1.3}.g-title span{font-size:14px;color:var(--muted)}
.g-meta{display:flex;align-items:center;gap:14px;font-size:15px;color:var(--muted);font-variant-numeric:tabular-nums}
.g-meta b{color:var(--text)}
.time{font-weight:700;color:var(--text);min-width:3.5ch;text-align:right}
.iconbtn{display:inline-grid;place-items:center;width:40px;height:40px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--text);cursor:pointer}
.iconbtn:hover{background:var(--surface-2)}
.g-main{display:grid;grid-template-columns:minmax(0,520px) minmax(240px,300px);gap:28px;align-items:start;justify-content:start}
@media (max-width:860px){.g-main{grid-template-columns:minmax(0,1fr);gap:16px}}
.board-wrap,.tw-wrap{position:relative}
.g-over{position:absolute;inset:0;display:grid;place-items:center;background:color-mix(in oklab,var(--bg) 78%,transparent);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);border-radius:var(--r-panel);z-index:5;padding:16px;text-align:center}
.g-over .center{display:grid;justify-items:center;gap:6px;max-width:360px}
.g-over h2{margin:0;font-size:26px}
.g-over p{margin:0;color:var(--muted)}
.g-over .row{justify-content:center;margin-top:12px}
.kicker{font-size:13px;font-weight:700;letter-spacing:.04em;color:var(--accent)!important}
.bigt{font-size:40px;font-weight:800;letter-spacing:-.03em;color:var(--text)!important;font-variant-numeric:tabular-nums;line-height:1.2}
.g-note{font-size:13px;color:var(--muted);margin:14px 0 0}
.g-msg{min-height:26px;margin:12px 0 0;font-weight:600}
.g-actions{margin-top:16px}
.linkbtn{font:inherit;font-weight:700;color:var(--accent);background:none;border:0;padding:0 4px;cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.check{display:flex;align-items:center;gap:8px;font-weight:500;font-size:14px;margin:14px 0 0;cursor:pointer}
.check input{width:18px;height:18px;accent-color:var(--accent)}
.spinner{width:28px;height:28px;border-radius:50%;border:3px solid var(--line);border-top-color:var(--accent);animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* sudoku */
.sd-board{display:grid;grid-template-columns:repeat(9,1fr);aspect-ratio:1;border:2px solid var(--ink);border-radius:6px;overflow:hidden;background:var(--surface);user-select:none;-webkit-user-select:none;transition:filter .2s}
.sd-board.blur{filter:blur(6px)}
.c{position:relative;display:grid;place-items:center;border:0;border-right:1px solid var(--grid);border-bottom:1px solid var(--grid);background:var(--surface);color:var(--text);font:inherit;font-size:clamp(18px,4.6vw,28px);padding:0;cursor:pointer;font-variant-numeric:tabular-nums;min-width:0;min-height:0}
.c:nth-child(9n){border-right:0}.c:nth-child(n+73){border-bottom:0}
.c.br{border-right:2px solid var(--ink)}.c.bb{border-bottom:2px solid var(--ink)}
.c:focus-visible{outline:2px solid var(--accent);outline-offset:-3px}
.c.g{font-weight:650}
.c.u{color:var(--accent);font-weight:600}
.c.bad{color:var(--bad);font-weight:600;background:color-mix(in oklab,var(--bad) 10%,var(--surface))}
.c.peer{background:var(--tint)}
.c.same{background:var(--tint2)}
.c.sel{background:var(--selc)}
.nt{position:absolute;inset:2px;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);font-size:clamp(8px,1.9vw,12px);line-height:1;color:var(--muted)}
.nt i{font-style:normal;display:grid;place-items:center}
.nt i.hl{color:var(--accent);font-weight:800}
.c.shake .v{display:inline-block;animation:shake .32s}
@keyframes shake{25%{transform:translateX(-3px)}75%{transform:translateX(3px)}}
.c.pop .v{display:inline-block;animation:pop .35s cubic-bezier(.16,1,.3,1)}
@keyframes pop{from{transform:scale(.4);opacity:0}}
.c.wave{animation:wave .5s}
@keyframes wave{50%{background:var(--selc)}}
.tools{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-bottom:12px}
.tool{position:relative;display:flex;flex-direction:column;align-items:center;gap:4px;font:inherit;font-size:13px;color:var(--muted);background:none;border:0;border-radius:var(--r-ctl);padding:8px 2px;cursor:pointer}
.tool svg{width:26px;height:26px;padding:7px;box-sizing:content-box;border-radius:999px;background:var(--surface-2);color:var(--text)}
.tool:hover svg{background:var(--tint2)}
.tool em{position:absolute;top:2px;right:calc(50% - 30px);font-style:normal;font-size:10px;font-weight:800;background:var(--line);color:var(--muted);border-radius:999px;padding:1px 5px}
.tool[aria-pressed=true]{color:var(--accent)}.tool[aria-pressed=true] em{background:var(--accent);color:var(--accent-ink)}
.pad{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:14px}
.pad button{position:relative;font:inherit;font-size:30px;font-weight:600;color:var(--accent);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-ctl);aspect-ratio:1.25;cursor:pointer;font-variant-numeric:tabular-nums}
.pad button:hover{background:var(--tint)}
.pad button small{position:absolute;right:7px;top:3px;font-size:12px;color:var(--muted);font-weight:500}
.pad button.done{opacity:.3}
.g-ctl .btn{width:100%}
@media (max-width:860px){.pad{grid-template-columns:repeat(9,1fr);gap:4px}.pad button{aspect-ratio:auto;height:56px;font-size:26px;padding:0}.pad button small{right:3px;top:1px;font-size:10px}.tools{margin-bottom:8px}}

/* minesweeper */
.ms-custom{display:flex;flex-wrap:wrap;gap:10px;align-items:end;margin-bottom:12px}
.ms-custom label{font-size:13px;margin:0;display:grid;gap:4px}.ms-custom input{width:84px;min-height:38px;padding:6px 10px}
.ms-bar{display:flex;align-items:center;justify-content:space-between;max-width:560px;margin-bottom:10px}
.ms-num{font-variant-numeric:tabular-nums;font-weight:800;font-size:22px;min-width:3.2ch;padding:2px 10px;border-radius:8px;background:var(--surface-2);text-align:center}
.ms-face{width:44px;height:44px}
.chip[aria-pressed]{gap:6px}.chip svg{width:18px;height:18px}.chip[aria-pressed=true]{background:var(--tint2);color:var(--text);font-weight:700}
.ms-scroll{overflow:auto;max-width:100%;padding:2px;-webkit-overflow-scrolling:touch}
.ms-board{display:grid;gap:2px;width:max-content;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;touch-action:manipulation}
.mc{width:var(--cs);height:var(--cs);border:0;padding:0;border-radius:5px;background:color-mix(in oklab,var(--accent) 22%,var(--surface-2));box-shadow:inset 0 -2px 0 color-mix(in oklab,var(--text) 14%,transparent);font:inherit;font-weight:800;font-size:calc(var(--cs) * .56);display:grid;place-items:center;cursor:pointer;color:var(--text);line-height:1}
.mc:hover{filter:brightness(1.05)}
.mc.peek{background:var(--surface-2)}
.mc.o{background:var(--surface);box-shadow:inset 0 0 0 1px var(--line);cursor:default}
.mc svg{width:72%;height:72%}
.mc.f{color:var(--text)}
.mc.m{background:var(--surface-2);box-shadow:none}.mc.boom{background:var(--bad);color:#fff}
.mc.wrong{position:relative;opacity:.6}.mc.wrong::after{content:"";position:absolute;inset:20%;background:linear-gradient(45deg,transparent 45%,var(--bad) 45% 55%,transparent 55%)}
.n1{color:#2563eb}.n2{color:#15803d}.n3{color:#dc2626}.n4{color:#6d28d9}.n5{color:#9a3412}.n6{color:#0e7490}.n7{color:#1c1b19}.n8{color:#71717a}
@media (prefers-color-scheme:dark){.n1{color:#60a5fa}.n2{color:#4ade80}.n3{color:#f87171}.n4{color:#c4b5fd}.n5{color:#fdba74}.n6{color:#67e8f9}.n7{color:#e7e5e4}.n8{color:#a1a1aa}}
.ms-board.cleared .mc.o{animation:wave .6s}

/* 2048 and sliding share the absolute tile board */
.tw-scores{display:flex;gap:8px}
.tw-scores div{position:relative;background:var(--surface-2);border-radius:var(--r-ctl);padding:4px 14px;text-align:center;min-width:84px}
.tw-scores span{display:block;font-size:12px;color:var(--muted)}.tw-scores b{font-size:20px;font-variant-numeric:tabular-nums}
.tw-gain{position:absolute;left:0;right:0;top:0;font-weight:800;color:var(--accent);animation:gain .7s forwards;pointer-events:none}
@keyframes gain{to{transform:translateY(-28px);opacity:0}}
.tw-wrap{max-width:500px}
#g2048 .g-top,#sliding .g-top,#memory .g-top{max-width:500px}
.tw-board,.sl-board{--gap:10px;position:relative;aspect-ratio:1;background:color-mix(in oklab,var(--text) 14%,var(--surface-2));border-radius:var(--r-panel);padding:var(--gap);touch-action:none;user-select:none;-webkit-user-select:none;outline:none}
.tw-board:focus-visible{box-shadow:0 0 0 2px var(--accent)}
@media (max-width:600px){.tw-board,.sl-board{--gap:7px}}
.tw-bg{display:grid;grid-template-columns:repeat(var(--n),1fr);gap:var(--gap);height:100%}
.tw-bg i{background:color-mix(in oklab,var(--surface) 70%,transparent);border-radius:8px}
.tw-tiles{position:absolute;inset:var(--gap)}
.tw-t,.sl-t{position:absolute;left:0;top:0;width:calc((100% - (var(--n) - 1) * var(--gap)) / var(--n));height:calc((100% - (var(--n) - 1) * var(--gap)) / var(--n));transform:translate(calc(var(--c) * (100% + var(--gap))),calc(var(--r) * (100% + var(--gap))));transition:transform .1s ease-in-out;display:grid;place-items:center;border-radius:8px;font-weight:800;font-variant-numeric:tabular-nums}
.tw-t{font-size:calc(min(500px,100vw - 32px) / var(--n) * .36);background:#f1eee6;color:#3b3833}
.tw-t.long{font-size:calc(min(500px,100vw - 32px) / var(--n) * .27)}
.tw-t[data-v="4"]{background:#e6dcc4}.tw-t[data-v="8"]{background:#f6d58e}.tw-t[data-v="16"]{background:#f2b84b}.tw-t[data-v="32"]{background:#e8913a;color:#fff}.tw-t[data-v="64"]{background:#d2622a;color:#fff}
.tw-t[data-v="128"]{background:#7fb7a4;color:#fff}.tw-t[data-v="256"]{background:#4e9a86;color:#fff}.tw-t[data-v="512"]{background:#2f7e6e;color:#fff}.tw-t[data-v="1024"]{background:#3d5a98;color:#fff}.tw-t[data-v="2048"]{background:#2b3f7a;color:#fff;box-shadow:0 0 0 3px #f6d58e}.tw-t[data-v="4096"],.tw-t[data-v=big]{background:#1c1b19;color:#f6d58e}
.tw-t.new{animation:tnew .16s .1s backwards}
@keyframes tnew{from{transform:translate(calc(var(--c) * (100% + var(--gap))),calc(var(--r) * (100% + var(--gap)))) scale(0)}}
.tw-t.merge{animation:tmerge .2s backwards;z-index:2}
@keyframes tmerge{0%{transform:translate(calc(var(--c) * (100% + var(--gap))),calc(var(--r) * (100% + var(--gap)))) scale(.6)}60%{transform:translate(calc(var(--c) * (100% + var(--gap))),calc(var(--r) * (100% + var(--gap)))) scale(1.12)}}
.sl-t{border:0;background:var(--surface);color:var(--text);font:inherit;font-weight:800;font-size:calc(min(500px,100vw - 32px) / var(--n) * .34);cursor:pointer;box-shadow:inset 0 -3px 0 color-mix(in oklab,var(--text) 12%,transparent)}
.sl-t.ok{background:var(--tint2)}
.sl-t:hover{filter:brightness(1.04)}

/* number baseball */
.bb{display:grid;grid-template-columns:minmax(0,420px) minmax(0,1fr);gap:28px;align-items:start}
@media (max-width:760px){.bb{grid-template-columns:minmax(0,1fr)}}
.bb-slots{display:flex;gap:10px}
.bb-slots span{display:grid;place-items:center;width:64px;height:76px;border-radius:12px;border:2px solid var(--line);background:var(--surface);font-size:38px;font-weight:800;font-variant-numeric:tabular-nums}
.bb-slots span.on{border-color:var(--accent)}
.bb-slots span.win{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.bb-slots.pop span{animation:pop .4s cubic-bezier(.16,1,.3,1) backwards}.bb-slots.pop span:nth-child(2){animation-delay:.06s}.bb-slots.pop span:nth-child(3){animation-delay:.12s}.bb-slots.pop span:nth-child(4){animation-delay:.18s}
.bb-keys{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:14px;max-width:340px}
.bb-keys button{font:inherit;font-size:24px;font-weight:700;height:56px;border-radius:var(--r-ctl);border:1px solid var(--line);background:var(--surface);color:var(--text);cursor:pointer}
.bb-keys button:hover{background:var(--tint)}
.bb-keys .ok{background:var(--accent);color:var(--accent-ink);border-color:var(--accent);font-size:17px}
.bb-keys button:disabled{opacity:.4;cursor:default}
.bb-note{margin-top:18px}.bb-note .label{font-size:13px;color:var(--muted);font-weight:500}
.bb-memo{display:grid;grid-template-columns:repeat(10,1fr);gap:4px;max-width:420px}
.bb-memo button{font:inherit;font-weight:700;height:40px;border-radius:8px;border:1px solid var(--line);background:var(--surface);color:var(--text);cursor:pointer;padding:0}
.bb-memo button.x{color:var(--muted);text-decoration:line-through;background:var(--surface-2);opacity:.6}
.bb-memo button.y{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}
.bb-log{list-style:none;margin:0;padding:0;display:grid;gap:6px;max-height:560px;overflow:auto}
.bb-log li{display:grid;grid-template-columns:2.4em 1fr auto;align-items:center;gap:10px;padding:10px 14px;border-radius:var(--r-ctl);background:var(--surface);border:1px solid var(--line);font-variant-numeric:tabular-nums}
.bb-log li.empty{display:block;color:var(--muted);font-size:14px;border-style:dashed}
.bb-log .n{color:var(--muted);font-size:13px}.bb-log .d{font-size:22px;font-weight:800;letter-spacing:.06em}
.bb-log .r{display:flex;gap:6px}.bb-log em{font-style:normal;font-weight:800;font-size:14px;padding:3px 9px;border-radius:999px}
.bb-log .s{background:var(--accent);color:var(--accent-ink)}.bb-log .b{background:var(--tint2);color:var(--text)}.bb-log .out{background:var(--surface-2);color:var(--muted)}

/* memory */
.mm-board{display:grid;grid-template-columns:repeat(var(--cols),1fr);gap:8px;max-width:500px}
.mm-c{position:relative;aspect-ratio:1;border:0;padding:0;background:none;cursor:pointer;perspective:600px}
.mm-c span{position:absolute;inset:0;border-radius:10px;backface-visibility:hidden;-webkit-backface-visibility:hidden;transition:transform .32s cubic-bezier(.16,1,.3,1);display:grid;place-items:center}
.mm-c .back{background:repeating-linear-gradient(45deg,var(--accent) 0 6px,color-mix(in oklab,var(--accent) 80%,#000) 6px 12px);box-shadow:inset 0 0 0 3px color-mix(in oklab,var(--surface) 50%,transparent)}
.mm-c .face{background:var(--surface);border:1px solid var(--line);transform:rotateY(180deg);color:hsl(var(--h) 65% 46%)}
@media (prefers-color-scheme:dark){.mm-c .face{color:hsl(var(--h) 70% 62%)}}
.mm-c .face svg{width:58%;height:58%;fill:currentColor}
.mm-c.up .back{transform:rotateY(-180deg)}.mm-c.up .face{transform:rotateY(0)}
.mm-c.done .face{background:color-mix(in oklab,hsl(var(--h) 65% 50%) 12%,var(--surface));border-color:transparent}

/* game cards */
.games{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;padding:0;list-style:none;margin:0}
.games a{display:flex;gap:12px;align-items:center;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-panel);background:var(--surface);text-decoration:none}
.games a:hover{border-color:color-mix(in oklab,var(--accent) 50%,var(--line))}
.games a[aria-current]{border-color:var(--accent);background:var(--tint)}
.games i{display:grid;place-items:center;width:42px;height:42px;border-radius:12px;background:var(--tint2);color:var(--accent);font-style:normal;font-weight:800;flex:none;font-size:15px}
.games b{display:block}.games span{font-size:13px;color:var(--muted)}
.stats h2{margin-top:32px}
.stats .tablewrap{max-width:560px}
.diffs{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 6px}
