/*
Theme Name: Andromeda — El eje del bar
Theme URI: https://deedevelopment.es
Template: andromeda
Author: DeeDevelopment
Author URI: https://deedevelopment.es
Description: Child theme de Andromeda para «El eje del bar»: web social de reseñas de locales y eventos compartidas dentro de grupos de amigos. Hereda los design tokens y la accesibilidad WCAG 2.2 AA del tema padre.
Version: 0.1.10
Requires at least: 6.6
Requires PHP: 8.1
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: andromeda-eje-del-bar
Tags: full-site-editing, accessibility-ready, child-theme
*/

/*
 * Los estilos base los aporta el tema padre (Andromeda). Este archivo queda como
 * punto de entrada del child; las personalizaciones del sitio se añadirán aquí o
 * en assets/ a medida que avancen los hitos. No se duplican tokens: se heredan vía
 * theme.json (merge de FSE). No hardcodear colores/tamaños: usar las custom
 * properties de Andromeda (--wp--preset--* y --andromeda-*).
 */

/*
 * Color del anillo de foco. Andromeda define --vulcano-focus-color con su terracota
 * (#8d2b0b), que gana al fallback «accent» de los bloques eje y rompe el contrato de
 * DESIGN.md §2 (foco = accent «Hora violeta»). Lo redefinimos aqui, en :root, para que
 * TODO el foco visible del sitio siga el accent de la paleta del tema (editable en
 * Apariencia → Editor → Estilos), con fallback al berenjena-magenta actual.
 */
:root {
  --vulcano-focus-color: var(--wp--preset--color--accent, #af2b66);
}

/*
 * Contenedor ÚNICO del sitio (BUG-002, decisions.md 2026-08-02): un solo ancho
 * máximo de 75rem alineado con la cabecera, como en los mockups aprobados
 * (base.css: --wide-w = 75rem). Andromeda define --andromeda-wide-width: 93.75rem
 * y con ella acota el interior del header (.site-header__inner /
 * .flavor-header__inner), el footer (.dd-footer .dd-shell) y el content-shell
 * en modo boxed (.dd-shell). Redefinirla aquí, en :root, alinea TODOS esos
 * shells del padre al mismo contenedor de 75rem sin tocar código instalado.
 * El wideSize de FSE (alignwide) se alinea en paralelo desde el theme.json hijo;
 * la columna de lectura de la entrada sigue en el contentSize de 48rem.
 */
:root {
  --andromeda-wide-width: 75rem;
}

/* =========================================================================
 * SHELL del sitio (T7.2): zona de cuenta de la cabecera, bandas de la home y
 * contenedor de las fichas. Solo tokens (--wp--preset--*), cero hex nuevos.
 * ========================================================================= */

/*
 * Zona de cuenta inyectada en la cabecera de Andromeda (functions.php,
 * eje_inject_account_nav). Botones con el mismo lenguaje que los .eje-btn de los
 * bloques del plugin; targets >= 44px (2.75rem).
 */
.eje-cuenta {
  display: flex;
  align-items: center;
  gap: 0.5rem;
}

.eje-cuenta__btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 2.75rem;
  padding: 0.4rem 1.1rem;
  border-radius: 0.375rem;
  font-weight: 600;
  text-decoration: none;
  border: 1px solid transparent;
  white-space: nowrap;
}

.eje-cuenta__btn--primary {
  background: var(--wp--preset--color--brand);
  color: var(--wp--preset--color--inverse);
  border-color: var(--wp--preset--color--brand);
}

.eje-cuenta__btn--primary:hover {
  background: var(--wp--preset--color--brand-strong);
  border-color: var(--wp--preset--color--brand-strong);
}

.eje-cuenta__btn--outline {
  background: var(--wp--preset--color--surface);
  color: var(--wp--preset--color--brand-strong);
  border-color: var(--wp--preset--color--border);
}

.eje-cuenta__btn--outline:hover {
  background: var(--wp--preset--color--canvas);
}

.eje-cuenta__avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.75rem;
  height: 2.75rem;
  border-radius: 50%;
}

