@keyframes confetti-flight{0%{opacity:1;transform:translate(-50%,0)rotate(var(--initial-rotate,0deg))scale(.2)}12%{opacity:1;transform:translate(calc(-50% + var(--flight-x)*.7),calc(var(--flight-y)*.8))rotate(calc(var(--flight-rotate)*.3))scale(1.15)}22%{opacity:1;transform:translate(calc(-50% + var(--flight-x)),var(--flight-y))rotate(calc(var(--flight-rotate)*.5))scale(1)}35%{opacity:.95;transform:translate(calc(-50% + var(--flight-x) + var(--sway-amount,60px)),calc(var(--flight-y) + 200px))rotate(calc(var(--flight-rotate)*.9))scale(.95)}48%{opacity:.9;transform:translate(calc(-50% + var(--flight-x) - var(--sway-amount,60px)*.8),calc(var(--flight-y) + 420px))rotate(calc(var(--flight-rotate)*1.4))scale(.92)}61%{opacity:.75;transform:translate(calc(-50% + var(--flight-x) + var(--sway-amount,60px)*.6),calc(var(--flight-y) + 650px))rotate(calc(var(--flight-rotate)*2))scale(.88)}74%{opacity:.5;transform:translate(calc(-50% + var(--flight-x) - var(--sway-amount,60px)*.4),calc(var(--flight-y) + 900px))rotate(calc(var(--flight-rotate)*2.6))scale(.82)}87%{opacity:.25;transform:translate(calc(-50% + var(--flight-x) + var(--sway-amount,60px)*.2),calc(var(--flight-y) + 1150px))rotate(calc(var(--flight-rotate)*3.2))scale(.75)}to{opacity:0;transform:translate(calc(-50% + var(--flight-x)),calc(var(--flight-y) + 1400px))rotate(calc(var(--flight-rotate)*4))scale(.65)}}.confetti-particle{animation:confetti-flight var(--fall-duration,8s)cubic-bezier(.22,.1,.25,1)forwards;will-change:transform,opacity;backface-visibility:hidden}.confetti-particle:nth-child(3n){animation:confetti-flight var(--fall-duration,8s)cubic-bezier(.22,.1,.25,1)forwards,confetti-shimmer .5s ease-in-out infinite}@keyframes confetti-shimmer{0%,to{filter:brightness()saturate()}50%{filter:brightness(1.3)saturate(1.2)}}@keyframes smoke-blast{0%{opacity:var(--smoke-opacity,.9);filter:blur(4px);transform:translate(-50%)scale(.2)}20%{opacity:calc(var(--smoke-opacity,.9)*.9);transform:translate(calc(-50% + var(--smoke-x)*.4),calc(var(--smoke-y)*.4))scale(.8);filter:blur(8px)}50%{opacity:calc(var(--smoke-opacity,.9)*.6);transform:translate(calc(-50% + var(--smoke-x)*.8),calc(var(--smoke-y)*.8))scale(1.5);filter:blur(12px)}75%{opacity:calc(var(--smoke-opacity,.9)*.3);transform:translate(calc(-50% + var(--smoke-x)),var(--smoke-y))scale(2.5);filter:blur(18px)}to{opacity:0;transform:translate(calc(-50% + var(--smoke-x)*1.1),calc(var(--smoke-y)*1.1))scale(4);filter:blur(25px)}}.smoke-blast-particle{animation:smoke-blast var(--smoke-duration,1.2s)ease-out forwards;will-change:transform,opacity,filter;pointer-events:none}.smoke-blast-particle:nth-child(odd){animation-timing-function:cubic-bezier(.25,.46,.45,.94)}.smoke-blast-particle:nth-child(3n){animation-timing-function:cubic-bezier(.165,.84,.44,1)}@keyframes flash-burst{0%{opacity:1;transform:translate(-50%)scale(.3)}40%{opacity:.8}to{opacity:0;transform:translate(-50%)scale(3)}}.animate-flash-burst{animation:.35s ease-out forwards flash-burst}@keyframes shake{0%,to{transform:rotate(-45deg)translate(0)}10%{transform:rotate(-45deg)translate(-12px)translateY(4px)}20%{transform:rotate(-45deg)translate(12px)translateY(-4px)}30%{transform:rotate(-45deg)translate(-10px)translateY(5px)}40%{transform:rotate(-45deg)translate(10px)translateY(-3px)}50%{transform:rotate(-45deg)translate(-8px)translateY(4px)}60%{transform:rotate(-45deg)translate(8px)translateY(-4px)}70%{transform:rotate(-45deg)translate(-5px)translateY(2px)}80%{transform:rotate(-45deg)translate(5px)translateY(-2px)}90%{transform:rotate(-45deg)translate(-2px)}}.animate-shake{animation:.8s ease-in-out shake}@keyframes pop-float{0%{opacity:0;transform:scale(0)translateY(0)}30%{opacity:1;transform:scale(1.3)translateY(-10px)}60%{opacity:1;transform:scale(1)translateY(-25px)}to{opacity:0;transform:scale(.8)translateY(-50px)}}.animate-pop-float{animation:1s ease-out forwards pop-float}@keyframes flag-wave{0%,to{transform:skew(0)scaleX(1)}25%{transform:skew(6deg)scaleX(.94)}50%{transform:skew(-4deg)scaleX(1.03)}75%{transform:skew(5deg)scaleX(.97)}}.animate-flag-wave{animation:.6s ease-in-out infinite flag-wave}
