/* v146 — synchronized, tactile POP. All properties compositor-friendly.
   No concentric waves, no ambient particles, no permanently running FX. */
body.pop-fx-full #gameStage #board>.cell.filled.line-primed,
body.pop-fx-full #gameStage #board>.cell.filled.line-primed::before,
#gameStage #board>.cell.filled.line-primed .face,
#gameStage #board>.cell.filled.line-primed .face .eye,
#gameStage #board>.cell.filled.line-primed .face .eye .pupil {
 animation-duration:.21s!important;
}
body.pop-fx-full #gameStage #board>.cell.filled.pop-now::before,
body.pop-fx-full #gameStage #board>.cell.filled.pop-now::after{
 animation:pw146BubbleRelease .31s cubic-bezier(.2,.73,.22,1) both!important;
}
@keyframes pw146BubbleRelease{
 0%{opacity:1;transform:scale(.94,1.055)}
 25%{opacity:1;transform:scale(1.07,1.035)}
 42%{opacity:1;transform:scale(1.17,1.17)}
 57%{opacity:.84;transform:scale(1.27,1.24)}
 69%{opacity:0;transform:scale(1.31,1.29)}
 100%{opacity:0;transform:scale(1.31,1.29)}
}
body.pop-fx-full #gameStage #board>.cell.filled.pop-now .face{
 animation:pw146FaceRelease .31s cubic-bezier(.2,.64,.22,1) both!important;
}
@keyframes pw146FaceRelease{
 0%{opacity:1;transform:scale(1)}
 30%{opacity:1;transform:scale(1.07)}
 55%{opacity:.85;transform:scale(1.2)}
 70%,100%{opacity:0;transform:scale(1.25)}
}
.pw146-shard{
 position:fixed;pointer-events:none;z-index:190;
 width:12px;height:9px;box-sizing:border-box;
 border:1px solid rgba(255,255,255,.83);
 border-radius:60% 25% 56% 20%;
 background:linear-gradient(135deg,rgba(255,255,255,.94) 0%,var(--pw146-color,#69b9e4) 44%,
   color-mix(in srgb,var(--pw146-color,#69b9e4) 83%,#0e2844) 100%);
 box-shadow:0 1px 1px rgba(10,26,48,.22);
 animation:pw146MembraneFlight .5s cubic-bezier(.16,.67,.31,1) both;
}
.pw146-shard.skin{width:16px;height:10px;clip-path:polygon(0 20%,35% 0,77% 10%,100% 52%,78% 88%,43% 62%,5% 100%)}
.pw146-shard.sliver{width:15px;height:6px;border-radius:100% 20% 95% 15%}
.pw146-shard.chip{width:11px;height:11px;clip-path:polygon(6% 14%,77% 0,100% 63%,40% 100%,0 78%)}
.pw146-shard.droplet{width:8px;height:11px;border-radius:75% 25% 65% 20%}
@keyframes pw146MembraneFlight{
 0%{opacity:1;transform:translate3d(-50%,-50%,0) rotate(0deg) scale(1.08)}
 17%{opacity:1;transform:translate3d(calc(-50% + var(--pw146-half-x) * .36),calc(-50% + var(--pw146-half-y) * .36),0) rotate(22deg) scale(1.03)}
 54%{opacity:.98;transform:translate3d(calc(-50% + var(--pw146-half-x)),calc(-50% + var(--pw146-half-y)),0) rotate(var(--pw146-half-rot)) scale(.94)}
 78%{opacity:.68;transform:translate3d(calc(-50% + var(--pw146-x)),calc(-50% + var(--pw146-y)),0) rotate(var(--pw146-rot)) scale(.8)}
 100%{opacity:0;transform:translate3d(calc(-50% + var(--pw146-x)),calc(-50% + var(--pw146-y) + 4px),0) rotate(var(--pw146-rot)) scale(.62)}
}
.pw146-twinkle{
 position:fixed;pointer-events:none;z-index:191;
 width:13px;height:13px;background:rgba(253,255,255,.96);
 clip-path:polygon(50% 0,59% 41%,100% 50%,59% 59%,50% 100%,41% 59%,0 50%,41% 41%);
 animation:pw146Glint .21s ease-out both;
}
@keyframes pw146Glint{
 0%{opacity:0;transform:translate3d(-50%,-50%,0) scale(.4)}
 34%{opacity:.9;transform:translate3d(-50%,-50%,0) scale(1)}
 100%{opacity:0;transform:translate3d(-50%,-50%,0) scale(1.3)}
}
/* Reward text enters after impact, not before it; only the line-clear toasts. */
#gameStage .popup.pop,#gameStage .popup.perfect,#gameStage .popup.combo{
 animation:pw146ScoreReward 1.13s cubic-bezier(.2,.8,.26,1) both!important;
}
@keyframes pw146ScoreReward{
 0%{opacity:0;transform:translate(-50%,-46%) scale(.87)}
 13%{opacity:1;transform:translate(-50%,-50%) scale(1.13)}
 27%{opacity:1;transform:translate(-50%,-51%) scale(.98)}
 68%{opacity:1;transform:translate(-50%,-56%) scale(1)}
 100%{opacity:0;transform:translate(-50%,-69%) scale(.97)}
}
@media(prefers-reduced-motion:reduce){
 .pw146-shard,.pw146-twinkle{animation:none!important;display:none!important}
 body.pop-fx-full #gameStage #board>.cell.filled.pop-now::before,
 body.pop-fx-full #gameStage #board>.cell.filled.pop-now::after,
 body.pop-fx-full #gameStage #board>.cell.filled.pop-now .face{animation-duration:.1s!important}
}