.eje-cuenta__avatar-img {
  border-radius: 50%;
  border: 2px solid var(--wp--preset--color--surface);
  box-shadow: 0 1px 2px color-mix(in srgb, var(--wp--preset--color--text) 15%, transparent);
}

/* Contador de invitaciones pendientes sobre el ítem PERMANENTE «Grupos» del
 * menú Principal (gate H7 iter1 G3; antes vivía como enlace propio en la zona
 * de cuenta, T7.6): número visible en badge + texto para lector; accent-2 =
 * color de la capa social (decisions T3.2 #2). La clase la añade el filtro
 * nav_menu_link_attributes del child SOLO con pendientes > 0. */
.eje-cuenta__grupos {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
}

.eje-cuenta__badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 1.35rem;
  height: 1.35rem;
  padding: 0 0.3rem;
  border-radius: 999px;
  background: var(--wp--preset--color--accent-2);
  color: var(--wp--preset--color--inverse);
  font-size: 0.8rem;
  font-weight: 700;
  line-height: 1;
}

.eje-cuenta a:focus-visible {
  outline: 3px solid var(--vulcano-focus-color, var(--wp--preset--color--accent));
  outline-offset: 2px;
}

/*
 * Compatibilidad con los header_layout de Andromeda (request
 * andromeda-settings-child-compat, T4). Los modelos «logo-centered» y «split»
 * convierten .site-header__inner en un grid de 3 columnas (layouts.css del
 * padre: nav→1, marca→2, CTA/toggle→3) y el nav de cuenta inyectado, sin celda
 * propia, caía autocolocado a una segunda fila rompiendo la cabecera. Se ancla
 * a la fila 1 en la columna implícita 4 (auto), NO en la 3: el CTA del padre ya
 * ocupa esa celda y dos ítems en la misma celda de grid se superponen. Con
 * header_cta_enabled el CTA conserva su columna 3 (justify-self: end) y la
 * cuenta queda a su derecha separada por el gap de 1rem del propio grid, con el
 * orden visual CTA→cuenta idéntico al orden DOM/tab (SC 2.4.3); sin CTA la
 * columna 3 (1fr) queda vacía y la cuenta ocupa igualmente el borde derecho.
 * En <=48rem el padre devuelve estos modelos al flex del layout por defecto
 * (grid-* y justify-self pasan a ser inertes), así que el móvil hereda el
 * comportamiento ya validado de la cabecera actual. El layout por defecto
 * (logo-left) no entra por ningún selector de este bloque: cero cambios.
 */
.site-header--layout-logo-centered .eje-cuenta,
.site-header--layout-split .eje-cuenta {
  grid-row: 1;
  grid-column: 4;
  justify-self: end;

  /* En anchos intermedios los botones parten en dos líneas (el ancho mínimo de
   * la columna pasa a ser el del botón más ancho) antes que desbordar la fila;
   * el grid del padre crece en alto si hace falta (min-height, no height). */
  flex-wrap: wrap;
  justify-content: flex-end;
}

/*
 * Modelo «compact»: la barra baja a 56px y el padre rebaja la tipografía de su
 * CTA (.site-header__action); se aplica la misma rebaja a los botones de cuenta
 * para que ambos hablen igual. Los targets NO bajan: min-height 2.75rem (44px)
 * intacto, solo se estrecha el padding horizontal y la fuente.
 */
.site-header--layout-compact .eje-cuenta__btn {
  padding-inline: 0.75rem;
  font-size: 0.875rem;
}

/*
 * Footer CLARO del producto (gate H7 iter1, G1): el shell de Andromeda pinta
 * .dd-footer sobre el token text (berenjena); el mockup aprobado lleva footer
 * claro en surface. Solo tokens del preset (cero hex); contrastes verificados
 * con la matriz AA de decisions.md T3.4: surface/text 16.86 · surface/text-soft
 * 10.01 · brand-strong sobre surface >= 8.28.
 */
.site-footer.dd-footer {
  color: var(--wp--preset--color--text);
  background: var(--wp--preset--color--surface);
  border-block-start: 1px solid var(--wp--preset--color--border);
}

