/* =============================================================================
   Matriz de Evaluación · hoja de estilo única
   -----------------------------------------------------------------------------
   Sin framework y sin CDN: la aplicación tiene que funcionar en una máquina sin
   internet, detrás de un proxy corporativo o en una VM aislada. Todo el diseño
   cabe en este archivo y se sirve desde el propio servidor.

   Organización:
     1. Sistema de color        — un solo juego de variables, claro y oscuro
     2. Base y tipografía
     3. Estructura             — barra superior, panel lateral, contenido
     4. Componentes            — tarjetas, tablas, formularios, avisos, ayuda
     5. Flujo guiado           — la barra de etapas
     6. Gráficos               — barras y anillos en SVG, sin librerías
     7. Impresión

   El tema se decide con el atributo data-tema en <html>: "claro", "oscuro" o
   ausente, en cuyo caso se sigue la preferencia del sistema operativo.
   ============================================================================= */

/* ------------------------------------------------- 1 · sistema de color ---- */
:root {
  /* Azul institucional como color de acción; verde y ámbar para los estados.
     Todos los pares texto/fondo llegan a un contraste de 4.5:1 o mejor. */
  --azul:            #1f3864;
  --azul-claro:      #2e5496;
  --azul-vivo:       #3b7ddd;
  --verde:           #1a7f4b;
  --verde-suave:     #e7f4ed;
  --ambar:           #9a6700;
  --ambar-suave:     #fff4d6;
  --rojo:            #b42318;
  --rojo-suave:      #fdeceb;

  --fondo:           #f6f7f9;
  --superficie:      #ffffff;
  --superficie-2:    #f0f2f5;
  --borde:           #d8dce3;
  --borde-suave:     #e8ebf0;
  --texto:           #1a1d23;
  --texto-2:         #5a6270;
  --texto-3:         #868e9c;
  --sombra:          0 1px 2px rgba(16, 24, 40, .06), 0 4px 12px rgba(16, 24, 40, .06);
  --sombra-alta:     0 8px 28px rgba(16, 24, 40, .16);

  --radio:           10px;
  --radio-s:         6px;
  --paso:            8px;
  --ancho-lateral:   264px;
  --fuente: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --mono: ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, monospace;
}

/* Oscuro por preferencia del sistema, salvo que el usuario haya pedido claro. */
@media (prefers-color-scheme: dark) {
  :root:not([data-tema="claro"]) {
    --azul:          #8fb3ec;
    --azul-claro:    #a8c4f0;
    --azul-vivo:     #6fa2ef;
    --verde:         #5ec98d;
    --verde-suave:   #10291c;
    --ambar:         #e0b34d;
    --ambar-suave:   #2c2410;
    --rojo:          #f08b82;
    --rojo-suave:    #2e1513;

    --fondo:         #12151a;
    --superficie:    #1a1e25;
    --superficie-2:  #222831;
    --borde:         #333b47;
    --borde-suave:   #272e38;
    --texto:         #e6e9ef;
    --texto-2:       #a6aebc;
    --texto-3:       #7c8494;
    --sombra:        0 1px 2px rgba(0, 0, 0, .4), 0 4px 12px rgba(0, 0, 0, .3);
    --sombra-alta:   0 8px 28px rgba(0, 0, 0, .55);
  }
}

/* Oscuro por elección explícita del usuario. */
:root[data-tema="oscuro"] {
  --azul:          #8fb3ec;
  --azul-claro:    #a8c4f0;
  --azul-vivo:     #6fa2ef;
  --verde:         #5ec98d;
  --verde-suave:   #10291c;
  --ambar:         #e0b34d;
  --ambar-suave:   #2c2410;
  --rojo:          #f08b82;
  --rojo-suave:    #2e1513;

  --fondo:         #12151a;
  --superficie:    #1a1e25;
  --superficie-2:  #222831;
  --borde:         #333b47;
  --borde-suave:   #272e38;
  --texto:         #e6e9ef;
  --texto-2:       #a6aebc;
  --texto-3:       #7c8494;
  --sombra:        0 1px 2px rgba(0, 0, 0, .4), 0 4px 12px rgba(0, 0, 0, .3);
  --sombra-alta:   0 8px 28px rgba(0, 0, 0, .55);
}

