/* ============================================================
   Implementation layer — utilities the handoff CSS referenced
   but never defined, plus autoplay affordance.
   ============================================================ */

/* ---------- primary button ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  min-height:48px;padding:15px 34px;
  background:var(--red);color:#fff6e6;border:1px solid var(--red);
  font-family:var(--f-caps);font-weight:700;font-size:13px;
  letter-spacing:.24em;text-transform:uppercase;text-decoration:none;
  cursor:pointer;position:relative;border-radius:0;
  transition:background .3s,color .3s,border-color .3s,box-shadow .3s;
}
.btn:hover{background:var(--red-deep);border-color:var(--red-deep);box-shadow:0 10px 26px rgba(92,10,15,.28)}
.btn:focus-visible{outline:2px solid var(--gold);outline-offset:3px}
.btn.ghost{background:transparent;color:var(--red);border-color:rgba(155,27,30,.45)}
.btn.ghost:hover{background:var(--red);color:#fff6e6;border-color:var(--red);box-shadow:none}

/* ---------- venue & travel columns ---------- */
.visit-grid .tv .k{
  font-family:var(--f-caps);letter-spacing:.22em;text-transform:uppercase;
  font-weight:600;font-size:11px;color:var(--gold);margin-bottom:8px;
}
.visit-grid .tv .v{
  font-family:var(--f-display);font-size:21px;font-weight:500;
  line-height:1.25;color:var(--ink);margin-bottom:8px;text-wrap:balance;
}
.visit-grid .tv p{
  font-size:14px;line-height:1.55;color:var(--muted);
  text-wrap:pretty;margin:0 auto;max-width:30ch;
}

/* ---------- RSVP celebration leaves ---------- */
.leaf{
  width:10px;height:18px;border-radius:0 80% 0 80%;
  background:radial-gradient(circle at 30% 30%,#d13a3f,#9b1b1e 60%,#5c0a0f);
  pointer-events:none;
  animation-name:leaffall;animation-timing-function:linear;
  animation-fill-mode:forwards;
}
@keyframes leaffall{
  0%{transform:translate3d(0,0,0) rotate(0);opacity:1}
  100%{transform:translate3d(0,105vh,0) rotate(540deg);opacity:0}
}

/* ---------- music button: gentle attention nudge ---------- */
/* The intro overlay sits at z-index 100 and the button at 60, which left the
   ♪ control physically covered (and unclickable) for the whole intro. Raise the
   button and the toast above it so the song can also be started before entering. */
#music{z-index:110}
#toast{z-index:111}
#music.nudge{animation:nudge 1.8s ease-in-out 3}
@keyframes nudge{
  0%,100%{transform:translateY(0);box-shadow:0 6px 18px rgba(60,20,10,.18)}
  50%{transform:translateY(-5px);box-shadow:0 12px 26px rgba(155,27,30,.32)}
}

/* ---------- reveal conditions must never clip on narrow screens ---------- */
.cond.show{max-height:520px}

/* ---------- respect reduced motion ---------- */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  #music.nudge{animation:none}
  .rv{transition-duration:.01ms !important}
  .petal,.leaf{display:none !important}
  #vineTip{animation:none}
}

/* ---------- small-screen polish ---------- */
@media (max-width:520px){
  .btn{padding:14px 24px;font-size:12px;letter-spacing:.18em}
  .visit-grid .tv .v{font-size:18px}
  .thanks .script{font-size:48px}
  .dress.soft .dc-name{font-size:19px}
}