.dd-footer p,
.dd-footer span {
  color: var(--wp--preset--color--text-soft);
}

.dd-footer a {
  color: var(--wp--preset--color--brand-strong);
}

.dd-footer__meta-title {
  color: var(--wp--preset--color--text);
}

/*
 * Home A RAS de la cabecera (fix «hueco header→hero», 2026-08-08): el layout
 * global del core separa cada hijo de .wp-site-blocks con
 * `:where(.wp-site-blocks) > * { margin-block-start: 1.5rem }` (blockGap), y en
 * la portada ese margen del <main> pintaba una franja de canvas entre el menú y
 * el hero. Se anula SOLO en la home (body.home, verificado en el <body> de la
 * página en vivo); el resto de vistas conservan su respiración de 1.5rem.
 * Solo layout, cero color.
 */
body.home .wp-site-blocks > main {
  margin-block-start: 0;
}

/*
 * Titular de la home (quick-fix h1 único, revisado 2026-08-08 tras el veredicto
 * de la clienta): el h1 sigue siendo el TÍTULO de la página (front-page.html,
 * wp:post-title nivel 1) pero SR-ONLY (clase screen-reader-text de Andromeda,
 * assets/css/a11y.css). El titular VISIBLE vuelve DENTRO del hero morado como
 * PÁRRAFO .eje-hero__titular (pattern eje-home), estilizado exactamente como el
 * antiguo .eje-hero h1 (ver bloque .eje-hero más abajo). Los estilos del
 * anterior titular sobre canvas (.eje-home__titulo) se eliminan: ya no hay
 * ningún bloque con esa clase.
 */

/*
 * Hero expansivo de la home pública (mockup home-publica): banda a sangre con
 * gradiente de marca + scrim AA (R12.7/R25-B) como capa superior del background.
 * Los colores derivan de los tokens (text/accent-2/brand) via color-mix.
 */
.eje-hero {
  position: relative;
  overflow: hidden;
  background:
    linear-gradient(
      180deg,
      color-mix(in srgb, var(--wp--preset--color--text) 55%, transparent),
      color-mix(in srgb, var(--wp--preset--color--text) 82%, transparent)
    ),
    linear-gradient(
      150deg,
      color-mix(in srgb, var(--wp--preset--color--accent-2) 55%, var(--wp--preset--color--text)),
      var(--wp--preset--color--accent-2) 45%,
      var(--wp--preset--color--brand)
    );
  padding-block: clamp(2.5rem, 6vw, 4.5rem);
  padding-inline: 1rem;
  text-align: center;
}

.eje-hero h1,
.eje-hero p {
  color: var(--wp--preset--color--inverse);
}

/*
 * El titular visible del hero es un PÁRRAFO (.eje-hero__titular, pattern
 * eje-home) con el MISMO aspecto que tenía el antiguo .eje-hero h1: comparte
 * selector con él (dormido: hoy no hay h1 dentro del hero) y añade lo que un
 * <p> no hereda de un encabezado (fuente display, peso, line-height, balance).
 */
.eje-hero h1,
.eje-hero .eje-hero__titular {
  font-size: clamp(2rem, 3vw + 1rem, 3.4rem);
  margin-bottom: 0.75rem;
}

.eje-hero .eje-hero__titular {
  margin-top: 0;
  font-family: var(--andromeda-font-display, inherit);
  font-weight: 700;
  line-height: var(--andromeda-line-height-heading, 1.08);
  text-wrap: balance;
}

.eje-hero .eje-hero__sub {
  max-width: 40rem;
  margin-inline: auto;
  margin-bottom: 1.5rem;
}

.eje-hero .eje-search {
  text-align: left;
  max-width: 60rem;
  margin-inline: auto;
}

/*
 * Hero compacto LEGADO (home de dos variantes R12, retirada por la clienta el
 * 2026-08-08 en la home unificada). Ni el pattern eje-home ni el seed de
 * despliegue (eje-deploy-seed 1.1.0) emiten ya .eje-hero-compacto; la única
 * referencia viva es el snapshot en BD de la página «Inicio» hasta que la
 * clienta reinserte el pattern. RETIRAR estos estilos después de esa
 * reinserción (request home-unificada).
 */
