/* La cola de revisión. Mismo stack que `maqueta/static` y `panel/static`:
 * CSS plano, sin build y sin framework.
 *
 * Lo que esta hoja tiene que lograr, y por qué:
 *
 * - **Que la discrepancia salte.** El 82,8 % de los casos son unánimes, así
 *   que lo interesante es la excepción. La banda minoritaria lleva color y
 *   borde; la mayoritaria es gris. Si las dos se vieran igual, lo
 *   interesante se perdería entre lo obvio.
 * - **Que los cuatro estados se distingan a ojo**, no solo en el texto:
 *   cuatro colores, cuatro rótulos.
 * - **Que «familia desconocida» no se parezca a «de afuera».** Son tres
 *   chips con tres colores; el desconocido es el único punteado, porque
 *   «no se sabe» no es un valor más, es la ausencia de uno.
 * - **Que el texto crudo se lea como texto crudo.** `white-space:
 *   pre-wrap` conserva los saltos del modelo y el `\-` o el `**` se ven
 *   literales, que es la forma visual de «aquí no pasó ningún renderer».
 */

:root {
  --tinta: #16202b;
  --tinta-suave: #5a6b7c;
  --papel: #ffffff;
  --fondo: #f4f6f8;
  --linea: #dde3e9;
  --azul: #1f4e79;
  --rojo: #b3261e;
  --ambar: #8a6100;
  --verde: #1b6b3a;
  --violeta: #5b3a8a;
}

* { box-sizing: border-box; }

/* `hidden` TIENE que ocultar. La hoja del navegador trae
   `[hidden]{display:none}`, pero es de ORIGEN UA: pierde contra cualquier
   regla de autor que declare `display` sobre el mismo elemento. Sin esta
   línea, `.login{display:flex}` de más abajo le gana y el gate de login
   queda pintado sobre la pantalla con el atributo `hidden` puesto —que es
   exactamente lo que pasaba: quien llegaba con sesión viva de Google veía
   `caja.hidden = true` en el DOM y la tarjeta igual tapándolo todo, sin
   botón, sin mensaje y con `position:fixed; inset:0; z-index:10` comiéndose
   los clics—.

   Va GLOBAL y no en `.login[hidden]`: el defecto no es de ese elemento, es
   de cualquiera que combine `hidden` con una clase o un id que traiga
   `display`. Hoy en esta hoja el único expuesto es `.login`, pero el front
   oculta tres elementos con `hidden` (`#login`, `#login-btn`, `#banner`) y
   el de al lado —la maqueta, de donde viene esta hoja— ya tiene un
   `.login-caja #login-btn{display:flex}` esperando a que alguien lo copie.
   Un arreglo por caso deja vivo el próximo.

   Y va con `!important` porque sin eso no alcanza: una `[hidden]` pelada
   es (0,1,0) y pierde contra `.login-caja #login-btn` (1,1,0) o contra
   cualquier id. Con `!important` gana sin depender del orden ni de la
   especificidad.

   Mismo arreglo, palabra por palabra, que `maqueta/static/styles.css` y
   `panel/static/styles.css`. Esta hoja nació de la de la maqueta y se
   quedó sin esta línea. */
[hidden] { display: none !important; }

body {
  margin: 0;
  font: 15px/1.55 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
        Helvetica, Arial, sans-serif;
  color: var(--tinta);
  background: var(--fondo);
}

code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .92em; }

/* --- cabecera ---------------------------------------------------------- */

.top {
  display: flex; justify-content: space-between; align-items: baseline;
  gap: 16px; padding: 14px 20px; background: var(--papel);
  border-bottom: 1px solid var(--linea);
}
.top h1 { margin: 0; font-size: 19px; }
.sub { margin: 2px 0 0; color: var(--tinta-suave); font-size: 13px; }
.quien { color: var(--tinta-suave); font-size: 13px; }