/* ------------------------------------------------------ 2 · base ---------- */
*, *::before, *::after { box-sizing: border-box; }

html { color-scheme: light dark; }
:root[data-tema="claro"] { color-scheme: light; }
:root[data-tema="oscuro"] { color-scheme: dark; }

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

h1, h2, h3, h4 { margin: 0 0 calc(var(--paso) * 1.5); line-height: 1.25; font-weight: 650; }
h1 { font-size: 1.6rem; letter-spacing: -.015em; }
h2 { font-size: 1.2rem; }
h3 { font-size: 1.02rem; }
p  { margin: 0 0 var(--paso); }
a  { color: var(--azul-vivo); text-decoration: none; }
a:hover { text-decoration: underline; }
code, .mono { font-family: var(--mono); font-size: .88em; }

/* Accesibilidad: el foco tiene que verse siempre, también con el teclado. */
:focus-visible {
  outline: 3px solid var(--azul-vivo);
  outline-offset: 2px;
  border-radius: 3px;
}

/* Enlace de salto, visible sólo al tabular: lo primero que necesita un lector
   de pantalla para no recorrer el menú en cada página. */
.saltar {
  position: absolute; left: -9999px; top: 0; z-index: 100;
  background: var(--azul); color: #fff; padding: 10px 16px; border-radius: 0 0 8px 0;
}
.saltar:focus { left: 0; }

/* --------------------------------------------------- 3 · estructura ------- */
.disposicion { display: flex; min-height: 100vh; }

.lateral {
  width: var(--ancho-lateral); flex: none;
  background: var(--superficie); border-right: 1px solid var(--borde);
  display: flex; flex-direction: column; position: sticky; top: 0; height: 100vh;
}
.lateral__marca {
  padding: 18px 20px 14px; border-bottom: 1px solid var(--borde-suave);
}
.lateral__marca strong { display: block; font-size: 1rem; color: var(--azul); }
.lateral__marca span { display: block; font-size: .76rem; color: var(--texto-3); margin-top: 2px; }
.lateral__pasos { flex: 1; overflow-y: auto; padding: 12px 10px 20px; }
.lateral__pie {
  border-top: 1px solid var(--borde-suave); padding: 12px 14px;
  font-size: .8rem; color: var(--texto-2);
}

.principal { flex: 1; min-width: 0; display: flex; flex-direction: column; }

.superior {
  display: flex; align-items: center; gap: 14px;
  padding: 12px 26px; background: var(--superficie);
  border-bottom: 1px solid var(--borde); position: sticky; top: 0; z-index: 20;
}
.superior__titulo { flex: 1; min-width: 0; }
.superior__titulo h1 { margin: 0; font-size: 1.12rem; }
.superior__titulo p  { margin: 1px 0 0; font-size: .8rem; color: var(--texto-2); }

.contenido { padding: 26px; max-width: 1500px; width: 100%; }

/* -------------------------------------------------- 4 · componentes ------- */
.tarjeta {
  background: var(--superficie); border: 1px solid var(--borde);
  border-radius: var(--radio); box-shadow: var(--sombra);
  padding: 20px; margin-bottom: 18px;
}
.tarjeta__cabecera {
  display: flex; align-items: flex-start; gap: 10px;
  margin: -4px 0 14px;
}
.tarjeta__cabecera h2, .tarjeta__cabecera h3 { margin: 0; flex: 1; }

.rejilla { display: grid; gap: 16px; }
.rejilla--2 { grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); }
.rejilla--3 { grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); }
.rejilla--4 { grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); }

/* --- indicadores ----------------------------------------------------------- */
.indicador {
  background: var(--superficie); border: 1px solid var(--borde);
  border-radius: var(--radio); padding: 15px 17px;
}
.indicador__rotulo {
  font-size: .74rem; text-transform: uppercase; letter-spacing: .05em;
  color: var(--texto-3); font-weight: 600; display: flex; align-items: center; gap: 5px;
}
.indicador__valor {
  font-size: 1.85rem; font-weight: 680; line-height: 1.15; margin-top: 5px;
  font-variant-numeric: tabular-nums;
}
.indicador__pie { font-size: .8rem; color: var(--texto-2); margin-top: 3px; }
.indicador--verde .indicador__valor { color: var(--verde); }
.indicador--ambar .indicador__valor { color: var(--ambar); }
.indicador--rojo  .indicador__valor { color: var(--rojo); }

