@charset "UTF-8";
/* ==========================================================================
   GM EVENTOS — Sistema de diseño
   Dirección visual: "Arena y ámbar"

   Paleta derivada del logotipo (capitales doradas sobre azul marino):
     azul marino #002041 · oro #E4B869   (medidos del propio logotipo)

   Todas las clases usan el prefijo .gm- y los estilos se acotan dentro de un
   contenedor .gm-page para no chocar con Blocksy ni con Stackable.
   No hay reset global.

   Mobile first. Breakpoints: 640px, 900px, 1200px.
   ========================================================================== */


/* --------------------------------------------------------------------------
   1. VARIABLES
   -------------------------------------------------------------------------- */

:root {

  /* --- Color · neutros cálidos ------------------------------------------- */
  --gm-crema:             #FCFAF6;  /* fondo principal */
  --gm-arena:             #F5EEE4;  /* fondo de secciones alternas */
  --gm-arena-suave:       #F9F4EC;  /* fondo intermedio */
  --gm-superficie:        #FFFFFF;  /* tarjetas y campos de formulario */
  --gm-borde:             #EADDCB;  /* borde estándar sobre fondo claro */
  --gm-borde-suave:       #F3EADD;  /* separadores discretos */

  /* --- Color · texto ------------------------------------------------------ */
  --gm-tinta:             #2E241D;  /* café espresso — títulos y cuerpo */
  --gm-tinta-suave:       #6E5F53;  /* secundario · 5.4:1 sobre crema */
  --gm-tinta-tenue:       #8C7D70;  /* metadatos y pies de foto */

  /* --- Color · acento único (ámbar quemado) -------------------------------
     Un solo matiz de acento, en dos pasos calibrados por contraste:
       --gm-acento         #B5722C  3.6:1 sobre crema → filetes, iconos,
                                    bordes y texto grande decorativo.
       --gm-acento-fuerte  #A0601F  5.0:1 con texto blanco → fondo de botones
                                    y texto de acento a tamaño de cuerpo.
     Es el mismo color con distinta luminosidad, no un segundo acento.       */
  --gm-acento:            #B5722C;
  --gm-acento-fuerte:     #A0601F;
  --gm-acento-hover:      #8A5119;
  --gm-acento-tinte:      #F7EBDC;  /* fondo de etiquetas y estados suaves */
  --gm-acento-borde:      #E8D3B8;

  /* --- Color · marca profunda (del logotipo) ------------------------------ */
  --gm-navy:              #002041;  /* header, footer y franjas profundas */
  --gm-navy-claro:        #0B2E52;  /* superficies dentro del navy */
  --gm-navy-borde:        #1B3F63;
  --gm-oro:               #E4B869;  /* 8.9:1 sobre navy — solo sobre navy */
  --gm-oro-tenue:         #C7A15A;

  /* --- Color · texto sobre fondo oscuro ----------------------------------- */
  --gm-sobre-oscuro:      #FFFFFF;
  --gm-sobre-oscuro-suave:#CBD8E6;  /* 10.4:1 sobre navy */

  /* --- Color · WhatsApp ---------------------------------------------------
     El verde de marca #25D366 con texto blanco da 2:1 y no es legible.
     Los botones usan una versión oscurecida de la misma familia.            */
  --gm-whatsapp:          #0E7C64;  /* 5.2:1 con texto blanco */
  --gm-whatsapp-hover:    #0A6250;
  --gm-whatsapp-vivo:     #25D366;  /* solo decorativo sobre fondo oscuro */

  /* --- Color · estados ----------------------------------------------------- */
  --gm-error:             #A32E22;
  --gm-error-tinte:       #FBEDEB;
  --gm-exito:             #1F6B4A;
  --gm-exito-tinte:       #EAF5EF;

  /* --- Tipografía ---------------------------------------------------------- */
  /* Marcellus: romana inscripcional, de la familia de las capitales de la
     columna de Trajano. Enlaza con el logotipo, que también son capitales.
     Elegante sin caer en la didona de boda, y fuera del repertorio que usan
     los generadores de sitios (Playfair, Cormorant, DM Serif).
     Jost: geométrica de aire art déco, el registro de los salones de fiesta. */
  --gm-fuente-titulo: "Marcellus", Georgia, "Times New Roman", serif;
  --gm-fuente-cuerpo: "Jost", -apple-system, BlinkMacSystemFont, "Segoe UI",
                      Roboto, Helvetica, Arial, sans-serif;

  /* Escala fluida: valor mínimo en móvil, máximo a partir de ~1200px */
  --gm-texto-xs:    0.8125rem;                                    /* 13px */
  --gm-texto-sm:    0.9375rem;                                    /* 15px */
  --gm-texto-base:  1.0625rem;                                    /* 17px */
  --gm-texto-lg:    clamp(1.125rem, 1.06rem + 0.30vw, 1.25rem);
  --gm-texto-xl:    clamp(1.25rem,  1.15rem + 0.50vw, 1.4375rem);

  /* Marcellus es más ancha y de x más grande que Cormorant, así que la escala
     baja un punto respecto a la que hacía falta para aquella. */
  --gm-h1: clamp(2.25rem,   1.60rem + 3.25vw, 4.25rem);
  --gm-h2: clamp(1.875rem,  1.48rem + 1.95vw, 3rem);
  --gm-h3: clamp(1.4375rem, 1.29rem + 0.75vw, 1.875rem);
  --gm-h4: clamp(1.1875rem, 1.14rem + 0.24vw, 1.375rem);

  --gm-peso-normal:  400;
  --gm-peso-medio:   500;
  --gm-peso-semi:    600;
  --gm-peso-titulo:  400;   /* Marcellus solo existe en 400 */
  --gm-peso-fuerte:  700;

  --gm-alto-titulo:  1.18;
  --gm-alto-cuerpo:  1.68;
  --gm-alto-corto:   1.45;

  --gm-track-titulo: 0;        /* una romana inscripcional no quiere tracking negativo */
  --gm-track-ancho:  0.14em;   /* versalitas de etiquetas y antetítulos */

  /* --- Espaciado ----------------------------------------------------------- */
  --gm-esp-3xs: 0.25rem;   /*  4px */
  --gm-esp-2xs: 0.5rem;    /*  8px */
  --gm-esp-xs:  0.75rem;   /* 12px */
  --gm-esp-sm:  1rem;      /* 16px */
  --gm-esp-md:  1.5rem;    /* 24px */
  --gm-esp-lg:  2rem;      /* 32px */
  --gm-esp-xl:  3rem;      /* 48px */
  --gm-esp-2xl: 4rem;      /* 64px */
  --gm-esp-3xl: 6rem;      /* 96px */
  --gm-esp-seccion: clamp(3.5rem, 2.4rem + 5.2vw, 7rem);

  /* --- Layout --------------------------------------------------------------- */
  --gm-ancho-max:   1200px;
  --gm-ancho-medio: 920px;
  --gm-ancho-texto: 65ch;
  --gm-padding-lat: clamp(1.25rem, 0.85rem + 1.8vw, 2.5rem);
  --gm-alto-header: 4.5rem;

  /* --- Radios --------------------------------------------------------------- */
  --gm-radio-xs:   0.25rem;
  --gm-radio-sm:   0.5rem;
  --gm-radio-md:   0.875rem;
  --gm-radio-lg:   1.25rem;
  --gm-radio-xl:   2rem;
  --gm-radio-full: 999px;

  /* --- Sombras (tintadas en cálido, nunca en gris neutro) ------------------- */
  --gm-sombra-xs: 0 1px 2px rgba(46, 36, 29, 0.06);
  --gm-sombra-sm: 0 2px 6px rgba(46, 36, 29, 0.06),
                  0 1px 2px rgba(46, 36, 29, 0.04);
  --gm-sombra-md: 0 6px 18px rgba(46, 36, 29, 0.08),
                  0 2px 6px rgba(46, 36, 29, 0.04);
  --gm-sombra-lg: 0 16px 40px rgba(46, 36, 29, 0.10),
                  0 4px 12px rgba(46, 36, 29, 0.05);
  --gm-sombra-acento:   0 6px 16px rgba(160, 96, 31, 0.26);
  --gm-sombra-whatsapp: 0 6px 16px rgba(14, 124, 100, 0.28);

  /* --- Movimiento ------------------------------------------------------------ */
  --gm-trans:       180ms ease;
  --gm-trans-lenta: 320ms cubic-bezier(0.22, 0.61, 0.36, 1);

  /* --- Foco ------------------------------------------------------------------- */
  --gm-foco-color:  var(--gm-acento-fuerte);
  --gm-foco-ancho:  3px;
  --gm-foco-offset: 3px;

  --gm-z-header: 100;
  --gm-z-menu:    99;
}