.eje-hero-compacto {
  background: linear-gradient(
    120deg,
    var(--wp--preset--color--canvas),
    var(--wp--preset--color--surface)
  );
  border: 1px solid var(--wp--preset--color--border);
  border-radius: 0.75rem;
  padding: 1.5rem;
}

/* =========================================================================
 * Home UNIFICADA (request home-unificada, 2026-08-08): bloque intermedio para
 * identificados bajo el hero compartido. Solo tokens, cero hex.
 * ========================================================================= */

/*
 * Saludo + novedades (audiencia con-grupos). La clienta pidió MÁS aire entre
 * «Hola, {nombre}» (párrafo .eje-bienvenida__saludo del bloque) y la línea de
 * novedades (párrafo estático editable del pattern): margen token-scale por
 * encima del blockGap por defecto.
 */
.eje-saludo-grupos .eje-saludo-grupos__novedades {
  margin-block-start: var(--vulcano-space-xl, 2rem);
  margin-block-end: var(--vulcano-space-l, 1.5rem);
}

/*
 * Card «únete o crea tu grupo» (audiencia identificados-sin-grupos). La card
 * reutiliza las clases del estado vacío del feed (.eje-feed-empty
 * .eje-homefeed__nogroups, hoja del feed de grupo que el feed-mis-grupos del
 * pattern enqueue en todos los estados); aquí solo el botón core del pattern,
 * con el mismo lenguaje que .eje-btn--primary / .eje-mapgate__btn
 * (target >= 44px, brand/inverse).
 */
.eje-cta-sin-grupos .wp-block-button__link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 2.75rem;
  padding: 0.5rem 1.25rem;
  border: 1px solid var(--wp--preset--color--brand);
  border-radius: 0.375rem;
  background: var(--wp--preset--color--brand);
  color: var(--wp--preset--color--inverse);
  font-weight: 600;
  text-decoration: none;
}

.eje-cta-sin-grupos .wp-block-button__link:hover {
  background: var(--wp--preset--color--brand-strong);
  border-color: var(--wp--preset--color--brand-strong);
}

.eje-cta-sin-grupos .wp-block-button__link:focus-visible {
  outline: 3px solid var(--vulcano-focus-color, var(--wp--preset--color--accent));
  outline-offset: 2px;
}

/*
 * Banda de valor de la home pública (mockup home-publica, «Por qué El eje del
 * bar»): centra las tarjetas vulcano/icon-box de la composición.
 */
/* Ritmo vertical de las secciones de la home (pattern eje-home). */
.eje-home-seccion {
  margin-block: 2.5rem;
}

.eje-valor {
  background: var(--wp--preset--color--surface);
  border-block: 1px solid var(--wp--preset--color--border);
  padding-block: 2rem;
  margin-block: 2.5rem;
}

.eje-valor .vulcano-icon-box {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
}

/*
 * Contenedor de las fichas (anotación diferida del gate H5, T5.5 iter1 issue 4:
 * «ficha a sangre»): los singles de los CPT del producto no tienen la meta de
 * layout de Andromeda (solo page/post), así que el content-shell cae a
 * full-width. Se acota a la misma columna que el wrap de los mockups (75rem).
 */
.single-eje_local .dd-content-shell--full-width,
.single-eje_resena .dd-content-shell--full-width,
.single-eje_grupo .dd-content-shell--full-width,
.single-evmg_event .dd-content-shell--full-width,
.archive.author .dd-content-shell--full-width {
  width: min(100% - 2rem, var(--andromeda-wide-width));
  margin-inline: auto;
}

/* =========================================================================
 * BLOG (T7.5, R29): listado (home.html) y entrada (single-post.html).
 * Cards y widgets según los mockups aprobados blog-listado / blog-entrada.
 * Solo tokens (--wp--preset--*), cero hex nuevos.
 * ========================================================================= */

/* El listado y la entrada usan la misma columna que el resto del sitio:
 * el shell cae a full-width en estas vistas (sin meta de layout) y el grupo
 * interior constrained centra el contenido; esto acota el shell por si acaso. */
