@charset "UTF-8";
/* =========================================================================
   CONVENCIÓN — Hoja de estilos única (design system)
   Mobile-first · Sin dependencias externas · Fuentes del sistema
   Puntos de quiebre: 640px y 1024px
   ÍNDICE: 01 Tokens · 02 Reset · 03 Tipografía · 04 Layout · 05 Cabecera y pie
   06 Tarjetas · 07 Botones · 08 Formularios · 09 Alertas · 10 Insignias
   11 Tablas · 12 Pasos · 13 Datos y copiar · 14 Admin · 15 Filtros y métricas
   16 Alojamiento · 17 Diálogo · 18 Repetidor y vista previa · 19 Utilidades
   20 Accesibilidad · 21 Puntos de quiebre · 22 Impresión
   23 Tabla de asistentes (al final del archivo)
   ========================================================================= */

/* ---------- 01. TOKENS --------------------------------------------------- */
:root {
  --c-fondo: #f6f7f9;
  --c-superficie: #ffffff;
  --c-borde: #dfe3e8;
  /* Borde exclusivo de los controles de formulario: WCAG 1.4.11 pide 3:1 para el
     limite visual de un control. #8a94a1 da 3,07:1 sobre blanco; --c-borde da 1,29:1
     y sirve solo para separadores decorativos. */
  --c-borde-campo: #8a94a1;
  --c-texto: #1c2430;
  --c-texto-suave: #5b6673;
  --c-primario: #1d4e89;
  --c-primario-oscuro: #163c69;
  --c-primario-suave: #e8f0f9;
  --c-ok: #1d7a4c;
  --c-ok-suave: #e6f4ec;
  --c-error: #b3261e;
  --c-error-suave: #fdeceb;
  --c-aviso: #9a6700;
  --c-aviso-suave: #fdf6e3;
  --r-sm: 6px;
  --r-md: 10px;
  --r-lg: 16px;
  --sombra-1: 0 1px 2px rgba(28,36,48,.06), 0 1px 3px rgba(28,36,48,.08);
  --sombra-2: 0 4px 14px rgba(28,36,48,.10), 0 2px 4px rgba(28,36,48,.06);
  --e-1: 4px;
  --e-2: 8px;
  --e-3: 12px;
  --e-4: 16px;
  --e-5: 24px;
  --e-6: 32px;
  --e-7: 48px;
  /* Apoyo (no forman parte del contrato, pero se usan en este archivo) */
  --fuente: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif;
  --fuente-mono: ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
  --ancho-max: 960px;
  --ancho-nav: 232px;
  --alto-tactil: 44px;
  --borde-ok: #bfe2cf;
  --borde-error: #f2c7c4;
  --borde-aviso: #ecdcae;
  --borde-primario: #c8dcf0;
  --texto-ok-fuerte: #145c39;
  --texto-error-fuerte: #8f1e18;
  --texto-aviso-fuerte: #7a5200;
}

/* ---------- 02. RESET ---------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }
/* El [hidden]{display:none} del navegador tiene especificidad 0-1-0 y cualquier
   clase con display propio (.alerta, .btn, .cama, .repetidor-acciones) le gana.
   Sin esta linea el aviso de "maximo de asistentes" se ve siempre y el filtro
   de camas no oculta nada. */