/* --------------------------------------------------------------------------
   2. BASE  ·  acotado a .gm-page, sin reset global
   -------------------------------------------------------------------------- */

.gm-page,
.gm-page *,
.gm-page *::before,
.gm-page *::after {
  box-sizing: border-box;
}

.gm-page {
  margin: 0;
  background-color: var(--gm-crema);
  color: var(--gm-tinta);
  font-family: var(--gm-fuente-cuerpo);
  font-size: var(--gm-texto-base);
  font-weight: var(--gm-peso-normal);
  line-height: var(--gm-alto-cuerpo);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

/* --- Títulos --------------------------------------------------------------- */

.gm-page h1,
.gm-page h2,
.gm-page h3,
.gm-page h4,
.gm-page h5,
.gm-page h6 {
  margin: 0 0 var(--gm-esp-sm);
  color: var(--gm-tinta);
  font-family: var(--gm-fuente-titulo);
  font-weight: var(--gm-peso-titulo);
  line-height: var(--gm-alto-titulo);
  letter-spacing: var(--gm-track-titulo);
  text-wrap: balance;
}

.gm-page h1 { font-size: var(--gm-h1); }
.gm-page h2 { font-size: var(--gm-h2); }
.gm-page h3 { font-size: var(--gm-h3); }
.gm-page h4 { font-size: var(--gm-h4); }

.gm-page h5,
.gm-page h6 {
  font-family: var(--gm-fuente-cuerpo);
  font-size: var(--gm-texto-sm);
  font-weight: var(--gm-peso-fuerte);
  letter-spacing: var(--gm-track-ancho);
  line-height: var(--gm-alto-corto);
  text-transform: uppercase;
}

/* --- Texto ------------------------------------------------------------------ */

.gm-page p { text-wrap: pretty; }

/* Igual que con las listas: el :not() acota el margen y la medida a los
   párrafos sin clase. Sin él, .gm-page p (0,1,1) le gana a .gm-footer__nota,
   .gm-tarjeta__texto, .gm-encabezado__texto y compañía (0,1,0), y les borra
   el margen que cada una declara. Cada párrafo con clase gm- fija el suyo. */
.gm-page p:not([class*="gm-"]) {
  margin: 0 0 var(--gm-esp-sm);
  max-width: var(--gm-ancho-texto);
}

.gm-page p:last-child { margin-bottom: 0; }

/* El :not() acota la regla a las listas sin clase. Sin él, .gm-page ul
   (0,1,1) le gana a .gm-tarjetas, .gm-galeria, .gm-etiquetas y compañía
   (0,1,0), y les devuelve el padding-left del navegador aunque ellas
   declaren padding: 0. Mismo caso que el subrayado de .gm-page a.
   Toda lista con clase gm- fija su propio margen, relleno y viñeta. */
.gm-page ul:not([class*="gm-"]),
.gm-page ol:not([class*="gm-"]) {
  margin: 0 0 var(--gm-esp-sm);
  padding-left: 1.35em;
}

.gm-page li { margin-bottom: var(--gm-esp-3xs); }

.gm-page strong,
.gm-page b { font-weight: var(--gm-peso-fuerte); }

.gm-page small { font-size: var(--gm-texto-sm); }

.gm-page hr {
  height: 1px;
  margin: var(--gm-esp-lg) 0;
  border: 0;
  background-color: var(--gm-borde);
}

/* --- Enlaces ----------------------------------------------------------------- */

.gm-page a {
  color: var(--gm-acento-fuerte);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 0.18em;
  transition: color var(--gm-trans);
}

.gm-page a:hover { color: var(--gm-acento-hover); }

/* El subrayado de arriba es para enlaces dentro de texto corrido.
   Un enlace que forma parte de un componente (botón, enlace del menú,
   etiqueta, pieza de galería, logotipo) no lo lleva.
   Hace falta el selector de atributo porque `.gm-page a` tiene más
   especificidad que `.gm-header__enlace` y le ganaba. */
.gm-page a[class*="gm-"] {
  text-decoration: none;
}

/* --- Multimedia --------------------------------------------------------------- */

.gm-page img,
.gm-page picture,
.gm-page svg,
.gm-page video,
.gm-page iframe {
  max-width: 100%;
  height: auto;
}

.gm-page img { display: block; }

/* --- Foco visible · nunca se elimina ------------------------------------------ */

.gm-page :focus-visible {
  outline: var(--gm-foco-ancho) solid var(--gm-foco-color);
  outline-offset: var(--gm-foco-offset);
  border-radius: var(--gm-radio-xs);
}

/* Sobre navy el contorno pasa a oro para conservar el contraste */
.gm-header :focus-visible,
.gm-footer :focus-visible,
.gm-sobre-navy :focus-visible {
  outline-color: var(--gm-oro);
}

@media (prefers-reduced-motion: reduce) {
  .gm-page *,
  .gm-page *::before,
  .gm-page *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}


/* --------------------------------------------------------------------------
   3. LAYOUT Y UTILIDADES
   -------------------------------------------------------------------------- */

.gm-contenedor {
  width: 100%;
  max-width: var(--gm-ancho-max);
  margin-inline: auto;
  padding-inline: var(--gm-padding-lat);
}

.gm-contenedor--estrecho { max-width: var(--gm-ancho-medio); }

.gm-seccion { padding-block: var(--gm-esp-seccion); }

.gm-seccion--arena    { background-color: var(--gm-arena); }
.gm-seccion--suave    { background-color: var(--gm-arena-suave); }
.gm-seccion--navy     { background-color: var(--gm-navy); }
.gm-seccion--compacta { padding-block: calc(var(--gm-esp-seccion) * 0.6); }

/* Cierre de una sección: el botón o el enlace que va debajo de la rejilla. */
.gm-seccion__pie { margin-top: var(--gm-esp-xl); }

/* Bloque sobre navy: fija colores legibles para todo su contenido */
.gm-sobre-navy,
.gm-sobre-navy h1,
.gm-sobre-navy h2,
.gm-sobre-navy h3,
.gm-sobre-navy h4 { color: var(--gm-sobre-oscuro); }

.gm-sobre-navy p { color: var(--gm-sobre-oscuro-suave); }

/* Enlace de salto al contenido */
.gm-skip-link {
  position: absolute;
  top: var(--gm-esp-sm);
  left: var(--gm-esp-sm);
  z-index: 999;
  padding: var(--gm-esp-2xs) var(--gm-esp-sm);
  border-radius: var(--gm-radio-sm);
  background-color: var(--gm-superficie);
  box-shadow: var(--gm-sombra-md);
  color: var(--gm-tinta) !important;
  font-weight: var(--gm-peso-fuerte);
  text-decoration: none;
  transform: translateY(-200%);
  transition: transform var(--gm-trans);
}

.gm-skip-link:focus { transform: translateY(0); }

/* Solo para lectores de pantalla */
.gm-sr-only {
  position: absolute !important;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

.gm-centrado { text-align: center; }
.gm-centrado p { margin-inline: auto; }


/* --------------------------------------------------------------------------
   4. COMPONENTE · BOTONES
   -------------------------------------------------------------------------- */

.gm-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--gm-esp-2xs);
  min-height: 3rem;                    /* 48px · objetivo táctil cómodo */
  padding: 0.8125rem 1.625rem;
  border: 2px solid transparent;
  border-radius: var(--gm-radio-full);
  font-family: var(--gm-fuente-cuerpo);
  font-size: var(--gm-texto-base);
  font-weight: var(--gm-peso-fuerte);
  line-height: 1.2;
  letter-spacing: 0.01em;
  text-align: center;
  text-decoration: none;
  cursor: pointer;
  transition: background-color var(--gm-trans),
              border-color var(--gm-trans),
              color var(--gm-trans),
              box-shadow var(--gm-trans),
              transform var(--gm-trans);
}

