/* =========================================================================
   estilos.css — Sistema visual del micrositio.
   Paleta corporativa: #14354E (principal), #FFC100, #034175, #a8301c.
   Tipografía: Gotham (principal) y Avenir (secundaria), con degradación a
   Montserrat y a la pila sans-serif del sistema.
   ========================================================================= */

/* Montserrat como sustituto de Gotham cuando la fuente corporativa no está
   instalada. Si no hay conexión, la pila cae al sans-serif del sistema. */
@import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&display=swap");

:root {
  --principal: #14354E;
  --principal-claro: #1E4A6B;
  --secundario: #FFC100;
  --azul: #034175;
  --rojo: #a8301c;
  --tinta: #0E2233;
  --texto: #2B3B49;
  --texto-suave: #63748A;
  --borde: #DCE3EA;
  --fondo: #F4F7FA;
  --superficie: #FFFFFF;
  --neutro: #9AA5B1;

  --fuente: "Gotham", "Montserrat", "Segoe UI", system-ui, -apple-system, sans-serif;
  --fuente-sec: "Avenir", "Avenir Next", "Montserrat", "Segoe UI", sans-serif;

  --radio: 10px;
  --sombra: 0 1px 2px rgba(20, 53, 78, .06), 0 4px 16px rgba(20, 53, 78, .06);
  --sombra-alta: 0 8px 28px rgba(20, 53, 78, .16);
  --ancho: 1560px;
}

* { box-sizing: border-box; }

html { scroll-behavior: smooth; }

