/* Extra bounce, gloss, and celebration. Layout and readable values stay stable. */
.bubble{box-shadow:inset 0 -7px 2px #00000017,inset 1px 4px 2px #ffffffba,0 5px 0 #4c38681c,0 9px 13px #4c386816;transition:background .16s,transform .16s cubic-bezier(.2,1.6,.4,1),filter .16s,box-shadow .16s;transform-origin:50% 58%}
.bubble:before{width:30%;height:13%;background:linear-gradient(180deg,#ffffffbd,#ffffff40)}
.bubble:hover:not(:disabled){transform:translateY(-4px) scale(1.09) rotate(-3deg);filter:brightness(1.05);box-shadow:inset 0 -7px 2px #00000013,inset 1px 4px 2px #ffffffcc,0 9px 0 #4c386816,0 13px 16px #7953e926}
.bubble:active:not(:disabled){transform:translateY(3px) scale(.89,1.04) rotate(2deg)}
.board:not(.settled) .bubble{animation:juice-arrive .58s cubic-bezier(.2,1.5,.4,1) both;animation-delay:calc(var(--i) * 9ms)}
.board.settled .bubble.hit,.board .bubble.hit{animation:juice-hit .33s cubic-bezier(.2,1.35,.4,1);z-index:2}
.board.settled .bubble.burst,.board .bubble.burst{animation:juice-burst .21s cubic-bezier(.35,0,.7,1) forwards;z-index:3;box-shadow:0 0 17px 5px #ffffffa6,inset 0 0 12px #ffffffb0}
.board.settled .bubble.idle-wiggle,.board .bubble.idle-wiggle{animation:juice-nudge .68s ease-in-out}
.board.settled .bubble.hinted,.board .bubble.hinted{animation:juice-hint 1.3s ease-in-out infinite;outline:3px dashed #7953e9;outline-offset:5px}
.board-wrap.chain-impact{animation:juice-board-impact .32s cubic-bezier(.2,.8,.3,1);border-color:#c8acee;box-shadow:0 0 0 3px rgb(165 124 238 / 18%),0 0 calc(12px + var(--chain-power,0)*22px) rgb(161 122 232 / 28%),inset 0 0 28px #d7bdf54d;transform-origin:50% 55%}
.chain-callout{filter:drop-shadow(0 3px 0 #5e3dac);text-shadow:0 2px #7953e9,0 6px 14px #5e327750;pointer-events:none}
.chain-callout.show{animation:juice-combo .68s cubic-bezier(.2,.85,.3,1) forwards}
.chain-callout small{box-shadow:0 3px 0 #5e3dac26}
.result-overlay{animation:juice-result .48s cubic-bezier(.16,1.1,.35,1) both}
.result-overlay .result-emblem{animation:juice-emblem .68s cubic-bezier(.2,1.2,.35,1) both;animation-delay:.045s}
.result-overlay .result-badges{animation:juice-reward .48s cubic-bezier(.2,1.4,.4,1) both;animation-delay:.13s}
.result-overlay .primary-button{animation:juice-reward .5s cubic-bezier(.2,1.3,.4,1) both;animation-delay:.18s}
.score-bump{animation:juice-score .62s cubic-bezier(.2,1.5,.4,1)}
.tap-tokens span{transition:transform .3s cubic-bezier(.2,1.6,.4,1),color .22s,opacity .22s;transform-origin:50% 60%}
.tap-tokens span:not(.spent){animation:juice-token .42s cubic-bezier(.2,1.5,.4,1) both}
.tap-tokens span:nth-child(2){animation-delay:.045s}.tap-tokens span:nth-child(3){animation-delay:.09s}.tap-tokens span:nth-child(4){animation-delay:.135s}.tap-tokens span:nth-child(5){animation-delay:.18s}
.tap-tokens span.spent{transform:scale(.58) rotate(100deg);opacity:.55}
.primary-button{position:relative;overflow:hidden;isolation:isolate;transition:transform .18s cubic-bezier(.2,1.5,.4,1),background .18s,box-shadow .18s}
.primary-button:after{content:'';position:absolute;inset:-40% auto -40% -70%;width:42%;background:linear-gradient(100deg,transparent,#ffffff35,transparent);transform:skewX(-20deg);pointer-events:none}
.primary-button:hover:not(:disabled){transform:translateY(-3px) scale(1.025)}
.primary-button:hover:not(:disabled):after{animation:juice-sheen .7s ease-out}
.primary-button:active:not(:disabled){transform:translateY(3px) scale(.97)}
.tool-button:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 4px 9px #7953e914}
.tool-button:active:not(:disabled){transform:translateY(1px) scale(.96)}

@keyframes juice-arrive{0%{opacity:0;transform:translateY(15px) scale(.35) rotate(-16deg)}48%{opacity:1;transform:translateY(-5px) scale(1.12,.92) rotate(4deg)}73%{transform:translateY(2px) scale(.96,1.04) rotate(-2deg)}100%{opacity:1;transform:none}}
@keyframes juice-hit{0%{transform:scale(1)}24%{transform:scale(.72,1.2) rotate(-5deg);filter:brightness(1.16)}51%{transform:scale(1.16,.84) rotate(4deg)}76%{transform:scale(.95,1.05) rotate(-2deg)}100%{transform:scale(1);filter:brightness(1)}}
@keyframes juice-burst{0%{transform:scale(1);opacity:1}25%{transform:scale(1.28,.84);filter:brightness(1.13)}52%{transform:scale(1.27,1.46);filter:brightness(1.24);opacity:1}72%{transform:scale(1.46,1.1);opacity:.88}100%{transform:scale(.08);opacity:0}}
@keyframes juice-nudge{0%,100%{transform:none}22%{transform:translateY(-3px) rotate(-7deg) scale(1.03,.97)}45%{transform:translateY(-5px) rotate(6deg) scale(.98,1.03)}68%{transform:translateY(1px) rotate(-3deg)}}
@keyframes juice-hint{0%,100%{transform:scale(1);outline-offset:5px;filter:brightness(1)}50%{transform:translateY(-2px) scale(1.07);outline-offset:7px;filter:brightness(1.08)}}
@keyframes juice-board-impact{0%,100%{transform:translate(0,0) scale(1)}18%{transform:translate(calc(var(--chain-shift,0px)*-1),var(--chain-shift,0px)) scale(var(--chain-scale,1.01))}40%{transform:translate(var(--chain-shift,0px),calc(var(--chain-shift,0px)*-.6)) scale(1.005)}65%{transform:translate(calc(var(--chain-shift,0px)*-.45),0) scale(1)}}
@keyframes juice-combo{0%{opacity:0;transform:translate(-50%,-25%) rotate(-10deg) scale(.55)}22%{opacity:1;transform:translate(-50%,-53%) rotate(-4deg) scale(1.09)}38%,62%{opacity:1;transform:translate(-50%,-50%) rotate(-5deg) scale(1)}100%{opacity:0;transform:translate(-50%,-95%) rotate(-2deg) scale(.98)}}
@keyframes juice-result{0%{opacity:0;transform:translateY(9px) scale(.93)}62%{opacity:1;transform:translateY(-2px) scale(1.015)}100%{opacity:1;transform:none}}
@keyframes juice-emblem{0%{opacity:0;transform:translateY(18px) rotate(-28deg) scale(.3)}46%{opacity:1;transform:translateY(-7px) rotate(6deg) scale(1.16,.94)}73%{transform:translateY(2px) rotate(-12deg) scale(.96,1.04)}100%{opacity:1;transform:rotate(-8deg) scale(1)}}
@keyframes juice-reward{0%{opacity:0;transform:translateY(12px) scale(.89)}65%{opacity:1;transform:translateY(-2px) scale(1.025)}100%{opacity:1;transform:none}}
@keyframes juice-score{0%,100%{transform:scale(1);color:inherit}26%{transform:translateY(-3px) scale(1.25);color:#7953e9;text-shadow:0 2px 0 #c5adf328}51%{transform:translateY(1px) scale(.97)}75%{transform:translateY(-1px) scale(1.06)}}
@keyframes juice-token{0%{transform:translateY(4px) scale(.4) rotate(-50deg);opacity:.3}62%{transform:translateY(-2px) scale(1.18) rotate(8deg);opacity:1}100%{transform:none;opacity:1}}
@keyframes juice-sheen{0%{left:-70%}100%{left:140%}}

body.reduced .bubble,body.reduced .bubble:hover,body.reduced .bubble:active,body.reduced .board-wrap.chain-impact,body.reduced .primary-button:hover,body.reduced .primary-button:active,body.reduced .tool-button:hover,body.reduced .tool-button:active{transform:none!important}
body.reduced .board-wrap.chain-impact,body.reduced .bubble.burst{box-shadow:none!important}
body.reduced .chain-callout{display:none}
@media(prefers-reduced-motion:reduce){body:not(.motion-full) .bubble,body:not(.motion-full) .bubble:hover,body:not(.motion-full) .bubble:active,body:not(.motion-full) .board-wrap.chain-impact,body:not(.motion-full) .primary-button:hover,body:not(.motion-full) .primary-button:active,body:not(.motion-full) .tool-button:hover,body:not(.motion-full) .tool-button:active{transform:none!important}body:not(.motion-full) .board-wrap.chain-impact,body:not(.motion-full) .bubble.burst{box-shadow:none!important}body:not(.motion-full) .chain-callout{display:none}}