.gm-btn:hover  { text-decoration: none; }
.gm-btn:active { transform: translateY(1px); }

.gm-btn svg {
  flex-shrink: 0;
  width: 1.25em;
  height: 1.25em;
  fill: currentColor;
}

/* --- Primario ----------------------------------------------------------------- */

.gm-btn--primario {
  background-color: var(--gm-acento-fuerte);
  border-color: var(--gm-acento-fuerte);
  box-shadow: var(--gm-sombra-acento);
  color: var(--gm-superficie) !important;
}

.gm-btn--primario:hover {
  background-color: var(--gm-acento-hover);
  border-color: var(--gm-acento-hover);
  box-shadow: 0 8px 22px rgba(160, 96, 31, 0.32);
  color: var(--gm-superficie) !important;
}

/* --- Secundario --------------------------------------------------------------- */

.gm-btn--secundario {
  background-color: transparent;
  border-color: var(--gm-acento-borde);
  color: var(--gm-tinta) !important;
}

.gm-btn--secundario:hover {
  background-color: var(--gm-acento-tinte);
  border-color: var(--gm-acento);
  color: var(--gm-acento-hover) !important;
}

/* Variante para colocarlo sobre fotografía o sobre navy */
.gm-btn--secundario.gm-btn--claro {
  background-color: rgba(0, 32, 65, 0.28);
  border-color: rgba(255, 255, 255, 0.65);
  color: var(--gm-sobre-oscuro) !important;
  backdrop-filter: blur(4px);
}

.gm-btn--secundario.gm-btn--claro:hover {
  background-color: var(--gm-superficie);
  border-color: var(--gm-superficie);
  color: var(--gm-tinta) !important;
}

/* --- WhatsApp ------------------------------------------------------------------ */

.gm-btn--whatsapp {
  background-color: var(--gm-whatsapp);
  border-color: var(--gm-whatsapp);
  box-shadow: var(--gm-sombra-whatsapp);
  color: var(--gm-superficie) !important;
}

.gm-btn--whatsapp:hover {
  background-color: var(--gm-whatsapp-hover);
  border-color: var(--gm-whatsapp-hover);
  box-shadow: 0 8px 22px rgba(14, 124, 100, 0.34);
  color: var(--gm-superficie) !important;
}

/* --- Modificadores de tamaño y ancho -------------------------------------------- */

.gm-btn--sm {
  min-height: 2.5rem;
  padding: 0.5rem 1.125rem;
  font-size: var(--gm-texto-sm);
}

.gm-btn--lg {
  min-height: 3.5rem;
  padding: 1rem 2.25rem;
  font-size: var(--gm-texto-lg);
}

.gm-btn--bloque {
  display: flex;
  width: 100%;
}

/* Botón reducido a icono: exige un texto accesible en .gm-sr-only */
.gm-btn--icono {
  width: 3rem;
  padding-inline: 0;
}

.gm-btn--icono svg { width: 1.5rem; height: 1.5rem; }

/* Grupo de botones: apilado en móvil, en línea desde 640px */
.gm-btn-grupo {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: var(--gm-esp-xs);
}

@media (min-width: 640px) {
  .gm-btn-grupo {
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--gm-esp-sm);
  }
  .gm-btn-grupo .gm-btn { width: auto; }

  /* En móvil los botones ya ocupan todo el ancho, así que centrar el grupo
     solo tiene sentido a partir de 640px, cuando pasa a fila. */
  .gm-btn-grupo--centrado { justify-content: center; }
}


/* --------------------------------------------------------------------------
   5. COMPONENTE · ETIQUETA
   -------------------------------------------------------------------------- */

.gm-etiqueta {
  display: inline-flex;
  align-items: center;
  gap: 0.4em;
  padding: 0.375rem 0.8125rem;
  border: 1px solid var(--gm-acento-borde);
  border-radius: var(--gm-radio-full);
  background-color: var(--gm-acento-tinte);
  color: var(--gm-acento-hover);
  font-family: var(--gm-fuente-cuerpo);
  font-size: var(--gm-texto-xs);
  font-weight: var(--gm-peso-fuerte);
  letter-spacing: var(--gm-track-ancho);
  line-height: 1.3;
  text-transform: uppercase;
  text-decoration: none;
  white-space: nowrap;
}

.gm-etiqueta svg {
  width: 1em;
  height: 1em;
  fill: currentColor;
}

.gm-etiqueta--neutra {
  background-color: var(--gm-arena);
  border-color: var(--gm-borde);
  color: var(--gm-tinta-suave);
}

.gm-etiqueta--navy {
  background-color: var(--gm-navy);
  border-color: var(--gm-navy);
  color: var(--gm-oro);
}

.gm-etiqueta--solida {
  background-color: var(--gm-acento-fuerte);
  border-color: var(--gm-acento-fuerte);
  color: var(--gm-superficie);
}

/* Etiqueta pulsable · filtros de galería */
a.gm-etiqueta,
button.gm-etiqueta {
  cursor: pointer;
  transition: background-color var(--gm-trans),
              border-color var(--gm-trans),
              color var(--gm-trans);
}

a.gm-etiqueta:hover,
button.gm-etiqueta:hover,
button.gm-etiqueta[aria-pressed="true"] {
  background-color: var(--gm-acento-fuerte);
  border-color: var(--gm-acento-fuerte);
  color: var(--gm-superficie);
}

/* Fila de etiquetas */
.gm-etiquetas {
  display: flex;
  flex-wrap: wrap;
  gap: var(--gm-esp-2xs);
  margin: 0;
  padding: 0;
  list-style: none;
}

.gm-etiquetas li { margin: 0; }


/* --------------------------------------------------------------------------
   6. COMPONENTE · ENCABEZADO DE SECCIÓN
   -------------------------------------------------------------------------- */

