/* Panel de avisos — British Centre of Melilla
   Tokens del sistema de la web (prototipo + bcm.css). Look claro fijo.
   Cero fuentes externas: las del sistema, como en la web pública.

   Tres niveles tipográficos de texto (20 / 15 / 14) más el número (28).
   Si aparece un quinto tamaño, sobra. */

/* Poppins, servida desde NUESTRO dominio. El navegador no le pide nada a
   Google: el fichero viaja con el panel. Licencia SIL Open Font, 7,6 KB.
   Se usa SOLO para los números de teléfono — el resto sigue con las fuentes
   del sistema, como la web pública del centro. */
@font-face {
  font-family: "Poppins";
  font-style: normal;
  font-weight: 700;
  font-display: swap;   /* si tardara, el número se lee igual mientras carga */
  src: url("/poppins-700.woff2") format("woff2");
  /* Solo los caracteres que aparecen en un teléfono: cifras, espacio y signos. */
  unicode-range: U+0020, U+002B, U+0030-0039;
}

:root {
  --bcm-blue: #345199;
  --bcm-blue-700: #2a4079;
  --bcm-blue-900: #1b2c56;
  --bcm-red: #fd0003;
  --bcm-ink: #101a33;
  --bcm-paper: #f4f7fc;
  --bcm-surface: #ffffff;
  --bcm-line: #d7deec;
  /* Línea para lo que se PULSA (los nombres de la pantalla del PIN, los chips).
     --bcm-line es demasiado clara para marcar el borde de un control: este tono
     llega a 3:1 sobre el blanco, que es el mínimo para que un contorno se vea. */
  --bcm-border-strong: #8492b2;
  --bcm-muted: #4f5b7d;

  /* Alto de la barra de secciones cuando va abajo, en móvil. En rem y no en
     píxeles a propósito: de esta variable sale también el hueco que se reserva
     al final de la página, así que si el sistema amplía el texto crecen los dos
     a la vez y la barra no acaba tapando la última tarjeta. */
  --alto-secciones: 3.5rem;

  --ok-texto: #0b5c2e;
  --ok-fondo: #eaf7ef;
  --ok-borde: #bfe3cd;
  --err-texto: #8a0011;
  --err-fondo: #fdecee;
  --err-borde: #f5c2c7;
  --avi-texto: #7a4b00;
  --avi-fondo: #fff6e5;
  --avi-borde: #f0d8a8;

  --radio: 14px;
  --ease: cubic-bezier(.23, 1, .32, 1);

  --sans: "Segoe UI", system-ui, -apple-system, "Helvetica Neue", Arial, sans-serif;
  --tel: "Poppins", "Segoe UI", system-ui, sans-serif;
  --serif: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", Georgia, serif;
}

* { box-sizing: border-box; }

body {
  margin: 0;
  background: var(--bcm-paper);
  color: var(--bcm-ink);
  font-family: var(--sans);
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}

:focus-visible { outline: 3px solid var(--bcm-red); outline-offset: 2px; border-radius: 4px; }

.vh {
  position: absolute; width: 1px; height: 1px; overflow: hidden;
  clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap;
}

/* ── Cabecera ─────────────────────────────────────────────────────────────── */

.barra {
  position: sticky; top: 0; z-index: 10;
  display: flex; align-items: center; gap: 18px;
  height: 56px; padding: 0 20px;
  background: var(--bcm-surface);
  border-bottom: 1px solid var(--bcm-line);
  box-shadow: 0 1px 2px rgba(16, 26, 51, .06);   /* la ÚNICA sombra del panel */
}
.marca { display: flex; align-items: center; gap: 10px; text-decoration: none; color: inherit; }
.marca img { width: 28px; height: 28px; display: block; }
/* En una sola línea siempre: a 360 px «British Centre» se partía en dos y la
   cabecera crecía por debajo de la marca. */
.marca b { font-family: var(--serif); font-size: 1.02rem; font-weight: 600; white-space: nowrap; }
.barra .dcha { margin-left: auto; display: flex; align-items: center; gap: 8px; font-size: .88rem; color: var(--bcm-muted); }

/* «Actualizar» es un icono, así que su nombre va en aria-label. El objetivo
   táctil sigue siendo de 44 px aunque el dibujo mida 20. */