body {
  margin: 0;
  font-family: var(--fuente);
  font-size: 15px;
  line-height: 1.5;
  color: var(--texto);
  background: var(--fondo);
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4 { font-family: var(--fuente); margin: 0; line-height: 1.25; }

code {
  font-family: "Consolas", "SF Mono", ui-monospace, monospace;
  font-size: .88em;
  background: rgba(20, 53, 78, .07);
  padding: .1em .35em;
  border-radius: 4px;
}

/* ------------------------------------------------------------ Encabezado */
.cabecera {
  background: linear-gradient(135deg, var(--principal) 0%, var(--tinta) 100%);
  color: #fff;
  padding: 20px 24px 0;
}

.cabecera-interior {
  max-width: var(--ancho);
  margin: 0 auto;
}

/* Título, descripción y selector de nivel, en columna y alineados a la
   izquierda. El selector estuvo arrinconado en la esquina derecha: cambia el
   tablero completo, así que ahora sigue a la descripción, que es donde se lo
   nombra («Seleccione el nivel educativo…»). */
.cabecera-texto { min-width: 0; }

.selector-nivel {
  display: flex;
  flex-direction: column;
  gap: 6px;
  align-items: flex-start;
  margin-top: 14px;
}

/* El tope de ancho va sobre el desplegable, no sobre el bloque: si se aplica al
   contenedor, la frase del rótulo se parte en dos líneas sin necesidad. */
.selector-nivel .desplegable { width: 340px; max-width: 100%; }

/* El rótulo dejó de ser la etiqueta «Nivel educativo» y pasó a ser una frase
   que instruye al lector. En versalitas apretadas una oración se vuelve
   ilegible, así que va en caja normal y algo más grande. */
.selector-nivel label {
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0;
  color: rgba(255, 255, 255, .82);
}

/* El desplegable va sobre fondo azul, así que invierte los colores del
   .desplegable normal en vez de heredarlos. */
.selector-nivel .desplegable {
  background: rgba(255, 255, 255, .1);
  border-color: rgba(255, 255, 255, .35);
  color: #fff;
  font-weight: 600;
}

.selector-nivel .desplegable:hover { background: rgba(255, 255, 255, .18); }
.selector-nivel .desplegable option { color: var(--texto); background: #fff; }

/* La flecha propia de select.desplegable se dibuja con degradados en color
   --principal, invisible sobre el azul: aquí se repinta en blanco. */
.selector-nivel select.desplegable {
  background-image:
    linear-gradient(45deg, transparent 50%, #fff 50%),
    linear-gradient(135deg, #fff 50%, transparent 50%),
    linear-gradient(rgba(255, 255, 255, .1), rgba(255, 255, 255, .1));
  background-position: calc(100% - 19px) calc(50% + 2px),
                       calc(100% - 13px) calc(50% + 2px), 0 0;
  background-size: 6px 6px, 6px 6px, 100% 100%;
  background-repeat: no-repeat;
}

.cabecera h1 {
  font-size: 24px;
  font-weight: 700;
  letter-spacing: -.2px;
}

.cabecera .subtitulo {
  font-family: var(--fuente-sec);
  font-size: 14px;
  color: rgba(255, 255, 255, .78);
  margin: 6px 0 0;
  max-width: 96ch;
}

.marca-linea {
  display: block;
  width: 54px;
  height: 4px;
  border-radius: 2px;
  background: var(--secundario);
  margin-bottom: 12px;
}

#resumen-filtro {
  margin: 14px 0 0;
  font-size: 14px;
  font-family: var(--fuente-sec);
  color: rgba(255, 255, 255, .95);
  background: rgba(255, 255, 255, .08);
  border: 1px solid rgba(255, 255, 255, .14);
  border-radius: var(--radio);
  padding: 9px 14px;
  display: inline-block;
}

#resumen-filtro .tenue { color: rgba(255, 255, 255, .6); font-weight: 400; }

/* Fecha de corte: queda bajo la barra de resumen, en un escalón tipográfico
   por debajo. Es una aclaración permanente, no un dato que compita con las
   cifras. `display:block` la fuerza a su propia línea, ya que #resumen-filtro
   es inline-block. */
#nota-corte {
  display: block;
  margin: 7px 0 0;
  font-family: var(--fuente-sec);
  font-size: 12.5px;
  color: rgba(255, 255, 255, .72);
}

#nota-corte b { color: rgba(255, 255, 255, .95); font-weight: 600; }

/* El atributo `hidden` NO gana contra un `display` explícito, y casi todo lo
   que esta hoja oculta al cambiar de sección —el selector de nivel, la barra de
   pestañas— tiene su propio `display:flex`. Sin esta regla seguían a la vista en
   Recuperación aunque el JS los marcara como ocultos. Va aquí, una sola vez,
   antes que las reglas que definen esos display. */
[hidden] { display: none !important; }

/* ------------------------------------------------------------- Secciones */
/* El conmutador de las dos SECCIONES del micrositio, encima del título. Se
   distingue a propósito de `.pestanas`, que va debajo: aquéllas son partes de
   un mismo tablero y se dibujan como carpetas pegadas al contenido; éstas son
   dos tableros distintos, así que son píldoras sueltas, más pequeñas y
   separadas del resto por su propio margen. Si las dos barras se parecieran, el
   lector no tendría cómo saber que una cambia de sección y la otra de
   pestaña. */
.secciones {
  display: flex;
  gap: 8px;
  margin-bottom: 26px;
  flex-wrap: wrap;
}

.seccion {
  border: 1px solid rgba(255, 255, 255, .22);
  background: transparent;
  color: rgba(255, 255, 255, .78);
  font-family: var(--fuente);
  font-size: 14px;
  font-weight: 600;
  letter-spacing: .01em;
  padding: 9px 20px;
  border-radius: 999px;
  cursor: pointer;
  white-space: nowrap;
  transition: background .15s, color .15s, border-color .15s;
}

.seccion:hover:not(:disabled):not(.activa) {
  background: rgba(255, 255, 255, .10);
  color: #fff;
}

/* La activa se rellena con el amarillo de marca sobre tinta: es el único
   elemento de la cabecera con ese contraste, de modo que se lee de un golpe
   en qué sección está uno sin tener que comparar con la vecina. */
.seccion.activa {
  background: var(--secundario);
  border-color: var(--secundario);
  color: var(--tinta);
}

.seccion:disabled { opacity: .45; cursor: not-allowed; }

.seccion:focus-visible {
  outline: 2px solid var(--secundario);
  outline-offset: 2px;
}

/* -------------------------------------------------------------- Pestañas */
.pestanas {
  display: flex;
  gap: 6px;
  margin-top: 22px;
  overflow-x: auto;
  scrollbar-width: thin;
}

.pestana {
  display: flex;
  align-items: center;
  gap: 11px;
  border: 0;
  background: rgba(255, 255, 255, .07);
  color: rgba(255, 255, 255, .82);
  font-family: var(--fuente);
  font-size: 17px;
  font-weight: 600;
  padding: 17px 30px;
  border-radius: var(--radio) var(--radio) 0 0;
  cursor: pointer;
  white-space: nowrap;
  transition: background .15s, color .15s;
}

.pestana:hover { background: rgba(255, 255, 255, .16); color: #fff; }

.pestana.activa {
  background: var(--fondo);
  color: var(--principal);
  box-shadow: inset 0 4px 0 var(--secundario);
}

.pestana-num {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px; height: 28px;
  border-radius: 50%;
  background: rgba(255, 255, 255, .18);
  font-size: 14px;
  font-weight: 700;
}

.pestana.activa .pestana-num { background: var(--secundario); color: var(--principal); }

.pestana:focus-visible { outline: 2px solid var(--secundario); outline-offset: -2px; }

/* -------------------------------------------------------------- Filtros */
.barra-filtros {
  background: var(--superficie);
  border-bottom: 1px solid var(--borde);
  position: sticky;
  top: 0;
  z-index: 40;
  box-shadow: 0 1px 3px rgba(20, 53, 78, .05);
}

.barra-filtros-interior {
  max-width: var(--ancho);
  margin: 0 auto;
  padding: 12px 24px;
}

/* flex-start, no flex-end: los <select multiple> son más altos que los campos
   simples y alinear al fondo dejaba huecos verticales en la barra. */
.barra-controles {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: flex-start;
}

.control { display: flex; flex-direction: column; gap: 6px; min-width: 190px; }
.control.crece { flex: 1 1 260px; }
.control.acciones { justify-content: flex-end; align-self: flex-end; }

.control label {
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: .02em;
  color: var(--principal);
}

select, input[type="search"], input[type="number"], input[type="text"] {
  font-family: var(--fuente-sec);
  font-size: 14.5px;
  color: var(--texto);
  background: var(--superficie);
  border: 1px solid var(--borde);
  border-radius: 8px;
  padding: 10px 12px;
  width: 100%;
}

select:focus, input:focus {
  outline: none;
  border-color: var(--azul);
  box-shadow: 0 0 0 3px rgba(3, 65, 117, .12);
}

/* Desplegables de filtro: más grandes y con más presencia visual que un campo
   corriente, porque son el control principal de todo el tablero. */
.desplegable {
  font-size: 15px;
  font-weight: 500;
  padding: 12px 14px;
  border: 2px solid var(--principal);
  border-radius: 9px;
  background: var(--superficie);
  box-shadow: 0 1px 3px rgba(20, 53, 78, .09);
  cursor: pointer;
  min-height: 46px;
}

select.desplegable {
  /* Flecha propia: la nativa es distinta en cada sistema operativo. */
  appearance: none;
  -webkit-appearance: none;
  background-image:
    linear-gradient(45deg, transparent 50%, var(--principal) 50%),
    linear-gradient(135deg, var(--principal) 50%, transparent 50%);
  background-position: calc(100% - 19px) calc(50% + 2px), calc(100% - 13px) calc(50% + 2px);
  background-size: 6px 6px, 6px 6px;
  background-repeat: no-repeat;
  padding-right: 36px;
}

.desplegable:hover { border-color: var(--azul); }
.desplegable:focus { box-shadow: 0 0 0 4px rgba(255, 193, 0, .35); }

/* La regla de arriba usa selectores de atributo (input[type="number"]), que
   ganan en especificidad a una clase suelta: se califican con el elemento. */
select.select-mini, input.input-mini {
  width: auto;
  min-width: 90px;
  max-width: 200px;
  font-size: 12.5px;
  padding: 5px 8px;
}

/* Los desplegables de la barra global se mantienen a un ancho parejo: sin este
   tope, una opción larga (el nombre de una organización) estira su control. */
.barra-filtros .control { flex: 1 1 210px; max-width: 320px; }
.barra-filtros .control.crece { flex: 1 1 320px; max-width: none; }
.barra-filtros .control.acciones { flex: 0 0 auto; }

.boton {
  font-family: var(--fuente);
  font-size: 13px;
  font-weight: 600;
  color: #fff;
  background: var(--principal);
  border: 0;
  border-radius: 7px;
  padding: 8px 14px;
  cursor: pointer;
  transition: background .15s, opacity .15s;
}

.boton:hover:not(:disabled) { background: var(--principal-claro); }
.boton:disabled { opacity: .4; cursor: not-allowed; }
.boton-limpio { background: var(--rojo); }
.boton-limpio:hover:not(:disabled) { background: #8f2718; }

/* ------------------------------------------------------------ Contenido */
.contenido {
  max-width: var(--ancho);
  margin: 0 auto;
  padding: 20px 24px 60px;
}

.bloque { margin-bottom: 20px; }

.rejilla { display: grid; gap: 16px; }
.rejilla.dos { grid-template-columns: repeat(auto-fit, minmax(430px, 1fr)); }
.rejilla.tres { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }
.rejilla.mapa-y-tabla { grid-template-columns: minmax(380px, 1.05fr) minmax(380px, 1fr); }

@media (max-width: 1080px) {
  .rejilla.mapa-y-tabla { grid-template-columns: 1fr; }
}

.tarjeta {
  background: var(--superficie);
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  box-shadow: var(--sombra);
  padding: 16px 18px 18px;
}

.tarjeta-cab { margin-bottom: 12px; }
.tarjeta-cab h3 { font-size: 15.5px; font-weight: 700; color: var(--principal); }

.ayuda {
  font-family: var(--fuente-sec);
  font-size: 12.5px;
  color: var(--texto-suave);
  margin: 5px 0 0;
  max-width: 92ch;
}

.nota {
  font-family: var(--fuente-sec);
  font-size: 12px;
  color: var(--texto-suave);
  margin: 10px 0 0;
}

/* Advertencia de lectura destacada: la salvedad de que la presencia de aliados
   es PREVIA al sismo. Se leía como pie de página y se pasaba por alto, siendo
   que condiciona la interpretación de toda la capa. Va inmediatamente bajo la
   sub-pestaña, con cuerpo mayor y una banda lateral que la ancla. */
.nota-destacada {
  font-family: var(--fuente-sec);
  font-size: 14.5px;
  line-height: 1.5;
  color: var(--texto);
  background: var(--fondo);
  border-left: 4px solid var(--secundario);
  border-radius: 0 var(--radio) var(--radio) 0;
  padding: 11px 16px;
  margin: 0 0 16px;
}

.nota-destacada b { color: var(--principal); }

.control-linea {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;
  margin-bottom: 10px;
  font-size: 12.5px;
  font-family: var(--fuente-sec);
}

.control-linea label {
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .04em;
  color: var(--texto-suave);
}

.rango { width: 110px; accent-color: var(--principal); }

/* ----------------------------------------------------------------- KPIs */
.kpis {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
  gap: 14px;
}

.kpi {
  position: relative;
  background: var(--superficie);
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  box-shadow: var(--sombra);
  padding: 16px 16px 14px 20px;
  overflow: hidden;
  cursor: default;
}

.kpi:focus-visible { outline: 2px solid var(--azul); outline-offset: 2px; }

.kpi-barra { position: absolute; left: 0; top: 0; bottom: 0; width: 5px; }

.kpi-rotulo {
  margin: 0;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .05em;
  text-transform: uppercase;
  color: var(--texto-suave);
}

.kpi-valor {
  margin: 6px 0 2px;
  font-size: 30px;
  font-weight: 700;
  color: var(--principal);
  letter-spacing: -.5px;
  font-variant-numeric: tabular-nums;
}

.kpi-valor.pendiente { font-size: 19px; color: var(--texto-suave); font-style: italic; }

.kpi-pie {
  margin: 0;
  font-family: var(--fuente-sec);
  font-size: 12px;
  color: var(--texto-suave);
}

/* Segunda línea de referencia (denominador por secretaría). Va separada por un
   filete para que se lea como otra comparación, no como continuación de la
   primera. */
.kpi-pie-sec {
  margin-top: 5px;
  padding-top: 5px;
  border-top: 1px solid var(--borde);
}

/* Tarjeta que además de informar NAVEGA. El cursor, el realce al pasar por
   encima y el renglón «Ver…» del pie son las tres señales de que se puede
   pulsar: sin ellas el clic es un comportamiento oculto que sólo descubre
   quien lo tropieza. Lleva role="button" y responde a Enter y espacio. */
.kpi-accionable { cursor: pointer; transition: box-shadow .12s, border-color .12s; }
.kpi-accionable:hover,
.kpi-accionable:focus-visible {
  border-color: var(--azul);
  box-shadow: 0 2px 10px rgba(3, 65, 117, .16);
}

.kpi-enlace {
  margin: 8px 0 0;
  font-family: var(--fuente-sec);
  font-size: 12px;
  font-weight: 700;
  color: var(--azul);
}
.kpi-accionable:hover .kpi-enlace { text-decoration: underline; }

/* ------------------------------------------------------------- Gráficos */
.lienzo { width: 100%; min-height: 60px; }
.grafico { display: block; overflow: visible; }

.reja { stroke: var(--borde); stroke-width: 1; shape-rendering: crispEdges; }

.eje-etq { font-family: var(--fuente-sec); font-size: 11px; fill: var(--texto-suave); }
.etq-cat { fill: var(--texto); font-weight: 500; }
.eje-sub { font-family: var(--fuente-sec); font-size: 10px; fill: var(--neutro); }
.eje-valor {
  font-family: var(--fuente-sec); font-size: 11.5px; font-weight: 600;
  fill: var(--principal); font-variant-numeric: tabular-nums;
}

.barra { transition: opacity .12s; }
.barra:hover, .barra:focus { opacity: .78; outline: none; }
.barra:focus-visible { stroke: var(--tinta); stroke-width: 2; }

.dona-total { font-size: 20px; font-weight: 700; fill: var(--principal); }
.dona-rotulo { font-family: var(--fuente-sec); font-size: 10.5px; fill: var(--texto-suave); }
.svg-vacio { font-family: var(--fuente-sec); font-size: 12.5px; fill: var(--neutro); }

/* ------------------------------------------------------------- Leyendas */
.leyenda { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px; }

.leyenda-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--fuente-sec);
  font-size: 11.5px;
  color: var(--texto);
  background: var(--fondo);
  border: 1px solid var(--borde);
  border-radius: 20px;
  padding: 3px 10px 3px 5px;
}

.leyenda-item:disabled { cursor: default; }
.leyenda-item.apagado { opacity: .38; }
.leyenda-color { width: 11px; height: 11px; border-radius: 3px; }
.leyenda-valor { font-weight: 700; color: var(--principal); }

/* --------------------------------------------------------------- Tablas */
.tabla-scroll {
  overflow: auto;
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  background: var(--superficie);
}

/* Marco de tabla que solo desplaza en vertical: el contenido siempre encaja
   en el ancho disponible, sin barra horizontal. */
.tabla-marco {
  overflow-y: auto;
  overflow-x: hidden;
  border: 1px solid var(--borde);
  border-radius: var(--radio);
  background: var(--superficie);
}

.alto-medio { max-height: 460px; }
.alto-alto { max-height: 680px; }

.tabla {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-size: 13px;
}

/* Tabla que se ajusta al contenedor: los anchos los fija <colgroup> y todo el
   texto envuelve en lugar de ensanchar la tabla.
   Estas reglas se califican con `.tabla` para ganarle en especificidad a las
   declaraciones de `white-space: nowrap` que vienen más abajo. */
.tabla.tabla-ajustada { table-layout: fixed; width: 100%; }
/* Encabezado más compacto: con anchos porcentuales fijos, la versaleta ancha
   partía palabras como "SECUNDARIA" a la mitad. */
.tabla.tabla-ajustada thead th {
  font-size: 10px;
  letter-spacing: 0;
  padding: 9px 7px;
}

.tabla.tabla-ajustada th, .tabla.tabla-ajustada td {
  /* break-word y no anywhere: parte primero por los espacios y solo corta
     dentro de una palabra cuando de verdad no cabe. */
  overflow-wrap: break-word;
  word-break: normal;
  white-space: normal;                /* el encabezado y las celdas se apilan */
}

/* Escalafón: encaja en el ancho disponible SIN adelgazar la cabecera.
   `tabla-ajustada` servía para el desborde, pero baja la versaleta a 10 px y le
   quita el interletraje, y el encabezado perdía presencia. Aquí sólo se toma de
   ella lo necesario —anchos fijos por <colgroup> y texto que envuelve— y se
   conserva intacta la tipografía de `.tabla thead th`: 11 px, peso 700,
   versaleta con interletraje y relleno de 10 px. */
.tabla.tabla-escalafon { table-layout: fixed; width: 100%; }

.tabla.tabla-escalafon thead th {
  white-space: normal;      /* única concesión: permite dos líneas */
  min-width: 0;             /* anula el min-width de .destacado, que con
                               table-layout:fixed sólo estorba */
  /* Los anchos del <colgroup> están calculados para que cada rótulo quepa
     entero a partir de ~1300 px de ventana; por debajo envuelven por el espacio.
     break-word queda sólo como última red: evita que un rótulo se derrame sobre
     la columna vecina en ventanas muy estrechas. Antes se partían palabras
     («ESTUDIANT / ES») porque las columnas estaban mal repartidas, no por esta
     regla. */
  overflow-wrap: break-word;
  word-break: normal;
}

/* En el cuerpo sí se permite partir: hay municipios con nombres muy largos. */
.tabla.tabla-escalafon td { overflow-wrap: break-word; word-break: normal; }

.tabla thead th {
  position: sticky;
  top: 0;
  z-index: 2;
  background: var(--principal);
  color: #fff;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .03em;
  text-transform: uppercase;
  text-align: left;
  padding: 9px 10px;
  white-space: nowrap;
  border-bottom: 1px solid var(--principal);
}

.tabla thead th.ordenable { cursor: pointer; user-select: none; }
.tabla thead th.ordenable:hover { background: var(--principal-claro); }
.tabla thead th.ordenado { background: var(--azul); }
.tabla thead th.num, .tabla td.num { text-align: right; }
/* El encabezado de la métrica del escalafón puede ser largo: se deja envolver
   para no forzar scroll horizontal en la tabla completa. */
.tabla thead th.destacado { white-space: normal; min-width: 150px; }
.tabla thead th.centro, .tabla td.centro { text-align: center; }
.flecha { font-size: 9px; }

.tabla tbody td {
  padding: 7px 10px;
  border-bottom: 1px solid var(--borde);
  vertical-align: top;
}

.tabla tbody tr:hover { background: #F0F5FA; }
.tabla tbody tr:focus-visible { outline: 2px solid var(--azul); outline-offset: -2px; }
.tabla tbody tr.clicable { cursor: pointer; }

.tabla td.mono {
  font-family: "Consolas", ui-monospace, monospace;
  font-size: 11.5px;
  color: var(--texto-suave);
}

.tabla td.num { font-variant-numeric: tabular-nums; }
.tabla td.nivel { background: rgba(20, 53, 78, .028); }
.tabla td.tenue { color: var(--neutro); }
.tabla td.alerta { color: var(--rojo); font-weight: 600; }
.tabla td.ancha { min-width: 240px; }
.tabla td.vacio, .vacio {
  text-align: center; color: var(--neutro);
  font-family: var(--fuente-sec); font-style: italic; padding: 22px;
}

.celda-principal { display: block; font-weight: 600; color: var(--texto); }
.celda-sub {
  display: block; font-family: var(--fuente-sec);
  font-size: 11px; color: var(--texto-suave); margin-top: 1px;
}

/* Barra dentro de celda numérica destacada */
.tabla td.destacado { position: relative; min-width: 120px; }
.barra-celda {
  position: absolute; left: 0; top: 4px; bottom: 4px;
  background: rgba(3, 65, 117, .13);
  border-radius: 0 3px 3px 0;
}
.barra-celda-txt {
  position: relative; font-weight: 700; color: var(--principal);
  font-variant-numeric: tabular-nums;
}

.pastilla-sev {
  display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px; border-radius: 6px;
  color: #fff; font-size: 11.5px; font-weight: 700;
  text-shadow: 0 1px 1px rgba(0, 0, 0, .25);
}

.punto {
  display: inline-block; width: 9px; height: 9px;
  border-radius: 50%; margin-right: 6px; vertical-align: baseline;
}

/* --------------------------------------------------------------- Mapas */
/* El z-index:0 no es decorativo y no debe quitarse. Leaflet apila sus capas
   internas en 400 (paneles), 800 (controles) y 1000 (esquinas), muy por encima
   del z-index:40 de .barra-filtros. Con `position:relative` a secas el elemento
   NO crea contexto de apilamiento —hace falta un z-index distinto de auto—, así
   que esos valores competían directamente con la barra pegajosa y el mapa se
   dibujaba sobre los filtros al hacer scroll. Al fijar el contexto aquí, las
   capas de Leaflet quedan confinadas y la caja entera participa como 0: por
   debajo de la barra, igual que cualquier otra tarjeta. */
.mapa-caja { position: relative; z-index: 0; }
.mapa-lienzo { height: 540px; border-radius: 8px; background: #E9EFF4; }

.mapa-aviso {
  border: 1px dashed var(--borde);
  border-radius: 8px;
  background: var(--fondo);
  padding: 26px 22px;
  min-height: 340px;
}

.mapa-aviso-titulo { margin: 0 0 8px; font-weight: 700; color: var(--rojo); font-size: 14px; }
.mapa-aviso-detalle {
  margin: 0; font-family: var(--fuente-sec); font-size: 12.5px;
  color: var(--texto-suave); line-height: 1.65;
}

.mapa-leyenda { margin-top: 10px; }
.mapa-leyenda-rotulo {
  font-size: 11px; font-weight: 700; text-transform: uppercase;
  letter-spacing: .04em; color: var(--texto-suave);
}
.mapa-escala { display: flex; height: 11px; border-radius: 3px; overflow: hidden; margin-top: 5px; }
.mapa-escala-paso { flex: 1; }
.mapa-escala-ejes {
  display: flex; justify-content: space-between;
  font-family: var(--fuente-sec); font-size: 10.5px; color: var(--texto-suave); margin-top: 3px;
}

.leaflet-container { font-family: var(--fuente-sec); }

/* ------------------------------------------------------------- Tooltips */
.tooltip {
  position: fixed;
  z-index: 9999;
  max-width: 380px;
  background: var(--tinta);
  color: #fff;
  font-family: var(--fuente-sec);
  font-size: 12.2px;
  line-height: 1.5;
  padding: 9px 12px;
  border-radius: 8px;
  box-shadow: var(--sombra-alta);
  pointer-events: none;
  opacity: 0;
  transition: opacity .1s;
}

.tooltip.visible { opacity: 1; }
.tooltip b { color: var(--secundario); }
.tooltip hr { border: 0; border-top: 1px solid rgba(255, 255, 255, .2); margin: 6px 0; }
.tooltip i { color: rgba(255, 255, 255, .68); }
.tooltip .tip-sub { color: rgba(255, 255, 255, .72); }
.tooltip .tip-metrica { color: #fff; }

.tip-leaflet {
  background: var(--tinta) !important;
  color: #fff !important;
  border: 0 !important;
  border-radius: 8px !important;
  font-family: var(--fuente-sec) !important;
  font-size: 12px !important;
  box-shadow: var(--sombra-alta) !important;
}
.tip-leaflet b { color: var(--secundario); }
.tip-leaflet::before { display: none !important; }

/* ---------------------------------------------------- Avisos y fichas */
.aviso {
  background: #FFF9E6;
  border: 1px solid #F5DFA0;
  border-left: 4px solid var(--secundario);
  border-radius: var(--radio);
  padding: 14px 18px;
  font-family: var(--fuente-sec);
  font-size: 13px;
  color: #6B5310;
  line-height: 1.6;
}

.aviso-reservado { background: #EEF3F8; border-color: #C8D7E4; border-left-color: var(--azul); color: var(--texto); }
.aviso-reservado h3 { font-size: 15px; color: var(--principal); margin-bottom: 6px; }
.aviso-reservado p { margin: 0; }

.fichas { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 14px; margin-bottom: 14px; }

.ficha {
  background: var(--fondo);
  border: 1px solid var(--borde);
  border-radius: 8px;
  padding: 12px 14px;
}

.ficha h4 { font-size: 12.5px; color: var(--principal); margin-bottom: 6px; }
.ficha-estado { font-family: var(--fuente-sec); font-size: 11.5px; color: var(--texto-suave); margin: 0 0 8px; }
.ficha-estado.pendiente { color: var(--rojo); font-weight: 600; }

.lista-etiquetas { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 5px; }
.lista-etiquetas li {
  font-family: var(--fuente-sec);
  font-size: 11.5px;
  background: var(--superficie);
  border: 1px solid var(--borde);
  border-radius: 14px;
  padding: 2px 9px;
  color: var(--texto);
}
.lista-etiquetas.compacta li { font-size: 10.5px; padding: 1px 7px; }

/* Sub-pestañas dentro de una vista: tamaño de botón, no de enlace. */
.pestanas-int { display: flex; flex-wrap: wrap; gap: 12px; }

.pest-int {
  display: flex;
  flex-direction: column;
  gap: 3px;
  flex: 1 1 280px;
  text-align: left;
  border: 2px solid var(--borde);
  background: var(--superficie);
  border-radius: var(--radio);
  padding: 16px 22px;
  cursor: pointer;
  box-shadow: var(--sombra);
  transition: border-color .15s, background .15s, transform .1s;
}

.pest-int-titulo {
  font-family: var(--fuente);
  font-size: 17px;
  font-weight: 700;
  color: var(--texto-suave);
}

.pest-int-sub {
  font-family: var(--fuente-sec);
  font-size: 12.5px;
  color: var(--neutro);
}

.pest-int:hover { border-color: var(--azul); }
.pest-int:hover .pest-int-titulo { color: var(--principal); }

.pest-int.activa {
  background: var(--principal);
  border-color: var(--principal);
}
.pest-int.activa .pest-int-titulo { color: #fff; }
.pest-int.activa .pest-int-sub { color: var(--secundario); }

/* Explicación en lenguaje llano dentro de una tarjeta */
.explicacion {
  background: var(--fondo);
  border-left: 4px solid var(--azul);
  border-radius: 8px;
  padding: 12px 16px;
  margin-bottom: 14px;
}
.explicacion p {
  margin: 0 0 7px;
  font-family: var(--fuente-sec);
  font-size: 13.5px;
  line-height: 1.55;
}
.explicacion p:last-child { margin-bottom: 0; }
.explicacion b { color: var(--principal); }

.rango-valor {
  font-family: var(--fuente-sec);
  font-size: 12.5px;
  font-weight: 700;
  color: var(--principal);
  min-width: 42px;
}

/* Encabezado de hoja en la vista de estructura */
.hoja-cab {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 12px;
  margin: 18px 0 8px;
  padding-bottom: 6px;
  border-bottom: 2px solid var(--borde);
}
.hoja-cab h4 { font-size: 14px; color: var(--principal); }
.hoja-meta { font-family: var(--fuente-sec); font-size: 12px; color: var(--texto-suave); }

.titulo-bloque {
  font-size: 19px;
  font-weight: 700;
  color: var(--principal);
  margin-bottom: 2px;
}

.tenue { color: var(--neutro); }
th.pendiente, td.pendiente { color: var(--neutro); font-style: italic; }

/* ------------------------------------------------------------ Pie */
.pie {
  background: var(--principal);
  color: rgba(255, 255, 255, .82);
  padding: 26px 24px 34px;
  font-family: var(--fuente-sec);
  font-size: 12.5px;
}

.pie-interior { max-width: var(--ancho); margin: 0 auto; }
.pie h4 { color: #fff; font-size: 13px; margin-bottom: 8px; }
.pie ul { margin: 0 0 18px; padding-left: 18px; }
.pie li { margin-bottom: 4px; }
.pie code { background: rgba(255, 255, 255, .12); color: var(--secundario); }
.pie b { color: #fff; }

/* ---------------------------------------------------------- Impresión */
@media print {
  .barra-filtros, .pestanas, .boton { display: none !important; }
  .panel[hidden] { display: none !important; }
  .tarjeta { break-inside: avoid; box-shadow: none; }
  .tabla-scroll { max-height: none; overflow: visible; }
}

@media (max-width: 720px) {
  .cabecera h1 { font-size: 19px; }
  .contenido { padding: 14px 12px 40px; }
  .barra-filtros-interior { padding: 10px 12px; }
  .control { min-width: 100%; }
  .mapa-lienzo { height: 380px; }

  /* En pantalla estrecha el desplegable ocupa todo el ancho disponible: el
     rótulo es una frase completa y a 340 px quedaría apretado. */
  .selector-nivel .desplegable { width: 100%; }
}

/* Rótulo de las dos mitades de una tarjeta que compara dos cortes del mismo
   dato (sedes vs. matrícula en Educación Inicial). Es un peldaño por debajo del
   <h3> de la tarjeta, no un encabezado de sección. */
.sub-titulo {
  font-size: 12px;
  font-weight: 700;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: var(--texto-suave);
  margin: 0 0 2px;
}

/* Fila de total en las tablas descriptivas de Educación Inicial: separa el
   universo del desglose sin convertirlo en una categoría más. */
.tabla tbody tr.fila-total td {
  border-top: 2px solid var(--principal);
  font-weight: 700;
  color: var(--principal);
  background: var(--fondo);
}

/* Casilla de verificación dentro de la barra de filtros: el control nativo es
   diminuto, así que se envuelve para darle un área de clic utilizable. */
.casilla {
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: 46px;
  padding: 0 12px;
  border: 2px solid var(--principal);
  border-radius: 9px;
  background: var(--superficie);
  font-family: var(--fuente-sec);
  font-size: 14px;
  cursor: pointer;
}

.casilla input { accent-color: var(--principal); width: 16px; height: 16px; }