.gm-encabezado {
  max-width: var(--gm-ancho-texto);
  margin-bottom: var(--gm-esp-xl);
}

.gm-encabezado__antetitulo {
  display: block;
  margin-bottom: var(--gm-esp-xs);
  color: var(--gm-acento-fuerte);
  font-family: var(--gm-fuente-cuerpo);
  font-size: var(--gm-texto-xs);
  font-weight: var(--gm-peso-fuerte);
  letter-spacing: var(--gm-track-ancho);
  line-height: 1.3;
  text-transform: uppercase;
}

/* El bloque va por delante para ganarle a .gm-page h2 (0,1,1), que si no
   le devuelve su margen inferior y su tamaño. Ver la sección de bugs. */
.gm-encabezado .gm-encabezado__titulo {
  margin: 0;
  font-size: var(--gm-h2);
}

/* Filete: eco del trazo dorado del logotipo, no un degradado de plantilla */
.gm-encabezado__filete {
  width: 3.25rem;
  height: 2px;
  margin-top: var(--gm-esp-sm);
  border: 0;
  background-color: var(--gm-acento);
}

.gm-encabezado__texto {
  margin: var(--gm-esp-sm) 0 0;
  color: var(--gm-tinta-suave);
  font-size: var(--gm-texto-lg);
}

/* --- Modificadores -------------------------------------------------------------- */

.gm-encabezado--centrado {
  margin-inline: auto;
  text-align: center;
}

.gm-encabezado--centrado .gm-encabezado__filete { margin-inline: auto; }
.gm-encabezado--centrado .gm-encabezado__texto  { margin-inline: auto; }

/* Cuando el encabezado es lo único que hay dentro de la sección —la banda de
   entrada de las páginas interiores— su margen inferior sobra. */
.gm-encabezado--sin-margen { margin-bottom: 0; }

.gm-encabezado--sobre-navy .gm-encabezado__antetitulo { color: var(--gm-oro); }
.gm-encabezado--sobre-navy .gm-encabezado__titulo     { color: var(--gm-sobre-oscuro); }
.gm-encabezado--sobre-navy .gm-encabezado__filete     { background-color: var(--gm-oro); }
.gm-encabezado--sobre-navy .gm-encabezado__texto      { color: var(--gm-sobre-oscuro-suave); }


/* --------------------------------------------------------------------------
   7. COMPONENTE · TARJETA
   -------------------------------------------------------------------------- */

.gm-tarjeta {
  display: flex;
  flex-direction: column;
  overflow: hidden;
  background-color: var(--gm-superficie);
  border: 1px solid var(--gm-borde-suave);
  border-radius: var(--gm-radio-lg);
  box-shadow: var(--gm-sombra-sm);
  transition: box-shadow var(--gm-trans),
              transform var(--gm-trans),
              border-color var(--gm-trans);
}

.gm-tarjeta__media {
  position: relative;
  margin: 0;
  overflow: hidden;
  background-color: var(--gm-arena);
}

.gm-tarjeta__media img {
  width: 100%;
  height: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  transition: transform var(--gm-trans-lenta);
}

.gm-tarjeta__etiqueta {
  position: absolute;
  top: var(--gm-esp-xs);
  left: var(--gm-esp-xs);
}

.gm-tarjeta__cuerpo {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: var(--gm-esp-2xs);
  padding: var(--gm-esp-md);
}

.gm-tarjeta__icono {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 3rem;
  height: 3rem;
  margin-bottom: var(--gm-esp-2xs);
  border: 1px solid var(--gm-acento-borde);
  border-radius: var(--gm-radio-full);
  background-color: var(--gm-acento-tinte);
  color: var(--gm-acento-fuerte);
}

.gm-tarjeta__icono svg {
  width: 1.5rem;
  height: 1.5rem;
  fill: currentColor;
}

.gm-tarjeta .gm-tarjeta__titulo {
  margin: 0;
  font-size: var(--gm-h4);
}

.gm-tarjeta__texto {
  max-width: none;
  margin: 0;
  color: var(--gm-tinta-suave);
  font-size: var(--gm-texto-base);
}

.gm-tarjeta__pie {
  margin-top: auto;
  padding-top: var(--gm-esp-sm);
}

/* --- Modificadores -------------------------------------------------------------- */

/* Tarjeta clicable completa: el enlace del título cubre toda la superficie */
.gm-tarjeta--enlace { position: relative; }

.gm-tarjeta--enlace .gm-tarjeta__titulo a {
  color: inherit;
  text-decoration: none;
}

.gm-tarjeta--enlace .gm-tarjeta__titulo a::after {
  content: "";
  position: absolute;
  inset: 0;
}

.gm-tarjeta--enlace:hover {
  border-color: var(--gm-acento-borde);
  box-shadow: var(--gm-sombra-md);
  transform: translateY(-3px);
}

.gm-tarjeta--enlace:hover .gm-tarjeta__media img { transform: scale(1.04); }

.gm-tarjeta--enlace:focus-within {
  border-color: var(--gm-acento);
  box-shadow: var(--gm-sombra-md);
}

/* Tarjeta sin caja: listas de características sobre fondo arena */
.gm-tarjeta--plana {
  background-color: transparent;
  border-color: transparent;
  box-shadow: none;
}

.gm-tarjeta--plana .gm-tarjeta__cuerpo { padding-inline: 0; }

/* Tarjeta de testimonio */
.gm-tarjeta--cita .gm-tarjeta__cuerpo { gap: var(--gm-esp-sm); }

.gm-tarjeta--cita .gm-tarjeta__texto {
  color: var(--gm-tinta);
  font-family: var(--gm-fuente-titulo);
  font-size: var(--gm-texto-lg);
  font-style: italic;
  line-height: var(--gm-alto-corto);
}

.gm-tarjeta__autor {
  display: block;
  color: var(--gm-tinta-tenue);
  font-size: var(--gm-texto-sm);
  font-style: normal;
  font-weight: var(--gm-peso-fuerte);
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

/* Rejilla de tarjetas */
.gm-tarjetas {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--gm-esp-md);
  margin: 0;
  padding: 0;
  list-style: none;
}

/* El <li> es el elemento de la rejilla y se estira solo; la tarjeta que va
   dentro necesita este display:flex para estirarse con él. Sin esto, las
   tarjetas de una misma fila quedan de distinta altura. */
.gm-tarjetas > li {
  display: flex;
  margin: 0;
}

.gm-tarjetas > li > .gm-tarjeta { width: 100%; }

@media (min-width: 640px) {
  .gm-tarjetas { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (min-width: 900px) {
  .gm-tarjetas    { gap: var(--gm-esp-lg); }
  .gm-tarjetas--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .gm-tarjetas--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}


/* --------------------------------------------------------------------------
   8. COMPONENTE · GRID DE GALERÍA
   -------------------------------------------------------------------------- */

.gm-galeria {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--gm-esp-xs);
  margin: 0;
  padding: 0;
  list-style: none;
}

/* Igual que en las tarjetas: el <li> es el elemento de la rejilla y la
   pieza de dentro necesita estirarse con él. */
.gm-galeria > li {
  display: flex;
  margin: 0;
}

.gm-galeria > li > .gm-galeria__item { width: 100%; }

.gm-galeria__item {
  position: relative;
  display: block;
  overflow: hidden;
  margin: 0;   /* la pieza puede ser <figure>, que trae margen del navegador */
  aspect-ratio: 4 / 3;
  border: 0;
  padding: 0;
  border-radius: var(--gm-radio-md);
  background-color: var(--gm-arena);
  box-shadow: var(--gm-sombra-xs);
}

.gm-galeria__item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--gm-trans-lenta);
}

