/* ============================================================================
   modulo.css — cáscara corporativa para los módulos que traen su propio estilo.

   POR QUÉ EXISTE. Los tres visores de mapa y el visor SATURN son exportaciones con su
   maqueta y su paleta propias (Overpass, fondo #252525, acento azul #4393c3 en SATURN y
   verde limón #d2e962 en los visores de mapa). Reconvertirlos entero no vale el riesgo: SATURN pesa
   1,54 MB con los datos incrustados y cada visor de mapa repite su maqueta dentro de cinco
   @media. Esta hoja hace lo acotado y de bajo riesgo: pone el MISMO banner superior e
   inferior que el resto del sitio, en claro, y deja intacto el cuerpo del visor.

   Se enlaza DESPUÉS de la hoja propia de cada módulo, para ganar por orden de cascada sin
   necesidad de !important salvo donde el estilo original usa selectores más específicos.

   La paleta es la medida sobre solutiva.com: texto #1a1a1a, secundario #555555, acento
   verde #8caa20, gris de sección #f5f5f5, esquinas rectas.
   ============================================================================ */

:root{
  --tx:#1a1a1a; --tx2:#555555; --tx3:#8a8a8a;
  --ac:#8caa20; --ac-dark:#5f7417; --bg:#ffffff; --bg2:#f5f5f5; --linea:#e3e3e3; --dark:#1a1a1a;
}

/* ---------- banner superior ----------
   El MISMO encabezado de presupuesto/ y evaluacion/: logo de color sobre fondo
   claro, "TODOS LOS EJEMPLOS" dentro del encabezado y sin banda de miga. Esos
   modulos lo toman del styles.css de la raiz; los visores de mapa no lo enlazan, asi
   que aqui se replican sus mismas medidas (logo 46 px, alto 68 px, ancho 1180).
   El export declara header{display:flex;height:70px} en cada @media: se anula. */
body > header{
  position:sticky !important; top:0; z-index:1100;   /* sobre los paneles de Leaflet (400+) */
  display:block !important; height:auto !important; width:100% !important;
  background:var(--bg) !important; color:var(--tx) !important;
  border:0 !important; border-bottom:1px solid var(--linea) !important;
  box-shadow:none !important; padding:0 !important; margin:0 !important; min-height:0 !important;
  font-family:"Montserrat",-apple-system,"Segoe UI",Arial,sans-serif; line-height:1.6;
}
/* El export declara html,body{overflow-x:hidden}. Eso convierte a body en contenedor de
   desplazamiento y el sticky queda atado a el, que no se desplaza: el encabezado se iba
   con la pagina. overflow-x:clip recorta igual el exceso lateral sin crear contenedor. */
html, body{ overflow-x:clip !important; overflow-y:visible !important; }
body > header .in{
  max-width:1180px; margin:0 auto; padding:0 18px;
  display:flex; align-items:flex-end; justify-content:space-between; gap:16px; flex-wrap:wrap;
  min-height:68px;
}
body > header #solutiva-logo{ display:block; height:46px !important; width:auto !important; max-width:100%; }
body > header .header-nav{ display:flex; gap:26px; flex-wrap:wrap; }
body > header .header-anchor{
  font-family:"Montserrat",-apple-system,"Segoe UI",Arial,sans-serif !important;
  font-size:12px !important; font-weight:600 !important; letter-spacing:.14em !important;
  line-height:1.6; color:var(--tx2) !important; text-decoration:none !important;
  padding:6px 0; border-bottom:2px solid transparent; transition:.15s;
}
body > header .header-anchor:hover{ color:var(--tx) !important; border-bottom-color:var(--ac-dark); text-decoration:none !important; }
body > header .header-anchor:focus-visible{ outline:3px solid var(--ac-dark); outline-offset:3px; }
@media (max-width:560px){
  body > header{ position:static !important; }
  body > header .in{ padding:8px 16px; gap:4px 0; min-height:0; }
  body > header .header-nav{ gap:16px; flex-wrap:nowrap; width:100%; }
  body > header .header-anchor{ font-size:12px !important; letter-spacing:.06em !important; white-space:nowrap; padding:4px 0; }
}

