/*
 * ESTRUCTURA — Latinos en Texas
 *
 * Cabecera fija, menú móvil, pie y el cromo compartido por index.php y 404.php
 * (cabecera de listado, paginación, estado vacío). Todo sale de tokens.css:
 * aquí no hay ni un color literal, ni un tamaño de fuente suelto.
 *
 * PUNTO DE CORTE DEL MENÚ: 1320px. Debe coincidir con CONSULTA_MOVIL en
 * assets/js/tema.js. Se corta ahí y no en los 1024px habituales porque en esta
 * cabecera conviven logo + selector de ciudad + siete entradas de menú +
 * buscador + CTA: por debajo de 1140 el menú empieza a comerse al buscador.
 *
 * REGLA DE LA CLASE .lt-js: la pone tema.js en <html>. Todo lo que dependa de
 * JavaScript (el cajón lateral, el autoenvío del selector) cuelga de ella. Sin
 * JS la cabecera deja de ser fija en móvil y el menú se apila visible: nunca
 * queda un botón que no hace nada ni un menú imposible de abrir.
 *
 * ---------------------------------------------------------------------------
 * CABECERA TRANSLÚCIDA — la decisión y su límite
 * ---------------------------------------------------------------------------
 * La cabecera es papel translúcido con desenfoque, y al bajar se vuelve sólida
 * con filete y sombra. El estado lo marca animaciones.js poniendo la clase
 * `lt-desplazado` en <html>; si ese script no carga, la cabecera se queda en su
 * estado translúcido, que es perfectamente legible — no hay ningún estado roto.
 *
 * Es translúcida CLARA y no oscura, aunque la paleta nueva sea nocturna, por
 * una razón concreta: el logotipo del cliente es a color y está pensado para
 * fondo claro. Una cabecera oscura obligaría a mantener dos versiones del logo
 * y a que el operador supiera cuál subir en cada sitio — exactamente el tipo de
 * trampa que este tema existe para no dejar. El fondo oscuro dominante de la
 * dirección de arte lo ponen las bandas de sección, que sí controlamos.
 */

/* ---------------------------------------------------------------- */
/* Compensación de la barra de administración de WordPress           */
/* ---------------------------------------------------------------- */

/*
 * La barra del admin también es fija y se pondría encima de la cabecera. Su
 * alto se declara UNA vez como variable local y de ahí lo leen la cabecera y el
 * cajón: es el mismo problema resuelto en un sitio en vez de en cuatro.
 * Por debajo de 600px WordPress deja de fijar su barra, así que vuelve a 0.
 */
body {
  --desplazamiento-barra: 0px;
  padding-top: var(--alto-cabecera);
}
body.admin-bar { --desplazamiento-barra: 32px; }

@media (max-width: 782px) {
  body.admin-bar { --desplazamiento-barra: 46px; }
}
@media (max-width: 600px) {
  body.admin-bar { --desplazamiento-barra: 0px; }
}

/* ---------------------------------------------------------------- */
/* Iconos                                                            */
/* ---------------------------------------------------------------- */

/*
 * Los SVG del tema son de trazo y heredan el color del texto: un solo estilo
 * sirve para el icono azul del selector, el blanco del botón y el claro del
 * pie. El sitio anterior cargaba seis hojas de Font Awesome y cuatro librerías
 * de iconos para conseguir menos que esto.
 */
.lt-icono {
  width: 1.1em;
  height: 1.1em;
  flex: none;
  fill: none;
  stroke: currentColor;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}

/*
 * WordPress imprime .screen-reader-text por su cuenta (paginación, formularios
 * de comentarios, wp_link_pages). Sin esta regla, esos textos —pensados solo
 * para lectores de pantalla— aparecen a la vista en mitad de la página.
 */
.screen-reader-text {
  position: absolute !important;
  width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* ---------------------------------------------------------------- */
/* Cabecera                                                          */
/* ---------------------------------------------------------------- */

.lt-cabecera {
  position: fixed;
  top: var(--desplazamiento-barra);
  left: 0;
  right: 0;
  z-index: 100;

  /*
   * Papel cálido al 82% con desenfoque y saturación. El `saturate` es lo que
   * evita el efecto «cristal sucio»: sin él, el contenido que pasa por debajo
   * se ve lavado y la cabecera parece un plástico gris.
   */
  background: color-mix(in srgb, var(--hueso) 82%, transparent);
  -webkit-backdrop-filter: blur(14px) saturate(150%);
  backdrop-filter: blur(14px) saturate(150%);

  /* El filete nace invisible y aparece al bajar, junto con la sombra: en lo
     alto de la página la cabecera tiene que sentirse parte del documento, no
     una barra pegada encima. */
  border-bottom: 1px solid transparent;
  transition: background-color var(--transicion), border-color var(--transicion),
              box-shadow var(--transicion);
}

/*
 * Respaldo para navegadores sin backdrop-filter (Firefox con la opción
 * desactivada, WebViews viejas de Android que en esta comunidad todavía se
 * usan). Sin él la cabecera quedaría translúcida SIN desenfoque y el menú se
 * leería sobre el texto de la página. Aquí se vuelve opaca y punto.
 */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .lt-cabecera { background: var(--hueso); }
}

/* El estado «ya se bajó»: la pone animaciones.js en <html>. */
.lt-desplazado .lt-cabecera {
  background: color-mix(in srgb, var(--hueso) 97%, transparent);
  border-bottom-color: var(--linea);
  box-shadow: var(--sombra-1);
}

/* ---------------------------------------------------------------- */
/* Cabecera transparente sobre banda oscura                          */
/* ---------------------------------------------------------------- */

/*
 * ARRIBA DEL TODO la cabecera desaparece y el hero se ve entero detras del
 * menu. AL BAJAR se vuelve solida, que es como estaba. El interruptor ya
 * existia: animaciones.js pone `lt-desplazado` en el <html> al pasar del
 * umbral, y de ahi colgaba el estado «ya se bajo».
 *
 * SOLO DONDE HAY OSCURO DETRAS. La clase `lt-sobre-oscuro` la pone
 * functions.php segun la pantalla. Se midio una por una: ocho de las once
 * empiezan en oscuro, pero empleos, noticias y el 404 arrancan en blanco y ahi
 * el menu transparente seria un menu invisible. De momento esta encendido solo
 * en la portada, a peticion del dueno.
 *
 * NO ES SOLO QUITAR EL FONDO. Hay que invertir TODO lo que se lee sobre el:
 * los enlaces del menu, el selector de ciudad, el conmutador de idioma y la
 * hamburguesa estan pensados para tinta oscura sobre papel claro. Dejar solo
 * uno sin invertir es dejarlo ilegible, y es el fallo tipico de este efecto.
 *
 * LA TRANSICION VA EN LA REGLA BASE, no aqui: asi el cambio de transparente a
 * solido se funde en vez de dar un salto al cruzar el umbral.
 */

/*
 * EL SELECTOR TIENE QUE NOMBRAR LOS DOS ELEMENTOS, Y AQUI ESTUVO EL FALLO.
 *
 * `lt-sobre-oscuro` va en el <body> y `lt-desplazado` en el <html>: son
 * elementos DISTINTOS. La primera version escribia
 * `.lt-sobre-oscuro:not(.lt-desplazado)`, que pregunta si el MISMO elemento
 * tiene una y no la otra — y el body nunca tiene `lt-desplazado`, asi que la
 * condicion se cumplia siempre y la cabecera se quedaba transparente tambien
 * despues de bajar.
 *
 * No dio ningun error: simplemente el menu flotaba sobre el contenido claro y
 * dejaba de leerse en cuanto se pasaba el hero.
 */
/*
 * EL HERO TIENE QUE PASAR POR DEBAJO DE LA CABECERA.
 *
 * Esto no es opcional y es lo que faltaba en el primer intento: la cabecera se
 * volvia transparente y detras seguia viendose BLANCO, porque el `body` lleva
 * un relleno superior del alto de la cabecera para que el contenido no quede
 * tapado. O sea, el hero empezaba justo DEBAJO y lo que asomaba por la
 * transparencia era el fondo del body.
 *
 * Se quita ese relleno solo en estas paginas y se le pasa al hero como relleno
 * interno: la seccion sube hasta el borde de la ventana —y se ve entera detras
 * del menu— pero su contenido sigue empezando por debajo de la cabecera, que
 * es lo unico que ese relleno tenia que garantizar.
 *
 * `box-sizing: border-box` es lo que hace que el `min-height: 92vh` del hero
 * siga siendo 92vh y no 92vh mas la cabecera. El tema lo aplica globalmente.
 */
/*
 * EL SELECTOR NOMBRA <html> A PROPOSITO, Y SIN ESO EL MOVIL SE QUEDA EN BLANCO.
 *
 * Mas abajo, dentro del bloque de hasta 1320px, hay un `.lt-js body {
 * padding-top: var(--alto-cabecera) }` que devuelve el relleno cuando la
 * cabecera pasa a ser fija con JavaScript. Ese selector pesa lo mismo que
 * `body.lt-sobre-oscuro` —una clase y un elemento cada uno— y esta escrito
 * DESPUES, asi que ganaba: en el movil el hero seguia empezando por debajo de
 * la cabecera y por la transparencia asomaba el blanco del body.
 *
 * Nombrando tambien el <html> el peso sube a dos clases y dos elementos y la
 * regla gana en los dos tamanos. Es mas barato que mover el bloque o duplicarlo
 * dentro de cada consulta de medios.
 */
html body.lt-sobre-oscuro,
html.lt-js body.lt-sobre-oscuro { padding-top: 0; }

body.lt-sobre-oscuro .lt-hero {
  /*
   * AIRE EXTRA ENTRE LA CABECERA Y EL CONTENIDO.
   *
   * Con solo el alto de la cabecera quedaban 102px hasta el antetitulo y se
   * leia apretado: el menu transparente y el texto comparten fondo, asi que
   * sin separacion se mezclan visualmente en una sola masa. Cuando la cabecera
   * era solida no hacia falta —el filete y el cambio de color ya separaban—,
   * pero al quitarlos hay que separar con espacio.
   *
   * En `clamp` y no fijo porque este hueco compite con la altura util: en una
   * pantalla baja, 72px fijos empujarian el buscador fuera de la primera
   * vista, y el buscador es la razon de ser del hero.
   */
  --lt-aire-hero: clamp(24px, 6vh, 76px);

  padding-top: calc(var(--alto-cabecera) + var(--lt-aire-hero));

  /*
   * Y EL HERO CRECE ESE MISMO ALTO. Las dos lineas van juntas.
   *
   * Con solo el relleno, el hero seguia midiendo 92vh en total y por dentro le
   * quedaban 92vh MENOS la cabecera: su contenido, que va centrado en vertical,
   * subia medio alto de cabecera y todo quedaba apelotonado contra el menu.
   *
   * Sumando la cabecera al minimo, la caja interior vuelve a medir exactamente
   * los 92vh de antes y el titular cae donde caia. Lo que crece es la seccion,
   * que es justo lo que se quiere: la parte que ahora se ve por debajo del menu
   * transparente.
   *
   * `svh` en la segunda declaracion por lo mismo que en el resto del tema: en
   * movil `vh` cuenta la barra del navegador como si no existiera. Los
   * navegadores que no conocen `svh` se quedan con la primera.
   */
  /* El hero crece lo mismo que se anade arriba: asi la caja interior sigue
     midiendo 92vh y el contenido BAJA entero en vez de comprimirse. */
  min-height: calc(92vh + var(--alto-cabecera) + var(--lt-aire-hero));
  min-height: calc(92svh + var(--alto-cabecera) + var(--lt-aire-hero));
}

/*
 * EN MOVIL EL AIRE SOBRA CASI ENTERO.
 *
 * Arriba se pusieron hasta 76px porque en escritorio el lienzo esta en posicion
 * ABSOLUTA y arranca pegado al borde: sin ese colchon la punta del panhandle
 * quedaba bajo los enlaces del menu.
 *
 * En movil el reparto es otro. Por debajo de 1024px el lienzo deja de estar
 * posicionado y pasa a ser el PRIMER BLOQUE de una columna (ver hero.css), asi
 * que ya no puede meterse debajo de nada — y ademas trae su propio colchon
 * gratis: la figura no llena su caja, le sobran unos 60px transparentes por
 * arriba. Sumando los dos, el hueco medido entre el menu y el dibujo era de
 * 107-128px segun el telefono, y se veia como un agujero.
 *
 * Se deja un aire minimo, no cero: pegar la caja al ras del menu deja el dibujo
 * a merced de esos 60px internos, que dependen de la proporcion de la figura y
 * cambiarian el dia que se retoque el encuadre del mapa. El colchon explicito
 * es la parte que se controla.
 *
 * AQUI SE PROBO TAMBIEN DEVOLVER `min-height: 0` Y SE DESCARTO CON NUMEROS.
 *
 * El razonamiento era bueno: hero.css pide `min-height: 0` en esta consulta de
 * medios —en la columna apilada manda el contenido— y la regla de la cabecera
 * transparente se lo comia por especificidad. Se corrigio, se midio, y la
 * correccion resulto peor que el fallo: en tableta vertical (768x1024, 820x1180,
 * 834x1194, 900x1200) el contenido apilado se queda 30-100px por debajo de la
 * ventana, y lo que asoma al pie de la portada es el relleno superior de la
 * seccion siguiente — una franja lisa, sin nada dentro. Se lee como un hueco,
 * no como «hay mas abajo».
 *
 * En telefono da igual: ahi el contenido siempre pasa del minimo. Asi que la
 * unica diferencia medible del cambio era esa franja vacia. Se queda el minimo.
 */
@media (max-width: 1024px) {
  body.lt-sobre-oscuro .lt-hero {
    --lt-aire-hero: clamp(6px, 1.2vh, 14px);
  }

  /*
   * SIN JAVASCRIPT LA CABECERA NO ES FIJA, ASI QUE NO HAY QUE COMPENSARLA.
   *
   * Por debajo de 1320px y sin `.lt-js`, la cabecera pasa a `position: static`
   * (mas abajo en este mismo archivo) y ocupa su sitio en el flujo. El relleno
   * del hero seguia descontando su altura igualmente: 90px de negro muerto
   * entre el final del menu y el mapa, justo el agujero que este bloque viene a
   * cerrar, colado por otra puerta.
   */
  html:not(.lt-js) body.lt-sobre-oscuro .lt-hero {
    padding-top: var(--lt-aire-hero);
  }

  /*
   * El mismo alivio para las otras siete pantallas de banda oscura, que hoy
   * estan comentadas en functions.php. Si no se escribe ahora, el dia que se
   * enciendan repetiran en movil justo el agujero que se acaba de cerrar en la
   * portada, y nadie recordara por que la portada si y el resto no.
   */
  body.lt-sobre-oscuro > .lt-principal > .lt-seccion--marca:first-child,
  body.lt-sobre-oscuro .lt-principal > .lt-seccion--marca:first-child {
    padding-top: calc(var(--alto-cabecera) + var(--e-4, 32px));
  }
}

/*
 * En las paginas que no son la portada, la banda oscura de arriba es la
 * cabecera de marca del archivo. Se le da el mismo trato para cuando se
 * enciendan (hoy solo esta activa la portada).
 */
