@keyframes rise-in{from{opacity:0;transform:translateY(18px) scale(.96)}to{opacity:1;transform:none}}
@keyframes deal-in{from{opacity:0;transform:translateY(24px) scale(.75) rotate(-4deg)}to{opacity:1;transform:none}}
@keyframes match-pop{0%,100%{transform:rotateY(180deg) scale(1)}45%{transform:rotateY(180deg) scale(1.12)}}
@keyframes shake{0%,100%{transform:rotateY(180deg) translateX(0)}30%{transform:rotateY(180deg) translateX(-5px)}70%{transform:rotateY(180deg) translateX(5px)}}
@keyframes float{50%{transform:translateY(-8px) rotate(4deg)}}
@keyframes confetti-fall{0%{transform:translate3d(0,-15vh,0) rotate(0);opacity:1}100%{transform:translate3d(var(--drift),110vh,0) rotate(540deg);opacity:0}}
@keyframes avatar-cheer{to{translate:0 -6px;rotate:4deg}}
@keyframes match-celebrate{0%{opacity:0;transform:translate(-50%,-50%) scale(.4) rotate(-8deg)}35%{opacity:1;transform:translate(-50%,-50%) scale(1.15) rotate(5deg)}80%{opacity:1}100%{opacity:0;transform:translate(-50%,-65%) scale(1)}}
.setup-card{animation:rise-in .55s var(--ease) both}.card.entering{pointer-events:none;animation:deal-in .36s var(--ease) backwards;animation-delay:calc(var(--i)*18ms)}.board.dense .card.entering{animation-duration:.28s;animation-delay:calc(var(--wave)*10ms)}.card.matching{animation:match-pop .45s var(--ease)}.card.mismatching{animation:shake .34s ease}
.cloud{position:fixed;width:140px;height:45px;border-radius:50px;background:#fff7;z-index:-1;animation:float 7s ease-in-out infinite}.cloud::before,.cloud::after{content:"";position:absolute;border-radius:50%;background:inherit}.cloud::before{width:55px;height:55px;left:22px;top:-24px}.cloud::after{width:75px;height:75px;right:18px;top:-38px}.cloud-a{left:4%;top:12%}.cloud-b{right:4%;bottom:13%;transform:scale(.7);animation-delay:-2s}.star{position:fixed;color:#fff9;font-size:2rem;z-index:-1;animation:float 4s ease-in-out infinite}.star-a{right:12%;top:14%}.star-b{left:10%;bottom:12%;animation-delay:-1s}.confetti-piece{position:absolute;top:-10%;left:var(--left);width:10px;height:17px;border-radius:3px;background:var(--color);animation:confetti-fall var(--duration) linear var(--delay) forwards}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