/* --- tablas ---------------------------------------------------------------- */
.tabla-envoltura { overflow-x: auto; border-radius: var(--radio-s); }
table.datos {
  width: 100%; border-collapse: collapse; font-size: .875rem;
  font-variant-numeric: tabular-nums;
}
table.datos th, table.datos td {
  padding: 9px 11px; text-align: left; border-bottom: 1px solid var(--borde-suave);
  vertical-align: middle;
}
table.datos thead th {
  background: var(--superficie-2); color: var(--texto-2);
  font-size: .74rem; text-transform: uppercase; letter-spacing: .04em;
  font-weight: 650; position: sticky; top: 0; z-index: 2;
  border-bottom: 1px solid var(--borde);
}
table.datos tbody tr:hover { background: var(--superficie-2); }
table.datos td.num, table.datos th.num { text-align: right; }
table.datos tfoot td { font-weight: 650; border-top: 2px solid var(--borde); }
.fila-destacada { background: var(--verde-suave) !important; }

/* --- etiquetas de estado ---------------------------------------------------- */
.pastilla {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 2px 9px; border-radius: 999px; font-size: .76rem; font-weight: 600;
  border: 1px solid transparent; white-space: nowrap;
}
.pastilla--verde { background: var(--verde-suave); color: var(--verde); border-color: var(--verde); }
.pastilla--ambar { background: var(--ambar-suave); color: var(--ambar); border-color: var(--ambar); }
.pastilla--roja  { background: var(--rojo-suave);  color: var(--rojo);  border-color: var(--rojo); }
.pastilla--gris  { background: var(--superficie-2); color: var(--texto-2); border-color: var(--borde); }

/* --- botones ---------------------------------------------------------------- */
.boton {
  display: inline-flex; align-items: center; justify-content: center; gap: 7px;
  padding: 8px 16px; border-radius: var(--radio-s); border: 1px solid var(--borde);
  background: var(--superficie); color: var(--texto);
  font: inherit; font-size: .875rem; font-weight: 600; cursor: pointer;
  transition: background .12s ease, border-color .12s ease, transform .06s ease;
}
.boton:hover { background: var(--superficie-2); text-decoration: none; }
.boton:active { transform: translateY(1px); }
.boton:disabled { opacity: .5; cursor: not-allowed; }
.boton--primario {
  background: var(--azul); border-color: var(--azul); color: #fff;
}
/* En tema oscuro el azul institucional es claro, así que el texto del botón
   primario debe ser oscuro para conservar el contraste. */