/* Pie que aparece al pasar el cursor o al enfocar con teclado */
.gm-galeria__pie {
  position: absolute;
  inset-inline: 0;
  bottom: 0;
  padding: var(--gm-esp-md) var(--gm-esp-sm) var(--gm-esp-xs);
  background-image: linear-gradient(to top,
                    rgba(0, 32, 65, 0.82), rgba(0, 32, 65, 0));
  color: var(--gm-sobre-oscuro);
  font-size: var(--gm-texto-sm);
  font-weight: var(--gm-peso-medio);
  line-height: var(--gm-alto-corto);
  text-align: left;
  opacity: 0;
  transform: translateY(0.5rem);
  transition: opacity var(--gm-trans), transform var(--gm-trans);
}

a.gm-galeria__item:hover img,
button.gm-galeria__item:hover img { transform: scale(1.05); }

a.gm-galeria__item:hover .gm-galeria__pie,
a.gm-galeria__item:focus-visible .gm-galeria__pie,
button.gm-galeria__item:hover .gm-galeria__pie,
button.gm-galeria__item:focus-visible .gm-galeria__pie {
  opacity: 1;
  transform: translateY(0);
}

/* En pantallas táctiles no hay hover: el pie se muestra siempre */
@media (hover: none) {
  .gm-galeria__pie { opacity: 1; transform: translateY(0); }
}

/* En la página de Galería la rejilla no lleva enlaces —ya estás ahí—, así que
   no hay hover que revele el pie. Con este modificador el pie es información
   visible, no un adorno del cursor. */
.gm-galeria--con-pie .gm-galeria__pie {
  opacity: 1;
  transform: translateY(0);
}

@media (min-width: 640px) {
  .gm-galeria {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--gm-esp-sm);
  }
}

@media (min-width: 900px) {
  .gm-galeria {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--gm-esp-md);
  }
  /* Pieza destacada: ocupa dos columnas y dos filas.
     El span va en el <li>, que es el elemento real de la rejilla; :has()
     evita tener que repetir la clase en el marcado. */
  .gm-galeria > li:has(.gm-galeria__item--destacado) {
    grid-column: span 2;
    grid-row: span 2;
  }

  .gm-galeria__item--destacado {
    aspect-ratio: auto;
    border-radius: var(--gm-radio-lg);
  }
}

@media (min-width: 1200px) {
  .gm-galeria--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}


/* --------------------------------------------------------------------------
   9. COMPONENTE · FORMULARIO
   -------------------------------------------------------------------------- */

.gm-form {
  display: flex;
  flex-direction: column;
  gap: var(--gm-esp-md);
  max-width: 38rem;
}

.gm-form--caja {
  max-width: none;
  padding: var(--gm-esp-md);
  border: 1px solid var(--gm-borde-suave);
  border-radius: var(--gm-radio-lg);
  background-color: var(--gm-superficie);
  box-shadow: var(--gm-sombra-sm);
}

.gm-form__grupo {
  display: flex;
  flex-direction: column;
  gap: var(--gm-esp-3xs);
}

.gm-form__label {
  color: var(--gm-tinta);
  font-size: var(--gm-texto-sm);
  font-weight: var(--gm-peso-fuerte);
  letter-spacing: 0.02em;
}

.gm-form__requerido {
  color: var(--gm-acento-fuerte);
  font-weight: var(--gm-peso-fuerte);
}

.gm-form__control {
  width: 100%;
  min-height: 3rem;
  padding: 0.75rem 1rem;
  border: 1px solid var(--gm-borde);
  border-radius: var(--gm-radio-md);
  background-color: var(--gm-superficie);
  color: var(--gm-tinta);
  font-family: var(--gm-fuente-cuerpo);
  font-size: var(--gm-texto-base);
  line-height: var(--gm-alto-corto);
  appearance: none;
  transition: border-color var(--gm-trans), box-shadow var(--gm-trans);
}

.gm-form__control::placeholder {
  color: var(--gm-tinta-tenue);
  opacity: 1;
}

.gm-form__control:hover { border-color: var(--gm-acento-borde); }

.gm-form__control:focus {
  border-color: var(--gm-acento-fuerte);
  box-shadow: 0 0 0 3px rgba(181, 114, 44, 0.18);
  outline: none;
}

/* El foco por teclado conserva además el contorno global */
.gm-form__control:focus-visible {
  outline: var(--gm-foco-ancho) solid var(--gm-foco-color);
  outline-offset: 1px;
}

textarea.gm-form__control {
  min-height: 8.5rem;
  line-height: var(--gm-alto-cuerpo);
  resize: vertical;
}

select.gm-form__control {
  padding-right: 2.75rem;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='%236E5F53'%3E%3Cpath d='M5.5 7.5 10 12l4.5-4.5H5.5z'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 1rem center;
  background-size: 1.25rem 1.25rem;
  cursor: pointer;
}

/* --- Ayuda, error y aviso --------------------------------------------------------- */

.gm-form__ayuda {
  color: var(--gm-tinta-suave);
  font-size: var(--gm-texto-sm);
  line-height: var(--gm-alto-corto);
}

.gm-form__error {
  display: flex;
  align-items: center;
  gap: 0.375rem;
  color: var(--gm-error);
  font-size: var(--gm-texto-sm);
  font-weight: var(--gm-peso-medio);
  line-height: var(--gm-alto-corto);
}

.gm-form__control[aria-invalid="true"] {
  border-color: var(--gm-error);
  background-color: var(--gm-error-tinte);
}

.gm-form__control[aria-invalid="true"]:focus {
  box-shadow: 0 0 0 3px rgba(163, 46, 34, 0.18);
}

.gm-form__aviso {
  padding: var(--gm-esp-sm) var(--gm-esp-md);
  border: 1px solid var(--gm-borde);
  border-left: 4px solid var(--gm-exito);
  border-radius: var(--gm-radio-sm);
  background-color: var(--gm-exito-tinte);
  color: var(--gm-tinta);
  font-size: var(--gm-texto-sm);
}

.gm-form__aviso--error {
  border-left-color: var(--gm-error);
  background-color: var(--gm-error-tinte);
}

/* --- Casillas y opciones ------------------------------------------------------------ */

.gm-form__check {
  display: flex;
  align-items: flex-start;
  gap: var(--gm-esp-2xs);
  color: var(--gm-tinta-suave);
  font-size: var(--gm-texto-sm);
  line-height: var(--gm-alto-corto);
  cursor: pointer;
}

.gm-form__check input[type="checkbox"],
.gm-form__check input[type="radio"] {
  flex-shrink: 0;
  width: 1.25rem;
  height: 1.25rem;
  margin: 0.125rem 0 0;
  accent-color: var(--gm-acento-fuerte);
  cursor: pointer;
}

.gm-form__check a { font-weight: var(--gm-peso-fuerte); }

/* --- Filas y pie --------------------------------------------------------------------- */

.gm-form__fila {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--gm-esp-md);
}

/* El botón no se encoge: si no, con la ayuda al lado en una columna estrecha
   su texto se parte en dos renglones. */
.gm-form__pie .gm-btn { flex: none; }

.gm-form__pie {
  display: flex;
  flex-direction: column;
  gap: var(--gm-esp-xs);
}

