:root{--bg:#fbfbf8;--ink:#111;--ink-soft:#56564f;--ink-muted:#74746c;--line:#deded6;--line-strong:#c9c7bc;--surface:#f5f5f0;--surface-raised:#fff;--accent:#006039;--accent-warm:#a37e2c;--focus:#2d6cdf;--shadow-soft:0 24px 70px rgba(17,17,17,0.08);--container:min(1400px,92vw);--content-offset:clamp(0.2rem,7.5vw,7rem);--game-gap:clamp(0.42rem,1.1vh,0.72rem);--game-width:max(320px,min(calc(var(--container) - 2 * var(--content-offset)),calc((100svh - 11.5rem) * 5 / 4),1100px))}@font-face{font-family:"Geist";font-style:normal;font-weight:400;font-display:swap;src:url("assets/fonts/geist-400.woff2") format("woff2"),url("assets/fonts/geist-400.ttf") format("truetype")}@font-face{font-family:"Geist";font-style:normal;font-weight:700;font-display:swap;src:url("assets/fonts/geist-700.woff2") format("woff2"),url("assets/fonts/geist-700.ttf") format("truetype")}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--ink);font-family:"Geist",Arial,"Helvetica Neue",Helvetica,sans-serif;line-height:1.5;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}button,a{font:inherit}img{-webkit-user-drag:none;user-select:none;-webkit-touch-callout:none}.skip-link{position:fixed;top:.6rem;left:.6rem;z-index:200;padding:.55rem .75rem;border-radius:8px;background:#111;color:#fff;text-decoration:none;transform:translateY(-180%);transition:transform 140ms ease}.skip-link:focus-visible{transform:translateY(0)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.corner-logo{position:fixed;top:clamp(1.2rem,3.4vw,2.4rem);right:max(clamp(0.9rem,2vw,1.2rem),calc((100vw - var(--game-width)) / 2));z-index:20;display:block;width:clamp(58px,7.8vw,104px);text-decoration:none;transition:opacity 180ms ease,visibility 180ms ease}.corner-logo img{display:block;width:100%;height:auto}.game-reset{color:var(--ink-soft);background:transparent;border:0;padding:0;font:inherit;cursor:pointer;transition:color 180ms ease}.game-reset:hover{color:var(--ink)}.game-reset:focus-visible{color:var(--ink);outline:0;text-decoration:underline;text-underline-offset:.25em}.game-reset.is-hidden{display:none}.player-options button{min-height:2.45rem;border:1px solid var(--line);border-radius:6px;padding:.55rem .75rem;background:var(--surface-raised);color:var(--ink);cursor:pointer}.player-options button:hover,.player-options button:focus-visible{border-color:var(--ink);outline:0}.player-options button.is-recommended{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}.online-start{background:transparent;border:0;padding:0;margin-left:auto;color:var(--ink-soft);font:inherit;cursor:pointer;transition:color 180ms ease}.online-start:hover,.online-start:focus-visible{color:var(--ink);outline:0}.online-start:focus-visible{text-decoration:underline;text-underline-offset:.25em}.online-setup-dialog,.share-dialog{border:1px solid var(--line);border-radius:8px;padding:0;background:var(--surface-raised);color:var(--ink);max-width:min(520px,92vw);width:100%;font-family:inherit}.online-setup-dialog::backdrop,.share-dialog::backdrop{background:rgba(17,17,17,0.42);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.online-setup-form,.share-stage{padding:clamp(1.2rem,3vw,1.8rem);display:flex;flex-direction:column;gap:clamp(0.7rem,1.8vw,1.1rem)}.online-setup-dialog h2,.share-dialog h2{margin:0;font-size:clamp(1.2rem,2.6vw,1.55rem);font-weight:700;letter-spacing:-.01em}.online-setup-hint,.share-sub{margin:0;color:var(--ink-soft);line-height:1.45}.online-setup-steps{margin:0;padding-left:1.25rem;display:flex;flex-direction:column;gap:.35rem;color:var(--ink-soft);font-size:.92rem;line-height:1.45}.online-setup-steps li::marker{color:var(--ink);font-weight:700}.online-setup-count{border:0;padding:0;margin:0;display:flex;flex-direction:column;gap:.5rem}.online-setup-count legend{padding:0;color:var(--ink-soft)}.online-setup-count-options{display:flex;gap:.5rem}.online-setup-count-options button{flex:1;min-height:2.6rem;border:1px solid var(--line);border-radius:6px;padding:.55rem .75rem;background:var(--surface-raised);color:var(--ink);font-weight:700;cursor:pointer;transition:border-color 180ms ease}.online-setup-count-options button.is-active,.online-setup-count-options button:hover,.online-setup-count-options button:focus-visible{border-color:var(--ink);outline:0}.online-setup-names{display:flex;flex-direction:column;gap:.55rem}.online-setup-names label{display:flex;flex-direction:column;gap:.25rem;font-size:.92rem;color:var(--ink-soft)}.online-setup-names input,.share-url-label input{min-height:2.4rem;padding:.45rem .65rem;border:1px solid var(--line);border-radius:6px;background:var(--surface-raised);color:var(--ink);font:inherit}.online-setup-names input:focus-visible,.share-url-label input:focus-visible{outline:2px solid var(--focus);outline-offset:1px;border-color:var(--ink)}.online-setup-actions,.share-actions{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.online-setup-actions button,.share-actions button{min-height:2.4rem;padding:.5rem .9rem;border:1px solid var(--line);border-radius:6px;background:var(--surface-raised);color:var(--ink);font:inherit;cursor:pointer;transition:border-color 180ms ease,background 180ms ease}.online-setup-actions button:hover,.online-setup-actions button:focus-visible,.share-actions button:hover,.share-actions button:focus-visible{border-color:var(--ink);outline:0}.online-setup-actions .online-setup-confirm,.share-actions .share-copy{background:var(--ink);color:var(--bg);border-color:var(--ink)}.online-setup-actions .online-setup-confirm:hover,.online-setup-actions .online-setup-confirm:focus-visible,.share-actions .share-copy:hover,.share-actions .share-copy:focus-visible{background:#000;border-color:#000;color:#fff}.share-url-label{display:block}.share-url-label input{width:100%;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.85rem}.share-qr{align-self:center;width:clamp(140px,38vw,200px);aspect-ratio:1 / 1;padding:.45rem;background:#fff;border:1px solid var(--line);border-radius:6px;display:flex;align-items:center;justify-content:center}.share-qr[hidden]{display:none}.share-qr svg{width:100%;height:100%;display:block;image-rendering:pixelated}.share-native[hidden]{display:none}@media(max-width:720px){.player-select{flex-wrap:wrap}.online-start{margin-left:0;margin-top:.4rem;flex-basis:100%;text-align:left}}.game-main{width:var(--container);min-height:100svh;margin-inline:auto;padding:clamp(1.2rem,3.4vw,2.4rem) 0 clamp(0.7rem,1.8vh,1.2rem);display:flex}.game-main:focus{outline:0}.game-main:focus-visible{outline:2px solid var(--focus);outline-offset:-4px}.game-shell{width:100%;display:flex;flex-direction:column;gap:var(--game-gap);padding-inline:var(--content-offset)}.game-topline{width:var(--game-width);margin-inline:auto;min-height:1.8rem;display:flex;align-items:center;justify-content:flex-start;gap:1rem}.game-state{margin:0;min-width:0;flex:1 1 auto;color:var(--ink-soft);line-height:1.35}.player-select,.scorebar{width:var(--game-width);margin-inline:auto;min-height:2.8rem;display:flex;align-items:center;justify-content:flex-start;gap:1rem;padding-block:.42rem}.player-options{display:flex;gap:.45rem}.player-options button{width:3.1rem;padding-inline:.4rem;font-weight:700}.player-select.is-hidden{display:none}.scorebar{display:none}.scorebar.is-visible{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:clamp(0.28rem,0.9vw,0.6rem)}.score-item{display:flex;align-items:center;gap:.45rem;min-height:2rem;padding:.32rem .58rem;border:1px solid var(--line);border-radius:6px;background:var(--surface-raised);color:var(--ink-soft)}.score-item.is-active{border-color:var(--ink);color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}.score-label{white-space:nowrap}.score-value{font-weight:700;white-space:nowrap}.score-item-turns{font-variant-numeric:tabular-nums}.board-wrap{flex:1;min-height:0;display:grid;place-items:start center}.memory-board{width:var(--game-width);display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:clamp(0.28rem,0.9vw,0.6rem)}.memory-card{position:relative;display:block;width:100%;aspect-ratio:1 / 1;border:1px solid var(--line);border-radius:6px;padding:0;background:var(--surface);cursor:pointer;perspective:900px}.memory-card:focus-visible{outline:2px solid var(--focus);outline-offset:3px}.memory-card:disabled{cursor:default}.card-inner{position:absolute;inset:0;border-radius:inherit;transform-style:preserve-3d;transition:transform 220ms ease}.memory-card.is-open .card-inner,.memory-card.is-matched .card-inner{transform:rotateY(180deg)}.card-face{position:absolute;inset:0;display:grid;place-items:center;padding:clamp(0.35rem,1.1vw,0.7rem);border-radius:inherit;overflow:hidden;backface-visibility:hidden}.card-back{background:var(--surface-raised)}.card-face.card-front{background:var(--surface);padding:0;transform:rotateY(180deg)}.card-back img{width:min(76%,9rem);height:auto;object-fit:contain}.card-front img{width:100%;height:100%;object-fit:contain;object-position:center center}.memory-card.is-matched{border-color:var(--ink)}.memory-card.is-matched .card-front{background:var(--surface-raised)}.memory-card.is-mismatch{border-color:#c2410c;cursor:not-allowed;animation:card-shake 320ms ease}@keyframes card-shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-3px)}50%{transform:translateX(3px)}75%{transform:translateX(-2px)}}.game-result{position:fixed;inset:0;z-index:250;display:none;align-items:center;justify-content:center;background:rgba(255,255,255,0.92);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);padding:clamp(1.5rem,6vw,4rem);overflow:hidden}.game-result.is-visible{display:flex;animation:result-fade-in 320ms ease}.game-result.is-fading-out{animation:result-fade-out 300ms ease forwards}@keyframes result-fade-in{from{opacity:0}to{opacity:1}}@keyframes result-fade-out{from{opacity:1}to{opacity:0}}.result-stage{display:flex;flex-direction:column;gap:clamp(1rem,3vw,2rem);align-items:flex-start;text-align:left;animation:result-scale-in 380ms cubic-bezier(0.16,1,0.3,1) 60ms backwards}@keyframes result-scale-in{from{transform:scale(0.96);opacity:0}to{transform:scale(1);opacity:1}}.result-title{margin:0;font-weight:700;font-size:clamp(2.6rem,12vw,8.5rem);line-height:.95;letter-spacing:-.02em;color:var(--ink)}.result-line{display:block}.result-line:empty{display:none}.result-line-2{padding-left:1ch}.result-line-3{padding-left:2ch}.result-stats{margin:0;font-size:clamp(1rem,2vw,1.4rem);color:var(--ink-soft);font-variant-numeric:tabular-nums}.result-record{margin:0;font-size:clamp(0.9rem,1.6vw,1.05rem);color:var(--ink);font-weight:700;font-variant-numeric:tabular-nums}.result-record[hidden]{display:none}.confetti{position:absolute;inset:0;pointer-events:none;overflow:hidden}.confetti-piece{position:absolute;top:-10%;left:var(--confetti-x);width:var(--confetti-size);height:var(--confetti-size);background:var(--confetti-color);border-radius:1px;transform:translateX(-50%) rotate(var(--confetti-rotate-start));animation:confetti-fall var(--confetti-duration) cubic-bezier(0.32,0.72,0.4,1) var(--confetti-delay) forwards;opacity:.9}@keyframes confetti-fall{0%{top:-10%;transform:translateX(-50%) rotate(var(--confetti-rotate-start));opacity:.95}100%{top:110%;transform:translateX(calc(-50% + var(--confetti-drift))) rotate(var(--confetti-rotate-end));opacity:0}}@media(max-width:760px){:root{--content-offset:clamp(0rem,3vw,1rem)}.corner-logo{top:clamp(0.9rem,4.5vw,1.4rem);right:max(clamp(0.6rem,2.5vw,0.9rem),calc((100vw - var(--container)) / 2 + var(--content-offset)));width:clamp(46px,13vw,65px)}.game-main{min-height:auto;padding-top:.9rem}.game-topline{min-height:1.6rem;gap:.6rem}.player-select,.scorebar{flex-wrap:wrap;gap:.4rem .5rem}.scorebar.is-visible{display:flex;flex-wrap:wrap;gap:.4rem .5rem}.memory-board{width:100%;gap:clamp(0.28rem,1.6vw,0.45rem)}.result-line-2{padding-left:.7ch}.result-line-3{padding-left:1.4ch}.card-face{padding:clamp(0.22rem,1.5vw,0.38rem)}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none !important;transition:none !important;scroll-behavior:auto !important}}.cookie-banner{position:fixed;left:clamp(0.8rem,3vw,1.5rem);right:clamp(0.8rem,3vw,1.5rem);bottom:clamp(0.8rem,3vw,1.5rem);z-index:240;max-width:540px;margin-left:auto;padding:clamp(1rem,2.2vw,1.4rem) clamp(1.1rem,2.6vw,1.6rem);background:var(--surface-raised);border:1px solid var(--line);border-radius:8px;box-shadow:0 24px 70px rgba(17,17,17,0.16);display:flex;flex-direction:column;gap:.55rem;font-size:.95rem;line-height:1.45;color:var(--ink)}.cookie-banner[hidden]{display:none}.cookie-banner-title{margin:0;font-size:1.05rem;font-weight:700}.cookie-banner-body,.cookie-banner-more{margin:0;color:var(--ink-soft)}.cookie-banner-more a{color:inherit;text-decoration:underline;text-underline-offset:.2em}.cookie-banner-actions{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end;margin-top:.25rem}.cookie-banner-actions button{min-height:2.45rem;min-width:clamp(7rem,18vw,9rem);padding:.55rem .95rem;border:1px solid var(--ink);border-radius:6px;font:inherit;font-weight:600;cursor:pointer;transition:border-color 180ms ease,background 180ms ease,color 180ms ease}.cookie-banner-decline{background:var(--surface-raised);color:var(--ink)}.cookie-banner-decline:hover,.cookie-banner-decline:focus-visible{background:var(--surface);outline:0}.cookie-banner-accept{background:var(--ink);color:var(--bg);border-color:var(--ink)}.cookie-banner-accept:hover,.cookie-banner-accept:focus-visible{background:#000;border-color:#000;outline:0}@media(max-width:720px){.cookie-banner{max-width:none;margin-left:0}}@media(prefers-color-scheme:dark){:root{--bg:#141512;--ink:#eeeeea;--ink-soft:#b0afa6;--ink-muted:#8e8d84;--line:#303127;--line-strong:#464536;--surface:#20221d;--surface-raised:#1b1c18;--accent:#c2a15a;--shadow-soft:0 24px 70px rgba(0,0,0,0.34)}.skip-link{background:#ededed;color:#111}.player-options button,.online-setup-dialog,.share-dialog,.online-setup-count-options button,.online-setup-names input,.share-url-label input,.online-setup-actions button,.share-actions button,.score-item,.card-back,.memory-card.is-matched .card-front,.cookie-banner{background:var(--surface-raised)}.player-options button:hover,.player-options button:focus-visible,.player-options button.is-recommended,.online-setup-count-options button:hover,.online-setup-count-options button:focus-visible,.online-setup-count-options button.is-active,.online-setup-actions button:hover,.online-setup-actions button:focus-visible,.share-actions button:hover,.share-actions button:focus-visible,.online-setup-names input:focus-visible,.share-url-label input:focus-visible,.score-item.is-active,.memory-card.is-matched{border-color:var(--ink)}.player-options button.is-recommended{box-shadow:inset 0 0 0 1px var(--ink)}.online-setup-actions .online-setup-confirm,.share-actions .share-copy{background:#ededed;color:#111;border-color:#ededed}.online-setup-actions .online-setup-confirm:hover,.online-setup-actions .online-setup-confirm:focus-visible,.share-actions .share-copy:hover,.share-actions .share-copy:focus-visible{background:#fff;border-color:#fff;color:#111}.share-qr{background:#fff}.online-setup-dialog::backdrop,.share-dialog::backdrop{background:rgba(0,0,0,0.55)}.game-result{background:rgba(21,22,26,0.92)}.cookie-banner{box-shadow:0 18px 50px rgba(0,0,0,0.55)}.cookie-banner-decline{background:var(--surface);color:var(--ink);border-color:#4a4d57}.cookie-banner-decline:hover,.cookie-banner-decline:focus-visible{background:#262931}.cookie-banner-accept{background:#ededed;color:#111;border-color:#ededed}.cookie-banner-accept:hover,.cookie-banner-accept:focus-visible{background:#fff;border-color:#fff}}