.sparkle { position:fixed; pointer-events:none; z-index:400; font-size:18px; animation:sparkleAnim 0.85s ease forwards; }
@keyframes sparkleAnim { 0%{opacity:1;transform:scale(0) translateY(0)} 50%{opacity:1;transform:scale(1.2) translateY(-20px)} 100%{opacity:0;transform:scale(0.8) translateY(-50px)} }

.toast { position:fixed; bottom:24px; right:24px; background:var(--card); border:1px solid rgba(22,163,74,0.28); border-radius:12px; padding:14px 18px; display:flex; align-items:center; gap:10px; font-size:13px; font-weight:500; z-index:300; animation:toastIn 0.3s cubic-bezier(0.34,1.56,0.64,1); box-shadow:0 8px 28px rgba(0,0,0,0.12); }
@keyframes toastIn  { from{opacity:0;transform:translateX(60px) scale(0.9)} to{opacity:1;transform:translateX(0) scale(1)} }
.toast-out { animation:toastOut 0.25s ease forwards; }
@keyframes toastOut { to{opacity:0;transform:translateX(60px)} }

@keyframes confettiFall {
  0%   { opacity: 1; transform: translateY(0) translateX(0) rotate(0deg); }
  80%  { opacity: 1; }
  100% { opacity: 0; transform: translateY(105vh) translateX(var(--cdrift)) rotate(var(--crot)); }
}
