/* Tema Javi Besnier — hereda de quark2.
   Los valores los pone el PANEL (blueprints.yaml); aqui solo se consumen las
   variables que la plantilla escribe en :root. Nada esta escrito a fuego.
   Contraste comprobado: el texto corrido nunca va sobre verde oliva. */

body { background: var(--jb-beige); color: var(--jb-verde-oscuro);
       font-family: var(--jb-fuente-texto); font-size: calc(1rem * var(--jb-escala)); line-height: 1.7; }

h1,h2,h3,h4,h5,h6 { font-family: var(--jb-fuente-titulos); font-weight: var(--jb-peso-titulos);
                    color: var(--jb-verde-oscuro); line-height: 1.25; }
h1 { font-size: 2.6rem; letter-spacing: -.01em; }
h2 { font-size: 1.9rem; margin-top: 2.6rem; }
h3 { font-size: 1.3rem; margin-top: 2rem; }

a { color: var(--jb-teja); }
a:focus-visible, button:focus-visible { outline: 3px solid var(--jb-teja); outline-offset: 3px; }

main p, main li { max-width: 68ch; }
hr { border: 0; border-top: 3px solid var(--jb-verde-oliva); margin: 3rem 0; }
blockquote { border-left: 4px solid var(--jb-verde-oliva); background: #fff;
             padding: 1rem 1.4rem; margin: 2rem 0; font-style: normal; }

.button, button, input[type=submit] { background: var(--jb-teja); color: #fff; border: 0;
  border-radius: 4px; padding: .8rem 1.6rem; font-weight: 600; font-family: var(--jb-fuente-titulos); }
.button:hover, button:hover { background: var(--jb-verde-oscuro); }

