@keyframes pop {
    0%   { transform: scale(1); }
    50%  { transform: scale(1.4); }
    100% { transform: scale(1); }
}

@keyframes shake {
    0%, 100% { transform: translateX(0); }
    20%       { transform: translateX(-8px); }
    40%       { transform: translateX(8px); }
    60%       { transform: translateX(-6px); }
    80%       { transform: translateX(6px); }
}

@keyframes starBurst {
    0%   { transform: scale(0.2) rotate(-30deg); opacity: 0; }
    60%  { transform: scale(1.3) rotate(10deg);  opacity: 1; }
    100% { transform: scale(1)   rotate(0deg);   opacity: 1; }
}

@keyframes slideInUp {
    from { transform: translateY(40px); opacity: 0; }
    to   { transform: translateY(0);    opacity: 1; }
}

@keyframes confettiDrop {
    0%   { transform: translateY(-20px) rotate(0deg);   opacity: 1; }
    100% { transform: translateY(120px) rotate(720deg); opacity: 0; }
}

@keyframes fadeIn {
    from { opacity: 0; }
    to   { opacity: 1; }
}

@keyframes bounceIn {
    0%   { transform: scale(0.3); opacity: 0; }
    50%  { transform: scale(1.1); }
    70%  { transform: scale(0.9); }
    100% { transform: scale(1);   opacity: 1; }
}

.anim-pop     { animation: pop 0.3s ease; }
.anim-shake   { animation: shake 0.4s ease; }
.anim-fadein  { animation: fadeIn 0.4s ease both; }
.anim-slidein { animation: slideInUp 0.4s ease both; }
.anim-bounce  { animation: bounceIn 0.5s cubic-bezier(0.36,0.07,0.19,0.97) both; }

.star.revealed { animation: starBurst 0.5s cubic-bezier(0.36,0.07,0.19,0.97) both; opacity: 1; }
