/* ==========================================================
   Finale sequence: celebration, invitation, date picker, sendoff
   ========================================================== */

/* ---------- Celebration ---------- */

.fireworks-canvas {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  z-index: 0;
}

.finale-content {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3vmin;
}

.wish-title {
  font-size: clamp(20px, 5vmin, 46px);
  color: var(--gold-bright);
  text-shadow:
    0 0 16px rgba(255, 217, 138, 0.8),
    0 0 40px rgba(242, 160, 192, 0.5),
    3px 3px 0 var(--night-deep);
  animation: wish-in 1.2s ease;
  line-height: 1.6;
}

/* In-place glow entrance (no translate — element stays centered) */
@keyframes wish-in {
  0%   { opacity: 0; transform: scale(0.55); }
  60%  { opacity: 1; transform: scale(1.12); }
  100% { transform: scale(1); }
}

.wish-sub {
  font-size: clamp(10px, 2.3vmin, 18px);
  color: var(--pink-soft);
  text-shadow: 2px 2px 0 var(--night-deep);
  line-height: 2;
}

/* ---------- Invitation ---------- */

.invite-question {
  font-size: clamp(13px, 3vmin, 26px);
  color: var(--pink-soft);
  text-shadow: 0 0 12px rgba(242, 160, 192, 0.5), 2px 2px 0 var(--night-deep);
  line-height: 1.9;
}

.invite-zone {
  position: relative;
  width: min(84cqw, 760px);
  height: min(42cqh, 300px);
  border: 2px dashed rgba(240, 184, 96, 0.25);
}

.invite-zone .pixel-btn {
  position: absolute;
  white-space: nowrap;
}

#btn-yes {
  left: 18%;
  top: 40%;
}

#btn-no {
  left: 62%;
  top: 40%;
  transition: left 0.12s ease-out, top 0.12s ease-out;
}

#btn-no.dodging {
  animation: no-puff 0.25s ease;
}

@keyframes no-puff {
  0%   { filter: brightness(1.6); transform: scale(0.85); }
  100% { filter: brightness(1); transform: scale(1); }
}

/* Labubu, summoned to deal with the villain button */
.invite-labubu {
  position: absolute;
  bottom: 0;
  z-index: 4;
  line-height: 0;
  transform: translateY(105%);
  transition: transform 0.55s cubic-bezier(0.3, 1.25, 0.5, 1);
  filter: drop-shadow(0 0 8px rgba(242, 160, 192, 0.6));
  pointer-events: none;
}

.invite-labubu svg {
  width: clamp(40px, 10cqh, 68px);
  height: auto;
}

.invite-labubu.risen {
  transform: translateY(12%);
}

.invite-labubu.chomp {
  animation: labubu-chomp 0.6s ease;
}

@keyframes labubu-chomp {
  0%, 100% { transform: translateY(12%) scale(1, 1); }
  25% { transform: translateY(16%) scale(1.15, 0.8); }
  50% { transform: translateY(8%) scale(0.9, 1.15); }
  75% { transform: translateY(14%) scale(1.08, 0.92); }
}

.villain-caption {
  position: absolute;
  bottom: 3%;
  left: 50%;
  transform: translateX(-50%);
  font-size: clamp(8px, 1.7vmin, 13px);
  color: var(--pink);
  text-shadow: 2px 2px 0 var(--night-deep);
  opacity: 0;
  transition: opacity 0.25s ease;
  pointer-events: none;
  white-space: nowrap;
}

.villain-caption.show {
  opacity: 1;
}

/* ---------- Date picker ---------- */

.date-panel {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3vmin;
  text-align: center;
}

.date-panel input[type="date"] {
  font-family: var(--font-pixel);
  font-size: clamp(11px, 2.4vmin, 18px);
  color: var(--ink);
  background: rgba(255, 250, 235, 0.75);
  border: 3px solid var(--parchment-edge);
  padding: 1.6vmin 2.2vmin;
  outline: none;
}

.date-buttons {
  display: flex;
  gap: 2.5vmin;
  flex-wrap: wrap;
  justify-content: center;
}

/* ---------- Sendoff ---------- */

.settled-message {
  font-size: clamp(12px, 2.8vmin, 24px);
  color: var(--gold-bright);
  text-shadow: 0 0 14px rgba(255, 217, 138, 0.7), 2px 2px 0 var(--night-deep);
  line-height: 2.1;
  max-width: 34ch;
  animation: wish-in 1s ease;
}
