/* ===== Прогрессия города: цель, замёрзшие участки, препятствия, стройка, туман, «живые» эффекты ===== */
.cw-goal{display:flex;align-items:center;gap:12px;margin:0 0 10px;padding:10px 12px 10px 14px;border-radius:20px;background:linear-gradient(135deg,rgba(92,242,200,.16),rgba(141,123,255,.2));border:1px solid rgba(255,255,255,.22);box-shadow:inset 0 1px rgba(255,255,255,.18)}
.cw-goal-text{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.cw-goal-text small{color:var(--mint);text-transform:uppercase;letter-spacing:.12em;font-size:9px;font-weight:800}
.cw-goal-text b{font-size:14px;line-height:1.2}
.cw-goal-text span{font-size:11px;color:#d4defa}
.cw-goal .primary{white-space:nowrap;padding:9px 14px}
.cw-goal[data-kind="free"] small{color:var(--gold)}
.cw-stage{height:calc(100vh - 396px);height:calc(100dvh - 396px);min-height:300px}
.city-screen.ui-off .cw-top,.city-screen.ui-off .cw-goal,.city-screen.ui-off .city-district-bar,.city-screen.ui-off .cw-fab,.city-screen.ui-off .cw-hint,.city-screen.ui-off .cw-sheet{display:none!important}
.city-screen.ui-off .cw-stage{height:calc(100vh - 160px);height:calc(100dvh - 160px);max-height:none}
.city-district-bar .pill.locked{opacity:.6}
.cw-zoom{position:absolute;left:10px;top:10px;z-index:8;display:flex;flex-direction:column;gap:6px}
.cw-zoom button{width:38px;height:38px;border-radius:12px;background:rgba(10,14,48,.86);border:1px solid rgba(255,255,255,.2);color:#fff;font-size:18px;font-weight:800;padding:0;line-height:1}
.cw-stage .city-hotspot{scale:var(--hs,1.15)}
.city-hotspot.cw-target{animation:tgtPulse 1.4s ease-in-out infinite!important}
@keyframes tgtPulse{0%,100%{box-shadow:0 6px 18px rgba(0,18,34,.3),0 0 0 0 rgba(92,242,200,.8)}50%{box-shadow:0 6px 18px rgba(0,18,34,.3),0 0 0 14px rgba(92,242,200,0)}}
.hs-stage.warn{background:#ffb347!important;font-size:11px!important;padding:0 2px}
#cityProjectPreview.blocked{filter:grayscale(1) brightness(.5)!important}

/* слои карты */
.cw-decor,.cw-fx{position:absolute;inset:0;pointer-events:none}
.cw-decor{z-index:6}.cw-fx{z-index:7}
.cw-tile{filter:saturate(calc(.4 + var(--rest,1)*.6)) brightness(calc(.62 + var(--rest,1)*.38));transition:filter 1.4s}
.cw-tile.locked{filter:saturate(.25) brightness(.5) blur(2px)}
.cw-proj{position:absolute;width:0;height:0}
.cw-frost{position:absolute;left:-190px;top:-170px;width:380px;height:290px;border-radius:50%;background:radial-gradient(closest-side,rgba(14,24,70,.7),rgba(30,52,120,.4) 55%,transparent 78%);opacity:var(--frost,1);transition:opacity 1.2s;pointer-events:none}
.cw-glow{position:absolute;left:-150px;top:-140px;width:300px;height:230px;border-radius:50%;background:radial-gradient(closest-side,rgba(255,214,120,.8),rgba(255,170,60,.25) 60%,transparent 80%);mix-blend-mode:screen;opacity:calc(var(--glow,0)*.5);transition:opacity 1.2s;pointer-events:none}
.cw-proj.crown .cw-glow{animation:glowPulse 3s ease-in-out infinite}
@keyframes glowPulse{0%,100%{opacity:.55}50%{opacity:.8}}
.cw-scaf{position:absolute;left:-75px;top:-122px;width:150px;opacity:0;transform:scale(.9);transform-origin:50% 100%;transition:opacity .8s,transform .8s;pointer-events:none;filter:drop-shadow(0 4px 4px rgba(0,0,0,.35))}
.cw-proj.scaf .cw-scaf{opacity:1;transform:scale(1)}
.cw-proj.pop .cw-glow{animation:cwPop .9s ease-out}
@keyframes cwPop{0%{opacity:1;transform:scale(.6)}100%{transform:scale(1.25);opacity:calc(var(--glow,0)*.5)}}
.cw-site{position:absolute;width:170px;transform:translate(-50%,-100%);padding:0;border:0;background:none;pointer-events:auto;cursor:pointer;filter:drop-shadow(0 6px 5px rgba(0,0,0,.4));transition:transform .2s}
.cw-site svg{display:block;width:100%;height:auto}
.cw-site:hover{transform:translate(-50%,-100%) scale(1.05)}
.cw-site.k-tree{width:190px}.cw-site.k-lamps{width:110px}.cw-site.k-bridge{width:180px}
.cw-site.locked{opacity:.45;pointer-events:none}
.cw-site.clearing{animation:siteClear .65s ease-in forwards;pointer-events:none}
@keyframes siteClear{0%{transform:translate(-50%,-100%) scale(1)}35%{transform:translate(-50%,-110%) scale(1.12) rotate(-3deg)}100%{transform:translate(-50%,-140%) scale(.2) rotate(14deg);opacity:0}}
.cw-site.gone{display:none}
.cw-fog{position:absolute;width:1200px;height:900px;z-index:8;pointer-events:none;background:radial-gradient(ellipse at 50% 56%,rgba(8,14,46,.55),rgba(8,14,46,.86) 78%);-webkit-mask-image:linear-gradient(to right,transparent,#000 110px,#000);mask-image:linear-gradient(to right,transparent,#000 110px,#000);transition:opacity 1.3s}
.cw-fog.lifting{opacity:0}
.cw-lockbadge{position:absolute;left:50%;top:62%;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;gap:4px;padding:14px 22px;border-radius:22px;background:rgba(10,14,48,.88);border:1px solid rgba(255,255,255,.3);color:#fff;pointer-events:auto;cursor:pointer;box-shadow:0 12px 30px rgba(0,0,0,.5)}
.cw-lockbadge span{font-size:30px}.cw-lockbadge b{font-size:16px}.cw-lockbadge small{font-size:11px;color:#c9d6f5;max-width:220px;text-align:center}
/* эффекты жизни города */
.cw-smoke{position:absolute;width:0;height:0}
.cw-smoke b{position:absolute;left:-7px;top:0;width:15px;height:15px;border-radius:50%;background:rgba(238,242,255,.8);filter:blur(3.5px);opacity:0;animation:smokeUp 3.6s ease-out infinite;animation-delay:var(--dl,0s)}
.cw-smoke b:nth-child(2){animation-delay:calc(var(--dl,0s) + 1.2s)}.cw-smoke b:nth-child(3){animation-delay:calc(var(--dl,0s) + 2.4s)}
@keyframes smokeUp{0%{transform:translate(0,0) scale(.5);opacity:0}15%{opacity:.7}100%{transform:translate(18px,-70px) scale(2.2);opacity:0}}
.cw-light{position:absolute;transform:translate(-50%,-50%);color:var(--c,#ffd36a);font-size:13px;line-height:1;text-shadow:0 0 8px var(--c),0 0 18px var(--c);animation:twinkle 1.9s ease-in-out infinite;animation-delay:var(--dl,0s)}
@keyframes twinkle{0%,100%{opacity:.35;scale:.8}50%{opacity:1;scale:1.15}}
.cw-water{position:absolute;overflow:hidden;mix-blend-mode:screen;opacity:.4;background:repeating-linear-gradient(100deg,transparent 0 28px,rgba(255,255,255,.45) 30px 34px,transparent 36px 74px);background-size:148px 100%;animation:waterMove 7s linear infinite;-webkit-mask-image:linear-gradient(transparent,#000 25%,#000 75%,transparent);mask-image:linear-gradient(transparent,#000 25%,#000 75%,transparent)}
@keyframes waterMove{to{background-position-x:148px}}
.cw-spin{position:absolute;width:150px;height:150px;transform:translate(-50%,-50%);border-radius:50%;background:repeating-conic-gradient(rgba(255,230,140,.95) 0 5deg,transparent 5deg 30deg);-webkit-mask:radial-gradient(circle,transparent 42%,#000 43%,#000 58%,transparent 60%);mask:radial-gradient(circle,transparent 42%,#000 43%,#000 58%,transparent 60%);mix-blend-mode:screen;opacity:.5;animation:spinRing 9s linear infinite}
@keyframes spinRing{to{rotate:360deg}}
.cw-bauble{position:absolute;width:9px;height:9px;border-radius:50%;transform:translate(-50%,-50%);background:var(--c);box-shadow:0 0 6px var(--c),inset -2px -2px 3px rgba(0,0,0,.3);animation:twinkle 2.6s ease-in-out infinite;animation-delay:var(--dl,0s)}
.actor .spr.small svg{width:30px;height:46px}
.deco-group{margin:14px 0}.deco-opts{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}.deco-opt.on{outline:2px solid var(--mint);box-shadow:0 0 14px rgba(92,242,200,.4)}
@media(max-width:560px){.cw-stage{height:calc(100vh - 410px);height:calc(100dvh - 410px)}.cw-goal-text b{font-size:13px}}
@media (prefers-reduced-motion:reduce){.cw-smoke b,.cw-light,.cw-spin,.cw-water,.cw-bauble{animation:none}}

.quest-block{margin:14px 0}.quest-block h3{margin:0 0 6px;font-size:15px}.quest-intro{font-size:12px;color:#c9d6f5;margin:0 0 8px}
.quest-row{display:flex;gap:10px;align-items:flex-start;padding:7px 8px;border-radius:12px;font-size:13px}
.quest-row b{display:block;font-size:13px}.quest-row small{display:block;color:var(--muted);font-size:11px;margin-top:2px}
.quest-row.now{background:rgba(92,242,200,.14);outline:1px solid rgba(92,242,200,.4)}.quest-row.done{opacity:.6}
.quest-block.locked{opacity:.6}

.modal-card{overflow-x:hidden}

/* иллюстрации стадий, поляны, животные */
.cw-frost{opacity:calc(var(--frost,1)*.5)}
.cw-plot{position:absolute;left:0;top:0;width:0;height:0;scale:var(--ls,1);transform-origin:0 0;pointer-events:none}
.cw-lot{position:absolute;left:-170px;top:-195px;width:340px;height:235px;border-radius:50%;background:radial-gradient(closest-side,#eef4ff 0%,#dbe7f8 58%,rgba(205,222,246,.55) 82%,rgba(205,222,246,0) 100%);opacity:1;transition:opacity 1s;pointer-events:none;filter:brightness(.9) saturate(.9)}
.cw-art{position:absolute;left:-132px;top:-200px;width:264px;pointer-events:none;transition:opacity 1s;filter:drop-shadow(0 6px 5px rgba(8,12,40,.35))}
.cw-art svg{display:block;width:100%;height:auto;animation:artRise .7s ease-out}
@keyframes artRise{from{transform:translateY(10px) scale(.92);filter:brightness(1.7);opacity:.2}to{transform:none;filter:none;opacity:1}}
.cw-proj.final .cw-plot{opacity:0;transition:opacity 1s}
.cw-scaf{display:none!important}
.actor.pet .spr svg{display:block;filter:drop-shadow(0 3px 3px rgba(0,0,0,.4))}
.actor.react .spr{animation:petJump .6s ease}
@keyframes petJump{0%,100%{translate:0 0}40%{translate:0 -22px}70%{translate:0 -6px}}
.animal-svg .ear{transform-box:fill-box;transform-origin:50% 100%;animation:earTwitch 4.5s ease-in-out infinite}
@keyframes earTwitch{0%,86%,100%{rotate:0deg}90%{rotate:-16deg}94%{rotate:6deg}}
.cw-bird{position:absolute;pointer-events:auto;cursor:pointer;animation:birdFly var(--dur,26s) linear infinite;animation-delay:var(--dl,0s);transition:margin .6s,opacity .6s}
.cw-bird.scare{margin-top:-120px;opacity:0}
.cw-bird svg{display:block}
.cw-bird .wing,.cw-bird .wing2{transform-box:fill-box;animation:wingFlap .32s ease-in-out infinite alternate}
.cw-bird .wing{transform-origin:100% 100%}.cw-bird .wing2{transform-origin:0 100%;animation-direction:alternate-reverse}
@keyframes wingFlap{from{transform:rotate(-26deg) scaleY(1)}to{transform:rotate(18deg) scaleY(.7)}}
@keyframes birdFly{0%{translate:0 0;opacity:0}6%{opacity:1}50%{translate:600px -28px}94%{opacity:1}100%{translate:1260px 10px;opacity:0}}
body:not([data-screen="cityScreen"]) .cw-fx *,body:not([data-screen="cityScreen"]) .cw-bird,body:not([data-screen="cityScreen"]) .actor *{animation-play-state:paused!important}
body.perf-low .cw-water,body.perf-low .cw-spin,body.perf-low .cw-smoke b,body.perf-low .cw-light,body.perf-low .cw-bauble,body.perf-low .animal-svg .ear{animation:none!important}
body.perf-low .cw-tile{transition:none}

/* v2.0.4: закрытые районы — мягкий «туман войны» без резких краёв и без россыпи замков */
.cw-tile.locked{filter:saturate(.5) brightness(.8)}
.cw-fog{background:radial-gradient(ellipse at 50% 56%,rgba(8,14,46,.55),rgba(8,14,46,.8) 80%);-webkit-mask-image:linear-gradient(to right,transparent 0,#000 240px,#000 calc(100% - 240px),transparent 100%),linear-gradient(to bottom,transparent 0,#000 160px,#000 calc(100% - 160px),transparent 100%);-webkit-mask-composite:source-in;mask-image:linear-gradient(to right,transparent 0,#000 240px,#000 calc(100% - 240px),transparent 100%),linear-gradient(to bottom,transparent 0,#000 160px,#000 calc(100% - 160px),transparent 100%);mask-composite:intersect}
.cw-proj.dlocked,.cw-site.locked{display:none}
.cw-over .cw-lockbadge{scale:2.2}
.cw-over .cw-lockbadge small{display:none}

/* окно украшений ёлки */
.tr-preview{height:230px;margin:6px 0 10px;border-radius:20px;background:radial-gradient(circle at 50% 30%,rgba(255,233,160,.25),transparent 60%),linear-gradient(#27407f,#162a5c);border:1px solid rgba(255,255,255,.2);display:grid;place-items:center;overflow:hidden}
.tr-preview svg{height:100%;width:auto;max-width:100%}
.tr-tabs{display:flex;gap:6px;overflow-x:auto;margin:6px 0 10px}
.tr-tabs .pill{white-space:nowrap}
.tr-item{display:grid;grid-template-columns:54px 1fr auto;gap:10px;align-items:center;padding:8px 10px;border-radius:16px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);margin-bottom:7px}
.tr-item.on{border-color:var(--mint);background:rgba(92,242,200,.12)}
.tr-item.locked{opacity:.85}
.tr-sw{display:flex;gap:3px;align-items:center;justify-content:center;min-height:34px;flex-wrap:wrap}
.tr-sw i{width:13px;height:13px;border-radius:50%;box-shadow:inset -2px -2px 3px rgba(0,0,0,.3),0 0 0 1px rgba(0,0,0,.25)}
.tr-sw em{font-style:normal;font-size:24px}
.tr-name b{display:block;font-size:13px}.tr-name small{color:var(--muted);font-size:11px}
.tr-on{font-size:12px;color:var(--mint);font-weight:800}
.tr-lock{font-size:11px;color:var(--gold);text-align:right;max-width:120px}
.tr-hint{font-size:11px;color:var(--muted);margin:8px 0 0}
.cw-fab{flex-wrap:wrap;justify-content:flex-end;max-width:70%}
.cw-proj[data-p="main_tree"] .cw-art{top:-236px;left:-150px;width:300px}

/* v2.0.6: окно ёлки с шестью вкладками, витрина дня */
.tr-tabs{flex-wrap:wrap}
.tr-tabs .pill{padding:7px 12px;font-size:12px}
.tr-list{max-height:260px;overflow-y:auto;padding-right:2px}
.shop-row .tr-sw{min-width:46px}
.cw-proj[data-p="main_tree"] .cw-lot,.cw-proj[data-p="main_tree"] .cw-frost{display:none}
/* v2.0.7: никакого блюра — чёткие снежные площадки, без тёмной дымки */
.cw-frost{display:none!important}
.cw-lot{background:radial-gradient(closest-side,#f4f8ff 0%,#e6eefb 86%,#d5e2f6 100%);border-radius:50%;box-shadow:inset 0 0 0 2px rgba(190,208,236,.95),0 4px 8px rgba(8,12,40,.28);filter:none;opacity:.97}
.cw-glow{opacity:calc(var(--glow,0)*.28)}
.cw-lot{left:-128px;top:-44px;width:256px;height:100px}

/* ===== Три вида карты города ===== */
.cw-thumb{position:relative}
.cw-thumb-art{position:absolute;inset:0;z-index:2;display:grid;place-items:center;background:linear-gradient(#bcd2f2,#e8f1ff)}
.cw-thumb-art svg{width:100%;height:100%}
.cw-thumb-art[hidden]{display:none}
/* clean: на карте только нарисованный район + ёлка; модели стадий видны в карточке проекта */
body[data-city-style="clean"] .cw-proj:not([data-p="main_tree"]) .cw-plot{display:none}
body[data-city-style="clean"] .cw-lot{display:none}
/* models: модели стадий стоят прямо на улице, без площадок */
body[data-city-style="models"] .cw-lot{display:none}
body[data-city-style="models"] .cw-art{filter:drop-shadow(0 6px 4px rgba(8,12,40,.45))}
/* pads: модели на аккуратной каменной площадке цвета мостовой */
body[data-city-style="pads"] .cw-lot{background:radial-gradient(closest-side,#ecdcd2 0%,#d9bfb1 80%,#c4a091 100%);box-shadow:inset 0 0 0 2px #8a6e66,0 3px 6px rgba(8,12,40,.3);left:-112px;top:-34px;width:224px;height:82px}

/* v2.2: спрайты проектов по якорю (нижняя вершина плиты) */
body[data-city-style="pack"] .cw-plot{scale:1!important}
.cw-art.pk{left:0!important;top:auto!important;bottom:0!important;width:0!important;height:0;filter:none}
.cw-art.pk img.pk{position:absolute;bottom:0;max-width:none;height:auto;pointer-events:none;image-rendering:auto}
.cw-art.pk img.pk.ov{filter:drop-shadow(0 2px 2px rgba(0,0,0,.35))}
.cw-art.pk .tw{position:absolute;bottom:0;display:block}
.cw-art.pk .tw img.pk{left:0}
.cw-art.pk .tw img.od{position:absolute;height:auto;max-width:none;filter:drop-shadow(0 2px 2px rgba(0,0,0,.35));pointer-events:none}
.npc .spr img.pn,.hero .spr img.pn{display:block;width:auto;max-width:none;filter:drop-shadow(0 3px 3px rgba(0,0,0,.4))}
.tr-sw img.orn{width:34px;height:34px;object-fit:contain;display:block}
.cw-site.pk{width:0;height:0;transform:none!important;filter:none;overflow:visible}
.cw-site.pk::before{content:"";position:absolute;left:-90px;top:-70px;width:180px;height:90px;border-radius:50%}
.cw-site.pk img.st{position:absolute;max-width:none;height:auto;pointer-events:none;filter:drop-shadow(0 3px 3px rgba(0,0,0,.4))}
.cw-site.pk img.st.ice{filter:hue-rotate(165deg) saturate(1.8) brightness(1.15) drop-shadow(0 3px 3px rgba(0,0,0,.35))}
.cw-site.pk img.st.fall{transform:rotate(80deg);transform-origin:50% 100%}
.cw-site.pk img.st.tilt{transform:rotate(-62deg);transform-origin:50% 100%}
.cw-site.pk img.st.tilt2{transform:rotate(48deg);transform-origin:50% 100%}
.cw-site.pk:hover{transform:none!important}
body[data-city-style="pack"] .cw-proj .cw-lot,body[data-city-style="pack"] .cw-proj .cw-frost,body[data-city-style="pack"] .cw-proj .cw-glow{display:none!important}
body[data-city-style="pack"] .cw-ground{background:radial-gradient(ellipse at 50% 40%,#2a4f86,#122447 70%);filter:none}
.cw-dc{position:absolute;width:0;height:0;padding:0;border:0;background:none;cursor:pointer}
.cw-dc img{position:absolute;bottom:0;max-width:none;height:auto;filter:drop-shadow(0 3px 3px rgba(0,0,0,.4));pointer-events:auto}
.tr-sw img.dc{width:40px;height:40px;object-fit:contain}
.dc-big{display:flex;justify-content:center;margin:10px 0}.dc-big img{max-height:180px}
.trp{position:relative;height:330px;width:100%}.trp .cw-art.pk{position:absolute!important;left:50%!important;bottom:6px!important}
/* v2.3: районы стыкуются встык, без полупрозрачных наложений */
.cw-tile{-webkit-mask-image:none!important;mask-image:none!important}
.cw-fog{-webkit-mask-image:none!important;mask-image:none!important}
.cw-reserve{position:absolute;width:1200px;height:900px;z-index:3;pointer-events:none;display:flex;align-items:center;justify-content:center;background:radial-gradient(ellipse at 50% 50%,#1b2f5e,#0d1936 75%);box-shadow:inset 0 0 0 2px rgba(120,160,230,.22)}
.cw-reserve span{display:flex;flex-direction:column;align-items:center;gap:6px;padding:16px 28px;border-radius:20px;background:rgba(10,18,44,.55);color:#cfe0ff;border:1px solid rgba(160,190,255,.3)}
.cw-reserve b{font-size:30px}.cw-reserve small{font-size:18px;opacity:.7}
.cw-stage .city-world-v140{width:var(--ww,3345px)!important;height:var(--wh,1240px)!important;min-width:var(--ww,3400px)!important;min-height:var(--wh,1240px)!important}
.cw-tile.mt{width:1115px!important;height:941px!important;filter:none!important;object-fit:fill}

.snowball{position:absolute;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#fff,#dbe9ff 60%,#a8c4f0);box-shadow:0 0 6px #fff9;pointer-events:none}
.snow-mode .actor.npc:not(.pet){cursor:crosshair}
.snow-mode .actor.npc:not(.pet)::after{content:"";position:absolute;left:-26px;top:-70px;width:52px;height:70px;border:2px dashed #9fd4ffcc;border-radius:50%;pointer-events:none}
#citySnowBtn.active{background:#2a6da2;color:#fff}
.cw-spot{position:absolute;width:0;height:0;padding:0;border:0;background:none;cursor:pointer}
.cw-spot span{position:absolute;left:-26px;top:-60px;width:52px;height:52px;border-radius:16px;background:linear-gradient(180deg,#fff6d6,#ffd36a);display:flex;align-items:center;justify-content:center;font-size:28px;box-shadow:0 5px 0 #b8862a,0 8px 14px #0006;animation:spotBob 2.4s ease-in-out infinite}
.cw-spot small{position:absolute;left:-40px;top:-4px;width:80px;text-align:center;font:700 12px system-ui;color:#fff;text-shadow:0 1px 3px #000}
@keyframes spotBob{50%{transform:translateY(-5px)}}
.pz-wrap{display:flex;justify-content:center;margin:10px 0}
.pz-board{display:grid;grid-template-columns:repeat(3,100px);grid-template-rows:repeat(3,100px);gap:3px;padding:6px;border-radius:14px;background:#0b1636}
.pz-c{position:relative;width:100px;height:100px;border-radius:8px;cursor:pointer;background-repeat:no-repeat;overflow:hidden;box-shadow:inset 0 0 0 2px #fff6}
.pz-c b{position:absolute;left:4px;top:2px;color:#fff;font:700 13px system-ui;text-shadow:0 1px 2px #000}
.pz-c.empty{background:#1a2a55!important;box-shadow:inset 0 0 0 2px #fff2;cursor:default}
.pz-board.done .pz-c b{display:none}
.pz-info{display:flex;gap:12px;align-items:center;justify-content:center;margin:6px 0}
#pzMsg{text-align:center;margin-top:8px}

.mg-msg{text-align:center;margin-top:10px;min-height:22px}
.mg-grid.mem{display:grid;grid-template-columns:repeat(4,64px);gap:8px;justify-content:center;margin:10px 0}
.mem-c{width:64px;height:76px;border-radius:12px;border:0;cursor:pointer;background:linear-gradient(160deg,#3c5bd1,#243a8f);box-shadow:inset 0 0 0 2px #fff4;font-size:0;position:relative;transition:transform .25s}
.mem-c::before{content:"❄️";font-size:26px;position:absolute;inset:0;display:flex;align-items:center;justify-content:center}
.mem-c span{font-size:32px;opacity:0;position:absolute;inset:0;display:flex;align-items:center;justify-content:center}
.mem-c.up,.mem-c.ok{background:linear-gradient(160deg,#fff,#dbe9ff);transform:rotateY(0)}
.mem-c.up::before,.mem-c.ok::before{display:none}.mem-c.up span,.mem-c.ok span{opacity:1}.mem-c.ok{box-shadow:inset 0 0 0 3px #4ade80}
.mg-field{position:relative;height:300px;border-radius:16px;overflow:hidden;background:linear-gradient(180deg,#14275e,#2a4f94);margin:10px 0;touch-action:manipulation}
.mg-hud{position:absolute;left:0;right:0;top:0;display:flex;justify-content:space-around;padding:8px;color:#fff;font-weight:700;z-index:3;background:#0004}
.mg-fall{position:absolute;top:-50px;width:46px;height:46px;border:0;background:none;font-size:34px;cursor:pointer;animation:mgFall linear forwards;padding:0}
.mg-fall.pop{animation:none;transform:scale(1.6);opacity:0;transition:.18s}
@keyframes mgFall{to{top:310px}}
.mg-lights{display:grid;grid-template-columns:repeat(2,110px);gap:12px;justify-content:center;margin:12px 0}
.lt{width:110px;height:110px;border-radius:50%;border:0;background:var(--c);opacity:.35;cursor:pointer;box-shadow:inset 0 -8px 0 #0003;transition:.12s}
.lt.on{opacity:1;transform:scale(1.08);box-shadow:0 0 28px var(--c),inset 0 -8px 0 #0003}
.mg-q h3{margin:6px 0 12px;font-size:19px}.mg-qn{opacity:.7;font-size:13px}
.mg-a{display:block;width:100%;margin:6px 0;text-align:left;padding:12px 14px}
.mg-a.right{background:#1f8f4e!important;color:#fff}.mg-a.wrong{background:#b3303d!important;color:#fff}

.mg-field.tw{background:linear-gradient(180deg,#14275e,#1e3d7a)}
#twStack,#twCur{position:absolute;left:0;right:0;bottom:0;top:0;pointer-events:none}
.tw-b{position:absolute;height:22px;border-radius:5px;box-shadow:inset 0 -4px 0 #0003,inset 0 0 0 2px #fff5}
#twCur{top:auto;height:22px;border-radius:5px;position:absolute;box-shadow:inset 0 -4px 0 #0003,inset 0 0 0 2px #fff5}
.mg-field.sh{background:radial-gradient(circle at 50% 100%,#2f5da8,#14275e);cursor:crosshair}
.mg-tg{position:absolute;width:52px;height:52px;border:0;border-radius:50%;background:#fff;font-size:30px;cursor:pointer;box-shadow:0 0 0 4px #e8344f,0 0 0 8px #fff,0 4px 10px #0006;animation:tgIn .18s ease-out;padding:0}
.mg-tg.hit{transform:scale(1.5);opacity:0;transition:.2s}.mg-tg.gone{transform:scale(.2);opacity:0;transition:.2s}
@keyframes tgIn{from{transform:scale(.2)}}
.wd{text-align:center}.wd-ans{display:flex;gap:5px;justify-content:center;flex-wrap:wrap;margin:14px 0}
.wd-s{width:34px;height:42px;border-radius:8px;background:#0b1636;box-shadow:inset 0 0 0 2px #fff4;display:flex;align-items:center;justify-content:center;font:800 22px system-ui;color:#fff}
.wd-s.ok{background:#1f8f4e}.wd-s.bad{background:#b3303d}
.wd-pool{display:flex;gap:6px;justify-content:center;flex-wrap:wrap;margin-bottom:10px}
.wd-l{width:38px;height:44px;border-radius:9px;border:0;background:linear-gradient(180deg,#fff6d6,#ffd36a);font:800 22px system-ui;color:#4a3000;cursor:pointer;box-shadow:0 3px 0 #b8862a}
.wd-l:disabled{opacity:.25}.wd-btns{display:flex;gap:8px;justify-content:center}
.mg-field.sl{background:linear-gradient(90deg,#1b2f66 33.3%,#223a78 33.3% 66.6%,#1b2f66 66.6%);touch-action:none}
.sl-s{position:absolute;bottom:14px;width:60px;margin-left:-30px;font-size:46px;text-align:center;transition:left .12s}
.sl-i{position:absolute;margin-left:-20px;font-size:34px;font-style:normal;pointer-events:none}
.sl-btns{display:flex;gap:12px;justify-content:center;margin:6px 0}.sl-btns button{width:90px;height:44px;font-size:20px}
.mg-field.shake{animation:shk .25s}@keyframes shk{25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}
/* мини-игры на карте: слой декора не принимает клики, значки включаем явно */
.cw-spot,.cw-spot span,.cw-spot small{pointer-events:auto!important;cursor:pointer}
.cw-spot{z-index:9000!important}

#cwSpots{position:absolute;left:0;top:0;width:0;height:0;z-index:9500;pointer-events:none}
#cwSpots .cw-spot{z-index:auto!important}

.mg-rev{position:absolute;inset:0;z-index:20;background:rgba(8,14,40,.82);display:flex;align-items:center;justify-content:center;text-align:center;padding:16px}
.mg-rev b{font-size:20px}.mg-rev p{margin:8px 0 12px;opacity:.9}

.mini-emoji{display:flex;align-items:center;justify-content:center;width:100%;height:100%;font-size:34px;line-height:1}

.df-wrap{text-align:center}.df-hud{display:flex;justify-content:space-around;font-weight:700;margin:6px 0}.df-name{opacity:.7;font-size:13px;margin-bottom:6px}
.df-field{display:grid;gap:8px;grid-template-columns:1fr}
.df-p{position:relative;height:190px;border-radius:14px;overflow:hidden;box-shadow:inset 0 0 0 2px #fff4;cursor:crosshair;touch-action:manipulation}
.df-p.img{background-size:cover;background-position:center}
.df-i{position:absolute;font-style:normal;line-height:1;pointer-events:none;filter:drop-shadow(0 2px 2px #0005)}
.df-m{position:absolute;width:44px;height:44px;margin:-22px 0 0 -22px;border:4px solid #4ade80;border-radius:50%;pointer-events:none;animation:dfPop .25s ease-out}
.df-m.bad{border-color:#ff4d5e;border-style:dashed}.df-m.miss{border-color:#ff4d5e}
@keyframes dfPop{from{transform:scale(.3);opacity:0}}
@media(min-width:560px){.df-field{grid-template-columns:1fr 1fr}.df-p{height:230px}}

.ev-cur{font-size:18px;margin:8px 0}.ev-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:10px 0}
.ev-item{display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 4px;border-radius:12px;background:rgba(255,255,255,.07);text-align:center;font-size:12px}
.ev-item.own{background:rgba(74,222,128,.18)}.ev-em{font-size:30px}.ev-item .compact{padding:4px 8px}
.pass-prev{margin:8px 0;padding:10px;border-radius:14px;background:rgba(255,211,106,.14);border:1px solid rgba(255,211,106,.4)}
.pass-prev small{display:block;opacity:.8;margin-bottom:6px}
@media(max-width:420px){.ev-grid{grid-template-columns:repeat(2,1fr)}}

.snowball.ball-petal{width:16px;height:12px;border-radius:70% 0 70% 0;background:linear-gradient(135deg,#ffd1e3,#ff8fb8);box-shadow:0 0 6px #ffb8d4aa;animation:spinB .5s linear infinite}
.snowball.ball-water{width:16px;height:16px;background:radial-gradient(circle at 35% 30%,#fff,#9ee0ff 55%,#3aa6e8);box-shadow:0 0 8px #6fcfffaa}
.snowball.ball-leaf{width:16px;height:12px;border-radius:80% 0 80% 0;background:linear-gradient(135deg,#ffb04a,#c4501d);box-shadow:0 0 5px #00000040;animation:spinB .6s linear infinite}
@keyframes spinB{to{rotate:360deg}}

.snowball.ball-drop{width:7px;height:13px;margin:-6px 0 0 -3px;border-radius:50% 50% 50% 50%/70% 70% 40% 40%;background:linear-gradient(180deg,#e6f8ff,#4db8f2);box-shadow:0 0 5px #6fcfffcc}

.rank-body{margin:8px 0}.rank-row{display:grid;grid-template-columns:34px 1fr auto;gap:8px;padding:8px 10px;border-radius:10px;background:rgba(255,255,255,.06);margin:4px 0;align-items:center}
.rank-row.me{background:rgba(255,211,106,.2);box-shadow:inset 0 0 0 1px rgba(255,211,106,.55)}.rank-row i{font-style:normal;font-weight:700}
.rank-year{margin:6px 0}.rank-chip{display:inline-block;margin:3px 6px 0 0;padding:3px 9px;border-radius:999px;background:rgba(255,255,255,.1);font-size:12px}

/* ледяной бассейн под кораблём гавани */
.cw-art.pk i.basin{position:absolute;display:block;border-radius:50%;pointer-events:none;z-index:0;
 background:radial-gradient(ellipse at 50% 45%,#2e7fb8 0%,#3b92c8 45%,#6fb7dc 70%,#dff1fb 82%,#ffffff 88%,rgba(255,255,255,0) 100%);
 box-shadow:0 8px 0 -2px #8aa7bd,0 12px 14px rgba(20,40,70,.35),inset 0 0 0 3px rgba(255,255,255,.85),inset 0 8px 14px rgba(10,50,90,.35)}
.cw-art.pk i.basin::before{content:"";position:absolute;left:18%;top:30%;width:64%;height:34%;border-radius:50%;border-top:2px solid rgba(255,255,255,.55);border-bottom:2px solid rgba(255,255,255,.25);opacity:.8}
.cw-art.pk i.basin::after{content:"";position:absolute;left:30%;top:52%;width:40%;height:22%;border-radius:50%;border-top:2px solid rgba(255,255,255,.4);opacity:.7}
.cw-art.pk img.pk{z-index:1}
/* подпись выбранной точки — под значком, а не поверх здания */
.city-hotspot.selected:before{bottom:auto!important;top:calc(100% + 8px)!important}

/* «Моё кафе»: карточка на главном экране и строки достижений */
.cafe-card{width:100%;margin:0 0 12px}.cafe-card[hidden]{display:none!important}
.cafe-ach small{opacity:.85}.cafe-ach button[disabled]{opacity:.55}
