*{touch-action:manipulation;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}input,textarea,[contenteditable]{-webkit-user-select:text;user-select:text}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{color:#fffffe;-webkit-font-smoothing:antialiased;background:#0f0e17;width:100vw;height:100vh;font-family:Segoe UI,system-ui,-apple-system,sans-serif;overflow:hidden}#root{width:100vw;height:100vh;overflow:hidden}button{cursor:pointer;background:0 0;border:none;font-family:inherit}button:disabled{cursor:not-allowed;opacity:.4}.menu-root{background:radial-gradient(at 50% 40%,#1a1040 0%,#0f0e17 70%);justify-content:center;align-items:center;width:100vw;height:100vh;display:flex}.menu-card{text-align:center;background:#16142a;border:1px solid #2e2a52;border-radius:24px;flex-direction:column;gap:20px;width:90%;max-width:420px;padding:48px 52px;display:flex;box-shadow:0 0 80px #5e41cc22,0 24px 80px #0006}.menu-logo{letter-spacing:6px;font-size:48px;font-weight:900;line-height:1}.menu-logo-g{color:#a78bfa;text-shadow:0 0 30px #a78bfa66}.menu-logo-s{color:#f472b6;text-shadow:0 0 30px #f472b666}.menu-tagline{color:#7c6fa0;letter-spacing:.5px;font-size:14px}.menu-progress{color:#a78bfa;justify-content:center;gap:24px;font-size:14px;font-weight:600;display:flex}.menu-btn{letter-spacing:.5px;border-radius:14px;padding:14px 24px;font-size:16px;font-weight:700;transition:all .18s}.menu-btn.primary{color:#fff;background:linear-gradient(135deg,#7c3aed,#a855f7);box-shadow:0 0 20px #7c3aed55}.menu-btn.primary:hover{transform:translateY(-2px);box-shadow:0 0 32px #7c3aed88}.menu-btn.secondary{color:#a78bfa;background:#1f1c38;border:1px solid #2e2a52}.menu-btn.secondary:hover{background:#26234a;border-color:#7c3aed}.menu-btn.danger{color:#f87171;background:#3f1a1a;border:1px solid #5c2a2a}.menu-btn.danger:hover{background:#4a1f1f;border-color:#ef4444}.menu-btn.mute-toggle{color:#6b7280;background:#1a1a2e;border:1px solid #2e2a52;padding:10px 20px;font-size:14px}.menu-btn.mute-toggle:hover{color:#9ca3af;border-color:#4b5563}.menu-btn.daily{color:#fff;background:linear-gradient(135deg,#f59e0b,#d97706);border:none;box-shadow:0 0 16px #f59e0b44}.menu-btn.daily:hover{transform:translateY(-2px);box-shadow:0 0 24px #f59e0b66}.menu-howto{color:#6b6490;text-align:left;background:#0f0e1a;border:1px solid #1e1c34;border-radius:12px;padding:16px;font-size:13px;line-height:1.6}.menu-howto strong{color:#a78bfa;margin-bottom:6px;display:block}.game-root{background:radial-gradient(at 50% 30%,#16122e 0%,#0f0e17 65%);flex-direction:column;width:100vw;height:100vh;display:flex;overflow:hidden}.top-bar{border-bottom:1px solid #1e1c34;flex-shrink:0;justify-content:space-between;align-items:center;height:56px;padding:10px 20px;display:flex}.icon-btn{color:#a78bfa;background:#1f1c38;border:1px solid #2e2a52;border-radius:10px;justify-content:center;align-items:center;width:38px;height:38px;font-size:16px;transition:all .15s;display:flex}.icon-btn:hover{background:#26234a;border-color:#7c3aed}.icon-btn.active{color:#fbbf24;background:#1f1c38;border-color:#fbbf24;box-shadow:0 0 12px #fbbf2444}.level-title{flex-direction:column;align-items:center;gap:2px;display:flex}.level-num{letter-spacing:3px;color:#5a5278;text-transform:uppercase;font-size:11px;font-weight:700}.level-name{color:#e2d9f3;letter-spacing:.5px;font-size:16px;font-weight:800}.top-right{align-items:center;gap:10px;display:flex}.par-label{color:#5a5278;font-size:12px}.par-label strong{color:#a78bfa}.hint-bar{color:#a78bfa;background:#1a1632;border-bottom:1px solid #2e2a52;flex-shrink:0;padding:8px 20px;font-size:13px}.play-area{flex:1;justify-content:center;align-items:center;gap:32px;padding:16px;display:flex;overflow:hidden}.side-panel{flex-direction:column;flex-shrink:0;gap:12px;width:110px;display:flex}.stat-card{background:#16142a;border:1px solid #2e2a52;border-radius:12px;flex-direction:column;align-items:center;gap:3px;padding:10px 12px;display:flex}.stat-label{letter-spacing:2px;color:#4a4268;text-transform:uppercase;font-size:9px;font-weight:700}.stat-val{color:#e2d9f3;font-variant-numeric:tabular-nums;font-size:24px;font-weight:900}.stat-val.par{color:#a78bfa}.goal-dots{flex-wrap:wrap;justify-content:center;gap:6px;padding:4px 0;display:flex}.goal-dot{border:2px solid;border-radius:50%;width:14px;height:14px;transition:all .3s}.goal-dot.done{transform:scale(1.2)}.ctrl-btn{color:#7c6fa0;letter-spacing:.5px;background:#16142a;border:1px solid #2e2a52;border-radius:10px;padding:9px 12px;font-size:12px;font-weight:700;transition:all .15s}.ctrl-btn:hover:not(:disabled){color:#a78bfa;background:#1f1c38;border-color:#7c3aed}.ctrl-btn.undo:hover:not(:disabled){color:#818cf8;border-color:#818cf8}.ctrl-btn.restart:hover:not(:disabled){color:#f472b6;border-color:#f472b6}.grid-wrap{flex-direction:column;flex-shrink:0;align-items:center;gap:20px;display:flex}.grid-wrap.shake{animation:.35s shake}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-8px)}40%{transform:translate(8px)}60%{transform:translate(-5px)}80%{transform:translate(5px)}}.grid-board{position:relative}.grid-cell{border-radius:10px;justify-content:center;align-items:center;display:flex;position:absolute;overflow:visible}.grid-cell.floor{background:#16142a;border:1px solid #201d3a;box-shadow:inset 0 1px #ffffff08}.grid-cell.wall{background:linear-gradient(145deg,#2a2645,#1a1830);border:1px solid #3a3660;box-shadow:inset 0 1px #ffffff14,0 2px 8px #0005}.grid-cell.spike{background:radial-gradient(circle at 50% 40%,#3a1020,#16142a);border:1px solid #7f1d3a;box-shadow:inset 0 0 12px #ff2e5544}.grid-cell.spike .spike-mark{color:#ff3b63;text-shadow:0 0 8px #ff2e5588;filter:drop-shadow(0 0 4px #ff2e55aa);font-size:30px;line-height:1}.goal-marker{border:2px dashed var(--goal-color);opacity:.5;border-radius:7px;justify-content:center;align-items:center;transition:all .3s;display:flex;position:absolute;inset:6px}.goal-marker.satisfied{opacity:1;background:color-mix(in srgb, var(--goal-color) 20%, transparent);box-shadow:0 0 16px var(--goal-glow);border-style:solid;animation:.4s ease-out goal-pop}.goal-check{color:var(--goal-color);filter:drop-shadow(0 0 6px var(--goal-color));font-size:20px;font-weight:900}@keyframes goal-pop{0%{transform:scale(.8)}60%{transform:scale(1.1)}to{transform:scale(1)}}.block{background:var(--block-color);box-shadow:0 0 0 1px color-mix(in srgb, var(--block-color) 60%, white), 0 4px 16px var(--block-glow), inset 0 1px 0 #fff3;border-radius:9px;justify-content:center;align-items:center;transition:box-shadow .3s;display:flex;position:absolute;inset:5px;overflow:hidden}.block.sliding{animation:.3s slide-pulse}@keyframes slide-pulse{0%{filter:brightness(1.4)}to{filter:brightness()}}.block.matched{box-shadow:0 0 0 2px white, 0 0 24px var(--block-glow), 0 0 48px var(--block-glow), inset 0 1px 0 #fff5;animation:.5s ease-out match-glow}@keyframes match-glow{0%{transform:scale(.9)}50%{transform:scale(1.08)}to{transform:scale(1)}}.block-shine{background:linear-gradient(135deg,#fff5,#0000);border-radius:4px;width:40%;height:30%;position:absolute;top:4px;left:6px}.block-letter{color:#ffffffe6;text-shadow:0 1px 4px #0006;z-index:1;font-size:18px;font-weight:900}.grav-indicator{gap:10px;display:flex}.grav-btn{color:#7c6fa0;background:#16142a;border:1px solid #2e2a52;border-radius:12px;justify-content:center;align-items:center;width:48px;height:48px;font-size:22px;transition:all .15s;display:flex}.grav-btn:hover{color:#a78bfa;background:#1f1c38;border-color:#7c3aed}.grav-btn.active{color:#fff;background:linear-gradient(135deg,#7c3aed,#a855f7);border-color:#0000;box-shadow:0 0 16px #7c3aed66}.controls-label{letter-spacing:3px;text-transform:uppercase;color:#4a4268;text-align:center;font-size:9px;font-weight:700}.grav-pad{flex-direction:column;align-items:center;gap:6px;display:flex}.grav-row{align-items:center;gap:6px;display:flex}.grav-empty{width:52px;height:52px}.grav-big{color:#7c6fa0;background:#16142a;border:1px solid #2e2a52;border-radius:12px;justify-content:center;align-items:center;width:52px;height:52px;font-size:24px;transition:all .15s;display:flex}.grav-big:hover{color:#a78bfa;background:#1f1c38;border-color:#7c3aed;transform:scale(1.05)}.grav-big.active{color:#fff;background:linear-gradient(135deg,#7c3aed,#a855f7);border-color:#0000;transform:scale(1.08);box-shadow:0 0 20px #7c3aed66}.key-hints{flex-direction:column;gap:4px;display:flex}.key-hint{color:#3a3458;text-align:center;letter-spacing:.5px;font-size:10px}.select-root{background:radial-gradient(at 50% 30%,#16122e 0%,#0f0e17 70%);flex-direction:column;width:100vw;height:100vh;display:flex;overflow:hidden}.select-header{border-bottom:1px solid #1e1c34;flex-shrink:0;justify-content:space-between;align-items:center;padding:14px 24px;display:flex}.select-header h2{letter-spacing:2px;color:#e2d9f3;text-transform:uppercase;font-size:18px;font-weight:800}.select-grid{flex:1;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));align-content:start;gap:14px;padding:24px;display:grid;overflow-y:auto}.level-card{text-align:center;background:#16142a;border:1px solid #2e2a52;border-radius:16px;flex-direction:column;align-items:center;gap:6px;padding:18px 12px;transition:all .18s;display:flex;position:relative}.level-card:hover:not(:disabled){background:#1f1c38;border-color:#7c3aed;transform:translateY(-3px);box-shadow:0 8px 24px #7c3aed33}.level-card.solved{border-color:#a78bfa44}.level-card.solved:hover:not(:disabled){border-color:#a78bfa}.level-card.locked{opacity:.45}.lc-num{color:#e2d9f3;font-size:28px;font-weight:900;line-height:1}.lc-title{color:#7c6fa0;font-size:11px;font-weight:600}.lc-stars{gap:3px;display:flex}.lc-star{color:#2e2a52;font-size:14px;transition:color .2s}.lc-star.lit{color:#fbbf24;filter:drop-shadow(0 0 4px #fbbf2488)}.lc-par{color:#4a4268;letter-spacing:1px;font-size:10px}.lc-lock{font-size:14px;position:absolute;top:8px;right:10px}.win-overlay{z-index:100;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);opacity:0;pointer-events:none;background:#0f0e17e0;justify-content:center;align-items:center;transition:opacity .3s;display:flex;position:fixed;inset:0}.win-overlay.visible{opacity:1;pointer-events:all}.win-card{text-align:center;background:linear-gradient(160deg,#1a1635,#16142a);border:1px solid #3d3568;border-radius:24px;flex-direction:column;gap:18px;width:90%;max-width:380px;padding:40px 44px;animation:.4s cubic-bezier(.34,1.56,.64,1) forwards card-in;display:flex;box-shadow:0 0 80px #7c3aed44,0 24px 80px #0007}@keyframes card-in{0%{opacity:0;transform:scale(.85)translateY(20px)}to{opacity:1;transform:scale(1)translateY(0)}}.win-burst{font-size:42px;line-height:1}.win-title{color:#e2d9f3;letter-spacing:2px;font-size:32px;font-weight:900}.win-level-name{color:#7c6fa0;font-size:14px}.win-stars{justify-content:center;gap:14px;display:flex}.win-star{font-size:38px;line-height:1;animation:.5s cubic-bezier(.34,1.56,.64,1) both star-in}.win-star.lit{color:#fbbf24;filter:drop-shadow(0 0 10px #fbbf24)}.win-star.dim{color:#2e2a52}@keyframes star-in{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}.win-stats{justify-content:center;gap:12px;display:flex}.win-stat{background:#0f0e1a;border:1px solid #1e1c34;border-radius:12px;flex-direction:column;gap:4px;min-width:70px;padding:12px 20px;display:flex}.win-stat.highlight{border-color:#fbbf2444}.ws-label{letter-spacing:2px;color:#4a4268;text-transform:uppercase;font-size:9px}.ws-val{color:#e2d9f3;font-size:22px;font-weight:900}.ws-val.par{color:#a78bfa}.win-badge{color:#a78bfa;background:linear-gradient(135deg,#7c3aed22,#a855f722);border:1px solid #7c3aed44;border-radius:20px;padding:8px 16px;font-size:13px;font-weight:700}.win-actions{flex-wrap:wrap;justify-content:center;gap:10px;display:flex}.win-btn{letter-spacing:.3px;border-radius:12px;padding:12px 20px;font-size:14px;font-weight:700;transition:all .15s}.win-btn.primary{color:#fff;background:linear-gradient(135deg,#7c3aed,#a855f7);flex:1;box-shadow:0 0 16px #7c3aed55}.win-btn.primary:hover{transform:translateY(-2px);box-shadow:0 0 24px #7c3aed88}.win-btn.secondary{color:#a78bfa;background:#1f1c38;border:1px solid #2e2a52}.win-btn.secondary:hover{border-color:#7c3aed}.win-btn.ghost{color:#5a5278;background:0 0;border:1px solid #1e1c34;font-size:13px}.win-btn.ghost:hover{color:#a78bfa;border-color:#2e2a52}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:#0f0e17}::-webkit-scrollbar-thumb{background:#2e2a52;border-radius:3px}@media (width<=600px) and (orientation:portrait){.play-area{flex-direction:column;gap:16px;padding:12px}.side-panel{flex-flow:wrap;justify-content:center;gap:8px;width:100%}.stat-card{flex:1;min-width:70px;padding:8px 10px}.stat-val{font-size:20px}.ctrl-btn{padding:8px 10px;font-size:11px}.grav-pad{transform:scale(.85)}.grav-btn,.grav-big{width:42px;height:42px;font-size:18px}.grav-empty{width:46px;height:46px}.key-hints{display:none}.top-bar{height:48px;padding:8px 12px}.level-name{font-size:14px}.level-num{font-size:10px}.icon-btn{width:34px;height:34px;font-size:14px}.hint-bar{padding:6px 12px;font-size:11px}.menu-card{padding:32px 24px}.menu-logo{font-size:36px}.select-grid{grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:10px;padding:16px}.level-card{padding:14px 10px}.lc-num{font-size:24px}.win-card{padding:28px 24px}.win-title{font-size:24px}.win-star{font-size:32px}}.game-selector{color:#e2d9f3;background:linear-gradient(135deg,#0f0e17 0%,#1a1a2e 50%,#16213e 100%);flex-direction:column;justify-content:safe center;align-items:center;height:100vh;padding:32px;font-family:system-ui,sans-serif;display:flex;position:relative;overflow-y:auto}.particle-canvas{pointer-events:none;z-index:0;width:100%;height:100%;position:fixed;top:0;left:0}.game-selector:before{content:"";pointer-events:none;z-index:0;background:radial-gradient(circle at 20% 80%,#7c3aed1a 0%,#0000 50%),radial-gradient(circle at 80% 20%,#4ecdc41a 0%,#0000 50%),radial-gradient(circle at 40% 40%,#f59e0b0d 0%,#0000 50%);position:fixed;inset:0}.selector-header{text-align:center;z-index:1;margin-bottom:48px;position:relative}.header-decoration{height:60px;margin-bottom:16px;position:relative}.decoration-circle{opacity:.3;background:linear-gradient(135deg,#7c3aed,#4ecdc4);border-radius:50%;animation:6s ease-in-out infinite float;position:absolute}.circle-1{width:40px;height:40px;animation-delay:0s;top:0;left:50%;transform:translate(-50%)}.circle-2{width:30px;height:30px;animation-delay:1s;top:15px;left:calc(50% - 60px)}.circle-3{width:35px;height:35px;animation-delay:2s;top:10px;left:calc(50% + 50px)}@keyframes float{0%,to{transform:translateY(0)scale(1)}50%{transform:translateY(-10px)scale(1.1)}}.selector-header h1{background:linear-gradient(135deg,#7c3aed,#4ecdc4,#f59e0b);-webkit-text-fill-color:transparent;letter-spacing:-2px;background-size:200%;-webkit-background-clip:text;background-clip:text;margin-bottom:8px;font-size:56px;font-weight:800;animation:3s ease-in-out infinite shimmer}@keyframes shimmer{0%{background-position:0%}50%{background-position:100%}to{background-position:0%}}.selector-header p{color:#a78bfa;letter-spacing:1px;font-size:18px;font-weight:500}.games-grid{z-index:1;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:24px;width:100%;max-width:1200px;display:grid;position:relative}.game-card{cursor:pointer;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#16142acc;border:2px solid #2e2a52;border-radius:20px;gap:20px;padding:24px;transition:all .4s cubic-bezier(.175,.885,.32,1.275);animation:.6s ease-out backwards slideUp;display:flex;position:relative;overflow:hidden}@keyframes slideUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.game-card:before{content:"";background:linear-gradient(135deg, var(--card-color,#7c3aed), transparent);opacity:0;z-index:0;transition:opacity .3s;position:absolute;inset:0}.game-card:hover:not(.planned){border-color:#7c3aed;transform:translateY(-12px)scale(1.05);box-shadow:0 30px 60px #7c3aed66,0 0 40px #7c3aed33}.game-card:hover:not(.planned):before{opacity:.15;background:linear-gradient(135deg, var(--card-color,#7c3aed), #4ecdc4)}.game-card.planned{opacity:.5;cursor:not-allowed;filter:grayscale(.5)}.game-icon{z-index:1;border-radius:16px;flex-shrink:0;justify-content:center;align-items:center;width:72px;height:72px;font-size:36px;transition:transform .3s;display:flex;position:relative}.game-card:hover:not(.planned) .game-icon{transform:rotate(10deg)scale(1.1)}.icon-emoji{z-index:2;position:relative}.icon-glow{filter:blur(20px);opacity:.5;border-radius:50%;width:120%;height:120%;animation:2s ease-in-out infinite pulse;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}@keyframes pulse{0%,to{opacity:.3;transform:translate(-50%,-50%)scale(1)}50%{opacity:.6;transform:translate(-50%,-50%)scale(1.2)}}.game-info{z-index:1;flex:1;position:relative}.game-info h3{color:#e2d9f3;margin:0 0 4px;font-size:24px;font-weight:700}.game-tagline{color:#a78bfa;margin:0 0 8px;font-size:14px;font-weight:500}.game-description{color:#6b6490;margin:0 0 12px;font-size:13px;line-height:1.5}.game-meta{justify-content:space-between;align-items:center;font-size:12px;display:flex}.game-levels{color:#5a5278;font-weight:500}.game-status{font-weight:600}.game-status.complete{color:#4ecdc4}.game-status.prototype{color:#f59e0b}.game-status.planned{color:#6b6490}.play-indicator{color:#fff;opacity:0;z-index:2;background:linear-gradient(135deg,#7c3aed,#4ecdc4);border-radius:50%;justify-content:center;align-items:center;width:40px;height:40px;font-size:16px;transition:all .3s;display:flex;position:absolute;top:20px;right:20px;transform:scale(.5)}.game-card:hover:not(.planned) .play-indicator{opacity:1;transform:scale(1)}.selector-footer{text-align:center;color:#5a5278;z-index:1;margin-top:48px;font-size:14px;position:relative}.pull-to-refresh{color:#a78bfa;z-index:100;background:linear-gradient(135deg,#1a1a2e 0%,#0f0e17 100%);flex-direction:column;justify-content:center;align-items:center;gap:8px;height:80px;font-size:14px;transition:transform .2s ease-out;display:flex;position:fixed;top:0;left:0;right:0;transform:translateY(-100%)}.pull-to-refresh[style*=opacity]{transform:translateY(0)}.refresh-icon{font-size:24px;animation:none}.is-refreshing .refresh-icon{animation:1s linear infinite spin}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (width<=600px){.game-selector{padding:16px}.selector-header h1{font-size:36px}.selector-header p{font-size:14px}.games-grid{grid-template-columns:1fr;gap:16px}.game-card{padding:16px}.game-icon{width:56px;height:56px;font-size:28px}.game-info h3{font-size:20px}}