:root[data-tema="oscuro"] .boton--primario { color: #11151c; }
@media (prefers-color-scheme: dark) {
  :root:not([data-tema="claro"]) .boton--primario { color: #11151c; }
}
.boton--primario:hover { background: var(--azul-claro); border-color: var(--azul-claro); }
.boton--peligro { border-color: var(--rojo); color: var(--rojo); }
.boton--peligro:hover { background: var(--rojo-suave); }
.boton--pequeno { padding: 4px 10px; font-size: .8rem; }

/* --- formularios ------------------------------------------------------------- */
.campo { margin-bottom: 14px; }
.campo > label {
  display: flex; align-items: center; gap: 6px;
  font-size: .82rem; font-weight: 620; color: var(--texto-2); margin-bottom: 5px;
}

/* Etiqueta encima de su campo, dentro de una fila flexible.
   Una <label> es en línea por omisión, así que dentro de un contenedor flex su
   texto y su <input> se acomodan uno al lado del otro o uno encima según el
   ancho sobrante: la misma fila salía alineada de dos maneras distintas. Esto lo
   fija. */
label.apilado {
  display: flex; flex-direction: column; gap: 5px;
  font-size: .82rem; font-weight: 620; color: var(--texto-2);
}
label.apilado .pista { font-weight: 400; }
input[type="text"], input[type="password"], input[type="email"], input[type="number"],
input[type="date"], select, textarea {
  width: 100%; padding: 8px 11px; font: inherit; font-size: .9rem;
  color: var(--texto); background: var(--superficie);
  border: 1px solid var(--borde); border-radius: var(--radio-s);
}
input:disabled, select:disabled, textarea:disabled {
  background: var(--superficie-2); color: var(--texto-3); cursor: not-allowed;
}
textarea { min-height: 76px; resize: vertical; }
.pista { font-size: .78rem; color: var(--texto-3); margin-top: 4px; }

/* Celdas de entrada dentro de una tabla: compactas y sin borde hasta el foco. */
table.datos input[type="text"], table.datos input[type="number"], table.datos select {
  padding: 4px 7px; font-size: .85rem; min-width: 68px;
}
input.nota { max-width: 88px; text-align: center; font-weight: 600; }
input.monto { max-width: 150px; text-align: right; }

/* Marca de campo modificado sin guardar: evita perder trabajo por descuido. */
.sucio { border-color: var(--ambar) !important; background: var(--ambar-suave) !important; }

/* --- avisos ------------------------------------------------------------------ */
.aviso {
  display: flex; gap: 11px; align-items: flex-start;
  padding: 12px 15px; border-radius: var(--radio-s); margin-bottom: 16px;
  border: 1px solid; font-size: .875rem;
}
.aviso__icono { flex: none; font-size: 1.05rem; line-height: 1.35; }
.aviso--info    { background: var(--superficie-2); border-color: var(--borde); }
.aviso--exito   { background: var(--verde-suave); border-color: var(--verde); color: var(--verde); }
.aviso--alerta  { background: var(--ambar-suave); border-color: var(--ambar); color: var(--ambar); }
.aviso--error   { background: var(--rojo-suave);  border-color: var(--rojo);  color: var(--rojo); }
/* Un <strong> al principio de un aviso hace de título y ocupa su propia línea;
   en cualquier otra posición es énfasis dentro de la frase y tiene que fluir con
   el texto.

   La regla anterior ponía en bloque TODO <strong> de un aviso, y eso partía
   cualquier frase que llevara una palabra destacada en medio: la palabra saltaba
   a una línea propia y la coma o el punto siguientes quedaban descolgados al
   principio de la línea de abajo. Se reportó como «el texto se ve raro» y lo
   diagnostiqué mal dos veces, culpando al espaciado de las plantillas. La causa
   estaba aquí.

   El título se marca con una clase EXPLÍCITA y no con `:first-child`. La razón:
   `:first-child` mira el primer ELEMENTO hijo e ignora el texto suelto, así que
   en «No se presentó ninguna oferta a <strong>P3</strong>.» el <strong> también
   es el primer elemento y volvía a irse a su propia línea. No hay selector que
   distinga «tiene texto delante»; hay que decirlo. */
.aviso strong { display: inline; }
/* Dos clases, para ganarle en especificidad a `.aviso strong` (0,1,1): una sola
   clase puntúa (0,1,0) y la regla de arriba la anulaba en silencio. */
.aviso .aviso__titulo { display: block; margin-bottom: 2px; }
.aviso ul { margin: 6px 0 0; padding-left: 18px; }

/* --- ayuda contextual --------------------------------------------------------- */
.ayuda { position: relative; display: inline-flex; }
.ayuda__boton {
  width: 17px; height: 17px; border-radius: 50%; border: 1px solid var(--texto-3);
  background: transparent; color: var(--texto-3);
  font-size: 11px; font-weight: 700; line-height: 1; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center; padding: 0;
}
.ayuda__boton:hover { border-color: var(--azul-vivo); color: var(--azul-vivo); }
.ayuda__panel {
  position: absolute; z-index: 60; top: calc(100% + 8px); left: 0;
  width: min(430px, 78vw); padding: 15px 17px;
  background: var(--superficie); border: 1px solid var(--borde);
  border-radius: var(--radio); box-shadow: var(--sombra-alta);
  font-size: .85rem; font-weight: 400; color: var(--texto);
  text-align: left; text-transform: none; letter-spacing: normal;
}
.ayuda__panel[hidden] { display: none !important; }
.ayuda__panel h4 { margin: 0 0 7px; font-size: .9rem; color: var(--azul); }
.ayuda__formula {
  font-family: var(--mono); font-size: .82rem; background: var(--superficie-2);
  padding: 8px 10px; border-radius: var(--radio-s); margin: 8px 0;
  overflow-x: auto; white-space: pre-wrap; word-break: break-word;
}
.ayuda__nota { color: var(--texto-2); font-size: .82rem; margin-top: 8px; }
/* Cuando el panel se abriría fuera de la ventana por la derecha. */
.ayuda__panel--derecha { left: auto; right: 0; }

/* ------------------------------------------------- 5 · flujo guiado -------- */
.paso {
  display: flex; gap: 11px; align-items: flex-start;
  padding: 9px 11px; border-radius: var(--radio-s); margin-bottom: 2px;
  color: var(--texto-2); text-decoration: none; border: 1px solid transparent;
}
.paso:hover { background: var(--superficie-2); text-decoration: none; }
.paso--actual {
  background: var(--superficie-2); border-color: var(--borde);
  color: var(--texto); font-weight: 620;
}
.paso--bloqueado { opacity: .55; }
.paso__numero {
  flex: none; width: 23px; height: 23px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: .75rem; font-weight: 700;
  background: var(--superficie-2); color: var(--texto-2);
  border: 1px solid var(--borde);
}
.paso--completo .paso__numero {
  background: var(--verde); border-color: var(--verde); color: #fff;
}
.paso--actual .paso__numero { background: var(--azul); border-color: var(--azul); color: #fff; }
.paso__texto { min-width: 0; }
.paso__titulo { display: block; font-size: .875rem; line-height: 1.3; }
.paso__detalle {
  display: block; font-size: .73rem; color: var(--texto-3); margin-top: 1px;
  overflow: hidden; text-overflow: ellipsis;
}

/* barra de progreso lineal */
.progreso {
  height: 6px; background: var(--superficie-2); border-radius: 999px; overflow: hidden;
}
.progreso__relleno { height: 100%; background: var(--azul-vivo); border-radius: 999px; }
.progreso__relleno--completo { background: var(--verde); }
.progreso__relleno--parcial  { background: var(--ambar); }

/* navegación entre etapas, al pie del contenido */
.navegacion-etapas {
  display: flex; justify-content: space-between; gap: 12px;
  margin-top: 22px; padding-top: 18px; border-top: 1px solid var(--borde);
}

/* ---------------------------------------------------- 6 · gráficos --------- */
/* Los gráficos son SVG generados en la propia página: no hay ninguna librería
   que cargar, funcionan sin internet y se imprimen con nitidez. */
.grafico { display: block; max-width: 100%; height: auto; }
.grafico text { font-family: var(--fuente); font-size: 11px; fill: var(--texto-2); }
.grafico .barra { fill: var(--azul-vivo); }
.grafico .barra--verde { fill: var(--verde); }
.grafico .barra--ambar { fill: var(--ambar); }
.grafico .eje { stroke: var(--borde); stroke-width: 1; }
.grafico .valor { fill: var(--texto); font-weight: 600; }

.anillo__fondo { fill: none; stroke: var(--superficie-2); stroke-width: 9; }
.anillo__arco  { fill: none; stroke: var(--azul-vivo); stroke-width: 9; stroke-linecap: round; }
.anillo__arco--completo { stroke: var(--verde); }
.anillo__texto { font-size: 15px; font-weight: 700; fill: var(--texto); text-anchor: middle; }

/* barra proporcional en línea, para desgloses dentro de una tabla */
.barra-linea {
  display: block; height: 6px; border-radius: 3px;
  background: var(--azul-vivo); min-width: 2px;
}

/* -------------------------------------------------- 7 · impresión ---------- */
@media print {
  .lateral, .superior, .navegacion-etapas, .boton, .ayuda__boton { display: none !important; }
  body { background: #fff; font-size: 11pt; }
  .contenido { padding: 0; max-width: none; }
  .tarjeta { border: 1px solid #999; box-shadow: none; page-break-inside: avoid; }
  table.datos { font-size: 9.5pt; }
  table.datos thead th { background: #eee !important; color: #000 !important; }
  a[href]::after { content: ""; }
}

/* ------------------------------------------------- adaptación a pantalla --- */
@media (max-width: 1000px) {
  .disposicion { flex-direction: column; }
  .lateral {
    width: 100%; height: auto; position: static;
    border-right: none; border-bottom: 1px solid var(--borde);
  }
  .lateral__pasos { max-height: 230px; }
  .contenido { padding: 18px 14px; }
  .superior { padding: 10px 14px; flex-wrap: wrap; }
}

/* Quien haya pedido menos movimiento en su sistema, no lo tendrá. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important; transition-duration: .001ms !important;
  }
}
