:root{--bg: #f7f3ea;--ink: #21283a;--muted: #6b7286;--green: #8cc152;--purple: #5b2a6e;--card: #ffffff;--line: #e6dfd0;--stamp: #b4372f;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--ink);-webkit-tap-highlight-color:transparent}*{box-sizing:border-box}html,body,#root{margin:0;height:100%;background:#1d2433;overscroll-behavior:none}button{font:inherit;cursor:pointer}.app{height:100dvh;max-width:480px;margin:0 auto;display:flex;flex-direction:column;background:var(--bg);position:relative;overflow:hidden}.screen{flex:1;position:relative;overflow:hidden}.tabs{display:flex;background:#fff;border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom)}.tabs button{flex:1;border:0;background:none;padding:8px 0 7px;display:flex;flex-direction:column;align-items:center;gap:2px;font-size:11px;color:var(--muted)}.tabs button.on{color:var(--purple);font-weight:700}.tabs .ic{font-size:20px;line-height:1}.map{position:absolute;top:0;right:0;bottom:0;left:0}.map-canvas{position:absolute;top:0;right:0;bottom:0;left:0;touch-action:none}.map-top{position:absolute;top:calc(10px + env(safe-area-inset-top));left:12px;right:12px;pointer-events:none}.chip{display:inline-flex;flex-direction:column;background:#ffffffe6;border-radius:14px;padding:7px 12px;font-size:12px;color:var(--muted);box-shadow:0 2px 10px #0000001f}.chip strong{color:var(--ink);font-size:14px}.pin{position:absolute;left:0;top:0;border:0;border-radius:999px;padding:6px 11px;background:#21283ad1;color:#fff;font-size:12px;font-weight:600;white-space:nowrap;box-shadow:0 3px 10px #00000040;will-change:transform}.pin.done{background:var(--green);color:#18320a}.map-msg{position:absolute;top:45%;left:50%;transform:translate(-50%,-50%);background:#ffffffeb;padding:10px 16px;border-radius:12px;font-size:14px}.map-msg.error{color:#a02020;max-width:85%}.credit{position:absolute;left:8px;bottom:6px;font-size:10px;color:#0000008c;pointer-events:none}.sheet{position:absolute;left:10px;right:10px;bottom:10px;background:var(--card);border-radius:18px;padding:14px 16px 16px;box-shadow:0 8px 30px #00000040}.sheet-head{display:flex;justify-content:space-between;align-items:flex-start}.sheet-title{font-size:18px;font-weight:800}.sheet-sub{font-size:13px;color:var(--muted);margin-top:2px}.sheet-note{font-size:12px;color:var(--muted);margin:10px 0 12px}.x{border:0;background:#f0ece3;width:30px;height:30px;border-radius:50%;font-size:18px;line-height:1}.primary{width:100%;border:0;border-radius:14px;padding:13px;font-weight:800;font-size:15px;background:var(--purple);color:#fff}.toast{position:absolute;top:70px;left:50%;transform:translate(-50%);background:var(--ink);color:#fff;padding:9px 16px;border-radius:999px;font-size:13px;font-weight:600;white-space:nowrap}.profile{position:absolute;top:0;right:0;bottom:0;left:0;overflow-y:auto;padding:18px 16px 24px}.me{text-align:center}.me-pic{width:120px;height:120px;object-fit:contain}.me-name{display:block;margin:4px auto 2px;border:0;background:none;text-align:center;font-size:22px;font-weight:800;color:var(--ink);width:100%}.me-name:focus{outline:2px dashed var(--line);border-radius:8px}.me-sub{font-size:13px;color:var(--muted)}.passport{margin-top:18px;background:#fffaf0;border:1px solid var(--line);border-radius:18px;overflow:hidden}.passport-cover{background:var(--purple);color:#f4d98b;padding:12px 16px;display:flex;justify-content:space-between;align-items:baseline;letter-spacing:.2em;font-weight:800}.passport-cover small{letter-spacing:0;font-weight:600;color:#e9dcf0}.stamps{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:14px}.stamp{aspect-ratio:1.15;border:2px dashed #d8cfbd;border-radius:14px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:8px;color:#a9a08d}.stamp.on{border:3px double var(--stamp);color:var(--stamp);transform:rotate(var(--tilt));background:radial-gradient(circle,rgba(180,55,47,.06),transparent 70%)}.stamp-city{font-weight:900;font-size:15px;letter-spacing:.08em}.stamp-country{font-size:10px;margin-top:2px}.stamp-date{font-size:11px;margin-top:6px;font-weight:700}.stamp-pct{font-size:10px;margin-top:2px}.stamp-empty{font-size:11px;margin-top:4px}.link{display:block;margin:18px auto 0;border:0;background:none;color:var(--muted);font-size:12px;text-decoration:underline}.soon{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--muted)}.soon img{width:110px}.soon h2{color:var(--ink);margin:8px 0 2px}.tab-pane{position:absolute;top:0;right:0;bottom:0;left:0}.tab-pane[hidden]{display:none}.muted{color:var(--muted);font-size:13px}.error-text{color:#a02020;font-size:13px;text-align:center;margin:8px 16px}.secondary{width:100%;border:0;border-radius:14px;padding:12px;font-weight:700;font-size:15px;background:#ece6d9;color:var(--ink)}.primary:disabled{opacity:.55}.levels{display:flex;gap:10px;overflow-x:auto;margin:12px -4px 4px;padding:0 4px 4px}.level{flex:0 0 132px;border:1px solid var(--line);background:#fff;border-radius:14px;padding:0 0 8px;overflow:hidden;display:flex;flex-direction:column;text-align:left}.level img{width:100%;height:96px;object-fit:cover}.level-name{font-size:13px;font-weight:700;padding:6px 8px 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.level-by{font-size:11px;color:var(--muted);padding:0 8px}.level-play{margin:6px 8px 0;background:var(--purple);color:#fff;border-radius:9px;font-size:12px;font-weight:800;text-align:center;padding:5px 0}.puzzle,.reveal{position:absolute;top:0;right:0;bottom:0;left:0;z-index:40;background:linear-gradient(#bfe6ff,#f7f3ea 60%);display:flex;flex-direction:column;padding-top:env(safe-area-inset-top)}.puzzle-top{display:flex;align-items:center;gap:10px;padding:10px 12px 6px}.puzzle-title{flex:1;display:flex;flex-direction:column;min-width:0}.puzzle-title strong{font-size:17px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.puzzle-title span{font-size:12px;color:var(--muted)}.moves{background:var(--purple);color:#fff;border-radius:14px;padding:4px 12px;text-align:center;display:flex;flex-direction:column;line-height:1.1}.moves b{font-size:20px}.moves span{font-size:10px;opacity:.8}.reveal-bar{margin:4px 12px 8px;height:22px;border-radius:11px;background:#ffffffbf;position:relative;overflow:hidden}.reveal-bar div{position:absolute;inset:0 auto 0 0;background:linear-gradient(90deg,#8cc152,#c6e86b);transition:width .3s}.reveal-bar span{position:relative;display:block;text-align:center;font-size:12px;font-weight:700;line-height:22px}.board-wrap{flex:1;display:flex;align-items:flex-start;justify-content:center;padding:0 10px 12px;min-height:0}.board{position:relative;width:min(100%,calc((100dvh - 150px)*.875));aspect-ratio:7 / 8;border-radius:16px;overflow:hidden;touch-action:none;user-select:none;-webkit-user-select:none;box-shadow:0 10px 30px #1e285040}.board-photo{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover}.cover{position:absolute;left:0;top:0;transition:opacity .45s ease;box-shadow:inset 0 0 0 .5px #fff9}.cover.open{opacity:0}.tile{position:absolute;left:0;top:0;padding:3px;transition:transform .22s ease-in;will-change:transform}.tile img{width:100%;height:100%;display:block;pointer-events:none;transition:transform .19s,opacity .19s;filter:drop-shadow(0 2px 3px rgba(0,0,0,.25))}.tile.sel img{transform:scale(1.14);filter:drop-shadow(0 0 6px #fff) drop-shadow(0 2px 4px rgba(0,0,0,.4))}.tile.pop img{transform:scale(.1);opacity:0}.tile.gone{opacity:0;transition:opacity .6s}.tile.shake img{animation:shake .3s}@keyframes shake{25%{transform:translate(-5px)}75%{transform:translate(5px)}}.tile .badge{position:absolute;right:2px;bottom:2px;width:44%;height:44%;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;font-weight:900;font-size:13px;color:var(--purple);box-shadow:0 1px 4px #00000059;pointer-events:none}.tile.bomb img{animation:glow 1.2s infinite alternate}@keyframes glow{to{filter:drop-shadow(0 0 7px #fff36b) drop-shadow(0 0 3px #ff6bd5)}}.board.won .cover{opacity:0}.puzzle-msg{margin:auto;text-align:center;color:var(--muted);display:flex;flex-direction:column;gap:12px;padding:20px}.dialog{position:absolute;top:0;right:0;bottom:0;left:0;z-index:60;background:#1418248c;display:flex;align-items:center;justify-content:center;padding:20px}.dialog-card{background:#fff;border-radius:20px;padding:20px;width:100%;max-width:340px;text-align:center;display:flex;flex-direction:column;gap:10px}.dialog-card h3{margin:0}.dialog-card p{margin:0 0 6px;color:var(--muted);font-size:14px}.reveal{padding:calc(14px + env(safe-area-inset-top)) 14px calc(14px + env(safe-area-inset-bottom));gap:10px;overflow-y:auto}.reveal-head{text-align:center}.reveal-title{font-size:22px;font-weight:900}.reveal-sub{font-size:13px;color:var(--purple);font-weight:700;margin-top:2px}.reveal-photo{position:relative;width:min(100%,calc((100dvh - 260px)*.875));margin:0 auto;border-radius:16px;overflow:hidden;box-shadow:0 10px 30px #1e285040;touch-action:none;flex-shrink:0}.reveal-photo>img:first-child{width:100%;height:100%;display:block;object-fit:cover}.kookoo{position:absolute;transform:translate(-50%,-50%);filter:drop-shadow(0 8px 10px rgba(0,0,0,.3));cursor:grab}.kookoo.flying{animation:fly-in 1.3s cubic-bezier(.2,.8,.25,1) both}.kookoo.landed{animation:settle .4s ease-out}@keyframes fly-in{0%{transform:translate(140%,-260%) rotate(-30deg) scale(.4)}60%{transform:translate(-50%,-62%) rotate(8deg) scale(1.05)}80%{transform:translate(-50%,-46%) rotate(-3deg) scale(1.08,.92)}to{transform:translate(-50%,-50%) rotate(0) scale(1)}}@keyframes settle{50%{transform:translate(-50%,-50%) scale(1.06,.95)}}.reveal-hint{text-align:center;font-size:13px;color:var(--muted);margin:0;min-height:18px}.reveal-actions{display:flex;flex-direction:column;gap:8px}.camera{position:absolute;top:0;right:0;bottom:0;left:0;overflow-y:auto;padding:20px 16px}.camera-start{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:10px}.camera-start h2{margin:0}.camera-start p{margin:0 0 8px;color:var(--muted);font-size:14px;max-width:300px}.camera-kookoo{width:130px}.camera-post{display:flex;flex-direction:column;gap:12px}.camera-preview{width:100%;max-height:46dvh;object-fit:cover;border-radius:16px}.field{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--muted)}.field select,.field input{font:inherit;font-size:15px;padding:11px 12px;border-radius:12px;border:1px solid var(--line);background:#fff;color:var(--ink)}.souvenirs h3{margin:22px 0 8px}.souvenir-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.souvenir{border:0;padding:0;background:#fff;border-radius:12px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 2px 8px #00000014}.souvenir img{width:100%;aspect-ratio:7 / 9;object-fit:cover;object-position:top}.souvenir span{font-size:11px;padding:4px 6px 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.souvenir-big{background:#fff;border-radius:18px;padding:12px;max-width:380px;width:100%;display:flex;flex-direction:column;gap:10px}.souvenir-big img{width:100%;border-radius:10px;max-height:65dvh;object-fit:contain}.souvenir-meta{font-size:13px;color:var(--muted);text-align:center}.center{text-align:center;margin-top:30px}.small{font-size:12px}.banner{background:#fff1d6;color:#6b4a00;font-size:12px;padding:8px 12px;display:flex;gap:10px;align-items:center;justify-content:space-between}.banner button{border:0;background:#6b4a00;color:#fff;border-radius:8px;padding:4px 10px;font-size:12px}.toasts{position:absolute;top:calc(70px + env(safe-area-inset-top));left:0;right:0;z-index:90;display:flex;flex-direction:column;align-items:center;gap:6px;pointer-events:none}.toasts .toast{position:static;transform:none;max-width:90%;white-space:normal;text-align:center;box-shadow:0 4px 14px #00000040}.map-top{display:flex;justify-content:space-between;align-items:flex-start}.points-chip{align-items:flex-end}.points-chip strong{color:var(--purple)}.pin-count{margin-left:6px;background:#ffffff40;border-radius:999px;padding:1px 6px;font-size:11px}img.locked{filter:blur(10px) saturate(1.1);transform:scale(1.08)}.level img.locked,.challenge img.locked{filter:blur(6px)}.primary.small{width:auto;padding:8px 16px;font-size:14px;border-radius:12px}.kookoo-figure{position:relative}.kookoo-figure>img:first-child{width:100%;display:block}.kookoo-hat{position:absolute;pointer-events:none;filter:drop-shadow(0 2px 3px rgba(0,0,0,.25))}.me-pic-btn{border:0;background:none;padding:0;position:relative;display:inline-block}.me-pic{width:130px;margin:0 auto}.edit-badge{position:absolute;right:-6px;bottom:6px;background:var(--purple);color:#fff;font-size:11px;font-weight:700;border-radius:999px;padding:3px 8px}.me-points{font-size:14px;color:var(--muted)}.me-points strong{font-size:22px;color:var(--purple)}.section h3{margin:22px 0 8px}.events{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.events li{display:flex;gap:10px;align-items:baseline;background:#fff;border-radius:12px;padding:8px 12px;font-size:13px}.events b{color:#2f8a1f;min-width:44px}.events span{flex:1}.events em{color:var(--muted);font-style:normal;font-size:11px}.my-levels{display:flex;gap:10px;overflow-x:auto;padding-bottom:4px}.my-level{flex:0 0 120px;border:1px solid var(--line);background:#fff;border-radius:14px;padding:0 0 8px;overflow:hidden;display:flex;flex-direction:column;text-align:left}.my-level img{width:100%;height:110px;object-fit:cover}.customize{background:#fff;border-radius:20px;padding:18px;width:100%;max-width:360px;display:flex;flex-direction:column;gap:10px;max-height:92dvh;overflow-y:auto}.customize h3{margin:0;text-align:center}.customize-preview{width:150px;margin:6px auto 0}.choice-label{font-size:12px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.swatches{display:flex;gap:10px}.swatch{width:38px;height:38px;border-radius:50%;border:3px solid #fff;box-shadow:0 0 0 1px var(--line)}.swatch.on{box-shadow:0 0 0 3px var(--purple)}.hats{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}.hat-btn{border:1px solid var(--line);background:#faf7f0;border-radius:12px;padding:6px 2px;display:flex;flex-direction:column;align-items:center;gap:2px;font-size:10px}.hat-btn img{width:40px;height:34px;object-fit:contain}.hat-btn.on{border-color:var(--purple);background:#f3eaf7}.no-hat{height:34px;line-height:34px;font-size:18px;color:var(--muted)}.feed{position:absolute;top:0;right:0;bottom:0;left:0;overflow-y:auto;padding:14px 12px 24px}.feed-title{margin:4px 4px 12px}.empty{text-align:center;color:var(--muted);padding:30px 10px}.empty img{width:100px}.post{background:#fff;border-radius:18px;overflow:hidden;margin-bottom:14px;box-shadow:0 2px 10px #0000000f}.post-head{display:flex;gap:10px;align-items:center;padding:10px 12px}.post-head .avatar{width:36px;flex:0 0 36px}.post-head div{display:flex;flex-direction:column}.post-head span{font-size:12px;color:var(--muted)}.post-photo{display:block;width:100%;border:0;padding:0;position:relative;overflow:hidden;aspect-ratio:4 / 5;background:#e9e3d6}.post-photo img{width:100%;height:100%;object-fit:cover;display:block}.post-photo .lock{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background:#21283acc;color:#fff;padding:8px 14px;border-radius:999px;font-weight:700;font-size:14px;white-space:nowrap}.post-body{padding:10px 12px 12px}.post-title{font-weight:800;font-size:16px}.post-stats{font-size:12px;color:var(--muted);margin:2px 0 10px}.post-actions{display:flex;gap:8px;align-items:center}.chip-btn{border:1px solid var(--line);background:#fff;border-radius:999px;padding:7px 12px;font-size:13px;font-weight:600;color:var(--ink)}.chip-btn.on{background:#ffe3ef;border-color:#ff7eb6;color:#b0185a}.chip-btn:disabled{opacity:.8}.chat{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column}.chat-head{padding:12px 14px 8px;display:flex;flex-direction:column;border-bottom:1px solid var(--line);background:#fff}.chat-head span{font-size:11px;color:var(--muted)}.chat-list{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:8px}.msg{max-width:80%;align-self:flex-start;background:#fff;border-radius:16px 16px 16px 4px;padding:7px 11px;box-shadow:0 1px 4px #0000000f}.msg.mine{align-self:flex-end;background:var(--purple);color:#fff;border-radius:16px 16px 4px}.msg-name{font-size:11px;font-weight:800;color:var(--purple)}.msg-body{font-size:14px;white-space:pre-wrap;word-break:break-word}.msg-time{font-size:10px;opacity:.6;margin-top:2px;text-align:right}.challenge{margin-top:6px;display:flex;gap:8px;align-items:center;background:#f6f1e7;border:0;border-radius:12px;padding:6px;text-align:left;color:var(--ink);width:100%;overflow:hidden}.challenge img{width:46px;height:46px;object-fit:cover;border-radius:8px}.challenge span{display:flex;flex-direction:column;font-size:13px}.challenge em{font-style:normal;font-size:11px;color:var(--purple);font-weight:700}.chat-input{display:flex;gap:8px;padding:8px 10px;border-top:1px solid var(--line);background:#fff}.chat-input input{flex:1;font:inherit;font-size:15px;border:1px solid var(--line);border-radius:999px;padding:9px 14px}.msg-row{display:flex;gap:6px;align-items:flex-end;align-self:flex-start;max-width:88%}.msg-row.mine{align-self:flex-end}.msg-row .msg{max-width:100%}.msg-avatar{width:30px;flex:0 0 30px}
