@font-face{font-family:'Fredoka';src:url(../assets/fonts/fredoka-latin-600-normal.woff2) format('woff2');font-weight:400 600;font-display:swap}
@font-face{font-family:'Fredoka';src:url(../assets/fonts/fredoka-latin-700-normal.woff2) format('woff2');font-weight:700 900;font-display:swap}
:root{--grape:#2f1a63;--grape2:#5a2fb0;--sun:#ffc93c;--mint:#22c7a9;--coral:#ff5d73;--sky:#38b6ff;--cream:#fff6e6;--ink:#2b1b4d;--r:22px}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent;user-select:none;-webkit-user-select:none}
html,body{height:100%;overflow:hidden;overscroll-behavior:none}
body{font-family:'Fredoka','Baloo 2','Trebuchet MS','Segoe UI',sans-serif;color:var(--cream);background:radial-gradient(circle at 20% 15%,#7b3fe4 0,transparent 45%),radial-gradient(circle at 85% 90%,#ff5d9e 0,transparent 40%),linear-gradient(160deg,var(--grape2),var(--grape))}
img{display:block;pointer-events:none;-webkit-user-drag:none}
button{font:inherit;color:inherit;border:0;cursor:pointer;background:none}
button:focus-visible{outline:4px solid #fff;outline-offset:3px}
#app{position:relative;height:100%;max-width:1100px;margin:0 auto}
.screen{position:absolute;inset:0;display:none;flex-direction:column;align-items:center;padding:max(10px,env(safe-area-inset-top)) 14px max(10px,env(safe-area-inset-bottom))}
.screen.active{display:flex;animation:pop .35s ease-out}
@keyframes pop{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}

.bubbles i{position:fixed;border-radius:50%;opacity:.22;animation:float 14s ease-in-out infinite;pointer-events:none}
.bubbles i:nth-child(1){width:90px;height:90px;left:6%;top:70%;background:var(--coral)}
.bubbles i:nth-child(2){width:60px;height:60px;left:88%;top:20%;background:var(--sun);animation-delay:-3s}
.bubbles i:nth-child(3){width:120px;height:120px;left:80%;top:72%;background:var(--sky);animation-delay:-6s}
.bubbles i:nth-child(4){width:50px;height:50px;left:15%;top:12%;background:var(--mint);animation-delay:-9s}
.bubbles i:nth-child(5){width:70px;height:70px;left:50%;top:5%;background:var(--coral);animation-delay:-4s}
.bubbles i:nth-child(6){width:40px;height:40px;left:45%;top:88%;background:var(--sun);animation-delay:-11s}
@keyframes float{50%{transform:translateY(-28px)}}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:12px 28px;border-radius:999px;font-weight:700;font-size:clamp(18px,3.2vh,24px);color:var(--ink);box-shadow:0 6px 0 rgba(0,0,0,.28);transition:transform .08s,box-shadow .08s}
.btn:active{transform:translateY(5px);box-shadow:0 1px 0 rgba(0,0,0,.28)}
.btn img{width:26px;height:26px}
.btn-sun{background:var(--sun)}.btn-sky{background:var(--sky)}.btn-mint{background:var(--mint)}.btn-coral{background:var(--coral);color:#fff}
.btn.big{font-size:clamp(24px,5vh,34px);padding:14px 52px}
.btn:disabled{opacity:.5;pointer-events:none}
.icon-btn{width:clamp(40px,6.5vh,52px);height:clamp(40px,6.5vh,52px);border-radius:16px;background:var(--grape);border:3px solid rgba(255,255,255,.25);display:grid;place-items:center;box-shadow:0 4px 0 rgba(0,0,0,.28)}
.icon-btn:active{transform:translateY(3px);box-shadow:0 1px 0 rgba(0,0,0,.28)}
.icon-btn img{width:62%}
.icon-btn.corner{position:absolute;right:16px;top:16px}

/* menu */
#menu{justify-content:center;gap:clamp(6px,1.8vh,16px);text-align:center}
.logo{height:clamp(120px,34vh,300px);animation:wobble 3.5s ease-in-out infinite}
@keyframes wobble{50%{transform:rotate(4deg) translateY(-6px)}}
h1{font-size:clamp(34px,8vh,64px);line-height:1;font-weight:700;text-shadow:0 5px 0 rgba(0,0,0,.25)}
h1 span{display:block;color:var(--sun)}
.tagline{font-size:clamp(16px,2.8vh,22px);opacity:.9}
.menu-btns{display:flex;flex-direction:column;gap:14px;align-items:center;margin-top:8px}

/* header */
.top{width:100%;display:flex;align-items:center;justify-content:space-between;gap:10px;flex:none}
.top h2{font-size:clamp(20px,3.6vh,28px);font-weight:700;text-align:center;flex:1}
.tools{display:flex;gap:8px}
.total-stars{display:flex;align-items:center;gap:6px;font-weight:700;background:var(--grape);padding:6px 12px;border-radius:999px;border:3px solid rgba(255,255,255,.25)}
.total-stars img{width:24px}

/* level grid */
#levels{gap:12px}
.grid{flex:1;min-height:0;width:100%;max-width:760px;display:grid;grid-template-columns:repeat(5,1fr);grid-template-rows:repeat(4,1fr);gap:clamp(8px,1.8vh,16px);padding:4px 0 8px}
.lv{position:relative;border-radius:var(--r);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-weight:700;font-size:clamp(22px,5vh,38px);color:var(--ink);box-shadow:0 6px 0 rgba(0,0,0,.28);transition:transform .08s}
.lv:nth-child(5n+1){background:var(--sun)}.lv:nth-child(5n+2){background:var(--mint)}.lv:nth-child(5n+3){background:var(--sky)}.lv:nth-child(5n+4){background:#ff8fb1}.lv:nth-child(5n){background:#b794ff}
.lv:active{transform:translateY(4px)}
.lv .st{display:flex;gap:1px}.lv .st img{width:clamp(12px,2.6vh,20px)}
.lv.locked{background:rgba(255,255,255,.14);box-shadow:none;pointer-events:none}
.lv.locked img.lk{width:38%}

/* game */
#play{gap:clamp(6px,1.4vh,12px)}
.stage{flex:1;min-height:0;width:100%;display:grid;grid-template-columns:1.15fr 1fr;gap:12px}
.card{background:rgba(255,255,255,.12);border:3px solid rgba(255,255,255,.2);border-radius:28px;padding:clamp(8px,1.6vh,14px);display:flex;flex-direction:column;align-items:center;justify-content:space-between;min-height:0;min-width:0}
.bubble{display:flex;align-items:center;gap:10px;background:var(--cream);color:var(--ink);border-radius:20px;padding:6px 14px;font-weight:700;font-size:clamp(15px,2.8vh,22px);position:relative;flex:none}
.bubble::after{content:"";position:absolute;left:50%;bottom:-10px;margin-left:-10px;border:10px solid transparent;border-bottom:0;border-top-color:var(--cream)}
.chip{width:clamp(26px,4.4vh,38px);aspect-ratio:1;border-radius:50%;border:4px solid var(--ink);flex:none}
.monster{position:relative;flex:1;min-height:0;aspect-ratio:1;max-width:100%;margin-top:6px}
.m-body,.m-face{position:absolute;inset:0;width:100%;height:100%}
.monster.shake{animation:shake .5s}
.monster.happy{animation:hop .5s 3}
@keyframes shake{20%,60%{transform:translateX(-12px) rotate(-3deg)}40%,80%{transform:translateX(12px) rotate(3deg)}}
@keyframes hop{50%{transform:translateY(-18px) scale(1.05)}}
.hint{display:flex;flex-wrap:wrap;gap:4px;justify-content:center;align-items:center;background:var(--cream);color:var(--ink);border-radius:16px;padding:4px 10px;font-weight:700;font-size:clamp(13px,2.2vh,17px);flex:none;margin-top:6px}
.hint[hidden]{display:none}.hint img{height:clamp(22px,3.8vh,32px)}
.beaker-card{gap:6px}
.beaker{position:relative;flex:1;min-height:0;aspect-ratio:300/360;max-width:100%}
.liquid-wrap,.glass{position:absolute;inset:0;width:100%;height:100%}
.fall{position:absolute;left:48%;top:-4%;width:7%;aspect-ratio:.8;border-radius:50% 50% 50% 50%/60% 60% 40% 40%;animation:fall .45s ease-in forwards;z-index:2}
@keyframes fall{to{transform:translateY(480%);opacity:.6}}
.counter{font-weight:700;font-size:clamp(14px,2.6vh,20px);background:var(--grape);padding:3px 16px;border-radius:999px;flex:none}
.counter.full{background:var(--coral)}

.shelf{display:flex;justify-content:center;gap:clamp(2px,1.5vw,14px);width:100%;flex:none;padding:0 2px}
.bt{position:relative;display:flex;flex-direction:column;align-items:center;transition:transform .1s}
.bt{flex:1;max-width:120px;min-width:0}
.bt img{height:clamp(62px,13vh,120px);max-width:88%;object-fit:contain}
.bt:active{transform:translateY(5px) scale(.96)}
.bt.pour{animation:tilt .3s}
@keyframes tilt{40%{transform:rotate(-14deg) translateY(-8px)}}
.bt b{position:absolute;right:4px;top:0;min-width:26px;height:26px;border-radius:13px;background:var(--cream);color:var(--ink);display:grid;place-items:center;font-size:15px;padding:0 6px;border:2px solid var(--ink)}
.bt b:empty,.bt b[data-n="0"]{display:none}
.bt span{font-size:clamp(11px,1.9vh,15px);font-weight:600}
.bottom{width:100%;display:flex;align-items:center;gap:12px;flex:none;justify-content:space-between}
.msg{flex:1;font-size:clamp(14px,2.4vh,19px);font-weight:600;line-height:1.2}

/* modal */
.modal{position:fixed;inset:0;background:rgba(20,8,48,.72);display:grid;place-items:center;padding:16px;z-index:10}
.modal[hidden]{display:none}
.dialog{background:var(--cream);color:var(--ink);border-radius:30px;padding:22px 24px;max-width:430px;width:100%;text-align:center;box-shadow:0 10px 0 rgba(0,0,0,.25);animation:pop .3s ease-out;max-height:94vh;overflow:hidden}
.dialog h3{font-size:clamp(24px,4.4vh,34px);margin-bottom:6px}
.dialog p{font-size:clamp(15px,2.5vh,18px);line-height:1.35;margin:6px 0}
.dialog ol{text-align:left;padding-left:22px;font-size:clamp(14px,2.4vh,17px);line-height:1.4;margin:8px 0}
.dialog .stars{display:flex;justify-content:center;gap:6px;margin:6px 0 10px}
.dialog .stars img{width:clamp(44px,8vh,64px)}
.dialog .stars img:nth-child(2){margin-top:-10px}
.dialog .stars img.on{animation:starpop .5s both}
.dialog .stars img.on:nth-child(2){animation-delay:.2s}.dialog .stars img.on:nth-child(3){animation-delay:.4s}
@keyframes starpop{from{transform:scale(0) rotate(-90deg)}to{transform:none}}
.dialog .row{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-top:12px}
.dialog .btn{padding:10px 22px;font-size:clamp(16px,2.6vh,20px)}
.swatch{display:inline-block;width:28px;height:28px;border-radius:50%;border:3px solid var(--ink);vertical-align:middle;margin:0 4px}

@media (max-width:640px) and (orientation:portrait){
  .stage{grid-template-columns:1fr 1fr;gap:8px}
  .bottom{flex-direction:column;gap:6px;align-items:stretch;text-align:center}
  .bottom .btn{width:100%}
  .grid{grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(5,1fr)}
}
@media (max-height:480px){.bottom{flex-direction:row}.bt img{height:clamp(46px,16vh,70px)}.logo{height:30vh}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* v1.1 menu, worlds, settings */
.logo{height:clamp(90px,23vh,230px)}
h1{font-size:clamp(30px,6.6vh,54px)}
#menu{gap:clamp(4px,1.2vh,12px)}
.menu-stats{display:flex;gap:10px;font-weight:600;font-size:clamp(14px,2.3vh,18px)}
.menu-stats span{display:flex;align-items:center;gap:6px;background:rgba(255,255,255,.14);border:2px solid rgba(255,255,255,.22);padding:3px 14px;border-radius:999px}
.menu-stats img{width:22px}.menu-stats i{font-style:normal}
.menu-btns{display:flex;flex-direction:column;align-items:center;gap:clamp(8px,1.8vh,14px);margin-top:4px}
.menu-row{display:flex;gap:12px}
.menu-row .btn{padding:10px 22px;font-size:clamp(16px,2.8vh,21px)}
.btn.small{padding:7px 20px;font-size:clamp(14px,2.3vh,17px);background:rgba(255,255,255,.16);color:var(--cream);box-shadow:none;border:2px solid rgba(255,255,255,.3)}
.btn.small img{width:20px;height:20px}
.btn.big img{width:32px;height:32px}
.ver{font-size:12px;opacity:.55}
.menu-deco{position:absolute;bottom:5%;width:clamp(100px,24vh,230px);aspect-ratio:1;animation:bob 3.2s ease-in-out infinite}
.menu-deco.left{left:3%}.menu-deco.right{right:3%;animation-delay:-1.6s}
.menu-deco canvas,.menu-deco img{position:absolute;inset:0;width:100%;height:100%}
@keyframes bob{50%{transform:translateY(-14px) rotate(3deg)}}
.world{font-weight:700;font-size:clamp(15px,2.6vh,20px);background:var(--grape);padding:3px 18px;border-radius:999px;border:2px solid rgba(255,255,255,.25);flex:none}
.pager{display:flex;align-items:center;justify-content:center;gap:18px;flex:none}
.flip img{transform:scaleX(-1)}
.icon-btn:disabled{opacity:.35;pointer-events:none}
.dots{display:flex;gap:8px}.dots i{width:12px;height:12px;border-radius:50%;background:rgba(255,255,255,.3)}.dots i.on{background:var(--sun);transform:scale(1.25)}
.setrow{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 4px;border-bottom:2px dashed rgba(43,27,77,.18);font-weight:600;font-size:clamp(16px,2.6vh,19px)}
.switch{width:66px;height:36px;border-radius:18px;background:#c9bfe0;position:relative;transition:background .2s;flex:none}
.switch::after{content:"";position:absolute;left:4px;top:4px;width:28px;height:28px;border-radius:50%;background:#fff;box-shadow:0 2px 0 rgba(0,0,0,.25);transition:transform .2s}
.switch.on{background:var(--mint)}.switch.on::after{transform:translateX(30px)}
.dialog .small-note{font-size:13px;opacity:.6;margin-top:10px}
@media (max-width:560px){.menu-deco{width:74px;top:2.5%;bottom:auto}.menu-deco.left{left:2%}.menu-deco.right{right:2%}}
@media (max-height:480px){.menu-deco{display:none}.menu-btns{flex-direction:row;flex-wrap:wrap;justify-content:center}}
.btn em{font-style:normal}

/* v1.2 loading + menu */
#loading{justify-content:center;align-items:center;gap:clamp(8px,2vh,18px);text-align:center}
.load-logo{height:clamp(110px,30vh,260px);animation:wobble 2.4s ease-in-out infinite}
.load-title{font-size:clamp(26px,5.4vh,44px);font-weight:700;text-shadow:0 4px 0 rgba(0,0,0,.25)}
.load-bottles{display:flex;gap:14px}
.load-bottles img{height:clamp(44px,9vh,72px);animation:jump .9s ease-in-out infinite}
.load-bottles img:nth-child(2){animation-delay:.15s}.load-bottles img:nth-child(3){animation-delay:.3s}
@keyframes jump{50%{transform:translateY(-14px)}}
.load-bar{width:min(78vw,420px);height:clamp(22px,3.8vh,30px);border-radius:999px;background:rgba(0,0,0,.3);padding:4px;border:3px solid rgba(255,255,255,.25)}
.load-fill{height:100%;width:0;border-radius:999px;background:linear-gradient(90deg,#ff5d73,#ffc93c,#22c7a9,#38b6ff,#b794ff)}
.load-meta{width:min(78vw,420px);display:flex;justify-content:space-between;font-weight:600;font-size:clamp(14px,2.4vh,18px)}

/* v1.3 fixes: keep the monster and the beaker in proportion on any screen, focus rings, reduced motion */
.m-body,.m-face,.liquid-wrap,.glass{object-fit:contain}
.monster,.beaker{align-self:center}
.btn:focus-visible,.icon-btn:focus-visible,.bt:focus-visible,.lv:focus-visible{outline:4px solid #fff;outline-offset:3px}
@media (hover:hover){.btn:not(:disabled):hover{transform:translateY(-2px)}.lv:not(.locked):hover{transform:translateY(-3px)}.bt:hover{transform:translateY(-3px)}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