.actualizar {
  display: inline-flex; align-items: center; justify-content: center;
  width: 44px; height: 44px; border-radius: var(--radio);
  color: var(--bcm-blue); text-decoration: none;
}
.actualizar svg { width: 20px; height: 20px; }
@media (hover: hover) and (pointer: fine) { .actualizar:hover { background: #eef2fa; } }

/* ── Secciones ────────────────────────────────────────────────────────────── */

/* En escritorio son dos enlaces más de la fila de la cabecera; en móvil, este
   mismo <nav> se fija abajo. Es un solo marcado para las dos tallas. */
.barra-inferior { display: flex; align-items: center; gap: 4px; }
.barra-inferior a {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  min-height: 44px; padding: 0 14px; border-radius: var(--radio);
  color: var(--bcm-muted); text-decoration: none;
  font-size: .95rem; font-weight: 600;
}
.barra-inferior svg { width: 20px; height: 20px; flex: none; }
.barra-inferior a[aria-current="page"] { color: var(--bcm-blue); background: #eef2fa; }
@media (hover: hover) and (pointer: fine) { .barra-inferior a:hover { background: #eef2fa; } }
.barra-inferior .cuenta {
  min-width: 22px; padding: 0 6px; border-radius: 999px;
  background: var(--bcm-blue); color: #fff;
  font-size: 13px; line-height: 20px; text-align: center;
  font-variant-numeric: tabular-nums;
}

/* ── Quién está usando el panel ───────────────────────────────────────────── */

/* El nombre se ve SIEMPRE, sin desplegar nada: lo que se escribe queda a nombre
   de quien tiene la sesión y en el mostrador se turnan varias personas. Bajo el
   desplegable solo va «Salir». */
.yo { position: relative; margin: 0; border: 0; }
.yo > summary { min-height: 44px; padding: 0 6px; color: var(--bcm-ink); font-weight: 600; }
.yo > summary::before { display: none; }
.yo > summary::after {
  content: ""; flex: none; width: 7px; height: 7px;
  border-right: 2px solid var(--bcm-muted); border-bottom: 2px solid var(--bcm-muted);
  transform: translateY(-2px) rotate(45deg);
  transition: transform .15s var(--ease);
}
.yo[open] > summary::after { transform: translateY(2px) rotate(-135deg); }
.yo .menu {
  position: absolute; inset-inline-end: 0; top: 100%; z-index: 20;
  margin-top: 6px; padding: 6px;
  background: var(--bcm-surface); border: 1px solid var(--bcm-line);
  border-radius: 12px;
  box-shadow: 0 1px 2px rgba(16, 26, 51, .06), 0 12px 30px -14px rgba(16, 26, 51, .18);
}
.yo .menu form { margin: 0; }
.yo .menu .btn { width: 100%; justify-content: flex-start; white-space: nowrap; }

/* ── Contenido ────────────────────────────────────────────────────────────── */

.contenido { width: 960px; max-width: calc(100% - 32px); margin: 16px auto 40px; }

/* «Todas» pide más sitio, y solo ella. 960 px es medida de LECTURA —la cola son
   tarjetas con texto, y un renglón de 1400 px obliga al ojo a cruzar la pantalla
   para volver al principio—. Pero ocho columnas que se leen COMPARANDO no se
   leen, se barren: ahí lo que sobra es el margen, no el ancho. */
.contenido.ancho { width: 1400px; }

.titulo { margin: 0 0 4px; font-family: var(--serif); font-size: 28px; line-height: 35px; font-weight: 600; color: var(--bcm-blue-900); }
.sub { margin: 0 0 16px; font-size: 14px; color: var(--bcm-muted); }

/* ── Franjas de aviso ─────────────────────────────────────────────────────── */

.franja {
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  padding: 14px 18px; margin-bottom: 16px;
  border-radius: var(--radio); border: 1px solid;
  font-size: 15px; font-weight: 600;
}
.franja.ok { background: var(--ok-fondo); border-color: var(--ok-borde); color: var(--ok-texto); }
.franja.aviso { background: var(--avi-fondo); border-color: var(--avi-borde); color: var(--avi-texto); }
.franja.mal { background: var(--err-fondo); border-color: var(--err-borde); color: var(--err-texto); }
.franja .detalle { font-weight: 400; }
/* El aviso recibe el foco al guardar para que los lectores de pantalla lo
   anuncien: el contorno tiene que verse, no esconderse. */
.franja:focus-visible { outline: 3px solid var(--bcm-red); outline-offset: 2px; }

/* ── Hoja y tarjetas ──────────────────────────────────────────────────────── */

/* Cada persona es una tarjeta suelta, no una fila de una tabla: con espacio
   entre ellas se ve dónde empieza una y acaba otra sin tener que leer. */
.hoja { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }

.tarjeta {
  scroll-margin-top: 72px;
  padding: 16px 20px;
  background: var(--bcm-surface);
  border: 1px solid var(--bcm-line);
  border-radius: var(--radio);
  /* El filete azul de marca en todas: da estructura y ata la lista a la
     identidad del centro. El rojo se reserva para una sola tarjeta — una
     alarma encendida en las diez deja de ser una alarma. */
  border-inline-start: 4px solid var(--bcm-blue);
  box-shadow: 0 1px 2px rgba(16, 26, 51, .05), 0 8px 20px -14px rgba(16, 26, 51, .22);
}
.tarjeta.urge {
  border-inline-start-color: var(--bcm-red);
  border-inline-start-width: 5px;
  box-shadow: 0 1px 2px rgba(16, 26, 51, .05), 0 10px 24px -14px rgba(138, 0, 17, .3);
}

.cabeza { display: grid; grid-template-columns: 1fr 376px; column-gap: 24px; align-items: baseline; }

.lectura { min-width: 0; }
.linea1 { display: flex; justify-content: space-between; align-items: baseline; gap: 16px; }

.nombre {
  margin: 0;
  font-family: var(--serif); font-size: 20px; line-height: 26px; font-weight: 600;
  color: var(--bcm-ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

.numero {
  /* El dato con el que de verdad se trabaja: se lee a 70 cm y se marca a mano
     en el fijo del mostrador. Peso 700 y cifras tabulares — las tabulares son
     lo que hace que no se confundan un 6 y un 8 al teclear. */
  font-family: var(--tel);
  font-size: 28px; line-height: 32px; font-weight: 700;
  font-variant-numeric: tabular-nums; letter-spacing: .01em;
  color: var(--bcm-ink); white-space: nowrap;
  user-select: all;                 /* doble clic = número entero seleccionado */
}
.numero.no { font-size: 14px; font-weight: 600; color: var(--bcm-muted); user-select: auto; }

.motivo { margin-top: 4px; font-size: 15px; line-height: 21px; font-weight: 500; color: var(--bcm-ink); }
.meta { margin-top: 2px; font-size: 14px; line-height: 20px; color: var(--bcm-muted); font-variant-numeric: tabular-nums; }
.meta.tarde { color: var(--bcm-ink); font-weight: 600; }
.meta .urgente { color: var(--err-texto); background: var(--err-fondo); padding: 0 6px; border-radius: 4px; font-weight: 600; }
.nota { margin-top: 4px; font-size: 14px; color: var(--bcm-muted); }
.nota.aviso-edad {
  color: var(--avi-texto); background: var(--avi-fondo);
  border: 1px solid var(--avi-borde); border-radius: 8px;
  padding: 3px 9px; display: inline-block; font-weight: 600;
}

.acciones { display: flex; gap: 16px; align-items: flex-start; }

/* ── Botones ──────────────────────────────────────────────────────────────── */

.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  min-height: 44px; padding: 0 18px;
  border: 2px solid transparent; border-radius: var(--radio);
  background: var(--bcm-blue); color: #fff;
  font: inherit; font-size: 16px; font-weight: 600;
  font-variant-numeric: tabular-nums; letter-spacing: .01em;
  text-decoration: none; cursor: pointer;
  touch-action: manipulation;
}
.btn svg { width: 18px; height: 18px; flex: none; }
.btn .num { font-family: var(--tel); font-weight: 700; }
.btn.sec { background: var(--bcm-surface); color: var(--bcm-blue); border-color: var(--bcm-blue); }
.btn.plano { background: transparent; color: var(--bcm-blue); border-color: transparent; font-size: 14px; font-weight: 500; padding: 0 12px; }
.btn:active { transform: scale(.97); transition: transform 140ms var(--ease); }
.btn[disabled] { opacity: .6; cursor: default; }

@media (hover: hover) and (pointer: fine) {
  .btn:hover { background: var(--bcm-blue-700); }        /* sube el contraste */
  .btn.sec:hover, .btn.plano:hover { background: #eef2fa; }
}

/* ── Desplegable ──────────────────────────────────────────────────────────── */

details { margin-top: 12px; border-top: 1px solid var(--bcm-line); }
summary {
  display: flex; align-items: center; gap: 8px;
  min-height: 44px; cursor: pointer;
  font-size: 15px; font-weight: 500; color: var(--bcm-blue);
  list-style: none;
}
summary::-webkit-details-marker { display: none; }
summary::before {
  content: ""; flex: none; width: 8px; height: 8px;
  border-right: 2px solid currentColor; border-bottom: 2px solid currentColor;
  transform: rotate(-45deg); margin-inline: 3px 4px;
  transition: transform .15s var(--ease);
}
details[open] > summary::before { transform: rotate(45deg); }
@media (hover: hover) { summary:hover { text-decoration: underline; } }

.cuerpo { padding: 8px 0 20px; }
.cuerpo h3 { font-family: var(--serif); font-size: 16px; font-weight: 600; color: var(--bcm-blue-900); margin: 0 0 12px; }

/* ── Formulario ───────────────────────────────────────────────────────────── */

.firma {
  margin: 0 0 16px; font-size: 14px; color: var(--bcm-muted);
  background: var(--bcm-paper); border: 1px solid var(--bcm-line);
  border-radius: 8px; padding: 8px 12px; display: inline-block;
}
.firma b { color: var(--bcm-ink); }

.campo { margin-bottom: 16px; }
.campo > label { display: block; font-size: 14px; font-weight: 600; color: var(--bcm-ink); margin-bottom: 6px; }

select, textarea {
  font: inherit; font-size: 16px; color: var(--bcm-ink);
  background: var(--bcm-surface);
  border: 1px solid var(--bcm-muted); border-radius: 10px;
  padding: 10px 12px;
}
select { min-height: 44px; width: 260px; max-width: 100%; }
textarea { width: 620px; max-width: 100%; min-height: 88px; resize: vertical; line-height: 1.5; }
select:focus, textarea:focus { border-color: var(--bcm-blue); border-width: 2px; padding: 9px 11px; outline: none; }
select:focus-visible, textarea:focus-visible { outline: 3px solid var(--bcm-red); outline-offset: 2px; }
.campo.mal select, .campo.mal textarea { border-color: var(--err-texto); border-width: 2px; }

.frases { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 8px; }
.frase {
  min-height: 32px; padding: 0 12px;
  border: 1px solid var(--bcm-muted); border-radius: 8px;
  background: var(--bcm-surface); color: var(--bcm-blue);
  font: inherit; font-size: 14px; cursor: pointer;
}
@media (hover: hover) { .frase:hover { background: #eef2fa; } }

.ayuda { margin: 6px 0 0; font-size: 14px; color: var(--bcm-muted); max-width: 62ch; }
.error { margin: 6px 0 0; font-size: 14px; font-weight: 600; color: var(--err-texto); background: var(--err-fondo); padding: 6px 10px; border-radius: 8px; display: inline-block; }
.guardar { margin-top: 20px; }
.guardar .btn { min-height: 48px; }

/* ── Histórico ────────────────────────────────────────────────────────────── */

.historico { margin-top: 24px; border-top: 1px solid var(--bcm-line); padding-top: 20px; }
.consulta { border-inline-start: 2px solid var(--bcm-line); padding-inline-start: 12px; margin-bottom: 14px; }
.consulta .cab { font-size: 14px; color: var(--bcm-muted); font-variant-numeric: tabular-nums; }
.consulta .txt { font-size: 15px; color: var(--bcm-ink); margin-top: 2px; }

/* ── Estado vacío ─────────────────────────────────────────────────────────── */

.caja { background: var(--bcm-surface); border: 1px solid var(--bcm-line); border-radius: var(--radio); padding: 48px 28px; text-align: center; }
.caja h2 { font-family: var(--serif); margin: 0 0 8px; font-size: 20px; font-weight: 600; }
.caja p { margin: 0 auto; max-width: 52ch; color: var(--bcm-muted); font-size: 15px; }
.caja.mal { background: var(--err-fondo); border-color: var(--err-borde); }
.caja.mal h2, .caja.mal p { color: var(--err-texto); }

.pie { margin-top: 24px; text-align: center; font-size: 14px; color: var(--bcm-muted); }
.pie a, .sub a { color: var(--bcm-blue); font-weight: 600; }

/* ── Todas las consultas ──────────────────────────────────────────────────── */

.buscador { margin-bottom: 16px; }
.buscador > label { display: block; font-size: 14px; font-weight: 600; color: var(--bcm-ink); margin-bottom: 6px; }
.linea-buscar { display: flex; gap: 8px; }
.linea-buscar input { flex: 1 1 auto; min-width: 0; max-width: 420px; }

/* Los chips reutilizan la frase rápida, pero NO su alto: 32 px se queda por
   debajo del mínimo de 44 con el que está hecho el resto del panel, y estos se
   pulsan de pie y con el pulgar. */
.chips { margin-bottom: 16px; }
.frase.chip {
  display: inline-flex; align-items: center; min-height: 44px; padding: 0 16px;
  border-color: var(--bcm-border-strong); text-decoration: none; font-weight: 500;
}
.frase.chip[aria-current] { background: var(--bcm-blue); border-color: var(--bcm-blue); color: #fff; }

/* Una fila NO es la fila de una tabla: en 360 px no caben seis columnas. Es la
   misma tarjeta de la cola, apilada y más apretada, y sin el filete azul —aquí
   no hay nada que hacer, solo mirar—. */
.tarjeta.fila {
  padding: 12px 16px;
  border-inline-start-color: var(--bcm-line);
  box-shadow: 0 1px 2px rgba(16, 26, 51, .05);
}
.fila .nombre { margin-top: 2px; font-size: 17px; line-height: 23px; white-space: normal; }
.fila .numero { font-size: 20px; line-height: 26px; }
.fila .txt { margin: 4px 0 0; font-size: 15px; color: var(--bcm-ink); }

.paginacion { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin-top: 20px; }

/* ── Selector de idioma ───────────────────────────────────────────────────── */

/* Banderas dibujadas y no emoji: en Windows los emoji de bandera se pintan como
   las dos letras del país, que es justo lo que un selector visual evita. */
.idioma { margin: 0; display: flex; }
.btn-bandera {
  display: grid; place-items: center;
  width: 44px; height: 44px;          /* objetivo táctil, como el resto */
  padding: 0; border: 0; background: none; cursor: pointer; border-radius: 8px;
}
.btn-bandera .bandera {
  width: 26px; height: 18px; display: block;
  border-radius: 3px; border: 1px solid var(--bcm-line);
}
.btn-bandera:focus-visible { outline: 3px solid var(--bcm-red); outline-offset: -2px; }
@media (hover: hover) and (pointer: fine) { .btn-bandera:hover { background: #eef2fa; } }

/* ── Filtros de «Todas» ───────────────────────────────────────────────────── */

/* Buscar y filtrar, uno al lado del otro.
   Hasta el 14/08/2026 iban apilados, y con «Todas» ya a 1400 px eso dejaba unos
   670 px en blanco a la derecha en cada carga —y 561 px de alto antes del primer
   dato—. Ahora el buscador ocupa la izquierda y los filtros suben a ese hueco.

   `auto-fit` con `minmax` y NO un media query: las dos columnas aparecen cuando
   de verdad caben (a partir de ~1240 px de contenido) y se pliegan solas cuando
   no, sin añadir un segundo corte de maquetación al panel — que tiene uno solo,
   el de 720, y así se queda. */
.zona-filtros {
  display: grid;
  /* ⚠️ El `min(560px, 100%)` NO es adorno: con `minmax(560px, 1fr)` a secas, ese
     mínimo se aplica también en un móvil de 390 px y la columna se sale de la
     pantalla — la página entera acaba desplazándose de lado. Es la trampa
     clásica de `auto-fit`, y aquí se midió el 14/08/2026. */
  grid-template-columns: repeat(auto-fit, minmax(min(560px, 100%), 1fr));
  gap: 4px 40px;
  align-items: start;
  margin-bottom: 8px;
}
/* En una búsqueda no hay filtros que poner al lado: el buscador va solo y a lo
   ancho, sin dejar media rejilla vacía. */
.zona-filtros.sola { display: block; }
.zona-filtros .buscador { margin-bottom: 0; }
.zona-filtros .filtros { min-width: 0; }

/* Dos grupos rotulados en vez de una fila de ocho pastillas: filtran cosas
   distintas y se combinan, y juntas nadie sabría si se suman o se sustituyen. */
.grupo-filtros { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.grupo-filtros .rotulo {
  font-size: 13px; font-weight: 600; color: var(--bcm-muted);
  text-transform: uppercase; letter-spacing: .04em;
  flex: none; min-width: 52px;
}
.grupo-filtros .chips { margin: 0; }

/* ── Corregir un cierre, en «Todas» ───────────────────────────────────────── */

/* Lo que se escribió al cerrar. Se distingue del resumen de la conversación
   (que es lo que dijo la clienta) con un filete: son dos voces distintas. */
.fila .resolucion {
  margin-top: 8px; padding-inline-start: 12px;
  border-inline-start: 3px solid var(--bcm-blue);
  color: var(--bcm-ink);
}

/* El botón de devolver se separa del de guardar a propósito: son acciones
   contrarias y no deben quedar una al lado de la otra para pulsarlas sin mirar. */
.devolver {
  margin-top: 18px; padding-top: 14px;
  border-top: 1px solid var(--bcm-line);
}
.devolver .ayuda { margin-top: 8px; }

/* ── Cuadrícula de «Todas» ────────────────────────────────────────────────── */

/* Aquí SÍ hay una tabla, y es la excepción a lo que dicen los dos comentarios de
   arriba («cada persona es una tarjeta suelta», «una fila NO es la fila de una
   tabla»). Aquello vale para la lista de tarjetas, donde la unidad es la
   persona. Esto es otra cosa: ocho columnas homogéneas que se leen COMPARANDO
   filas, que es literalmente una tabla. Fingirla con `role="table"` perdería
   `scope` y `<caption>` sin ganar nada.
   No es la vista por defecto: quien no la pida no la ve, y en un móvil sigue
   mandando la tarjeta. */

/* El degradado del borde derecho avisa de que la tabla sigue. En el móvil de
   David se veía «CHANN…» cortado y NADA indicaba que se pudiera deslizar.
   `background-attachment: local` en la capa de relleno y `scroll` en la sombra
   hace que el aviso **se apague solo al llegar al final**, que es justo la señal
   que hace falta — y sin una línea de JavaScript. */
.rejilla-marco {
  overflow-x: auto;
  border: 1px solid var(--bcm-line);
  border-radius: var(--radio);
  background:
    linear-gradient(to right, var(--bcm-surface) 30%, rgba(255, 255, 255, 0)),
    linear-gradient(to left, var(--bcm-surface) 30%, rgba(255, 255, 255, 0)) 100% 0,
    radial-gradient(farthest-side at 0 50%, rgba(16, 26, 51, .12), rgba(0, 0, 0, 0)),
    radial-gradient(farthest-side at 100% 50%, rgba(16, 26, 51, .12), rgba(0, 0, 0, 0)) 100% 0;
  background-repeat: no-repeat;
  background-size: 40px 100%, 40px 100%, 14px 100%, 14px 100%;
  background-attachment: local, local, scroll, scroll;
  background-color: var(--bcm-surface);
}
.rejilla { table-layout: fixed; width: 100%; min-width: 60rem; border-collapse: collapse; }

/* 60rem (960 px) es el ancho MÍNIMO por debajo del cual la tabla empieza a
   desplazarse, no el del contenedor: desde el 14/08/2026 «Todas» mide 1400 px
   (`.contenido.ancho`), así que en un escritorio la tabla se estira y no hay
   scroll ninguno. El desplazamiento es una realidad del móvil.
   En rem y no en px a propósito, como `--alto-secciones`: si alguien amplía el
   texto del navegador, el umbral sube con él. */

.rejilla th, .rejilla td {
  padding: 12px 10px;
  text-align: start;
  font-size: 14px;
  border-block-end: 1px solid var(--bcm-line);
  /* Una línea por celda. Dos, y el ojo deja de poder barrer la columna. Se
     puede truncar porque la fila entera lleva al registro completo: las dos
     decisiones se sostienen la una a la otra. */
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.rejilla thead th {
  font-size: 13px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  color: var(--bcm-muted); background: var(--bcm-paper);
}
/* Nada de `position: sticky` en el thead: `overflow-x` hace que este marco sea
   contenedor de scroll también en vertical, y dentro nunca hay scroll vertical
   —su alto es el del contenido—, así que un thead pegajoso se quedaría quieto
   sin pegarse a nada. Son 25 filas: pantalla y media. */

.rejilla tbody tr { position: relative; }
.rejilla tbody tr:last-child th, .rejilla tbody tr:last-child td { border-block-end: 0; }
.rejilla tbody th[scope="row"] {
  font-weight: 600; font-variant-numeric: tabular-nums;
  /* La fecha se queda a la vista al deslizar en horizontal: en un móvil, lo que
     se pierde al desplazar no es «qué columna es esta» sino «qué fila es esta».
     `box-shadow` en vez de `border-inline-end` porque con `border-collapse` los
     bordes de una celda fija se comportan mal. */
  position: sticky; inset-inline-start: 0;
  background: var(--bcm-surface);
  box-shadow: inset -1px 0 var(--bcm-line);
  /* ⚠️ z-index 1, POR DEBAJO de la capa del enlace (2). Medido el 14/08/2026:
     con el sticky por encima, pulsar en la celda de la fecha NO HACE NADA, y no
     da ningún error — simplemente no pasa nada y nadie sabe por qué. Por debajo
     funcionan las dos cosas: la columna sigue congelada y tapando lo que pasa
     por detrás (la capa del enlace es transparente y no pinta nada), y la fila
     entera se puede pulsar. */
  z-index: 1;
}

/* UN solo enlace por fila —no ocho—, estirado sobre ella. Así hay una parada de
   tabulador por fila en vez de doscientas por página, y el foco se dibuja sobre
   la fila completa.
   Lo que cuesta, dicho para quien lo cambie algún día: con la capa encima NO se
   puede seleccionar texto de la fila con el ratón. Si el centro lo echa en
   falta, el repliegue es dejar el enlace solo en su celda con `display:block`. */
.rejilla .ir { color: var(--bcm-ink); text-decoration: none; font-weight: 600; }
.rejilla .ir::after { content: ""; position: absolute; inset: 0; z-index: 2; }
.rejilla .ir:focus-visible { outline: none; }
.rejilla .ir:focus-visible::after { outline: 3px solid var(--bcm-red); outline-offset: -3px; }

@media (hover: hover) and (pointer: fine) {
  .rejilla tbody tr:hover td, .rejilla tbody tr:hover th { background: var(--bcm-paper); }
}

/* Los anchos, repartidos por lo que mide cada dato de verdad y no a ojo. La
   fecha se lleva la tajada grande porque es el encabezado de la fila y **la
   hora es lo único que distingue cinco consultas del mismo día**: cortarla ahí
   dejaba cinco filas idénticas. Lo demás sí se puede truncar, porque la fila
   entera lleva al registro completo. */
.rejilla .c-fecha { width: 15%; }
.rejilla .c-canal { width: 9%; }
.rejilla .c-persona { width: 18%; }
.rejilla .c-para { width: 11%; }
.rejilla .c-motivo { width: 14%; }
.rejilla .c-curso { width: 12%; }
.rejilla .c-estado { width: 10%; }
.rejilla .c-quien { width: 11%; }
/* La fecha nunca se parte ni se corta: si no cupiera, antes se estrecha otra. */
.rejilla tbody th[scope="row"] { text-overflow: clip; }

/* La última fila de filtros lleva TRES cosas en una línea: el mes, su botón y
   el selector de vista, este último empujado a la derecha. Va sin rótulo porque
   el propio desplegable ya dice «Todos los meses» o «Agosto 2026» — más de lo
   que decía la palabra «MES», que era lo que obligaba a partir la línea. */
.fila-mes { flex-wrap: nowrap; gap: 8px; }
.selector-vista { display: flex; gap: 4px; margin: 0; margin-inline-start: auto; flex: none; }

/* Dos iconos y no dos pastillas de texto: en 390 px, dos pastillas se llevan
   ~230 px y no caben junto a un desplegable de ~180. Los 44 px se mantienen:
   esto SÍ se pulsa, y muchas veces con el pulgar. */
.btn-vista {
  display: inline-flex; align-items: center; justify-content: center;
  width: 44px; height: 44px; padding: 0;
  border: 1px solid var(--bcm-border-strong); border-radius: var(--radio);
  background: var(--bcm-surface); color: var(--bcm-blue);
  cursor: pointer;
}
.btn-vista svg { width: 20px; height: 20px; }
.btn-vista[aria-current] { background: var(--bcm-blue); border-color: var(--bcm-blue); color: #fff; }
@media (hover: hover) and (pointer: fine) {
  .btn-vista:not([aria-current]):hover { background: #eef2fa; }
}

/* La tarjeta a la que se llega pulsando una fila. Recupera el filete azul que
   `.tarjeta.fila` había apagado: sin nada que la distinga, quien salta desde la
   cuadrícula no sabe en cuál de las veinticinco ha caído. */
.tarjeta.fila:target { border-inline-start-color: var(--bcm-blue); background: var(--bcm-paper); }

/* ── Contadores del mes ───────────────────────────────────────────────────── */

/* Cuántos contactos ha recibido el centro este mes. NO se pulsa —no es enlace ni
   filtro—, así que aquí no rige el objetivo táctil de 44 px: no hay nada que
   acertar con el pulgar. Va discreto a propósito: lo accionable de esta barra es
   la cuenta de pendientes, y tres cifras compitiendo en 56 px no las lee nadie. */
.contadores {
  display: flex; align-items: center; gap: 14px;
  flex: none; margin: 0; padding-inline-start: 14px;
  border-inline-start: 1px solid var(--bcm-line);
  font-size: 13px; color: var(--bcm-muted); white-space: nowrap;
}
.contadores .contador { display: inline-flex; align-items: center; gap: 6px; }
/* De qué mes hablan las cifras. Sin esto son dos números sueltos y cada cual
   entiende un periodo distinto: hoy, la semana, el total… */
.contadores .mes-cont { font-size: 12px; letter-spacing: .02em; text-transform: lowercase; }
.contadores svg { width: 16px; height: 16px; flex: none; color: var(--bcm-blue); }
.contadores b {
  /* Tabulares: el 9 de las 10:10 tiene que ocupar lo mismo que el 12 de las
     10:00, o la cabecera entera se mueve sola al recargar. */
  font-size: 15px; font-weight: 700; color: var(--bcm-ink);
  font-variant-numeric: tabular-nums;
}

/* Filtro de mes de «Todas». Aquí SÍ se pulsa, y los 44 px salen solos: los
   heredan `select` y `.btn`. */
.filtro-mes { display: flex; align-items: center; gap: 8px; margin: 0; }
.filtro-mes select { width: auto; min-width: 11rem; margin: 0; }

/* Las cifras del mes elegido, al lado de la pregunta. Arriba va siempre el mes
   en curso; aquí, el que se esté mirando. */
.cifras-mes {
  margin: 8px 0 0; font-size: .9rem; color: var(--bcm-muted);
  font-variant-numeric: tabular-nums;
}

/* ── Móvil ────────────────────────────────────────────────────────────────── */

/* Los contadores desaparecen antes que el resto, y por eso van fuera del bloque
   de 720: no son un segundo tamaño de pantalla —el panel sigue teniendo un solo
   corte de maquetación— sino un interruptor de «cabe / no cabe» para un elemento
   opcional.

   El umbral está MEDIDO en un navegador, no estimado (14/08/2026, en español,
   con «Siobhan» y la insignia de pendientes puesta, que es el peor caso):

     · sin los contadores, la barra ocupa 653 px
     · con ellos, 830
     · a 721 px solo hay 681 disponibles → NO cabrían, así que 720 habría sido
       un umbral equivocado
     · a 901 px hay 861 → caben, pero con 31 px de margen, y la previsión son
       unas 300 llamadas al mes: las cifras van a tener TRES dígitos casi
       siempre, y ese margen se quedaría en 13 px
     · a 961 px hay 921 → 91 px de margen, que aguanta cuatro dígitos y nombres
       más largos sin volver a tocar esto

   Y es la EXCEPCIÓN a la regla de la casa —«reposicionar un marcado único, no
   duplicarlo ni ocultarlo», layout.tsx—. Por qué aquí no se puede reposicionar:
   abajo está la navegación al alcance del pulgar, y un dato informativo no le
   quita el sitio a lo que se pulsa; y bajarlo al cuerpo sería marcado distinto
   en cada talla, que es justo lo que aquella regla evita.

   `display: none` y no `.vh`: quien usa un lector de pantalla en el móvil
   tampoco necesita oír dos veces al día un dato de gestión. */
@media (max-width: 960px) {
  .contadores { display: none; }
}

/* En pantallas MUY estrechas —320 px, un iPhone SE de los primeros— la cabecera
   no cabe: marca + bandera + actualizar + nombre suman 350 px y la página
   entera se desplaza de lado. Medido el 14/08/2026; venía de antes, no lo
   trajo la cuadrícula.
   Se calla el nombre de la marca, no el isotipo: sigue estando el enlace a
   inicio, sigue reconociéndose el panel, y quien use un lector de pantalla lo
   oye igual porque el texto se va a `.vh`, no a `display:none`. */
@media (max-width: 360px) {
  .marca b { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
}

/* El corte con el escritorio es exacto: hasta 720 px manda este bloque y a
   partir de 721 px vuelven a mandar las reglas de arriba —una sola fila y sin
   barra abajo—. Si los dos límites fueran 720, a ese ancho exacto se aplicarían
   los dos y quedaría la pantalla sin navegación o con las dos superpuestas. */
@media (max-width: 720px) {
  .barra { padding: 0 14px; gap: 8px; }
  /* Aquí `select` ocupa todo el ancho, y eso mandaría el botón «Ver» a la línea
     de abajo dejándolo huérfano del desplegable al que pertenece. */
  .filtro-mes select { width: auto; flex: 1 1 auto; min-width: 0; }
  /* El desplegable cede ancho antes de que nada salte de línea. */
  .fila-mes { flex-wrap: wrap; }
  .fila-mes .filtro-mes { flex: 1 1 auto; min-width: 0; }
  .filtro-mes select { min-width: 0; }
  /* ⚠️ `.contenido.ancho` tiene DOS clases y gana a `.contenido` por
     especificidad, así que si no se repite aquí se queda con sus 1400 px en un
     móvil de 390 — y como este bloque además quita el `max-width`, no hay nada
     que lo frene: la página entera se desplaza en horizontal. Medido el
     14/08/2026: `scrollWidth` del body a 1416 px. */
  .contenido, .contenido.ancho { width: auto; max-width: none; margin: 12px 16px 0; }
  .titulo { font-size: 24px; line-height: 30px; }

  /* La navegación baja al pulgar: el panel se usa de pie, en el mostrador y a
     una mano. */
  .barra-inferior {
    position: fixed; inset-inline: 0; bottom: 0; z-index: 20;
    gap: 0; min-height: var(--alto-secciones);
    padding-bottom: env(safe-area-inset-bottom, 0px);
    background: var(--bcm-surface);
    border-top: 1px solid var(--bcm-line);
  }
  .barra-inferior a { flex: 1 1 0; min-height: var(--alto-secciones); border-radius: 0; font-size: .9rem; }
  .barra-inferior a[aria-current="page"] { box-shadow: inset 0 -3px 0 var(--bcm-blue); }

  /* Hueco al final para que la barra no tape la última tarjeta. Sale de la
     variable y no de un número escrito a mano. */
  .contenido { padding-bottom: calc(var(--alto-secciones) + env(safe-area-inset-bottom, 0px) + 24px); }

  /* El teclado del móvil sube y tapa el textarea y el botón «Guardar»: es el
     fallo clásico de una barra fija. Mientras se escribe, la barra se quita de
     en medio —a nadie le hace falta navegar con el teclado abierto— y el hueco
     de abajo se reserva para cuando el navegador lleve el campo a la vista. */
  body:has(textarea:focus, input:focus) .barra-inferior { display: none; }
  .cierre, .guardar, .buscador, textarea { scroll-margin-bottom: calc(var(--alto-secciones) + 24px); }

  .cabeza { grid-template-columns: 1fr; row-gap: 12px; }
  .linea1 { display: block; }
  .nombre { font-size: 19px; line-height: 25px; white-space: normal; }
  .numero { display: block; margin-top: 8px; font-size: 32px; line-height: 36px; letter-spacing: .02em; }
  .acciones { flex-direction: column; align-items: stretch; gap: 10px; }
  .acciones .btn { width: 100%; }
  textarea, select { width: 100%; }
}

@media (prefers-reduced-motion: reduce) {
  *, summary::before { transition: none !important; animation: none !important; }
  .btn:active { transform: none; }
}

/* ── Pantallas de entrada ─────────────────────────────────────────────────── */

body.entrada {
  display: grid; place-items: center; min-height: 100vh; padding: 24px;
}
.tarjeta-entrada {
  width: 100%; max-width: 420px;
  background: var(--bcm-surface); border: 1px solid var(--bcm-line);
  border-radius: var(--radio); padding: 32px 28px 26px;
  box-shadow: 0 1px 2px rgba(16,26,51,.06), 0 12px 30px -14px rgba(16,26,51,.18);
}
.tarjeta-entrada .iso { display: block; margin-bottom: 18px; }
.tarjeta-entrada h1 {
  font-family: var(--serif); font-size: 24px; line-height: 30px; font-weight: 600;
  color: var(--bcm-blue-900); margin: 0 0 8px;
}
.tarjeta-entrada .intro { margin: 0 0 20px; font-size: 15px; color: var(--bcm-muted); }
/* El aviso de la ventana privada: se lee si hace falta, no compite con nada. */
.tarjeta-entrada .intro.chico { font-size: 13.5px; line-height: 1.45; margin-top: -12px; }
.tarjeta-entrada .campo { margin-bottom: 18px; }
/* Acotado a la etiqueta de un campo. Antes era `.tarjeta-entrada label` a secas
   y, por especificidad, le ganaba a `.marca-equipo`: le anulaba el `display:
   flex` y la casilla salía pegada al texto, sin el hueco de 10 px. */
.tarjeta-entrada .campo > label { display: block; font-size: 14px; font-weight: 600; margin-bottom: 6px; }

input[type="text"], input[type="password"], input[type="search"] {
  font: inherit; font-size: 16px; width: 100%; min-height: 44px;
  color: var(--bcm-ink); background: var(--bcm-surface);
  border: 1px solid var(--bcm-muted); border-radius: 10px; padding: 10px 12px;
  /* Sin esto, iOS pinta la caja de búsqueda a su manera y se sale del panel. */
  -webkit-appearance: none; appearance: none;
}
input[type="text"]:focus, input[type="password"]:focus, input[type="search"]:focus {
  border-color: var(--bcm-blue); border-width: 2px; padding: 9px 11px; outline: none;
}
input.pin {
  font-size: 28px; letter-spacing: .5em; text-align: center;
  font-variant-numeric: tabular-nums; padding-left: .5em;
}

.btn.ancho { width: 100%; min-height: 48px; margin-top: 4px; }

/* Toda la fila es pulsable, no solo el cuadradito: en un móvil, acertar en 20
   píxeles con el pulgar es pedir demasiado. De ahí el recuadro, el alto de 44 y
   el hueco entre la casilla y el texto. */
.marca-equipo {
  display: flex; align-items: center; gap: 12px; margin: 0 0 20px;
  min-height: 44px; padding: 10px 12px;
  border: 1px solid var(--bcm-line); border-radius: 10px;
  font-size: 14px; font-weight: 400 !important; line-height: 1.35;
  color: var(--bcm-muted); cursor: pointer;
}
.marca-equipo input {
  width: 22px; height: 22px; margin: 0; flex: none;
  accent-color: var(--bcm-blue); cursor: pointer;
}
.marca-equipo:has(input:focus-visible) { outline: 3px solid var(--bcm-red); outline-offset: 2px; }
.marca-equipo:has(input:checked) { border-color: var(--bcm-blue); color: var(--bcm-ink); }
@media (hover: hover) { .marca-equipo:hover { border-color: var(--bcm-blue); } }

/* Ver la contraseña mientras se teclea. El botón va DENTRO de la caja, con 40
   px de lado para que se pueda pulsar con el pulgar, y el input le deja sitio
   con el relleno derecho. */
.con-ojo { position: relative; display: block; }
.con-ojo input { padding-right: 50px; }
.con-ojo input:focus { padding-right: 49px; }
.ojo {
  position: absolute; right: 3px; top: 50%; transform: translateY(-50%);
  width: 40px; height: 40px; display: grid; place-items: center;
  padding: 0; border: 0; border-radius: 8px;
  background: none; color: var(--bcm-muted); cursor: pointer;
}
.ojo svg { width: 22px; height: 22px; display: block; }
.ojo .tapado { display: none; }
.ojo[aria-pressed="true"] { color: var(--bcm-blue); }
.ojo[aria-pressed="true"] .abierto { display: none; }
.ojo[aria-pressed="true"] .tapado { display: block; }
.ojo:focus-visible { outline: 3px solid var(--bcm-red); outline-offset: 1px; }
@media (hover: hover) { .ojo:hover { background: #eef2fa; color: var(--bcm-blue); } }

.personas { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 20px; }
.persona-op { margin: 0; }
.persona-op input { position: absolute; opacity: 0; pointer-events: none; }
.persona-op span {
  display: inline-block; min-height: 44px; padding: 10px 18px;
  border: 1px solid var(--bcm-border-strong); border-radius: 999px;
  font-size: 15px; font-weight: 600; color: var(--bcm-muted); cursor: pointer;
}
.persona-op input:checked + span {
  background: var(--bcm-blue); border-color: var(--bcm-blue); color: #fff;
}
.persona-op input:focus-visible + span { outline: 3px solid var(--bcm-red); outline-offset: 2px; }

.error.bloque { display: block; margin: 0 0 18px; }
.pie-entrada { margin: 20px 0 0; font-size: 14px; color: var(--bcm-muted); text-align: center; }
.pie-entrada a { color: var(--bcm-blue); font-weight: 600; }
