/* ==========================================================================
   Sistema de landings — base común
   --------------------------------------------------------------------------
   Lo que comparten todas las landings: tipografías de marca, paleta, blindaje
   contra Bootstrap y MDB, contenedor, botones, barra superior, slider,
   formularios y acordeón.

   page-landing.php lo carga en TODAS las landings, antes del CSS propio de
   cada una. Para ajustar una landing concreta no se toca este archivo: se usa
   su landing.css, que se carga después y puede sobrescribir lo que haga falta.
   ========================================================================== */

/* --------------------------------------------------------------------------
   Tipografías corporativas
   --------------------------------------------------------------------------
   Hagrid  -> títulos y textos destacados
   Geomanist -> párrafos y el resto

   Archivos originales en .ttf, convertidos a .woff2 (pesan ~85% menos).

   Hagrid solo tiene dos pesos disponibles: Regular (400) y Extrabold. Por eso
   el Extrabold se declara con el rango "700 800": así el 700 que usan botones
   y algunos titulares toma el archivo real en vez de fabricar una negrita
   falsa engordando el Regular.

   Geomanist no trae itálicas, y no hacen falta: ningún texto en Geomanist va
   inclinado. Las cursivas de la landing son todas de Hagrid.
   -------------------------------------------------------------------------- */