.blog .dd-content-shell--full-width,
.paged.blog .dd-content-shell--full-width,
.single-post .dd-content-shell--full-width {
  width: min(100% - 2rem, var(--andromeda-wide-width));
  margin-inline: auto;
}

.eje-blog__lead {
  color: var(--wp--preset--color--text-soft);
  margin-top: 0.25rem;
  margin-bottom: 2rem;
}

/* Cards del listado: imagen a la izquierda (40%) en escritorio, apiladas en
 * móvil. El ÚNICO enlace de la card es el título (R25-A). */
ul.eje-blog__posts {
  list-style: none;
  padding-left: 0;
  margin: 0;
  display: grid;
  gap: 1.5rem;
}

.eje-blog-card {
  display: flex;
  gap: 1.25rem;
  align-items: stretch;
  padding: 1.25rem;
  background: var(--wp--preset--color--surface);
  border: 1px solid var(--wp--preset--color--border);
  border-radius: 0.75rem;
  box-shadow: 0 1px 2px color-mix(in srgb, var(--wp--preset--color--text) 8%, transparent);
}

.eje-blog-card .wp-block-post-featured-image {
  flex: 0 0 40%;
  margin: 0;
}

.eje-blog-card .wp-block-post-featured-image img {
  display: block;
  width: 100%;
  height: 100%;
  min-height: 11rem;
  object-fit: cover;
  border-radius: 0.5rem;
}

.eje-blog-card__body {
  flex: 1;
  min-width: 0;
}

.eje-blog-card__title {
  margin: 0;
  font-size: 1.35rem;
  line-height: 1.35;
}

.eje-blog-card__title a {
  color: var(--wp--preset--color--brand-strong);
  text-decoration: none;
  display: inline-block;
  padding-block: 0.25rem;
}

.eje-blog-card__title a:hover {
  text-decoration: underline;
}

.eje-blog-card__meta,
.eje-entrada__meta {
  color: var(--wp--preset--color--text-soft);
  font-size: 0.875rem;
  gap: 0.4rem 0.8rem;
}

.eje-blog-card__meta {
  margin-block: 0.35rem 0.5rem;
}

.eje-blog-card__excerpt {
  margin: 0;
}

.eje-blog-card__excerpt p {
  margin: 0;
}

@media (max-width: 64rem) {
  .eje-blog-card {
    flex-direction: column;
  }

  .eje-blog-card .wp-block-post-featured-image {
    flex: none;
  }

  .eje-blog-card .wp-block-post-featured-image img {
    min-height: 9rem;
    max-height: 12rem;
  }
}

/* Paginación del listado: targets >= 44px (2.75rem), estado actual con
 * fondo brand (aria-current="page" lo pone el core). */
.eje-blog__paginacion {
  margin-top: 2rem;
}

.eje-blog__paginacion a,
.eje-blog__paginacion .page-numbers {
  display: inline-grid;
  place-items: center;
  min-width: 2.75rem;
  min-height: 2.75rem;
  padding: 0 0.5rem;
  border: 1px solid var(--wp--preset--color--border);
  border-radius: 0.5rem;
  background: var(--wp--preset--color--surface);
  color: var(--wp--preset--color--brand);
  font-weight: 600;
  text-decoration: none;
}

.eje-blog__paginacion a:hover {
  background: var(--wp--preset--color--canvas);
}

.eje-blog__paginacion .page-numbers.current {
  background: var(--wp--preset--color--brand);
  border-color: var(--wp--preset--color--brand);
  color: var(--wp--preset--color--inverse);
}

.eje-blog__paginacion .page-numbers.dots {
  border: 0;
  background: transparent;
  color: var(--wp--preset--color--text-soft);
}

/* Widgets de la sidebar del blog. */
.eje-blog__sidebar {
  display: grid;
  gap: 1.5rem;
}

.eje-blog-widget {
  background: var(--wp--preset--color--surface);
  border: 1px solid var(--wp--preset--color--border);
  border-radius: 0.75rem;
  padding: 1.25rem;
  box-shadow: 0 1px 2px color-mix(in srgb, var(--wp--preset--color--text) 8%, transparent);
}

