/* Motion compartido para las invitaciones públicas y el preview del Estudio. */
.invitacion[data-motion-ready="1"] .rv {
  opacity: 0;
  transform: translate3d(0, 12px, 0);
  transition: opacity .64s cubic-bezier(.22,.8,.26,1), transform .64s cubic-bezier(.22,.8,.26,1);
  transition-delay: var(--rv-d, 0s);
}
.invitacion[data-motion-ready="1"] img.rv,
.invitacion[data-motion-ready="1"] .rv-img {
  transform: scale(.99);
  filter: none;
}
.invitacion .rv.rv-in {
  opacity: 1;
  transform: none;
  filter: none;
}

/* Cadencia por familia existente; la plantilla conserva su composición y paleta. */
.mock[data-motion-style="botanico"] .invitacion[data-motion-ready="1"] .rv,
.mock[data-motion-style="romantico"] .invitacion[data-motion-ready="1"] .rv,
.mock[data-motion-style="mediterraneo"] .invitacion[data-motion-ready="1"] .rv { transform: translate3d(0, 10px, 0); }
.mock[data-motion-style="moderno"] .invitacion[data-motion-ready="1"] .rv,
.mock[data-motion-style="minimalista"] .invitacion[data-motion-ready="1"] .rv { transform: translate3d(0, 7px, 0); }
.mock[data-motion-style="botanico"] .invitacion[data-motion-ready="1"] .rv.rv-in,
.mock[data-motion-style="romantico"] .invitacion[data-motion-ready="1"] .rv.rv-in,
.mock[data-motion-style="mediterraneo"] .invitacion[data-motion-ready="1"] .rv.rv-in,
.mock[data-motion-style="moderno"] .invitacion[data-motion-ready="1"] .rv.rv-in,
.mock[data-motion-style="minimalista"] .invitacion[data-motion-ready="1"] .rv.rv-in { transform: none; }

/* La apertura termina pronto y deja el control de scroll al invitado. */
.modo-invitado .sobre { transition-duration: .68s; }
.modo-invitado .sobre-solapa { transition-duration: .68s; transition-delay: .08s; }
.mock.abriendo .sobre-nota,
.mock.abierta .sobre-nota { animation: none !important; }
.modo-invitado .mock.abriendo .sobre::after {
  animation: tarjeta-sale .88s cubic-bezier(.3,.7,.3,1) .18s both;
}

/* Interacción móvil: controles cómodos, formulario fácil de alcanzar y fotos estables. */
.invitacion .mod-rsvp { scroll-margin-top: 18px; }
.invitacion .mod-rsvp .mod-enviar,
.invitacion .mod-rsvp .mod-boton.mod-enviar { min-height: 48px; touch-action: manipulation; }
.invitacion .mod-rsvp .mod-sn i { min-height: 44px; touch-action: manipulation; }
.invitacion .mod-boton,
.invitacion .mod-regalos-tiendas > .mod-regalos-tienda { min-height: 44px; touch-action: manipulation; }
.invitacion .mod-input { min-height: 44px; }
.invitacion .mod-rsvp :focus-visible,
.invitacion .mod-mapa a:focus-visible,
.invitacion .mod a:focus-visible,
.invitacion .mod button:focus-visible { outline: 2px solid var(--m-acento, #9c7a45); outline-offset: 3px; }
.invitacion .mod-galeria img { height: auto; }
.invitacion .mod-mapa .leaflet-control a { min-width: 32px; min-height: 32px; }

@media (prefers-reduced-motion: reduce) {
  .invitacion .rv,
  .invitacion img.rv,
  .invitacion .rv-img,
  .modo-invitado .sobre,
  .modo-invitado .sobre-solapa { opacity: 1; transform: none; filter: none; animation: none !important; transition: none !important; }
  body.modo-invitado:not(.sin-datos) .sobre { opacity: 0; visibility: hidden; pointer-events: none; }
  body.modo-invitado:not(.sin-datos) .mock .invitacion { visibility: visible !important; }
  body.modo-invitado .mock:not(.abierta) .invitacion { transform: none !important; filter: none !important; }
}
