/* css/balloons.css — CSS-drawn balloons that fall once across the countdown */
.balloons {
  position: fixed;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
  z-index: 5;
}

/* Balloons belong to the countdown only. */
html:not([data-view="hero"]) .balloons {
  display: none;
}

.balloon {
  position: absolute;
  top: -30vh;
  left: var(--left);
  width: var(--size);
  height: calc(var(--size) * 1.18);
  border-radius: 50% 50% 50% 50% / 55% 55% 45% 45%;
  background:
    radial-gradient(circle at 32% 28%, rgba(255, 255, 255, 0.75) 0, rgba(255, 255, 255, 0.25) 18%, rgba(255, 255, 255, 0) 40%),
    var(--color);
  box-shadow: inset -8px -10px 18px rgba(0, 0, 0, 0.12), 0 10px 24px var(--rose-soft);
  animation: balloon-fall var(--duration) cubic-bezier(0.35, 0, 0.7, 1) var(--delay) 1 both;
}

/* knot */
.balloon::before {
  content: "";
  position: absolute;
  left: 50%;
  bottom: -7px;
  width: 12px;
  height: 10px;
  transform: translateX(-50%);
  background: var(--color);
  clip-path: polygon(50% 0, 100% 100%, 0 100%);
  filter: brightness(0.85);
}

/* string */
.balloon::after {
  content: "";
  position: absolute;
  left: 50%;
  top: 100%;
  width: 2px;
  height: calc(var(--size) * 1.1);
  margin-top: 6px;
  margin-left: -1px;
  background: rgba(139, 47, 74, 0.45);
  border-radius: 2px;
  transform-origin: top center;
  animation: string-sway 1.6s ease-in-out infinite alternate;
}

@keyframes balloon-fall {
  0%   { transform: translateY(0) translateX(0) rotate(-6deg); opacity: 0; }
  6%   { opacity: 1; }
  50%  { transform: translateY(70vh) translateX(var(--sway)) rotate(5deg); }
  94%  { opacity: 1; }
  100% { transform: translateY(150vh) translateX(0) rotate(-4deg); opacity: 0; }
}

@keyframes string-sway {
  from { transform: rotate(-8deg); }
  to   { transform: rotate(8deg); }
}