.eje-blog-widget__titulo {
  margin: 0 0 0.75rem;
  font-size: 1.1rem;
}

.eje-blog-widget .wp-block-search__input {
  min-height: 2.75rem;
  border: 1px solid var(--wp--preset--color--border);
  border-radius: 0.375rem;
}

/* Botón «Buscar» en brand/inverse como el resto de botones primarios (gate H7
 * iter1, T1: core/search lo pintaba con su gris por defecto). Solo presets. */
.eje-blog-widget .wp-block-search__button {
  min-height: 2.75rem;
  background: var(--wp--preset--color--brand);
  color: var(--wp--preset--color--inverse);
  border: 1px solid var(--wp--preset--color--brand);
  border-radius: 0.375rem;
  font-weight: 600;
}

.eje-blog-widget .wp-block-search__button:hover {
  background: var(--wp--preset--color--brand-strong);
  border-color: var(--wp--preset--color--brand-strong);
}

.eje-blog-widget .wp-block-search__button:focus-visible {
  outline: 3px solid var(--vulcano-focus-color, var(--wp--preset--color--accent));
  outline-offset: 2px;
}

/* vulcano/posts dentro del widget: se matiza la card propia del bloque para
 * que no haya card-dentro-de-card (el widget ya es la card). */
.eje-blog-widget .wp-block-vulcano-posts .vulcano-posts__card {
  padding: 0;
  border: 0;
  background: transparent;
  display: grid;
  grid-template-columns: 3.5rem 1fr;
  column-gap: 0.75rem;
  align-items: center;
}

.eje-blog-widget .wp-block-vulcano-posts .vulcano-posts__media {
  grid-row: 1 / span 2;
}

.eje-blog-widget .wp-block-vulcano-posts .vulcano-posts__media img {
  border-radius: 0.375rem;
}

.eje-blog-widget .wp-block-vulcano-posts .vulcano-posts__title {
  font-size: 1rem;
}

/* Entrada individual (single-post.html): columna de lectura 48rem. */
.eje-entrada .wp-block-post-featured-image {
  margin: 0 0 1.5rem;
}

.eje-entrada .wp-block-post-featured-image img {
  display: block;
  width: 100%;
  max-height: 20rem;
  object-fit: cover;
  border-radius: 0.75rem;
}

.eje-entrada h1.wp-block-post-title {
  margin: 0 0 0.5rem;
}

.eje-entrada__meta {
  margin-bottom: 1.5rem;
}

.eje-entrada .wp-block-post-content > p {
  line-height: 1.7;
}

.eje-entrada .wp-block-post-content blockquote {
  margin: 1.5rem 0;
  padding: 1rem 1.5rem;
  border-left: 4px solid var(--wp--preset--color--accent);
  background: var(--wp--preset--color--surface);
  border-radius: 0.5rem;
}

/* Compartir: banda con borde superior, como el mockup. */
.eje-entrada__compartir {
  margin-top: 2rem;
  padding-top: 1.25rem;
  border-top: 1px solid var(--wp--preset--color--border);
  align-items: center;
}

.eje-entrada__compartir-label {
  margin: 0;
}

/* Navegación anterior/siguiente: dos cards. */
.eje-entrada__nav {
  margin-top: 2rem;
  gap: 1rem;
}

.eje-entrada__nav .wp-block-post-navigation-link {
  flex: 1 1 16rem;
  margin: 0;
  padding: 1rem;
  background: var(--wp--preset--color--surface);
  border: 1px solid var(--wp--preset--color--border);
  border-radius: 0.75rem;
}

.eje-entrada__nav .post-navigation-link-next {
  text-align: right;
}

/* En la entrada más reciente/antigua el core emite el div vacío: se oculta
 * para no pintar una card sin contenido. */
.eje-entrada__nav .wp-block-post-navigation-link:empty {
  display: none;
}

.eje-entrada__nav .post-navigation-link__label {
  display: block;
  color: var(--wp--preset--color--text-soft);
  font-size: 0.875rem;
  font-weight: 400;
  margin-bottom: 0.2rem;
}