/* Secciones de la maqueta */
.seccion-oliva { background: var(--jb-verde-oliva); padding: 4rem 0; }
.seccion-oliva h1, .seccion-oliva h2 { color: #fff; }   /* solo titulares grandes */
.seccion-oscura { background: var(--jb-verde-oscuro); color: #fff; padding: 4rem 0; }
.seccion-oscura h2, .seccion-oscura p { color: #fff; }

@media (max-width:640px){ h1{font-size:1.9rem} h2{font-size:1.5rem} }

/* ==========================================================================
   MODULOS DE PAGINA MODULAR
   Todo el color y la tipografia salen de las variables --jb-* que escribe
   base.html.twig desde el panel. Aqui no hay ningun color literal.
   ========================================================================== */

.jb-contenedor { width: min(1160px, calc(100% - 3rem)); margin-inline: auto; }
.jb-bloque { padding: 4.5rem 0; }
.jb-bloque--ajustado { padding: 1.5rem 0; }
.jb-centrado { text-align: center; }
/* Pico limita el ancho de p y li. En los bloques de la maqueta el ancho lo
   manda el contenedor, no el tipo de etiqueta. Antes colgaba de .jb-modular,
   clase que desaparecio al retirar el <main> duplicado. */
.jb-bloque p, .jb-bloque li, .jb-pie p, .jb-pie li { max-width: none; }

/* Fondos de banda */
.jb-fondo-beige  { background: var(--jb-beige); }
.jb-fondo-blanco { background: #fff; }
.jb-fondo-oliva  { background: var(--jb-verde-oliva); }
.jb-fondo-oscuro { background: var(--jb-verde-oscuro); }
.jb-fondo-oscuro, .jb-fondo-oscuro h1, .jb-fondo-oscuro h2, .jb-fondo-oscuro h3, .jb-fondo-oscuro p { color: #fff; }
/* Sobre oliva solo titulares grandes en blanco: el texto corrido va en verde
   oscuro, que da 3,32 de contraste y no baja de AA para texto normal. */
.jb-fondo-oliva h1, .jb-fondo-oliva h2 { color: var(--jb-verde-oscuro); }
.jb-fondo-oliva p, .jb-fondo-oliva li, .jb-fondo-oliva h3 { color: var(--jb-verde-oscuro); }

.jb-antetitulo { font-family: var(--jb-fuente-titulos); font-size: .78rem; font-weight: 600;
  letter-spacing: .16em; text-transform: uppercase; color: var(--jb-verde-oliva);
  opacity: 1; margin: 0 0 .75rem; }
.jb-subtitulo { font-weight: 600; font-family: var(--jb-fuente-titulos); margin: 0 0 1rem; }
.jb-subtitulo--cursiva { font-style: italic; }
.jb-nota { font-style: italic; font-size: .92rem; opacity: .85; }
.jb-prosa > :first-child { margin-top: 0; }
.jb-hueco { border: 2px dashed var(--jb-verde-oliva); padding: 1rem; font-style: italic; }

/* Botones */
.jb-botonera { display: flex; flex-wrap: wrap; gap: .9rem; margin: 1.8rem 0 0; }
.jb-botonera--centrada { justify-content: center; }
.jb-boton { display: inline-block; background: var(--jb-teja); color: #fff; text-decoration: none;
  font-family: var(--jb-fuente-titulos); font-weight: 600; font-size: .95rem;
  padding: .8rem 1.5rem; border-radius: 6px; }
.jb-boton:hover { background: var(--jb-verde-oscuro); color: #fff; }
.jb-boton--linea { background: transparent; color: var(--jb-verde-oscuro);
  border: 2px solid var(--jb-verde-oscuro); padding: calc(.8rem - 2px) calc(1.5rem - 2px); }
.jb-boton--linea:hover { background: var(--jb-verde-oscuro); color: #fff; }
.jb-boton--enlace { background: transparent; color: var(--jb-verde-oscuro); padding: 0; border-radius: 0; }
.jb-boton--enlace::after { content: " \2192"; }
.jb-boton--enlace:hover { background: transparent; color: var(--jb-teja); }

/* Listas con marca */
.jb-lista-marcada { list-style: none; padding: 0; margin: 1.2rem 0; }
.jb-lista-marcada li { position: relative; padding-left: 1.9rem; margin-bottom: .7rem; }
.jb-lista-marcada li::before { content: ""; position: absolute; left: 0; top: .45em;
  width: .95rem; height: .95rem; border-radius: 50%; background: var(--jb-teja);
  box-shadow: inset 0 0 0 .18rem var(--jb-beige); }
.jb-lista__titulo { font-size: 1.1rem; margin-bottom: .5rem; }

/* Hero */
.jb-hero { padding: 4.5rem 0; }
.jb-hero__grid { display: grid; grid-template-columns: 1fr; gap: 2.5rem; align-items: center; }
.jb-hero--imagen .jb-hero__grid { grid-template-columns: 1fr 1fr; }
.jb-hero__titulo { margin: 0 0 1.2rem; font-size: clamp(2rem, 5.8vw, 3.2rem);
  hyphens: none; word-break: break-word; overflow-wrap: break-word; }
.jb-hero__entrada { max-width: 46ch; }
.jb-hero__media img { width: 100%; height: auto; border-radius: 10px; display: block; }

/* Texto con imagen */
.jb-texto-imagen__titulos { margin-bottom: 2.5rem; }
.jb-dos-columnas { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem; align-items: flex-start; }
.jb-texto-imagen--derecha .jb-texto-imagen__media { order: 2; }
.jb-texto-imagen--izquierda .jb-texto-imagen__media { order: 0; }
.jb-texto-imagen__media { margin: 0; }
.jb-texto-imagen__media img { width: 100%; height: auto; display: block; }
.jb-media--rectangular img { border-radius: 10px; }
.jb-media--circular img { border-radius: 50%; aspect-ratio: 1 / 1; object-fit: cover; }
.jb-dato-colegiada { font-weight: 600; color: var(--jb-verde-oscuro); }

/* Tarjetas */
.jb-rejilla { display: grid; gap: 1.6rem; grid-template-columns: repeat(3, 1fr); margin-top: 2rem; }
.jb-rejilla--1 { grid-template-columns: 1fr; }
.jb-rejilla--2 { grid-template-columns: repeat(2, 1fr); }
.jb-rejilla--4 { grid-template-columns: repeat(4, 1fr); }
.jb-tarjeta { background: #fff; border-radius: 10px; padding: 2rem 1.8rem; }
.jb-tarjeta h3 { margin: 0; font-size: 1.15rem; }
.jb-tarjeta__cabecera { display: flex; align-items: center; gap: 1rem; margin-bottom: 1.2rem; }
/* El SVG del icono YA trae su propio circulo oliva (<circle r="50" fill="#92946B">).
   El contenedor NO debe pintar otro debajo: hasta 2026-09-18 habia circulo dentro
   de circulo y el icono real se veia a 26px, contra los 100px del diseno original.
   Corregido por Argos el 2026-09-18. Copia previa: javi-besnier.css.bak-2026-09-18 */
.jb-tarjeta__icono { display: grid; place-items: center; width: var(--jb-icono-tarjeta, 100px); height: var(--jb-icono-tarjeta, 100px);
    flex: 0 0 auto; }
.jb-tarjeta__icono img { width: 100%; height: 100%; display: block; }
@media (max-width: 700px) {
  .jb-tarjeta__icono { width: 72px; height: 72px; }
}

/* Circulos de servicios.
   BUG corregido el 2026-09-18 por Argos: el velo verde estaba escrito como
   `.jb-circulo__fondo::after`, es decir sobre un <img>. Los elementos
   reemplazados NO renderizan ::before/::after, asi que la capa nunca se pinto
   y los titulos quedaban ilegibles sobre la foto. Ahora va sobre el contenedor.
   La intensidad se ajusta desde /admin/themes -> velo_circulos. */
.jb-circulos { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; margin-top: 2.5rem; }
.jb-circulo { position: relative; aspect-ratio: 1 / 1; border-radius: 50%; overflow: hidden;
    display: grid; place-items: center; }
.jb-circulo::after { content: ''; position: absolute; inset: 0; z-index: 0;
    background: color-mix(in srgb, var(--jb-verde-oscuro) var(--jb-velo-circulos, 55%), transparent); }
.jb-circulo__fondo { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.jb-circulo__capa { position: relative; z-index: 1; text-align: center; padding: 1.6rem;
    width: 100%; height: 100%; display: flex; flex-direction: column;
    align-items: center; justify-content: center; gap: 1.1rem; }
.jb-circulo__titulo { color: #fff; margin: 0; font-size: 1.2rem; font-weight: 600;
    line-height: 1.25; text-shadow: 0 1px 3px rgba(0,0,0,.35); }
.jb-circulo .jb-boton { margin-top: 0; }

/* Detalle de servicio */
.jb-servicio__grid { display: grid; grid-template-columns: 1.15fr .85fr; gap: 3rem; align-items: start; }
.jb-ficha { background: #fff; border-radius: 10px; padding: 2rem; position: sticky; top: 6rem; }
.jb-ficha__titulo { margin: 0 0 1.5rem; color: var(--jb-verde-oliva); font-size: 1.15rem; }
.jb-ficha__lista { display: grid; grid-template-columns: 1fr 1fr; gap: 1.4rem 1.5rem; margin: 0; }
.jb-ficha__fila--completo { grid-column: 1 / -1; }
.jb-ficha__lista dt { font-family: var(--jb-fuente-titulos); font-size: .74rem; font-weight: 600;
  letter-spacing: .14em; text-transform: uppercase; opacity: .8; margin-bottom: .35rem; }
.jb-ficha__lista dd { margin: 0; }
.jb-ficha__valor--destacado { font-family: var(--jb-fuente-titulos); font-weight: var(--jb-peso-titulos);
  font-size: 1.25rem; }
.jb-ficha__pregunta { font-weight: 600; margin-top: 1.8rem; }
.jb-ficha__respuesta { font-weight: 600; }
.jb-ficha .jb-boton { margin-top: 1.5rem; }

/* Galeria */
.jb-galeria { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: .4rem; }
.jb-galeria__pieza { margin: 0; }
.jb-galeria__pieza img { width: 100%; height: 100%; aspect-ratio: 1 / 1; object-fit: cover; display: block; }

/* Logos */
.jb-logos { list-style: none; padding: 0; margin: 2.5rem 0 0;
  display: grid; grid-template-columns: repeat(var(--jb-logos-columnas, 6), 1fr);
  gap: 2.5rem 2rem; align-items: center; justify-items: center; }
.jb-logos__pieza img { max-width: 140px; max-height: 80px; width: auto; height: auto; object-fit: contain; }

/* Cita */
.jb-cita { background: var(--jb-verde-claro); border-radius: 10px; padding: 2rem; }
.jb-cita blockquote { border: 0; background: transparent; margin: 0; padding: 0; }
.jb-cita__titulo { font-family: var(--jb-fuente-titulos); font-weight: var(--jb-peso-titulos);
  text-transform: uppercase; letter-spacing: .04em; text-align: center; margin: 0 0 1rem;
  font-size: 1rem; }
.jb-cita__texto { text-align: center; font-size: .75rem; }
.jb-cita__autor { text-align: center; margin-top: 1rem; }
.jb-cita--bloque { width: min(680px, calc(100% - 3rem)); margin: 3rem auto; }
.jb-cita--columna { align-self: start; }

/* Bloque de enfoque: acordeon a dos tercios y cita a un tercio, como el diseño
   original. Sin cita, el acordeon ocupa todo el ancho. */
.jb-faq-bloque__grid--con-cita { display: grid; grid-template-columns: 2fr 1fr; gap: 2.5rem; align-items: start; }
@media (max-width: 820px) {
  .jb-faq-bloque__grid--con-cita { grid-template-columns: 1fr; }
}

/* Preguntas frecuentes */
.jb-faq { margin-top: 2rem; display: grid; gap: .8rem; }
.jb-faq__item { background: #fff; border-radius: 8px; padding: 1rem 1.4rem; }
.jb-faq__pregunta { font-family: var(--jb-fuente-titulos); font-weight: 600; cursor: pointer;
  list-style: none; display: flex; justify-content: space-between; align-items: center; gap: 1rem; }
.jb-faq__pregunta::-webkit-details-marker { display: none; }
.jb-faq__pregunta::after { content: "\25BE"; transition: transform .2s; }
.jb-faq__item[open] .jb-faq__pregunta::after { transform: rotate(180deg); }
.jb-faq__respuesta { padding-top: .8rem; }

/* Llamada a la accion */
.jb-cta { padding: 4rem 0; }
.jb-cta__titulo { margin-top: 0; }
.jb-cta__texto { max-width: 62ch; margin-inline: auto; }

/* Bloque de cierre: medidas tomadas del diseno original (original-ghl/), no
   estimadas. Titular 36px/45px y texto 16px, ambos en blanco sobre el oliva. */
.jb-fondo-oliva.jb-cta .jb-cta__titulo { color: #fff; font-size: 2.25rem; line-height: 2.8125rem; }
.jb-fondo-oliva.jb-cta .jb-cta__texto { color: #fff; font-size: 1rem; }

/* Recorrido academico */
.jb-formacion__bloque { display: grid; grid-template-columns: 240px 1fr; gap: 2rem;
  padding: 2.5rem 0; border-top: 1px solid color-mix(in srgb, var(--jb-verde-oscuro) 25%, transparent); }
.jb-formacion__rotulo { font-family: var(--jb-fuente-titulos); font-weight: var(--jb-peso-titulos);
  letter-spacing: .1em; text-transform: uppercase; font-size: .85rem; display: grid; gap: .4rem; align-content: start; }
.jb-formacion__lista { list-style: none; padding: 0; margin: 0; display: grid; gap: 1.4rem; }
.jb-formacion__titulo { margin: 0 0 .25rem; font-size: 1.02rem; }
.jb-formacion__detalle { margin: 0; font-size: .92rem; opacity: .85; }

/* Contacto */
.jb-contacto__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 3.5rem; align-items: start; }
.jb-contacto__lista { list-style: none; padding: 0; margin: 2rem 0 0; display: grid; gap: 1.8rem; }
.jb-contacto__dato { display: flex; gap: 1.2rem; align-items: flex-start; }
.jb-contacto__icono { flex: 0 0 auto; width: 2.8rem; height: 2.8rem; }
.jb-contacto__icono img { width: 100%; height: 100%; }
.jb-contacto__etiqueta { font-family: var(--jb-fuente-titulos); font-size: .74rem; font-weight: 600;
  letter-spacing: .14em; text-transform: uppercase; opacity: .8; margin: 0 0 .2rem; }
.jb-contacto__valor { font-weight: 600; margin: 0; }
.jb-contacto__nota { font-size: .88rem; opacity: .85; margin: .2rem 0 0; }
.jb-contacto__formulario { background: #fff; border-radius: 10px; padding: 2.4rem; }
.jb-contacto__formulario input[type=text], .jb-contacto__formulario input[type=email],
.jb-contacto__formulario input[type=tel], .jb-contacto__formulario select,
.jb-contacto__formulario textarea { width: 100%; padding: .7rem .9rem; border-radius: 6px;
  border: 1px solid color-mix(in srgb, var(--jb-verde-oscuro) 25%, transparent);
  font-family: var(--jb-fuente-texto); font-size: 1rem; background: #fff; color: var(--jb-verde-oscuro); }
.jb-contacto__formulario label { display: block; font-weight: 600; font-size: .92rem; margin: 1rem 0 .35rem; }
.jb-contacto__formulario button { width: 100%; }

/* Calendario */
.jb-calendario__marco { margin-top: 2rem; }

/* Pie de pagina */
.jb-pie { background: var(--jb-verde-oscuro); color: #fff; padding: 3.5rem 0 1.5rem; }
.jb-pie a { color: #fff; text-decoration: none; }
.jb-pie a:hover { text-decoration: underline; }
.jb-pie__grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr; gap: 2.5rem; }
.jb-pie__logo { max-width: 180px; height: auto; }
.jb-pie__descripcion { margin: 1.2rem 0; max-width: 40ch; }
.jb-pie__titulo { font-family: var(--jb-fuente-titulos); font-size: .78rem; font-weight: 600;
  letter-spacing: .16em; text-transform: uppercase; color: #fff; margin: 0 0 1.2rem; }
.jb-pie ul { list-style: none; padding: 0; margin: 0; display: grid; gap: .8rem; }
.jb-pie__redes { grid-auto-flow: column; justify-content: start; gap: 1.2rem; }
.jb-pie__redes a { display: inline-flex; align-items: center; justify-content: center;
  width: 2.2rem; height: 2.2rem; border-radius: 4px; background: rgba(255,255,255,.1);
  transition: background .2s; }
.jb-pie__redes a:hover { background: rgba(255,255,255,.2); text-decoration: none; }
.jb-pie__redes i { font-size: 1rem; }
.jb-pie .jb-boton { margin-top: 1.4rem; }
.jb-pie__legal { margin-top: 3rem; padding-top: 1.5rem;
  border-top: 1px solid color-mix(in srgb, #fff 25%, transparent);
  display: flex; flex-wrap: wrap; justify-content: space-between; gap: 1.5rem; align-items: center; }
.jb-pie__legal ul { grid-auto-flow: column; gap: 2.5rem; }
.jb-pie__legal p { margin: 0; }

/* Adaptacion a pantallas pequenas */
@media (max-width: 900px) {
  .jb-hero--imagen .jb-hero__grid,
  .jb-dos-columnas,
  .jb-servicio__grid,
  .jb-contacto__grid { grid-template-columns: 1fr; }
  .jb-texto-imagen--derecha .jb-texto-imagen__media { order: 0; }
  .jb-rejilla, .jb-rejilla--2, .jb-rejilla--4, .jb-circulos { grid-template-columns: 1fr; }
  .jb-logos { grid-template-columns: repeat(3, 1fr); }
  .jb-galeria { grid-auto-flow: row; grid-template-columns: repeat(2, 1fr); }
  .jb-formacion__bloque { grid-template-columns: 1fr; }
  .jb-cita--lateral { float: none; width: auto; margin: 2rem 0; }
  .jb-ficha { position: static; }
  .jb-pie__grid { grid-template-columns: 1fr; }
  .jb-pie__legal ul { grid-auto-flow: row; gap: .8rem; }
  .jb-bloque { padding: 3rem 0; }
}
@media (max-width: 560px) {
  .jb-logos { grid-template-columns: repeat(2, 1fr); }
  .jb-ficha__lista { grid-template-columns: 1fr; }
  .jb-boton { width: 100%; text-align: center; }
}

/* Cabecera: el tema base limita el logotipo a 28px, la mitad de lo que pide la
   maqueta. Se sube sin tocar el tema base. */
#header .navbar-brand img {
  height: 110px;
}
/* Cabecera: medidas tomadas de la captura del original. El contenido va en un
   contenedor de 1170px centrado y la banda mide unos 160px de alto. */
#header .container { width: min(1170px, calc(100% - 3rem)); margin-inline: auto; }
#header { padding-block: 1.5rem; }
@media (max-width: 900px) {
  #header .navbar-brand img { height: 64px; }
  #header { padding-block: .75rem; }
}

/* Correcciones sobre el tema base (2026-09-17).

   1. quark2 dibuja una rayita de 28x3px antes de cada h2 con `h2::before`. La
      desactiva para .text-center, clase que este tema no usa. La maqueta no
      lleva esa rayita en ninguna seccion: se retira en nuestros bloques.
   2. Pico CSS declara `ul li { list-style: square }` sobre el LI, asi que gana
      al `list-style: none` puesto en el UL padre. Por eso salia un cuadradito
      junto a cada logo y en las listas del pie. Se corrige en el li. */
.jb-bloque h2::before,
.jb-pie h2::before {
  display: none;
}
.jb-logos li,
.jb-lista-marcada li,
.jb-galeria li,
.jb-pie ul li,
.jb-circulos li {
  list-style: none;
}

/* La pregunta del acordeon es un h3 dentro del summary: cuenta como encabezado
   para lectores de pantalla, pero conserva el tamaño de texto del acordeon. */
.jb-faq__pregunta h3 { font-size: 1rem; margin: 0; font-weight: 600; }
.jb-faq__pregunta h3::before { display: none; }

/* Boton de la cabecera. Medidas del diseno original: teja, blanco, 15px por
   35px y esquinas redondeadas. */
.jb-boton--cabecera { padding: 15px 35px; border-radius: 6px; white-space: nowrap; }
#header .navbar-section.actions { display: flex; align-items: center; gap: 1rem; }
@media (max-width: 900px) {
  .jb-boton--cabecera { padding: 10px 18px; font-size: .85rem; }
}

@media (max-width: 900px) {
  .jb-logos { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 520px) {
  .jb-logos { grid-template-columns: repeat(2, 1fr); }
}

/* Corregido el 2026-09-18 por Argos.
   1) DOS flechas superpuestas en el acordeon: Pico CSS (blades.min.css, el
      framework del tema base) pinta la suya en `details summary::after` con una
      imagen de fondo, y este tema pintaba otra con content. Aqui se anula la de
      Pico -fondo, tamano, float y su rotate del estado [open]- y se deja una.
   2) La cita lateral subia 2rem sobre las preguntas porque `.jb-faq` llevaba
      margin-top y el <aside> no. El aire pasa al contenedor del grid. */
.jb-faq-bloque__grid--con-cita > .jb-faq { margin-top: 0; }
.jb-faq-bloque__grid--con-cita { margin-top: 2rem; }

.jb-faq__item > .jb-faq__pregunta::after {
  content: "\25BE";
  background: none; background-image: none;
  width: auto; height: auto; min-width: 0; min-height: 0;
  margin: 0; padding: 0; float: none; display: inline-block;
  transform: rotate(0deg); transition: transform .2s;
}
.jb-faq__item[open] > .jb-faq__pregunta::after { transform: rotate(180deg); }

/* Corregido el 2026-09-18 por Argos.
   Los titulos de los circulos de servicios salian en verde oscuro sobre la foto.
   Causa: `.jb-fondo-oliva h3` (0-1-1) gana en especificidad a `.jb-circulo__titulo`
   (0-1-0), y el bloque de servicios tiene fondo oliva. No habia ningun !important:
   simplemente ganaba la regla del fondo. Se sube la especificidad del titulo, que
   va sobre una foto y debe ser blanco siempre. Lo mismo para el boton. */
.jb-fondo-oliva .jb-circulo__titulo,
.jb-bloque .jb-circulo__titulo { color: #fff; }

/* Anadido el 2026-09-18 por Argos.
   El velo general (.jb-circulo::after) depende de lo clara que sea cada foto, y
   con titulos de dos lineas el contraste no siempre basta. Este degradado va
   DETRAS DEL TEXTO, dentro del circulo, e iguala los tres sea cual sea la
   imagen. No sustituye al velo: lo refuerza donde hace falta. */
.jb-circulo__capa::before {
  content: ''; position: absolute; inset: 0; z-index: -1; border-radius: 50%;
  background: radial-gradient(ellipse at center,
      rgba(0,0,0,.45) 0%, rgba(0,0,0,.28) 55%, rgba(0,0,0,0) 78%);
}
.jb-circulo__titulo { text-wrap: balance; max-width: 82%; margin-inline: auto; }

/* ===========================================================================
   AUDITORIA DE CONFLICTOS CON EL TEMA BASE — Argos, 2026-09-18
   Encargo de Flavio: buscar en todo el sitio los fallos de este tipo.

   CLASE DE ERROR: quark2 y Pico CSS fijan propiedades sobre ELEMENTOS DESNUDOS
   (p, li, ul, h1-h6, a, blockquote, address, ol, table). Una regla directa gana
   SIEMPRE a un valor heredado, por poca especificidad que tenga. Asi que cada
   vez que este tema pone el color en un contenedor y espera que los hijos lo
   hereden, el tema base lo pisa sin que se note al leer este fichero.

   Reglas del tema base implicadas, medidas el 2026-09-18:
     theme.css        h1..h6 {color}   p,li {color}   a {color}   h2::before {...}
     blades.min.css   address,blockquote,dl,ol,p,pre,table,ul {color}
   =========================================================================== */

/* 1. PIE. `.jb-pie { color:#fff }` solo se heredaba, y `p,li {color:var(--q2-text)}`
      lo pisaba: el texto salia verde oscuro sobre fondo verde oscuro, invisible.
      Sintoma reportado: "Acompanamiento psicologico con enfoque interseccional"
      no se leia. Los enlaces si se veian porque `.jb-pie a` es regla directa. */
.jb-pie, .jb-pie p, .jb-pie li, .jb-pie ul, .jb-pie ol,
.jb-pie address, .jb-pie blockquote, .jb-pie span, .jb-pie small,
.jb-pie h1, .jb-pie h2, .jb-pie h3, .jb-pie h4 { color: #fff; }
.jb-pie__descripcion, .jb-pie__legal p, .jb-pie__legal li { color: rgba(255,255,255,.88); }

/* 2. FONDOS OSCUROS. `.jb-fondo-oscuro` cubria h1,h2,h3,p pero NO li, ni ol,
      ni address, ni blockquote. */
.jb-fondo-oscuro li, .jb-fondo-oscuro ul, .jb-fondo-oscuro ol,
.jb-fondo-oscuro address, .jb-fondo-oscuro blockquote,
.jb-fondo-oscuro h4, .jb-fondo-oscuro h5, .jb-fondo-oscuro h6 { color: #fff; }

/* 3. LA RAYITA DE quark2. `h2::before` pinta un guion de 28x3px sobre CADA h2,
      con margin-bottom .7rem. Es `display:block`, asi que empuja el titulo y lo
      descuadra respecto a lo que tenga al lado. El tema solo la desactivaba
      dentro de .jb-bloque y .jb-pie; cualquier h2 fuera de esos dos la conserva.
      Este diseno no usa esa rayita en ningun sitio: se retira globalmente.
      Sintomas: rayitas sueltas en Inicio, y los h2 desalineados de
      Colaboraciones y del pie. */
h2::before, h3::before, h4::before, h5::before, h6::before { display: none !important; }

/* 4. SANGRADO DE LISTAS. El navegador aplica `padding-inline-start` (propiedad
      LOGICA) y el tema reseteaba con `padding:0` (FISICA). Se resetea tambien la
      logica, y el margen que Pico pone via `--pico-typography-spacing-*`. */
.jb-pie ul, .jb-pie ol,
.jb-logos, .jb-lista-marcada, .jb-galeria, .jb-circulos,
.jb-faq, .jb-ficha__lista {
  padding-inline-start: 0; margin-inline-start: 0; margin-block: 0;
}
.jb-pie li, .jb-logos li, .jb-lista-marcada li { margin-bottom: 0; }

/* 5. CITAS. Pico fija `blockquote {color; margin; padding}` y
      `blockquote footer {color: var(--pico-blockquote-footer-color)}`, que pisaba
      el autor de la cita. */
.jb-cita blockquote, .jb-cita blockquote p, .jb-cita blockquote footer,
.jb-cita__autor { color: var(--jb-verde-oscuro); }

/* 6. LA COLUMNA DE NAVEGACION DEL PIE. Encontrado el 2026-09-18 tras un primer
      diagnostico equivocado por mi parte: no era el sangrado de la lista.
      La columna de NAVEGACION es un <nav> y la de CONTACTO un <div>. Pico CSS
      estiliza el elemento `nav` sin pedir permiso:

        nav, nav ul { display: flex }
        nav         { justify-content: space-between }
        nav li      { display: inline-block; padding: ... }

      Es decir, convierte el <nav> en flex y manda el <h2> y el <ul> a extremos
      OPUESTOS de la fila. Por eso NAVEGACION quedaba a la izquierda y sus
      enlaces desplazados a la derecha, mientras CONTACTO, que es un <div>,
      salia bien. Aqui se devuelve el <nav> a comportamiento de bloque. */
.jb-pie__columna,
.jb-pie nav { display: block; justify-content: normal; }
.jb-pie nav ul { display: grid; align-items: stretch; }
.jb-pie nav li { display: list-item; padding: 0; margin: 0; }
.jb-pie__redes { display: grid; grid-auto-flow: column; justify-content: start; }
.jb-pie__redes li { display: inline-flex; padding: 0; }

/* 7. MEDIDAS DE IMAGEN DECLARADAS A MANO Y FALSAS. Medido el 2026-09-18:
      TODAS las <img> de las plantillas escriben width/height fijos que no
      corresponden al fichero real.

        colaboracion_3.jpg   declarada 800x800   real 2496x1920  (1.30 : 1)
        cuerdas-rojas.jpg    declarada 800x800   real 1440x960   (1.50 : 1)
        los 26 logos         declarada 200x120   real 150x150    (1.00 : 1)

      El navegador reserva el hueco con la proporcion DECLARADA para maquetar
      antes de descargar la imagen. Cuando llega y no coincide, el hueco cambia
      de altura y lo de al lado queda descolocado. Sintomas: el bloque de
      "Colaborar con otres profesionales" desalineado respecto a su foto, y los
      logos rompiendo a segunda fila.

      Arreglo de CSS: se ignora la proporcion declarada y se deja que mande la
      real. Lo correcto de fondo es que las plantillas Twig lean las medidas de
      `page.media[...]` en vez de escribirlas a mano, y eso queda anotado como
      pendiente en la auditoria. */
.jb-texto-imagen__media img,
.jb-media--rectangular img { height: auto; aspect-ratio: auto; }
.jb-logos img { width: auto; height: auto; max-width: 150px; max-height: 80px;
                aspect-ratio: auto; object-fit: contain; }

/* 8. REGRESION MIA, misma sesion: al resetear los margenes de las listas del pie
      arrastre `.jb-lista-marcada li`, que SI necesita su separacion de .7rem
      (linea 85). Se restituye. */
.jb-lista-marcada li { margin-bottom: .7rem; }

/* 9. `align-items: flex-start` es valor de flexbox; en grid lo correcto es
      `start`. Los navegadores lo aceptan, pero se deja escrito como toca. */
.jb-dos-columnas { align-items: start; }

/* ---------------------------------------------------------------------------
   CARRUSEL — portado del original de GoHighLevel el 2026-09-18 por Argos.
   Seccion "Mi historia" de /sobre-mi, que en la web construida no existia.

   Sin libreria: es scroll horizontal con `scroll-snap`. Funciona SIN JavaScript
   (dedo, rueda, teclado) y los botones son un anadido progresivo: nacen ocultos
   y el script los muestra solo si puede manejarlos.
   --------------------------------------------------------------------------- */
.jb-carrusel-bloque .jb-carrusel__titulos { margin-bottom: 1.5rem; }
.jb-carrusel__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem; align-items: center; }
.jb-carrusel--izquierda .jb-carrusel { order: -1; }
.jb-carrusel--solo .jb-carrusel__grid { grid-template-columns: 1fr; }
@media (max-width: 820px) {
  .jb-carrusel__grid { grid-template-columns: 1fr; gap: 2rem; }
  .jb-carrusel--izquierda .jb-carrusel { order: 0; }
}

.jb-carrusel { position: relative; }
.jb-carrusel__pista {
  display: grid; grid-auto-flow: column; grid-auto-columns: 100%;
  gap: 0; overflow-x: auto; scroll-snap-type: x mandatory;
  border-radius: 10px; scrollbar-width: none; -webkit-overflow-scrolling: touch;
}
.jb-carrusel__pista::-webkit-scrollbar { display: none; }
.jb-carrusel__pista:focus-visible { outline: 3px solid var(--jb-teja); outline-offset: 3px; }
.jb-carrusel__lamina { margin: 0; scroll-snap-align: center; }
.jb-carrusel__lamina img {
  display: block; width: 100%; height: 100%; aspect-ratio: 4 / 3;
  object-fit: cover; border-radius: 10px;
}

.jb-carrusel__flecha {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 2;
  width: 2.6rem; height: 2.6rem; border: 0; border-radius: 50%; cursor: pointer;
  background: rgba(255,255,255,.92); color: var(--jb-verde-oscuro);
  font-size: 1.5rem; line-height: 1; display: grid; place-items: center;
  box-shadow: 0 2px 8px rgba(0,0,0,.18); transition: background .2s;
}
.jb-carrusel__flecha:hover { background: #fff; }
.jb-carrusel__flecha:focus-visible { outline: 3px solid var(--jb-teja); outline-offset: 2px; }
.jb-carrusel__flecha[disabled] { opacity: .35; cursor: default; }
.jb-carrusel__flecha--izq { left: .7rem; }
.jb-carrusel__flecha--der { right: .7rem; }

.jb-carrusel__puntos { display: flex; justify-content: center; gap: .5rem; margin-top: .9rem; }
.jb-carrusel__puntos span {
  width: .5rem; height: .5rem; border-radius: 50%;
  background: var(--jb-verde-oscuro); opacity: .25; transition: opacity .2s;
}
.jb-carrusel__puntos span.activo { opacity: .9; }

@media (prefers-reduced-motion: reduce) {
  .jb-carrusel__pista { scroll-behavior: auto; }
}

/* Titulares dentro de la columna de texto (opcion titulos_en_columna).
   Como el original: el antetitulo y el titular se alinean con el texto, no
   centrados sobre las dos columnas. Argos, 2026-09-18. */
.jb-texto-imagen__texto > .jb-antetitulo { margin: 0 0 .4rem; text-align: left; }
.jb-texto-imagen__titular { margin: 0 0 1.2rem; font-size: 1.75rem; line-height: 1.2; }

/* ===========================================================================
   PARIDAD CON EL ORIGINAL GHL — Argos, 2026-09-18
   Medido con Playwright sobre ambas paginas, no estimado.
   El rotulo de los circulos era ilegible por PESO (600 frente a 700 del
   original), no por falta de velo: nuestro velo ya era MAS oscuro que el
   original (luminancia 108,6 frente a 143,6). Se igualan las cuatro
   propiedades medidas y se retiran los dos refuerzos que el original no
   lleva (sombra de texto y degradado radial), que solo ensuciaban la foto.
   =========================================================================== */
.jb-circulo__titulo,
.jb-fondo-oliva .jb-circulo__titulo,
.jb-bloque .jb-circulo__titulo {
  font-size: 20px;
  font-weight: 700;
  letter-spacing: normal;
  text-shadow: none;
  color: #fff;
}
.jb-circulo__capa::before { content: none; }

/* Velo igualado al original (medido: lum 143,6). Argos 2026-09-18 */
.jb-circulo::after { background: color-mix(in srgb, var(--jb-verde-oscuro) 48%, transparent); }

/* Paridad GHL (Argos 2026-09-18).
   1. El tema base quark2 pinta un recuadro oscuro sobre el enlace activo del
      menu. El original no lo lleva: solo cambia el color del texto.
   2. Las vinetas de "Valores" son un tick redondo verde en el original, no un
      punto rojo. Se pinta con ::marker desactivado y un ::before propio. */
.jb-cabecera nav a.active,
.jb-cabecera nav a[aria-current="page"],
header nav a.active {
  background: none !important;
  color: var(--jb-verde-oscuro);
  font-weight: 600;
}
.jb-lista-marcada li::marker { content: none; }
.jb-lista-marcada li { list-style: none; position: relative; padding-left: 1.7rem; }
.jb-lista-marcada li::before {
  content: '\2713';
  position: absolute; left: 0; top: .12em;
  width: 1.15em; height: 1.15em; border-radius: 50%;
  background: var(--jb-verde-oscuro); color: #fff;
  font-size: .78em; line-height: 1.15em; text-align: center;
}

/* Navegacion: paridad exacta con el original (Argos 2026-09-18, medido).
   En el original el enlace de la pagina activa NO se distingue del resto:
   mismo color rgb(52,67,58), peso 400 y 14px en los cinco. Nuestro activo
   era BLANCO — invisible sobre el fondo claro en cuanto se quito el recuadro
   oscuro del tema base, que era lo unico que lo hacia legible. */
.jb-cabecera nav a,
.jb-cabecera nav a.active,
.jb-cabecera nav a[aria-current="page"],
header nav a, header nav a.active {
  color: rgb(52, 67, 58) !important;
  background: none !important;
  font-weight: 400 !important;
  font-size: 14px !important;
}

/* Tick de "Valores" dibujado en SVG (Argos 2026-09-18).
   El intento anterior usaba el caracter U+2713; Montserrat no lo tiene y el
   navegador pintaba un glifo de reemplazo. Un SVG incrustado no depende de
   que la fuente traiga el simbolo. */
.jb-lista-marcada li::before {
  content: '' !important;
  position: absolute; left: 0; top: .2em;
  width: 1.05em; height: 1.05em; border-radius: 0;
  background: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Ccircle cx='10' cy='10' r='10' fill='%2334433a'/%3E%3Cpath d='M5.5 10.3l3 3 6-6.4' fill='none' stroke='%23fff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center / contain;
  box-shadow: none;
}