body.lt-sobre-oscuro > .lt-principal > .lt-seccion--marca:first-child,
body.lt-sobre-oscuro .lt-principal > .lt-seccion--marca:first-child {
  padding-top: calc(var(--alto-cabecera) + var(--seccion-y, 64px));
}

/*
 * `.lt-anima` EN TODAS ESTAS REGLAS, Y NO ES DECORATIVO.
 *
 * La transparencia y la tinta blanca son UNA sola decision y tienen que
 * encenderse y apagarse juntas. Estaban separadas: el fondo se devolvia con
 * `html:not(.lt-anima)` y la tinta no, asi que en cuanto animaciones.js no
 * corria —sin JavaScript, o con `prefers-reduced-motion`, que hace que el guion
 * se abstenga a proposito— quedaba cabecera CREMA con letras BLANCAS. Medido:
 * 1,56:1 de contraste en escritorio y 1,09:1 en el menu desplegado del movil,
 * contra el 4,5:1 que exige el minimo. El menu entero, ilegible, en la pagina
 * mas visitada.
 *
 * Y no se recuperaba al bajar: `lt-desplazado` la escribe el mismo guion que no
 * habia corrido.
 *
 * Colgando las 18 reglas del mismo interruptor, sin JS y con movimiento
 * reducido se cae al comportamiento de siempre: cabecera solida, tinta oscura.
 */
html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-cabecera {
  background: transparent;
  border-bottom-color: transparent;
  box-shadow: none;
  /* Sin desenfoque: sobre el video del hero, un blur de 14px lo emborrona
     justo en la franja superior y se nota como una banda mate. */
  -webkit-backdrop-filter: none;
          backdrop-filter: none;
}

/* --- Lo que se lee encima: todo a blanco -------------------------- */