/* Trampa antispam: se oculta fuera de pantalla, no con display:none,
   para que los lectores de pantalla la salten pero el envío la reciba */
.gm-form__trampa {
  position: absolute !important;
  left: -9999px;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

@media (min-width: 640px) {
  .gm-form--caja    { padding: var(--gm-esp-lg); }
  .gm-form__fila--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .gm-form__pie {
    flex-direction: row;
    align-items: center;
    justify-content: flex-start;
    gap: var(--gm-esp-md);
  }
}

@media (min-width: 900px) {
  .gm-form--caja { padding: var(--gm-esp-xl); }
}


/* --------------------------------------------------------------------------
   10. COMPONENTE · HERO
   Imagen a sangre con el texto en HTML encima, nunca incrustado en la foto.

   Las dos fotografías del salón son muy claras (techo y paredes blancas), así
   que el texto blanco necesita un velo. El velo es navy —el mismo de la barra
   y del pie— para que la portada arranque como continuación de la cabecera.

   · Móvil: velo de arriba abajo y el texto arriba, sobre el tercio de techo y
     pared lisa, que es la zona sin gente de la foto apaisada recortada.
   · Escritorio: velo de izquierda a derecha y el texto centrado a la
     izquierda, donde Cabecera.png ya trae su propio degradado y no hay
     información que tapar.

   La foto se cambia con <picture> y <source media>, jamás duplicando el
   bloque ni ocultando uno con display:none.
   -------------------------------------------------------------------------- */

.gm-hero {
  position: relative;
  display: flex;
  align-items: flex-start;
  isolation: isolate;
  min-height: clamp(30rem, 78vh, 38rem);
  padding-block: var(--gm-esp-2xl) var(--gm-esp-xl);
  overflow: hidden;
  background-color: var(--gm-navy);
}

.gm-hero__media {
  position: absolute;
  inset: 0;
  z-index: -2;
}

.gm-hero__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 42%;
}

/* El velo. Va en ::after y no en un <div> para no meter ruido en el HTML. */
.gm-hero::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background-image: linear-gradient(
    180deg,
    rgba(0, 32, 65, 0.82) 0%,
    rgba(0, 32, 65, 0.70) 34%,
    rgba(0, 32, 65, 0.40) 62%,
    rgba(0, 32, 65, 0.58) 100%
  );
}

.gm-hero__contenido {
  position: relative;
  max-width: 34rem;
}

.gm-hero__antetitulo {
  display: block;
  margin-bottom: var(--gm-esp-xs);
  color: var(--gm-oro);
  font-family: var(--gm-fuente-cuerpo);
  font-size: var(--gm-texto-xs);
  font-weight: var(--gm-peso-fuerte);
  letter-spacing: var(--gm-track-ancho);
  text-transform: uppercase;
}

/* El selector lleva el padre por delante a propósito: .gm-page h1 (0,1,1)
   le gana a una clase suelta (0,1,0) y el título saldría en color tinta.
   Es el mismo tropiezo de especificidad que ya dio el subrayado de los
   enlaces del menú. */
.gm-hero .gm-hero__titulo {
  margin: 0 0 var(--gm-esp-md);
  color: var(--gm-sobre-oscuro);
  text-shadow: 0 2px 20px rgba(0, 16, 33, 0.45);
}

.gm-hero__texto {
  max-width: 46ch;
  margin-bottom: var(--gm-esp-lg);
  color: var(--gm-sobre-oscuro-suave);
  font-size: var(--gm-texto-lg);
}

/* --- Datos sueltos bajo los botones ---------------------------------------- */

.gm-hero__datos {
  display: flex;
  flex-wrap: wrap;
  gap: var(--gm-esp-xs) var(--gm-esp-md);
  margin: var(--gm-esp-lg) 0 0;
  padding: 0;
  list-style: none;
}

.gm-hero__datos li {
  display: flex;
  align-items: center;
  gap: var(--gm-esp-2xs);
  margin: 0;
  color: var(--gm-sobre-oscuro);
  font-size: var(--gm-texto-sm);
  font-weight: var(--gm-peso-medio);
}

.gm-hero__datos svg {
  flex: none;
  width: 1.125rem;
  height: 1.125rem;
  fill: var(--gm-oro);
}

@media (min-width: 900px) {
  .gm-hero {
    align-items: center;
    min-height: clamp(34rem, 56vw, 42rem);
    padding-block: var(--gm-esp-2xl);
  }
  .gm-hero__media img { object-position: center center; }
  .gm-hero::after {
    background-image: linear-gradient(
      90deg,
      rgba(0, 32, 65, 0.94) 0%,
      rgba(0, 32, 65, 0.86) 32%,
      rgba(0, 32, 65, 0.42) 62%,
      rgba(0, 32, 65, 0.12) 100%
    );
  }
  .gm-hero__contenido { max-width: 36rem; }
}

@media (min-width: 1200px) {
  .gm-hero__contenido { max-width: 40rem; }
}



/* --------------------------------------------------------------------------
   11. COMPONENTE · BLOQUE PARTIDO  (fotografía + texto)
   Una columna en móvil, dos a partir de 900px. Con --invertido la fotografía
   se va a la derecha sin tocar el orden del HTML, que se queda como se lee.
   -------------------------------------------------------------------------- */

.gm-partido {
  display: grid;
  gap: var(--gm-esp-lg);
  align-items: center;
}

.gm-partido__media {
  margin: 0;
  overflow: hidden;
  border-radius: var(--gm-radio-lg);
  box-shadow: var(--gm-sombra-md);
}

.gm-partido__media img {
  width: 100%;
  height: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
}

.gm-partido__pie {
  padding: var(--gm-esp-xs) var(--gm-esp-sm);
  background-color: var(--gm-superficie);
  color: var(--gm-tinta-tenue);
  font-size: var(--gm-texto-xs);
}

.gm-partido__texto > :last-child { margin-bottom: 0; }

.gm-partido__texto .gm-encabezado { margin-bottom: var(--gm-esp-md); }

@media (min-width: 900px) {
  .gm-partido {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--gm-esp-2xl);
  }
  .gm-partido--invertido .gm-partido__media { order: 2; }
}

/* Para cuando las dos columnas son texto y no hay foto que centrar. */
.gm-partido--arriba { align-items: start; }

/* Cuando la primera columna carga más peso —un formulario frente a una lista
   de datos— las dos mitades iguales le quedan chicas. */
@media (min-width: 900px) {
  .gm-partido--desigual { grid-template-columns: 1.5fr 1fr; }
}

/* Mosaico de fotos para la columna de media del partido: una foto principal
   a lo ancho y dos debajo, a media columna cada una. Sustituye a
   .gm-partido__media cuando hay más de una foto que enseñar. */
.gm-mosaico {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--gm-esp-sm);
}

.gm-mosaico > figure {
  margin: 0;
  overflow: hidden;
  border-radius: var(--gm-radio-md);
  background-color: var(--gm-arena);
  box-shadow: var(--gm-sombra-xs);
}

.gm-mosaico > figure img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 4 / 3;
  object-fit: cover;
}

.gm-mosaico__principal {
  grid-column: 1 / -1;
  border-radius: var(--gm-radio-lg);
  box-shadow: var(--gm-sombra-md);
}

.gm-mosaico__principal img { aspect-ratio: 1 / 1; }


/* --------------------------------------------------------------------------
   12. UTILIDAD · LISTA CON PALOMITA
   Lista de ventajas con el icono en oro quemado. Sin viñetas del navegador.
   -------------------------------------------------------------------------- */

