/* игра «Шарики» (balloons): стили только этой игры. Селекторы без #s-balloons действуют на всю страницу — новые правила пишите через #s-balloons. */
/* balloons */
.bal-area{position:absolute;inset:0;z-index:3;overflow:hidden}
.balloon{position:absolute;bottom:0;width:20vmin;height:30vmin;touch-action:none;will-change:transform}
.balloon svg{width:100%;height:100%;overflow:visible;pointer-events:none}
.balloon .bface{position:absolute;left:14%;top:8%;width:72%;height:auto;border-radius:50%;pointer-events:none}
.burst{position:absolute;width:3vmin;height:3vmin;border-radius:50%;pointer-events:none;z-index:10;animation:burst .5s forwards}
@keyframes burst{to{transform:translate(var(--dx),var(--dy)) scale(.2);opacity:0}}

/* balloons v2 */
.balloon.gold svg{filter:drop-shadow(0 0 2.4vmin #ffe680)}

/* balloons v3 */
.bal-target{position:absolute;left:50%;top:calc(2vmin + env(safe-area-inset-top));translate:-50% 0;z-index:40;height:13vmin;padding:1vmin 3vmin 1vmin 2vmin;border-radius:7vmin;background:rgba(255,255,255,.92);box-shadow:0 .6vmin 0 #7cc8f5,0 1vmin 1.6vmin rgba(0,0,0,.2);display:flex;align-items:center;gap:1.4vmin}
.bal-target svg{height:100%;width:auto}
.bal-target img{height:90%;border-radius:50%}
.bal-target:after{content:attr(data-n);font-weight:900;font-size:6vmin;color:#5a3b1f}
.bal-target.task{box-shadow:0 0 0 .8vmin #ffd23f,0 1vmin 1.6vmin rgba(0,0,0,.2)}
.bal-target.ask{animation:pulse .35s 2}
#s-balloons .bg{object-position:50% 0}

/* ---------- balloons v4: the helper (dad by default), scenes, shapes, wind, a party at the end ---------- */
#s-balloons .bg{transition:opacity .4s}
#s-balloons .helper{z-index:6;left:calc(2vmin + env(safe-area-inset-left));bottom:calc(2.4vmin + env(safe-area-inset-bottom));width:20vmin;height:20vmin}
#s-balloons .hp-bub{left:50%;translate:-50% 0;bottom:calc(100% + 3.6vmin);flex-direction:column;transform-origin:50% 100%}
#s-balloons .hp-bub:before{left:42%;bottom:-2.8vmin}
#s-balloons .hp-bub:after{left:34%;bottom:-5.2vmin}
#s-balloons .hp-it{width:12vmin;height:17vmin}
#s-balloons .hp-bub{padding:1.8vmin 2.2vmin}
#s-balloons.party .helper .hp-pic{animation:hp-talk .3s ease-in-out infinite alternate}
@media (orientation:portrait){
  #s-balloons .helper{left:calc(3vw + env(safe-area-inset-left));bottom:calc(2vh + env(safe-area-inset-bottom));width:22vmin;height:22vmin}
  #s-balloons .hp-it{width:14vmin;height:20vmin}
}
/* a balloon picture: a balloon with a face or an animal on it (target, bubble) */
.bpic{position:relative;display:block;height:100%;aspect-ratio:2/3;margin:auto}
.bpic svg{width:100%;height:100%;display:block}
.bpic img{position:absolute;left:14%;top:5.5%;width:72% !important;height:auto !important;border-radius:50%}
.hp-it .bpic{height:100%}
.bal-target .bpic{height:100%}
/* shapes, an animal or a toy inside */
.balloon .bface.ani,.balloon .bface.toy{border-radius:0;left:18%;top:10%;width:64%;filter:drop-shadow(0 .3vmin 0 rgba(255,255,255,.8))}
.balloon.fast svg{filter:drop-shadow(0 0 1.6vmin #fff) drop-shadow(0 0 3vmin #ffe680)}
.balloon.fast:after{content:"";position:absolute;left:30%;top:60%;width:40%;height:60%;background:linear-gradient(rgba(255,255,255,.7),rgba(255,255,255,0));border-radius:50%;filter:blur(.8vmin);z-index:-1}
.balloon.grow{animation:bal-grow .9s cubic-bezier(.3,1.5,.5,1) both}
@keyframes bal-grow{from{scale:.15;opacity:.3}}
/* a balloon that starts above the helper's head: it fades in (no scale: scale would shrink its translate and pull it down onto the helper) */
#s-balloons .balloon.bal-in{animation:bal-in .6s ease-out both}
@keyframes bal-in{from{opacity:0}}
.balloon.fly{pointer-events:none}
.bal-toy{position:absolute;z-index:8;width:14vmin;height:14vmin;object-fit:contain;translate:-50% -50%;pointer-events:none;animation:bal-toy 2.6s cubic-bezier(.3,.7,.5,1) forwards}
@keyframes bal-toy{0%{scale:.2;rotate:-30deg}20%{scale:1.25;rotate:10deg}35%{scale:1;rotate:0deg}80%{opacity:1;translate:-50% 10vh}100%{opacity:0;translate:-50% 14vh}}
/* the count target: one small balloon per pop */
.bal-target.count{gap:.6vmin;padding:1vmin 2.4vmin}
.bal-target.count:after{display:none}
/* scenes: the evening is warm, at night the balloons glow, in space no clouds and no birds */
#s-balloons[data-scene=night] .amb .bird,#s-balloons[data-scene=space] .amb,#s-balloons[data-scene=sunset] .amb .bird{display:none}
#s-balloons[data-scene=night] .amb .cloud{opacity:.35}
#s-balloons[data-scene=sunset] .amb .cloud{opacity:.6}
#s-balloons[data-scene=night] .balloon svg,#s-balloons[data-scene=space] .balloon svg{filter:drop-shadow(0 0 1.4vmin rgba(255,255,255,.55))}
/* wind */
.bal-wind{position:absolute;inset:0;z-index:4;pointer-events:none;opacity:0;transition:opacity .4s}
.bal-wind.on{opacity:1}
.bal-wind i{position:absolute;height:.9vmin;width:26vw;border-radius:1vmin;background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.9),rgba(255,255,255,0))}
.bal-wind.on.right i{animation:bal-wind 1.1s linear infinite}
.bal-wind.on.left i{animation:bal-wind 1.1s linear infinite reverse}
.bal-wind i:nth-child(1){top:22%;animation-delay:-.2s!important}
.bal-wind i:nth-child(2){top:41%;animation-delay:-.7s!important}
.bal-wind i:nth-child(3){top:58%;animation-delay:-.45s!important}
.bal-wind i:nth-child(4){top:74%;animation-delay:-.9s!important}
@keyframes bal-wind{from{left:-30vw}to{left:105vw}}
#s-balloons.party .helper.fam3d .hp-pic{animation:none!important}
/* помощник из семьи: размер и место на экране этой игры (их читает общий .helper.fam3d в core/core.css).
   --hp-h = высота фигуры (доля высоты экрана), --hp-x = отступ слева, --hp-y = где стоят ноги (от низа) */
#s-balloons .helper.fam3d{--hp-h:41%;--hp-x:2.5vmin;--hp-y:1%}
@media (orientation:portrait){#s-balloons .helper.fam3d{--hp-h:28%;--hp-x:4.5vmin}}

/* ---------- balloons v5 (09.10): the task first (phase ask), the collection: gift balloons, album, giant balloon, skies, parade, grand finale ---------- */
/* ask: the helper shows the balloon to pop big; the target glows */
#s-balloons.bal-asking .hp-it{width:17vmin;height:24vmin}
@media (orientation:portrait){#s-balloons.bal-asking .hp-it{width:19vmin;height:27vmin}}
#s-balloons.bal-asking .bal-target{animation:bal-ask-glow 1s ease-in-out infinite alternate}
@keyframes bal-ask-glow{to{box-shadow:0 0 0 1.2vmin #ffd23f,0 0 4vmin #fff6b0}}
#s-balloons .bal-target.go{animation:bal-go .6s cubic-bezier(.3,1.6,.5,1)}
@keyframes bal-go{40%{scale:1.25}}
#s-balloons .balloon.bal-away{transition:opacity .45s;opacity:0}
/* a gift balloon: stripes, a gift inside, a soft golden glow */
#s-balloons .balloon.gift svg{filter:drop-shadow(0 0 1.8vmin #fff3a0)}
#s-balloons .balloon.gift .bface.toy{left:16%;top:9%;width:68%;animation:bal-gift-wob 1.2s ease-in-out infinite alternate}
@keyframes bal-gift-wob{from{rotate:-8deg}to{rotate:8deg}}
/* the prize over a popped gift balloon; a repeat becomes a star */
#s-balloons .bal-prize{position:fixed;z-index:47;width:30vmin;height:30vmin;translate:-50% -50%;pointer-events:none}
#s-balloons .bal-prize img{width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 .6vmin 1vmin rgba(0,0,0,.25))}
#s-balloons .bal-prize.new:before{content:"";position:absolute;inset:-35%;border-radius:50%;background:radial-gradient(circle,rgba(255,246,170,.95) 0,rgba(255,226,90,.55) 38%,rgba(255,226,90,0) 68%);animation:bal-rays 1.4s linear infinite;z-index:-1}
@keyframes bal-rays{to{rotate:360deg}}
#s-balloons .bal-prize.dup:after{content:"✓";position:absolute;right:2%;top:2%;width:9vmin;height:9vmin;border-radius:50%;background:#5fd068;color:#fff;font:900 6.4vmin/9vmin sans-serif;text-align:center;box-shadow:0 .5vmin 0 #3a9b45}
#s-balloons .bal-star{position:fixed;z-index:47;width:12vmin;height:12vmin;pointer-events:none}
#s-balloons .bal-star svg{width:100%;height:100%}
/* the album button: under the music button, an icon without text; a red dot — something new; a cup — all collected */
#s-balloons .bal-alb-btn{right:calc(2vmin + env(safe-area-inset-right));top:calc(17vmin + env(safe-area-inset-top));z-index:46;--b1:#fff6d8;--b2:#ffd98a;--b3:#d49a2a}
#s-balloons .bal-alb-btn img{width:86%;height:86%;object-fit:contain;pointer-events:none}
#s-balloons .bal-alb-btn .ab-dot{position:absolute;right:-.6vmin;top:-.6vmin;width:4.4vmin;height:4.4vmin;border-radius:50%;background:#ff4f6d;border:.6vmin solid #fff;display:none;animation:pulse .9s infinite}
#s-balloons .bal-alb-btn.fresh .ab-dot{display:block}
#s-balloons .bal-alb-btn .ab-cup{position:absolute;left:-1.6vmin;bottom:-1.6vmin;width:7vmin;height:7vmin;display:none}
#s-balloons .bal-alb-btn.cup .ab-cup{display:block}
#s-balloons .bal-alb-btn.bump{animation:bal-bump .6s cubic-bezier(.3,1.7,.5,1)}
@keyframes bal-bump{30%{scale:1.3}}
/* the album */
#s-balloons .bal-album{position:absolute;inset:0;z-index:48;background:rgba(40,60,110,.45);display:flex;align-items:center;justify-content:center;--s:min(11.6vw,11.6vh,74px);animation:bal-alb-in .3s ease-out}
@keyframes bal-alb-in{from{opacity:0}}
#s-balloons .ba-book{position:relative;background:linear-gradient(#fffaf0,#fff1d6);border:1.2vmin solid #c98a3c;border-radius:4vmin;box-shadow:0 1.4vmin 0 #94602a,0 2vmin 5vmin rgba(0,0,0,.35);padding:1.4vmin 2vmin 2vmin;animation:bal-book-in .45s cubic-bezier(.3,1.5,.5,1)}
@keyframes bal-book-in{from{scale:.6}}
#s-balloons .ba-top{display:flex;align-items:center;justify-content:space-between;height:calc(var(--s) * .9);margin-bottom:1vmin}
#s-balloons .ba-stars{display:flex;align-items:center;gap:1vmin;font:900 calc(var(--s) * .5) sans-serif;color:#b8860b}
#s-balloons .ba-stars svg{width:calc(var(--s) * .75);height:calc(var(--s) * .75)}
#s-balloons .ba-cup{height:100%;filter:grayscale(1) brightness(.6) opacity(.35)}
#s-balloons .ba-cup.on{filter:drop-shadow(0 0 2vmin #ffe680);animation:pulse 1.2s infinite}
#s-balloons .ba-x{position:relative;width:calc(var(--s) * .95);height:calc(var(--s) * .95);--b1:#ff8a8a;--b2:#ff5b6e;--b3:#c93a4c}
#s-balloons .ba-shelves{display:flex;flex-direction:column;gap:calc(var(--s) * .14)}
#s-balloons .ba-row{display:flex;align-items:center;gap:calc(var(--s) * .1);padding:calc(var(--s) * .06) calc(var(--s) * .12);border-radius:calc(var(--s) * .3);background:color-mix(in srgb,var(--sc) 18%,#fff);box-shadow:inset 0 -.5vmin 0 color-mix(in srgb,var(--sc) 45%,#fff)}
#s-balloons .ba-row.done{background:color-mix(in srgb,var(--sc) 38%,#fff);box-shadow:inset 0 -.5vmin 0 var(--sc),0 0 0 .5vmin #ffd23f}
#s-balloons .ba-slot{width:var(--s);height:var(--s);display:flex;align-items:center;justify-content:center;border-radius:28%;background:rgba(255,255,255,.75)}
#s-balloons .ba-slot img{width:90%;height:90%;object-fit:contain;pointer-events:none}
#s-balloons .ba-slot.miss img{filter:brightness(0) opacity(.18)}
#s-balloons .ba-slot.got img{filter:drop-shadow(0 .3vmin .4vmin rgba(0,0,0,.25))}
#s-balloons .ba-sky{width:calc(var(--s) * 1.05);height:calc(var(--s) * 1.05);margin-left:calc(var(--s) * .14);border-radius:50%;overflow:hidden;display:flex;align-items:center;justify-content:center;background:#e9e2d0;border:.6vmin solid #fff;box-shadow:0 .4vmin 0 rgba(0,0,0,.18)}
#s-balloons .ba-sky svg{width:62%;height:62%;pointer-events:none}
#s-balloons .ba-sky img{width:100%;height:100%;object-fit:cover;pointer-events:none}
#s-balloons .ba-sky.open{animation:bal-sky-wob 2.4s ease-in-out infinite}
#s-balloons .ba-sky.sel{border-color:#ffd23f;box-shadow:0 0 0 .8vmin #ffd23f,0 0 3vmin #fff6b0}
@keyframes bal-sky-wob{50%{rotate:6deg}}
/* the giant balloon of a finished set */
#s-balloons .bal-giant{position:absolute;left:50%;top:6%;z-index:46;width:min(46vmin,60vw);aspect-ratio:2/3;translate:-50% 110vh;transition:translate 2.2s cubic-bezier(.2,.8,.3,1)}
#s-balloons .bal-giant.up{translate:-50% 0}
#s-balloons .bal-giant .bg-in{position:relative;width:100%;height:100%;animation:bal-giant-bob 2s ease-in-out infinite alternate}
#s-balloons .bal-giant svg{width:100%;height:100%;filter:drop-shadow(0 0 3vmin #fff6b0);pointer-events:none}
#s-balloons .bal-giant .bg-emb{position:absolute;left:17%;top:9%;width:66%;pointer-events:none;filter:drop-shadow(0 0 .6vmin #fff)}
@keyframes bal-giant-bob{from{translate:0 0;rotate:-3deg}to{translate:0 -2.5vmin;rotate:3deg}}
#s-balloons .bal-ring{position:fixed;z-index:47;width:min(19vmin,26vw);height:min(19vmin,26vw);translate:-50% -50%;pointer-events:none}
#s-balloons .bal-ring img{width:100%;height:100%;object-fit:contain;animation:bal-hop .5s ease-in-out infinite alternate;animation-delay:inherit;filter:drop-shadow(0 .5vmin .6vmin rgba(0,0,0,.25))}
@keyframes bal-hop{to{translate:0 -2.4vmin;rotate:6deg}}
/* the end of a level: the parade */
#s-balloons .bal-parade{position:absolute;left:100%;bottom:calc(1vmin + env(safe-area-inset-bottom));z-index:7;display:flex;gap:1vmin;pointer-events:none;animation:bal-parade 4.2s linear forwards}
#s-balloons .bal-parade img{width:14vmin;height:14vmin;object-fit:contain;animation:bal-hop .32s ease-in-out infinite alternate}
@keyframes bal-parade{to{left:0;translate:-100% 0}}
/* the whole collection */
#s-balloons .bal-grand{position:absolute;inset:0;z-index:49;background:radial-gradient(circle at 50% 42%,rgba(255,240,170,.75),rgba(80,50,140,.55));overflow:hidden;animation:bal-alb-in .5s ease-out}
#s-balloons .bgr-rays{position:absolute;left:50%;top:40%;width:150vmax;height:150vmax;translate:-50% -50%;background:repeating-conic-gradient(rgba(255,255,255,.28) 0 9deg,rgba(255,255,255,0) 9deg 22deg);animation:bal-rays 14s linear infinite}
#s-balloons .bgr-cup{position:absolute;left:50%;top:40%;width:34vmin;translate:-50% -50%;filter:drop-shadow(0 0 4vmin #fff6b0);animation:bal-cup 1.1s cubic-bezier(.3,1.6,.5,1) both}
@keyframes bal-cup{from{scale:.1;rotate:-30deg}}
#s-balloons .bgr-fam{position:absolute;bottom:-40vmin;width:15vmin;height:22vmin;animation:bal-fam 6s ease-out forwards}
#s-balloons .bgr-fam .bpic{height:100%}
@keyframes bal-fam{to{bottom:62%}}
#s-balloons .bgr-row{position:absolute;left:100%;bottom:calc(1vmin + env(safe-area-inset-bottom));display:flex;gap:.6vmin;animation:bal-parade 9s linear forwards}
#s-balloons .bgr-row img{width:13vmin;height:13vmin;object-fit:contain;animation:bal-hop .3s ease-in-out infinite alternate}
#s-balloons.bal-fest .bal-target{opacity:.25;transition:opacity .4s}
/* the progress of the set being collected: six dots under the album button */
#s-balloons .bal-alb-btn .ab-prog{position:absolute;top:calc(100% + 1.6vmin);left:50%;translate:-50% 0;display:flex;gap:.5vmin;padding:.6vmin .9vmin;border-radius:2vmin;background:rgba(255,255,255,.85);pointer-events:none}
#s-balloons .bal-alb-btn .ab-prog i{width:2.4vmin;height:2.4vmin;border-radius:50%;background:#d9d2c3}
#s-balloons .bal-alb-btn .ab-prog i.on{background:var(--sc);box-shadow:0 0 0 .25vmin #fff}
#s-balloons .bal-alb-btn.cup .ab-prog{display:none}
/* ask: an ear on the target — listen first */
#s-balloons.bal-asking .bal-target:before{content:"👂";position:absolute;left:-3.4vmin;top:-2.6vmin;font-size:6vmin;animation:pulse .8s infinite}
@media (orientation:landscape){#s-balloons .bal-album{--s:min(12.4vh,10.5vw,74px)}}

/* ---------- QA 11.10: Safari (flex + svg width:auto stretched the target), the dots under the album, a wide screen shows the ground ---------- */
#s-balloons .bal-target > svg{width:7.3vmin;flex:none}
#s-balloons .bal-target .bpic{width:7.3vmin;height:100%;flex:none}
#s-balloons .bal-target.count i{width:7.3vmin;flex:none}
#s-balloons .bal-target.count i svg{width:100%;height:100%}
#s-balloons .bal-alb-btn .ab-prog{left:auto;right:0;translate:none}
@media (orientation:landscape) and (min-aspect-ratio:3/2){#s-balloons .bg{object-position:50% 100%}}
#s-balloons .bgr-fam{width:var(--w,15vmin);height:calc(var(--w,15vmin) * 1.47)}
#s-balloons .bgr-cup{top:54%}
#s-balloons .bgr-rays{top:54%}

/* 12.10: count task «Лопни два красных и три синих» — groups of circles in the target (a pop fills one), groups of small balloons in the bubble */
#s-balloons .bal-target.count{height:auto;min-height:9vmin;padding:1.2vmin 2.4vmin;gap:1.6vmin}
#s-balloons .bal-target.count.g3{flex-direction:column;align-items:stretch;gap:.7vmin;border-radius:5vmin;padding:1.2vmin 2.4vmin}
#s-balloons .bal-target .cg{display:flex;align-items:center;justify-content:center;gap:.9vmin;padding:.8vmin 1.4vmin;border-radius:4vmin;background:#f4f4f4;background:color-mix(in srgb,var(--gc) 16%,#fff);transition:box-shadow .3s}
#s-balloons .bal-target .cg i{display:block;box-sizing:border-box;flex:none;width:var(--cs,5vmin);height:var(--cs,5vmin);border-radius:50%;border:.8vmin solid var(--gc);background:#fff;transition:background .25s,scale .25s}
#s-balloons .bal-target{--cs:min(6vmin,calc((100vw - 52vmin) / var(--cn,4) - 1.6vmin))}
#s-balloons .bal-target .cg i.done{background:var(--gc);animation:bal-dot .45s cubic-bezier(.3,1.6,.5,1)}
#s-balloons .bal-target .cg.ok{box-shadow:0 0 0 .6vmin var(--gc)}
@keyframes bal-dot{from{scale:.3}60%{scale:1.35}to{scale:1}}
#s-balloons .hp-it:has(.bgrp){width:auto;height:auto;min-height:8.6vmin}
#s-balloons .bgrp{display:flex;align-items:flex-end;justify-content:center;gap:.4vmin;padding:.8vmin 1.2vmin;border-radius:3vmin;background:#f4f4f4;background:color-mix(in srgb,var(--gc) 16%,#fff)}
#s-balloons .hp-bub{gap:1.6vmin}
#s-balloons .bgrp svg{width:5.4vmin;height:8.1vmin;flex:none}
/* portrait: the count target sits below the round buttons (between the star badge and the album), so a long row of circles does not go under «заново» */
@media (orientation:portrait){
  #s-balloons .bal-target.count{top:calc(15vmin + env(safe-area-inset-top));max-width:64vw}
  #s-balloons .bal-target{--cs:min(6vmin,calc((60vw - 14vmin) / var(--cn,4) - 1vmin))}
}
/* count groups in the bubble: one group per line (a row of two groups of five does not fit a phone) */
#app #s-balloons .helper.fam3d .hp-bub:has(.bgrp){flex-direction:column;align-items:flex-start}

/* ---------- polish 14.10: feel — pulses, flash, curtain, rainbow, words, +1, rings, living sky (plan: agents/polish/balloons_plan.md) ---------- */
#s-balloons .bal-fxl{position:absolute;inset:0;z-index:45;pointer-events:none}
#s-balloons .bal-flash,#s-balloons .bal-pulse,#s-balloons .bal-veil{position:absolute;inset:0;opacity:0}
#s-balloons .bal-veil{background:linear-gradient(#e8f6ff,#fff);z-index:7}
#s-balloons .bal-pulse{background:radial-gradient(circle at 50% 55%,transparent 20%,var(--pc,#fff) 120%)}
/* rainbow on the reward: a wide soft band drifts slowly (translate + opacity only) */
#s-balloons .bal-rainbow{position:absolute;inset:0;overflow:hidden;opacity:0;transition:opacity .7s ease-out;z-index:2;pointer-events:none}
#s-balloons .bal-rainbow i{position:absolute;left:-100%;top:0;width:300%;height:100%;background:linear-gradient(100deg,#ff5b6e,#ff9f1c,#ffd23f,#5fd068,#3fa3ff,#b26cff,#ff5b6e,#ff9f1c,#ffd23f,#5fd068,#3fa3ff);animation:bal-rb 5s ease-in-out infinite alternate paused}
#s-balloons.bal-rb .bal-rainbow{opacity:.34}
#s-balloons.bal-rb .bal-rainbow i{animation-play-state:running}
@keyframes bal-rb{to{translate:33% 0}}
/* living sky: twinkles, butterflies only where there is a meadow or a sunset */
#s-balloons .bal-glints{position:absolute;inset:0;z-index:1;pointer-events:none;overflow:hidden}
#s-balloons .bal-glints i{position:absolute;width:3.2vmin;height:3.2vmin;opacity:0;background:#fff;clip-path:polygon(50% 0,60% 40%,100% 50%,60% 60%,50% 100%,40% 60%,0 50%,40% 40%);animation:bal-glint 3s ease-in-out infinite}
@keyframes bal-glint{0%,100%{opacity:0;scale:.3}50%{opacity:.85;scale:1}}
#s-balloons[data-scene=sea] .amb .fly,#s-balloons[data-scene=night] .amb .fly,#s-balloons[data-scene=space] .amb .fly,#s-balloons[data-scene=party] .amb .fly{display:none}
/* balloons breathe a little while they rise (scale only; --bd is a random phase) */
#s-balloons .balloon:not(.grow){animation:bal-breath 1.7s ease-in-out var(--bd,0s) infinite alternate}
@keyframes bal-breath{from{scale:1.03 .97}to{scale:.97 1.03}}
/* words (under the balloons: a word never hides a balloon or a prize), +1 and rings */
#s-balloons .bal-say{position:absolute;left:50%;top:27%;z-index:2;translate:-50% 0;white-space:nowrap;font:900 11vmin/1 'Arial Rounded MT Bold',sans-serif;color:#fff;letter-spacing:.2vmin;-webkit-text-stroke:.9vmin #ff7aa8;paint-order:stroke fill;text-shadow:0 1vmin 0 #d6477f,0 1.6vmin 2.4vmin rgba(0,0,0,.25);pointer-events:none}
#s-balloons .bal-say.go{-webkit-text-stroke-color:#3fa3ff;text-shadow:0 1vmin 0 #2477c4,0 1.6vmin 2.4vmin rgba(0,0,0,.25)}
#s-balloons .bal-say.rec{-webkit-text-stroke-color:#ffb300;color:#fff8d0;font-size:9vmin;text-shadow:0 1vmin 0 #c98a00,0 0 3vmin #ffe680}
#s-balloons .bal-plus{position:fixed;z-index:44;font:900 7vmin/1 sans-serif;-webkit-text-stroke:.7vmin #fff;paint-order:stroke fill;pointer-events:none}
#s-balloons .bal-ringfx{position:fixed;z-index:44;width:18vmin;height:18vmin;margin:-9vmin 0 0 -9vmin;border:1vmin solid #fff;border-radius:50%;pointer-events:none}
/* the album: cards jump in one after another */
#s-balloons .ba-slot,#s-balloons .ba-sky{animation:bal-slot-in .42s cubic-bezier(.3,1.6,.5,1) both;animation-delay:calc(var(--rd,0s) + var(--cd,0s) + .12s)}
#s-balloons .ba-sky.open{animation:bal-slot-in .42s cubic-bezier(.3,1.6,.5,1) both,bal-sky-wob 2.4s ease-in-out .8s infinite}
#s-balloons .ba-row:nth-child(2){--rd:.05s}#s-balloons .ba-row:nth-child(3){--rd:.1s}#s-balloons .ba-row:nth-child(4){--rd:.15s}#s-balloons .ba-row:nth-child(5){--rd:.2s}
#s-balloons .ba-slot:nth-child(2){--cd:.04s}#s-balloons .ba-slot:nth-child(3){--cd:.08s}#s-balloons .ba-slot:nth-child(4){--cd:.12s}#s-balloons .ba-slot:nth-child(5){--cd:.16s}#s-balloons .ba-slot:nth-child(6){--cd:.2s}#s-balloons .ba-sky{--cd:.24s}
@keyframes bal-slot-in{from{scale:.2;opacity:0}}
@media (prefers-reduced-motion:reduce){#s-balloons .balloon,#s-balloons .bal-glints i{animation:none}}