.eje-entrada__nav .wp-block-post-navigation-link a {
  color: var(--wp--preset--color--brand-strong);
  font-weight: 700;
  text-decoration: none;
}

.eje-entrada__nav .wp-block-post-navigation-link a:hover {
  text-decoration: underline;
}

/* ============================================================
 * Página de contacto (T7.6, R30). Solo tokens del preset: cero hex.
 * El formulario es vulcano/form (trae su propia hoja); aquí solo el
 * lead y el consent-gate estático del mapa (patrón de la ficha T5.1:
 * cero peticiones a Google; hook data-eje-map/data-eje-map-consent
 * para H6).
 * ============================================================ */
.eje-contacto__lead,
.eje-pagina__lead {
  font-size: 1.125rem;
  color: var(--wp--preset--color--text-soft);
}

/* Card surface del formulario de contacto (gate H7 iter1, S2): el grupo
 * .eje-contacto__card envuelve al vulcano/form en el pattern/página (editable
 * en el editor). Mismo lenguaje de card que el resto del sitio: surface +
 * borde + radius 12px + sombra sm derivada del token text. */
.eje-contacto__card {
  background: var(--wp--preset--color--surface);
  border: 1px solid var(--wp--preset--color--border);
  border-radius: 0.75rem;
  padding: 1.5rem;
  box-shadow: 0 1px 2px color-mix(in srgb, var(--wp--preset--color--text) 8%, transparent);
}

.eje-mapgate {
  margin-top: 1.25rem;
  padding: 2rem 1.5rem;
  text-align: center;
  background: var(--wp--preset--color--surface);
  border: 1px dashed var(--wp--preset--color--border);
  border-radius: 0.75rem;
}

.eje-mapgate__icon {
  display: block;
  font-size: 2rem;
  margin-bottom: 0.5rem;
}

.eje-mapgate__title {
  margin: 0 0 0.5rem;
  font-size: 1.1rem;
}

.eje-mapgate p {
  max-width: 40rem;
  margin-left: auto;
  margin-right: auto;
}

/* Botón propio (sin wp-element-button): mismo lenguaje que .eje-btn--primary
 * de los bloques del plugin; target >= 44px. */
.eje-mapgate__btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 2.75rem;
  margin-top: 0.75rem;
  padding: 0.5rem 1.25rem;
  border: 1px solid var(--wp--preset--color--brand);
  border-radius: 0.375rem;
  background: var(--wp--preset--color--brand);
  color: var(--wp--preset--color--inverse);
  font-weight: 600;
  cursor: pointer;
}

.eje-mapgate__btn:hover {
  background: var(--wp--preset--color--brand-strong);
  border-color: var(--wp--preset--color--brand-strong);
}

.eje-mapgate__btn:focus-visible {
  outline: 3px solid var(--vulcano-focus-color, var(--wp--preset--color--accent));
  outline-offset: 2px;
}

/* =========================================================================
 * /explorar/ — la sidebar de filtros llega al borde del contenedor (BUG-002 · 2026-08-02).
 * ========================================================================= */

/*
 * En el patrón eje-listado-locales las dos columnas se declaran con anchos que
 * NO suman el 100%: listado a 66.66% (fijo) + filtros a 18rem + el gap. Como el
 * core marca flex-grow:0 en toda columna con flex-basis, sobra hueco a la
 * DERECHA de la de filtros y su borde queda corto respecto al buscador y al mapa
 * (medido a vw 1319: filtros right=1171 vs 1260). Igual que en la referencia de
 * listeo (sidebar fija + listado fluido), dejamos que la columna del LISTADO
 * crezca para absorber ese hueco: la de filtros mantiene sus 18rem y queda a ras
 * del borde derecho, alineada con buscador y mapa. Solo layout, cero color.
 * Acotado con :has() a la fila de columnas que contiene el bloque de filtros,
 * para no alterar ninguna otra columna del sitio. En reflow móvil (<782px) el
 * core apila las columnas al 100%, así que flex-grow es inocuo allí.
 */
.wp-block-columns:has(.eje-filters-block) > .wp-block-column:first-child {
  flex-grow: 1;
}