.gm-lista-check {
  margin: 0 0 var(--gm-esp-md);
  padding: 0;
  list-style: none;
}

.gm-lista-check li {
  position: relative;
  margin-bottom: var(--gm-esp-xs);
  padding-left: 2rem;
  color: var(--gm-tinta-suave);
  line-height: var(--gm-alto-corto);
}

.gm-lista-check li:last-child { margin-bottom: 0; }

.gm-lista-check li::before {
  content: "";
  position: absolute;
  top: 0.15em;
  left: 0;
  width: 1.25rem;
  height: 1.25rem;
  /* Sin disco de fondo: el tinte del acento no se distingue sobre la arena
     y la palomita tendría un aspecto distinto en cada sección. */
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23A0601F'%3E%3Cpath d='M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: center;
  background-size: 1.05rem;
}

.gm-sobre-navy .gm-lista-check li { color: var(--gm-sobre-oscuro-suave); }

.gm-sobre-navy .gm-lista-check li::before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23E4B869'%3E%3Cpath d='M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z'/%3E%3C/svg%3E");
}


/* --------------------------------------------------------------------------
   13. COMPONENTE · DATOS DE CONTACTO
   Icono en disco + etiqueta pequeña + valor. Lo usan Ubicación y Contacto.
   El pie tiene su propia versión (.gm-footer__dato) porque allí va sobre
   navy, a otro tamaño y sin disco.
   -------------------------------------------------------------------------- */

.gm-datos {
  display: flex;
  flex-direction: column;
  gap: var(--gm-esp-md);
  margin: 0;
  padding: 0;
  list-style: none;
}

.gm-datos li {
  display: flex;
  align-items: flex-start;
  gap: var(--gm-esp-sm);
  margin: 0;
}

.gm-datos__icono {
  display: inline-flex;
  flex: none;
  align-items: center;
  justify-content: center;
  width: 2.75rem;
  height: 2.75rem;
  border-radius: var(--gm-radio-full);
  background-color: var(--gm-acento-tinte);
}

.gm-datos__icono svg {
  width: 1.25rem;
  height: 1.25rem;
  fill: var(--gm-acento-fuerte);
}

.gm-datos__etiqueta {
  display: block;
  margin-bottom: var(--gm-esp-3xs);
  color: var(--gm-tinta-tenue);
  font-family: var(--gm-fuente-cuerpo);
  font-size: var(--gm-texto-xs);
  font-weight: var(--gm-peso-fuerte);
  letter-spacing: var(--gm-track-ancho);
  line-height: 1.3;
  text-transform: uppercase;
}

.gm-datos__valor {
  display: block;
  color: var(--gm-tinta);
  font-size: var(--gm-texto-lg);
  font-weight: var(--gm-peso-semi);
  font-style: normal;
  line-height: var(--gm-alto-corto);
}

.gm-datos__valor a {
  color: inherit;
  text-decoration: none;
}

.gm-datos__valor a:hover {
  color: var(--gm-acento-hover);
  text-decoration: underline;
}

.gm-datos__nota {
  margin: var(--gm-esp-3xs) 0 0;
  color: var(--gm-tinta-suave);
  font-size: var(--gm-texto-sm);
  line-height: var(--gm-alto-corto);
}


/* --------------------------------------------------------------------------
   14. HEADER
   El fondo navy garantiza que el logotipo dorado se lea siempre.
   La barra admite un quinto enlace (Paquetes) sin reajustes: el menú es
   flexible y el hueco entre enlaces se comprime entre 900px y 1200px.
   -------------------------------------------------------------------------- */

.gm-header {
  position: sticky;
  top: 0;
  z-index: var(--gm-z-header);
  background-color: var(--gm-navy);
  border-bottom: 1px solid var(--gm-navy-borde);
}

.gm-header__barra {
  display: flex;
  /* En móvil el panel del menú baja a una segunda línea completa;
     por eso la barra envuelve. Desde 900px todo cabe en una sola fila. */
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--gm-esp-2xs);
  min-height: var(--gm-alto-header);
  padding-block: var(--gm-esp-2xs);
}

/* --- Logotipo ------------------------------------------------------------------ */

.gm-header__logo {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  line-height: 0;
  text-decoration: none;
}

.gm-header__logo img {
  width: auto;
  /* El logotipo es un lockup ancho (600x368, proporción 1.63), así que
     necesita más altura que un isotipo cuadrado para leerse bien. */
  height: 3.25rem;
}

/* --- Acciones · WhatsApp + hamburguesa ------------------------------------------ */

.gm-header__acciones {
  display: flex;
  align-items: center;
  gap: var(--gm-esp-2xs);
  margin-left: auto;
}

/* En móvil el botón de WhatsApp se reduce al icono para no apretar la barra */
.gm-header__wa {
  width: 2.875rem;
  min-height: 2.875rem;
  padding-inline: 0;
}

.gm-header__wa svg { width: 1.5rem; height: 1.5rem; }

.gm-header__wa-texto { display: none; }

/* --- Hamburguesa ---------------------------------------------------------------- */

.gm-header__toggle {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 5px;
  width: 2.875rem;
  height: 2.875rem;
  padding: 0;
  border: 1px solid var(--gm-navy-borde);
  border-radius: var(--gm-radio-md);
  background-color: transparent;
  color: var(--gm-sobre-oscuro);
  cursor: pointer;
  transition: background-color var(--gm-trans), border-color var(--gm-trans);
}

.gm-header__toggle:hover {
  background-color: var(--gm-navy-claro);
  border-color: var(--gm-oro-tenue);
}

.gm-header__toggle span {
  display: block;
  width: 20px;
  height: 2px;
  border-radius: 2px;
  background-color: currentColor;
  transition: transform var(--gm-trans), opacity var(--gm-trans);
}

.gm-header__toggle[aria-expanded="true"] span:nth-child(1) {
  transform: translateY(7px) rotate(45deg);
}
.gm-header__toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.gm-header__toggle[aria-expanded="true"] span:nth-child(3) {
  transform: translateY(-7px) rotate(-45deg);
}

/* --- Menú · móvil: panel desplegable --------------------------------------------- */

.gm-header__nav {
  display: none;
  z-index: var(--gm-z-menu);
}

/* Abierto en móvil: ocupa una línea completa por debajo del logotipo y de
   las acciones, gracias a order + flex-basis dentro de la barra envolvente. */
.gm-header__nav.is-abierto {
  display: block;
  order: 3;
  flex-basis: 100%;
  width: 100%;
  padding-bottom: var(--gm-esp-md);
  border-top: 1px solid var(--gm-navy-borde);
}

.gm-header__menu {
  display: flex;
  flex-direction: column;
  margin: 0;
  padding: 0;
  list-style: none;
}

.gm-header__menu li { margin: 0; }

.gm-header__enlace {
  display: block;
  padding: 0.875rem 0;
  border-bottom: 1px solid var(--gm-navy-borde);
  color: var(--gm-sobre-oscuro) !important;
  font-size: var(--gm-texto-lg);
  font-weight: var(--gm-peso-medio);
  letter-spacing: 0.01em;
  text-decoration: none;
  transition: color var(--gm-trans);
}

.gm-header__enlace:hover { color: var(--gm-oro) !important; }

.gm-header__enlace[aria-current="page"] {
  color: var(--gm-oro) !important;
  font-weight: var(--gm-peso-fuerte);
}

/* --- Desde 900px · menú horizontal, sin hamburguesa ------------------------------- */

