:root{--bg: #e8f1f6;--bg-deep: #c5dce8;--ink: #143246;--muted: #4a6a7d;--card: #fffdf8;--accent: #1a4d6d;--accent-bright: #2f7ea3;--sun: #f0a45c;--sun-deep: #d9842e;--ok: #2f8f6b;--danger: #b33b3b;--shadow: 0 12px 40px rgba(20, 50, 70, .12);--font: "Nunito", system-ui, sans-serif;--radius: 18px}*{box-sizing:border-box}html,body,#root{min-height:100%;max-width:100%}html,body{overflow-x:hidden;width:100%}body{margin:0;font-family:var(--font);color:var(--ink);background:radial-gradient(1200px 600px at 10% -10%,#fff7e8 0%,transparent 55%),radial-gradient(900px 500px at 100% 0%,#d7ebf5 0%,transparent 50%),linear-gradient(165deg,var(--bg),var(--bg-deep));overscroll-behavior-x:none}button,input{font:inherit}.app{min-height:100vh;min-height:100dvh;padding:24px 16px 40px;padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right));max-width:100%;overflow-x:hidden}.app-playing{padding:0;height:100vh;height:100dvh;overflow:hidden;display:flex;flex-direction:column;overscroll-behavior:none;touch-action:manipulation}.app-playing .game{touch-action:none}.setup{max-width:720px;margin:0 auto}.setup-hero{text-align:center;margin-bottom:28px}.brand{display:inline-block;margin:0 0 10px;padding:6px 14px;border-radius:999px;background:#1a4d6d1a;color:var(--accent);font-weight:800;letter-spacing:.02em}.setup-hero h1{margin:0 0 10px;font-size:clamp(1.8rem,4vw,2.6rem);line-height:1.15}.lede{margin:0 auto;max-width:36rem;color:var(--muted);font-size:1.05rem}.setup-panel{background:var(--card);border-radius:calc(var(--radius) + 6px);box-shadow:var(--shadow);padding:22px;display:grid;gap:18px}.dropzone{min-height:220px;border:2px dashed rgba(26,77,109,.35);border-radius:var(--radius);background:#1a4d6d0a;color:var(--muted);cursor:pointer;display:grid;place-items:center;text-align:center;padding:16px;transition:border-color .15s,background .15s,transform .15s}.dropzone:hover,.dropzone.drag{border-color:var(--accent-bright);background:#2f7ea314;transform:translateY(-1px)}.dropzone.has-image{border-style:solid;padding:0;overflow:hidden}.preview{width:100%;height:260px;object-fit:cover;display:block}.sample-btn{border:1px dashed rgba(26,77,109,.35);background:#7ec8e333;color:var(--accent);font-weight:800;border-radius:12px;padding:10px 14px;cursor:pointer}.sample-btn:hover{background:#7ec8e359}.setup-row{display:flex;flex-wrap:wrap;gap:8px}.setup-row .sample-btn{flex:1 1 160px}.cropper{max-width:720px;margin:0 auto;padding:20px 16px 32px;display:grid;gap:14px}.cropper-head h2{margin:0 0 6px;font-size:1.6rem}.cropper-head p{margin:0;color:var(--muted);font-weight:700}.cropper-aspects{display:flex;flex-wrap:wrap;gap:8px}.cropper-aspects button{border:1px solid rgba(26,77,109,.18);background:#fff;color:var(--ink);border-radius:999px;padding:8px 14px;font-weight:800;cursor:pointer;touch-action:manipulation}.cropper-aspects button.active,.cropper-aspects button:hover{background:var(--accent);border-color:var(--accent);color:#fff}.cropper-stage-wrap{width:100%;display:flex;justify-content:center}.cropper-stage{position:relative;overflow:hidden;border-radius:16px;background:#0f1a24;touch-action:none;cursor:grab;box-shadow:var(--shadow);-webkit-user-select:none;user-select:none;outline:2px solid rgba(255,253,248,.9);outline-offset:-2px}.cropper-stage:active{cursor:grabbing}.cropper-image{position:absolute;top:0;left:0;max-width:none;max-height:none;pointer-events:none;transform-origin:0 0;object-fit:fill}.cropper-zoom{background:var(--card);border-radius:var(--radius);padding:12px 14px;box-shadow:var(--shadow)}.cropper-actions{display:grid;grid-template-columns:1fr 1.4fr;gap:10px}@media(pointer:coarse){.cropper-aspects button{padding:10px 16px}}.field{display:grid;gap:10px}.field-label .muted{color:var(--muted);font-weight:600}input[type=range]{width:100%;accent-color:var(--accent-bright)}.presets{display:flex;flex-wrap:wrap;gap:8px}.presets button{border:1px solid rgba(26,77,109,.18);background:#fff;color:var(--ink);border-radius:999px;padding:6px 12px;font-weight:700;cursor:pointer}.presets button.active,.presets button:hover{background:var(--accent);border-color:var(--accent);color:#fff}.hint-warn{margin:0;padding:10px 12px;border-radius:12px;background:#f0a45c2e;color:#7a4a12;font-weight:700}.error{margin:0;color:var(--danger);font-weight:700}.cta{border:0;border-radius:14px;background:linear-gradient(180deg,var(--sun),var(--sun-deep));color:#2a1704;font-weight:800;font-size:1.1rem;padding:14px 18px;cursor:pointer;box-shadow:0 8px 20px #d9842e47}.cta:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}.cta:not(:disabled):hover{filter:brightness(1.05)}.privacy{margin:0;text-align:center;color:var(--muted);font-size:.92rem}.game{flex:1;min-height:0;width:100%;max-width:none;margin:0;position:relative;overflow:hidden;box-sizing:border-box}.game-bar{position:absolute;top:0;left:0;right:0;z-index:30;display:flex;flex-wrap:wrap;align-items:center;gap:8px;justify-content:space-between;padding:max(8px,env(safe-area-inset-top)) max(10px,env(safe-area-inset-right)) 8px max(10px,env(safe-area-inset-left));background:linear-gradient(180deg,#e8f1f6f0,#e8f1f6b8 70%,#e8f1f600);pointer-events:none}.game-bar>*{pointer-events:auto}.ghost{border:1px solid rgba(26,77,109,.2);background:#fffdf8d9;color:var(--accent);font-weight:800;border-radius:12px;padding:10px 14px;cursor:pointer}.ghost:hover{background:#fff}.progress{flex:1;min-width:160px;display:grid;gap:6px;font-weight:800;text-align:center}.progress-track{height:10px;border-radius:999px;background:#1a4d6d1f;overflow:hidden}.progress-fill{height:100%;background:linear-gradient(90deg,var(--ok),#56c49a)}.board-frame{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:flex;justify-content:center;align-items:center;overflow:hidden;box-sizing:border-box;padding:56px 8px 8px;padding-top:calc(52px + env(safe-area-inset-top))}.board-grid{display:grid;background:#14324614;border-radius:12px;overflow:visible;box-shadow:var(--shadow);touch-action:none;max-width:100%;flex:0 0 auto}.slot{position:relative;overflow:visible;background:transparent}.slot-ghost{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:0;pointer-events:none;overflow:visible}.slot-ghost-outline{stroke:#1a4d6d47;stroke-width:1.4}.slot.correct .slot-ghost{opacity:0}.piece-svg{display:block;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;filter:drop-shadow(0 1px 1px rgba(0,0,0,.2));overflow:visible}.piece-svg.on-board{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:1}.piece-svg.locked{cursor:default;z-index:2;filter:drop-shadow(0 0 0 transparent)}.piece-svg.locked .piece-outline{stroke:#2f8f6b40;stroke-width:1}.piece-outline{stroke:#141e2859;stroke-width:1.25;pointer-events:none}.piece-svg.dragging{position:fixed;z-index:50;pointer-events:none;cursor:grabbing;filter:drop-shadow(0 14px 22px rgba(0,0,0,.35))}.tray-dock{position:fixed;z-index:25;display:flex;flex-direction:column;gap:6px;box-sizing:border-box;background:#fffdf8f5;box-shadow:0 -8px 28px #14324629}.tray-dock--bottom{left:0;right:0;bottom:0;width:auto;padding:8px 10px calc(8px + env(safe-area-inset-bottom));border-radius:18px 18px 0 0;transform:translateZ(0)}.tray-dock--side{top:calc(52px + env(safe-area-inset-top));right:0;bottom:0;width:min(168px,32vw);padding:8px 8px calc(8px + env(safe-area-inset-bottom)) 8px;border-radius:18px 0 0;box-shadow:-8px 0 28px #14324629;transform:translateZ(0)}.tray-dock--side .tray-dock-top{flex-direction:column;align-items:stretch}.tray-dock--side .tray-filters{flex-wrap:wrap;max-height:88px;overflow-y:auto}.tray-dock--side .tray-shell{flex:1;min-height:0;flex-direction:column}.tray-dock--side .tray{flex-direction:column;overflow-x:hidden;overflow-y:auto;touch-action:pan-y;min-height:0;height:100%;align-items:center}.tray-dock--side .tray-nav{flex-basis:40px;width:100%}.tray-dock-top{display:flex;align-items:center;gap:8px}.tray-park-btn{flex:0 0 auto;padding:8px 10px!important;font-size:.85rem}.tray-park-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}.tray-filters{flex:1;min-width:0;display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;-webkit-overflow-scrolling:touch;padding:0 2px;scrollbar-width:none}.tray-filters::-webkit-scrollbar{display:none}.tray-filter{flex:0 0 auto;border:1px solid rgba(26,77,109,.2);background:#fffdf8eb;color:var(--ink);font-weight:800;font-size:.88rem;border-radius:999px;padding:8px 12px;cursor:pointer;touch-action:manipulation;display:inline-flex;align-items:center;gap:6px}.tray-filter-count{min-width:1.4em;padding:1px 6px;border-radius:999px;background:#1a4d6d1a;font-size:.78rem}.tray-filter.active{background:var(--accent);border-color:var(--accent);color:#fff}.tray-filter.active .tray-filter-count{background:#ffffff38}.tray-shell{width:100%;display:flex;align-items:stretch;gap:6px;box-sizing:border-box}.tray-nav{flex:0 0 48px;border:1px solid rgba(26,77,109,.2);background:#fffdf8f2;color:var(--accent);font-size:1.8rem;font-weight:800;line-height:1;border-radius:14px;cursor:pointer;touch-action:manipulation}.tray-nav:active{background:#7ec8e359}.tray{flex:1;min-width:0;min-height:88px;max-height:none;overflow-x:auto;overflow-y:hidden;display:flex;flex-wrap:nowrap;gap:12px;align-items:center;padding:10px 12px;border-radius:var(--radius);background:#ffffff59;touch-action:pan-x;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;scroll-snap-type:x proximity;scrollbar-width:thin}.piece-svg.tray-piece{flex:0 0 auto;touch-action:pan-x;scroll-snap-align:start}.tray-dock--side .piece-svg.tray-piece{touch-action:pan-y}.tray-ghost{flex:0 0 auto;border-radius:8px;background:#1a4d6d14}.win-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0a182473;display:grid;place-items:center;padding:20px;z-index:60;animation:fade-in .25s ease}.win-card{background:var(--card);border-radius:22px;padding:28px 24px;text-align:center;box-shadow:var(--shadow);max-width:360px;width:100%;animation:pop .35s cubic-bezier(.2,1.2,.3,1)}.win-card h2{margin:0 0 8px;font-size:2rem}.win-card p{margin:0 0 18px;color:var(--muted);font-weight:700}.win-actions{display:grid;gap:10px}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes pop{0%{transform:scale(.92);opacity:0}to{transform:scale(1);opacity:1}}@media(max-width:640px){.app:not(.app-playing){padding:14px 10px 28px}.setup-panel{padding:14px}.game-bar{justify-content:center}.tray-nav{flex-basis:40px;font-size:1.6rem}.tray{padding:8px 10px;gap:10px;min-height:76px}}@media(pointer:coarse){.game-bar .ghost{padding:8px 12px}.tray-nav{flex-basis:48px}.tray{min-height:92px}.tray-filter{padding:10px 14px;font-size:.95rem}}@media(pointer:coarse)and (orientation:landscape){.tray{min-height:72px}.tray-filters{gap:4px}}