@font-face {
  font-family: 'Hagrid';
  src: url('fonts/Hagrid-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Hagrid';
  src: url('fonts/Hagrid-Italic.woff2') format('woff2');
  font-weight: 400;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: 'Hagrid';
  src: url('fonts/Hagrid-ExtraBold.woff2') format('woff2');
  font-weight: 700 800;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Hagrid';
  src: url('fonts/Hagrid-ExtraBoldItalic.woff2') format('woff2');
  font-weight: 700 800;
  font-style: italic;
  font-display: swap;
}

@font-face {
  font-family: 'Geomanist';
  src: url('fonts/Geomanist-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Geomanist';
  src: url('fonts/Geomanist-Medium.woff2') format('woff2');
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Geomanist';
  src: url('fonts/Geomanist-Bold.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}
/* Geomanist no tiene Extrabold: por encima de Bold solo hay Black y Ultra,
   ambos declarados como 900. Se usa Black, y el rango cubre 800 y 900. */
@font-face {
  font-family: 'Geomanist';
  src: url('fonts/Geomanist-Black.woff2') format('woff2');
  font-weight: 800 900;
  font-style: normal;
  font-display: swap;
}

.lpg {
  /* Paleta — muestreada del comp original */
  --rojo:        #ff0042;
  --rojo-osc:    #d80038;
  --amarillo:    #fcc048;
  --amarillo-osc:#e8a92e;
  --crema:       #fcfcf0;
  --morado:      #4a1a3c;            /* variedades de zarzamora */
  --dorado:      #c8a44a;
  --tinta:       #2b2b2b;
  --gris:        #6d6d6d;
  --gris-linea:  #d9d9d9;
  --blanco:      #fff;

  /* Tipografía corporativa */
  --font-display: 'Hagrid', system-ui, sans-serif;
  --font-texto:   'Geomanist', system-ui, sans-serif;

  --contenedor: 1200px;
  --radio:      22px;
  --radio-lg:   34px;

  font-family: var(--font-texto);
  /* MDB pone font-weight:300 en el <body> y se hereda hacia dentro, así que
     todo el texto salía un peso por debajo del que le toca. */
  font-weight: 400;
  color: var(--tinta);
  background: var(--blanco);
  line-height: 1.55;
  overflow-x: clip;
}

/* --------------------------------------------------------------------------
   Blindaje contra Bootstrap / MDB
   -------------------------------------------------------------------------- */
.lpg *,
.lpg *::before,
.lpg *::after { box-sizing: border-box; }

/* Todo el bloque va con :where(), que aporta especificidad cero. Así cada
   regla pesa lo mismo que la clase .lpg y nada más: sigue ganando a los
   selectores de elemento de Bootstrap y MDB, pero cualquier clase propia
   declarada más abajo la sobrescribe sin pelear.

   Sin :where(), un selector como ".lpg a" (0,1,1) vence a ".lpg-topbar__mail"
   (0,1,0) y deja los enlaces sin su color. */
.lpg :where(h1, h2, h3, h4, p, ul, li, figure) {
  margin: 0;
  padding: 0;
}
.lpg :where(ul) { list-style: none; }

.lpg :where(img, picture, svg) { display: block; max-width: 100%; }
.lpg :where(img) { height: auto; }

.lpg :where(a) { color: inherit; text-decoration: none; }

/* --------------------------------------------------------------------------
   Neutralización de los estilos del tema
   --------------------------------------------------------------------------
   main.css cuelga estilos de las clases que WordPress pone en el <body>, y
   alcanzan a los elementos de la landing:

     .page h2 / .page h3          (0,1,1)  Oswald y versalitas
     .page h2:after / h3:after    (0,1,2)  la raya morada #583d72
     .page p                      (0,1,1)  gris #5d5d5d en Lato
     .page ul li                  (0,1,2)  gris en Lato
     .page ul                     (0,1,1)  sangría de 15px
     .content h3:after            (0,1,2)  más rayas de colores
     .content h4                  (0,1,1)  Oswald y versalitas

   Todas ganan al bloque de blindaje de arriba, que va con :where() a propósito
   para que las clases propias puedan sobrescribirlo. Aquí se recuperan
   añadiendo .lpg al selector, lo que sube un punto la especificidad y basta
   para pasar por encima.

   Los valores son "inherit" y no colores fijos: así el elemento vuelve a
   heredar de su contenedor, que es donde el sistema define qué corresponde en
   cada sitio. Un párrafo dentro de una tarjeta roja seguirá saliendo blanco, y
   uno sobre fondo claro seguirá en color tinta. Con un valor fijo habría que
   acertar caso por caso y se rompería a la primera.

   Estas reglas alcanzan (0,1,1), lo mismo que las del tema, y ganan por ir
   declaradas después. Las clases propias que necesiten imponerse a ellas se
   escriben ".lpg .mi-clase" (0,2,0), que pesa más por llevar dos clases.
   -------------------------------------------------------------------------- */
.lpg :is(h1, h2, h3, h4, h5, h6) {
  font-family: inherit;
  text-transform: none;
}

/* Los adornos: la raya morada y sus variantes de color */
.lpg :is(h1, h2, h3, h4, h5, h6)::before,
.lpg :is(h1, h2, h3, h4, h5, h6)::after {
  content: none;
}

.lpg :is(p, li) {
  font-family: inherit;
  color: inherit;
}

.lpg :is(ul, ol) {
  padding-left: 0;
  margin-bottom: 0;
}

/* El tema baja a ".page ul li" (0,1,2) y ".page ul li strong" (0,1,3), por
   encima de las reglas de arriba. Se replica su forma para empatar, y así
   ganan estas por ir declaradas después. */
.lpg :is(ul, ol) li {
  font-family: inherit;
  color: inherit;
  margin-bottom: 0;
}

.lpg :is(ul, ol) li strong { font-weight: 700; }

.lpg li { margin-bottom: 0; }

.lpg strong { font-weight: 700; }

.lpg hr { width: auto; margin: 0; }

.lpg :where(button, input, select, textarea) {
  font: inherit;
  color: inherit;
  margin: 0;
  border-radius: 0;
  background: none;
  border: 0;
  box-shadow: none;
}
/* MDB inyecta transiciones y bordes animados en los inputs */
.lpg input:focus,
.lpg select:focus,
.lpg textarea:focus { box-shadow: none; outline: none; }

.lpg-sr-only {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

/* --------------------------------------------------------------------------
   Contenedor estándar
   --------------------------------------------------------------------------
   .wrap es el único contenedor del sitio: 1200px como máximo, centrado, con
   aire lateral en pantallas pequeñas. TODO el contenido va dentro de un .wrap.

   Lo único que puede salirse a ancho completo son los elementos decorativos:
   fondos, texturas, imágenes de banda y velos de color. Esos van en el
   contenedor de sección (posicionados o como background), nunca en el .wrap.

   Va con el scope .lpg para que ningún plugin de WordPress con una clase
   .wrap propia lo pise. Si algún día se quiere global, se quita el .lpg.
   -------------------------------------------------------------------------- */
.lpg .wrap {
  width: min(100% - 2.5rem, var(--contenedor));
  margin-inline: auto;
}

.lpg-center { text-align: center; }

.lpg .lpg-h2 {
  font-family: var(--font-texto);     /* Geomanist Bold */
  font-weight: 700;
  font-size: clamp(1.4rem, 1.05rem + 1.5vw, 2.2rem);
  line-height: 1.22;
  letter-spacing: -0.01em;
  text-align: center;
  text-wrap: balance;
}
.lpg-h2--red { color: var(--rojo); }

.lpg .lpg-h3 {
  font-family: var(--font-display);   /* Hagrid Regular */
  font-weight: 400;
  font-size: clamp(1.25rem, 1rem + 1.1vw, 1.85rem);
  line-height: 1.2;
  text-wrap: balance;
}

.lpg .lpg-lead {
  max-width: 46rem;
  margin-inline: auto;
  text-align: center;
  font-size: clamp(0.95rem, 0.9rem + 0.2vw, 1.05rem);
  color: var(--tinta);
}

/* --------------------------------------------------------------------------
   Botones — componente estándar de la landing
   --------------------------------------------------------------------------
   Un único estilo para todos los botones, sea <a> o <button>:

     <a class="lpg-btn lpg-btn--yellow" href="#">
       Texto
       <span class="lpg-btn__arrow" aria-hidden="true">
         <svg viewBox="0 0 24 24" width="14" height="14"><use href="#i-arrow"/></svg>
       </span>
     </a>

   Variantes: --yellow (por defecto), --white (sobre rojo), --outline (sobre foto).
   Se declara autosuficiente (border, background, margin, appearance) para no
   depender del blindaje y para resistir los estilos de Bootstrap y MDB.
   -------------------------------------------------------------------------- */
.lpg-btn {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  display: inline-flex;
  align-items: center;
  /* El hueco de la derecha lo reserva el padding: la flecha va posicionada,
     porque en el hover crece por encima del texto. */
  padding: 0.6rem 2.75rem 0.6rem 1.5rem;
  margin: 0;
  border: 0;
  border-radius: 999px;
  background: none;
  appearance: none;
  box-shadow: none;
  text-align: left;
  font-family: var(--font-texto);     /* Geomanist Bold */
  font-weight: 700;
  font-size: 0.92rem;
  line-height: 1.2;
  cursor: pointer;
  transition: background-color 0.18s ease, color 0.18s ease;
}
.lpg-btn:focus-visible { outline: 3px solid var(--tinta); outline-offset: 3px; }

/* --------------------------------------------------------------------------
   La flecha
   --------------------------------------------------------------------------
   En reposo es un círculo pegado al borde derecho. Al pasar el ratón crece
   hacia la izquierda hasta ocupar el botón entero, tapando el texto, y aparece
   una línea larga que une con la punta.

   Crece la anchura y no una escala, porque el borde derecho tiene que quedarse
   quieto: es lo que da la sensación de que se despliega hacia un lado en vez
   de inflarse desde el centro.
   -------------------------------------------------------------------------- */
/* La flecha se dibuja con los dos pseudo-elementos del propio contenedor, no
   con el SVG. Es la única forma de que línea y punta no puedan descuadrarse:
   comparten elemento, se centran con la misma regla y su grosor sale del mismo
   valor. Con un SVG aparte, cualquier resto de subpíxel los separaba, y cada
   motor lo redondeaba a su manera.

   El SVG del marcado se oculta; se deja en el HTML porque el mismo símbolo se
   usa en otros sitios y no compensa tocar los siete botones. */
.lpg-btn__arrow {
  position: absolute;
  right: 8px;
  /* Centrado con inset + margin auto y NO con top:50% + translate:-50%.
     La altura del botón puede ser impar, y entonces el 50% cae en medio píxel:
     de ahí el saltito del icono al arrancar la animación. Así siempre son
     enteros. */
  top: 0;
  bottom: 0;
  margin-block: auto;
  z-index: 1;

  width: 28px;
  height: 28px;
  border-radius: 999px;
  box-sizing: border-box;

  transition: width 0.38s cubic-bezier(0.65, 0, 0.35, 1);
}

.lpg-btn__arrow svg { display: none; }

/* El asta. Con left y right se estira sola al crecer el contenedor: no hay
   nada que aparecer ni sincronizar.

   El right no coincide con el de la punta porque la punta va girada: su caja
   mide 8px, pero al rotarla 45 grados el vértice se adelanta unos 5.7px hacia
   la derecha. El asta tiene que llegar hasta ahí, no hasta el borde de la
   caja, o queda un hueco de un par de píxeles entre las dos piezas. */
.lpg-btn__arrow::before {
  content: '';
  position: absolute;
  left: 9px;
  right: 9px;
  top: 0;
  bottom: 0;
  margin-block: auto;
  height: 2px;
  background: currentColor;
}

/* La punta: un cuadrado con dos lados y girado 45 grados. El borde mide lo
   mismo que el asta, así que el trazo es uniforme de principio a fin. */
.lpg-btn__arrow::after {
  content: '';
  position: absolute;
  right: 9px;
  top: 0;
  bottom: 0;
  margin-block: auto;
  width: 8px;
  height: 8px;
  border-top: 2px solid currentColor;
  border-right: 2px solid currentColor;
  rotate: 45deg;
}

.lpg-btn:hover .lpg-btn__arrow,
.lpg-btn:focus-visible .lpg-btn__arrow {
  width: calc(100% - 16px);
}

/* Sin animación para quien pidió menos movimiento: el círculo se queda quieto
   y el botón sigue respondiendo con el cambio de color. */
@media (prefers-reduced-motion: reduce) {
  .lpg-btn:hover .lpg-btn__arrow,
  .lpg-btn:focus-visible .lpg-btn__arrow { width: 28px; }
}

.lpg-btn--yellow           { background: var(--amarillo); color: var(--tinta); }
.lpg-btn--yellow:hover     { background: var(--amarillo-osc); }
.lpg-btn--yellow .lpg-btn__arrow { background: var(--blanco); color: var(--tinta); }

.lpg-btn--white            { background: var(--blanco); color: var(--tinta); }
.lpg-btn--white:hover      { background: var(--crema); }
.lpg-btn--white .lpg-btn__arrow { background: var(--amarillo); color: var(--tinta); }

.lpg-btn--outline          { background: transparent; color: var(--blanco); border: 2px solid var(--blanco); }
.lpg-btn--outline:hover    { background: var(--blanco); color: var(--rojo); }
.lpg-btn--outline .lpg-btn__arrow { background: var(--amarillo); color: var(--tinta); }

/* --------------------------------------------------------------------------
   Barra superior
   -------------------------------------------------------------------------- */
.lpg-topbar { background: var(--rojo); }

.lpg-topbar__inner {
  min-height: 54px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding-block: 0.5rem;
}
.lpg-topbar__logo img { width: 46px; height: auto; }

/* Centrado por caja, no por línea: con line-height heredado el texto queda
   1.4px alto, porque el espacio sobrante se reparte según el ascendente y el
   descendente de la fuente, que no son simétricos. Con inline-flex la caja de
   línea deja de mandar y align-items hace el centrado real. */
.lpg-topbar__mail {
  display: inline-flex;
  align-items: center;
  line-height: 1;
  background: var(--blanco);
  color: var(--rojo);
  font-family: var(--font-texto);     /* Geomanist */
  font-weight: 500;
  font-size: clamp(0.7rem, 0.62rem + 0.3vw, 0.82rem);
  padding: 0.65rem 1.15rem;
  border-radius: 999px;
  transition: background-color 0.18s ease, color 0.18s ease;
}
.lpg-topbar__mail:hover { background: var(--amarillo); color: var(--tinta); }

/* --------------------------------------------------------------------------
   Slider — scroll-snap nativo, sin librerías
   -------------------------------------------------------------------------- */
.lpg-slider { position: relative; }

.lpg-slider__viewport {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: 100%;
  overflow-x: auto;
  overscroll-behavior-inline: contain;
  scroll-snap-type: x mandatory;
  scrollbar-width: none;
}
.lpg-slider__viewport::-webkit-scrollbar { display: none; }

.lpg-slider__viewport > * {
  scroll-snap-align: center;
  min-width: 0;
}

.lpg-dots {
  display: flex;
  gap: 0.7rem;
  justify-content: center;
  margin-top: clamp(1rem, 0.6rem + 1.4vw, 1.9rem);
}
/* Inactivo: relleno rojo. Activo: hueco (relleno blanco) y 1.3x más grande. */
.lpg-dots button {
  position: relative;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  border: 2px solid var(--rojo);
  background: var(--rojo);
  cursor: pointer;
  padding: 0;
  transform: scale(1);

  /* El color cruza rápido y el tamaño va más lento, con un remate elástico:
     la curva pasa de 1.3 y vuelve, así el punto "asienta" en vez de saltar. */
  transition:
    background-color 0.25s ease,
    transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.lpg-dots button[aria-current='true'] {
  background: var(--blanco);
  transform: scale(1.3);
}

/* Amplía el área de toque a 28px sin cambiar el tamaño visible: un punto de
   12px es difícil de acertar con el dedo. */
.lpg-dots button::after {
  content: '';
  position: absolute;
  inset: -8px;
}

.lpg-dots button:focus-visible { outline: 3px solid var(--tinta); outline-offset: 3px; }

/* --------------------------------------------------------------------------
   Tarjetas de formulario
   -------------------------------------------------------------------------- */
.lpg-formcard {
  border-radius: var(--radio-lg);
  padding: clamp(1.5rem, 1rem + 2vw, 2.4rem);
  width: 100%;
}
.lpg-formcard--light {
  background: var(--blanco);
  box-shadow: 0 18px 45px rgb(0 0 0 / 0.10);
}
.lpg-formcard--red {
  background: var(--rojo);
  color: var(--blanco);
  box-shadow: 0 18px 45px rgb(255 0 66 / 0.22);
}

/* El título va en Geomanist; solo el nombre de marca cambia a Hagrid. */
.lpg .lpg-formcard__title {
  font-family: var(--font-texto);     /* Geomanist */
  font-weight: 700;
  font-size: clamp(1.1rem, 0.95rem + 0.7vw, 1.4rem);
  line-height: 1.25;
  text-align: center;
  color: var(--rojo);
  margin-bottom: 1.4rem;
}
.lpg-formcard--red .lpg-formcard__title { color: var(--blanco); }

/* Nombre de marca: siempre en Hagrid, herede el estilo que herede */
.lpg .lpg-marca { font-family: var(--font-display); }

/* Campos: línea inferior, como en el comp */
.lpg-field { position: relative; margin-bottom: 1.15rem; }

.lpg-field input,
.lpg-field select,
.lpg-field textarea {
  width: 100%;
  padding: 0.55rem 0.1rem;
  border-bottom: 1px solid var(--gris-linea);
  font-size: 0.92rem;
  color: var(--tinta);
  background: transparent;
  transition: border-color 0.2s ease;
}
/* El alto sigue al contenido sin JavaScript. El ancho no se toca: queda al
   100% del contenedor y resize:none impide que el visitante lo deforme.
   Donde field-sizing no exista, landing.js hace el mismo trabajo. */
.lpg-field textarea {
  field-sizing: content;
  resize: none;
  width: 100%;
  min-height: 2.6rem;
  max-height: 10rem;
  overflow-y: auto;
}

.lpg-field input::placeholder,
.lpg-field textarea::placeholder { color: var(--gris); opacity: 1; }

.lpg-field input:focus,
.lpg-field select:focus,
.lpg-field textarea:focus { border-bottom-color: var(--rojo); }

/* Campo de teléfono: el "+52" solo aparece cuando el campo está en uso, para
   que el placeholder "WhatsApp" se lea limpio mientras está vacío. */
.lpg-field--tel { position: relative; }

.lpg-field__prefijo {
  position: absolute;
  left: 0.1rem;
  top: 0.55rem;
  font-size: 0.92rem;
  line-height: 1.5;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.15s ease;
}

.lpg-field--tel input { transition: padding-left 0.15s ease, border-color 0.2s ease; }

/* El selector apunta a .tel-mx y no a "input" a secas: en este campo convive
   un input oculto, y un campo oculto nunca muestra placeholder, así que
   cumpliría :not(:placeholder-shown) y encendería el prefijo siempre.
   Se usa la clase, no el atributo data-, porque es lo único que Contact
   Form 7 permite escribir en un shortcode: así el mismo CSS sirve para la
   maqueta y para el formulario ya integrado. */
.lpg-field--tel:focus-within .lpg-field__prefijo,
.lpg-field--tel:has(input.tel-mx:not(:placeholder-shown)) .lpg-field__prefijo {
  opacity: 0.55;
}

.lpg-field--tel:focus-within input.tel-mx,
.lpg-field--tel:has(input.tel-mx:not(:placeholder-shown)) input.tel-mx {
  padding-left: 2.5rem;
}

.lpg-formcard--red .lpg-field--tel:focus-within .lpg-field__prefijo,
.lpg-formcard--red .lpg-field--tel:has(input.tel-mx:not(:placeholder-shown)) .lpg-field__prefijo {
  opacity: 0.85;
}

/* Select: quitamos la flecha nativa y dibujamos la del comp */
.lpg-field--select { position: relative; }
.lpg-field--select select {
  appearance: none;
  cursor: pointer;
  padding-right: 1.6rem;
}
.lpg-field--select::after {
  content: '';
  position: absolute;
  right: 0.35rem;
  top: 1.15rem;
  width: 0.5rem;
  height: 0.5rem;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: rotate(45deg);
  pointer-events: none;
  opacity: 0.55;
}
.lpg-field select:invalid { color: var(--gris); }

/* Variante sobre fondo rojo */
.lpg-formcard--red .lpg-field input,
.lpg-formcard--red .lpg-field select,
.lpg-formcard--red .lpg-field textarea {
  color: var(--blanco);
  border-bottom-color: rgb(255 255 255 / 0.55);
}
.lpg-formcard--red .lpg-field input::placeholder,
.lpg-formcard--red .lpg-field textarea::placeholder { color: rgb(255 255 255 / 0.85); }
.lpg-formcard--red .lpg-field select:invalid { color: rgb(255 255 255 / 0.85); }
.lpg-formcard--red .lpg-field option { color: var(--tinta); }
.lpg-formcard--red .lpg-field input:focus,
.lpg-formcard--red .lpg-field select:focus,
.lpg-formcard--red .lpg-field textarea:focus { border-bottom-color: var(--blanco); }

.lpg-form .lpg-btn { margin-top: 0.6rem; }

/* Validación: la línea del campo se refuerza y se tiñe */
.lpg-field :is(input, select, textarea)[aria-invalid='true'] {
  border-bottom-width: 2px;
  border-bottom-color: var(--rojo);
}
.lpg-formcard--red .lpg-field :is(input, select, textarea)[aria-invalid='true'] {
  border-bottom-color: var(--amarillo);
}

.lpg-field__error {
  display: block;
  font-size: 0.76rem;
  line-height: 1.35;
  color: var(--rojo);
  margin-top: 0.3rem;
}
.lpg-formcard--red .lpg-field__error { color: var(--amarillo); }


/* --------------------------------------------------------------------------
   Contact Form 7
   --------------------------------------------------------------------------
   El plugin envuelve cada campo en un <span> y añade sus propios contenedores
   de aviso. Aquí se integran con el estilo de la landing.
   -------------------------------------------------------------------------- */

/* El envoltorio de CF7 es un <span>, o sea en línea: sin esto los campos
   dejan de ocupar el ancho completo y el formulario se descuadra. */
.lpg .wpcf7-form-control-wrap { display: block; }

/* CF7 mete un <p> alrededor de cada campo en algunos formularios */
.lpg .wpcf7-form p { margin: 0; }

/* Aviso bajo un campo con error */
.lpg .wpcf7-not-valid-tip {
  display: block;
  font-size: 0.76rem;
  line-height: 1.35;
  color: var(--rojo);
  margin-top: 0.3rem;
}
.lpg-formcard--red .wpcf7-not-valid-tip { color: var(--amarillo); }

/* La línea del campo se marca igual que en la maqueta */
.lpg .wpcf7-not-valid {
  border-bottom-width: 2px;
  border-bottom-color: var(--rojo);
}
.lpg-formcard--red .wpcf7-not-valid { border-bottom-color: var(--amarillo); }

/* Mensaje general al pie del formulario */
.lpg .wpcf7-response-output {
  margin: 1.1rem 0 0;
  padding: 0.7rem 1rem;
  border: 0;
  border-radius: 12px;
  font-size: 0.82rem;
  line-height: 1.4;
  background: rgb(0 0 0 / 0.05);
}
.lpg form.sent .wpcf7-response-output {
  background: rgb(46 160 67 / 0.12);
  color: #1a7f37;
}
.lpg form.invalid .wpcf7-response-output,
.lpg form.failed .wpcf7-response-output {
  background: rgb(255 0 66 / 0.1);
  color: var(--rojo);
}
.lpg-formcard--red .wpcf7-response-output,
.lpg-formcard--red form.sent .wpcf7-response-output,
.lpg-formcard--red form.invalid .wpcf7-response-output,
.lpg-formcard--red form.failed .wpcf7-response-output {
  background: rgb(0 0 0 / 0.22);
  color: var(--blanco);
}

/* Indicador de envío en curso */
.lpg .wpcf7-spinner { margin: 0 0 0 0.6rem; vertical-align: middle; }

/* --------------------------------------------------------------------------
   Acordeón — <details>/<summary>, sin JavaScript
   -------------------------------------------------------------------------- */
.lpg-acc { border-bottom: 1px solid var(--gris-linea); }

.lpg-acc summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 0.95rem 0;
  cursor: pointer;
  font-size: clamp(0.85rem, 0.8rem + 0.25vw, 0.95rem);
  font-weight: 400;
  list-style: none;
}
.lpg-acc summary::-webkit-details-marker { display: none; }
.lpg-acc summary::after {
  content: '';
  width: 0.55rem;
  height: 0.55rem;
  flex: 0 0 auto;
  border-right: 2px solid var(--gris);
  border-bottom: 2px solid var(--gris);
  transform: rotate(45deg) translate(-2px, -2px);
  transition: transform 0.25s ease;
}
.lpg-acc[open] summary::after { transform: rotate(-135deg) translate(-2px, -2px); }
.lpg-acc summary:focus-visible { outline: 3px solid var(--rojo); outline-offset: 2px; }

.lpg .lpg-acc__body {
  padding-bottom: 1.05rem;
  font-size: 0.85rem;
  color: var(--gris);
  max-width: 34rem;
}
.lpg .lpg-acc__body a { color: var(--rojo); text-decoration: underline; text-underline-offset: 2px; }

/* El reset quita las viñetas, así que aquí se rehacen con el rojo de marca */
.lpg .lpg-acc__body ul { display: grid; gap: 0.5rem; }
.lpg .lpg-acc__body li {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 0.6rem;
  align-items: baseline;
  line-height: 1.45;
}
.lpg .lpg-acc__body li::before {
  content: '';
  width: 0.4rem;
  height: 0.4rem;
  border-radius: 50%;
  background: var(--rojo);
  transform: translateY(-0.1rem);
}

/* --------------------------------------------------------------------------
   Preferencias de movimiento
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  .lpg *,
  .lpg *::before,
  .lpg *::after {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}