.tabs { display: flex; gap: 6px; padding: 10px 20px 0; }
.tab {
  border: 1px solid var(--linea); border-bottom: none; background: var(--papel);
  padding: 8px 14px; border-radius: 6px 6px 0 0; cursor: pointer; font: inherit;
}
.tab:hover { background: #eef3f8; }

.controles { padding: 10px 20px; }
.ctrl-caja { display: flex; flex-direction: column; gap: 6px; }
.ctrl-fila { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ctrl-rotulo { color: var(--tinta-suave); font-size: 13px; }
.sel-reactivo, .sel-corrida { font: inherit; padding: 4px 8px; }

/* El valor cuando no hay nada que elegir. Se dibuja como DATO y no como
 * control apagado: un `<select>` deshabilitado se lee como «no puedes
 * elegir todavía», y aquí el hecho es que no hay otra opción. El porqué
 * va en el `title`, que lo escribe el servidor. */
.ctrl-fijo {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 13px;
  background: var(--papel); border: 1px solid var(--linea);
  border-radius: 4px; padding: 3px 8px;
}

/* El motivo del default, al lado del control y no escondido en un
 * tooltip: cuando hay más de una opción, por qué ninguna viene elegida
 * es justamente lo que hay que leer. */
.ctrl-motivo, .ctrl-excluido {
  margin: 0; color: var(--tinta-suave); font-size: 12px; max-width: 70ch;
}
/* Lo que el servidor dejó fuera, dicho y no callado: quien busca un
 * reactivo que no está y no lee por qué, reporta la pantalla como rota. */
.ctrl-excluido { border-left: 3px solid var(--linea); padding-left: 8px; }

main { padding: 0 20px 48px; }
.loading, .vacio { color: var(--tinta-suave); }
.resumen { max-width: 70ch; }
.nota { color: var(--tinta-suave); font-size: 13px; max-width: 70ch; }

/* --- avisos ------------------------------------------------------------ */

.aviso {
  margin: 10px 0; padding: 10px 12px; border-radius: 6px;
  background: #fff7e6; border-left: 4px solid var(--ambar);
  max-width: 78ch;
}
.aviso.error { background: #fdeceb; border-left-color: var(--rojo); }
.aviso.hecho { background: #eaf5ee; border-left-color: var(--verde); }
.aviso.no-guarda, .aviso.no-guarda-cabecera {
  background: #fdeceb; border-left-color: var(--rojo);
}

/* --- fichas ------------------------------------------------------------ */

.ficha {
  background: var(--papel); border: 1px solid var(--linea);
  border-radius: 8px; padding: 16px; margin: 14px 0;
}
.ficha-cab {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 10px;
  padding-bottom: 10px; border-bottom: 1px solid var(--linea);
}
.marca-id { font-weight: 700; }
.forma { font-weight: 600; color: var(--azul); }
.meta { color: var(--tinta-suave); font-size: 13px; }

.chip {
  display: inline-block; padding: 1px 8px; border-radius: 999px;
  font-size: 12px; line-height: 18px; border: 1px solid transparent;
}

/* --- los cuatro estados, cuatro colores -------------------------------- */

.est-sin-mirar  { background: #eef1f4; color: #4a5a68; border-color: #d3dae1; }
.est-esperando  { background: #fff3d6; color: var(--ambar); border-color: #e8cf96; }
.est-no-es      { background: #fbe0de; color: var(--rojo);  border-color: #e8b4b0; }
.est-si-es      { background: #e2f1e8; color: var(--verde); border-color: #b3d8c2; }

/* --- el reparto de veredictos ------------------------------------------ */

.jueces { margin: 12px 0; }
.reparto-cab { display: flex; align-items: baseline; gap: 10px; }
.reparto-cifra { font-size: 26px; font-weight: 700; letter-spacing: .5px; }
.reparto-de { color: var(--tinta-suave); font-size: 13px; }
.partido-por-familia {
  background: #efe7fa; color: var(--violeta); border-color: #cbb6e8;
  font-weight: 600;
}

.sin-juez-de-la-casa {
  background: #fff1f4; color: #8a2342; border-color: #e8b2c2; font-weight: 600;
}
.polaridad-consenso { background: #eef1f4; color: #4a5a68; border-color: #d3dae1; }

/* Una decisión humana puesta: los veredictos pasan a ser contexto. Van
 * atenuados y con su rótulo, no escondidos — son el porqué de que hiciera
 * falta una persona. */
.decidida {
  margin: 10px 0; padding: 10px 12px; border-radius: 6px; border: 1px solid;
}
.decidida-tit { display: block; }
.decidida-nota, .decidida-polaridad, .decidida-eliminada {
  margin: 6px 0 0; font-size: 13px; max-width: 78ch;
}
.decidida-eliminada { font-weight: 600; }
.jueces.superados { opacity: .82; }
.jueces-rotulo {
  margin: 0 0 6px; font-size: 12px; text-transform: uppercase;
  letter-spacing: .04em; color: var(--tinta-suave);
}
.nem { margin: 8px 0 0; font-size: 13px; }
.nem.superado { text-decoration: line-through; color: var(--tinta-suave); }

.banda {
  margin: 8px 0; padding: 8px 10px; border-radius: 6px;
  background: #f7f9fb; border-left: 4px solid var(--linea);
}
/* La excepción lleva el color. Lo normal es el acuerdo. */
.banda.minoria { background: #fff4ef; border-left-color: #d9642a; }
.banda-cab { display: flex; align-items: baseline; gap: 8px; }
.banda-n { font-weight: 700; font-size: 17px; }
.banda-polaridad { font-weight: 600; }
.minoria-chip { background: #ffe6d9; color: #8a3b0f; border-color: #e8b795; }

.juez { display: flex; align-items: baseline; gap: 8px; padding: 2px 0 2px 14px; }
.modelo { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; }

/* --- las tres familias, y el tercero NO es el segundo ------------------ */

.casa-si { background: #e4edf6; color: var(--azul); border-color: #b9cfe4; }
.casa-no { background: #f1eef4; color: #5b4a6b; border-color: #d6cde0; }
.casa-desconocida {
  background: transparent; color: var(--tinta-suave);
  border: 1px dashed #9fadba; font-style: italic;
}

/* --- la respuesta cruda ------------------------------------------------ */

.respuesta { margin: 12px 0; }
.crudo {
  white-space: pre-wrap; word-break: break-word;
  background: #fbfcfd; border: 1px solid var(--linea); border-radius: 6px;
  padding: 12px 14px; max-width: 86ch;
}
.crudo mark.mencion {
  background: #ffe9a8; padding: 0 2px; border-radius: 3px;
  box-shadow: 0 0 0 1px #e0c66a;
}
.mencion-literal { background: #f0f2f5; padding: 0 4px; border-radius: 3px; }

/* --- el efecto, antes de decidir --------------------------------------- */

.efecto {
  margin: 12px 0; padding: 12px 14px; border-radius: 6px;
  background: #f3f7fb; border: 1px solid #cfdeeb;
}
.efecto-tit, .estados-tit, .anclas-tit, .decidir-tit, .alcance-tit {
  margin: 0 0 8px; font-size: 13px; text-transform: uppercase;
  letter-spacing: .04em; color: var(--tinta-suave);
}
.efecto-cifras { display: flex; flex-wrap: wrap; gap: 28px; }
.cifra { display: flex; flex-direction: column; }
.cifra-valor { font-size: 30px; font-weight: 700; line-height: 1.1; }
.cifra-rotulo { font-size: 12px; color: var(--tinta-suave); }
.cifra.consecuencia .cifra-valor { color: var(--rojo); }
.efecto-resta { margin: 10px 0 0; font-weight: 600; }
/* El denominador de los jueces va en el cuerpo del bloque y NO como una
 * tercera `.cifra`: con el mismo tamaño que el trabajo y la consecuencia
 * competiría con las dos, que es cómo se confundió con el trabajo. */
.efecto-jueces { margin: 6px 0 0; max-width: 78ch; }
.efecto-predicado, .efecto-filtra {
  margin: 6px 0 0; font-size: 12px; color: var(--tinta-suave); max-width: 78ch;
}

/* --- los cuatro estados del par ---------------------------------------- */

.estados { margin: 12px 0; }
.estados-lista { display: flex; flex-wrap: wrap; gap: 10px; }
.celda-estado {
  flex: 1 1 180px; padding: 10px 12px; border-radius: 6px;
  border: 1px solid; display: flex; flex-direction: column;
}
.celda-n { font-size: 22px; font-weight: 700; line-height: 1.1; }
.celda-rotulo { font-weight: 600; font-size: 13px; }
.celda-detalle { font-size: 12px; opacity: .85; }

/* --- anclas y alcance --------------------------------------------------- */

.anclas, .alcance { margin: 12px 0; }
.alcance { border: 1px solid var(--linea); border-radius: 6px; padding: 10px 12px; }
.alcance-nota, .anclas-nota {
  margin: 0 0 8px; font-size: 12px; color: var(--tinta-suave); max-width: 78ch;
}
.alcance-opcion, .ancla-opcion {
  display: grid; grid-template-columns: auto 1fr; gap: 4px 8px;
  align-items: baseline; padding: 6px 4px; border-radius: 4px; cursor: pointer;
}
.alcance-opcion:hover, .ancla-opcion:hover { background: #f3f7fb; }
.alcance-opcion.elegida, .ancla-opcion.elegida { background: #e9f1f8; }
.alcance-rotulo, .ancla-cat { font-weight: 600; }
.alcance-nota-chica, .ancla-meta {
  grid-column: 2; font-size: 12px; color: var(--tinta-suave);
}

/* --- decidir ------------------------------------------------------------ */

.decidir {
  margin: 12px 0 0; padding: 12px 14px; border-radius: 6px;
  background: #fafbfc; border: 1px solid var(--linea);
}
.efecto-elegido { font-weight: 600; margin: 0 0 10px; }
.botones { display: flex; flex-wrap: wrap; gap: 10px; }
.btn {
  font: inherit; padding: 9px 14px; border-radius: 6px; cursor: pointer;
  border: 1px solid var(--linea); background: var(--papel);
}
.btn.no-es { border-color: #e0a9a4; color: var(--rojo); }
.btn.si-es { border-color: #a9cdb8; color: var(--verde); }
.btn:disabled { opacity: .45; cursor: not-allowed; }

/* El bloque de solo lectura NO tiene controles a propósito: un control
 * apagado sigue pareciendo un control. Lo que hay es el aviso y las
 * opciones como texto inerte. */
.decidir.solo-lectura { background: #fff9f8; border-color: #e8c6c2; }
.opciones-inertes { margin: 8px 0 0; color: var(--tinta-suave); font-size: 13px; }
.opcion-inerte {
  display: inline-block; padding: 1px 8px; border-radius: 4px;
  background: #eef1f4; color: #6b7a88;
}

/* --- la banda de corte --------------------------------------------------- */

.corte {
  margin: 18px 0; padding: 12px 14px; border-radius: 6px;
  background: #fffdf2; border: 1px dashed #d9c98a;
}
.corte-cifra { display: block; }
.corte-nota { margin: 6px 0 0; font-size: 13px; color: var(--tinta-suave); max-width: 78ch; }

/* --- login --------------------------------------------------------------- */

.login {
  position: fixed; inset: 0; background: rgba(244, 246, 248, .97);
  display: flex; align-items: center; justify-content: center; z-index: 10;
}
.login-caja {
  background: var(--papel); border: 1px solid var(--linea); border-radius: 10px;
  padding: 28px 30px; max-width: 54ch;
}
.login-caja h2 { margin: 0 0 10px; font-size: 18px; }
.btn-login {
  font: inherit; padding: 9px 16px; border-radius: 6px; cursor: pointer;
  background: var(--azul); color: #fff; border: none;
}
.of { margin-top: 14px; }

.banner { margin: 10px 20px; }