[hidden] { display: none !important; }
html { font-size: 17px; -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
body {
  margin: 0; min-height: 100vh;
  font-family: var(--fuente); font-size: 1rem; line-height: 1.55;
  color: var(--c-texto); background: var(--c-fondo);
  -webkit-font-smoothing: antialiased;
}
img, svg, video { max-width: 100%; height: auto; }
hr { border: 0; border-top: 1px solid var(--c-borde); margin: var(--e-5) 0; }
fieldset { border: 0; margin: 0; padding: 0; min-width: 0; }

/* ---------- 03. TIPOGRAFÍA ----------------------------------------------- */
h1, h2, h3, h4, h5, h6 { margin: 0 0 var(--e-3); font-weight: 600; line-height: 1.25; color: var(--c-texto); }
h1 { font-size: 1.6rem; }
h2 { font-size: 1.3rem; }
h3 { font-size: 1.12rem; }
h4 { font-size: 1rem; }
p { margin: 0 0 var(--e-4); }
p:last-child { margin-bottom: 0; }
ul, ol { margin: 0 0 var(--e-4); padding-left: var(--e-5); }
small { font-size: .85rem; }
strong, b { font-weight: 600; }
a { color: var(--c-primario); text-decoration: underline; text-underline-offset: 2px; }
a:hover { color: var(--c-primario-oscuro); }
code, kbd, samp { font-family: var(--fuente-mono); font-size: .92em; }

/* ---------- 04. LAYOUT --------------------------------------------------- */
.contenedor { width: 100%; max-width: var(--ancho-max); margin: 0 auto; padding: var(--e-4); }
.pagina { display: flex; flex-direction: column; min-height: 100vh; }
.pagina > main { flex: 1 0 auto; }
.seccion { margin-bottom: var(--e-5); }

/* ---------- 05. CABECERA Y PIE PÚBLICOS ---------------------------------- */
.cabecera { background: var(--c-primario); color: #fff; box-shadow: var(--sombra-1); }
.cabecera-interior {
  max-width: var(--ancho-max); margin: 0 auto; padding: var(--e-4);
  display: flex; flex-direction: column; gap: var(--e-2);
}
.cabecera-titulo { margin: 0; font-size: 1.2rem; font-weight: 600; color: #fff; }
.cabecera-titulo a { color: #fff; text-decoration: none; }
.cabecera-sub { margin: 0; font-size: .9rem; color: rgba(255,255,255,.88); }
.cabecera-nav { display: flex; flex-wrap: wrap; gap: var(--e-3); margin-top: var(--e-1); }
.cabecera-nav a {
  color: #fff; text-decoration: none; font-size: .95rem;
  padding: var(--e-2) 0; border-bottom: 2px solid transparent;
  min-height: var(--alto-tactil); display: inline-flex; align-items: center;
}
.cabecera-nav a:hover { border-bottom-color: rgba(255,255,255,.6); }
.cabecera-nav a.activo { border-bottom-color: #fff; font-weight: 600; }
.pie {
  margin-top: var(--e-6); background: var(--c-superficie);
  border-top: 1px solid var(--c-borde); color: var(--c-texto-suave); font-size: .9rem;
}
.pie-interior {
  max-width: var(--ancho-max); margin: 0 auto; padding: var(--e-5) var(--e-4);
  display: flex; flex-direction: column; gap: var(--e-2);
}
.pie a { color: var(--c-primario); }

/* ---------- 06. TARJETAS ------------------------------------------------- */
.tarjeta {
  background: var(--c-superficie); border: 1px solid var(--c-borde);
  border-radius: var(--r-md); box-shadow: var(--sombra-1);
  margin-bottom: var(--e-4); overflow: hidden;
}
.tarjeta-cab {
  padding: var(--e-4); border-bottom: 1px solid var(--c-borde); background: #fbfcfd;
  display: flex; flex-wrap: wrap; gap: var(--e-3);
  align-items: center; justify-content: space-between;
}
.tarjeta-cab h1, .tarjeta-cab h2, .tarjeta-cab h3 { margin: 0; }
.tarjeta-cuerpo { padding: var(--e-4); }
.tarjeta-cuerpo > :last-child { margin-bottom: 0; }
.tarjeta-destacada { border-color: var(--c-primario); border-width: 2px; }

/* ---------- 07. BOTONES -------------------------------------------------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--e-2);
  min-height: var(--alto-tactil); padding: var(--e-3) var(--e-5);
  font-family: inherit; font-size: 1rem; font-weight: 600; line-height: 1.2;
  text-align: center; text-decoration: none;
  color: var(--c-texto); background: var(--c-superficie);
  border: 1px solid var(--c-borde); border-radius: var(--r-sm); cursor: pointer;
  transition: background-color .15s ease, border-color .15s ease, color .15s ease;
}
.btn:hover { background: #f0f2f5; }
.btn:active { transform: translateY(1px); }
.btn[disabled], .btn.btn-desactivado { opacity: .55; cursor: not-allowed; pointer-events: none; }
.btn-primario { color: #fff; background: var(--c-primario); border-color: var(--c-primario); }
.btn-primario:hover { color: #fff; background: var(--c-primario-oscuro); border-color: var(--c-primario-oscuro); }
.btn-secundario { color: var(--c-primario); background: var(--c-primario-suave); border-color: var(--borde-primario); }
.btn-secundario:hover { background: #dbe8f6; color: var(--c-primario-oscuro); }
.btn-peligro { color: #fff; background: var(--c-error); border-color: var(--c-error); }
.btn-peligro:hover { color: #fff; background: var(--texto-error-fuerte); border-color: var(--texto-error-fuerte); }
.btn-sm { min-height: 40px; padding: var(--e-2) var(--e-3); font-size: .92rem; }
.btn-bloque { display: flex; width: 100%; }
.btn-enlace {
  background: none; border-color: transparent; color: var(--c-primario);
  text-decoration: underline; padding-left: var(--e-2); padding-right: var(--e-2);
}
.btn-enlace:hover { background: var(--c-primario-suave); }

/* ---------- 08. FORMULARIOS ---------------------------------------------- */
.campo { margin-bottom: var(--e-4); }
.campo-label { display: block; margin-bottom: var(--e-2); font-weight: 600; font-size: .95rem; color: var(--c-texto); }
.campo-obligatorio { color: var(--c-error); margin-left: 2px; }
.campo-input, .campo-select, .campo-textarea {
  display: block; width: 100%; min-height: var(--alto-tactil); padding: var(--e-3);
  font-family: inherit; font-size: 16px; /* evita el zoom de iOS */ line-height: 1.4;
  color: var(--c-texto); background: var(--c-superficie);
  border: 1px solid var(--c-borde-campo); border-radius: var(--r-sm); appearance: none;
}
.campo-textarea { min-height: 110px; resize: vertical; }
.campo-select {
  padding-right: var(--e-6);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath fill='%235b6673' d='M1.4 0 6 4.6 10.6 0 12 1.4 6 7.4 0 1.4Z'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right var(--e-3) center; background-size: 12px 8px;
}
.campo-input:hover, .campo-select:hover, .campo-textarea:hover { border-color: #c3cad3; }
.campo-input::placeholder, .campo-textarea::placeholder { color: var(--c-texto-suave); }
.campo-input:disabled, .campo-select:disabled, .campo-textarea:disabled {
  background: #f1f3f6; color: var(--c-texto-suave); cursor: not-allowed;
}
.campo-ayuda { display: block; margin-top: var(--e-2); font-size: .87rem; color: var(--c-texto-suave); }
.campo-error { display: block; margin-top: var(--e-2); font-size: .95rem; font-weight: 600; color: var(--c-error); }
.campo-con-error .campo-input,
.campo-con-error .campo-select,
.campo-con-error .campo-textarea { border-color: var(--c-error); background: var(--c-error-suave); }
.campo-check {
  display: flex; align-items: flex-start; gap: var(--e-3);
  min-height: var(--alto-tactil); padding: var(--e-2) 0; font-size: .97rem; cursor: pointer;
}
.campo-check input[type="checkbox"], .campo-check input[type="radio"] {
  width: 22px; height: 22px; margin: 2px 0 0; flex: 0 0 auto;
  accent-color: var(--c-primario); cursor: pointer;
}
.campo-check span { display: block; }
.campo-fila { display: grid; grid-template-columns: 1fr; gap: 0 var(--e-4); }
.campo-grupo {
  border: 1px solid var(--c-borde); border-radius: var(--r-md);
  padding: var(--e-4); margin: 0 0 var(--e-4); background: var(--c-superficie);
}
.campo-grupo > legend { padding: 0 var(--e-2); font-weight: 600; font-size: 1rem; }

/* ---------- 09. ALERTAS -------------------------------------------------- */
.alerta {
  display: flex; gap: var(--e-3); padding: var(--e-3) var(--e-4); margin-bottom: var(--e-4);
  border: 1px solid var(--c-borde); border-left-width: 4px; border-radius: var(--r-sm);
  background: var(--c-superficie); font-size: .97rem;
}
.alerta > :last-child { margin-bottom: 0; }
.alerta-ok { background: var(--c-ok-suave); border-color: var(--borde-ok); border-left-color: var(--c-ok); color: var(--texto-ok-fuerte); }
.alerta-error { background: var(--c-error-suave); border-color: var(--borde-error); border-left-color: var(--c-error); color: var(--texto-error-fuerte); }
.alerta-aviso { background: var(--c-aviso-suave); border-color: var(--borde-aviso); border-left-color: var(--c-aviso); color: var(--texto-aviso-fuerte); }
.alerta-info { background: var(--c-primario-suave); border-color: var(--borde-primario); border-left-color: var(--c-primario); color: var(--c-primario-oscuro); }

/* ---------- 10. INSIGNIAS DE ESTADO -------------------------------------- */
.insignia {
  display: inline-block; padding: 3px var(--e-3); border: 1px solid transparent;
  border-radius: 999px; font-size: .88rem; font-weight: 600; line-height: 1.5;
  white-space: nowrap; background: #eceff3; color: var(--c-texto-suave);
}
.insignia-pendiente { background: var(--c-aviso-suave); border-color: var(--borde-aviso); color: var(--texto-aviso-fuerte); }
.insignia-revision { background: var(--c-primario-suave); border-color: var(--borde-primario); color: var(--c-primario-oscuro); }
.insignia-confirmada { background: var(--c-ok-suave); border-color: var(--borde-ok); color: var(--texto-ok-fuerte); }
.insignia-rechazada { background: var(--c-error-suave); border-color: var(--borde-error); color: var(--texto-error-fuerte); }
.insignia-anulada { background: #eceff3; border-color: var(--c-borde); color: var(--c-texto-suave); text-decoration: line-through; }

/* ---------- 11. TABLAS --------------------------------------------------- */
.tabla-envoltura {
  width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch;
  border: 1px solid var(--c-borde); border-radius: var(--r-md); background: var(--c-superficie);
}
.tabla { width: 100%; border-collapse: collapse; font-size: .95rem; }
.tabla caption { text-align: left; padding: var(--e-3) var(--e-4); color: var(--c-texto-suave); font-size: .9rem; }
.tabla th, .tabla td {
  padding: var(--e-3) var(--e-4); text-align: left; vertical-align: middle;
  border-bottom: 1px solid var(--c-borde); white-space: nowrap;
}
.tabla th {
  font-weight: 600; font-size: .95rem; text-transform: uppercase; letter-spacing: .02em;
  color: var(--c-texto-suave); background: #fbfcfd;
}
.tabla tbody tr:last-child td { border-bottom: 0; }
.tabla tbody tr:hover { background: #fafbfc; }
.tabla .num { text-align: right; font-variant-numeric: tabular-nums; }
.tabla .envolver { white-space: normal; min-width: 200px; }
.tabla-vacia { padding: var(--e-6) var(--e-4); text-align: center; color: var(--c-texto-suave); background: var(--c-superficie); }
/* Aviso de desplazamiento: se escribe en el HTML junto a la tabla y solo se ve
   en pantallas angostas, que es donde la tabla puede no caber entera. */
.tabla-aviso-desliza { display: none; }
@media (max-width: 640px) {
  /* Sin esto ninguna celda parte linea y la tabla se esconde tras el overflow:
     en el telefono el inscrito no alcanzaba a ver la columna Monto de su desglose. */
  .tabla th, .tabla td { white-space: normal; padding: var(--e-3) var(--e-2); }
  .tabla .num, .tabla .texto-mono { white-space: nowrap; }
  .tabla .envolver { min-width: 0; }
  .tabla-aviso-desliza {
    display: block; margin: 0 0 var(--e-2);
    font-size: .9rem; color: var(--c-texto-suave);
  }
}

/* ---------- 12. INDICADOR DE PASOS --------------------------------------- */
.pasos { display: flex; list-style: none; margin: 0 0 var(--e-5); padding: 0; }
.paso { flex: 1 1 0; position: relative; text-align: center; padding-top: 38px; font-size: .82rem; color: var(--c-texto-suave); }
.paso-numero {
  position: absolute; top: 0; left: 50%; transform: translateX(-50%);
  width: 30px; height: 30px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-weight: 600; font-size: .9rem; background: var(--c-superficie);
  border: 2px solid var(--c-borde); color: var(--c-texto-suave); z-index: 1;
}
.paso::before, .paso::after { content: ""; position: absolute; top: 14px; width: 50%; height: 2px; background: var(--c-borde); }
.paso::before { left: 0; }
.paso::after { left: 50%; }
.paso:first-child::before, .paso:last-child::after { display: none; }
.paso-activo { color: var(--c-primario-oscuro); font-weight: 600; }
.paso-activo .paso-numero { border-color: var(--c-primario); background: var(--c-primario); color: #fff; }
.paso-completo { color: var(--c-ok); }
.paso-completo .paso-numero { border-color: var(--c-ok); background: var(--c-ok); color: #fff; }
.paso-completo::before, .paso-completo::after, .paso-activo::before { background: var(--c-ok); }
/* Etiqueta de texto del paso: en pantallas angostas se parte en dos líneas sin desbordar. */
.paso-texto { display: inline-block; max-width: 100%; padding: 0 4px; line-height: 1.25; overflow-wrap: anywhere; }

/* ---------- 13. LISTA DE DATOS Y BOTÓN COPIAR ---------------------------- */
.datos-lista {
  margin: 0; border: 1px solid var(--c-borde); border-radius: var(--r-md);
  overflow: hidden; background: var(--c-superficie);
}
.datos-fila {
  display: flex; flex-direction: column; gap: var(--e-1);
  padding: var(--e-3) var(--e-4); border-bottom: 1px solid var(--c-borde);
}
.datos-fila:last-child { border-bottom: 0; }
/* margin:0 explícito porque estas filas suelen ser <dt>/<dd> dentro de un <dl>
   y el navegador les mete margen propio. */
.datos-clave {
  margin: 0; font-size: .9rem; font-weight: 600; text-transform: uppercase;
  letter-spacing: .02em; color: var(--c-texto-suave);
}
.datos-valor {
  margin: 0; font-size: 1.05rem; word-break: break-word;
  display: flex; align-items: center; gap: var(--e-3); flex-wrap: wrap;
}
.datos-valor-destacado { font-size: 1.35rem; font-weight: 600; color: var(--c-primario-oscuro); font-variant-numeric: tabular-nums; }
.copiar {
  display: inline-flex; align-items: center; gap: var(--e-1);
  min-height: var(--alto-tactil); padding: var(--e-1) var(--e-3);
  font-family: inherit; font-size: .84rem; font-weight: 600;
  color: var(--c-primario); background: var(--c-primario-suave);
  border: 1px solid var(--borde-primario); border-radius: var(--r-sm); cursor: pointer;
}
.copiar:hover { background: #dbe8f6; }
.copiar.copiado { color: var(--texto-ok-fuerte); background: var(--c-ok-suave); border-color: var(--borde-ok); }
/* Aclaración bajo un dato (instrucciones de transferencia, enlace de estado). */
.datos-ayuda {
  display: block; flex-basis: 100%; margin-top: var(--e-1);
  font-size: .84rem; line-height: 1.5; color: var(--c-texto-suave);
}

/* ---------- 14. ADMIN: BARRA, NAVEGACIÓN Y CONTENIDO --------------------- */
.admin-barra {
  position: sticky; top: 0; z-index: 20;
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: var(--e-3); padding: var(--e-3) var(--e-4);
  background: var(--c-primario-oscuro); color: #fff; box-shadow: var(--sombra-1);
}
.admin-barra-marca { font-weight: 600; font-size: 1rem; color: #fff; text-decoration: none; }
.admin-barra-marca span { display: block; font-size: .78rem; font-weight: 400; color: rgba(255,255,255,.8); }
.admin-barra-derecha { display: flex; align-items: center; gap: var(--e-3); }
.admin-barra-usuario { font-size: .86rem; color: rgba(255,255,255,.9); }
/* El "Salir" es un <form> con POST+CSRF: no debe romper la fila de la barra. */
.admin-barra-salir { margin: 0; display: inline-flex; }
.admin-barra .btn { background: rgba(255,255,255,.12); border-color: rgba(255,255,255,.35); color: #fff; }
.admin-barra .btn:hover { background: rgba(255,255,255,.22); color: #fff; }
.admin-cuerpo { display: grid; grid-template-columns: 1fr; align-items: start; }
.admin-nav {
  display: flex; gap: var(--e-1); overflow-x: auto; -webkit-overflow-scrolling: touch;
  padding: var(--e-2) var(--e-3); background: var(--c-superficie);
  border-bottom: 1px solid var(--c-borde); scrollbar-width: thin;
}
.admin-nav a {
  display: inline-flex; align-items: center; min-height: var(--alto-tactil);
  padding: var(--e-2) var(--e-4); white-space: nowrap;
  font-size: .93rem; font-weight: 600; color: var(--c-texto-suave);
  text-decoration: none; border-radius: var(--r-sm);
}
.admin-nav a:hover { background: #f0f2f5; color: var(--c-texto); }
.admin-nav .activo { background: var(--c-primario-suave); color: var(--c-primario-oscuro); }
/* Contador rojo del menú: hoy, los correos que no salieron. */
.nav-contador {
  display: inline-block; min-width: 1.35em; margin-left: var(--e-2);
  padding: 1px 6px; border-radius: 999px;
  background: var(--c-error-suave); border: 1px solid var(--borde-error);
  color: var(--texto-error-fuerte); font-size: .8rem; font-weight: 700;
  line-height: 1.4; text-align: center;
}
.admin-contenido { padding: var(--e-4); min-width: 0; }
.admin-titulo {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: var(--e-3); margin: 0 0 var(--e-4); padding-bottom: var(--e-3);
  border-bottom: 1px solid var(--c-borde);
}
.admin-titulo h1 { margin: 0; font-size: 1.35rem; }
.admin-titulo p { margin: 0; color: var(--c-texto-suave); font-size: .9rem; }

/* ---------- 15. FILTROS, MÉTRICAS Y PAGINACIÓN --------------------------- */
.filtros {
  background: var(--c-superficie); border: 1px solid var(--c-borde);
  border-radius: var(--r-md); padding: var(--e-4); margin-bottom: var(--e-4);
}
.filtros-fila { display: grid; grid-template-columns: 1fr; gap: var(--e-3); align-items: end; }
.filtros .campo { margin-bottom: 0; }
.filtros-acciones { display: flex; flex-wrap: wrap; gap: var(--e-2); margin-top: var(--e-3); }
.grilla-metricas {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(148px, 1fr));
  gap: var(--e-3); margin-bottom: var(--e-5);
}
.metrica {
  background: var(--c-superficie); border: 1px solid var(--c-borde);
  border-radius: var(--r-md); box-shadow: var(--sombra-1); padding: var(--e-4); text-align: left;
}
.metrica-valor {
  display: block; font-size: 1.7rem; font-weight: 600; line-height: 1.15;
  color: var(--c-primario-oscuro); font-variant-numeric: tabular-nums;
}
.metrica-label { display: block; margin-top: var(--e-1); font-size: .9rem; color: var(--c-texto-suave); }
/* Para métricas de dinero en tarjetas angostas ("$ 4.320.000" no se parte). */
.metrica-compacta .metrica-valor { font-size: 1.25rem; }
.metrica-ok .metrica-valor { color: var(--c-ok); }
.metrica-aviso .metrica-valor { color: var(--c-aviso); }
.metrica-error .metrica-valor { color: var(--c-error); }
/* Métrica que además es enlace a la lista filtrada: se ve igual, pero responde. */
.metrica-enlace { display: block; color: inherit; text-decoration: none; }
.metrica-enlace:hover { border-color: var(--borde-primario); box-shadow: var(--sombra-2); }
.metrica-enlace .metrica-label { text-decoration: underline; text-underline-offset: 2px; }
.paginacion { display: flex; flex-wrap: wrap; align-items: center; gap: var(--e-2); margin-top: var(--e-4); }
.paginacion a, .paginacion span {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 40px; min-height: 40px; padding: 0 var(--e-3);
  border: 1px solid var(--c-borde); border-radius: var(--r-sm);
  background: var(--c-superficie); color: var(--c-primario); text-decoration: none; font-size: .92rem;
}
.paginacion .activo { background: var(--c-primario); border-color: var(--c-primario); color: #fff; font-weight: 600; }

/* ---------- 16. ALOJAMIENTO: HABITACIONES Y CAMAS ------------------------
   Regla del cliente: "litera_abajo" y "accesible" son camas de BAJA dificultad
   de acceso y se priorizan para personas mayores o con movilidad reducida.
   .cama-arriba avisa visualmente que hay que trepar; .cama-alerta marca una
   asignación riesgosa (mayor o movilidad reducida en litera de arriba).
   ------------------------------------------------------------------------- */
.habitacion-caja {
  background: var(--c-superficie); border: 1px solid var(--c-borde);
  border-radius: var(--r-md); box-shadow: var(--sombra-1);
  padding: var(--e-4); margin-bottom: var(--e-4);
}
.habitacion-caja > header {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: var(--e-2); margin-bottom: var(--e-3); padding-bottom: var(--e-2);
  border-bottom: 1px solid var(--c-borde);
}
.habitacion-caja h3 { margin: 0; font-size: 1.05rem; }
.habitacion-meta { font-size: .9rem; color: var(--c-texto-suave); }
.camas-grilla { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: var(--e-3); }
.cama {
  position: relative; display: flex; flex-direction: column; gap: var(--e-1);
  padding: var(--e-3); border: 1px solid var(--c-borde); border-left: 5px solid var(--c-borde);
  border-radius: var(--r-sm); background: var(--c-superficie); font-size: .9rem; min-height: 76px;
}
.cama-etiqueta { font-weight: 600; }
.cama-tipo { font-size: .88rem; text-transform: uppercase; letter-spacing: .02em; color: var(--c-texto-suave); }
.cama-ocupante { font-size: .92rem; color: var(--c-texto); word-break: break-word; }
.cama-acciones { margin-top: auto; padding-top: var(--e-2); display: flex; gap: var(--e-2); flex-wrap: wrap; }
.cama-libre { border-style: dashed; border-left-style: solid; background: #fbfcfd; color: var(--c-texto-suave); }
.cama-ocupada { background: var(--c-primario-suave); border-color: var(--borde-primario); border-left-color: var(--c-primario); }
/* El texto de acceso lo pone AlojamientoRepo::textoAcceso() en el chip .cama-acceso:
   es texto real, seleccionable y leido por lectores de pantalla. Aqui solo queda el
   color de la barra izquierda, que es la senal visual. */
.cama-abajo { border-left-color: var(--c-ok); }
.cama-arriba { border-left-color: var(--c-aviso); }
.cama-alerta { border-color: var(--c-error); border-left-color: var(--c-error); background: var(--c-error-suave); }
.cama-alerta-texto { font-size: .9rem; font-weight: 600; color: var(--c-error); }
/* Chip de acceso de la pantalla de asignación (AlojamientoRepo::textoAcceso()
   y el mismo HTML que arma app.js en el panel de camas). */
.cama-acceso {
  display: inline-flex; align-items: center; gap: var(--e-1);
  padding: 1px var(--e-2); border-radius: 999px;
  font-size: .88rem; font-weight: 600; letter-spacing: .01em;
  border: 1px solid var(--c-borde); background: var(--c-fondo); color: var(--c-texto-suave);
}
.cama-acceso-facil { color: var(--texto-ok-fuerte); background: var(--c-ok-suave); border-color: var(--borde-ok); }
.cama-acceso-alto { color: var(--texto-aviso-fuerte); background: var(--c-aviso-suave); border-color: var(--borde-aviso); }
.leyenda-camas { display: flex; flex-wrap: wrap; gap: var(--e-4); margin-bottom: var(--e-4); font-size: .85rem; color: var(--c-texto-suave); }
.leyenda-camas span { display: inline-flex; align-items: center; gap: var(--e-2); }
.leyenda-marca { width: 14px; height: 14px; border-radius: 3px; display: inline-block; background: var(--c-borde); }
.leyenda-marca.abajo { background: var(--c-ok); }
.leyenda-marca.arriba { background: var(--c-aviso); }
.leyenda-marca.ocupada { background: var(--c-primario); }
.leyenda-marca.libre { background: #fbfcfd; border: 1px dashed var(--c-texto-suave); }
/* Texto que solo tiene sentido en la hoja impresa (donde no hay colores).
   Lleva !important como .no-imprimir: es una utilidad y tiene que ganarle a
   cualquier regla de contenedor (por ejemplo .leyenda-camas span). */
.solo-imprimir { display: none !important; }

/* ---------- 17. DIÁLOGO DE CONFIRMACIÓN (lo crea app.js) ----------------- */
.dialogo-fondo {
  position: fixed; inset: 0; z-index: 100;
  display: flex; align-items: center; justify-content: center;
  padding: var(--e-4); background: rgba(28,36,48,.55);
}
.dialogo {
  width: 100%; max-width: 420px; background: var(--c-superficie);
  border-radius: var(--r-lg); box-shadow: var(--sombra-2); padding: var(--e-5);
}
.dialogo-titulo { margin: 0 0 var(--e-2); font-size: 1.15rem; }
.dialogo-mensaje { margin: 0 0 var(--e-5); color: var(--c-texto-suave); }
.dialogo-acciones { display: flex; flex-direction: column-reverse; gap: var(--e-2); }

/* ---------- 18. REPETIDOR Y VISTA PREVIA DE ARCHIVO ---------------------- */
.repetidor-acciones { display: flex; flex-wrap: wrap; gap: var(--e-3); align-items: center; margin-bottom: var(--e-4); }
.persona-fila { position: relative; }
.persona-fila-cab {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: var(--e-2); margin-bottom: var(--e-3);
}
.persona-fila-titulo { font-weight: 600; font-size: 1rem; margin: 0; }
.resumen-total {
  display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between;
  gap: var(--e-3); padding: var(--e-4); border: 2px solid var(--c-primario);
  border-radius: var(--r-md); background: var(--c-primario-suave); margin-bottom: var(--e-4);
}
.resumen-total-valor { font-size: 1.6rem; font-weight: 600; color: var(--c-primario-oscuro); font-variant-numeric: tabular-nums; }
.vista-previa {
  display: flex; align-items: center; gap: var(--e-3); margin-top: var(--e-3); padding: var(--e-3);
  border: 1px dashed var(--c-borde); border-radius: var(--r-sm); background: #fbfcfd; font-size: .9rem;
}
.vista-previa img { width: 72px; height: 72px; object-fit: cover; border-radius: var(--r-sm); border: 1px solid var(--c-borde); }
.vista-previa-icono {
  width: 72px; height: 72px; display: flex; align-items: center; justify-content: center;
  border-radius: var(--r-sm); border: 1px solid var(--c-borde);
  background: var(--c-primario-suave); color: var(--c-primario-oscuro); font-weight: 600;
}
.vista-previa-datos { min-width: 0; }
.vista-previa-nombre { font-weight: 600; word-break: break-all; }
.vista-previa-peso { color: var(--c-texto-suave); font-size: .85rem; }

/* ---------- 19. UTILIDADES ----------------------------------------------- */
.oculto { display: none !important; }
.solo-lectura { background: #f1f3f6; color: var(--c-texto-suave); cursor: default; }
.texto-suave { color: var(--c-texto-suave); }
.texto-centrado { text-align: center; }
.texto-derecha { text-align: right; }
.texto-mono { font-family: var(--fuente-mono); letter-spacing: .04em; }
.texto-grande { font-size: 1.2rem; }
.texto-ok { color: var(--c-ok); }
.texto-error { color: var(--c-error); }
.texto-aviso { color: var(--c-aviso); }
.pila { display: flex; flex-direction: column; gap: var(--e-3); }
.pila-sm { gap: var(--e-2); }
.pila-lg { gap: var(--e-5); }
.fila { display: flex; flex-direction: row; flex-wrap: wrap; gap: var(--e-3); align-items: center; }
.fila-derecha { justify-content: flex-end; }
.fila-entre { justify-content: space-between; }
.sin-margen { margin: 0 !important; }
.mt-4 { margin-top: var(--e-4); }
.mb-4 { margin-bottom: var(--e-4); }
.visualmente-oculto {
  position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* ---------- 20. ACCESIBILIDAD, FOCO Y MOVIMIENTO REDUCIDO ---------------- */
:focus-visible { outline: 2px solid var(--c-primario); outline-offset: 2px; border-radius: var(--r-sm); }
.admin-barra :focus-visible, .cabecera :focus-visible { outline-color: #fff; }
a:focus, button:focus, input:focus, select:focus, textarea:focus, summary:focus, [tabindex]:focus {
  outline: 2px solid var(--c-primario); outline-offset: 2px;
}
a:focus:not(:focus-visible), button:focus:not(:focus-visible), input:focus:not(:focus-visible),
select:focus:not(:focus-visible), textarea:focus:not(:focus-visible) { outline: none; }
.campo-input:focus, .campo-select:focus, .campo-textarea:focus { border-color: var(--c-primario); }
.salto-contenido {
  position: absolute; left: -9999px; top: 0; z-index: 200;
  padding: var(--e-3) var(--e-4); background: var(--c-superficie);
  color: var(--c-primario-oscuro); font-weight: 600; border-radius: 0 0 var(--r-sm) 0;
}
.salto-contenido:focus { left: 0; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .001ms !important; animation-iteration-count: 1 !important;
    transition-duration: .001ms !important; scroll-behavior: auto !important;
  }
  .btn:active { transform: none; }
}

/* ---------- 21. PUNTOS DE QUIEBRE ---------------------------------------- */
@media (min-width: 640px) {
  h1 { font-size: 1.8rem; }
  .campo-fila { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .filtros-fila { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .dialogo-acciones { flex-direction: row; justify-content: flex-end; }
  .datos-fila { flex-direction: row; align-items: baseline; gap: var(--e-4); }
  .datos-clave { flex: 0 0 200px; }
  .datos-valor { flex: 1 1 auto; }
  .paso { font-size: .9rem; }
  .cabecera-interior { flex-direction: row; flex-wrap: wrap; align-items: center; justify-content: space-between; }
  .cabecera-nav { margin-top: 0; }
  .pie-interior { flex-direction: row; flex-wrap: wrap; justify-content: space-between; align-items: center; }
}
@media (min-width: 1024px) {
  html { font-size: 16px; }
  .contenedor { padding: var(--e-5) var(--e-4); }
  .admin-cuerpo { grid-template-columns: var(--ancho-nav) minmax(0, 1fr); }
  .admin-nav {
    position: sticky; top: 60px; flex-direction: column; gap: 2px;
    overflow: visible; height: auto; padding: var(--e-4) var(--e-3);
    border-bottom: 0; border-right: 1px solid var(--c-borde); min-height: calc(100vh - 60px);
  }
  .admin-nav a { width: 100%; }
  .admin-contenido { padding: var(--e-5) var(--e-6); max-width: 1280px; }
  .filtros-fila { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .campo-fila-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* ---------- 22. IMPRESIÓN (la lista de alojamiento se imprime) ----------- */
@media print {
  :root { --c-fondo: #fff; }
  body { background: #fff; color: #000; font-size: 11pt; }
  .cabecera, .cabecera-nav, .pie, .admin-barra, .admin-nav, .filtros, .paginacion,
  .btn, .copiar, .dialogo-fondo, .repetidor-acciones, .cama-acciones,
  .flash, .salto-contenido, .no-imprimir { display: none !important; }
  .admin-cuerpo { display: block; }
  .admin-contenido, .contenedor { padding: 0; max-width: none; }
  .tarjeta, .habitacion-caja, .tabla-envoltura, .datos-lista {
    box-shadow: none; border: 1px solid #999;
  }
  /* Estas tres SI caben en una hoja, asi que no conviene partirlas. */
  .habitacion-caja, .tabla-envoltura, .datos-lista {
    break-inside: avoid; page-break-inside: avoid;
  }
  /* La tarjeta NO: una ficha con 8 asistentes o el resumen del dia son mas
     altos que una hoja, el navegador no puede respetar el "avoid" y empuja el
     bloque entero, dejando una pagina con el titulo y el resto en blanco. Se
     deja partir y lo unico que se protege es que el encabezado no quede
     huerfano al final de la hoja anterior. */
  .tarjeta { break-inside: auto; page-break-inside: auto; }
  .tarjeta-cab { break-after: avoid; page-break-after: avoid; }
  /* En papel no hay scroll horizontal: la tabla tiene que caber entera. */
  .tabla-envoltura { overflow: visible !important; }
  /* Sin table-layout:fixed a proposito: el reparto automatico le da a cada
     columna el ancho que pide su contenido, y asi los titulos no se cortan a
     la mitad ("MOVILID / AD Y NOTAS"). overflow-wrap solo parte una palabra
     cuando de verdad no cabe. */
  .tabla { font-size: 8.5pt; width: 100%; }
  .tabla th { background: #eee !important; color: #000; }
  .tabla th, .tabla td {
    border-bottom: 1px solid #bbb; white-space: normal;
    padding: 4px 5px; overflow-wrap: break-word;
  }
  /* Sin esto la tabla exige mas de 800px y el papel se come las ultimas
     columnas: en la ficha de una delegacion se perdian MONTO, MOVILIDAD Y
     NOTAS y la insignia CONTACTO, que son los tres datos por los que se
     imprime la hoja para el meson de acreditacion. El reseteo ya existia para
     el telefono (@media max-width:640px) y faltaba aca. */
  .tabla .envolver { min-width: 0; }
  .tabla .num, .tabla .texto-mono { white-space: nowrap; }
  .cama { border: 1px solid #999; break-inside: avoid; }
  .solo-imprimir { display: inline !important; }
  .leyenda-marca { display: none; }
  .cama-abajo { border-left: 5px solid #000; }
  .cama-arriba { border-left: 5px dotted #000; }
  a { text-decoration: none; color: #000; }
  .insignia { border: 1px solid #666; color: #000; background: none !important; }
}

/* ====================================================================
   BANNER DEL MODO DEMO
   Franja permanente arriba de todo. Tiene que ser imposible confundir
   una pantalla con datos de ejemplo con una de verdad, asi que usa el
   color de aviso del sistema y no se puede cerrar.
   ==================================================================== */

.banner-demo {
  background: var(--c-aviso);
  color: #fff;
  border-bottom: 3px solid #7a5200;
}

.banner-demo-interior {
  max-width: 1100px;
  margin: 0 auto;
  padding: var(--e-3) var(--e-4);
  display: flex;
  align-items: baseline;
  gap: var(--e-3);
  flex-wrap: wrap;
}

.banner-demo-titulo {
  font-size: 0.8125rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  background: #fff;
  color: #7a5200;
  padding: 2px var(--e-2);
  border-radius: var(--r-sm);
  white-space: nowrap;
}

.banner-demo-texto {
  font-size: 0.9375rem;
  line-height: 1.5;
  flex: 1 1 18rem;
}

.banner-demo-texto strong { font-weight: 700; }

@media (max-width: 640px) {
  .banner-demo-interior { padding: var(--e-3); gap: var(--e-2); }
  .banner-demo-texto { font-size: 0.875rem; }
}

/* En papel la franja no aporta y gasta tinta, pero la advertencia si
   importa: se imprime como una linea de texto sobria. */
@media print {
  .banner-demo {
    background: none !important;
    color: #000 !important;
    border-bottom: 1px solid #000;
  }
  .banner-demo-titulo { background: none !important; color: #000 !important; border: 1px solid #000; }
  .banner-demo-texto { font-size: 10pt; }
}

/* =========================================================================
   23. TABLA DE ASISTENTES (formulario público de la delegación)
   Mobile-first, como el resto de la hoja: la forma BASE es la tarjeta
   apilada del teléfono y la tabla de verdad aparece recién en pantallas
   anchas. Ocho columnas de formulario no caben en un teléfono, y llenar
   campos que no se ven -- porque quedaron detrás de un scroll horizontal --
   no es usable: por eso acá cada fila se convierte en una tarjeta con sus
   etiquetas a la vista, y no en una tabla que se arrastra de lado.
   ========================================================================= */

.asistentes-regla {
  margin: 0 0 var(--e-4); padding: var(--e-3) var(--e-4);
  background: var(--c-primario-suave); border: 1px solid var(--borde-primario);
  border-radius: var(--r-sm); font-size: .93rem; color: var(--c-primario-oscuro);
}
/* Lo que solo es verdad con JavaScript no se promete sin JavaScript. */
.asistentes-regla-js { display: none; }
.con-js .asistentes-regla-js { display: inline; }
.asistentes-regla kbd {
  display: inline-block; padding: 1px 6px; font-family: var(--fuente-mono); font-size: .85em;
  background: var(--c-superficie); border: 1px solid var(--borde-primario);
  border-bottom-width: 2px; border-radius: 4px; color: var(--c-texto);
}

/* Explicación del radio "Contacto", arriba de la tabla: quien llega a esa
   columna con 20 filas cargadas ya tiene que saber qué significa la marca. */
.asistentes-contacto-nota {
  margin: 0 0 var(--e-4); padding: var(--e-3) var(--e-4);
  background: var(--c-superficie); border: 1px solid var(--c-borde);
  border-left: 4px solid var(--c-primario);
  border-radius: var(--r-sm); font-size: .93rem;
}

/* Aviso VISIBLE de que la marca de contacto se movió sola (por ejemplo, al
   quitar la fila que la tenía). Nace con [hidden] y lo enciende app.js durante
   unos segundos. Usa el color de AVISO, no el de error: no se rompió nada, pero
   quien mira tiene que enterarse antes de enviar el formulario. */
.contacto-aviso {
  margin: 0 0 var(--e-4); padding: var(--e-3) var(--e-4);
  background: var(--c-aviso-suave); border: 1px solid var(--borde-aviso);
  border-left: 4px solid var(--c-aviso);
  border-radius: var(--r-sm); font-size: .93rem; font-weight: 600;
  color: var(--texto-aviso-fuerte);
}

/* La fila que quedó marcada se destaca en el mismo momento y con el mismo
   color, para que el cartel de arriba y el cambio de abajo se lean como una
   sola cosa. */
.fila-contacto-movida {
  background: var(--c-aviso-suave) !important;
  box-shadow: inset 4px 0 0 var(--c-aviso);
}

.asistentes-caja { margin: 0 0 var(--e-4); }
.asistentes-scroll { width: 100%; }

/* ---------- Forma BASE: una tarjeta apilada por asistente ---------------- */
.asistentes-tabla { width: 100%; border-collapse: collapse; display: block; }
.asistentes-tabla caption { display: block; }
.asistentes-tabla thead { display: none; }
.asistentes-tabla tbody,
.asistentes-tabla tr,
.asistentes-tabla th,
.asistentes-tabla td { display: block; }

.asistentes-tabla .asistente {
  padding: var(--e-3) var(--e-4) var(--e-2); margin: 0 0 var(--e-3);
  background: var(--c-superficie);
  border: 1px solid var(--c-borde); border-left-width: 4px; border-radius: var(--r-md);
}
.asistentes-tabla .asistente-con-error {
  border-color: var(--c-error); border-left-color: var(--c-error);
  background: var(--c-error-suave);
}

.asistentes-tabla .celda { padding: 0 0 var(--e-3); text-align: left; }
.asistentes-tabla .celda-num {
  margin-bottom: var(--e-3); padding-bottom: var(--e-2);
  font-size: 1rem; font-weight: 700; color: var(--c-texto);
  border-bottom: 1px solid var(--c-borde);
}
.asistentes-tabla .celda-movilidad {
  display: flex; flex-direction: row-reverse; justify-content: flex-end;
  flex-wrap: wrap; align-items: center; gap: var(--e-3);
  min-height: var(--alto-tactil);
}

/* La etiqueta de cada celda existe SIEMPRE en el HTML (label + for): acá se
   ve, y en la tabla ancha se oculta a la vista pero la sigue leyendo el
   lector de pantalla. Un encabezado de columna arriba de todo no le dice a
   nadie en qué columna está el campo que tiene el foco. */
.asistente-etiqueta {
  display: block; margin-bottom: var(--e-1);
  font-weight: 600; font-size: .9rem; color: var(--c-texto);
}
.asistentes-tabla .celda-movilidad .asistente-etiqueta { margin-bottom: 0; font-weight: 500; }

.asistentes-tabla .asistente-input,
.asistentes-tabla .asistente-select { width: 100%; }
.asistente-check {
  width: 22px; height: 22px; margin: 0; flex: 0 0 auto;
  accent-color: var(--c-primario); cursor: pointer;
}

/* ---------- Columna "Contacto": a quién le llegan los avisos ------------- */
/* En el teléfono la fila es una tarjeta y el radio no puede quedar como una
   casilla suelta: se muestra como una opción con su texto, del alto táctil
   completo, y la fila marcada se nota de un vistazo. */
.asistentes-tabla .celda-contacto { padding: 0 0 var(--e-3); }
.asistente-contacto {
  display: flex; align-items: center; gap: var(--e-3);
  min-height: var(--alto-tactil); padding: var(--e-2) var(--e-3);
  background: var(--c-superficie); border: 1px solid var(--c-borde-campo);
  border-radius: var(--r-sm); cursor: pointer;
  font-size: .93rem; font-weight: 600; color: var(--c-texto);
}
.asistente-contacto:hover { border-color: var(--c-primario); }
.asistente-contacto:has(.asistente-radio:checked) {
  background: var(--c-primario-suave); border-color: var(--c-primario);
  color: var(--c-primario-oscuro);
}
/* Sin :has() (navegador viejo) el radio marcado igual se ve: no se pierde
   nada, solo el fondo de color. El control nativo ya dice cuál está elegido. */
.asistente-radio {
  width: 22px; height: 22px; margin: 0; flex: 0 0 auto;
  accent-color: var(--c-primario); cursor: pointer;
}
.asistente-monto {
  display: block; margin-top: var(--e-1); font-size: .9rem;
  color: var(--c-texto-suave); font-variant-numeric: tabular-nums;
}
/* Sin categoría elegida no hay monto que mostrar, y una fila en blanco no
   tiene por qué gastar alto en un guion. */
.asistente-monto:empty { display: none; }
.asistente-ayuda { display: block; margin-top: var(--e-1); font-size: .85rem; color: var(--c-texto-suave); }
.asistente-error { margin-top: var(--e-1); font-size: .9rem; }

.asistentes-tabla .celda-con-error .asistente-input,
.asistentes-tabla .celda-con-error .asistente-select {
  border-color: var(--c-error); background: var(--c-superficie);
}
.asistentes-tabla .asistente-aviso td {
  padding: var(--e-2) 0; border-top: 1px dashed var(--c-error);
}

/* La columna "Quitar" solo sirve con JavaScript: sin él el botón no haría
   nada y la columna sería una promesa vacía. Se muestra recién cuando
   app.js marca la raíz con la clase con-js, así también aparece en las filas
   clonadas (que no pasan por el ciclo de arranque). */
.asistentes-tabla .col-acciones,
.asistentes-tabla .celda-acciones { display: none; }
.con-js .asistentes-tabla .celda-acciones {
  display: block; padding: var(--e-2) 0 0; border-top: 1px solid var(--c-borde);
}
/* En el telefono es un boton DESTRUCTIVO (borra una fila ya escrita) pegado al
   borde inferior de la tarjeta, justo donde empieza la siguiente. Hereda
   .btn-sm, que son 40px, bajo el token tactil del sistema: aca se devuelve a
   los 44px. En pantalla ancha se usa con mouse y el bloque de mas abajo lo
   vuelve a bajar a 32px. */
.asistente-quitar {
  width: 100%; min-height: var(--alto-tactil); color: var(--c-texto-suave);
  background: var(--c-superficie); border-color: var(--c-borde-campo);
}
.asistente-quitar:hover {
  color: #fff; background: var(--c-error); border-color: var(--c-error);
}

/* ---------- Pantalla ancha: la tabla de verdad --------------------------- */
@media (min-width: 980px) {
  .asistentes-scroll {
    border: 1px solid var(--c-borde); border-radius: var(--r-md);
    background: var(--c-superficie); overflow: hidden;
  }
  .asistentes-tabla { display: table; table-layout: fixed; }
  .asistentes-tabla caption { display: table-caption; }
  .asistentes-tabla thead { display: table-header-group; }
  .asistentes-tabla tbody { display: table-row-group; }
  .asistentes-tabla tr { display: table-row; }
  .asistentes-tabla th,
  .asistentes-tabla td { display: table-cell; }

  .asistentes-tabla thead th {
    padding: var(--e-2); vertical-align: bottom; text-align: left;
    font-size: .82rem; font-weight: 600; text-transform: uppercase; letter-spacing: .02em;
    color: var(--c-texto-suave); background: #fbfcfd;
    border-bottom: 1px solid var(--c-borde);
  }
  /* "Contacto" es una palabra larga y la tabla es de ancho fijo: si la columna
     queda corta, el encabezado se sale de su celda y se lee pegado al de al
     lado ("CONTACTO CATEGORIA"), que es justo lo que confunde a quien llena el
     formulario. El 11% es lo que necesita en el ancho minimo de esta vista. */
  .asistentes-tabla .col-num        { width: 4%; }
  .asistentes-tabla .col-contacto   { width: 11%; text-align: center; }
  .asistentes-tabla .col-categoria  { width: 15%; }
  .asistentes-tabla .col-nombres    { width: 11%; }
  .asistentes-tabla .col-apellidos  { width: 11%; }
  .asistentes-tabla .col-documento  { width: 12%; }
  .asistentes-tabla .col-sexo       { width: 10%; }
  .asistentes-tabla .col-nacimiento { width: 13%; }
  .asistentes-tabla .col-movilidad  { width: 6%; text-align: center; }
  .asistentes-tabla .col-acciones   { width: 7%; }

  .asistentes-tabla .asistente {
    padding: 0; margin: 0; border: 0; border-radius: 0; background: none;
  }
  .asistentes-tabla .asistente-con-error { background: var(--c-error-suave); }

  .asistentes-tabla .celda {
    padding: var(--e-2) 5px; vertical-align: top;
    border-bottom: 1px solid var(--c-borde);
  }
  .asistentes-tabla .celda-num {
    margin: 0; padding-top: 14px; text-align: right;
    font-size: .95rem; font-weight: 600; color: var(--c-texto-suave);
    border-bottom: 1px solid var(--c-borde);
  }
  .asistentes-tabla .asistente-con-error .celda-num {
    color: var(--texto-error-fuerte); box-shadow: inset 4px 0 0 var(--c-error);
  }
  .asistentes-tabla .celda-movilidad {
    display: table-cell; text-align: center; min-height: 0; padding-top: var(--e-3);
  }
  /* En la tabla ancha manda el encabezado de la columna: la opción vuelve a ser
     un radio centrado y el texto se va al árbol de accesibilidad, donde el
     lector de pantalla lo sigue leyendo entero. */
  .asistentes-tabla .celda-contacto {
    display: table-cell; text-align: center; padding-top: var(--e-3);
  }
  .asistentes-tabla .celda-contacto .asistente-contacto {
    display: block; min-height: 0; padding: 0;
    background: none; border: 0; border-radius: 0;
  }
  .asistentes-tabla .celda-contacto .asistente-contacto-texto {
    position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
    overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
  }
  .asistentes-tabla .celda-acciones { padding-top: 9px; }
  .con-js .asistentes-tabla .col-acciones,
  .con-js .asistentes-tabla .celda-acciones { display: table-cell; }

  /* "Asistente" se esconde a la vista (la columna ya dice #) pero sigue en el
     arbol de accesibilidad: el encabezado de fila que lee el lector de
     pantalla es "Asistente 3" y no un "3" suelto. */
  .asistente-num-texto {
    position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
    overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
  }
  .asistente-etiqueta {
    position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px;
    overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
  }

  /* Campos compactos: con 20 personas que cargar, cada píxel de alto se paga
     20 veces. El tamaño de letra se queda en 16px a propósito: menos que eso
     hace que Safari del iPad haga zoom al enfocar cada campo. */
  .asistentes-tabla .asistente-input,
  .asistentes-tabla .asistente-select {
    min-height: 38px; padding: 6px 8px; font-size: 16px;
  }
  .asistentes-tabla .asistente-select {
    padding-right: 22px; background-position: right 5px center;
  }
  .asistente-monto { margin-top: 3px; font-size: .82rem; }
  .asistente-error { font-size: .85rem; }
  .asistentes-tabla .asistente-aviso td {
    padding: 0 5px var(--e-2); border-top: 0; border-bottom: 1px solid var(--c-borde);
  }
  .asistente-quitar {
    width: auto; min-height: 32px; padding: 3px 6px; font-size: .82rem;
  }
}

/* Desde acá la tarjeta de los asistentes se sale del ancho del contenedor:
   928px para ocho columnas de formulario aprietan de más, y el resto de la
   página no tiene por qué ensancharse con ella. */
@media (min-width: 1200px) {
  .tarjeta-asistentes { width: calc(100% + 176px); margin-left: -88px; }
}

@media print {
  .asistentes-tabla .col-acciones,
  .asistentes-tabla .celda-acciones,
  .asistentes-regla { display: none !important; }
}