/* ---------- banner inferior ---------- */
body > footer{
  background:var(--dark) !important; color:#9a9a9a !important;
  font-family:"Montserrat",-apple-system,"Segoe UI",Arial,sans-serif !important;
  font-size:12px !important; padding:28px 0 26px !important; margin:0 !important;
  display:block !important;
}
body > footer > *{
  max-width:1180px; margin:0 auto; padding:0 24px;
  background:transparent !important; border:0 !important;
}
body > footer a, body > footer .footer-anchor{
  color:#9a9a9a !important; text-decoration:none; font-size:12px !important;
}
body > footer a:hover, body > footer .footer-anchor:hover{ color:var(--ac) !important; }

/* ---------- el body de los visores de mapa es un flex centrado ----------
   Los tres exports traen body{display:flex;justify-content:center}. Con eso el banner, la
   barra de vuelta y el pie son ITEMS de ese flex y solo toman el ancho de su contenido:
   el encabezado salia de 452 px centrado en una ventana de 1300. Hay que declararlos de
   ancho completo y sin encogerse. Detectado midiendo con getComputedStyle, no a ojo. */
body > header,
body > .nota-ref,
body > footer{ width:100% !important; flex:0 0 auto !important; align-self:stretch; }

/* y el contenido interno vuelve a centrarse dentro de su propio ancho maximo */
/* Sin box-sizing:border-box estos bloques median 100% MAS los 48 px de padding, y
   como los exports de mapa traen overflow-x:hidden esos 48 px no se podian desplazar:
   se perdian. Se acota a estos selectores y no se declara global, para no alterar
   el calculo de ancho del resto del export. */
body > header, body > header *,
body > .nota-ref, body > .nota-ref *,
body > footer, body > footer *{ box-sizing:border-box; }

body > header .in,
body > .nota-ref .in,
body > footer > *{ width:100%; }

/* ---------- nota de material referencial ----------
   Va en TODAS las hojas del visor, justo bajo el banner. El visor muestra formato de
   entrega con datos de estudios anteriores, y quien llegue por un enlace directo a un
   modulo tiene que leerlo ahi mismo, no en el indice. */
.nota-ref{ background:#fbf6e4; border-top:1px solid #ece2bf; border-bottom:1px solid #ece2bf;
  font-family:"Montserrat",-apple-system,"Segoe UI",Arial,sans-serif; }
