/* =========================================================
   Fireworks CSS – built by popup-new.js from [data-fireworks]
   ========================================================= */

/* Container (absolutely fills its parent panel) */
.fwb {
  position: absolute; inset: 0;
  pointer-events: none;
  overflow: hidden;
}

/* Each burst origin */
.fw {
  position: absolute;
  width: 0; height: 0;
  transform: scale(var(--s));
}

/* Each particle */
.fw i {
  position: absolute;
  left: -2.5px; top: -2.5px;
  width: 5px; height: 5px;
  border-radius: 50%;
  background: var(--c);
  box-shadow: 0 0 6px var(--c);
  opacity: 0;
  animation: burst 6s cubic-bezier(.2, .7, .3, 1) infinite;
  animation-delay: var(--dl);
}

/* Rising trail */
.fw::after {
  content: "";
  position: absolute;
  left: -1px; top: 0;
  width: 2px; height: 30px;
  background: linear-gradient(var(--c), transparent);
  opacity: 0;
  animation: rise 6s ease-out infinite;
  animation-delay: calc(var(--dl) - .5s);
}

@keyframes burst {
  0%         { opacity: 0;    transform: rotate(var(--a)) translateY(0)     scale(1); }
  4%         { opacity: 1; }
  30%        { opacity: .85;  transform: rotate(var(--a)) translateY(-50px) scale(.9); }
  45%, 100%  { opacity: 0;    transform: rotate(var(--a)) translateY(-60px) scale(.3); }
}

@keyframes rise {
  0%   { opacity: 0;   transform: translateY(80px); }
  5%   { opacity: .7; }
  8%   { opacity: 0;   transform: translateY(0); }
  100% { opacity: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .fw i, .fw::after { animation: none; }
}
