@keyframes tileIn { from { transform: scale(.4); opacity: 0; } }
@keyframes pulse { 50% { transform: scale(1.08); } }
@keyframes bounce {
  0%, 100% { transform: translateY(0) scale(1); }
  30% { transform: translateY(-18%) scale(1.06, .95); }
  55% { transform: translateY(0) scale(1.08, .9); }
  75% { transform: translateY(-5%) scale(.98, 1.03); }
}
@keyframes wiggle {
  0%, 100% { transform: rotate(0); }
  20% { transform: rotate(-9deg); }
  40% { transform: rotate(8deg); }
  60% { transform: rotate(-6deg); }
  80% { transform: rotate(4deg); }
}
@keyframes jelly {
  0%, 100% { transform: scale(1, 1); }
  25% { transform: scale(1.18, .85); }
  50% { transform: scale(.88, 1.12); }
  75% { transform: scale(1.06, .96); }
}
@keyframes shake {
  0%, 100% { transform: translateX(0); }
  20%, 60% { transform: translateX(-6%); }
  40%, 80% { transform: translateX(6%); }
}
@keyframes popIn {
  0% { transform: scale(0); opacity: 0; }
  70% { transform: scale(1.12); opacity: 1; }
  100% { transform: scale(1); }
}
@keyframes floaty { 50% { transform: translateY(-4%); } }
@keyframes spin { to { transform: rotate(360deg); } }

.a-bounce { animation: bounce .7s ease-out; }
.a-wiggle { animation: wiggle .6s ease-in-out; }
.a-jelly { animation: jelly .5s ease-in-out; }
.a-shake { animation: shake .4s ease-in-out; }
.a-pop { animation: popIn .45s cubic-bezier(.3,1.5,.5,1) both; }
.a-float { animation: floaty 2.4s ease-in-out infinite; }
