/* Comemorações (js/celebrate.js) */
/* Estrelas carimbadas */
.stars span.cel-wait { opacity: .18; filter: grayscale(1); }
.stars span.cel-stamp { animation: celStamp .42s cubic-bezier(.55, 0, .7, .4) both !important; text-shadow: 0 0 16px rgba(253, 224, 71, .95); }
@keyframes celStamp {
  0% { transform: translateY(-90px) scale(4) rotate(-30deg); opacity: 0; }
  55% { transform: translateY(0) scale(1) rotate(0); opacity: 1; }
  70% { transform: scale(1.35, .7); }
  85% { transform: scale(.9, 1.15); }
  100% { transform: scale(1); }
}
.cel-thud { animation: celThud .22s ease-out; }
@keyframes celThud { 30% { transform: translateY(4px) scale(.995); } }
.cel-dust { position: fixed; z-index: 71; width: 0; height: 0; pointer-events: none; }
.cel-dust i { position: absolute; width: 7px; height: 7px; margin: -3px; border-radius: 50%; background: #fde047; box-shadow: 0 0 8px #f59e0b; animation: celDust .55s ease-out forwards; }
@keyframes celDust { to { transform: rotate(var(--a)) translateX(34px) scale(.2); opacity: 0; } }

/* Raio do XP */
.cel-flash { position: fixed; inset: 0; z-index: 72; background: radial-gradient(circle, rgba(255, 250, 210, .9), rgba(253, 224, 71, .35) 50%, transparent 80%); pointer-events: none; animation: celFlash .45s ease-out forwards; }
@keyframes celFlash { 0% { opacity: 0; } 15% { opacity: 1; } 100% { opacity: 0; } }
.cel-bolt { position: fixed; left: 50%; top: 40%; z-index: 73; margin: -60px 0 0 -60px; width: 120px; text-align: center; pointer-events: none; }
.cel-bolt span { display: block; font-size: 96px; line-height: 1; filter: drop-shadow(0 0 18px #fde047) drop-shadow(0 0 40px #f59e0b); animation: celBolt .5s cubic-bezier(.2, 1.8, .4, 1) both, celZz .08s linear .5s 4 alternate; }
.cel-bolt b { display: block; margin-top: 4px; font: 700 30px var(--fun, inherit); color: #fde047; text-shadow: 0 0 14px #f59e0b, 0 3px 0 #b45309; white-space: nowrap; transition: opacity .15s; animation: celUp .4s .15s both; }
@keyframes celBolt { 0% { transform: scale(0) rotate(-25deg); } 60% { transform: scale(1.4) rotate(8deg); } 100% { transform: scale(1); } }
@keyframes celZz { from { transform: translateX(-4px) rotate(-4deg); } to { transform: translateX(4px) rotate(4deg); } }
@keyframes celUp { from { transform: translateY(14px); opacity: 0; } }
.chip.cel-zapped { box-shadow: 0 0 0 2px #fde047, 0 0 22px #f59e0b !important; }

/* Moedas grandes girando */
.cel-coins { position: fixed; left: 0; right: 0; top: 38%; z-index: 73; display: flex; flex-direction: column; align-items: center; gap: 10px; pointer-events: none; }
.cel-coins > b { font: 700 34px var(--fun, inherit); color: #fde047; text-shadow: 0 0 14px #f59e0b, 0 3px 0 #b45309; transition: opacity .2s; animation: celUp .4s .3s both; }
.cel-coin-row { display: flex; gap: 10px; perspective: 400px; }
.cel-coin { width: 58px; height: 58px; animation: celCoinIn .5s cubic-bezier(.2, 1.7, .4, 1) both; }
.cel-coin > i { display: grid; place-items: center; width: 100%; height: 100%; border-radius: 50%; background: radial-gradient(circle at 35% 30%, #fffbd0, #ffd84d 40%, #e8961a 75%, #b8650c); box-shadow: inset 0 -4px 0 #a35a00, inset 0 3px 0 rgba(255, 255, 255, .6), 0 0 22px rgba(255, 216, 77, .7); animation: celSpin .7s linear infinite; }
.cel-coin em { font-style: normal; font-weight: 900; font-size: 30px; color: #a35a00; }
@keyframes celCoinIn { from { transform: scale(0) translateY(40px); opacity: 0; } }
@keyframes celSpin { 0% { transform: rotateY(0); } 50% { transform: rotateY(180deg); filter: brightness(.75); } 100% { transform: rotateY(360deg); } }
.chip.cel-bump { animation: celBump .3s cubic-bezier(.3, 1.8, .5, 1); }
@keyframes celBump { 50% { transform: scale(1.3); box-shadow: 0 0 18px rgba(253, 224, 71, .8); } }

/* Faixa PERFEITO / COMBO */
.cel-banner { position: fixed; left: 0; right: 0; top: 30%; z-index: 70; text-align: center; pointer-events: none; animation: celBanner 1.7s ease-out both; }
.cel-banner span { display: block; font-size: 30px; color: #fde047; letter-spacing: 6px; text-shadow: 0 0 14px #f59e0b; }
.cel-banner b { display: block; font: 700 clamp(40px, 13vw, 64px) var(--fun, inherit); font-style: italic; color: #fde047; text-shadow: 0 0 22px #f59e0b, 0 5px 0 #b45309; }
@keyframes celBanner { 0% { transform: scale(2.6); opacity: 0; } 18% { transform: scale(.92); opacity: 1; } 28% { transform: scale(1); } 80% { opacity: 1; } 100% { transform: translateY(-30px); opacity: 0; } }

/* Chuva de notas musicais */
.cel-notes { position: fixed; inset: 0; z-index: 69; pointer-events: none; overflow: hidden; }
.cel-notes i { position: absolute; top: -50px; font-style: normal; font-weight: 900; text-shadow: 0 0 10px currentColor; animation: celNote linear both; }
@keyframes celNote { 0% { transform: translate(0, 0) rotate(0); opacity: 0; } 10% { opacity: 1; } 50% { transform: translate(calc(var(--sx) * -.5), 50vh) rotate(calc(var(--r) * -1)); } 100% { transform: translate(var(--sx), 108vh) rotate(var(--r)); opacity: .8; } }

/* Combo grande durante o exercício */
.combo.big { animation: celComboBig .45s cubic-bezier(.3, 1.8, .5, 1); box-shadow: 0 0 26px rgba(251, 146, 60, .9); }
@keyframes celComboBig { 0% { transform: scale(.6); } 50% { transform: scale(1.4) rotate(-4deg); } 100% { transform: scale(1); } }

@media (prefers-reduced-motion: reduce) { .cel-bolt span, .cel-coin, .cel-coin > i, .cel-banner, .stars span.cel-stamp { animation-duration: .01s !important; } }
