/* ============================================================
   LEE — Animation Keyframes & Utility Classes
   ============================================================ */

/* ---------- Breathing (idle loop) ---------- */
@keyframes bouquet-breathe {
  0%, 100% { transform: translateY(0) scale(1); }
  50%       { transform: translateY(-7px) scale(1.006); }
}

.bouquet-breathing {
  animation: bouquet-breathe 5s ease-in-out infinite;
  transform-origin: 400px 520px;
  transform-box: fill-box;
}

/* ---------- Light ray drift ---------- */
@keyframes light-ray-drift {
  0%, 100% { opacity: 0.6; transform: scale(1) rotate(0deg); }
  50%       { opacity: 1;   transform: scale(1.02) rotate(1deg); }
}

/* ---------- Halo pulse ---------- */
@keyframes halo-pulse {
  0%, 100% { opacity: 0.55; transform: translate(-50%, -50%) scale(1); }
  50%       { opacity: 0.85; transform: translate(-50%, -50%) scale(1.04); }
}

.halo-pulsing {
  animation: halo-pulse 6s ease-in-out infinite;
}

/* ---------- Falling petal ---------- */
@keyframes petal-fall {
  0%   { transform: translateY(-20px) rotate(0deg) translateX(0); opacity: 0; }
  8%   { opacity: 0.55; }
  50%  { transform: translateY(50vh) rotate(240deg) translateX(var(--sway, 20px)); }
  90%  { opacity: 0.35; }
  100% { transform: translateY(110vh) rotate(520deg) translateX(calc(var(--sway, 20px) * -0.6)); opacity: 0; }
}

.falling-petal-active {
  animation: petal-fall linear forwards;
}

/* ---------- Ambient shimmer ---------- */
@keyframes ambient-pulse {
  0%, 100% { opacity: 0.07; }
  50%       { opacity: 0.13; }
}

.bloom-pulsing {
  animation: ambient-pulse 9s ease-in-out infinite;
}

/* ---------- Signature glow ---------- */
@keyframes signature-glow {
  0%, 100% {
    filter: drop-shadow(0 0 16px rgba(183, 110, 121, 0.45))
            drop-shadow(0 0 36px rgba(110, 42, 58, 0.2));
  }
  50% {
    filter: drop-shadow(0 0 22px rgba(200, 130, 140, 0.65))
            drop-shadow(0 0 50px rgba(110, 42, 58, 0.3));
  }
}

.signature-glowing {
  animation: signature-glow 5s ease-in-out infinite;
}

/* ---------- Signature fill shimmer ---------- */
@keyframes fill-shimmer {
  0%, 100% { opacity: 0.75; }
  50%       { opacity: 0.95; }
}

.signature-fill-visible {
  animation: fill-shimmer 4s ease-in-out infinite;
}

/* ---------- Initial hidden states ---------- */
.stem-path {
  stroke-dasharray: 1000;
  stroke-dashoffset: 1000;
}

.ribbon-wrap {
  stroke-dasharray: 800;
  stroke-dashoffset: 800;
}

.rose-petal,
.rose-center,
.leaf-group,
.filler-group,
.ribbon-bow,
.dewdrop {
  opacity: 0;
}

.will-animate {
  will-change: transform, opacity;
}

.scene-ready .particle-canvas {
  transition: opacity 2.5s ease;
}
