/* Lunaris — animations de célébration (static/js/celebrate.js) */
.lfx-particle {
  position: fixed; top: 0; left: 0; width: 8px; height: 12px; border-radius: 2px;
  pointer-events: none; z-index: 10050; will-change: transform, opacity;
  animation: lfx-burst var(--dur, 1100ms) cubic-bezier(.15, .7, .3, 1) forwards;
}
.lfx-particle.round { width: 8px; height: 8px; border-radius: 50%; }
@keyframes lfx-burst {
  0%   { transform: translate(var(--x0), var(--y0)) rotate(0deg) scale(1); opacity: 1; }
  75%  { opacity: 1; }
  100% { transform: translate(calc(var(--x0) + var(--dx)), calc(var(--y0) + var(--dy))) rotate(var(--rot)) scale(.7); opacity: 0; }
}

.lfx-pop { animation: lfx-pop .55s cubic-bezier(.2, 1.3, .4, 1) both; }
@keyframes lfx-pop {
  0%   { opacity: 0; transform: translateY(8px) scale(.94); }
  60%  { opacity: 1; transform: translateY(0) scale(1.02); }
  100% { opacity: 1; transform: none; }
}

.lfx-shine { position: relative; overflow: hidden; }
.lfx-shine::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(110deg, transparent 25%, rgba(255,255,255,.45) 50%, transparent 75%);
  transform: translateX(-120%); animation: lfx-shine 1.2s .45s ease-out forwards;
}
@keyframes lfx-shine { to { transform: translateX(120%); } }

.lfx-glow { animation: lfx-glow 1.6s ease-out 1; }
@keyframes lfx-glow {
  0%   { box-shadow: 0 0 0 0 rgba(74,222,128,.55); }
  100% { box-shadow: 0 0 0 18px rgba(74,222,128,0); }
}

.lfx-check { display: inline-block; animation: lfx-check .7s cubic-bezier(.2, 1.5, .4, 1) both; }
@keyframes lfx-check {
  0%   { transform: scale(0) rotate(-25deg); opacity: 0; }
  70%  { transform: scale(1.18) rotate(4deg); opacity: 1; }
  100% { transform: scale(1) rotate(0); }
}
.lfx-ring { position: relative; }
.lfx-ring::after {
  content: ""; position: absolute; left: 50%; top: 50%; width: 100%; height: 100%;
  border-radius: 50%; border: 3px solid currentColor; pointer-events: none;
  transform: translate(-50%, -50%) scale(.6); opacity: .8;
  animation: lfx-ring 1s .15s ease-out forwards;
}
@keyframes lfx-ring { to { transform: translate(-50%, -50%) scale(1.9); opacity: 0; } }

.lfx-scramble { font-variant-numeric: tabular-nums; letter-spacing: .06em; }
.lfx-scramble .pending { color: rgba(255,255,255,.35); }

@media (prefers-reduced-motion: reduce) {
  .lfx-particle, .lfx-ring::after { display: none; }
  .lfx-pop, .lfx-check, .lfx-glow, .lfx-shine::after, .lfx-ring::after { animation: none !important; }
}
