:root{ --fi-z: 9999; }
@keyframes fallingEffect { to { transform: translateY(120vh); } }
@keyframes fallingUpEffect { to { transform: translateY(-120vh); } }
@keyframes fallingRightEffect { to { transform: translateX(120vw); } }
@keyframes fallingLeftEffect { to { transform: translateX(-120vw); } }
@keyframes spinEffect { to { transform: rotate(360deg); } }

/* 🍂 Balancement façon feuille */
@keyframes swayEffect {
  0%   { transform: translateX(0); }
  25%  { transform: translateX(14px); }
  50%  { transform: translateX(0); }
  75%  { transform: translateX(-14px); }
  100% { transform: translateX(0); }
}
@keyframes tiltEffect {
  0%   { transform: rotate(-10deg); }
  50%  { transform: rotate(10deg); }
  100% { transform: rotate(-10deg); }
}

@keyframes glowEffect {
  0% {
    opacity: 0.6;
    filter:
      drop-shadow(0 0 2px rgba(var(--glow-rgb, 180,70,255), 0.25))
      drop-shadow(0 0 6px rgba(var(--glow-rgb, 180,70,255), 0.20));
  }
  50% {
    opacity: 1;
    filter:
      drop-shadow(0 0 16px rgba(var(--glow-rgb, 180,70,255), 0.75))
      drop-shadow(0 0 30px rgba(var(--glow-rgb, 180,70,255), 0.45))
      drop-shadow(0 0 50px rgba(var(--glow-rgb, 180,70,255), 0.25));
  }
  100% {
    opacity: 0.7;
    filter:
      drop-shadow(0 0 6px rgba(var(--glow-rgb, 180,70,255), 0.35))
      drop-shadow(0 0 14px rgba(var(--glow-rgb, 180,70,255), 0.20));
  }
}

@keyframes bubblePopEffect {
  0%   { transform: scale(0.5); opacity: 0; }
  20%  { transform: scale(1.0); opacity: 1; }
  70%  { transform: scale(1.15) translateY(-12px); opacity: 0.95; }
  100% { transform: scale(1.6); opacity: 0; }
}

/* 🎆 Fusée + traînée */
.fw-rocket{
  position:fixed;
  bottom:-40px;
  width:4px;
  height:120px;
  pointer-events:none;
  z-index:0;
  background:linear-gradient(to top,
    rgba(var(--fw-rgb,180,70,255),0),
    rgba(var(--fw-rgb,180,70,255),0.35),
    rgba(var(--fw-rgb,180,70,255),0.95)
  );
  filter:drop-shadow(0 0 10px rgba(var(--fw-rgb,180,70,255),0.55));
  border-radius:999px;
  translate: 0 0;
  rotate: 0deg;
  transform-origin: 50% 100%;
}
.fw-rocket::after{
  content:"";
  position:absolute;
  top:-6px;
  left:50%;
  width:8px;
  height:8px;
  transform:translateX(-50%);
  background:rgba(var(--fw-rgb,180,70,255),1);
  border-radius:999px;
  filter:drop-shadow(0 0 14px rgba(var(--fw-rgb,180,70,255),0.9));
}

/* ✅ Mouvement fluide (diagonale) */
@keyframes rocketMoveTo {
  from { translate: 0 0; opacity: 0; }
  10%  { opacity: 1; }
  to   { translate: var(--riseX, 0px) var(--riseY); opacity: 1; }
}
/* ✅ Inclinaison progressive */
@keyframes rocketTiltTo {
  from { rotate: 0deg; }
  to   { rotate: var(--riseAngle, 0deg); }
}

/* 💥 POP explosion: bulles */
.fi-bubble{
  position:fixed;
  border-radius:999px;
  pointer-events:none;
  z-index:var(--fi-z, 9999);
  border:2px solid rgba(var(--pop-rgb,180,70,255), 0.55);
  background:rgba(var(--pop-rgb,180,70,255), 0.12);
  transform:translate(-50%,-50%) scale(0.2);
  opacity:0;
  filter: drop-shadow(0 0 10px rgba(var(--pop-rgb,180,70,255), 0.25));
}
@keyframes popBubbleOut{
  0%   { opacity:0; transform:translate(-50%,-50%) scale(0.2); }
  15%  { opacity:1; }
  100% { opacity:0; transform:translate(calc(-50% + var(--dx)), calc(-50% + var(--dy))) scale(1.15); }
}

/* 💥 POP explosion: anneau */
.fi-ring{
  position:fixed;
  width:12px;
  height:12px;
  border-radius:999px;
  pointer-events:none;
  z-index:var(--fi-z, 9999);
  border:3px solid rgba(var(--pop-rgb,180,70,255), 0.75);
  transform:translate(-50%,-50%) scale(0.3);
  opacity:0.0;
  filter: drop-shadow(0 0 14px rgba(var(--pop-rgb,180,70,255), 0.35));
}
@keyframes popRingOut{
  0%   { opacity:0; transform:translate(-50%,-50%) scale(0.2); }
  15%  { opacity:1; }
  100% { opacity:0; transform:translate(-50%,-50%) scale(var(--ringScale, 10)); }
}
	
/* Particules */
.fw-spark{
  position:fixed;
  width:4px;
  height:4px;
  border-radius:999px;
  pointer-events:none;
  z-index:var(--fi-z, 9999);
  background:rgba(var(--fw-rgb,180,70,255),0.95);
  filter:drop-shadow(0 0 10px rgba(var(--fw-rgb,180,70,255),0.75));
}
@keyframes sparkExplodeEffect{
  0%{transform:translate(0,0) scale(1);opacity:1}
  100%{transform:translate(var(--dx),var(--dy)) scale(0.2);opacity:0}
}