html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-nav__lista a,
html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-marca__texto {
  color: var(--blanco, #FFF);
}

html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-nav__lista a:hover {
  color: var(--blanco, #FFF);
  background: rgba(255, 255, 255, .14);
}

/*
 * La pagina actual seguia marcandose con el azul de marca, que sobre el hero
 * oscuro da 2,3:1 y desaparece. Se marca con blanco y el filete inferior, que
 * es la otra mitad de la senal y sigue funcionando.
 */
html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-nav__lista .current-menu-item > a,
html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-nav__lista .current_page_item > a {
  color: var(--blanco, #FFF);
}

/* Selector de ciudad: borde y texto claros, fondo apenas insinuado. */
html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-ciudad__caja {
  border-color: rgba(255, 255, 255, .34);
  background: rgba(255, 255, 255, .08);
}

html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-ciudad__campo,
html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-ciudad__caja .lt-icono {
  color: var(--blanco, #FFF);
}

/*
 * AQUI SE PUSO UNA FLECHA DE FONDO Y SOBRABA. Queda anotado porque el error es
 * facil de repetir: el selector del HERO si dibuja su flecha con
 * `background-image`, y al invertir los colores parecia que este tambien.
 *
 * Pero el selector de la CABECERA tiene su flecha como un <svg> aparte
 * (`.lt-ciudad__flecha`). Anadir la de fondo pintaba una SEGUNDA flecha dentro
 * del campo, encima del texto: se leia «All of Texas» con un chevron tachandolo.
 *
 * No hace falta ninguna regla: ese <svg> usa `currentColor` y ya se vuelve
 * blanco con la regla del icono de mas arriba.
 */

/* Las opciones del desplegable se pintan con el tema del sistema: si el texto
   va blanco, el fondo del <select> tiene que dejar de ser claro o el menu
   desplegado sale blanco sobre blanco en algunos navegadores. */
html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-ciudad__campo option {
  color: var(--tinta);
  background: var(--blanco, #FFF);
}

/* Conmutador de idioma. */
html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-idiomas {
  border-color: rgba(255, 255, 255, .30);
  background: rgba(255, 255, 255, .10);
}

html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-idiomas__opcion {
  color: var(--blanco, #FFF);
}

/* El activo se queda con el azul de marca relleno: es el unico elemento que
   debe seguir destacando por color y sobre el hero oscuro se lee de sobra. */
html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-idiomas__opcion--activo {
  background: var(--cielo, #4DA3FF);
  color: var(--tinta);
}

/* Hamburguesa. */
html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-hamburguesa {
  border-color: rgba(255, 255, 255, .34);
  color: var(--blanco, #FFF);
}

html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-hamburguesa__barras span {
  background: var(--blanco, #FFF);
}

/*
 * EL FOCO DEL TECLADO TAMBIEN CAMBIA.
 *
 * El anillo de foco es azul de marca y sobre el hero oscuro casi no se ve. Se
 * pasa a blanco: quien navega con teclado tiene que saber donde esta,
 * transparencia o no.
 */
html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-cabecera a:focus-visible,
html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-cabecera button:focus-visible,
html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-cabecera select:focus-visible {
  outline-color: var(--blanco, #FFF);
}

/*
 * SIN JAVASCRIPT NO HAY TRANSPARENCIA.
 *
 * `lt-desplazado` la escribe animaciones.js. Si ese guion no carga, la clase no
 * llega NUNCA y la cabecera se quedaria transparente para siempre — tambien
 * despues de bajar, con el contenido claro pasando por detras del menu.
 *
 * `.lt-anima` la pone el mismo guion como primera instruccion, asi que
 * condicionar todo a ella garantiza que sin JS la cabecera nace solida. Es el
 * mismo trato que `.lt-js` le da al menu movil.
 */
html:not(.lt-anima) body.lt-sobre-oscuro .lt-cabecera {
  background: color-mix(in srgb, var(--hueso) 82%, transparent);
}

/* ---------------------------------------------------------------- */
/* Cinta de anuncios                                                 */
/* ---------------------------------------------------------------- */

/*
 * La banda azul marino que corre por encima de la fila del menu, enseñando las
 * categorias reales del sitio. Ver inc/cinta-anuncios.php.
 *
 * DELGADA POR ENCARGO, y el numero sale de una cuenta, no del gusto: 30px en
 * escritorio y 28 en movil. En un telefono de 640px de alto, 28px es un 4 % del
 * viewport gastado en algo que no es contenido; a 40px ya seria un 6 % y se
 * empieza a notar como un estorbo permanente.
 *
 * De ese alto tan corto salen todas las demas decisiones: letra de 12px,
 * iconos de 14, y CERO relleno vertical propio —la altura la fija el contenedor
 * y las piezas se centran dentro—.
 */

.lt-explora {
  height: var(--alto-cinta);
  background: var(--marino, #10214A);
  color: #FFF;
  border-bottom: 1px solid rgba(255, 255, 255, .10);
}

.lt-explora__caja {
  display: flex;
  align-items: center;
  gap: var(--e-2);
  height: 100%;
  /* min-width en cero: sin esto la cinta se niega a encoger por debajo del
     ancho de su contenido y empuja la pagina a lo ancho en movil. */
  min-width: 0;
}

/*
 * EL ROTULO FIJO DE LA IZQUIERDA.
 *
 * Sin el, una banda de palabras en movimiento no dice QUE son esas palabras: se
 * lee como un teletipo de noticias, y el visitante no sabe que son enlaces a
 * secciones. Una sola palabra ancla el significado de todo lo que pasa al lado.
 *
 * Se esconde por debajo de 480px: ahi el ancho manda y las propias categorias
 * ya se explican con sus iconos.
 */
.lt-explora__rotulo {
  flex: 0 0 auto;
  margin: 0;
  padding-right: var(--e-2);
  border-right: 1px solid rgba(255, 255, 255, .18);
  color: rgba(255, 255, 255, .62);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .14em;
  text-transform: uppercase;
  white-space: nowrap;
}

/* La cinta hereda de `.lt-cinta` (utilidades.css) la animacion, el recorte y la
   pausa por hover/foco. Aqui solo se le dice cuanto sitio ocupa. */
.lt-explora__cinta {
  flex: 1 1 auto;
  min-width: 0;
  height: 100%;
}

.lt-explora__pista {
  height: 100%;
  gap: 0;   /* el aire va DENTRO de cada pieza: ver __casilla */
  /* Mas lenta que la cinta de logos de la portada. Aquella es decorativa y
     puede correr; esta hay que poder LEERLA de pasada, y a la velocidad de la
     otra las palabras no dan tiempo. */
  animation-duration: 64s;
}

.lt-explora__grupo {
  display: flex;
  /*
   * `stretch` y no `center`: con `center` cada casilla se encoge a la altura de
   * su texto, y entonces el `height: 100%` del enlace de dentro no tiene contra
   * qué resolverse y cae a 14 px. Estirando la casilla, el enlace ocupa la cinta
   * entera y la zona pulsable es la que se ve. El texto sigue centrado — lo
   * centra el propio enlace, que ya es `inline-flex` con `align-items: center`.
   */
  align-items: stretch;
  gap: 0;
  height: 100%;
  margin: 0;
  padding: 0;
  list-style: none;
}

/*
 * LA CASILLA TIENE QUE SER CONTENEDOR FLEXIBLE, O EL ENLACE NO SE ESTIRA.
 *
 * El enlace de dentro pide `height: 100%`, pero un porcentaje solo se resuelve
 * contra un padre con altura CONOCIDA. La casilla era `flex: none` sin altura
 * declarada, así que el 100 % no resolvía y el enlace caía a la altura de su
 * texto. Medido a 390 px: enlaces de 14 px de alto dentro de una casilla de 26,
 * en la cinta que sale en TODAS las páginas del sitio. Veinticuatro objetivos
 * de 14 px repetidos veintitrés veces en la pasada de QA.
 *
 * Con la casilla como contenedor, el enlace estira solo y ocupa la cinta entera.
 */
.lt-explora__casilla {
  flex: none;
  display: flex;
  align-items: stretch;
}

.lt-explora__enlace {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 100%;
  padding: 0 14px;
  color: rgba(255, 255, 255, .88);
  font-size: 12px;
  font-weight: var(--peso-medio, 500);
  line-height: 1;
  white-space: nowrap;
  text-decoration: none;
  transition: color .15s ease, background-color .15s ease;
}

.lt-explora__enlace:hover,
.lt-explora__enlace:focus-visible {
  color: #FFF;
  background: rgba(255, 255, 255, .10);
}

.lt-explora__enlace:focus-visible {
  outline: 2px solid #FFF;
  outline-offset: -2px;
}

/* El icono en el azul de marca claro y el texto en blanco: asi el icono marca
   el tipo de cosa sin competir con la palabra, que es lo que hay que leer. */
.lt-explora__icono {
  width: 14px;
  height: 14px;
  flex: none;
  fill: none;
  stroke: var(--cielo, #4DA3FF);
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}

/*
 * EL BOTON DE PAUSA. Obligatorio, no decorativo: el criterio 2.2.2 de la WCAG
 * exige poder parar cualquier movimiento automatico que dure mas de cinco
 * segundos. El CSS ya la para al pasar el raton y al recibir el foco, pero eso
 * no cubre a quien navega con pantalla tactil, donde no hay ni hover ni foco.
 */
.lt-explora__pausa {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: rgba(255, 255, 255, .12);
  color: #FFF;
  cursor: pointer;
  transition: background-color .15s ease;
}

.lt-explora__pausa:hover { background: rgba(255, 255, 255, .26); }

.lt-explora__pausa:focus-visible {
  outline: 2px solid #FFF;
  outline-offset: 2px;
}

/* Area pulsable de 44px sin engordar el boton dibujado, igual que en el
   conmutador de idioma. */
.lt-explora__pausa { position: relative; }
.lt-explora__pausa::after {
  content: '';
  position: absolute;
  left: 50%;
  top: 50%;
  width: 44px;
  height: 44px;
  transform: translate(-50%, -50%);
}

.lt-explora__icono-pausa,
.lt-explora__icono-play {
  width: 11px;
  height: 11px;
  fill: currentColor;
}

/* Solo uno de los dos iconos a la vez, segun el estado que marque el JS. */
.lt-explora__icono-play { display: none; }
.lt-explora [data-animacion='pausada'] ~ .lt-explora__pausa .lt-explora__icono-pausa,
.lt-explora__pausa[aria-pressed='true'] .lt-explora__icono-pausa { display: none; }
.lt-explora__pausa[aria-pressed='true'] .lt-explora__icono-play { display: block; }

@media (max-width: 480px) {
  .lt-explora__rotulo { display: none; }
  .lt-explora__enlace { padding: 0 11px; }
}

/*
 * SIN MOVIMIENTO SI EL SISTEMA LO PIDE.
 *
 * No basta con parar la animacion: una pista quieta de 25 categorias es MAS
 * ancha que la pantalla, asi que se quedarian ocultas las de la derecha sin
 * forma de llegar a ellas. Se convierte en una tira que se arrastra con el
 * dedo, y la copia duplicada se esconde para no leer todo dos veces.
 */
@media (prefers-reduced-motion: reduce) {
  .lt-explora__pista {
    animation: none;
    overflow-x: auto;
    scrollbar-width: none;
  }
  .lt-explora__pista::-webkit-scrollbar { display: none; }
  .lt-explora__grupo[aria-hidden='true'] { display: none; }
  .lt-explora__pausa { display: none; }
}

.lt-cabecera__barra {
  display: flex;
  align-items: center;
  gap: var(--e-2);
  /* La FILA, no la cabecera entera: encima de ella va la cinta de anuncios. */
  height: var(--alto-barra);
}

/* Marca ------------------------------------------------------------ */

.lt-marca {
  display: flex;
  align-items: center;
  flex: 0 0 auto;
}

.lt-marca .custom-logo,
.lt-marca img {
  /* El logo se adapta al alto de la barra en vez de forzar la barra a crecer.
     En el sitio viejo el mismo PNG se servía dos veces (280 KB + 187 KB) y se
     estiraba con un width en porcentaje. */
  max-height: calc(var(--alto-barra) - 26px);
  width: auto;
}

.lt-marca__texto {
  font-family: var(--fuente-titulo);
  font-weight: var(--peso-titulo);
  font-optical-sizing: auto;
  font-size: 1.15rem;
  letter-spacing: var(--tracking-titulo);
  line-height: 1.1;
  color: var(--marca);
  text-decoration: none;
}

/* Menú ------------------------------------------------------------- */

.lt-nav { order: 1; margin-right: auto; min-width: 0; }

.lt-nav__lista {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  align-items: center;
  gap: 2px;
}

.lt-nav__lista li { position: relative; }

.lt-nav__lista a {
  display: block;
  padding: 8px 10px;
  border-radius: var(--radio-chico);
  color: var(--tinta);
  font-size: var(--fs-chico);
  font-weight: var(--peso-medio);
  text-decoration: none;
  white-space: nowrap;
  transition: color var(--transicion), background-color var(--transicion);
}

.lt-nav__lista a:hover {
  color: var(--marca);
  background: var(--marca-claro);
}

/* La página actual se marca con color Y con una línea: el color solo no basta
   para quien no distingue el azul del negro. El filete es de terracota, que es
   el color de acento de la dirección de arte sobre superficie clara. */
.lt-nav__lista .current-menu-item > a,
.lt-nav__lista .current_page_item > a,
.lt-nav__lista .current-menu-ancestor > a,
.lt-nav__lista .current-menu-parent > a {
  color: var(--marca);
  box-shadow: inset 0 -2px 0 var(--brasa);
}

/* Submenús: se abren también con :focus-within, no solo al pasar el ratón, o
   serían inalcanzables con teclado y en pantalla táctil. */
.lt-nav__lista .sub-menu {
  list-style: none;
  margin: 0;
  padding: var(--e-1);
  position: absolute;
  top: 100%;
  left: 0;
  min-width: 230px;
  display: none;
  background: var(--blanco);
  border: 1px solid var(--linea);
  border-radius: var(--radio-chico);
  box-shadow: var(--sombra-2);
  z-index: 10;
}

.lt-nav__lista li:hover > .sub-menu,
.lt-nav__lista li:focus-within > .sub-menu { display: block; }

.lt-nav__lista .sub-menu a { white-space: normal; }

/* Selector de ciudad ----------------------------------------------- */

.lt-ciudad {
  display: flex;
  align-items: center;
  gap: var(--e-1);
  flex: 0 0 auto;
}

/* Tintado de marca: es el control más importante de la cabecera y tiene que
   distinguirse del buscador de un vistazo. */
.lt-ciudad__caja {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 0 10px;
  border: 1.5px solid var(--marca-borde);
  border-radius: var(--radio-pildora);
  background: var(--marca-claro);
  color: var(--marca);
}

.lt-ciudad__caja:focus-within {
  outline: 3px solid var(--marca);
  outline-offset: 2px;
}

.lt-ciudad__campo {
  appearance: none;
  -webkit-appearance: none;
  border: 0;
  background: transparent;
  padding: 10px 2px;
  max-width: 160px;
  font-family: var(--fuente-texto);
  font-size: var(--fs-chico);
  font-weight: var(--peso-fuerte);
  color: var(--marca);
  cursor: pointer;
}

/* El anillo de foco lo pinta la caja entera con :focus-within: así se ve el
   control completo resaltado y no solo el hueco del texto. */
.lt-ciudad__campo:focus { outline: none; }

.lt-ciudad__flecha { pointer-events: none; }

/* Con JS el desplegable se envía solo; este botón es el respaldo para quien no
   tenga JavaScript, así que solo se oculta cuando consta que sí lo hay. */
.lt-js .lt-ciudad__ir { display: none; }

/* Buscador ---------------------------------------------------------- */

.lt-buscador__etiqueta {
  display: block;
  margin-bottom: var(--e-1);
  font-size: var(--fs-chico);
  font-weight: var(--peso-medio);
}

.lt-buscador__caja {
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 3px 4px 3px 12px;
  border: 1.5px solid var(--linea);
  border-radius: var(--radio-pildora);
  background: var(--blanco);
}

.lt-buscador__caja:focus-within {
  border-color: var(--marca);
  outline: 3px solid var(--marca);
  outline-offset: 2px;
}

.lt-buscador__campo {
  flex: 1 1 auto;
  min-width: 0;
  border: 0;
  background: transparent;
  padding: 8px 0;
  font-family: var(--fuente-texto);
  /* 16px exactos: por debajo de 16px Safari en iPhone hace zoom automático al
     enfocar el campo y descoloca la página entera. */
  font-size: 16px;
  color: var(--tinta);
}

.lt-buscador__campo:focus { outline: none; }
.lt-buscador__campo::placeholder { color: var(--apagado); }

.lt-buscador__boton {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border: 0;
  border-radius: var(--radio-pildora);
  background: var(--marca);
  color: var(--blanco);
  cursor: pointer;
  transition: background-color var(--transicion);
}

.lt-buscador__boton:hover { background: var(--marca-oscuro); }

/* Panel de la cabecera (menú + buscador + CTA) ------------------------------------- */

.lt-cabecera__panel {
  display: flex;
  align-items: center;
  gap: var(--e-2);
  flex: 1 1 auto;
  min-width: 0;
}

/* En escritorio el orden visual es menú → buscador → CTA, pero en el HTML el
   buscador va primero: en el cajón móvil tiene que quedar arriba del todo,
   que es donde lo busca el pulgar. */
.lt-cabecera__buscador { order: 2; flex: 0 1 210px; min-width: 130px; }
.lt-cabecera__cta { order: 3; flex: 0 0 auto; }

.lt-cabecera__panel .lt-buscador__etiqueta.lt-solo-lector { margin: 0; }

/* Conmutador de idioma ---------------------------------------------
 *
 * DOS ENLACES DENTRO DE UNA PASTILLA, no un desplegable. Con dos idiomas, un
 * <select> obliga a dos gestos (abrir y elegir) para una decision binaria, y en
 * movil abre el selector nativo a pantalla completa. Con los dos a la vista se
 * cambia de un toque y ademas se VE en que idioma esta la pagina sin abrir nada.
 *
 * EL ANCHO ESTA CONGELADO A PROPOSITO. «ES» y «EN» miden lo mismo, pero un
 * conmutador que cambia de ancho al pulsarlo desplaza el menu de al lado medio
 * pixel y se nota como un temblor. `min-width` fijo en cada opcion lo evita.
 *
 * En la barra de escritorio ocupa 78px. Se midio contra el hueco real que queda
 * a 1321px —el punto mas apretado donde el conmutador ya vive en la barra— y por
 * eso las opciones son de 11px con poco relleno: es una etiqueta de estado, no
 * un boton de accion, y no debe competir con el CTA de Comunidad.
 */

.lt-idiomas {
  display: inline-flex;
  flex: 0 0 auto;
  align-items: center;
  gap: 2px;
  padding: 3px;
  border: 1px solid var(--linea);
  border-radius: 999px;
  background: #FFF;
}

/*
 * MAS FINO DE LO QUE PARECE QUE SE PUEDE.
 *
 * La primera version se veia «gorda»: una pastilla alta y muy redondeada con un
 * circulo relleno dentro. El problema no era el ancho sino el ALTO —46px en
 * movil— porque estaba dimensionada para cumplir el minimo tactil de 44px con
 * su propio tamano visible.
 *
 * Aqui se separan las dos cosas, que es la unica forma de tener las dos:
 *   · lo que SE VE mide 26px de alto,
 *   · lo que SE PUEDE PULSAR son 44, gracias al ::after invisible de mas abajo.
 *
 * Es la tecnica estandar para controles pequenos en movil, y evita la falsa
 * disyuntiva entre «accesible» y «discreto».
 */
.lt-idiomas__opcion {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 28px;
  min-height: 22px;
  padding: 0 7px;
  border-radius: 999px;
  color: var(--tinta);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .06em;
  line-height: 1;
  text-decoration: none;
  transition: background-color .15s ease, color .15s ease;
}

/*
 * EL AREA DE PULSACION, INVISIBLE Y MAS GRANDE QUE EL BOTON.
 *
 * Se estira hasta 44px de alto centrada sobre la pastilla. No se ve, no ocupa
 * sitio en la maquetacion —es absoluta— y hace que el dedo acierte aunque el
 * control dibujado sea la mitad de alto.
 */
.lt-idiomas__opcion::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  top: 50%;
  height: 44px;
  transform: translateY(-50%);
}

.lt-idiomas__opcion:hover { background: var(--marca-claro); }

/* El activo es el UNICO relleno. Sin un estado marcado, dos etiquetas iguales
   no dicen en que idioma estas: dicen que hay dos idiomas. */
.lt-idiomas__opcion--activo,
.lt-idiomas__opcion--activo:hover {
  background: var(--marca);
  color: #FFF;
}

.lt-idiomas__opcion:focus-visible {
  outline: 2px solid var(--marca);
  outline-offset: 2px;
}

/* Botón hamburguesa ------------------------------------------------- */

.lt-hamburguesa {
  display: none;
  align-items: center;
  justify-content: center;
  /* 44px: el mínimo táctil recomendado. Esta comunidad entra desde el móvil. */
  width: 44px;
  height: 44px;
  flex: 0 0 auto;
  padding: 0;
  background: transparent;
  border: 1.5px solid var(--linea);
  border-radius: var(--radio-chico);
  color: var(--tinta);
  cursor: pointer;
}

.lt-hamburguesa:hover { border-color: var(--marca); color: var(--marca); }

.lt-hamburguesa__barras {
  position: relative;
  display: block;
  width: 20px;
  height: 14px;
}

.lt-hamburguesa__barras span {
  position: absolute;
  left: 0;
  width: 100%;
  height: 2px;
  border-radius: 2px;
  background: currentColor;
  transition: transform var(--transicion), opacity var(--transicion);
}

.lt-hamburguesa__barras span:nth-child(1) { top: 0; }
.lt-hamburguesa__barras span:nth-child(2) { top: 6px; }
.lt-hamburguesa__barras span:nth-child(3) { top: 12px; }

/* El icono se convierte en aspa: el estado abierto se ve, además de anunciarse
   con aria-expanded. */
.lt-hamburguesa[aria-expanded="true"] .lt-hamburguesa__barras span:nth-child(1) { transform: translateY(6px) rotate(45deg); }
.lt-hamburguesa[aria-expanded="true"] .lt-hamburguesa__barras span:nth-child(2) { opacity: 0; }
.lt-hamburguesa[aria-expanded="true"] .lt-hamburguesa__barras span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }

/* Velo -------------------------------------------------------------- */

.lt-velo {
  display: none;
  position: fixed;
  inset: 0;
  z-index: 90;
  /* color-mix mantiene la promesa de «solo tokens»: el velo es la noche del
     sitio al 62%, no un negro inventado. */
  background: color-mix(in srgb, var(--noche) 62%, transparent);
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--transicion);
}

/* ---------------------------------------------------------------- */
/* Móvil y tableta: el panel se convierte en cajón                   */
/* 1320px y no 1140: con 9 elementos de menú, el selector de ciudad, */
/* el buscador y el CTA, la fila se solapaba ya a 1280px (el menú se */
/* metía debajo del botón COMUNIDAD). El corte va donde la fila deja */
/* de caber de verdad, no donde parece razonable.                    */
/* ---------------------------------------------------------------- */

@media (max-width: 1320px) {

  /* --- Base SIN JavaScript: todo apilado y alcanzable --------------
     La cabecera deja de ser fija porque un menú desplegado y fijo taparía la
     pantalla entera, y el botón hamburguesa se esconde porque sin JS no
     abriría nada. */
  body { padding-top: 0; }
  .lt-cabecera { position: static; }

  .lt-cabecera__barra {
    height: auto;
    flex-wrap: wrap;
    padding-block: var(--e-1);
    row-gap: var(--e-1);
  }

  .lt-cabecera__panel {
    flex-basis: 100%;
    flex-direction: column;
    align-items: stretch;
    gap: var(--e-2);
  }

  .lt-nav { order: initial; margin-right: 0; }
  .lt-cabecera__buscador { order: initial; flex: 0 0 auto; }
  .lt-cabecera__cta { order: initial; }

  .lt-nav__lista { flex-direction: column; align-items: stretch; gap: 2px; }

  .lt-nav__lista a {
    /* Objetivo táctil grande y tipografía legible: en el cajón el menú es la
       navegación principal, no un adorno. */
    padding: 13px 12px;
    font-size: var(--fs-texto);
  }

  .lt-nav__lista .sub-menu {
    position: static;
    display: block;
    min-width: 0;
    padding: 0 0 0 var(--e-2);
    border: 0;
    box-shadow: none;
    background: transparent;
  }

  .lt-cabecera__cta .lt-btn { width: 100%; }

  /*
   * EN MOVIL SE QUEDA EN LA BARRA, JUNTO AL SELECTOR DE CIUDAD.
   *
   * Estuvo dentro del cajon y se retiro de ahi: el idioma es el unico control
   * que tiene que encontrar alguien que no entiende el idioma en el que esta la
   * pagina, y detras de la hamburguesa no lo encuentra.
   *
   * Se aprieta todo lo que se puede porque comparte una barra de 360px con el
   * logo, el selector de ciudad y la hamburguesa: pastilla sin relleno propio y
   * letra de 10px. Sigue siendo legible porque son dos letras en mayuscula con
   * espaciado, no una palabra.
   */
  .lt-idiomas {
    padding: 2px;
    gap: 0;

    /* EL `order` HAY QUE DEVOLVERLO A CERO AQUI, Y ES FACIL NO VERLO.
       En la barra de escritorio las piezas del panel se recolocan con `order`
       (buscador 2, CTA 3, idioma 4) porque el orden del HTML esta pensado para
       el cajon, no para la barra. Este bloque devuelve a `initial` el de los
       otros dos... y si el del idioma no se devuelve tambien, se queda en 4 y
       cae DEBAJO del boton de Comunidad: el idioma acaba siendo lo ultimo del
       cajon, por debajo del cierre. Con todos en cero manda el orden del HTML,
       que ya es el correcto: buscador, menu, idioma, CTA. */
    order: initial;
  }

  /* En movil se ve UN PELO mas grande que en escritorio —26px contra 22— porque
     aqui no hay puntero fino que ayude a leer dos letras de 10px. El area
     pulsable sigue siendo de 44px por el ::after, asi que crecer del todo no
     hace falta. */
  .lt-idiomas__opcion {
    min-width: 30px;
    min-height: 26px;
    padding: 0 8px;
    font-size: 11px;
  }

  /*
   * LA HAMBURGUESA, PEGADA AL BORDE DERECHO.
   *
   * `margin-left: auto` se come todo el espacio sobrante de la fila y lo pone
   * ANTES del boton, asi que el boton queda contra el margen pase lo que pase
   * con el ancho de lo que tiene a la izquierda. Es mas robusto que repartir el
   * hueco con `justify-content: space-between`, que ademas separaria tambien el
   * logo del selector de ciudad, y esos dos tienen que ir juntos.
   */
  .lt-js .lt-hamburguesa { margin-left: auto; }

  /* --- Con JavaScript: cajón lateral ------------------------------- */

  .lt-js body { padding-top: var(--alto-cabecera); }
  .lt-js .lt-cabecera { position: fixed; }

  .lt-js .lt-cabecera__barra {
    height: var(--alto-barra);
    flex-wrap: nowrap;
    padding-block: 0;
  }

  .lt-js .lt-hamburguesa { display: inline-flex; }

  .lt-js .lt-cabecera__panel {
    position: fixed;
    top: calc(var(--alto-cabecera) + var(--desplazamiento-barra));
    right: 0;
    bottom: 0;

    /*
     * EL ALTO VA EXPLICITO, Y NO SE PUEDE VOLVER A `bottom: 0` A SECAS.
     *
     * El cajon medía 72px de alto —la altura de la cabecera— y recortaba el
     * menu entero: se veia el buscador y nada mas. La causa no esta en esta
     * regla sino a 500 lineas de aqui: `.lt-cabecera` lleva `backdrop-filter`
     * para el efecto de cristal esmerilado, y un elemento con backdrop-filter
     * se convierte en BLOQUE CONTENEDOR de sus descendientes `position: fixed`.
     * El cajon vive dentro de la cabecera, asi que su `bottom: 0` dejo de
     * significar «el fondo de la pantalla» y paso a significar «el fondo de la
     * cabecera».
     *
     * Es el mismo mecanismo que `transform`, y es la trampa clasica: el fallo
     * no se ve al escribir el CSS del cajon porque la causa esta en el CSS de
     * otro elemento, y desaparece en cuanto se prueba en un navegador sin
     * backdrop-filter.
     *
     * Con un alto explicito el cajon mide lo que debe medir sea cual sea su
     * bloque contenedor. `bottom: 0` se deja puesto de respaldo: cuando top,
     * bottom y height estan los tres, el navegador ignora bottom, asi que no
     * estorba y cubre el caso de que `dvh` no se soporte.
     *
     * `dvh` y no `vh`: en movil, `100vh` cuenta la barra de direcciones del
     * navegador como si no existiera, asi que el ultimo elemento del menu queda
     * debajo de ella y no se puede pulsar. `dvh` mide el hueco REAL.
     */
    height: calc(100vh - var(--alto-cabecera) - var(--desplazamiento-barra));
    height: calc(100dvh - var(--alto-cabecera) - var(--desplazamiento-barra));

    width: min(360px, 88vw);
    flex-basis: auto;
    gap: var(--e-3);
    padding: var(--e-3) var(--canal) var(--e-5);
    overflow-y: auto;
    /* El cajón es OPACO aunque la cabecera sea translúcida: detrás de él pasa
       la página entera, y un menú translúcido sobre una fotografía es
       exactamente el error de contraste que el sitio viejo tenía en el hero. */
    background: var(--blanco);
    border-left: 1px solid var(--linea);
    box-shadow: var(--sombra-2);
    z-index: 95;
    /* Cerrado: fuera de pantalla Y con visibility:hidden, para que el teclado
       no pueda tabular hasta unos enlaces que nadie ve. */
    transform: translateX(100%);
    visibility: hidden;
    transition: transform var(--transicion), visibility var(--transicion);
  }

  .lt-js .lt-cabecera__panel[data-abierto="true"] {
    transform: none;
    visibility: visible;
  }

  .lt-js .lt-velo { display: block; }
  .lt-js .lt-velo[data-abierto="true"] { opacity: 1; pointer-events: auto; }

  /* El selector de ciudad se queda SIEMPRE en la barra, nunca dentro del
     cajón: es el filtro que define toda la sesión y esconderlo detrás de dos
     toques lo convertiría en una función que nadie usa. */
  .lt-js .lt-ciudad__campo { max-width: 108px; }
  .lt-js .lt-marca .custom-logo,
  .lt-js .lt-marca img { max-height: calc(var(--alto-barra) - 22px); }
}

/*
 * EN MÓVIL, «TODO TEXAS» NO SE ESCRIBE: SE QUEDA EL ALFILER SOLO. 2026-08-15.
 *
 * Lo pidió el dueño: «en el header no debe aparecer Todo Texas, sino únicamente
 * el cosito de ubicación en celular, para que no se dañe el diseño».
 *
 * Y tiene razón en el diagnóstico: en la barra conviven marca, ciudad y menú, y
 * «Todo Texas» es la etiqueta más larga que puede salir ahí. A 390px empujaba al
 * logo hasta recortarlo.
 *
 * PERO SOLO SE ESCONDE CUANDO ES «TODO TEXAS». Si la persona eligió Austin, el
 * nombre SÍ se escribe. Esconderlo siempre dejaría al visitante navegando un
 * sitio filtrado por una ciudad, sin ninguna pista en pantalla de cuál es —y esa
 * es una forma silenciosa de que alguien crea que el directorio entero tiene
 * cuatro negocios—. La opción por defecto no informa de nada; una ciudad elegida
 * sí, y por eso se tratan distinto.
 *
 * CÓMO: el `<select>` sigue existiendo y sigue siendo pulsable —se estira
 * invisible por encima del alfiler—, así que tocar el icono abre la lista nativa
 * igual que antes. No se esconde con `display:none`, que lo dejaría muerto.
 *
 * `:has()` es lo que permite preguntar «¿está elegida la opción vacía?» sin una
 * línea de JavaScript. Si algún navegador viejo no lo entiende, no aplica nada y
 * se ve exactamente como se veía hasta hoy: se degrada al comportamiento
 * anterior, no a uno roto.
 */
@media (max-width: 768px) {
  /*
   * SE APUNTA AL BOTON, NO AL <select>. Medido el 2026-08-15 con la pagina
   * delante: assets/js/selector-ciudad.js sustituye el desplegable nativo por un
   * boton propio con un <span class="lt-ciudad__valor"> dentro, y deja el
   * <select> reducido a 1x1 e invisible. La primera version de esta regla
   * escondia ese <select> —que ya estaba escondido— y en pantalla no cambiaba
   * absolutamente nada: la caja seguia midiendo 151px.
   *
   * El <select> sigue sirviendo para UNA cosa: saber que hay elegido. La JS lo
   * mantiene sincronizado porque es lo que se envia al filtrar, asi que
   * preguntarle con :has() sigue siendo la forma de distinguir «Todo Texas» de
   * una ciudad de verdad sin tocar una linea de JavaScript.
   */
  /*
   * El ancla del botón estirado. Va SOLO en el caso recogido —no a la caja
   * siempre— porque `.lt-ciudad--propio` ya es el ancla del panel de ciudades y
   * convertir la caja en ancla en todos los casos movería ese panel.
   */
  .lt-ciudad__caja:has(.lt-ciudad__campo option[value=""]:checked) {
    position: relative;
    gap: 0;
    padding: 0 9px;
  }

  /* El texto y la flecha se van; el alfiler se queda. */
  .lt-ciudad__caja:has(.lt-ciudad__campo option[value=""]:checked) .lt-ciudad__valor,
  .lt-ciudad__caja:has(.lt-ciudad__campo option[value=""]:checked) .lt-ciudad__boton::after {
    display: none;
  }

  /*
   * Y el boton se estira invisible por encima de todo el pildoro para que el
   * dedo siga encontrandolo. Sin esto, al quitarle el texto el boton se queda
   * con cero ancho y el alfiler —que es hermano suyo, no hijo— deja de abrir
   * nada: se veria un icono bonito que no hace caso.
   */
  .lt-ciudad__caja:has(.lt-ciudad__campo option[value=""]:checked) .lt-ciudad__boton {
    position: absolute;
    /*
     * SE SALE UNOS PIXELES POR FUERA A PROPOSITO. El pildoro recogido mide 28px
     * de alto, y un boton de 28px es la mitad de lo que necesita un pulgar: la
     * guia son 44. Como el boton es invisible, estirarlo por fuera del pildoro
     * da superficie de toque sin cambiar ni un pixel de lo que se ve.
     *
     * Medido despues: 44x36. Sigue por debajo de los 44 de alto que pide la
     * guia, y no se estira mas a proposito: el pildoro tiene el logo a un lado
     * y el menu al otro, y un area invisible mas grande empezaria a robarles
     * toques a ellos. 36 contra los 18 de partida ya es la diferencia entre
     * fallar el toque y no fallarlo.
     */
    inset: -9px -4px;
    width: auto;
    padding: 0;
    gap: 0;
  }
}

/*
 * EL IPHONE DEJA DE HACER ZOOM AL TOCAR UN CAMPO. 2026-08-15.
 *
 * Lo pidio el dueno: «hay algun iPhone que cuando se le da click a un input se
 * acerca asi como un mini zoom, no quiero que eso este activo».
 *
 * LA CAUSA NO ES UN AJUSTE, ES EL TAMANO DE LETRA. Safari en iOS acerca la
 * pagina automaticamente cuando enfocas un campo cuya letra mide MENOS de 16px,
 * para que se pueda leer lo que se escribe. Es una ayuda de accesibilidad, no
 * un fallo. Con la letra a 16 o mas, no acerca nada.
 *
 * MEDIDO el 2026-08-15: en /publicar-en-marketplace/ habia 11 campos de 12 por
 * debajo del limite (la mayoria a 13,3px). O sea: casi cada toque en ese
 * formulario daba un salto de zoom.
 *
 * LO QUE NO SE HACE, Y ES IMPORTANTE: no se toca la etiqueta `viewport` con
 * `user-scalable=no` ni `maximum-scale=1`, que es la receta que circula por
 * ahi. Eso apaga el zoom de TODA la pagina —incluido el que hace a mano quien
 * no ve bien— y ademas iOS lleva desde la version 10 ignorandolo. Se arregla la
 * causa, no se tapa el sintoma.
 *
 * `pointer: coarse` y no un ancho: pregunta si se navega con el dedo, que es
 * cuando pasa esto. Un iPad de 1024px tambien hace zoom y por ancho se
 * escaparia.
 */
@media (pointer: coarse) {
  input:not([type="checkbox"]):not([type="radio"]):not([type="range"]),
  select,
  textarea {
    font-size: 16px;
  }
}

/* Con el cajón abierto la página de detrás no debe moverse. */
body.lt-bloqueado { overflow: hidden; }

/*
 * Teléfonos estrechos (360px reales). En la barra conviven tres piezas que no
 * se pueden esconder: marca, ciudad y menú. Se encogen en este orden —logo,
 * luego ancho del selector— para que ninguna se salga ni empuje a las demás.
 */
@media (max-width: 480px) {
  .lt-cabecera__barra { gap: var(--e-1); }

  .lt-marca { min-width: 0; overflow: hidden; }
  .lt-marca__texto {
    font-size: 1rem;
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .lt-js .lt-marca .custom-logo,
  .lt-js .lt-marca img { max-height: 34px; }

  .lt-js .lt-ciudad__campo {
    max-width: 92px;
    font-size: var(--fs-etiqueta);
  }
  .lt-ciudad__caja { padding: 0 8px; }

  .lt-pie__barra { flex-direction: column; align-items: start; }
}

/* ---------------------------------------------------------------- */
/* Cromo de listados (index.php y 404.php)                           */
/* ---------------------------------------------------------------- */

.lt-cabeza-archivo { margin-bottom: var(--e-5); max-width: 760px; }
.lt-cabeza-archivo h1 { margin-bottom: var(--e-2); }
.lt-cabeza-archivo__texto { color: var(--apagado); font-size: 1.05rem; }
.lt-cabeza-archivo p:last-child { margin-bottom: 0; }

.lt-vacio {
  max-width: 620px;
  padding: var(--e-5) 0;
}
.lt-vacio .lt-buscador { margin-block: var(--e-3); }

.lt-paginacion { margin-top: var(--e-5); }

.lt-paginacion .nav-links,
.lt-paginacion__lista {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--e-1);
  list-style: none;
  margin: 0;
  padding: 0;
}

.lt-paginacion .page-numbers {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  /* 44px de lado: en móvil se pulsa con el pulgar, no con un ratón. */
  min-width: 44px;
  min-height: 44px;
  padding: 0 14px;
  border: 1px solid var(--linea);
  border-radius: var(--radio-chico);
  color: var(--tinta);
  font-size: var(--fs-chico);
  font-weight: var(--peso-medio);
  text-decoration: none;
  transition: background-color var(--transicion), border-color var(--transicion), color var(--transicion);
}

.lt-paginacion a.page-numbers:hover {
  border-color: var(--marca);
  background: var(--marca-claro);
  color: var(--marca);
}

.lt-paginacion .page-numbers.current {
  background: var(--marca);
  border-color: var(--marca);
  color: var(--blanco);
}

.lt-paginacion .page-numbers.dots { border-color: transparent; }

/* Página 404 --------------------------------------------------------- */

.lt-404__texto { max-width: 60ch; color: var(--apagado); }
.lt-404__buscador { margin-top: var(--e-3); max-width: 520px; }
.lt-404__titulo { font-size: var(--fs-h3); margin-bottom: var(--e-3); }
.lt-404__volver { margin-top: var(--e-5); }

/* Acceso rápido: la misma tarjeta del resto del sitio, solo que sin pieza
   visual — aquí la tarjeta es un destino de navegación, no una ficha. */
.lt-tarjeta--acceso .lt-tarjeta__media { display: none; }
.lt-tarjeta--acceso .lt-tarjeta__cuerpo {
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
  padding: var(--e-3);
}
.lt-tarjeta--acceso .lt-tarjeta__titulo { font-size: var(--fs-h4); }

/* ---------------------------------------------------------------- */
/* Pie                                                               */
/* ---------------------------------------------------------------- */

/*
 * EL PIE ES NEGRO. Lo pidió el dueño el 2026-08-15: «quiero que el footer sea
 * negro». Antes era el azul noche del sitio con un halo azul de marca encima,
 * y ese halo era lo que de verdad se veía: la esquina superior izquierda salía
 * francamente azul, no oscura.
 *
 * Usa el token `--negro`, el mismo que la banda del localizador de ICE. Un solo
 * negro con un solo rol: lo que no es el sitio hablando de sí mismo.
 */
.lt-pie {
  position: relative;
  background: var(--negro);
  color: var(--blanco);
  padding-block: var(--seccion-y) var(--e-4);
  /* Los separadores del pie se invierten solos, igual que en las bandas
     oscuras de base.css. */
  --linea: var(--linea-honda);
  overflow: hidden;
}

/*
 * EL HALO SE QUEDA, PERO DEJA DE SER AZUL.
 *
 * Estaba puesto para que el pie no fuera un rectángulo plano, y ese argumento
 * sigue siendo bueno: una banda negra de 600px de alto sin un solo gradiente se
 * ve como un error de carga. Lo que cambia es el color — blanco al 5% en vez de
 * azul de marca al 55% —, y a esa fuerza no aporta tinte: solo levanta la
 * esquina lo justo para que se note que hay una superficie.
 *
 * Medido: la esquina más clara del pie queda en #14151A, que sigue leyéndose
 * como negro y deja el texto blanco en 17,6:1.
 */
.lt-pie::before {
  content: '';
  position: absolute;
  top: -220px;
  left: -120px;
  width: 620px;
  height: 620px;
  border-radius: 50%;
  background: radial-gradient(circle, rgb(255 255 255 / .05) 0%, transparent 68%);
  pointer-events: none;
}

.lt-pie > * { position: relative; }

.lt-pie__rejilla {
  /* La columna de marca y la de contacto pesan más: llevan el logo, la
     descripción y cuatro datos con icono. */
  grid-template-columns: 1.5fr 1fr 1.4fr 1.1fr;
  gap: var(--e-5) var(--e-4);
}

@media (max-width: 1024px) {
  .lt-pie__rejilla { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
  .lt-pie__rejilla { grid-template-columns: 1fr; gap: var(--e-4); }
}

.lt-pie__titulo {
  font-family: var(--fuente-texto);
  font-size: var(--fs-etiqueta);
  font-weight: var(--peso-fuerte);
  letter-spacing: var(--tracking-etiqueta);
  text-transform: uppercase;
  /* Sobre fondo oscuro, el gris de texto del sitio no llega al contraste
     mínimo: se usa el ámbar de marca, que da 9.7:1. */
  color: var(--acento);
  margin-bottom: var(--e-3);
}

/* EL LOGO GRANDE. En el pie no compite con nada: es la firma de la pieza, y a
   56px se veía como una miniatura olvidada. */
/*
 * EL LOGO DEL PIE VA SUELTO, SIN CAJA BLANCA. LO PIDIÓ EL DUEÑO.
 *
 * Aquí había un fondo blanco con esquinas redondeadas y 16 px de relleno. El
 * motivo era razonable sobre el papel: muchos logotipos vienen en tinta oscura
 * y sobre el azul noche del pie desaparecerían, así que la caja blanca los
 * rescataba sin obligar a subir una segunda versión.
 *
 * Pero ESTE logotipo no lo necesita: es un PNG con transparencia y con su
 * propio marco claro dibujado dentro, así que la caja le añadía un segundo
 * marco. Se veía como una pegatina pegada encima del pie.
 *
 * El respaldo no se pierde del todo: si algún día se sube un logotipo en tinta
 * oscura y se pierde sobre el fondo, la solución es subir la versión en blanco
 * —que es lo correcto— y no envolverlo en un recuadro.
 *
 * Y MÁS GRANDE: de 92 a 132 px de alto, también a petición. Es el ancla visual
 * de la marca al final de la página y a 92 px competía de tú a tú con los
 * títulos de las columnas de al lado.
 */
.lt-pie__logo .custom-logo,
.lt-pie__logo img {
  max-height: 132px;
  width: auto;
  background: none;
  padding: 0;
  border-radius: 0;
}

/* En pantallas estrechas el logo baja a 104: a 132 px se comía la primera
   pantalla del pie antes de que se leyera un solo enlace. */
@media (max-width: 640px) {
  .lt-pie__logo .custom-logo,
  .lt-pie__logo img {
    max-height: 104px;
  }
}

.lt-pie__marca-texto {
  font-family: var(--fuente-titulo);
  font-weight: var(--peso-titulo);
  font-optical-sizing: auto;
  font-size: clamp(1.6rem, 3vw, 2.2rem);
  letter-spacing: var(--tracking-titulo);
  line-height: 1.1;
  color: var(--blanco);
  text-decoration: none;
  display: inline-block;
}

.lt-pie__descripcion {
  color: var(--niebla);
  font-size: var(--fs-chico);
  max-width: 42ch;
  margin-top: var(--e-2);
}

.lt-pie a { color: var(--blanco); text-decoration: none; }
/* El hover subraya en vez de cambiar de color: el ámbar está reservado a lo
   patrocinado y ningún otro elemento puede apropiárselo. */
.lt-pie a:hover { color: var(--blanco); text-decoration: underline; }

.lt-pie__lista { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--e-1); }
.lt-pie__lista a { display: inline-block; padding: 4px 0; font-size: var(--fs-chico); }

.lt-pie__contacto { font-style: normal; display: grid; gap: var(--e-2); }

.lt-pie__dato {
  display: flex;
  align-items: start;
  gap: var(--e-1);
  margin: 0;
  font-size: var(--fs-chico);
  color: var(--niebla);
}
.lt-pie__dato a {
  color: var(--blanco);
  /*
   * 44px DE ALTO PARA EL DEDO. Medido en la revision general del 2026-08-26:
   * el telefono y el correo del pie median 23px. Se consigue con relleno, no
   * agrandando la letra: se ven igual y se tocan bien.
   *
   * `inline-block` y no `block`: en bloque ocuparian toda la linea y una
   * direccion de dos lineas se separaria del resto del bloque.
   */
  display: inline-block;
  padding: 11px 0;
  line-height: 22px;
}

/* Sin el relleno el parrafo del pie crece 22px por enlace y descuadra las tres
   columnas entre si. Se le devuelve lo que suman los enlaces. */
.lt-pie__dato:has(a) { margin-top: -11px; }
.lt-pie__dato .lt-icono { margin-top: 3px; color: var(--cielo); }

.lt-pie__acciones {
  display: flex;
  flex-wrap: wrap;
  gap: var(--e-1);
  margin-top: var(--e-3);
}
/* Los botones del pie no heredan el subrayado de los enlaces del pie. */
.lt-pie__acciones a:hover { text-decoration: none; }

.lt-pie__redes {
  list-style: none;
  margin: var(--e-2) 0 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: var(--e-1);
}

.lt-pie__red {
  display: inline-flex;
  align-items: center;
  min-height: 44px;   /* objetivo táctil: el pie se pulsa con el pulgar */
  padding: 8px 16px;
  border: 1.5px solid var(--noche-borde);
  border-radius: var(--radio-pildora);
  font-size: var(--fs-chico);
  font-weight: var(--peso-medio);
  transition: background-color var(--transicion), color var(--transicion), border-color var(--transicion);
}
.lt-pie__red:hover {
  background: var(--blanco);
  color: var(--noche);
  text-decoration: none;
}

/* Los dos canales van en el AZUL del sitio, no en el color de cada plataforma.
   El verde de WhatsApp está prohibido por marca, y el azul de Telegram era otra
   marca ajena. Se distinguen por el nombre, que es lo que de verdad lee el
   vecino. Tinta oscura encima: sobre este azul el blanco daría 2,63:1. */

/*
 * EL SELECTOR LLEVA `a` A PROPÓSITO, Y NO ES ADORNO.
 *
 * Este arreglo ya estaba escrito —el comentario de arriba incluso nombra el
 * 2,63:1 que se quería evitar— pero NO SE APLICABA. Unas sesenta líneas más
 * arriba está `.lt-pie a { color: var(--blanco); }`, que es UNA CLASE MÁS UN
 * TIPO y por tanto más específico que `.lt-pie__red--whatsapp`, que es una
 * clase sola. Ganaba el blanco y los dos botones quedaban exactamente en el
 * 2,63:1 que el comentario decía estar evitando.
 *
 * Se midió en pantalla: «Canal de WhatsApp» 2,63:1 y «Grupo de Telegram»
 * 2,63:1, mientras Instagram, TikTok, YouTube y Facebook —que no tienen fondo
 * propio— iban a 18,62:1.
 *
 * Es el fallo más difícil de ver de todos: el CSS parece correcto leyéndolo, y
 * solo se cae al medir el color que el navegador aplica de verdad.
 *
 * Añadiendo `a` al selector queda en dos clases más un tipo y gana. No se usa
 * !important: la cascada bien escrita basta.
 */
.lt-pie a.lt-pie__red--whatsapp {
  background: var(--whatsapp);
  border-color: var(--whatsapp);
  color: var(--noche);
}
.lt-pie a.lt-pie__red--whatsapp:hover { background: var(--blanco); border-color: var(--blanco); color: var(--noche); }

.lt-pie a.lt-pie__red--telegram {
  background: var(--telegram);
  border-color: var(--telegram);
  color: var(--noche);
}
.lt-pie a.lt-pie__red--telegram:hover { background: var(--blanco); border-color: var(--blanco); color: var(--noche); }

/*
 * Y EL BOTÓN DE WHATSAPP DEL BLOQUE DE CONTACTO, POR LO MISMO.
 *
 * `.lt-btn--whatsapp` (base.css) ya pone tinta sobre el azul y en el resto del
 * sitio da 7,11:1 —se comprobó en las fichas del directorio—. Dentro del pie lo
 * pisaba el mismo `.lt-pie a` y caía a 2,63:1. El botón «Llamar», que usa el
 * azul oscuro de marca, no se veía afectado: iba y sigue yendo a 7,92:1.
 */
.lt-pie a.lt-btn--whatsapp { color: var(--tinta); }
.lt-pie a.lt-btn--whatsapp:hover { color: var(--tinta); }

/* Barra inferior ----------------------------------------------------- */

.lt-pie__barra {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--e-2);
  margin-top: var(--e-6);
  padding-top: var(--e-3);
  border-top: 1px solid var(--linea-honda);
}

.lt-pie__copy {
  margin: 0;
  font-size: var(--fs-etiqueta);
  color: var(--niebla);
}

/*
 * El credito del desarrollador. Mas callado que el copyright: es informacion de
 * quien hizo el sitio, no del sitio. Si pesara igual competiria con el nombre
 * del cliente en su propia pagina.
 */
.lt-pie__autoria {
  margin: 4px 0 0;
  font-size: var(--fs-etiqueta);
  color: var(--niebla);
  opacity: .62;
}

.lt-pie__legal {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: var(--e-1) var(--e-3);
  font-size: var(--fs-etiqueta);
}

/* ------------------------------------------------------------------ */
/* Corrección de cabecera en escritorio                                */
/*                                                                     */
/* La barra llevaba nueve enlaces de menú MÁS el selector de ciudad,   */
/* el buscador y el botón «Comunidad». No cabía ni a 1440px: el menú   */
/* se montaba encima del botón y el buscador flotaba sobre el hero.    */
/*                                                                     */
/* Se retira el buscador de la barra en escritorio en vez de encoger   */
/* la tipografía del menú, porque la búsqueda ya está dos veces en la  */
/* página: el campo grande del hero («¿Qué necesitas encontrar hoy?»)  */
/* y el filtro propio de cada listado. Era el elemento más redundante  */
/* y el que más ancho ocupaba (210px). En móvil sigue dentro del cajón,*/
/* donde sí es el único acceso a la búsqueda.                          */
/* ------------------------------------------------------------------ */

@media (min-width: 1321px) {
  .lt-cabecera__buscador { display: none; }
  /*
   * EL MARGEN QUE SEPARA EL MENU DEL CTA: --e-1 (8px), no --e-3 (24px).
   *
   * Medido, no ajustado a ojo: con --e-3 la lista del menu necesitaba 722px y
   * solo tenia 711, once enlaces en ingles que se quedaban a 10px de caber. El
   * ultimo —«Community»— salia cortado a media palabra.
   *
   * Los 16px que se recuperan salen de aqui y no del menu porque este margen
   * es redundante: `.lt-cabecera__panel` ya tiene `gap: var(--e-2)` entre sus hijos, asi
   * que entre el menu y el boton hay 16px de separacion aunque este margen
   * valga cero. Bajarlo a 8 deja 24px reales de aire, que es mas que suficiente,
   * y devuelve el ancho justo donde hacia falta.
   */
  .lt-nav { margin-right: var(--e-1); }

  /*
   * EL CONMUTADOR, EL ÚLTIMO DE LA BARRA.
   *
   * En el HTML va justo detrás del selector de ciudad porque ese es el orden que
   * necesita el móvil. Aquí se manda al final con `order`, que es exactamente
   * para lo que sirve: cambiar el orden VISUAL sin tocar el del documento —el
   * que siguen el teclado y el lector de pantalla—.
   *
   * El 5 es simplemente mayor que el de cualquier otro hijo de la barra; no hay
   * ningún 4 al que suceda.
   */
  .lt-idiomas { order: 5; }

  /*
   * HOLGURA PARA EL MENU. Tras recuperar el margen, la lista cabia con CERO
   * pixeles de sobra: exacto hoy y roto manana, en cuanto el dueno anada una
   * entrada al menu o alguien alargue una traduccion. Un ajuste que solo
   * funciona con los datos exactos de hoy no es un ajuste, es una casualidad.
   *
   * El colchon sale del hueco ENTRE las piezas de la barra: cuatro huecos de
   * 16px son 64px, y con 8px la cabecera sigue respirando —el logo, el selector
   * y el boton tienen su propio relleno interno— mientras devuelve 32px al
   * menu, que es el unico que iba justo.
   *
   * Se probo antes recortar el selector de ciudad y no servia de nada: su ancho
   * no lo marca el texto sino el icono del pin y la flecha, asi que bajarle el
   * max-width al campo no movia ni un pixel el ancho del conjunto.
   */
  .lt-cabecera__barra { gap: var(--e-1); }
}

/*
 * EL MENÚ APRETADO EN TODO EL ESCRITORIO, NO SOLO HASTA 1520px.
 *
 * Este bloque decía `and (max-width: 1520px)` y ese tope era el fallo: hacía
 * pensar que por encima de 1520 sobra sitio, y no sobra. `.lt-contenedor` tiene
 * `max-width: 1240px`, así que el ancho REAL de la barra es el mismo en una
 * pantalla de 1521px que en una de 2560 — el contenedor deja de crecer y el
 * resto es margen. El ajuste se apagaba justo donde seguía haciendo falta.
 *
 * El sintoma era el CTA de Comunidad montado ENCIMA del último enlace del menú.
 * Que se montara y no empujara tiene su propia explicación: `.lt-nav__lista` es
 * un contenedor flex cuyos elementos no encogen, así que se desborda de su
 * padre en vez de comprimirse, y lo que se desborda no ocupa sitio para el
 * hermano de al lado. Por eso se ven superpuestos en vez de apretados.
 *
 * Se aprieta el espaciado horizontal en lugar del tamaño de letra: bajar de
 * 14px haría el menú incómodo de leer, mientras que recortar el relleno lateral
 * no cuesta legibilidad y recupera unos 60px.
 */
@media (min-width: 1321px) {
  .lt-nav__lista { gap: 0; }
  .lt-nav__lista a { padding-inline: 6px; }

  /*
   * El conmutador añade unos 70px a una barra que ya iba justa. Se recupera ese
   * ancho de donde no cuesta nada: apretando la propia pastilla de idioma. El
   * menú NO se toca más — ya está en su mínimo legible y seguir recortándolo es
   * lo que acaba partiendo «Videos y podcasts» en dos líneas.
   */
  .lt-idiomas { padding: 2px; }
  .lt-idiomas__opcion { min-width: 28px; padding: 0 6px; }

  /*
   * Y EL SEGURO: si aun así no cupiera —un menú con un enlace más, una
   * traducción más larga— el menú se comprime y recorta con puntos suspensivos
   * en vez de invadir al botón. `min-width: 0` es lo que le permite encoger:
   * sin él, un elemento flex se niega a bajar del ancho de su contenido, que es
   * la causa raíz del solape.
   */
  .lt-nav__lista { min-width: 0; overflow: hidden; }

  /*
   * ...Y EL SEGURO SE LEVANTA EN CUANTO HAY UN SUBMENU ABIERTO.
   *
   * ESTE ERA EL FALLO, medido el 2026-08-09: el `overflow: hidden` de arriba
   * —puesto para que el menu se recorte en vez de invadir el boton— recortaba
   * TAMBIEN los desplegables. El submenu se pintaba perfectamente (220x96 px,
   * fondo blanco, z-index 20) 96 px por debajo de una lista de 40 px de alto,
   * y el navegador lo cortaba entero. El guion funcionaba, la clase se
   * aplicaba, el hover disparaba... y en pantalla no aparecia nada.
   *
   * `overflow` no se puede recortar en un eje y dejar el otro visible: en
   * cuanto uno de los dos vale `hidden`, el otro se comporta como `auto`. Asi
   * que no hay forma de recortar a lo ancho y dejar salir a lo alto.
   *
   * La solucion es temporal en vez de espacial: el recorte solo hace falta EN
   * REPOSO, que es cuando el menu podria desbordar por ancho. En el instante en
   * que alguien pasa el raton, tabula dentro o abre con la flecha, el recorte
   * se levanta. El caso raro (un menu tan largo que no cabe) sigue cubierto
   * mientras nadie lo toca, que es cuando se veria feo; y el caso de todos los
   * dias —abrir un desplegable— funciona.
   */
  .lt-nav__lista:hover,
  .lt-nav__lista:focus-within,
  .lt-nav__lista:has(.lt-nav--abierto) { overflow: visible; }
}

/* ------------------------------------------------------------------ */
/* Boton flotante de contacto (WhatsApp)                              */
/* ------------------------------------------------------------------ */

/*
 * Ver inc/contacto.php. Es un enlace a wa.me, no un widget de chat: pesa cero,
 * funciona sin JavaScript y no manda datos de los visitantes a terceros.
 *
 * ABAJO A LA DERECHA porque es donde lo busca todo el mundo —es la posicion que
 * han fijado veinte anos de burbujas de chat— y porque en un movil sujetado con
 * una mano cae bajo el pulgar. A la izquierda competiria con el gesto de
 * «atras» de Android y de iOS.
 */

/*
 * LAS MEDIDAS DE LA ESQUINA FLOTANTE, EN UN SOLO SITIO
 * --------------------------------------------------------------------
 * En esa esquina se apilan dos botones —WhatsApp abajo y donaciones
 * encima— y en la portada hay un tercero en la esquina de enfrente. Los
 * tres se dibujaban con las mismas medidas ESCRITAS A MANO en tres
 * archivos, y el 2026-09-10 paso lo que tenia que pasar: el de
 * donaciones se quedo en 44 px de ancho cuando el de WhatsApp pasa a 56
 * en movil, y encima no seguia al de WhatsApp cuando este se recoloca
 * por el area segura del iPhone o por la barra de acciones de las
 * fichas. Resultado en un movil: pegados y descuadrados.
 *
 * Ahora hay cuatro valores y viven aqui, que es la hoja que se carga en
 * TODAS las paginas. Quien quiera moverse con ellos los usa; quien los
 * cambie, los mueve a todos a la vez.
 *
 *   --flota-lado    separacion del borde lateral
 *   --flota-abajo   separacion del suelo, area segura incluida
 *   --flota-alto    el alto de un boton (y el ancho, cuando es redondo)
 *   --flota-hueco   el aire entre dos botones apilados
 */
:root {
  --flota-lado:  clamp(16px, 2.5vw, 34px);
  --flota-abajo: clamp(16px, 2.5vw, 34px);
  --flota-alto:  52px;
  --flota-hueco: 14px;
}

/* Por debajo de 640 la pastilla de WhatsApp se vuelve un circulo mas
   grande; todo lo que se apile encima tiene que crecer con ella. */
@media (max-width: 640px) {
  :root { --flota-alto: 56px; }
}

/* El indicador de gestos del iPhone se come la franja de abajo. */
@supports (padding: env(safe-area-inset-bottom)) {
  :root { --flota-abajo: calc(var(--canal) + env(safe-area-inset-bottom, 0px)); }
}

/*
 * LAS BARRAS FIJAS DE LAS FICHAS.
 *
 * Tres plantillas pintan en movil una barra de acciones anclada abajo y a
 * todo el ancho: la ficha de negocio, la de ayuda y la de evento. Los
 * botones flotantes caerian justo encima de sus botones —«Llamar», «Como
 * llegar»— que son exactamente los que esas paginas existen para ofrecer.
 *
 * 80px es el alto de esas barras (boton de 44 mas relleno) mas el aire.
 *
 * Se listan las tres clases del <body> en vez de usar
 * `:has(.lt-negocio-barra)` a proposito: `:has()` no existe en las WebView
 * antiguas de Android que esta comunidad todavia usa, y ahi los botones
 * volverian a tapar la barra sin que nadie se entere.
 */
@media (max-width: 900px) {
  .single-lt_negocio,
  .single-lt_ayuda,
  .single-lt_evento {
    --flota-abajo: calc(80px + env(safe-area-inset-bottom, 0px));
  }
}

.lt-flotante {
  position: fixed;
  /* Mas separado del borde que el resto de piezas: `--canal` lo pegaba a la
     esquina y un elemento flotante tiene que verse SUELTO, no encajado. */
  right: var(--flota-lado);
  bottom: var(--flota-abajo);
  z-index: 90;

  display: inline-flex;
  align-items: center;
  gap: 8px;
  height: var(--flota-alto);
  padding: 0 18px 0 14px;
  border-radius: 999px;

  /* El verde es el de WhatsApp y NO entra en la paleta del sitio: es el color
     de una marca ajena, igual que el azul de Facebook en un boton de compartir.
     Es la unica excepcion a la regla de «solo azul, blanco y negro», y existe
     porque un boton de WhatsApp en otro color deja de reconocerse de un
     vistazo, que es justo lo que lo hace util. */
  background: #25D366;

  /*
   * BLANCO SOBRE EL VERDE, Y ESTO MERECE UNA EXPLICACION.
   *
   * Blanco sobre #25D366 da 2,2:1, muy por debajo del 4,5:1 que exige la norma
   * PARA TEXTO. Aqui se usa igualmente, y no es un descuido:
   *
   *   · El glifo es la marca de WhatsApp en su version oficial —blanco sobre
   *     verde— y es exactamente ese par lo que la hace reconocible de un
   *     vistazo. Con tinta oscura se leia como un boton verde cualquiera.
   *   · El glifo va `aria-hidden`: no aporta informacion. El nombre accesible
   *     del control esta en el `aria-label` del enlace, y ese si lo anuncia
   *     completo un lector de pantalla.
   *   · Lo que la norma pide para un control no textual (1.4.11) es que se
   *     DISTINGA del fondo, y de eso se encarga el circulo verde contra el
   *     fondo oscuro de la pagina, que pasa de sobra.
   *
   * EL ROTULO «WhatsApp» TAMBIEN VA BLANCO, Y ESO SI ES TEXTO: 1,98:1. Se queda
   * asi porque lo pidio el dueno de forma explicita («en PC las letras tambien
   * deben de ser blancas»). Es una decision suya, tomada con el numero delante,
   * y esta desarrollada en el comentario que hay junto al bloque del rotulo,
   * mas abajo. NO CAMBIAR SIN PREGUNTARLE.
   */
  color: #FFFFFF;
  font-size: 0.9375rem;
  font-weight: var(--peso-medio, 600);
  line-height: 1;
  text-decoration: none;
  white-space: nowrap;

  box-shadow: 0 10px 28px rgba(0, 0, 0, .28);
  transition: box-shadow var(--transicion);

  /*
   * LAS ONDAS Y LA FLOTACION.
   *
   * Peticion del dueno: «que no este ahi pegado, que tenga como ondas, que se
   * note que esta flotando».
   *
   * Son DOS animaciones a la vez sobre el mismo elemento porque tocan
   * propiedades distintas y no se estorban: una anima la sombra (las ondas) y
   * otra la posicion (el flotar). Separarlas permite ademas que el hover pare
   * solo lo que conviene.
   */
  animation:
    lt-flotante-onda 3s cubic-bezier(.2, .6, .35, 1) infinite,
    lt-flotante-sube 4.5s ease-in-out infinite;
}

/*
 * LAS ONDAS SE HACEN CON `box-shadow`, NO CON ELEMENTOS EXTRA.
 *
 * Lo intuitivo es un par de <span> o de pseudoelementos que crecen y se
 * desvanecen. No funciona aqui sin pelearse: el boton es `position: fixed` con
 * `z-index`, o sea que crea contexto de apilamiento, y un pseudoelemento con
 * `z-index: -1` NO se va detras de su padre — se queda por encima del fondo
 * verde y se ve como un disco pegado encima.
 *
 * Un `box-shadow` de difuminado cero y extension creciente dibuja exactamente
 * el mismo anillo, siempre por fuera del boton, sin nodos nuevos y sin tocar el
 * apilamiento. La sombra de elevacion viaja en el mismo valor porque un
 * `box-shadow` se reemplaza entero: si se anima solo el anillo, la elevacion
 * desaparece durante la animacion.
 */
@keyframes lt-flotante-onda {
  0% {
    box-shadow:
      0 10px 28px rgba(0, 0, 0, .28),
      0 0 0 0 rgba(37, 211, 102, .55);
  }
  70% {
    box-shadow:
      0 10px 28px rgba(0, 0, 0, .28),
      0 0 0 20px rgba(37, 211, 102, 0);
  }
  100% {
    box-shadow:
      0 10px 28px rgba(0, 0, 0, .28),
      0 0 0 0 rgba(37, 211, 102, 0);
  }
}

/* Cuatro pixeles y medio de recorrido en cuatro segundos y medio: se percibe
   como que la pieza esta suspendida, no como que se mueve. Mas amplitud y pasa
   de flotar a saltar, que distrae de la lectura. */
@keyframes lt-flotante-sube {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-4.5px); }
}

/*
 * AL PASAR EL RATON SE PARA TODO.
 *
 * Un boton que sigue latiendo y subiendo mientras se intenta pulsar es un
 * objetivo movil: se falla el clic. Ademas, la animacion existe para LLAMAR la
 * atencion, y cuando el cursor ya esta encima ha cumplido su trabajo.
 */
.lt-flotante:hover,
.lt-flotante:focus-visible {
  animation-play-state: paused;
  box-shadow: 0 16px 38px rgba(0, 0, 0, .38);
}

.lt-flotante:focus-visible {
  outline: 3px solid var(--marca);
  outline-offset: 3px;
}

/*
 * EL ROTULO VA BLANCO, IGUAL QUE EL ICONO. DECISION DEL DUENO.
 *
 * Estuvo en tinta oscura por contraste y el dueno pidio blanco: «en PC las
 * letras tambien deben de ser blancas». Queda asi y queda anotado el numero,
 * que es lo unico que no se puede maquillar:
 *
 *   blanco sobre #25D366 .......... 2,2:1   (el minimo para texto es 4,5:1)
 *   tinta #0B1220 sobre #25D366 ... 8,4:1
 *
 * Es el par que usa la propia marca en sus materiales, asi que se lee bien en
 * la practica pese al numero — pero no cumple la norma, y eso no depende de la
 * opinion de nadie.
 *
 * SI ALGUN DIA HAY QUE CORREGIRLO sin renunciar al blanco, la salida NO es
 * agrandar la letra —ni siquiera como «texto grande» llegaria al 3:1— sino
 * oscurecer el verde hasta ~#0E6B33, que con blanco da 5,4:1. El precio es que
 * deja de parecerse al verde de WhatsApp, que es justo lo que hace que el boton
 * se reconozca sin leerlo.
 *
 * El rotulo solo se ve en escritorio: en movil queda unicamente el icono.
 */

.lt-flotante__icono {
  display: inline-flex;
  flex: none;
}

.lt-flotante__icono svg {
  width: 26px;
  height: 26px;
  fill: currentColor;
}

/*
 * EN MOVIL SE QUEDA EN EL ICONO.
 *
 * La pastilla con texto mide unos 150px, y en una pantalla de 360 eso es casi
 * la mitad del ancho tapando contenido de forma permanente. Redondo ocupa 56 y
 * sigue siendo inconfundible: el logotipo de WhatsApp no necesita que le pongan
 * el nombre al lado.
 */
@media (max-width: 640px) {
  .lt-flotante {
    width: var(--flota-alto);
    padding: 0;
    justify-content: center;
  }

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

/*
 * LAS BARRAS FIJAS DE LAS FICHAS.
 *
 * Tres plantillas pintan en movil una barra de acciones anclada abajo y a todo
 * el ancho: la ficha de negocio, la de ayuda y la de evento. El boton flotante
 * caeria justo encima de sus botones —«Llamar», «Como llegar»— que son
 * exactamente los que esas paginas existen para ofrecer.
 *
 * Se sube por encima de ellas. Se listan las tres clases del <body> en vez de
 * usar `:has(.lt-negocio-barra)` a proposito: `:has()` no existe en las WebView
 * antiguas de Android que esta comunidad todavia usa, y ahi el boton volveria a
 * tapar la barra sin que nadie se entere.
 *
 * 68px es el alto de esas barras (boton de 44 mas relleno) y 12 la separacion.
 */
/* Las dos recolocaciones —barra de acciones de las fichas y area segura del
   iPhone— ya no se escriben aqui: viven en los tokens `--flota-*` del
   principio de este bloque, para que TODO lo que flota en esa esquina se
   mueva junto. Antes solo se movia el de WhatsApp. */

/*
 * SIN MOVIMIENTO SI EL SISTEMA LO PIDE.
 *
 * Un elemento que late sin parar en una esquina de TODAS las paginas es
 * exactamente lo que hace insoportable navegar a quien tiene trastornos
 * vestibulares. Se apagan las dos animaciones y se deja la sombra fija, que es
 * suficiente para que el boton siga leyendose como algo que flota por encima
 * del contenido.
 */
@media (prefers-reduced-motion: reduce) {
  .lt-flotante {
    animation: none;
    transition: none;
    transform: none;
    box-shadow: 0 10px 28px rgba(0, 0, 0, .28);
  }
}

/* ------------------------------------------------------------------ */
/* Impresión                                                           */
/* ------------------------------------------------------------------ */

@media print {
  /* El boton flotante no se puede pulsar en papel. */
  .lt-flotante { display: none; }

  /* Una cabecera fija y un pie oscuro gastan tinta y no dicen nada en papel. */
  .lt-cabecera,
  .lt-velo,
  .lt-pie__redes,
  .lt-pie__acciones { display: none; }

  body { padding-top: 0; }
  .lt-pie { background: none; color: #000; padding-block: var(--e-3); }
  .lt-pie::before { display: none; }
  .lt-pie__descripcion, .lt-pie__dato, .lt-pie__copy { color: #000; }
  .lt-pie a { color: #000; }
}

/* ------------------------------------------------------------------ */
/* SUBMENUS DE LA CABECERA                                             */
/* ------------------------------------------------------------------ */

/*
 * El menu tenia NUEVE entradas en fila y se leia como una lista de la compra:
 * ocupaba todo el ancho util y no habia jerarquia — «Marketplace» pesaba lo
 * mismo que «Noticias». Agrupadas en cinco, con Directorio y Comunidad
 * abriendo submenu, caben holgadas y se entiende la estructura del sitio de un
 * vistazo.
 *
 * JS: assets/js/submenu.js — anade la flecha para el dedo. Sin el, el submenu
 * sigue abriendose con el raton y con el tabulador.
 */

.lt-nav__lista .sub-menu {
  position: absolute;
  top: calc(100% + 6px);
  left: 0;
  z-index: 20;
  min-width: 220px;
  margin: 0;
  padding: 6px;
  list-style: none;

  background: var(--blanco, #FFF);
  border: 1px solid rgba(11, 18, 32, .10);
  border-radius: var(--radio, 12px);
  box-shadow: 0 14px 40px rgba(4, 10, 24, .16);

  /*
   * OCULTO CON `visibility`, NO CON `display: none`.
   *
   * `display: none` no se anima y, mas importante, saca el submenu del orden de
   * tabulacion de golpe: el navegador no puede enfocar dentro de el, asi que
   * `:focus-within` —que es lo que lo abre con teclado— nunca llegaria a
   * dispararse. Seria un menu imposible de abrir sin raton.
   */
  opacity: 0;
  visibility: hidden;
  transform: translateY(-6px);
  transition: opacity 160ms ease, transform 200ms ease, visibility 0s linear 200ms;
}

.lt-nav__lista li:hover > .sub-menu,
.lt-nav__lista li:focus-within > .sub-menu,
.lt-nav__lista li.lt-nav--abierto > .sub-menu {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
  transition-delay: 0s;
}

/*
 * EL PUENTE INVISIBLE.
 *
 * Entre el enlace y el submenu hay 6px de aire. Al bajar el raton, ese hueco
 * cuenta como «fuera» y el submenu se cierra en la cara. Un pseudo-elemento que
 * cubre el hueco mantiene el hover mientras se cruza. Es el detalle que separa
 * un menu que funciona de uno que hay que cazar.
 */
.lt-nav__lista li:has(> .sub-menu)::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  top: 100%;
  height: 10px;
}

.lt-nav__lista .sub-menu a {
  display: block;
  padding: 9px 12px;
  border-radius: 8px;
  white-space: nowrap;
  color: var(--tinta);
}

.lt-nav__lista .sub-menu a:hover {
  background: var(--hueso, #F6F3EE);
  color: var(--tinta);
}

/* La flecha la crea submenu.js: sin JavaScript no existe, y no puede existir,
   porque no haria nada. */
/*
 * EL PADRE Y SU FLECHA VAN EN LA MISMA LINEA.
 *
 * El elemento de lista era un bloque normal, asi que el enlace y el boton se
 * comportaban como dos cajas en linea y la flecha caia debajo del texto en
 * cuanto el hueco apretaba: el menu se veia con «Directorio» y una flecha
 * suelta en un segundo renglon.
 */
.lt-nav__lista > li:has(> .sub-menu) {
  display: flex;
  align-items: center;
  gap: 2px;
}

.lt-nav__flecha {
  flex: none;
  display: inline-grid;
  place-items: center;
  width: 22px;
  height: 22px;
  margin-left: -4px;
  padding: 0;
  border: 0;
  border-radius: 6px;
  background: transparent;
  color: inherit;
  cursor: pointer;
  transition: transform 200ms ease;
}

.lt-nav--abierto > .lt-nav__flecha { transform: rotate(180deg); }

.lt-nav__flecha:focus-visible {
  outline: 2px solid var(--cielo, #4EA8DE);
  outline-offset: 1px;
}

/*
 * EN EL CAJON DEL MOVIL EL SUBMENU NO FLOTA: SE DESPLIEGA EN LINEA.
 *
 * Un desplegable posicionado en absoluto dentro de un cajon que ya se desplaza
 * acaba recortado o fuera de la pantalla. Aqui se comporta como lo que es: una
 * lista anidada.
 */
@media (max-width: 1320px) {
  .lt-nav__lista .sub-menu {
    position: static;
    opacity: 1;
    visibility: visible;
    transform: none;
    min-width: 0;
    margin: 2px 0 6px 14px;
    padding: 0 0 0 12px;
    border: 0;
    border-left: 2px solid rgba(11, 18, 32, .12);
    border-radius: 0;
    background: transparent;
    box-shadow: none;
    transition: none;
  }

  .lt-nav__lista li:has(> .sub-menu)::after { display: none; }

  /*
   * -------------------------------------------------------------------
   * EL ACORDEON DEL CAJON (peticion del dueno, 2026-08-09)
   * -------------------------------------------------------------------
   * Antes los dos submenus estaban SIEMPRE desplegados dentro del cajon. Con
   * cinco entradas y siete subentradas, abrir el menu en un telefono era
   * encontrarse doce renglones de golpe y tener que leerlos todos para
   * encontrar el que se busca. El cajon dejaba de ser un menu y pasaba a ser
   * un indice.
   *
   * Ahora se pliegan: cinco renglones, y el que interesa se abre.
   *
   * `display: none` y no `visibility`, al reves que en escritorio: aqui el
   * submenu esta en el flujo, y esconderlo con visibility dejaria su hueco
   * en blanco en mitad del cajon. La razon por la que en escritorio se usa
   * visibility —que `:focus-within` pueda enfocar dentro— aqui no aplica,
   * porque lo que abre es la flecha, no el foco.
   *
   * SIN JAVASCRIPT NO HAY ACORDEON, y es correcto: la flecha la crea el
   * guion, asi que sin el no habria forma de abrir. `.lt-js` lo pone el
   * propio tema en cuanto hay JavaScript, de modo que el plegado solo existe
   * cuando existe quien lo despliega.
   */
  .lt-js .lt-nav__lista li:has(> .sub-menu) > .sub-menu { display: none; }
  .lt-js .lt-nav__lista li.lt-nav--abierto > .sub-menu { display: block; }

  /*
   * La flecha, a 44x44 y pegada al borde derecho del cajon. Es la regla de la
   * casa para cualquier cosa que se pulse, y aqui manda: es el control que
   * abre todo lo demas.
   */
  .lt-nav__flecha {
    display: inline-grid;
    width: 44px;
    height: 44px;
    margin-left: auto;
    border-radius: 10px;
  }

  .lt-nav__flecha svg { width: 18px; height: 18px; }

  /* El renglon del padre ocupa el ancho entero para que la flecha se vaya a la
     derecha, como en cualquier acordeon. */
  .lt-nav__lista > li:has(> .sub-menu) {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    width: 100%;
  }

  .lt-nav__lista > li:has(> .sub-menu) > a { flex: 1 1 auto; }
  .lt-nav__lista > li:has(> .sub-menu) > .sub-menu { flex: 1 0 100%; }
}

/*
 * «IR A DIRECTORIO» — el primer elemento de cada desplegable en el movil.
 *
 * Lo crea submenu.js. Existe porque en el cajon el renglon del padre pasa a
 * ser el interruptor, y sin esto la seccion se quedaria sin forma de
 * visitarse desde el menu. Se pinta como boton y no como un enlace mas de la
 * lista para que se lea como «ir alli», no como «una opcion mas».
 *
 * En escritorio NO se pinta: alli el renglon del padre sigue siendo un enlace
 * normal y repetirlo dentro seria decir dos veces lo mismo.
 */
.lt-nav__ir { display: none; }

@media (max-width: 1320px) {
  .lt-nav__ir { display: block; margin-bottom: 4px; }

  .lt-nav__lista .lt-nav__ir a {
    display: flex;
    align-items: center;
    min-height: 44px;
    padding: 0 14px;
    border-radius: var(--radio-pildora, 999px);
    background: var(--marca, #1B3A6B);
    color: var(--blanco, #FFF);
    font-weight: var(--peso-fuerte, 700);
    font-size: var(--fs-chico);
    letter-spacing: .02em;
  }

  .lt-nav__lista .lt-nav__ir a:hover,
  .lt-nav__lista .lt-nav__ir a:focus-visible {
    background: var(--noche, #0B1220);
    color: var(--blanco, #FFF);
  }
}

/* Sobre la cabecera transparente, el submenu conserva su fondo claro: es una
   superficie de interfaz, no parte del hero. La tinta vuelve a ser oscura.
   MENOS el «Ir a …», que trae su propio fondo azul: ahí la tinta oscura daba
   2,36:1 medido, contra los 7,92:1 que da la misma pantalla en /negocios/,
   donde esta regla no aplica porque la cabecera ya no es transparente. Un
   contraste que depende de en qué página esté abierto el menú es un contraste
   que nadie va a revisar dos veces. */
html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-nav__lista .sub-menu li:not(.lt-nav__ir) > a {
  color: var(--tinta);
}

@media (prefers-reduced-motion: reduce) {
  .lt-nav__lista .sub-menu,
  .lt-nav__flecha { transition: none; }
}

/* --- Los grupos de WhatsApp por ciudad, en el pie -------------------- */

/*
 * Van SEPARADOS de las redes y con su propio rotulo. Una red es un sitio donde
 * te enteras; un grupo es un sitio donde hablas con gente de tu ciudad. Son
 * cosas distintas y mezclarlas en la misma lista las convierte en ocho enlaces
 * indistinguibles.
 */
.lt-pie__subtitulo {
  margin: var(--e-3, 20px) 0 var(--e-1, 8px);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, .48);
}

.lt-pie__grupos {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.lt-pie__grupo {
  display: inline-flex;
  align-items: center;
  /* 44px de alto pulsable: es un enlace que se toca desde el telefono. */
  min-height: 36px;
  padding: 6px 14px;
  border: 1px solid rgba(255, 255, 255, .20);
  border-radius: 999px;
  color: rgba(255, 255, 255, .82);
  font-size: 13px;
  text-decoration: none;
  transition: border-color var(--transicion), color var(--transicion);
}

.lt-pie__grupo:hover,
.lt-pie__grupo:focus-visible {
  border-color: var(--cielo, #4EA8DE);
  color: var(--blanco, #FFF);
}

/* ==================================================================== */
/* PÁGINAS SUELTAS (page.php)                                           */
/* ==================================================================== */

/*
 * Ver page.php. Antes de existir esa plantilla, las páginas caían en el
 * listado genérico y solo enseñaban su extracto — la política de privacidad
 * servía 200 caracteres de 6.000. Esto es lo mínimo para que un texto largo se
 * lea bien.
 */
.lt-pagina__cuerpo { padding-top: clamp(28px, 4vw, 48px); }

/*
 * 72 CARACTERES DE ANCHO, NO LOS 1320 DEL CONTENEDOR.
 *
 * A todo lo ancho, una línea de texto legal pasa de 150 caracteres y al saltar
 * de renglón el ojo vuelve a la línea equivocada. La medida cómoda de lectura
 * está entre 50 y 75.
 */
.lt-pagina__prosa {
  max-width: 72ch;
  font-size: 1.05rem;
}

/* El separador entre la versión en español y la inglesa dentro de la misma
   página: las dos legales llevan las dos versiones en un solo documento. */
.lt-pagina__prosa hr {
  margin-block: clamp(40px, 6vw, 72px);
  border: 0;
  border-top: 1px solid var(--linea);
}

.lt-pagina__prosa h2 { margin-top: clamp(32px, 4vw, 48px); }
.lt-pagina__prosa h3 { margin-top: clamp(24px, 3vw, 36px); }
.lt-pagina__prosa ul { margin-bottom: var(--e-3); padding-left: 1.25em; }
.lt-pagina__prosa li { margin-bottom: .4em; }

/* ==================================================================== */
/* EL CAJÓN MÓVIL ESCONDÍA MEDIO MENÚ                                   */
/* ==================================================================== */

/*
 * QUÉ SE VEÍA
 * -----------
 * En un móvil, al abrir el menú de la portada aparecían cuatro enlaces:
 * Ayudas, Marketplace, Eventos y Videos y podcasts. O sea, solo los
 * SUBAPARTADOS. Las cinco secciones principales —Noticias, Directorio,
 * Empleos, Comunidad y Cupones— estaban ahí, ocupaban su sitio y se podían
 * pulsar, pero eran texto blanco sobre el cajón blanco. Invisibles.
 *
 * Medido enlace por enlace en 390px, contraste sobre el fondo real:
 *
 *   Noticias, Directorio, Empleos, Comunidad, Cupones ... 1,00:1   (blanco/blanco)
 *   Ayudas, Marketplace, Eventos, Videos y podcasts ..... 18,72:1  (tinta/blanco)
 *
 * DE DÓNDE VENÍA
 * --------------
 * De la regla de la cabecera transparente, unas 800 líneas más arriba:
 *
 *   html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-nav__lista a
 *       { color: var(--blanco); }
 *
 * Esa regla es CORRECTA y hace falta: en la portada, la cabecera flota sobre
 * el hero oscuro y los enlaces tienen que ir en blanco para leerse. El
 * problema es que en móvil esos mismos enlaces se mudan dentro del cajón, que
 * es blanco, y la regla los sigue hasta allí porque no distingue dónde están.
 *
 * Los subapartados se salvaban de casualidad: los pinta el submenú, que tiene
 * su propio color y no lo hereda.
 *
 * Solo pasaba en la PORTADA (es la única página con `lt-sobre-oscuro`) y solo
 * por debajo de 1320px. En escritorio nunca se vio.
 *
 * EL ARREGLO
 * ----------
 * Dentro del cajón, el color vuelve a ser el de siempre. No se toca la regla
 * de la cabecera transparente: sigue funcionando donde debe.
 */
/*
 * EL `:not(.lt-nav__ir a)` DE AQUÍ ABAJO NO ES UN DETALLE.
 *
 * Esta regla pinta en tinta oscura TODOS los enlaces del cajón, y con razón: el
 * cajón es blanco. Pero el botón «Ir a Directorio» del acordeón lleva su propio
 * fondo azul de marca, y esta regla —mucho más específica que la del botón,
 * (0,5,3) contra (0,2,1)— le ponía la tinta oscura encima. Resultado medido en
 * captura: texto casi negro sobre azul #1B3A6B, 1,9:1. Ilegible.
 *
 * Se excluye aquí en vez de subir la especificidad del botón: una guerra de
 * selectores se gana una vez y se pierde la siguiente. Decir «todos los enlaces
 * del cajón MENOS el que trae su propio fondo» describe la intención real.
 */
@media (max-width: 1320px) {
  html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-cabecera__panel .lt-nav__lista li:not(.lt-nav__ir) > a,
  html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-cabecera__panel .lt-nav__lista .current-menu-item > a,
  html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-cabecera__panel .lt-nav__lista .current_page_item > a {
    color: var(--tinta);
  }

  /* El hover blanco sobre blanco dejaba el enlace en blanco al tocarlo: se
     devuelve el de siempre, que es un tinte de marca. */
  html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-cabecera__panel .lt-nav__lista li:not(.lt-nav__ir) > a:hover,
  html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-cabecera__panel .lt-nav__lista li:not(.lt-nav__ir) > a:focus-visible {
    color: var(--marca);
    background: var(--marca-claro);
  }

  /* La marca del sitio, por el mismo motivo: dentro del cajón va en tinta. */
  html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-cabecera__panel .lt-marca__texto {
    color: var(--tinta);
  }
}

/* ==================================================================== */
/* SECCIONES TODAVÍA SIN CONTENIDO (inc/proximamente.php)               */
/* ==================================================================== */

/*
 * Seis de las diez secciones están hoy a cero. El estado vacío que había
 * decía «no hay resultados con estos filtros, prueba con otra ciudad», que
 * mandaba al visitante a buscar en otras ciudades algo que no existe en
 * ninguna. Esto lo sustituye.
 *
 * Va con el peso de una sección de verdad —no de un aviso de error— porque no
 * es un fallo: es una parte del sitio que todavía no ha abierto.
 */
.lt-proximamente {
  max-width: 62ch;
  margin-inline: auto;
  padding: clamp(40px, 7vw, 88px) clamp(20px, 4vw, 40px);
  text-align: center;
  background: var(--hueso);
  border: 1px solid var(--linea);
  border-radius: var(--radio-grande);
}

.lt-proximamente__sello {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin: 0 0 var(--e-3);
  padding: 8px 18px;
  border-radius: 999px;
  background: var(--marca-claro);
  color: var(--marca);
  font-size: var(--fs-etiqueta);
  font-weight: var(--peso-fuerte);
  letter-spacing: var(--tracking-etiqueta);
  text-transform: uppercase;
}

/* El punto late despacio: señala «esto está en marcha», no «esto está roto». */
.lt-proximamente__punto {
  width: 9px;
  height: 9px;
  flex: none;
  border-radius: 50%;
  background: var(--marca);
}

@media (prefers-reduced-motion: no-preference) {
  .lt-proximamente__punto { animation: lt-proximamente-late 2.4s ease-in-out infinite; }
}

@keyframes lt-proximamente-late {
  0%, 100% { opacity: 1;   transform: scale(1); }
  50%      { opacity: .45; transform: scale(.82); }
}

.lt-proximamente__promesa {
  margin: 0 0 var(--e-4);
  font-family: var(--fuente-titulo);
  font-size: clamp(1.25rem, 2.6vw, 1.75rem);
  line-height: 1.35;
  color: var(--tinta);
  text-wrap: balance;
}

.lt-proximamente__invitacion {
  margin: 0 0 var(--e-2);
  color: var(--apagado);
}

.lt-proximamente__accion { margin: 0 0 var(--e-4); }

.lt-proximamente__mientras {
  margin: 0;
  padding-top: var(--e-3);
  border-top: 1px solid var(--linea);
  font-size: var(--fs-chico);
  color: var(--apagado);
}

.lt-proximamente__mientras a {
  color: var(--marca);
  font-weight: var(--peso-medio);
}

/* ==================================================================== */
/* EL PIE LE DEJA SITIO A LOS BOTONES FLOTANTES                         */
/* ==================================================================== */

/*
 * QUÉ PASABA
 * ----------
 * Hay dos botones pegados a la pantalla que acompañan al visitante todo el
 * rato: el de WhatsApp abajo a la derecha y el del asistente abajo a la
 * izquierda. Al llegar al final de la página se quedan encima del pie, y en
 * escritorio el de WhatsApp aterrizaba justo sobre el enlace «Términos de
 * uso»: se veía el texto asomando por detrás del botón verde y no se podía
 * pulsar.
 *
 * Se comprobó punto por punto sobre la superficie de cada botón, con la página
 * desplazada hasta abajo del todo:
 *
 *   escritorio 1440 ... el botón de WhatsApp tapa «Términos de uso»
 *   móvil 390 ........ no tapa ningún enlace (ahí el pie es más alto)
 *
 * EL ARREGLO
 * ----------
 * Se le añade al pie un colchón inferior mayor que el botón: 52-56 px de alto
 * más los 16-34 px que lo separan del borde, redondeado a 104. Así el último
 * renglón del pie queda SIEMPRE por encima de la zona donde flotan los
 * botones, y ellos acaban sobre fondo vacío, que es donde estorban a nadie.
 *
 * No se hace moviendo los botones al llegar al pie: eso exige JavaScript
 * escuchando el desplazamiento, y un colchón de CSS no puede fallar.
 */
.lt-pie { padding-bottom: calc(var(--e-4) + 104px); }

/*
 * Al imprimir no hay botones flotantes, así que el colchón sobraría y dejaría
 * una página en blanco de más al final.
 */
@media print {
  .lt-pie { padding-bottom: var(--e-3); }
}

/* ==================================================================== */
/* EL ACCESO A LA CUENTA EN LA CABECERA                                 */
/* ==================================================================== */

/*
 * Ver header.php. Se construyó todo el sistema de cuentas y no había ni un
 * enlace: solo se llegaba escribiendo la dirección a mano.
 *
 * Se dibuja como el conmutador de idioma —píldora discreta— y no como un botón
 * de acción: la acción principal de esta cabecera es «Comunidad», y dos botones
 * llamativos compitiendo dejan al visitante sin saber cuál es el importante.
 */
.lt-cuenta-acceso {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  /* 44px de alto: es la medida que no falla con el pulgar. El relleno lateral
     es menor porque la píldora ya la ensancha el texto. */
  min-height: 44px;
  padding: 0 14px;
  border: 1px solid var(--linea);
  border-radius: 999px;
  color: var(--tinta);
  font-size: var(--fs-chico);
  font-weight: var(--peso-medio);
  text-decoration: none;
  white-space: nowrap;
  transition: border-color var(--transicion), background var(--transicion), color var(--transicion);
}

.lt-cuenta-acceso:hover {
  border-color: var(--marca);
  background: var(--marca-claro);
  color: var(--marca);
}

.lt-cuenta-acceso:focus-visible {
  outline: 3px solid var(--marca);
  outline-offset: 2px;
}

.lt-cuenta-acceso__icono { display: inline-flex; flex: none; }

/* Quien ya entró lleva su nombre: se marca con el color de marca para que se
   distinga de un vistazo del estado «sin sesión». */
.lt-cuenta-acceso--dentro {
  border-color: var(--marca-borde);
  color: var(--marca);
}

/*
 * SOBRE EL HERO OSCURO DE LA PORTADA, EN CLARO.
 *
 * Misma regla que el resto de la cabecera transparente: sin esto, la píldora
 * queda en tinta oscura sobre la fotografía del hero y desaparece.
 */
html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-cabecera .lt-cuenta-acceso {
  border-color: rgba(255, 255, 255, .34);
  color: var(--blanco);
}

html.lt-anima:not(.lt-desplazado) body.lt-sobre-oscuro .lt-cabecera .lt-cuenta-acceso:hover {
  border-color: var(--blanco);
  background: rgba(255, 255, 255, .12);
  color: var(--blanco);
}

/*
 * EN PANTALLA ESTRECHA SE QUEDA EL ICONO.
 *
 * A 390px la barra ya lleva logo, selector de ciudad, idioma y hamburguesa.
 * Con la palabra «Entrar» delante, el selector de ciudad perdía 60px y su
 * nombre se cortaba. El icono de persona es inequívoco y el nombre accesible
 * sigue completo para el lector de pantalla.
 */
@media (max-width: 560px) {
  .lt-cuenta-acceso {
    padding: 0;
    /* `flex: none` no sobra: la cabecera es un contenedor flexible y sin esto
       encogia la pildora a 20px —el ancho del icono— y dejaba de ser un
       objetivo tactil valido. Medido antes de anadirlo: 20x44. */
    flex: none;
    width: 44px;
    min-width: 44px;
    justify-content: center;
  }

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


/* ====================================================================
 * DOS ZONAS PULSABLES DE LA CABECERA QUE SE HABÍAN QUEDADO CORTAS
 * --------------------------------------------------------------------
 * Aparecieron en la pasada de QA del 2026-08-09, cuando al arreglar la
 * cinta dejaron de esconderse detrás de un fallo más grande: el botón de
 * pausa de la cinta medía 22x22 y el logotipo 34x34. Los dos salen en
 * TODAS las páginas del sitio.
 *
 * Se resuelven con el ::after invisible que el tema ya usa en el
 * conmutador de idioma, y no agrandando el control: los dos están en una
 * barra apretada donde 10 px más empujan al resto. Lo que crece es lo que
 * el dedo toca, no lo que el ojo ve.
 *
 * Los dos necesitan `position: relative` para que el ::after se ancle a
 * ellos; se declara aquí junto al arreglo para que se lea de una vez por
 * qué está.
 * ==================================================================== */

.lt-explora__pausa,
.custom-logo-link {
  position: relative;
}

.lt-explora__pausa::after,
.custom-logo-link::after {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  width: 44px;
  height: 44px;
  transform: translate(-50%, -50%);
}

/*
 * El logotipo mide 34 px de ancho en el teléfono, así que su área también
 * crece a lo ancho: 5 px por cada lado. Se comprobó que no invade al
 * selector de ciudad, que tiene su propio hueco de separación.
 *
 * `min-width` en vez de `width` para que en escritorio, donde el logotipo
 * es más ancho, el área no lo ENCOJA.
 */
.custom-logo-link::after {
  min-width: 44px;
  width: 100%;
}


/* ====================================================================
 * EL SELECTOR DE CIUDAD SE ENCOGE A SU ICONO EN EL TELÉFONO
 * --------------------------------------------------------------------
 * PEDIDO POR EL DUEÑO el 2026-08-09: «el header se está saliendo de la
 * pantalla; en vez de poner All of Texas todo grande, podríamos colocar
 * solamente el iconito de la ubicación».
 *
 * Y tenía razón con la medida delante. A 390 px, los hijos de la barra
 * sumaban 693 px de contenido en 390 de ancho, y el botón de hamburguesa
 * terminaba en el píxel 401 — once píxeles fuera de la pantalla. La causa
 * no era el logotipo ni el menú: era este selector, que ocupaba 157 px él
 * solo, más del doble que cualquier otro elemento de la barra.
 *
 * Empezó a doler ahora y no antes porque hoy se añadió el acceso a la
 * cuenta. Cada pieza cabía; las cinco juntas ya no.
 *
 * QUÉ SE CONSERVA, que es lo importante: el <select> SIGUE ESTANDO, con
 * su nombre, su etiqueta y su lista entera. Lo que se esconde es el texto
 * dibujado, no el control. Se puede pulsar, se abre la lista nativa del
 * teléfono con todas las ciudades, funciona con teclado y el lector de
 * pantalla lo sigue anunciando por su <label>. Esconderlo de verdad
 * habría sido quitarle al visitante el filtro más importante del sitio
 * para ganar espacio.
 *
 * El icono de la chincheta se queda porque es lo que dice QUÉ es el
 * control. La flecha también: sin ella un icono suelto no se lee como
 * algo desplegable.
 * ==================================================================== */

@media (max-width: 560px) {
  .lt-ciudad__campo {
    /*
     * Ancho de un carácter y color transparente: el texto deja de verse
     * pero el control conserva su caja, su foco y su lista. `width` y no
     * `display:none` porque un select oculto no se puede abrir.
     */
    width: 1.2em;
    max-width: 1.2em;
    padding-inline: 0;
    color: transparent;
    text-indent: -9999px;
  }

  /* La lista desplegada SÍ se lee: solo se apaga el texto del control
     cerrado. Sin esto, el teléfono abriría una lista de opciones en
     blanco. */
  .lt-ciudad__campo option {
    color: var(--tinta);
    text-indent: 0;
  }

  .lt-ciudad__caja {
    gap: 2px;
    padding: 0 8px;
  }
}

/* ==================================================================== */
/* EL PIE — LOS BOTONES, REHECHOS EL 2026-08-09                         */
/* ==================================================================== */
/*
 * El dueno: «en el pie veo unos botones de llamar, de WhatsApp y de
 * direcciones… no me cuadran mucho. Tal vez un poco mas cuadriculados, que se
 * vean profesionales».
 *
 * QUE ESTABA MAL, mirandolo con calma:
 *
 *   · TRES ANCHOS DISTINTOS. Eran pildoras que median lo que media su texto:
 *     «Llamar» la mitad que «Como llegar». Tres controles que hacen lo mismo
 *     con tres anchos distintos se leen como un descarte, no como un grupo.
 *   · PILDORA CONTRA CUADRADO. El resto del pie —las redes, los grupos por
 *     ciudad— tambien iban en pildora, asi que todo el pie era una nube de
 *     capsulas de distintos tamanos. En una zona de utilidad, la forma
 *     redonda del todo resta seriedad.
 *   · SIN ICONO. Un boton de contacto se reconoce por su simbolo antes que por
 *     su palabra, y ahi solo habia palabras.
 *
 * QUE SE HACE. Rejilla de tres columnas IGUALES, esquina de 10px en vez de
 * pildora, icono encima del rotulo y la misma altura para los tres. La
 * jerarquia de color se mantiene —el azul manda, porque llamar es la accion
 * principal— pero la forma es una sola.
 *
 * TODO ESTO VIVE DENTRO DE `.lt-pie`: la pildora sigue siendo la forma de los
 * botones en el resto del sitio y no se toca. Es un cambio de zona, no de
 * sistema.
 */

/*
 * DOS ARRIBA Y UNO ABAJO A LO ANCHO, TAMBIEN EN ESCRITORIO.
 *
 * La primera version puso tres columnas iguales. Medido en 1440: la columna de
 * contacto del pie mide ~300px, asi que a cada boton le tocaban 97 — y «Como
 * llegar» necesita 94 solo de texto. En la captura el rotulo se salia por
 * encima de los bordes.
 *
 * Con dos columnas cada boton tiene 146px y el tercero, a lo ancho, 300. Ademas
 * agrupa bien: arriba los dos gestos que se usan a diario —llamar y escribir—
 * y debajo el que se usa una vez.
 */
.lt-pie__acciones {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  margin-top: var(--e-3);
}

.lt-pie__acciones > :nth-child(3) { grid-column: 1 / -1; }

.lt-pie .lt-pie__accion {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 5px;
  /* 62px de alto: caben el icono y el rotulo sin apretarse, y sigue muy por
     encima de los 44px minimos de la casa para algo que se pulsa. */
  min-height: 62px;
  padding: 10px 6px;
  border-radius: 10px;
  font-size: .78rem;
  font-weight: var(--peso-fuerte, 700);
  letter-spacing: .03em;
  line-height: 1.15;
  text-align: center;
  /* Los rotulos no se parten: «Como llegar» en dos lineas descuadra la fila. */
  white-space: nowrap;
}

.lt-pie .lt-pie__accion svg { flex: none; }

/* El fantasma del pie va sobre fondo oscuro: el contorno del sistema (gris al
   60 % sobre claro) aqui desaparece. */
.lt-pie .lt-pie__accion.lt-btn--fantasma {
  border-color: var(--noche-borde);
  color: var(--blanco);
  background: transparent;
}

.lt-pie .lt-pie__accion.lt-btn--fantasma:hover,
.lt-pie .lt-pie__accion.lt-btn--fantasma:focus-visible {
  background: var(--blanco);
  border-color: var(--blanco);
  color: var(--noche);
}

/*
 * LAS REDES Y LOS GRUPOS SE ALINEAN CON ELLOS.
 *
 * Son enlaces, no botones —siguen siendo mas ligeros— pero comparten la
 * esquina. Con tres botones cuadrados encima y ocho capsulas redondas debajo,
 * el pie volveria a leerse como dos sistemas pegados.
 */
.lt-pie .lt-pie__red,
.lt-pie .lt-pie__grupo {
  border-radius: 10px;
}

/*
 * EL ICONO DE TRAZO NO SE RELLENA.
 *
 * Los SVG llevan `fill="none"` en el marcado, pero cualquier regla de la casa
 * que ponga `fill: currentColor` a los iconos de un boton gana al atributo. Sin
 * esto, el alfiler del mapa se pintaba como un circulo blanco macizo.
 */
.lt-pie .lt-pie__accion svg[stroke] { fill: none; }

/* ================================================================== */
/* EL SELLO DE SITIO OFICIAL — footer.php, punto 15 del documento      */
/* ================================================================== */

/*
 * DISCRETO A PROPOSITO. El encargo pedia «visible pero discreta», y un sello de
 * confianza que grita consigue lo contrario de lo que busca: los sellos grandes
 * y con brillos son exactamente los que usan las tiendas que no son de fiar.
 *
 * Asi que es una linea de texto pequena con un escudo fino delante, del color
 * apagado del pie. Se lee cuando se busca y no estorba cuando no.
 */
.lt-pie__sello {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: var(--e-3) 0 0;
  font-size: .8125rem;
  line-height: 1.35;
  color: var(--niebla);
}

.lt-pie__sello-icono { flex: 0 0 auto; opacity: .85; }

.lt-pie__sello-sep { margin: 0 2px; opacity: .5; }