.nota-ref .in{ max-width:1180px; margin:0 auto; padding:9px 24px;
  font-size:12.5px; line-height:1.5; color:#5c5433; }
.nota-ref b{ color:#3d3720; }
@media (max-width:560px){ .nota-ref .in{ padding:8px 16px; font-size:12px; } }

/* ============================================================================
   TEMA CLARO DE LOS VISORES DE MAPA
   Los tres exports de qgis2web traen su tema oscuro completo (fondo rgb(29,29,29),
   .project-title-container #252525, .category-title #363636, #copyright-section negro)
   y lo REPITEN dentro de cinco @media cada uno. Corregirlo breakpoint por breakpoint son
   quince bloques por archivo; se hace aqui una sola vez porque esta hoja se enlaza DESPUES
   de la propia de cada modulo, asi que gana por orden de cascada. Va con !important solo
   donde el original usa selectores mas especificos o vive dentro de un @media.
   ============================================================================ */
body{ background:var(--bg) !important; color:var(--tx) !important; }

.project-title-container{
  background:var(--bg2) !important; color:var(--tx) !important;
  border-bottom:1px solid var(--linea) !important; }
.project-title-container *{ color:var(--tx) !important; }

.category-title{
  background:var(--bg2) !important; color:var(--tx) !important;
  border-bottom:1px solid var(--linea) !important; }

#bottom-result1,#bottom-result2,#bottom-result3,
#bottom-result1 *,#bottom-result2 *,#bottom-result3 *{ color:var(--tx) !important; }

.total-container{ background:var(--bg2) !important; color:var(--tx) !important; }
#left-info,#left-info *{ color:var(--tx) !important; }


/* Los contenedores y paneles del export, para que no queden islas oscuras */
.leaflet-container{ background:#eceae5 !important; }
.leaflet-control-layers,.leaflet-bar,.leaflet-bar a,
.leaflet-control-layers-expanded{
  background:var(--bg) !important; color:var(--tx) !important;
  border-color:var(--linea) !important; }
.leaflet-bar a:hover{ background:var(--bg2) !important; }
.leaflet-popup-content-wrapper,.leaflet-popup-tip{
  background:var(--bg) !important; color:var(--tx) !important; }

/* Esquinas rectas: el export usa 4 y 5 px */
.project-title-container,.category-title,.total-container,
.leaflet-control-layers,.leaflet-bar{ border-radius:0 !important; }

/* ============================================================================
   DUPLICADOS Y PANELES VACIOS DE LOS EXPORTS DE MAPA
   Tres defectos que venian del export y que el usuario detecto en pantalla:

   1. SELECTOR DE CAPAS DUPLICADO. El export trae DOS controles para las mismas capas:
      la columna de botones .btn-list, que es la propia del modulo, con muestra de color y
      estado presionado (onclick -> toggleLayerVisibility), y encima del mapa el control
      por omision de la libreria ol-layerswitcher, que la crea en tiempo de ejecucion.
      Se oculta el de la libreria y se conserva el propio: se pierde cero funcion, porque
      la columna de botones cubre tambien el mapa base.

   2. PANELES DE GRAFICO VACIOS. En Etapa 2 los div chartOne/chartTwo/chartThree existen y
      NADIE los dibuja: cero llamadas a Plotly en el archivo. En Mapa TEL es al revés, hay
      ocho llamadas a createChart(chartOne, ...) y ningun elemento con ese id, de modo que
      cada llamada lanza un error de referencia. En los dos casos el resultado es el mismo:
      cajas vacias. Se ocultan; no se inventan graficos con datos de otro estudio.

   3. DOS PIES APILADOS. El export traia su propio <footer> de siete enlaces mas una banda
      #copyright-section. Ya no se ocultan: se eliminaron del markup de los tres visores.
   ============================================================================ */
.layer-switcher{ display:none !important; }
/* Se oculta SOLO donde no hay quien la dibuje. En el catastro los graficos si se
   generan una vez que sus contenedores tienen id, asi que ahi la seccion queda visible;
   la regla vive ahora en el propio Etapa 2, que no tiene ninguna llamada a Plotly. */

/* ============================================================================
   ENCABEZADO DEL MODULO: de ancho fijo a fluido
   Los exports de qgis2web fijan .project-title-container en pixeles por cada
   breakpoint (310, 375, 747, 1010 y 1557 px) con height:100px, y le meten un
   gap de 500 a 700 px para empujar el bloque de zona a la derecha. Cuando el
   titulo ocupa dos lineas -- "Catastro de Infraestructura y Actividades" -- el
   contenido no cabe en los 100 px y "Zona de Estudio" se pisa con el nombre de
   la zona. Ademas el ancho de 1557 px deja la caja fuera de la grilla en
   pantallas menores.
   Se corrige aqui una sola vez para los tres modulos de mapa.
   ============================================================================ */
.project-title-container{
    width:auto !important;
    max-width:100% !important;
    height:auto !important;
    min-height:76px;
    gap:24px !important;
    justify-content:space-between !important;
    align-items:center !important;
    margin:0 !important;
    padding:14px 20px !important;
    box-sizing:border-box !important;
}
.project-title-container h1{
    flex:1 1 auto;
    min-width:0;            /* sin esto el titulo largo no deja encoger la caja */
    margin:0;
    text-wrap:balance;
}
.project-zone{
    /* El export declara display:flex y flex-direction:column SOLO dentro de sus
       cinco @media. Fuera de esos anchos la caja pierde el layout y "Zona de
       Estudio" queda dibujado encima del nombre de la zona, sobre la misma linea
       base. Se declara aqui sin depender de que calce un breakpoint. */
    display:flex !important;
    flex-direction:column !important;
    align-items:flex-end !important;
    flex:0 0 auto;
    gap:2px !important;
    margin-bottom:0 !important;
    text-align:right !important;
}
.project-zone h3,
.project-zone span{
    /* El export declara un h3{height:0} GLOBAL en sus cinco breakpoints, de modo
       que el texto de "Zona de Estudio" se sale de su caja y se dibuja encima del
       nombre de la zona. Aqui la especificidad (0,1,1) le gana al h3 pelado. */
    height:auto;
    margin:0;
    white-space:nowrap;     /* "Zona de Estudio" en una linea, nunca partido */
    line-height:1.25;
}

/* ============================================================================
   PIE: alto fijo de 600 px del export
   El styles.css de los exports declara footer{height:600px} en sus cinco
   breakpoints. El contenido del pie corporativo ocupa 194 px, asi que sobraban
   400 px de vacio oscuro al final de cada modulo, que es lo que se leia como
   "raro" al pasar a tema claro. Se deja que el alto lo fije el contenido.
   ============================================================================ */
body > footer{
    height:auto !important;
    min-height:0 !important;
}

/* ============================================================================
   PIE IGUAL AL DE LA PORTADA
   Los modulos no enlazan el styles.css de la raiz, de modo que las reglas del
   pie de la portada no llegaban: sin "footer .in{display:flex}" las tres
   columnas se apilaban en una sola, y sin las reglas de .brand y .foot-note el
   bloque quedaba plano y sin separador. Se replican aqui las mismas
   declaraciones que usa la portada, para que el pie sea el mismo objeto.
   ============================================================================ */
body > footer{
    padding:38px 0 34px !important;
    font-size:13.5px !important;
}
body > footer .in{
    display:flex !important;
    justify-content:space-between !important;
    gap:26px !important;
    flex-wrap:wrap !important;
}
body > footer .in.foot-note{
    display:block !important;
    border-top:1px solid #333 !important;
    margin-top:26px !important;
    padding-top:18px !important;
    font-size:12px !important;
    color:#7a7a7a !important;
}
body > footer .brand{
    font-family:"Montserrat",-apple-system,"Segoe UI",Arial,sans-serif !important;
    color:#fff !important;
    font-weight:600 !important;
    font-size:15px !important;
    margin-bottom:7px !important;
}
body > footer a{
    color:#9a9a9a !important;
    text-decoration:none !important;
}
body > footer a:hover{ color:var(--ac) !important; }

/* ---------- encabezado de la portada nueva (../portada.css, .top) ----------
   Barra pegajosa de 76 px, blanco translucido con desenfoque, logo
   solutiva-20-original y navegacion en mayusculas espaciadas en carbon.
   Va al final para ganarle en orden a las reglas antiguas del encabezado. */
body > header{
  position:sticky !important; top:0 !important; z-index:1100 !important;
  display:block !important; width:100% !important; height:auto !important; min-height:0 !important;
  margin:0 !important; padding:0 !important; box-shadow:none !important;
  background:rgba(255,255,255,.88) !important;
  -webkit-backdrop-filter:blur(12px); backdrop-filter:blur(12px);
  border:0 !important; border-bottom:1px solid #D6D6D5 !important;
  font-family:"Montserrat",system-ui,sans-serif; line-height:1.6;
}
body > header, body > header *{ box-sizing:border-box; }
body > header .in{
  max-width:1200px !important; width:100%; margin:0 auto !important; padding:0 24px !important;
  display:flex !important; align-items:center !important; justify-content:space-between !important;
  flex-wrap:nowrap !important; gap:24px !important; height:76px !important; min-height:0 !important;
}
body > header #solutiva-logo{ display:block; height:40px !important; width:auto !important; max-width:100%; }
body > header .header-nav{ display:flex !important; gap:32px !important; flex-wrap:nowrap !important; width:auto !important; }
body > header .header-anchor{
  font-family:"Montserrat",system-ui,sans-serif !important;
  font-size:12px !important; font-weight:700 !important; letter-spacing:.14em !important;
  text-transform:uppercase; line-height:1.6 !important; white-space:nowrap;
  color:#5C5C5C !important; text-decoration:none !important;
  padding:0 !important; border:0 !important; transition:color .15s;
}
body > header .header-anchor:hover{ color:#5F7316 !important; border:0 !important; text-decoration:none !important; }
body > header .header-anchor:focus-visible{ outline:3px solid #5F7316; outline-offset:3px; }
@media (max-width:960px){
  body > header .header-nav{ gap:20px !important; }
}
/* En telefono no caben logo y dos enlaces en 76 px: el encabezado deja de ser
   pegajoso (no tapa la pagina) y los enlaces bajan a una segunda linea. */
@media (max-width:640px){
  body > header{ position:static !important; }
  body > header .in{ height:auto !important; padding:12px 16px !important; flex-wrap:wrap !important; gap:8px 0 !important; }
  body > header #solutiva-logo{ height:34px !important; }
  body > header .header-nav{ width:100% !important; gap:18px !important; }
  body > header .header-anchor{ font-size:11px !important; letter-spacing:.1em !important; }
}
