:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--ivory:#faf8ef;--cocoa:#776e65;--cocoa-deep:#5f574f;--cocoa-dark:#4f4842;--muted:#6f6256;--board:#bbada0;--card:#fffdf7;--line:#e4dacb;--field-line:#cfc2b1;--danger-bg:#fbe9e6;--danger-text:#8f2f24;--success-bg:#e9f1e4;--success-text:#365c2d;--tile-text:#2b2622;font-synthesis:none;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Noto Sans SC,sans-serif}*{box-sizing:border-box}html{background:var(--ivory);min-width:320px}body{background:var(--ivory);min-width:320px;min-height:100dvh;color:var(--cocoa);-webkit-font-smoothing:antialiased;margin:0;font-family:inherit;line-height:1.5}button,input{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}a{color:var(--muted);text-underline-offset:.18em}a:hover{color:var(--cocoa-deep)}:where(button,a,input,summary,[tabindex]):focus-visible{outline:3px solid var(--cocoa-deep);outline-offset:2px}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.game-shell{width:100%;max-width:480px;margin:0 auto;padding:28px 16px 40px}.game-view{width:100%}.game-header{text-align:center}.game-title{color:var(--cocoa-deep);letter-spacing:-.055em;margin:0;font-size:clamp(3.2rem,15vw,4.5rem);font-weight:800;line-height:.9}.game-tagline{color:var(--muted);letter-spacing:.02em;margin:10px 0 0;font-size:.92rem}.game-stats{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:16px 0 0;display:grid}.game-stat{text-align:center;background:#eee4da;border-radius:8px;min-width:0;padding:8px 6px}.game-stat dt{color:var(--cocoa-deep);letter-spacing:.08em;font-size:.78rem;font-weight:700}.game-stat dd{color:var(--cocoa-dark);font-variant-numeric:tabular-nums;overflow-wrap:anywhere;margin:2px 0 0;font-size:1.35rem;font-weight:800;line-height:1.15}.game-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin:16px 0;display:flex}.new-game-button{background:var(--cocoa);min-height:44px;color:var(--card);letter-spacing:.02em;border:0;border-radius:8px;padding:10px 20px;font-weight:700;transition:background-color .15s,transform .15s,box-shadow .15s;box-shadow:0 2px #5c544c}.new-game-button:hover:not(:disabled){background:#665e56}.new-game-button:active:not(:disabled){transform:translateY(1px);box-shadow:0 1px #5c544c}.save-area{flex-wrap:wrap;flex:180px;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.save-status{max-width:100%;color:var(--cocoa-deep);overflow-wrap:anywhere;background:#eee4da;border-radius:999px;margin:0;padding:6px 10px;font-size:.82rem;line-height:1.4}.retry-save-button{background:var(--card);min-height:36px;color:var(--cocoa-deep);border:1px solid #b7a99a;border-radius:8px;padding:6px 12px;font-size:.82rem;font-weight:700}.retry-save-button:hover:not(:disabled){background:#f5efe4}.board-area{width:100%;position:relative}.board{--board-gap:10px;--tile-slide-time:.13s;cursor:grab;gap:var(--board-gap);width:100%;padding:var(--board-gap);background:var(--board);touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;border-radius:10px;flex-direction:column;display:flex;position:relative;overflow:clip}.board[aria-disabled=true]{opacity:.72}.board:focus-visible{outline:4px solid var(--cocoa-deep);outline-offset:3px}.board-row{gap:var(--board-gap);grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.board-cell{aspect-ratio:1;background:#eee4da61;border-radius:6px;min-width:0;position:relative}.tile{color:var(--tile-text);font-variant-numeric:tabular-nums;border-radius:6px;justify-content:center;align-items:center;font-size:clamp(1.2rem,5.4vw,2.05rem);font-weight:800;line-height:1;display:flex;position:absolute;inset:0}.tile-2{color:var(--cocoa-deep);background:#eee4da}.tile-4{color:var(--cocoa-deep);background:#ede0c8}.tile-8{background:#f2b179}.tile-16{background:#f59563}.tile-32{background:#f67c5f}.tile-64{background:#f65e3b}.tile-128{background:#edcf72;font-size:clamp(1rem,4.5vw,1.65rem)}.tile-256{background:#edcc61;font-size:clamp(1rem,4.5vw,1.65rem)}.tile-512{background:#edc850;font-size:clamp(1rem,4.5vw,1.65rem)}.tile-1024{background:#edc53f;font-size:clamp(.86rem,3.9vw,1.4rem)}.tile-2048{background:#edc22e;font-size:clamp(.86rem,3.9vw,1.4rem);box-shadow:0 0 18px #edc22e8c}.tile-super{color:var(--card);background:#3c3a32;font-size:clamp(.78rem,3.5vw,1.25rem)}.board-overlay{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#faf8efcc;border-radius:10px;justify-content:center;align-items:center;padding:16px;animation:.18s ease-out overlay-in;display:flex;position:absolute;inset:0}.overlay-card{border:1px solid var(--line);background:var(--card);text-align:center;border-radius:12px;width:100%;max-width:300px;padding:20px 18px;box-shadow:0 12px 34px #776e6538}.overlay-card:focus{outline:none}.overlay-card h2{color:var(--cocoa-deep);margin:0 0 8px;font-size:1.5rem;line-height:1.25}.overlay-card p{color:var(--muted);margin:0 0 16px;font-size:.92rem;line-height:1.6}.overlay-action{background:var(--cocoa);width:100%;min-height:44px;color:var(--card);border:0;border-radius:8px;padding:10px 18px;font-weight:700}.overlay-action:hover:not(:disabled){background:#665e56}@keyframes overlay-in{0%{opacity:0;transform:scale(.985)}to{opacity:1;transform:scale(1)}}.auth-shell{width:100%;max-width:440px;margin:0 auto;padding:32px 16px 44px}.auth-card{background:var(--card);border:1px solid #e6dccd;border-radius:14px;padding:clamp(18px,5vw,28px);box-shadow:0 12px 34px #776e6517}.auth-title{color:var(--cocoa-deep);margin:0;font-size:clamp(1.75rem,7vw,2.25rem);line-height:1.2}.auth-hint{color:var(--muted);margin:8px 0 0;font-size:.92rem;line-height:1.6}.auth-notice{border:1px solid #0000;border-radius:8px;margin:16px 0 0;padding:10px 12px;font-size:.9rem;line-height:1.55}.auth-notice-error{background:var(--danger-bg);color:var(--danger-text);border-color:#f0c7c1}.auth-notice-success{background:var(--success-bg);color:var(--success-text);border-color:#c8ddbf}.auth-form{flex-direction:column;gap:14px;margin-top:18px;display:flex}.auth-field{flex-direction:column;gap:6px;min-width:0;display:flex}.auth-field>span{color:var(--cocoa-deep);font-size:.9rem;font-weight:700}.auth-field input{border:1px solid var(--field-line);width:100%;min-height:44px;color:var(--cocoa-dark);background:#fff;border-radius:8px;padding:10px 12px;font-size:1rem}.auth-field input:hover:not(:disabled){border-color:#b7a99a}.auth-field input:disabled{color:var(--muted);background:#f5f0e7}.auth-field-hint{color:var(--muted);font-size:.78rem;line-height:1.4}.auth-code-row{flex-wrap:wrap;align-items:flex-start;gap:8px;display:flex}.auth-code-row .auth-field{flex:150px}.auth-code-button{white-space:nowrap;flex:none;margin-top:27px}.auth-primary-button{background:var(--cocoa);min-height:46px;color:var(--card);border:0;border-radius:8px;padding:10px 18px;font-weight:700;transition:background-color .15s,transform .15s,box-shadow .15s;box-shadow:0 2px #5c544c}.auth-primary-button:hover:not(:disabled){background:#665e56}.auth-primary-button:active:not(:disabled){transform:translateY(1px);box-shadow:0 1px #5c544c}.auth-secondary-button{background:var(--card);min-height:44px;color:var(--cocoa-deep);border:1px solid #b7a99a;border-radius:8px;padding:8px 14px;font-weight:700}.auth-secondary-button:hover:not(:disabled){background:#f5efe4}.auth-text-button{min-height:36px;color:var(--muted);text-underline-offset:.18em;background:0 0;border:0;border-radius:6px;padding:6px;font-size:.9rem;text-decoration:underline}.auth-text-button:hover:not(:disabled){color:var(--cocoa-deep)}.auth-form-note{color:var(--muted);text-align:center;margin:0;font-size:.86rem}.auth-form-note .auth-text-button{min-height:auto;padding:0 2px}.auth-dev-hint{color:#6b552a;overflow-wrap:anywhere;background:#fbf4e3;border:1px dashed #c7ad7b;border-radius:8px;margin:0;padding:8px 10px;font-size:.82rem;line-height:1.5}.auth-dev-hint code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.8rem}.auth-switches{flex-wrap:wrap;justify-content:center;align-items:center;gap:4px 12px;margin-top:14px;display:flex}.auth-footer{color:var(--muted);border-top:1px solid #eee5d8;flex-wrap:wrap;justify-content:center;align-items:center;gap:8px 16px;margin-top:18px;padding-top:14px;font-size:.86rem;display:flex}.load-panel{text-align:center;width:100%;max-width:480px;margin:12vh auto 32px;padding:0 16px}.load-panel h1{color:var(--cocoa-deep);margin:0 0 16px;font-size:clamp(3.5rem,16vw,5rem);font-weight:800;line-height:1}.load-panel p{color:var(--muted);line-height:1.7}.load-panel button,.session-notice button,.sync-notice button{background:var(--card);min-height:40px;color:var(--cocoa-deep);border:1px solid #b7a99a;border-radius:8px;padding:8px 14px;font-weight:700}.session-notice,.sync-notice{color:#704719;background:#fff5e4;border:1px solid #d6b483;border-radius:8px;max-width:480px;margin:12px auto;padding:12px 16px;line-height:1.6}.session-notice{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.session-notice p,.sync-notice p{flex:220px;margin:0}.control-hint{text-align:center;color:var(--muted);margin:18px 0 0;font-size:.86rem}@media (width<=380px){.game-shell,.auth-shell{padding-left:12px;padding-right:12px}.game-shell{padding-top:20px}.game-stats{gap:6px}.board{--board-gap:8px}.game-stat dd{font-size:1.2rem}}@media (width<=360px){.game-toolbar{align-items:stretch}.new-game-button{width:100%}.save-area{justify-content:flex-start}.auth-code-button{flex:100%;margin-top:0}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.board[data-dragging]{cursor:grabbing}@media (prefers-reduced-motion:no-preference){.tile-motion-layer{inset:var(--board-gap);gap:var(--board-gap);pointer-events:none;grid-template:repeat(4,minmax(0,1fr))/repeat(4,minmax(0,1fr));display:grid;position:absolute}.tile-motion{animation:tile-slide var(--tile-slide-time) ease-out both;position:relative}.tile-arrive{animation:tile-reveal 0s var(--tile-slide-time) both}.tile-merge{animation:tile-reveal 0s var(--tile-slide-time) both, tile-merge .17s var(--tile-slide-time) ease-out both}.tile-spawn{animation:tile-spawn .14s var(--tile-slide-time) ease-out both}.board-overlay-after-move{animation-delay:var(--tile-slide-time,.13s);animation-fill-mode:both}}@media (prefers-reduced-motion:reduce){.tile-motion-layer{display:none}}@keyframes tile-slide{0%{transform:translate(0)}99%{visibility:visible}to{transform:translate(calc(var(--tile-dx) * (100% + var(--board-gap))), calc(var(--tile-dy) * (100% + var(--board-gap))));visibility:hidden}}@keyframes tile-reveal{0%{visibility:hidden}to{visibility:visible}}@keyframes tile-merge{0%{transform:scale(.95)}48%{transform:scale(1.13)}to{transform:scale(1)}}@keyframes tile-spawn{0%{opacity:0;transform:scale(.55)}to{opacity:1;transform:scale(1)}}.language-switch{justify-content:flex-end;gap:8px;width:min(448px,100% - 24px);margin:12px auto 0;display:flex}.language-switch button{color:var(--muted);border:1px solid var(--line);background:0 0;border-radius:6px;padding:5px 10px}.language-switch button[aria-pressed=true]{color:var(--cocoa-deep);background:#eee4da;font-weight:700}.account-toolbar{align-items:center;gap:8px;width:min(448px,100% - 24px);margin:12px auto 0;display:flex}.account-toolbar .language-switch{flex:none;width:auto;margin:0}.game-home{flex:none;margin-inline-end:auto}.game-account{min-width:0;max-width:160px;position:relative}.game-account summary{border:1px solid var(--line);background:var(--card);color:var(--cocoa-deep);cursor:pointer;border-radius:6px;align-items:center;gap:8px;padding:5px 10px;font-weight:700;list-style:none;display:flex}.game-account summary::-webkit-details-marker{display:none}.game-account summary span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.game-account summary:after{content:"";border:1.5px solid;border-width:0 1.5px 1.5px 0;flex:none;width:.45em;height:.45em;transform:translateY(-25%)rotate(45deg)}.game-account[open] summary:after{transform:translateY(25%)rotate(225deg)}.game-account-panel{z-index:10;border:1px solid var(--line);background:var(--card);border-radius:8px;min-width:128px;padding:6px;position:absolute;inset-block-start:calc(100% + 6px);inset-inline-end:0;box-shadow:0 4px 16px #4f484226}.game-account-panel button{width:100%;color:var(--danger-text);text-align:start;background:0 0;border:0;border-radius:4px;padding:8px 10px}.game-account-panel button:enabled:hover{background:var(--danger-bg)}