@media (min-width: 900px) {
  .gm-header__barra {
    min-height: 5.25rem;
    gap: var(--gm-esp-md);
  }

  .gm-header__logo img { height: 4rem; }

  .gm-header__toggle { display: none; }

  /* Se nombran las dos clases para igualar la especificidad de .is-abierto
     y garantizar que el estado móvil quede anulado en escritorio. */
  .gm-header__nav,
  .gm-header__nav.is-abierto {
    display: block !important;
    order: 0;
    flex: 1 1 auto;
    width: auto;
    padding-bottom: 0;
    border-top: 0;
  }

  .gm-header__menu {
    flex-direction: row;
    flex-wrap: nowrap;
    align-items: center;
    justify-content: flex-end;
    /* El hueco se comprime al añadir el quinto enlace */
    gap: clamp(0.75rem, 0.1rem + 1.4vw, 1.75rem);
  }

  .gm-header__enlace {
    position: relative;
    padding: 0.5rem 0;
    border-bottom: 0;
    font-size: var(--gm-texto-sm);
    white-space: nowrap;
  }

  /* Subrayado dorado dibujado sin desplazar el texto */
  .gm-header__enlace::after {
    content: "";
    position: absolute;
    right: 0;
    bottom: 0.125rem;
    left: 0;
    height: 2px;
    border-radius: 2px;
    background-color: var(--gm-oro);
    transform: scaleX(0);
    transform-origin: left center;
    transition: transform var(--gm-trans);
  }

  .gm-header__enlace:hover::after,
  .gm-header__enlace[aria-current="page"]::after { transform: scaleX(1); }

  .gm-header__acciones { margin-left: 0; }

  .gm-header__wa {
    width: auto;
    min-height: 2.75rem;
    padding-inline: 1.25rem;
  }

  .gm-header__wa svg      { width: 1.25rem; height: 1.25rem; }
  .gm-header__wa-texto    { display: inline; }
}

@media (min-width: 1200px) {
  .gm-header__barra  { gap: var(--gm-esp-lg); }
  .gm-header__enlace { font-size: var(--gm-texto-base); }
  .gm-header__wa     { padding-inline: 1.5rem; }
}


/* --------------------------------------------------------------------------
   15. FOOTER
   -------------------------------------------------------------------------- */

.gm-footer {
  /* El filete separa el pie de una sección de cierre que también va en navy;
     sobre un fondo claro no se nota. */
  border-top: 1px solid var(--gm-navy-borde);
  background-color: var(--gm-navy);
  color: var(--gm-sobre-oscuro-suave);
  font-size: var(--gm-texto-sm);
}

.gm-footer__principal {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--gm-esp-lg);
  padding-block: var(--gm-esp-xl);
}

/* Sin el .gm-footer por delante, .gm-page h2 le gana y el título del pie sale
   en serif, a tamaño de titular y en color tinta sobre el navy: ilegible. */
.gm-footer .gm-footer__titulo {
  margin: 0 0 var(--gm-esp-sm);
  color: var(--gm-oro);
  font-family: var(--gm-fuente-cuerpo);
  font-size: var(--gm-texto-xs);
  font-weight: var(--gm-peso-fuerte);
  letter-spacing: var(--gm-track-ancho);
  line-height: 1.3;
  text-transform: uppercase;
}

.gm-footer__logo img {
  width: auto;
  height: 3.75rem;
  margin-bottom: var(--gm-esp-sm);
}

.gm-footer__lema {
  max-width: 32ch;
  margin: 0 0 var(--gm-esp-md);
  color: var(--gm-sobre-oscuro-suave);
  font-size: var(--gm-texto-sm);
  line-height: var(--gm-alto-corto);
}

.gm-footer__lista {
  display: flex;
  flex-direction: column;
  gap: var(--gm-esp-2xs);
  margin: 0;
  padding: 0;
  list-style: none;
}

.gm-footer__lista li { margin: 0; }

.gm-footer a {
  color: var(--gm-sobre-oscuro) !important;
  text-decoration: none;
  transition: color var(--gm-trans);
}

.gm-footer a:hover {
  color: var(--gm-oro) !important;
  text-decoration: underline;
  text-underline-offset: 0.2em;
}

/* Dato de contacto con icono */
.gm-footer__dato {
  display: flex;
  align-items: flex-start;
  gap: var(--gm-esp-2xs);
  line-height: var(--gm-alto-corto);
}

.gm-footer__dato svg {
  flex-shrink: 0;
  width: 1.125rem;
  height: 1.125rem;
  margin-top: 0.1875rem;
  fill: var(--gm-oro);
}

/* El domicilio va en <address> por semántica; se le quita la cursiva
   que el navegador aplica por omisión */
.gm-footer__dato address {
  margin: 0;
  font-style: normal;
  line-height: var(--gm-alto-corto);
}

.gm-footer__horario {
  margin: 0;
  color: var(--gm-sobre-oscuro-suave);
  line-height: var(--gm-alto-corto);
}

.gm-footer__horario dt {
  color: var(--gm-sobre-oscuro);
  font-weight: var(--gm-peso-fuerte);
}

.gm-footer__horario dd { margin: 0 0 var(--gm-esp-2xs); }
.gm-footer__horario dd:last-child { margin-bottom: 0; }

.gm-footer__nota {
  max-width: 32ch;
  margin: var(--gm-esp-md) 0 0;
  color: var(--gm-sobre-oscuro-suave);
  font-size: var(--gm-texto-sm);
  line-height: var(--gm-alto-corto);
}

/* --- Redes -------------------------------------------------------------------------
   RESERVADO. Hoy el salón no tiene redes sociales, así que el footer no
   incluye este bloque. Se conserva el estilo resuelto para el día que abra
   Facebook o Instagram: basta con añadir la lista en footer.php. ----------------- */

.gm-footer__redes {
  display: flex;
  gap: var(--gm-esp-2xs);
  margin: 0;
  padding: 0;
  list-style: none;
}

.gm-footer__redes li { margin: 0; }

.gm-footer__red {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.75rem;
  height: 2.75rem;
  border: 1px solid var(--gm-navy-borde);
  border-radius: var(--gm-radio-full);
  color: var(--gm-sobre-oscuro);
  transition: background-color var(--gm-trans),
              border-color var(--gm-trans),
              color var(--gm-trans);
}

.gm-footer__red svg {
  width: 1.25rem;
  height: 1.25rem;
  fill: currentColor;
}

.gm-footer__red:hover {
  background-color: var(--gm-oro);
  border-color: var(--gm-oro);
  color: var(--gm-navy) !important;
  text-decoration: none;
}

/* --- Barra legal ------------------------------------------------------------------- */

.gm-footer__legal {
  display: flex;
  flex-direction: column;
  gap: var(--gm-esp-2xs);
  padding-block: var(--gm-esp-md);
  border-top: 1px solid var(--gm-navy-borde);
  color: var(--gm-sobre-oscuro-suave);
  font-size: var(--gm-texto-xs);
}

.gm-footer__legal p {
  max-width: none;
  margin: 0;
}

@media (min-width: 640px) {
  .gm-footer__principal {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--gm-esp-xl) var(--gm-esp-lg);
  }
  .gm-footer__legal {
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
  }
}

@media (min-width: 900px) {
  .gm-footer__principal {
    grid-template-columns: 1.5fr 1fr 1.2fr 1.2fr;
    padding-block: var(--gm-esp-2xl);
  }
}
