/* ═══════════════════════════════════════════════════════════════════════════════════════════════════════════
   Selah · admisiones.css (13 oct · DISENO.md §4; ronda 2) · Administración › Admisiones: Kanban, Hoja, ficha del alumno
   por pasos, cliente y disponibilidades (admin-admisiones, hoja, admin-ficha, admin-cliente, admin-dispo, admisiones-pop).
   Escrita sobre base.css y componentes.css, con los tokens por nombre. Composición por vista: docs/diseno-admisiones.md.
   Ronda 3 (RONDA-3.md): cabecera del marco (.vista-cab), el estado en palabras (ningún punto de color), ámbar solo para lo
   que le toca a Administración, la casilla y el vacío comunes, un botón principal a la vista, nada cortado en seco
   (degradado en los bordes, frases que caben), lo que falta marcado una vez en su sitio, la ficha a la medida de lo que
   tiene y las fichas cerradas en lectura de verdad.
   Tres reglas de la ronda 2 que atraviesan todo el archivo:
   · Ámbar = te toca (lo que falta en la etapa en curso). Gris = lo que falta en una etapa pasada o en una ficha cerrada.
     Rojo, solo errores. «Sin guardar» = un punto azul (en el paso y en el pie), nunca ámbar ni verde.
   · Un formulario empieza arriba, alineado con el título del paso, en todos los pasos.
   · Lo que es un solo dato (cliente, grupo de WhatsApp, una casilla) es una fila a su medida, no una tarjeta enorme.
   ═══════════════════════════════════════════════════════════════════════════════════════════════════════════ */

/* ───────────── cabecera del marco (.vista-cab): título y total · Kanban | Hoja, columnas y búsqueda ───────────── */
.vista-admisiones { gap: 16px; }
.vista-admisiones .vista-cab-titulo .sub { font: 400 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta-3); font-variant-numeric: tabular-nums; }
.vista-admisiones .vista-cab-acciones { gap: 12px; }
.vista-admisiones .adm-buscador { width: 232px; flex: none; }
.vista-admisiones .adm-cuerpo { flex: 1; min-height: 0; display: flex; flex-direction: column; position: relative; }
/* «Columnas» es un botón secundario; el número dice cuántos conjuntos hay a la vista */
.adm-columnas { flex: none; gap: 6px; }
.adm-columnas .ic { color: var(--tinta-3); }
.adm-columnas .ic:last-child { width: 14px; height: 14px; }
.adm-columnas-n { min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px; font: 600 var(--t-xs)/18px var(--f-ui); text-align: center; color: var(--neutro-texto); background: var(--neutro-fondo); font-variant-numeric: tabular-nums; }

/* ═════ Kanban · densidad normal: carriles sin caja, tarjetas blancas ═════ */
.kanban { flex: 1; min-height: 0; display: flex; gap: 12px; overflow-x: auto; overflow-y: hidden; padding-bottom: 2px; }
.kb-col {
  flex: 1 1 0; min-width: 172px; min-height: 0; display: flex; flex-direction: column; border-radius: var(--r-l);
  transition: background-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.kb-cab {
  flex: none; display: flex; align-items: center; gap: 8px; width: 100%; height: 36px; padding: 0 8px 0 4px; border: 0; border-radius: var(--r-m);
  background: none; text-align: left; cursor: default; font: 600 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta);
}
.kb-nombre { min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.kb-n { flex: none; font: 500 var(--t-s)/1 var(--f-ui); color: var(--tinta-3); font-variant-numeric: tabular-nums; }
.kb-chev { width: 16px !important; height: 16px !important; margin-left: auto; color: var(--tinta-3); }
.kb-col[data-col="Activo"] .kb-cab { cursor: pointer; }
:where(html:not(.puntero-quieto)) .kb-col[data-col="Activo"] .kb-cab:hover { background: var(--sup-3); }
.kb-lista {
  flex: 1; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; gap: 8px; padding: 2px 2px 24px; overscroll-behavior: contain;
  /* nada se corta en seco: la última tarjeta se funde abajo si la lista sigue */
  -webkit-mask-image: linear-gradient(to bottom, #000 calc(100% - 20px), transparent); mask-image: linear-gradient(to bottom, #000 calc(100% - 20px), transparent);
}
/* columna vacía: el vacío común, pequeño y arriba (sin guiones sueltos ni cajas punteadas) */
.kb-lista > .kb-vacio { padding: 20px 8px; }
/* Activo plegada (ronda 3): ya no es una tira a toda altura con el texto girado; es su cabecera, un botón secundario
   «Activo 32 ›» en la línea de las demás cabeceras. Las cinco columnas del proceso se quedan con el ancho. */
.kb-col.plegada { flex: none; min-width: 0; }
.kb-col.plegada .kb-cab {
  width: auto; gap: 8px; padding: 0 8px 0 12px; border: 1px solid var(--linea-2); background: var(--sup); box-shadow: var(--s-1);
}
:where(html:not(.puntero-quieto)) .kb-col.plegada .kb-cab:hover { background: var(--sup-2); }
.kb-col.plegada .kb-chev { margin-left: 0; }
/* soltar encima: el carril se marca en azul suave */
.kb-col.sobre { background: var(--acento-suave); box-shadow: inset 0 0 0 1.5px var(--acento); }

/* tarjeta: siempre el mismo orden · nombre (una línea) · instrumento y días (gris) · la etiqueta del paso siguiente, a lo
   ancho de la tarjeta debajo (ronda 3: así cabe sin «…») */
.kb-tarjeta {
  position: relative; flex: none; display: grid; grid-template-columns: 40px minmax(0, 1fr); align-items: start; column-gap: 12px;
  padding: 12px; background: var(--sup); border: 1px solid var(--linea); border-radius: var(--r-l); box-shadow: var(--s-1);
  cursor: grab; touch-action: none;
  transition: box-shadow var(--dur) var(--ease), border-color var(--dur) var(--ease), opacity var(--dur) var(--ease);
}
:where(html:not(.puntero-quieto)) .kb-tarjeta:hover { box-shadow: var(--s-2); border-color: var(--linea-2); }
.kb-tarjeta:focus-visible { outline: none; border-color: var(--acento); box-shadow: 0 0 0 3px var(--acento-anillo); }
.kb-tarjeta.arrastrando, .kb-tarjeta.en-camino { opacity: .4; }
.kbt-texto { display: grid; grid-template-columns: minmax(0, 1fr); gap: 2px; justify-items: start; min-width: 0; }
.kbt-nombre {
  max-width: 100%; font: 600 var(--t-l)/20px var(--f-ui); color: var(--tinta);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.kbt-meta { display: flex; align-items: center; gap: 6px; max-width: 100%; min-width: 0; font: 400 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); white-space: nowrap; }
.kbt-inst { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.kbt-dias { flex: none; font-variant-numeric: tabular-nums; }
.kbt-dias::before { content: '·'; margin-right: 6px; }
/* etiqueta del paso siguiente (ronda 3): ámbar solo lo que le toca a Administración (llamar, asignar horario o cliente,
   entregar el kit) · gris lo que espera a la familia u a otra persona · verde listo. Una sola forma de pastilla; la que
   abre el contacto lleva el teléfono delante. Nunca se corta: la frase es corta y, si no cabe, pasa a dos líneas. */
.kbt-paso {
  grid-column: 1 / -1; justify-self: start; display: inline-flex; align-items: flex-start; gap: 5px; max-width: 100%; min-height: 24px; margin-top: 10px;
  padding: 3px 9px; border: 0; border-radius: 12px; text-align: left; text-wrap: balance;
  font: 600 var(--t-s)/18px var(--f-ui); color: var(--neutro-texto); background: var(--neutro-fondo);
}
.kbt-paso.am { color: var(--aviso-texto); background: var(--aviso-fondo); }
.kbt-paso.gr { color: var(--neutro-texto); background: var(--neutro-fondo); }
.kbt-paso.ve { color: var(--ok-texto); background: var(--ok-fondo); }
button.kbt-paso { padding-left: 8px; cursor: pointer; transition: background-color var(--dur) var(--ease); }
button.kbt-paso .ic { width: 13px; height: 13px; flex: none; margin-top: 2.5px; }
:where(html:not(.puntero-quieto)) button.kbt-paso.am:hover { background: color-mix(in srgb, var(--aviso) 26%, var(--sup)); }
:where(html:not(.puntero-quieto)) button.kbt-paso:is(.gr, .ve):hover { background: var(--sup-3); }
button.kbt-paso:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--acento-anillo); }
/* arrastre: la tarjeta flota y, al soltar, una copia atenuada ya está en su columna mientras se confirma */
.kb-fantasma { position: fixed; z-index: 99; margin: 0; pointer-events: none; transform: translate(-50%, -30%) rotate(-1.5deg); box-shadow: var(--s-3); border-color: var(--linea-2); }
body.arrastre, body.arrastre * { cursor: grabbing !important; }
.kb-tarjeta.kb-previa { opacity: .7; border: 1.5px dashed var(--acento); box-shadow: none; cursor: default; pointer-events: none; }
.kb-tarjeta.kb-previa.bloqueada { border-color: var(--linea-2); opacity: .55; }
/* Activo desplegado: una lista de una línea (foto pequeña, nombre e instrumento a la derecha), sin tarjeta por alumno */
.kb-col[data-col="Activo"]:not(.plegada) .kb-lista { gap: 0; padding: 0; border: 1px solid var(--linea); border-radius: var(--r-l); background: var(--sup); }
.kb-col[data-col="Activo"]:not(.plegada) .kb-tarjeta { grid-template-columns: 24px minmax(0, 1fr); align-items: center; column-gap: 10px; padding: 4px 10px; border: 0; border-bottom: 1px solid var(--linea); border-radius: 0; box-shadow: none; }
.kb-col[data-col="Activo"]:not(.plegada) .kb-tarjeta:last-child { border-bottom: 0; }
:where(html:not(.puntero-quieto)) .kb-col[data-col="Activo"]:not(.plegada) .kb-tarjeta:hover { background: var(--sup-2); box-shadow: none; }
.kb-col[data-col="Activo"]:not(.plegada) .kb-tarjeta > .avatar { width: 24px !important; height: 24px !important; font-size: 10px !important; }
.kb-col[data-col="Activo"]:not(.plegada) .kbt-texto { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; column-gap: 8px; }
.kb-col[data-col="Activo"]:not(.plegada) .kbt-nombre { font-size: var(--t-m); line-height: var(--lh-m); font-weight: 500; white-space: normal; }
.kb-col[data-col="Activo"]:not(.plegada) .kbt-meta { margin-left: auto; } /* si no cabe al lado, baja a su línea; nada se corta */
.kb-col[data-col="Activo"]:not(.plegada) .kbt-dias { display: none; }
/* búsqueda sin resultados: un solo vacío */
.kanban-sin-resultados { flex: 1; }
/* ventana estrecha (o Activo desplegado): foto más pequeña y nombre en 14 px; el orden de la tarjeta no cambia */
@media (max-width: 1240px) {
  .kb-col:not([data-col="Activo"]) .kb-tarjeta.kiss { grid-template-columns: 32px minmax(0, 1fr); column-gap: 10px; padding: 10px; }
  .kb-col:not([data-col="Activo"]) .kb-tarjeta.kiss > .avatar { width: 32px !important; height: 32px !important; font-size: 12px !important; }
  .kb-col:not([data-col="Activo"]) .kb-tarjeta.kiss .kbt-nombre { font-size: var(--t-m); line-height: var(--lh-m); }
}
.kanban:has(.kb-col[data-col="Activo"]:not(.plegada)) .kb-col:not([data-col="Activo"]) .kb-tarjeta.kiss { grid-template-columns: 32px minmax(0, 1fr); column-gap: 10px; padding: 10px; }
.kanban:has(.kb-col[data-col="Activo"]:not(.plegada)) .kb-col:not([data-col="Activo"]) .kb-tarjeta.kiss > .avatar { width: 32px !important; height: 32px !important; font-size: 12px !important; }
.kanban:has(.kb-col[data-col="Activo"]:not(.plegada)) .kb-col:not([data-col="Activo"]) .kb-tarjeta.kiss .kbt-nombre { font-size: var(--t-m); line-height: var(--lh-m); }
.kanban:has(.kb-col[data-col="Activo"]:not(.plegada)) .kb-col[data-col="Activo"] { flex: 1.25 1 0; }
.kanban:has(.kb-col[data-col="Activo"]:not(.plegada)) .kb-col:not([data-col="Activo"]) .kb-tarjeta.kiss .kbt-paso { font-size: var(--t-xs); padding-inline: 8px; }
@media (max-width: 1240px) {
  .kanban { gap: 10px; }
  .kb-col:not([data-col="Activo"]) .kb-tarjeta.kiss .kbt-paso { font-size: var(--t-xs); padding-inline: 8px; }
}

/* popover de contacto del aspirante: quién es, cómo llamarle y el resultado de la llamada como opciones de menú */
.popover-contacto:has(.kbt-contacto) { width: 300px; padding: 14px 8px 8px; }
.kbt-contacto { display: grid; gap: 12px; }
.kbt-contacto-cab { display: grid; gap: 1px; padding: 0 8px; }
.kbt-contacto-tit { font: 600 var(--t-l)/var(--lh-l) var(--f-ui); color: var(--tinta); }
.kbt-contacto-cab small { font: 400 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); }
.kbt-aspirante { display: grid; gap: 8px; padding: 0 8px; }
.kbt-linea { display: flex; align-items: center; gap: 8px; min-width: 0; margin: 0; font: 400 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta-2); }
.kbt-linea > .ic { width: 16px; height: 16px; flex: none; color: var(--tinta-3); }
.kbt-linea .copiable { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kbt-tel .copiable { font-weight: 600; color: var(--tinta); font-variant-numeric: tabular-nums; }
.kbt-tel .boton.whatsapp { margin-left: auto; height: 30px; padding: 0 10px; border-color: var(--linea-2); background: var(--sup); color: var(--tinta); box-shadow: var(--s-1); }
.kbt-tel .boton.whatsapp .ic { color: var(--ok); }
:where(html:not(.puntero-quieto)) .kbt-tel .boton.whatsapp:hover { background: var(--sup-2); }
.kbt-sin { color: var(--tinta-3); }
.kbt-botones { display: grid; gap: 0; padding-top: 6px; border-top: 1px solid var(--linea); }
.kbt-rotulo { margin: 0; padding: 4px 8px 4px; font: 600 var(--t-xs)/var(--lh-xs) var(--f-ui); color: var(--tinta-3); }
.kbt-opcion {
  display: flex; align-items: center; gap: 10px; width: 100%; min-height: 34px; margin: 0; padding: 0 8px; border: 0; border-radius: var(--r-m);
  background: none; cursor: pointer; text-align: left; font: 500 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta);
}
.kbt-opcion .ic { width: 16px; height: 16px; flex: none; color: var(--tinta-3); }
:where(html:not(.puntero-quieto)) button.kbt-opcion:hover:not(:disabled) { background: var(--sup-3); }
.kbt-opcion:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--acento-anillo); }
.kbt-opcion.hecha, .kbt-opcion:disabled { cursor: default; color: var(--tinta-3); }
p.kbt-opcion.hecha { color: var(--ok-texto); font-weight: 600; }
p.kbt-opcion.hecha .ic { color: var(--ok); }

/* confirmación de admisiones (admisiones-pop.js): un solo paso, lo que falta en viñetas, dentro de su límite. Ronda 3 · la
   forma de componentes.css (secundario y principal a la derecha; rojo lleno si cierra algo): aquí solo la lista. */
.pop.adm-pop { max-width: min(340px, calc(100vw - 24px)); }
.pop.adm-pop[data-lado="derecha"]::before, .pop.adm-pop[data-lado="izquierda"]::before { display: none; }
.pop.adm-pop .pop-lista { position: relative; display: grid; gap: 4px; margin: 10px 0 0; padding: 0; list-style: none; font: 400 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta); }
.pop.adm-pop .pop-lista li { display: flex; align-items: baseline; gap: 8px; }
.pop.adm-pop .pop-lista li::before { content: ''; flex: none; width: 6px; height: 6px; border-radius: 50%; transform: translateY(-2px); background: var(--tinta-4); }
.pop.adm-pop.adm-falta .pop-lista li::before, .pop.adm-pop.con-faltas .pop-lista li::before { background: var(--aviso); }
.pop.adm-pop.pop-con-aviso .pop-lista li { color: var(--aviso-texto); font-size: var(--t-s); line-height: var(--lh-s); }
.pop.adm-pop.pop-con-aviso .pop-lista li::before { background: var(--aviso); }
.pop.adm-pop.pop-bloqueo .pop-titulo, .pop.adm-pop .pop-titulo { color: var(--tinta); }
.pop.adm-pop .pop-botones { align-items: center; }
.pop.adm-pop .pop-botones .espacio { flex: 1; }
/* «Descartar» (cerrar con cambios): quieto y rojo, a la izquierda, lejos de «Guardar y cerrar» */
.pop.adm-pop .pop-botones .boton.texto-peligro { color: var(--peligro-texto); }
:where(html:not(.puntero-quieto)) .pop.adm-pop .pop-botones .boton.texto-peligro:hover { background: var(--peligro-fondo); color: var(--peligro-texto); }
/* un principal a la vista: mientras la pregunta está abierta, el suyo; los de la ficha de detrás pasan a secundarios */
body:has(.pop.adm-pop:not(.saliendo):not(.en-linea)) :is(.ficha-adm, .vista-admisiones) .boton.primario:not(:disabled) { background: var(--sup); border-color: var(--linea-2); color: var(--tinta); box-shadow: var(--s-1); }
body:has(.pop.adm-pop:not(.saliendo):not(.en-linea)) :is(.ficha-adm, .vista-admisiones) .boton.primario:not(:disabled) .ic { color: var(--tinta-3); }
/* en línea (dentro del popover de contacto): la pregunta ocupa su lugar, sin otra caja encima */
.pop.adm-pop.en-linea {
  position: static; width: auto; min-width: 0; max-width: none; padding: 2px 8px 4px; border: 0; border-radius: 0; background: none;
  -webkit-backdrop-filter: none; backdrop-filter: none; box-shadow: none; animation: none;
}
.pop.adm-pop.en-linea::before { display: none; }

/* ═════ Hoja · densidad densa: vista de pájaro tipo hoja de cálculo (13 px, filas de 32) ═════ */
.hoja { position: relative; flex: 1; min-height: 0; display: flex; overflow: hidden; padding: 0; }
.hoja-desplazable { flex: 1; min-width: 0; overflow: auto; overscroll-behavior: contain; scrollbar-width: thin; }
/* nada se corta en seco (ronda 3): con más columnas a la derecha, el borde se funde en blanco con una sombra fina; con
   filas debajo de la cabecera, la cabecera fija proyecta su sombra (hoja.js pone .mas-derecha y .mas-arriba) */
.hoja::after {
  content: ''; position: absolute; top: 0; right: 0; bottom: 0; z-index: 6; width: 56px; pointer-events: none; opacity: 0;
  border-radius: 0 var(--r-l) var(--r-l) 0; transition: opacity var(--dur) var(--ease);
  background: linear-gradient(to right, color-mix(in srgb, var(--sup) 0%, transparent), color-mix(in srgb, var(--sup) 92%, transparent) 70%), linear-gradient(to left, rgba(16, 24, 40, .10), transparent 6px);
}
.hoja.mas-derecha::after { opacity: 1; }
.hoja::before {
  content: ''; position: absolute; left: 0; right: 0; bottom: 0; z-index: 6; height: 28px; pointer-events: none; opacity: 0;
  border-radius: 0 0 var(--r-l) var(--r-l); transition: opacity var(--dur) var(--ease);
  background: linear-gradient(to bottom, color-mix(in srgb, var(--sup) 0%, transparent), color-mix(in srgb, var(--sup) 92%, transparent));
}
.hoja.mas-abajo::before { opacity: 1; }
.hoja.mas-arriba .hj-tabla th { box-shadow: 0 6px 8px -6px rgba(16, 24, 40, .18); }
.hoja.mas-arriba .hj-tabla th.hj-fija { box-shadow: 1px 0 0 var(--linea), 0 6px 8px -6px rgba(16, 24, 40, .18); }
.hoja-desplazable > .hj-vacio { min-height: 240px; }
.hj-receptor { position: absolute; top: 0; left: 0; width: 1px; height: 1px; padding: 0; border: 0; opacity: 0; pointer-events: none; resize: none; }
.hj-tabla {
  border-collapse: separate; border-spacing: 0; table-layout: fixed; user-select: none; -webkit-user-select: none;
  font: 400 13px/18px var(--f-ui); color: var(--tinta); font-variant-numeric: tabular-nums;
}
.hj-tabla th {
  position: sticky; top: 0; z-index: 3; height: 34px; padding: 0 10px; text-align: left; vertical-align: middle; cursor: s-resize;
  font: 600 var(--t-xs)/var(--lh-xs) var(--f-ui); color: var(--tinta-3); background: var(--sup-2);
  border-bottom: 1px solid var(--linea); border-right: 1px solid var(--sup-3); white-space: nowrap;
}
.hj-tabla th > span { display: block; overflow: hidden; text-overflow: ellipsis; }
.hj-tabla th.t-casilla, .hj-tabla th[data-k="Foto"], .hj-tabla th[data-k="Camiseta Entregada"] { text-align: center; }
.hj-tabla th.hj-fija { left: 0; z-index: 5; cursor: default; border-right: 0; box-shadow: 1px 0 0 var(--linea); }
.hj-tabla td {
  position: relative; height: 32px; padding: 0; vertical-align: middle; cursor: cell; background-color: var(--sup);
  border-bottom: 1px solid var(--linea); border-right: 1px solid var(--sup-3);
}
.hj-tabla td.hj-fija { position: sticky; left: 0; z-index: 2; cursor: default; border-right: 0; box-shadow: 1px 0 0 var(--linea), 6px 0 8px -6px rgba(16, 24, 40, .14); }
.hj-c { display: flex; align-items: center; gap: 6px; height: 31px; padding: 0 10px; min-width: 0; white-space: nowrap; overflow: hidden; }
.hj-c > span, .hj-texto { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.hj-c .ic { width: 14px; height: 14px; flex: none; color: var(--tinta-3); }
.hj-nombre .hj-c { gap: 8px; }
.hj-abrir {
  min-width: 0; padding: 0; border: 0; background: none; cursor: pointer; text-align: left;
  font: 600 13px/18px var(--f-ui); color: var(--tinta); overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
:where(html:not(.puntero-quieto)) .hj-abrir:hover { color: var(--acento-texto); text-decoration: underline; text-underline-offset: 3px; }
.hj-tabla td.solo-lectura { background-color: var(--sup-2); color: var(--tinta-2); }
.t-casilla .hj-c, td[data-k="Foto"] .hj-c, td[data-k="Camiseta Entregada"] .hj-c { justify-content: center; }
/* casillas: la común de componentes.css (azul al marcar · RONDA-3 §4); lo de Bienvenida que aún no aplica, en blanco */
.hj-casilla { cursor: pointer; }
.hj-casilla.fija { cursor: inherit; }
.hj-estado { color: var(--tinta-2); }
.hj-mini { width: 22px; height: 22px; border-radius: 50%; object-fit: cover; flex: none; }
/* bloques por etapa: nombre y número, todos iguales, sin punto de color */
.hj-tabla tr.hj-bloque td { height: auto; padding: 0; cursor: default; background: var(--sup-2); border-right: 0; }
.hj-bloque-in { position: sticky; left: 0; display: inline-flex; padding: 3px 6px; }
.hj-plegar {
  display: inline-flex; align-items: center; gap: 8px; height: 28px; padding: 0 8px; border: 0; border-radius: var(--r-s);
  background: none; cursor: pointer; font: 600 13px/1 var(--f-ui); color: var(--tinta);
}
.hj-plegar .ic { width: 15px; height: 15px; color: var(--tinta-3); }
.hj-plegar .kb-n { background: none; padding: 0; }
:where(html:not(.puntero-quieto)) .hj-plegar:hover { background: var(--sup-3); }
/* celda cambiada sin guardar: una esquina azul (la misma marca que explica el pie) · fila que no se guardó: roja */
.hj-tabla td.cambiada { background-image: linear-gradient(225deg, var(--acento) 0 7px, transparent 7px); }
.hj-tabla tr.fallida td { background-color: var(--peligro-fondo); }
.hj-tabla tr.fallida td.hj-fija { box-shadow: inset 3px 0 0 var(--peligro), 1px 0 0 var(--linea); }
.hj-tabla td.en-rango { background-color: var(--acento-suave); }
.hj-tabla td.en-rango.borde-t { box-shadow: inset 0 2px 0 var(--acento); }
.hj-tabla td.en-rango.borde-b { box-shadow: inset 0 -2px 0 var(--acento); }
.hj-tabla td.en-rango.borde-t.borde-b { box-shadow: inset 0 2px 0 var(--acento), inset 0 -2px 0 var(--acento); }
.hj-tabla td.en-rango.borde-l::before, .hj-tabla td.en-rango.borde-r::after { content: ''; position: absolute; top: 0; bottom: 0; width: 2px; background: var(--acento); pointer-events: none; }
.hj-tabla td.en-rango.borde-l::before { left: 0; }
.hj-tabla td.en-rango.borde-r::after { right: 0; }
.hj-tabla td.activa { box-shadow: inset 0 0 0 2px var(--acento) !important; background-color: var(--sup); }
.hj-tabla td.activa::before, .hj-tabla td.activa::after { display: none; }
.hj-tabla td.relleno { background-color: var(--acento-suave); box-shadow: inset 0 0 0 1px var(--acento); }
.hj-tabla td.copiada { outline: 2px dashed var(--acento); outline-offset: -3px; }
.hj-tabla td.rechazada { animation: hj-rechazo 2.6s var(--ease); }
@keyframes hj-rechazo { 0%, 70% { background-color: var(--peligro-fondo); box-shadow: inset 0 0 0 2px var(--peligro); } }
.hj-tirador { position: absolute; right: -4px; bottom: -4px; z-index: 4; width: 8px; height: 8px; border-radius: 2px; background: var(--acento); box-shadow: 0 0 0 2px var(--sup); cursor: crosshair; }
/* en edición: la celda se levanta (blanca, borde azul y sombra) y el texto queda centrado como en las demás */
.hj-tabla td.editando { z-index: 6; }
.hj-editor {
  position: absolute; top: -2px; left: -2px; z-index: 7; width: calc(100% + 4px); min-width: calc(100% + 4px); height: calc(100% + 4px); padding: 0 11px; border: 0; border-radius: 3px; outline: none;
  font: 400 13px/normal var(--f-ui); color: var(--tinta); background: var(--sup); box-shadow: 0 0 0 2px var(--acento), 0 6px 16px rgba(16, 24, 40, .16); caret-color: var(--acento);
}
.hj-editor:focus { box-shadow: 0 0 0 2px var(--acento), 0 6px 16px rgba(16, 24, 40, .16); border: 0; }
textarea.hj-editor { height: 96px; padding-top: 8px; line-height: var(--lh-m); resize: none; }
/* lista de opciones de una celda: opaca, al ancho de la celda o más */
.hj-lista {
  position: fixed; z-index: 96; width: 260px; max-height: 320px; display: flex; flex-direction: column; padding: 6px;
  border: 1px solid var(--linea); border-radius: var(--r-l); background: var(--sup); box-shadow: var(--s-3);
  font: 400 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta); animation: subir var(--dur) var(--ease);
}
.hj-lista.multi { width: 320px; max-height: 380px; }
.hj-filtro { flex: none; height: 32px; padding: 0 10px; font-size: var(--t-m); }
.hj-opciones { flex: 1; min-height: 0; overflow: auto; margin-top: 6px; display: grid; gap: 1px; align-content: start; }
.hj-opciones.rejilla { grid-template-columns: repeat(4, 1fr); gap: 2px; }
.hj-op { display: flex; align-items: center; gap: 8px; min-height: 30px; padding: 4px 8px; border-radius: var(--r-s); cursor: pointer; white-space: nowrap; }
.hj-opciones.rejilla .hj-op[data-valor="(No disponible)"] { grid-column: span 2; }
.hj-op.marcada { background: var(--sup-3); }
.hj-op.elegida { font-weight: 600; color: var(--acento-texto); }
.hj-op-caja { flex: none; --casilla: 15px; }
.hj-lista-pie { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 6px; padding-top: 8px; border-top: 1px solid var(--linea); font: 400 var(--t-xs)/var(--lh-xs) var(--f-ui); color: var(--tinta-3); }
/* pie: celdas cambiadas (con su marca), el rango elegido, Descartar y Guardar */
.adm-pie { flex: none; display: flex; align-items: center; gap: 12px; min-height: 36px; }
.hj-cambios { display: inline-flex; align-items: center; gap: 8px; font: 600 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-2); white-space: nowrap; }
.hj-marca-cambio { width: 12px; height: 12px; flex: none; border: 1px solid var(--linea-2); border-radius: 2px; background: linear-gradient(225deg, var(--acento) 0 6px, var(--sup) 6px); }
.hj-info { min-width: 0; max-width: 40%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 500 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); }
.hj-info:empty { display: none; }
/* menú de columnas: cuatro casillas con su resumen humano */
.popover-columnas { width: 340px; }
.col-menu { display: grid; gap: 2px; }
.col-menu .menu-cab span { white-space: normal; }
.col-item {
  display: flex; align-items: flex-start; gap: 10px; width: 100%; padding: 8px 10px; border: 0; border-radius: var(--r-m);
  background: none; cursor: pointer; text-align: left; color: var(--tinta);
}
:where(html:not(.puntero-quieto)) .col-item:hover, .col-item:focus-visible { background: var(--sup-3); outline: none; }
.col-caja { flex: none; margin-top: 2px; } /* la casilla común */
.col-texto { display: grid; gap: 1px; min-width: 0; }
.col-texto b { font: 600 var(--t-m)/var(--lh-m) var(--f-ui); }
.col-texto small { font: 400 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); }

/* ═════ Ficha del alumno · modal a la medida de lo que tiene, superficie blanca fija (no cambia por etapa) ═════ */
/* Ronda 3 · el velo tapa de verdad (más oscuro y desenfocado: nada de la página de detrás se lee) y la ficha cuelga de
   arriba: su alto es el de su contenido (entre 560 y 820), así que cambiar de paso solo mueve el borde de abajo. El
   horario de asignación sí usa el alto y el ancho enteros. */
.ficha-velo {
  position: fixed; inset: 0; z-index: 80; display: grid; place-items: start center; padding: max(24px, 5vh) 20px 20px;
  background: rgba(16, 24, 40, .46); -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px); animation: fundido var(--dur) var(--ease);
}
.ficha-velo.saliendo { opacity: 0; transition: opacity .2s var(--ease); }
.ficha-adm {
  --ancho-paso: 640px;
  position: relative; width: min(1120px, 100%); height: auto; min-height: min(560px, 100%); max-height: min(820px, 100%); overflow: hidden;
  display: grid; grid-template-columns: minmax(0, 340px) minmax(0, 1fr); grid-template-rows: auto auto minmax(0, 1fr) auto;
  grid-template-areas: "cab barra" "etapas etapas" "cuerpo cuerpo" "pie pie";
  background: var(--sup); border: 1px solid var(--linea); border-radius: var(--r-xl); box-shadow: var(--s-3);
  font: 400 var(--t-l)/var(--lh-l) var(--f-ui); color: var(--tinta);
  animation: subir calc(var(--dur) * 1.2) var(--ease);
}
.ficha-adm.saliendo { opacity: 0; transform: scale(.99); transition: opacity .2s var(--ease), transform .2s var(--ease); }
.ficha-adm.paso-horario { width: min(1280px, 100%); height: min(820px, 100%); }

/* cabecera: foto, nombre y acudiente; a su derecha Estado e Instrumento; al otro extremo «Pasar a …». El botón cambia
   de texto sin mover a los selectores. */
.ficha-adm .fc-cab { grid-area: cab; display: flex; align-items: center; gap: 12px; min-width: 0; padding: 18px 16px 16px 24px; }
.fc-quien { flex: 1; min-width: 0; display: grid; gap: 2px; }
.fc-quien h2 { font: 600 var(--t-2xl)/var(--lh-2xl) var(--f-ui); letter-spacing: -.005em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fc-sub { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; margin: 0; font: 400 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta-3); }
.fc-sub > span { display: inline-flex; align-items: center; gap: 6px; min-width: 0; }
.fc-sub .ic { width: 15px; height: 15px; }
.ficha-adm .fc-cab [data-ficha="cerrar"] { position: absolute; top: 14px; right: 14px; z-index: 1; }
.fc-barra { grid-area: barra; display: flex; align-items: center; min-width: 0; padding: 18px 60px 16px 4px; }
.fc-barra-fila { display: flex; align-items: center; gap: 8px; min-width: 0; width: 100%; }
.fc-barra-fila > .espacio { flex: 1 1 8px; }
.fc-sel {
  position: relative; display: inline-flex; align-items: center; gap: 8px; height: 40px; padding: 0 12px; flex: none;
  border: 1px solid var(--linea-2); border-radius: var(--r-m); background: var(--sup); white-space: nowrap;
  font: 400 var(--t-m)/1 var(--f-ui); color: var(--tinta); transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.fc-sel-etiqueta { font: 600 var(--t-xs)/1 var(--f-ui); color: var(--tinta-3); }
.fc-estado-sel { cursor: pointer; padding-right: 10px; }
:where(html:not(.puntero-quieto)) .fc-estado-sel:hover { background: var(--sup-2); }
.fc-estado-sel[aria-expanded="true"], .fc-estado-sel:focus-visible { outline: none; border-color: var(--acento); box-shadow: 0 0 0 3px var(--acento-anillo); }
.fc-sel-valor { font: 600 var(--t-l)/1 var(--f-ui); color: var(--tinta); }
.fc-sel-flecha { width: 14px !important; height: 14px !important; color: var(--tinta-3); transition: transform var(--dur) var(--ease); }
.fc-estado-sel[aria-expanded="true"] .fc-sel-flecha { transform: rotate(180deg); }
.fc-inst-caja { padding-right: 2px; }
.fc-inst-caja select.fc-inst {
  width: 124px; height: 34px; padding: 0 28px 0 2px; border: 0; box-shadow: none; background-color: transparent;
  font: 600 var(--t-l)/1 var(--f-ui); color: var(--tinta);
}
.fc-inst-caja select.fc-inst:disabled { color: var(--tinta); background-image: none; cursor: default; opacity: 1; }
/* ficha cerrada: el instrumento es un dato, no un selector sin flecha */
.fc-inst-caja:has(select:disabled) { border-color: transparent; background: var(--sup-2); }
.fc-inst-caja select.fc-inst:focus { box-shadow: none; }
.fc-inst-caja:focus-within { border-color: var(--acento); box-shadow: 0 0 0 3px var(--acento-anillo); }
/* «Pasar a …»: el principal. Con algo pendiente: secundario y candado (lo que falta, en su título y en su sitio; el clic
   lleva allí). Un principal a la vista (ronda 3): con cambios sin guardar manda «Guardar cambios»; con una acción propia
   del paso (Enviar correo, Asignar, Aplicar), esa; «Pasar a …» queda secundario. */
.boton.fc-pasar { height: 40px; padding: 0 16px; gap: 8px; font-size: var(--t-m); background: var(--acento); border-color: var(--acento); color: #fff; box-shadow: 0 1px 2px rgba(23, 86, 176, .25); }
:where(html:not(.puntero-quieto)) .boton.fc-pasar:hover:not(.bloqueado) { background: var(--acento-2); border-color: var(--acento-2); }
.boton.fc-pasar.bloqueado { background: var(--sup); border-color: var(--linea-2); color: var(--tinta-2); box-shadow: var(--s-1); }
:where(html:not(.puntero-quieto)) .boton.fc-pasar.bloqueado:hover { background: var(--sup-2); }
.boton.fc-pasar.bloqueado .ic { width: 14px; height: 14px; color: var(--tinta-3); }
.fc-pasar-hueco { display: none; }
.ficha-adm:is(:has(.fc-pie.con-cambios), :has(:is(.fc-editor, .fc-bandeja:not([hidden])) .boton.primario:not(:disabled))) .boton.fc-pasar:not(.bloqueado),
.ficha-adm:has(.fc-pie.con-cambios) .fc-editor .boton.primario:not(:disabled) {
  background: var(--sup); border-color: var(--linea-2); color: var(--tinta); box-shadow: var(--s-1);
}
.ficha-adm:has(.fc-pie.con-cambios) .fc-editor .boton.primario:not(:disabled) .ic { color: var(--tinta-3); }
:where(html:not(.puntero-quieto)) .ficha-adm:is(:has(.fc-pie.con-cambios), :has(:is(.fc-editor, .fc-bandeja:not([hidden])) .boton.primario:not(:disabled))) .boton.fc-pasar:not(.bloqueado):hover { background: var(--sup-2); border-color: var(--linea-2); }

/* menú de Estado: el actual arriba, Volver y «Ver todos los estados»; Desistió al final, aparte y en rojo. Los estados en
   palabras, sin puntos de color (RONDA-3 §2). */
.fc-menu-estado { z-index: 90; min-width: 250px; }
.fc-menu-estado .menu-item { min-height: 36px; }
.fc-menu-estado .menu-item > span:not(.ic) { flex: 1; white-space: nowrap; }
.fc-menu-extra { flex: none; margin-left: 8px; font: 500 var(--t-xs)/1 var(--f-ui); font-style: normal; color: var(--tinta-3); }
.fc-menu-item.actual, .fc-menu-item.actual:disabled { color: var(--tinta); font-weight: 600; cursor: default; }
.fc-menu-item.actual .fc-menu-fin { color: var(--acento-texto); }
.fc-menu-item[disabled]:hover { background: transparent; }
.fc-menu-todos { color: var(--tinta-2); }
.fc-menu-fin { width: 14px !important; height: 14px !important; margin-left: auto; }
.fc-menu-grupo { margin: 6px 0 0; padding: 8px 10px 4px; border-top: 1px solid var(--linea); font: 600 var(--t-xs)/var(--lh-xs) var(--f-ui); color: var(--tinta-3); }

/* etapas: pestañas (la que se mira subrayada en azul), no estados. Terminada con ✓ verde; pasada con huecos en gris;
   bloqueada (o no alcanzada en una ficha cerrada) con candado. Sin número: lo que falta se marca en el paso y el campo. */
.fc-etapas {
  grid-area: etapas; display: flex; align-items: stretch; gap: 2px; min-width: 0; height: 44px; padding: 0 20px;
  border-bottom: 1px solid var(--linea); overflow-x: auto; scrollbar-width: none;
}
.fc-etapas::-webkit-scrollbar { display: none; }
.fc-etapa-sep { display: inline-flex; align-items: center; flex: none; }
.fc-etapa-sep .ic { width: 14px; height: 14px; color: var(--tinta-4); }
.fc-etapa {
  flex: none; display: inline-flex; align-items: center; gap: 6px; height: 100%; padding: 0 10px; border: 0; border-radius: 0;
  cursor: pointer; white-space: nowrap; font: 600 var(--t-m)/1 var(--f-ui); color: var(--tinta-2); background: none;
  box-shadow: inset 0 -2px 0 transparent; transition: color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
:where(html:not(.puntero-quieto)) .fc-etapa:not(.bloqueada):not(.en-vista):hover { color: var(--tinta); box-shadow: inset 0 -2px 0 var(--linea-2); }
.fc-etapa-marca { display: inline-flex; align-items: center; }
.fc-etapa-marca .ic { width: 14px; height: 14px; }
.fc-etapa.terminada .fc-etapa-marca { color: var(--ok); }
.fc-etapa.pasada { color: var(--tinta-3); }
.fc-etapa.en-vista { color: var(--acento-texto); box-shadow: inset 0 -2px 0 var(--acento); }
.fc-etapa.bloqueada { cursor: default; color: var(--tinta-4); }
.fc-etapa.bloqueada .fc-etapa-marca .ic { width: 12px; height: 12px; }
.fc-etapa:focus-visible { outline: none; box-shadow: inset 0 0 0 2px var(--acento-anillo); }

/* cuerpo: pasos (columna gris) · editor (blanco) · notas */
.fc-cuerpo { grid-area: cuerpo; display: grid; grid-template-columns: 236px minmax(0, 1fr) 248px; min-height: 0; }
.fc-principal { position: relative; min-width: 0; min-height: 0; display: flex; flex-direction: column; }

/* pasos: número (o ✓), nombre y su resumen (que pasa a otra línea antes que cortarse). Un solo indicador por paso: el
   círculo. El abierto, blanco con la barra azul; sin guardar, un punto azul junto al nombre. Lo que falta, una vez en su
   sitio (ronda 3): el círculo ámbar del paso cuando el paso está cerrado; abierto, el campo mismo. */
.fc-pasos { min-height: 0; display: flex; flex-direction: column; gap: 4px; padding: 16px 12px; overflow-y: auto; background: var(--sup-2); border-right: 1px solid var(--linea); }
.fc-paso {
  position: relative; flex: none; display: flex; align-items: flex-start; gap: 10px; width: 100%; padding: 10px 10px 10px 12px;
  border: 1px solid transparent; border-radius: var(--r-m); background: transparent; cursor: pointer; text-align: left; color: var(--tinta);
  transition: background-color var(--dur) var(--ease), border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
:where(html:not(.puntero-quieto)) .fc-paso:not(.actual):hover { background: var(--sup-3); }
.fc-paso:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--acento-anillo); }
.fc-paso.actual { background: var(--sup); border-color: var(--linea); box-shadow: var(--s-1); }
.fc-paso.actual::before { content: ''; position: absolute; left: -1px; top: 9px; bottom: 9px; width: 3px; border-radius: 0 3px 3px 0; background: var(--acento); }
.fc-paso-n {
  position: relative; flex: none; width: 24px; height: 24px; margin-top: 1px; display: grid; place-items: center; border-radius: 50%;
  font: 600 12px/1 var(--f-ui); color: var(--tinta-2); background: var(--sup); box-shadow: inset 0 0 0 1px var(--linea-2); font-variant-numeric: tabular-nums;
}
.fc-paso-ok { display: none; width: 14px !important; height: 14px !important; }
.fc-paso.completo .fc-paso-n { color: var(--ok-texto); background: var(--ok-fondo); box-shadow: none; }
.fc-paso.completo .fc-paso-num { display: none; }
.fc-paso.completo .fc-paso-ok { display: block; }
.fc-paso.falta:not(.actual) .fc-paso-n { color: var(--aviso-texto); background: var(--aviso-fondo); box-shadow: inset 0 0 0 1.5px var(--aviso); }
.fc-paso-txt { flex: 1; min-width: 0; display: grid; gap: 2px; }
.fc-paso-nombre { display: flex; align-items: baseline; gap: 6px; min-width: 0; font: 600 var(--t-m)/var(--lh-m) var(--f-ui); }
.fc-paso-nombre b { min-width: 0; font-weight: 600; overflow-wrap: break-word; }
.fc-paso.cambiado .fc-paso-nombre::after { content: ''; flex: none; width: 7px; height: 7px; border-radius: 50%; align-self: center; background: var(--acento); }
.fc-paso-res { font: 400 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); overflow-wrap: anywhere; }
.fc-paso-res.vacio { color: var(--tinta-3); font-style: normal; }
/* etapa pasada o ficha cerrada: lo que falta en gris, sin ámbar */
.ficha-adm:is(.etapa-pasada, .fuera-de-cadena) .fc-paso.falta .fc-paso-n { color: var(--tinta-3); background: var(--sup); box-shadow: inset 0 0 0 1px var(--linea-2); }

/* recordatorio para Finanzas (no escribe): le toca a otra persona, así que en gris (ronda 3), arriba del paso */
.fc-recordatorio {
  flex: none; display: flex; align-items: center; gap: 10px; max-width: var(--ancho-paso); margin: 16px 28px 0; padding: 10px 14px; border-radius: var(--r-m);
  background: var(--neutro-fondo); font: 500 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta-2);
}
.fc-recordatorio[hidden] { display: none; }
.fc-recordatorio .ic { width: 17px; height: 17px; flex: none; color: var(--tinta-3); }

/* editor del paso: título a la izquierda, lo que falta a la derecha; el contenido empieza siempre arriba */
.fc-editor { flex: 1; min-height: 0; display: flex; flex-direction: column; padding: 20px 28px 16px; }
.fc-ed-cab { flex: none; display: flex; align-items: center; gap: 10px; min-height: 32px; padding-bottom: 18px; }
.fc-ed-ic { width: 32px; height: 32px; flex: none; display: grid; place-items: center; border-radius: var(--r-m); color: var(--tinta-2); background: var(--sup-3); }
.fc-ed-ic .ic { width: 18px; height: 18px; }
.fc-t-titulo { font: 600 var(--t-xl)/var(--lh-xl) var(--f-ui); color: var(--tinta); }
.fc-opcional { padding: 3px 8px; border-radius: var(--r-pildora); font: 600 var(--t-xs)/1 var(--f-ui); color: var(--neutro-texto); background: var(--neutro-fondo); }
.fc-ed-cuerpo { flex: 1; min-height: 0; display: flex; flex-direction: column; align-items: stretch; gap: 20px; overflow-y: auto; margin: 0 -8px; padding: 2px 8px 8px; }
/* un solo ancho para el contenido de todos los pasos (ronda 3: antes 480, 500, 520, 600, 620, 720) */
.fc-ed-cuerpo > :not(.t-dispo, .fc-horario, .fc-vacio, .fc-siguiente), .fc-resumen > * { width: 100%; max-width: var(--ancho-paso); }
.fc-ed-cuerpo > .fc-vacio { align-self: stretch; }
.fc-ayuda-paso { margin: 0; font: 400 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); }
.fc-siguiente { display: flex; padding-top: 4px; }
.fc-siguiente .boton { gap: 6px; }
.fc-siguiente .boton .ic { width: 15px; height: 15px; color: var(--tinta-3); }

/* campos: rótulo encima, control debajo; dos columnas ordenadas */
.fc-campos { display: grid; gap: 16px 20px; align-content: start; }
.fc-campos.c2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.fc-campos.lectura { gap: 14px 20px; }
.fc-campo { position: relative; display: grid; gap: 6px; align-content: start; min-width: 0; border-radius: var(--r-m); }
.fc-etiqueta { display: flex; align-items: center; gap: 8px; min-width: 0; font: 600 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-2); }
.fc-input { width: 100%; min-width: 0; }
textarea.fc-input { font: 400 var(--t-m)/var(--lh-m) var(--f-ui); }
.fc-valor { min-height: var(--alto-control); display: flex; align-items: center; font: 500 var(--t-l)/var(--lh-l) var(--f-ui); color: var(--tinta); overflow-wrap: anywhere; }
.fc-valor.vacio { font-weight: 400; color: var(--tinta-3); }
/* obligatorio que falta (etapa en curso): rótulo y borde en ámbar · recomendado: «Recomendado» en gris a la derecha del
   rótulo · etapa pasada o ficha cerrada: sin color */
.fc-campo.falta > .fc-etiqueta { color: var(--aviso-texto); }
.fc-campo.falta :is(input.fc-input, select.fc-input, textarea.fc-input), .fc-campo.falta .fc-fecha select { border-color: var(--aviso); }
.fc-campo.falta :is(.fc-tel, .fc-chips .fc-chip, .fc-seg .fc-seg-op) { border-color: var(--aviso); }
.fc-campo.recomendado > .fc-etiqueta::after {
  content: 'Recomendado'; margin-left: auto; padding: 3px 8px; border-radius: var(--r-pildora);
  font: 600 var(--t-xs)/1 var(--f-ui); color: var(--neutro-texto); background: var(--neutro-fondo); /* la misma marca que «Opcional» */
}
.ficha-adm:is(.etapa-pasada, .fuera-de-cadena) .fc-campo.falta > .fc-etiqueta { color: var(--tinta-2); }
.ficha-adm:is(.etapa-pasada, .fuera-de-cadena) .fc-campo.falta :is(input.fc-input, select.fc-input, .fc-tel, .fc-chip, .fc-seg-op), .ficha-adm:is(.etapa-pasada, .fuera-de-cadena) .fc-campo.falta .fc-fecha select { border-color: var(--linea-2); }
.ficha-adm.fuera-de-cadena .fc-campo.recomendado > .fc-etiqueta::after { display: none; }
/* «Pasar a …» bloqueado lleva al campo que falta: un anillo ámbar breve */
.fc-campo.pulso { animation: fc-pulso 1.6s var(--ease); }
@keyframes fc-pulso { 0%, 60% { box-shadow: 0 0 0 4px var(--sup), 0 0 0 6px color-mix(in srgb, var(--aviso) 55%, transparent); } }
/* ayudas bajo el campo */
.fc-con-ayuda { display: grid; gap: 4px; min-width: 0; }
.fc-ayuda { font: 400 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); }
.fc-ayuda:empty { display: none; }
.fc-aviso-nombre { color: var(--peligro-texto); font-weight: 500; }
.fc-con-boton { display: flex; align-items: center; gap: 8px; min-width: 0; }
.fc-con-boton > .fc-tel { flex: 1; }
.fc-wa:empty { display: none; }
.fc-wa .boton { height: var(--alto-control); padding: 0 14px; font-size: var(--t-m); border-color: var(--linea-2); background: var(--sup); color: var(--tinta); box-shadow: var(--s-1); }
.fc-wa .boton .ic { color: var(--ok); }
:where(html:not(.puntero-quieto)) .fc-wa .boton:hover { background: var(--sup-2); border-color: var(--linea-2); }
/* fecha de nacimiento: día, mes y año */
.fc-fecha { display: grid; grid-template-columns: 76px minmax(0, 1fr) 96px; gap: 8px; }
/* opciones de 2–3 (Hermanos) y opciones múltiples (Idiomas): el mismo lenguaje de selección, píldoras con borde */
.fc-seg { justify-self: start; display: inline-flex; flex-wrap: wrap; gap: 6px; }
.fc-seg-op, .fc-chip {
  display: inline-flex; align-items: center; justify-content: center; min-width: 64px; height: var(--alto-control); padding: 0 14px;
  border: 1px solid var(--linea-2); border-radius: var(--r-pildora); background: var(--sup); cursor: pointer;
  font: 500 var(--t-m)/1 var(--f-ui); color: var(--tinta-2);
  transition: background-color var(--dur) var(--ease), border-color var(--dur) var(--ease), color var(--dur) var(--ease);
}
:where(html:not(.puntero-quieto)) :is(.fc-seg-op:not([aria-checked="true"]), .fc-chip:not([aria-pressed="true"])):hover { background: var(--sup-2); color: var(--tinta); }
.fc-seg-op[aria-checked="true"], .fc-chip[aria-pressed="true"] { border-color: var(--acento); background: var(--acento-suave); color: var(--acento-texto); font-weight: 600; }
.fc-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.fc-casilla { display: inline-flex; align-items: center; gap: 8px; height: var(--alto-control); cursor: pointer; font-size: var(--t-m); }
.fc-casilla input { width: 18px; height: 18px; }
/* teléfono: el prefijo dentro del campo, como un selector pequeño */
.ficha-adm .fc-tel {
  display: flex; align-items: stretch; min-width: 0; height: var(--alto-control); overflow: hidden;
  border: 1px solid var(--linea-2); border-radius: var(--r-m); background: var(--sup);
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.ficha-adm .fc-tel:focus-within { border-color: var(--acento); box-shadow: 0 0 0 3px var(--acento-anillo); }
.fc-prefijo {
  display: inline-flex; align-items: center; gap: 3px; flex: none; padding: 0 8px 0 12px; border: 0; border-right: 1px solid var(--linea);
  background: var(--sup-2); cursor: pointer; font: 600 var(--letra-control)/1 var(--f-ui); color: var(--tinta); font-variant-numeric: tabular-nums;
}
:where(html:not(.puntero-quieto)) .fc-prefijo:hover { background: var(--sup-3); }
.fc-prefijo-ic { width: 12px !important; height: 12px !important; color: var(--tinta-3); }
.ficha-adm .fc-tel input.fc-tel-num { flex: 1; height: 100%; border: 0; border-radius: 0; box-shadow: none; background: transparent; }
.ficha-adm .fc-tel input.fc-tel-num:focus { box-shadow: none; }
.fc-campo.verificar .fc-tel { border-color: var(--aviso); }
.ficha-adm .fc-tel-prop:empty { display: none; }
.fc-usar {
  justify-self: start; align-self: flex-start; display: inline-flex; align-items: center; gap: 4px; min-height: 28px; padding: 4px 12px; border: 0; border-radius: var(--r-pildora);
  background: var(--acento-suave); cursor: pointer; font: 500 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--acento-texto); text-align: left;
}
.fc-usar b { font-weight: 600; white-space: nowrap; }
:where(html:not(.puntero-quieto)) .fc-usar:hover { background: color-mix(in srgb, var(--acento) 16%, var(--sup)); }
.fc-verificar { display: inline-flex; align-items: center; gap: 6px; font: 600 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--aviso-texto); }
.fc-verificar .ic { width: 14px; height: 14px; color: var(--aviso); }
/* adjuntos sueltos (fuera de Documentación) */
.fc-adjuntos { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.fc-adj { display: inline-flex; align-items: center; gap: 8px; max-width: 280px; height: 36px; padding: 0 10px 0 6px; border: 1px solid var(--linea); border-radius: var(--r-m); background: var(--sup-2); font-size: var(--t-m); }
.fc-adj img { width: 26px; height: 26px; border-radius: var(--r-s); object-fit: cover; }
.fc-adj > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fc-adj .ic { width: 16px; height: 16px; color: var(--tinta-3); }
.fc-adj-quitar { display: grid; place-items: center; width: 22px; height: 22px; padding: 0; border: 0; border-radius: var(--r-s); background: none; cursor: pointer; color: var(--tinta-3); }
.fc-adj-quitar .ic { width: 14px; height: 14px; }
:where(html:not(.puntero-quieto)) .fc-adj-quitar:hover { background: var(--sup-3); color: var(--tinta); }
.fc-pendiente { margin: 0; padding: 8px 12px; border-radius: var(--r-m); font: 400 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); background: var(--sup-2); }
.fc-gris { display: inline-flex; align-items: center; gap: 6px; margin: 0; font: 400 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta-3); }

/* ── Contacto (2 campos): amplio (controles de 44), una columna al ancho de los pasos, arriba como los demás ── */
.fc-campos.c-contacto { grid-template-columns: minmax(0, 1fr); gap: 20px; --alto-control: 44px; --letra-control: var(--t-xl); }
.fc-campos.c-contacto.lectura { grid-template-columns: repeat(2, minmax(0, 1fr)); --alto-control: 36px; }
.fc-campos.c-contacto .fc-etiqueta { font-size: var(--t-m); line-height: var(--lh-m); }

/* ── Alumno (8 campos) y Acudiente (4 + 4): dos columnas ordenadas ── */
.fc-acu2 { padding-top: 20px; border-top: 1px solid var(--linea); }
.fc-sub-fila { display: flex; align-items: center; gap: 12px; margin: 0 0 14px; }
.fc-sub-fila .boton { margin-left: auto; }
.fc-sub-titulo { margin: 0; font: 600 var(--t-l)/var(--lh-l) var(--f-ui); color: var(--tinta); }
.fc-agregar-acu { align-self: flex-start; }

/* ── Disponibilidades: rejilla de líneas finas; lo marcado, una banda azul suave con su hora escrita ── */
.fc-ed-cuerpo.p-disponibilidades { overflow: hidden; gap: 12px; }
.dp-resumen { flex: none; min-width: 0; margin: 0; font: 600 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta); overflow-wrap: anywhere; }
.dp-resumen[hidden] { display: none; }
.dp-resumen.vacio { font-weight: 400; color: var(--tinta-3); } /* sin nada marcado: cómo marcar, en gris (no una cápsula sobre la rejilla) */
.fc-editor:has(.t-dispo.falta) .dp-resumen { color: var(--aviso-texto); }
.ficha-adm:is(.etapa-pasada, .fuera-de-cadena) .fc-editor:has(.t-dispo.falta) .dp-resumen { color: var(--tinta-3); }
.fc-campo.t-dispo { flex: 1; min-height: 0; display: flex; flex-direction: column; gap: 8px; width: 100%; max-width: 820px; }
.fc-campo.t-dispo.sin-rejilla { flex: none; }
.dp-marco { position: relative; flex: 0 1 auto; min-height: 0; overflow-y: auto; border: 1px solid var(--linea); border-radius: var(--r-l); background: var(--sup); }
.dp-rejilla { position: relative; display: grid; grid-template-columns: 56px repeat(var(--dias, 3), minmax(0, 1fr)); user-select: none; -webkit-user-select: none; touch-action: none; }
.dp-esquina, .dp-dia { position: sticky; top: 0; z-index: 3; height: 36px; background: var(--sup-2); border-bottom: 1px solid var(--linea); }
.dp-dia { display: flex; align-items: center; justify-content: space-between; gap: 6px; padding: 0 6px 0 12px; border-left: 1px solid var(--linea); font: 600 var(--t-m)/1 var(--f-ui); color: var(--tinta); }
.dp-dia-n { min-width: 0; white-space: nowrap; }
/* «No disponible»: un interruptor en la cabecera del día; se ve al pasar el mouse o cuando está marcado */
/* el interruptor flota a la derecha de la cabecera: el nombre del día tiene todo el ancho (nada de «Domi…») */
.dp-no {
  position: absolute; right: 6px; top: 6px; flex: none; height: 24px; padding: 0 8px; border: 1px solid var(--linea-2); border-radius: var(--r-pildora); background: var(--sup); cursor: pointer;
  font: 500 var(--t-xs)/1 var(--f-ui); color: var(--tinta-2); opacity: 0; transition: opacity var(--dur) var(--ease), background-color var(--dur) var(--ease);
}
:where(html:not(.puntero-quieto)) .dp-dia:hover .dp-no, .dp-no:focus-visible, .dp-no[aria-pressed="true"] { opacity: 1; }
.dp-no::before { content: 'No disponible'; } /* texto del interruptor (el nombre accesible va en aria-label) */
:where(html:not(.puntero-quieto)) .dp-no:hover { background: var(--sup-3); color: var(--tinta); }
.dp-no[aria-pressed="true"] { border-color: transparent; background: var(--tinta-2); color: #fff; }
.dp-hora { height: 18px; padding-right: 8px; text-align: right; font: 500 var(--t-xs)/18px var(--f-ui); color: var(--tinta-3); font-variant-numeric: tabular-nums; }
.dp-celda {
  position: relative; display: block; height: 18px; padding: 0; border: 0; border-left: 1px solid var(--linea); border-top: 1px solid var(--sup-3); border-radius: 0;
  background: var(--sup); cursor: pointer; transition: background-color .12s var(--ease);
}
.dp-celda.en-hora { border-top-color: var(--linea); }
:where(html:not(.puntero-quieto)) .dp-celda:not(.rayada):not([aria-pressed="true"]):hover { background: var(--sup-2); }
/* lo marcado: una banda continua (la barra azul se pinta con el fondo, también bajo el borde, para que no se corte) */
.dp-celda[aria-pressed="true"] {
  border-top-color: transparent; background: linear-gradient(var(--acento), var(--acento)) left / 3px 100% no-repeat border-box, var(--acento-suave);
}
.dp-celda[aria-pressed="true"].ini { border-top-color: color-mix(in srgb, var(--acento) 35%, transparent); }
.dp-celda[aria-pressed="true"].ini { z-index: 1; }
.dp-celda[aria-pressed="true"].ini::after {
  content: attr(data-tramo); position: absolute; left: 10px; top: 1px; z-index: 2; pointer-events: none; white-space: nowrap;
  font: 600 var(--t-xs)/16px var(--f-ui); color: var(--acento-texto); font-variant-numeric: tabular-nums;
}
.dp-celda[aria-pressed="true"].nueva { background: linear-gradient(var(--acento), var(--acento)) left / 3px 100% no-repeat border-box, repeating-linear-gradient(135deg, var(--acento-suave) 0 5px, color-mix(in srgb, var(--acento) 20%, #fff) 5px 10px) border-box; }
.dp-celda.previa[aria-pressed="true"] { background: color-mix(in srgb, var(--acento) 26%, var(--sup)); }
.dp-celda.previa[aria-pressed="false"] { background: var(--sup-3); box-shadow: none; }
.dp-celda.rayada { cursor: not-allowed; background: repeating-linear-gradient(135deg, var(--sup-3) 0 2px, var(--sup) 2px 6px); }
.dp-celda:focus-visible { outline: 2px solid var(--acento); outline-offset: -2px; border-radius: 0; }
.dp-rejilla.lectura .dp-celda { cursor: default; }
.dp-capa-no {
  grid-column: var(--col); grid-row: 2 / span var(--filas); z-index: 2; display: grid; place-items: center; pointer-events: none;
  border-left: 1px solid var(--linea); background: repeating-linear-gradient(135deg, var(--sup-2) 0 6px, var(--sup-3) 6px 12px);
  font: 600 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-2); writing-mode: horizontal-tb;
}
.dp-capa-no[hidden] { display: none; }
.fc-registro-linea { margin: 0; font: 400 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta-3); }
.fc-campo.t-dispo.sin-rejilla { max-width: none; }

/* ── Asignar horario: el área derecha entera es del horario (módulo del área Horario); los pasos, solo sus números ── */
.ficha-adm.paso-horario .fc-cuerpo { grid-template-columns: 64px minmax(0, 1fr); }
.ficha-adm.paso-horario .fc-notas { display: none; }
.ficha-adm.paso-horario .fc-pasos { padding: 16px 10px; align-items: center; }
.ficha-adm.paso-horario .fc-paso { width: 44px; justify-content: center; padding: 10px 0; }
.ficha-adm.paso-horario .fc-paso-txt { display: none; }
.ficha-adm.paso-horario .fc-paso.actual::before { left: -1px; }
.ficha-adm.paso-horario .fc-editor { padding: 0; }
.fc-ed-cuerpo.p-horario { flex: 1; min-height: 0; display: flex; margin: 0; padding: 0; gap: 0; overflow: hidden; }
.fc-horario { flex: 1; min-width: 0; min-height: 0; display: flex; flex-direction: column; overflow: hidden; }
.fc-horario > :not(.fc-horario-carga) { flex: 1; min-height: 0; }
.fc-horario[data-modo="mini"] { padding: 16px 20px; overflow: auto; }
.fc-horario-carga { margin: auto; }
/* bandeja de la propuesta: una línea blanca abajo; su «Aplicar» es la confirmación */
.fc-bandeja {
  flex: none; display: flex; align-items: center; gap: 12px; margin: 0 16px 14px; padding: 10px 12px 10px 14px;
  border: 1px solid var(--linea); border-radius: var(--r-l); background: var(--sup); box-shadow: var(--s-2); animation: subir var(--dur) var(--ease);
}
.fc-bandeja[hidden] { display: none; }
.fc-bandeja-ic { display: grid; place-items: center; flex: none; width: 30px; height: 30px; border-radius: var(--r-m); color: var(--acento-texto); background: var(--acento-suave); }
.fc-bandeja-ic .ic { width: 16px; height: 16px; }
.fc-bandeja-n { min-width: 0; font: 600 var(--t-m)/var(--lh-m) var(--f-ui); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fc-bandeja-det { flex: none; font: 400 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); white-space: nowrap; }
.fc-bandeja-aviso { display: inline-flex; align-items: center; gap: 6px; min-width: 0; font: 600 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--aviso-texto); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fc-bandeja-aviso .ic { width: 14px; height: 14px; color: var(--aviso); }

/* ── registros de solo lectura (correo enviado, cliente, grupo, horario de una ficha cerrada); lo que no hay, con el
   vacío común (.fc-vacio) ── */
.fc-registro, .fc-cliente-fila {
  display: flex; align-items: center; gap: 14px; width: 100%; padding: 14px 16px;
  border: 1px solid var(--linea); border-radius: var(--r-l); background: var(--sup);
}
.fc-registro-ic { width: 34px; height: 34px; flex: none; display: grid; place-items: center; border-radius: 50%; color: var(--tinta-3); background: var(--sup-3); }
.fc-registro-ic .ic { width: 17px; height: 17px; }
.fc-registro.hecho .fc-registro-ic, .fc-cliente-fila.hecho .fc-registro-ic { color: var(--ok-texto); background: var(--ok-fondo); }
.fc-registro-txt { flex: 1; min-width: 0; display: grid; gap: 2px; }
.fc-registro-txt b { font: 600 var(--t-l)/var(--lh-l) var(--f-ui); color: var(--tinta); overflow-wrap: anywhere; }
.fc-registro-txt p { margin: 0; font: 400 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta-3); overflow-wrap: anywhere; }

/* ── Correo de confirmación (2 campos y un envío): campos grandes arriba, a quién va y el botón ── */
.fc-ed-cuerpo.p-correo { --alto-control: 44px; --letra-control: var(--t-xl); gap: 16px; }
.fc-campos.fc-correo { grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); }
.fc-campos.fc-correo .fc-etiqueta { font-size: var(--t-m); line-height: var(--lh-m); }
.fc-para { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 6px; margin: 0; font: 400 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta-2); }
.fc-para b { font-weight: 600; color: var(--tinta); }
.fc-para-correo { color: var(--tinta-3); }
.fc-para-correo::before { content: '·'; margin-right: 6px; }
.fc-para-correo.sin { color: var(--aviso-texto); }
.fc-t-acciones { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; }
.fc-correo-ayuda { color: var(--aviso-texto); font-weight: 500; }
.fc-cuidado { margin: 0; font: 400 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); }

/* ── Descuentos (opcional): dos campos normales con su unidad dentro; el neto solo si está registrado ── */
.fc-campos.fc-descuentos { grid-template-columns: repeat(2, minmax(0, 220px)); gap: 20px; --alto-control: 44px; --letra-control: var(--t-xl); }
.fc-descuentos .fc-campo .fc-input { padding-right: 64px; font-variant-numeric: tabular-nums; }
.fc-descuentos .fc-campo[data-campo="% Factura Off"]::after,
.fc-descuentos .fc-campo[data-campo="Clases Factura Off"]::after {
  position: absolute; right: 14px; bottom: 12px; font: 500 var(--t-m)/20px var(--f-ui); color: var(--tinta-3); pointer-events: none;
}
.fc-descuentos .fc-campo[data-campo="% Factura Off"]::after { content: '%'; }
.fc-descuentos .fc-campo[data-campo="Clases Factura Off"]::after { content: 'clases'; }
.fc-campo.fc-neto { display: flex; align-items: baseline; gap: 10px; }
.fc-campo.fc-neto[hidden] { display: none; }
.fc-campo.fc-neto .fc-valor { min-height: 0; font-weight: 600; }

/* ── Cliente (un dato): una fila con «Cambiar»; sin cliente, buscar o crear, las dos al mismo nivel ── */
.fc-cliente-fila .boton { flex: none; }
.fc-otro-cliente { align-self: flex-start; }
.fc-cliente-sin { display: grid; gap: 14px; }
.fc-cliente-por-que { margin: 0; font: 400 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta-2); }
.fc-cliente-opciones { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 14px; align-items: start; }
.fc-cliente-buscar, .fc-cliente-crear { display: grid; gap: 10px; align-content: start; padding: 14px 16px; border: 1px solid var(--linea); border-radius: var(--r-l); background: var(--sup); }
.fc-cliente-buscar .fc-sub-fila { margin: 0; }
.fc-cliente-buscar b, .fc-cliente-crear b { font: 600 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta); }
.fc-cliente-crear p { margin: 0; font: 400 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta-3); }
.fc-cliente-crear .boton { justify-self: start; }
.fc-buscar-caja { position: relative; display: block; }
.fc-buscar-caja .ic { position: absolute; left: 10px; top: 50%; width: 16px; height: 16px; transform: translateY(-50%); color: var(--tinta-3); pointer-events: none; }
.fc-buscar-caja .fc-input { padding-left: 34px; }
.fc-cliente-resultados { display: grid; gap: 2px; }
.fc-cliente-res { display: flex; align-items: center; gap: 8px; min-height: 34px; padding: 0 4px 0 10px; border-radius: var(--r-m); font: 500 var(--t-m)/var(--lh-m) var(--f-ui); }
.fc-cliente-res > span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
:where(html:not(.puntero-quieto)) .fc-cliente-res:hover { background: var(--sup-2); }
.fc-cliente-resultados .fc-gris { padding: 4px 10px; font-size: var(--t-s); }

/* ── Kit, Documentación y Grupo de WhatsApp: filas iguales de marcar (la casilla común, nombre, estado y su acción) ── */
.fc-lista-marcar { display: grid; gap: 8px; }
.fc-tile {
  position: relative; display: flex; align-items: center; gap: 14px; width: 100%; min-width: 0; min-height: 60px; padding: 12px 16px;
  border: 1px solid var(--linea); border-radius: var(--r-l); background: var(--sup); box-shadow: var(--s-1);
  cursor: pointer; text-align: left; color: var(--tinta);
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease), background-color var(--dur) var(--ease);
}
:where(html:not(.puntero-quieto)) .fc-tile:not([aria-disabled="true"]):not(.fc-zona):hover { border-color: var(--linea-2); box-shadow: var(--s-2); }
.fc-tile:focus-visible { outline: none; border-color: var(--acento); box-shadow: 0 0 0 3px var(--acento-anillo); }
.fc-tile[aria-disabled="true"], .fc-tile.fc-zona { cursor: default; }
.fc-tile-marca { flex: none; --casilla: 18px; pointer-events: none; }
/* lo que falta en la etapa en curso: la fila misma, en ámbar (una vez, en su sitio) */
.fc-tile.falta { border-color: color-mix(in srgb, var(--aviso) 70%, var(--linea)); }
.fc-tile.falta .fc-tile-texto > small:first-of-type { color: var(--aviso-texto); }
.ficha-adm:is(.etapa-pasada, .fuera-de-cadena) .fc-tile.falta { border-color: var(--linea); }
.ficha-adm:is(.etapa-pasada, .fuera-de-cadena) .fc-tile.falta .fc-tile-texto > small:first-of-type { color: var(--tinta-3); }
/* ficha cerrada: sin casilla que marcar; un ✓ si está hecho y el estado escrito */
.fc-tile.lectura { cursor: default; box-shadow: none; background: var(--sup); }
/* 15 oct · RONDA-FINAL §5: abierta desde lo que falta (Kanban, Hoy, Pendientes), la fila de ese campo queda marcada */
.fc-tile.foco-falta { border-color: var(--aviso); box-shadow: 0 0 0 3px color-mix(in srgb, var(--aviso) 22%, transparent); }
.fc-tile.pulso { animation: fc-pulso 1.6s var(--ease); }
/* la etiqueta de la tarjeta que abre lo que falta (documentos o kit): un botón, como la del contacto */
button.kbt-paso.abre-falta { padding-left: 9px; }
.fc-tile-hecho { width: 18px; height: 18px; flex: none; display: grid; place-items: center; color: var(--ok); visibility: hidden; }
.fc-tile-hecho .ic { width: 16px; height: 16px; }
.fc-tile[aria-pressed="true"] .fc-tile-hecho { visibility: visible; }
.fc-tile-texto { flex: 1; min-width: 0; display: grid; gap: 1px; }
.fc-tile-texto b { font: 600 var(--t-l)/var(--lh-l) var(--f-ui); overflow-wrap: anywhere; }
.fc-tile-texto small { font: 400 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); }
.fc-tile-texto .fc-tile-extra:empty { display: none; }
.fc-tile-accion { flex: none; display: inline-flex; align-items: center; gap: 4px; font: 500 var(--t-s)/1 var(--f-ui); color: var(--acento-texto); }
.fc-tile-accion .ic { width: 14px; height: 14px; }
.fc-check-grande { min-height: 72px; padding: 16px 18px; }
.fc-check-grande .fc-tile-marca { --casilla: 20px; }
/* Contrato y Foto: la misma fila; el archivo como un enlace con su tipo; soltar encima lo marca en azul */
.fc-zona.sobre { border-color: var(--acento); background: var(--acento-suave); }
.fc-zona-l { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
.fc-zona-l:empty { display: none; }
.fc-zona-adj {
  display: inline-flex; align-items: center; gap: 6px; max-width: 100%; height: 30px; padding: 0 10px 0 6px;
  border: 1px solid var(--linea); border-radius: var(--r-m); background: var(--sup-2); font: 500 var(--t-s)/1 var(--f-ui); color: var(--tinta); text-decoration: none;
}
a.fc-zona-adj { cursor: pointer; }
:where(html:not(.puntero-quieto)) a.fc-zona-adj:hover { border-color: var(--linea-2); background: var(--sup-3); }
.fc-zona-adj > span { min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fc-zona-adj .ic { width: 15px; height: 15px; color: var(--tinta-3); flex: none; }
.fc-zona-adj img { width: 22px; height: 22px; border-radius: var(--r-s); object-fit: cover; flex: none; }
.fc-zona.foto .fc-zona-adj:has(img) { height: auto; padding: 3px 10px 3px 3px; }
.fc-zona.foto .fc-zona-adj img { width: 40px; height: 40px; border-radius: var(--r-m); }
.fc-ext { flex: none; padding: 2px 5px; border-radius: 4px; font: 700 10px/1 var(--f-ui); letter-spacing: .02em; color: var(--tinta-2); background: var(--sup-3); }
.fc-zona-adj.nuevo { border-style: dashed; border-color: var(--acento); background: var(--sup); }
.fc-zona-nuevo { flex: none; font: 600 var(--t-xs)/1 var(--f-ui); color: var(--acento-texto); }
.fc-zona .boton { flex: none; align-self: center; }
/* tallas de la camiseta */
.popover-tallas { width: 300px; }
.fc-tallas-nota { margin: 0 0 6px; padding: 6px 10px; border-radius: var(--r-m); font: 400 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-2); background: var(--sup-2); }
.fc-tallas-l { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; padding: 4px 2px 2px; }
.fc-talla {
  display: grid; gap: 2px; padding: 8px 10px; border: 1px solid var(--linea); border-radius: var(--r-m); background: var(--sup);
  cursor: pointer; text-align: left; font: 500 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta);
}
.fc-talla b { font-weight: 500; }
:where(html:not(.puntero-quieto)) .fc-talla:hover { background: var(--sup-2); border-color: var(--linea-2); }
.fc-talla small { font: 500 var(--t-xs)/var(--lh-xs) var(--f-ui); color: var(--tinta-3); }
.fc-talla.del-alumno small { color: var(--acento-texto); }
.fc-talla.elegida { border-color: var(--acento); background: var(--acento-suave); color: var(--acento-texto); }
.fc-talla.elegida b { font-weight: 600; }

/* ── sin paso abierto: lo que falta en una frase con enlaces, y los datos clave en dos grupos ── */
.ficha-adm.sin-paso .fc-editor { display: none; }
.fc-resumen { flex: 1; min-height: 0; display: flex; flex-direction: column; gap: 24px; padding: 22px 28px 20px; overflow-y: auto; }
.fc-resumen[hidden] { display: none; }
.fc-res-cab { display: grid; gap: 8px; }
.fc-res-cab h3 { font: 600 var(--t-xl)/var(--lh-xl) var(--f-ui); }
.fc-res-lineas { display: grid; gap: 6px; }
.fc-res-linea { display: flex; align-items: flex-start; gap: 8px; margin: 0; font: 400 var(--t-l)/var(--lh-l) var(--f-ui); color: var(--tinta-2); }
.fc-res-linea > .ic { width: 18px; height: 18px; flex: none; margin-top: 2px; }
/* lo que falta: una línea con su enlace (el ámbar ya está en los pasos; aquí sin franja de color) */
.fc-res-linea.falta { color: var(--tinta); }
.fc-res-linea.falta > .ic { color: var(--aviso); }
.fc-res-linea.nota > .ic { color: var(--tinta-3); }
.fc-res-linea.listo { color: var(--tinta); font-weight: 500; }
.fc-res-linea.listo > .ic { color: var(--ok); }
.fc-res-enlace {
  display: inline; padding: 0; border: 0; background: none; cursor: pointer; font: inherit; font-weight: 600; color: var(--acento-texto);
  text-decoration: underline; text-decoration-color: color-mix(in srgb, var(--acento) 40%, transparent); text-underline-offset: 3px;
}
:where(html:not(.puntero-quieto)) .fc-res-enlace:hover { text-decoration-color: currentColor; }
.fc-res-grupos { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.2fr); gap: 20px 32px; padding-top: 20px; border-top: 1px solid var(--linea); } /* el correo cabe entero en «Familia y cobro» */
.fc-res-grupo { display: grid; gap: 12px; align-content: start; min-width: 0; }
.fc-res-grupo h4 { font: 600 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); }
.fc-res-datos { display: grid; gap: 10px; margin: 0; }
.fc-res-datos > div { display: grid; grid-template-columns: 80px minmax(0, 1fr); align-items: baseline; gap: 10px; min-width: 0; }
.fc-res-datos dt { font: 500 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-2); }
.fc-res-datos dd { margin: 0; font: 500 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta); overflow-wrap: break-word; }
/* ficha cerrada (Pausa, Desistió): qué pasó y desde cuándo, arriba, con la acción para reactivarla */
.fc-cerrada { display: grid; gap: 14px; padding: 16px 18px; border: 1px solid var(--linea); border-radius: var(--r-l); background: var(--sup-2); }
.fc-cerrada-cab { display: flex; align-items: center; gap: 14px; }
.fc-cerrada-ic { width: 40px; height: 40px; flex: none; display: grid; place-items: center; border-radius: 50%; color: var(--tinta-2); background: var(--sup-3); }
.fc-cerrada-ic .ic { width: 20px; height: 20px; }
.fc-cerrada-txt { flex: 1; min-width: 0; display: grid; gap: 2px; }
.fc-cerrada-txt h3 { font: 600 var(--t-xl)/var(--lh-xl) var(--f-ui); }
.fc-cerrada-txt p { margin: 0; font: 400 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta-2); }
.fc-cerrada .boton { flex: none; }
.fc-cerrada-datos { padding-top: 12px; border-top: 1px solid var(--linea); grid-template-columns: repeat(2, minmax(0, 1fr)); }

/* notas: a la vista, del alto de lo escrito (no dos cajas vacías a toda altura) */
.fc-notas { min-height: 0; display: flex; flex-direction: column; gap: 12px; padding: 20px 20px 16px; overflow-y: auto; border-left: 1px solid var(--linea); }
.fc-notas > .fc-t-titulo { font-size: var(--t-l); line-height: var(--lh-l); }
.fc-nota-campo { flex: none; display: flex; flex-direction: column; gap: 6px; }
.fc-nota-campo .fc-largo { min-height: 72px; max-height: 280px; resize: vertical; field-sizing: content; }
.fc-nota-campo.principal .fc-largo { min-height: 112px; }
/* ficha cerrada: las notas como texto */
.fc-nota-lectura { display: grid; gap: 4px; }
.fc-nota-lectura p { margin: 0; font: 400 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta); white-space: pre-wrap; overflow-wrap: anywhere; }
.fc-notas > .fc-vacio { padding-top: 12px; }

/* pie: cuántos cambios sin guardar (con el punto azul), Descartar y Guardar · un error de guardado, en rojo, aquí */
.fc-pie { grid-area: pie; display: flex; align-items: center; gap: 10px; min-height: 61px; padding: 12px 20px 12px 24px; border-top: 1px solid var(--linea); background: var(--sup); }
.fc-pie[hidden] { display: none; } /* ficha cerrada: solo lectura, sin pie */
.fc-contador { display: inline-flex; align-items: center; gap: 8px; font: 600 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta-2); }
.fc-contador:empty { display: none; }
.fc-pie.con-cambios .fc-contador::before { content: ''; width: 7px; height: 7px; border-radius: 50%; background: var(--acento); }
.fc-pie.con-error .fc-contador { color: var(--peligro-texto); }
.fc-pie.con-error .fc-contador::before { background: var(--peligro); }
.fc-pie .boton { height: 36px; padding: 0 14px; font-size: var(--t-m); }

/* ventana mediana (1100 × 720): columnas más angostas */
@media (max-width: 1240px) {
  .ficha-velo { padding: 12px; }
  .ficha-velo { padding-top: 16px; }
  .ficha-adm { --ancho-paso: 600px; grid-template-columns: minmax(0, 290px) minmax(0, 1fr); }
  .fc-fecha { grid-template-columns: 64px minmax(0, 1fr) 84px; }
  .fc-cuerpo { grid-template-columns: 216px minmax(0, 1fr) 208px; }
  .ficha-adm .fc-cab { padding: 14px 12px 12px 20px; }
  .fc-barra { padding: 14px 56px 12px 4px; }
  .fc-etapas { padding: 0 16px; height: 42px; }
  .fc-etapa { padding: 0 8px; }
  .fc-editor { padding: 16px 20px 12px; }
  .fc-ed-cab { padding-bottom: 14px; }
  .fc-pasos { padding: 12px 10px; }
  .fc-paso { padding: 8px 8px 8px 10px; }
  .fc-notas { padding: 16px 14px 12px; }
  .fc-campos { gap: 14px 16px; }
  .fc-inst-caja select.fc-inst { width: 116px; }
  .fc-res-grupos { grid-template-columns: minmax(0, 1fr); }
  .fc-cliente-opciones { grid-template-columns: minmax(0, 1fr); }
  .fc-recordatorio { margin: 12px 20px 0; }
  .vista-admisiones .adm-buscador { width: 216px; }
}
@media (max-height: 760px) {
  .fc-campos.c-contacto { gap: 16px; }
  .ficha-adm .fc-cab { padding-top: 12px; padding-bottom: 10px; }
  .fc-barra { padding-top: 12px; padding-bottom: 10px; }
  .fc-nota-campo.principal .fc-largo { min-height: 88px; }
}

/* ═════ Disponibilidades en grande (admin-dispo.js · Pendientes) · misma rejilla que la ficha ═════ */
.velo-dispo { z-index: 86; }
.dispo-grande {
  width: min(720px, calc(100vw - 48px)); max-height: calc(100vh - 48px); display: grid; grid-template-rows: auto minmax(0, 1fr) auto; gap: 16px;
  padding: 20px 24px; border: 1px solid var(--linea); border-radius: var(--r-xl); background: var(--sup); box-shadow: var(--s-3);
  font: 400 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta); animation: subir var(--dur) var(--ease);
}
.dgr-cab { display: flex; align-items: center; gap: 12px; }
.dgr-ic { width: 36px; height: 36px; flex: none; display: grid; place-items: center; border-radius: var(--r-m); color: var(--tinta-2); background: var(--sup-3); }
.dgr-ic .ic { width: 18px; height: 18px; }
.dgr-titulo { flex: 1; min-width: 0; }
.dgr-titulo h2 { font: 600 var(--t-2xl)/var(--lh-2xl) var(--f-ui); }
.dgr-titulo p { display: flex; align-items: center; gap: 6px; margin-top: 2px; font: 400 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); }
.dgr-cuerpo { display: grid; grid-template-columns: minmax(0, 1fr); grid-template-rows: auto minmax(0, 1fr) auto auto; min-width: 0; min-height: 0; gap: 0; }
.dgr-scroll { min-height: 0; overflow-y: auto; border: 1px solid var(--linea); border-top: 0; border-radius: 0 0 var(--r-l) var(--r-l); }
.dg-cab-dias, .dg-rejilla, .dg-no-fila { display: grid; grid-template-columns: 56px repeat(var(--dias, 3), minmax(0, 1fr)); }
.dg-cab-dias { border: 1px solid var(--linea); border-radius: var(--r-l) var(--r-l) 0 0; background: var(--sup-2); }
.dg-dia { display: flex; align-items: center; justify-content: center; gap: 6px; height: 34px; border-left: 1px solid var(--linea); font: 600 var(--t-m)/1 var(--f-ui); }
.dg-dia.cambiado::after { content: ''; width: 6px; height: 6px; border-radius: 50%; background: var(--acento); } /* sin guardar = azul */
.dg-rejilla { user-select: none; -webkit-user-select: none; touch-action: none; }
.dg-hora { height: 20px; padding-right: 8px; text-align: right; font: 500 var(--t-xs)/20px var(--f-ui); color: var(--tinta-3); font-variant-numeric: tabular-nums; }
.dg-celda { display: block; height: 20px; padding: 0; border: 0; border-left: 1px solid var(--linea); border-top: 1px solid var(--sup-3); border-radius: 0; background: var(--sup); cursor: pointer; transition: background-color .12s var(--ease); }
.dg-celda.en-hora { border-top-color: var(--linea); }
:where(html:not(.puntero-quieto)) .dg-celda:not(.rayada):hover { background: var(--acento-suave); }
.dg-celda[aria-pressed="true"] { background: var(--acento); border-top-color: var(--acento); }
.dg-celda.previa[aria-pressed="true"] { background: color-mix(in srgb, var(--acento) 60%, var(--sup)); }
.dg-celda.previa[aria-pressed="false"] { background: var(--sup-3); }
.dg-celda.rayada { cursor: not-allowed; background: repeating-linear-gradient(135deg, var(--sup-3) 0 2px, var(--sup) 2px 6px); }
.dg-no-fila { padding-top: 6px; }
.dg-no { justify-self: center; height: 26px; padding: 0 10px; border: 0; border-radius: var(--r-pildora); background: transparent; cursor: pointer; font: 500 var(--t-s)/1 var(--f-ui); color: var(--tinta-3); }
:where(html:not(.puntero-quieto)) .dg-no:hover { background: var(--sup-3); color: var(--tinta); }
.dg-no[aria-pressed="true"] { background: var(--tinta-2); color: #fff; }
.dg-resumen { margin: 8px 0 0; font: 600 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta); }
.dgr-pie { display: flex; align-items: center; gap: 10px; padding-top: 14px; border-top: 1px solid var(--linea); }
.dg-validadas { display: flex; align-items: center; gap: 10px; min-width: 0; padding: 8px 12px; border-radius: var(--r-m); background: var(--sup-2); cursor: pointer; }
.dg-validadas input { width: 18px; height: 18px; }
.dg-validadas > span { display: grid; }
.dg-validadas b { font: 600 var(--t-m)/var(--lh-m) var(--f-ui); }
.dg-validadas.sin-campo { padding: 0; background: none; cursor: default; }

/* ═════ Corregir el cliente (admin-cliente.js · Pendientes) ═════ */
.cx-velo { position: fixed; inset: 0; z-index: 88; display: grid; place-items: center; padding: 24px; background: var(--velo); animation: fundido var(--dur) var(--ease); }
.cx-velo.saliendo { opacity: 0; transition: opacity .2s var(--ease); }
.cx-panel {
  width: min(640px, 100%); max-height: calc(100vh - 48px); overflow-y: auto; padding: 20px 24px; border: 1px solid var(--linea); border-radius: var(--r-xl);
  background: var(--sup); box-shadow: var(--s-3); font: 400 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta); animation: subir var(--dur) var(--ease);
}
.cx-cuerpo { display: grid; gap: 16px; }
.cx-cab { display: flex; align-items: center; gap: 12px; }
.cx-quien { flex: 1; min-width: 0; }
.cx-quien h2 { font: 600 var(--t-2xl)/var(--lh-2xl) var(--f-ui); }
.cx-quien p { display: flex; align-items: center; gap: 12px; margin-top: 2px; font: 400 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); }
.cx-quien p > span { display: inline-flex; align-items: center; gap: 6px; }
.cx-quien .kb-punto { display: none; } /* el estado en palabras (RONDA-3 §2) */
.cx-comparar { display: grid; gap: 8px; padding: 12px 14px; border: 1px solid var(--linea); border-radius: var(--r-l); background: var(--sup-2); }
.cx-par { display: grid; grid-template-columns: 200px minmax(0, 1fr); align-items: baseline; gap: 12px; }
.cx-par small { font: 500 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); }
.cx-par b { font: 600 var(--t-l)/var(--lh-l) var(--f-ui); }
.cx-par b.sin { color: var(--tinta-3); font-weight: 500; }
.cx-dif { padding: 0 2px; border-radius: 3px; color: var(--peligro-texto); background: var(--peligro-fondo); }
.cx-veredicto { display: flex; align-items: center; gap: 6px; margin: 0; font: 600 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--peligro-texto); }
.cx-veredicto .ic { width: 15px; height: 15px; }
.cx-comparar.iguales .cx-veredicto { color: var(--ok-texto); }
.cx-seccion { display: grid; gap: 10px; padding-top: 14px; border-top: 1px solid var(--linea); }
.cx-seccion h3 { display: flex; align-items: center; gap: 8px; font: 600 var(--t-l)/var(--lh-l) var(--f-ui); }
.cx-seccion h3 .ic { width: 17px; height: 17px; color: var(--tinta-3); }
.cx-ayuda { margin: 0; font: 400 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); }
.cx-campos { display: grid; gap: 10px; }
.cx-campos.varios { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.cx-campo { display: grid; gap: 4px; }
.cx-campo small { font: 600 var(--t-xs)/var(--lh-xs) var(--f-ui); color: var(--tinta-3); }
.cx-input { min-width: 0; }
.cx-campo.cambiado .cx-input { border-color: var(--aviso); }
.cx-vista { display: flex; align-items: center; gap: 8px; margin: 0; font-size: var(--t-m); }
.cx-vista small { font: 500 var(--t-xs)/var(--lh-xs) var(--f-ui); color: var(--tinta-3); }
.cx-vista span { font-weight: 600; }
.cx-vista.igual { color: var(--ok-texto); }
.cx-vista .ic { width: 15px; height: 15px; }
.cx-botones { display: flex; align-items: center; gap: 8px; }
.cx-buscador { display: flex; align-items: center; gap: 8px; color: var(--tinta-3); }
.cx-buscador .ic { width: 16px; height: 16px; }
.cx-buscador .cx-input { flex: 1; }
.cx-resultados { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; }
.cx-resultado {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 2px 8px; padding: 8px 10px; border: 1px solid var(--linea);
  border-radius: var(--r-m); background: var(--sup); cursor: pointer; text-align: left; font: inherit; color: var(--tinta);
  transition: border-color var(--dur) var(--ease);
}
:where(html:not(.puntero-quieto)) .cx-resultado:hover:not(:disabled), .cx-resultado:focus-visible { border-color: var(--acento); outline: none; }
.cx-resultado b { font: 600 var(--t-m)/var(--lh-m) var(--f-ui); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cx-resultado small { grid-column: 1; font: 400 var(--t-xs)/var(--lh-xs) var(--f-ui); color: var(--tinta-3); }
.cx-resultado .cx-etiqueta {
  grid-column: 2; grid-row: 1 / span 2; display: inline-flex; align-items: center; gap: 4px; height: 22px; padding: 0 8px; border-radius: var(--r-pildora);
  font: 600 var(--t-xs)/1 var(--f-ui); color: var(--ok-texto); background: var(--ok-fondo);
}
.cx-resultado .cx-etiqueta .ic { width: 12px; height: 12px; }
.cx-resultado.actual { opacity: .6; cursor: default; }

/* ═════ iPhone (≤ 760 px): lo básico para que nada se salga; el detalle fino es de movil.css ═════ */
@media (max-width: 760px) {
  .vista-admisiones .vista-cab { flex-wrap: wrap; row-gap: 8px; }
  .vista-admisiones .adm-buscador { width: 100%; }
  .kanban { scroll-snap-type: x mandatory; }
  .kb-col { flex: 0 0 82%; min-width: 0; scroll-snap-align: start; }
  .ficha-velo { padding: 0; }
  .ficha-adm {
    width: 100%; height: 100%; border-radius: 0; border: 0;
    grid-template-columns: minmax(0, 1fr); grid-template-rows: auto auto auto minmax(0, 1fr) auto; grid-template-areas: "cab" "barra" "etapas" "cuerpo" "pie";
  }
  .ficha-adm .fc-cab { padding: 14px 52px 8px 16px; }
  .fc-barra { padding: 0 16px 10px; }
  .fc-barra-fila { flex-wrap: wrap; width: 100%; }
  .fc-barra-fila > .espacio { display: none; }
  .fc-sel { flex: 1 1 auto; }
  .fc-inst-caja select.fc-inst { width: auto; flex: 1; }
  .boton.fc-pasar { flex: 1 1 100%; }
  .ficha-adm .fc-cab { max-width: none; }
  .fc-etapas { padding: 0 12px; }
  .fc-etapa { padding: 0 8px; }
  .fc-etapa:not(.en-vista) .fc-etapa-nombre { display: none; }
  .fc-cuerpo { display: flex; flex-direction: column; overflow-y: auto; }
  .fc-pasos { flex: none; flex-direction: row; flex-wrap: wrap; padding: 10px; border-right: 0; border-bottom: 1px solid var(--linea); overflow: visible; }
  .fc-paso { width: auto; padding: 6px 12px 6px 6px; align-items: center; }
  .fc-paso-res { display: none; }
  .fc-recordatorio { margin: 12px 16px 0; }
  .fc-principal { flex: none; }
  .fc-editor { flex: none; min-height: 420px; padding: 16px; }
  .fc-ed-cuerpo { overflow: visible; }
  .fc-campos.c2, .fc-campos.fc-descuentos, .fc-campos.fc-correo, .fc-cliente-opciones, .fc-res-grupos { grid-template-columns: minmax(0, 1fr); }
  .ficha-adm.paso-horario .fc-paso { width: auto; padding: 6px 12px 6px 6px; }
  .ficha-adm.paso-horario .fc-paso-txt { display: grid; }
  .fc-notas { flex: none; min-height: 240px; border-left: 0; border-top: 1px solid var(--linea); }
  .ficha-adm.paso-horario .fc-cuerpo { display: flex; }
  .fc-pie { padding: 10px 16px; }
}

/* ═══════════════════════════════════════════════════════════════════════════════════════════════════════════
   15 oct B · zona C · Administración › Alumnos (admin-alumnos.js), común y Clásica. Solo lectura.
   Cabecera del marco (título, la cifra en gris, «Filtros» y la búsqueda); el panel de filtros plegado debajo; la línea
   de resumen con «Restablecer filtros» si los filtros no son los de siempre; las fichas en rejilla (auto-fill, 280 px).
   Ficha con algo pendiente: borde y tinte rojos suaves, con cada cosa en su casilla (.cf-casilla de profesor.css, tono
   «vencida»). Todo con tokens: vale en las dos apariencias; selah-admisiones.css pone el vidrio.
   ═══════════════════════════════════════════════════════════════════════════════════════════════════════════ */
.vista-alumnos { gap: 14px; }
.vista-alumnos .vista-cab-titulo .sub { font: 400 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta-3); font-variant-numeric: tabular-nums; }
.vista-alumnos .vista-cab-acciones { gap: 10px; }
.vista-alumnos .adm-buscador { width: 264px; flex: none; }
.alu-boton-filtros { gap: 8px; }
.alu-boton-filtros .ic { width: 16px; height: 16px; color: var(--tinta-3); }
.alu-boton-filtros.abierto { background: var(--acento-suave); border-color: var(--acento); color: var(--acento-texto); }
.alu-boton-filtros.abierto .ic { color: currentColor; }
.alu-filtros-n {
  min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px; font: 600 12px/18px var(--f-ui); text-align: center;
  color: #fff; background: var(--acento); font-variant-numeric: tabular-nums;
}
.alu-filtros-n[hidden] { display: none; }

/* panel de filtros: un grupo por fila (nombre a la izquierda, píldoras a la derecha) */
.alu-filtros {
  flex: none; display: grid; gap: 10px; padding: 14px 16px; border: 1px solid var(--linea); border-radius: var(--r-l);
  background: var(--sup); box-shadow: var(--s-1);
}
.alu-filtros[hidden] { display: none; }
.alu-filtro { display: grid; grid-template-columns: 104px minmax(0, 1fr); align-items: start; gap: 12px; }
.alu-filtro-titulo { padding-top: 7px; font: 600 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); }
.alu-chips { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; min-width: 0; }
.alu-chip {
  display: inline-flex; align-items: center; height: 32px; padding: 0 12px; border: 1px solid var(--linea-2); border-radius: var(--r-pildora);
  background: var(--sup); cursor: pointer; font: 500 var(--t-m)/1 var(--f-ui); color: var(--tinta-2); white-space: nowrap;
  transition: background-color var(--dur) var(--ease), border-color var(--dur) var(--ease), color var(--dur) var(--ease);
}
:where(html:not(.puntero-quieto)) .alu-chip:hover:not(.activa, :disabled) { border-color: #B7BEC9; color: var(--tinta); }
.alu-chip:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--acento-anillo); }
.alu-chip.activa { background: var(--acento-suave); border-color: var(--acento); color: var(--acento-texto); font-weight: 600; }
.alu-chip:disabled { cursor: default; opacity: .5; }
.alu-separador { flex: none; width: 1px; height: 20px; margin: 0 4px; background: var(--linea-2); }

/* resumen de los filtros cambiados */
.alu-resumen { flex: none; display: flex; align-items: center; flex-wrap: wrap; gap: 6px 12px; min-width: 0; }
.alu-resumen[hidden] { display: none; }
.alu-resumen-texto { display: flex; flex-wrap: wrap; gap: 4px 16px; min-width: 0; margin: 0; font: 400 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta-2); }
.alu-resumen-parte b { font-weight: 600; color: var(--tinta-3); }

/* fichas */
.alu-cuerpo { flex: 1; min-height: 0; overflow-y: auto; margin: 0 -6px; padding: 2px 6px 24px; overscroll-behavior: contain; }
.alu-rejilla { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 12px; }
.alu-tarjeta {
  position: relative; display: grid; grid-template-columns: 48px minmax(0, 1fr); align-content: start; column-gap: 12px; row-gap: 10px;
  min-width: 0; padding: 14px; background: var(--sup); border: 1px solid var(--linea); border-radius: var(--r-l); box-shadow: var(--s-1);
  cursor: pointer; transition: box-shadow var(--dur) var(--ease), border-color var(--dur) var(--ease), background-color var(--dur) var(--ease);
}
:where(html:not(.puntero-quieto)) .alu-tarjeta:hover { box-shadow: var(--s-2); border-color: var(--linea-2); }
.alu-tarjeta:focus-visible { outline: none; border-color: var(--acento); box-shadow: 0 0 0 3px var(--acento-anillo); }
.alu-texto { display: grid; gap: 1px; min-width: 0; }
.alu-nombre { min-width: 0; font: 600 var(--t-l)/var(--lh-l) var(--f-ui); color: var(--tinta); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.alu-estado { font: 400 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-3); }
.alu-grupo { min-width: 0; margin-top: 4px; font: 500 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.alu-mas { display: flex; align-items: baseline; min-width: 0; font: 400 var(--t-s)/var(--lh-s) var(--f-ui); color: var(--tinta-2); white-space: nowrap; }
.alu-edad { flex: none; }
.alu-edad + .alu-acu::before { content: '·'; margin: 0 6px; color: var(--tinta-4); }
.alu-acu { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.alu-acu small { font: inherit; color: var(--tinta-3); }
.alu-faltas { grid-column: 1 / -1; display: flex; }
/* con algo pendiente: la ficha entera en rojo suave */
.alu-tarjeta.con-pendientes { border-color: color-mix(in srgb, var(--peligro) 50%, transparent); background: color-mix(in srgb, var(--peligro-fondo) 55%, var(--sup)); }
:where(html:not(.puntero-quieto)) .alu-tarjeta.con-pendientes:hover { border-color: var(--peligro); }
.alu-tarjeta.con-pendientes .alu-nombre { color: var(--peligro-texto); }
.alu-vacio { padding-top: 48px; }

@media (max-width: 1100px) { .vista-alumnos .adm-buscador { width: 220px; } }
/* iPhone (≤ 760 px): una columna; la cabecera en dos líneas; todo lo que se toca a 44 px; se desplaza .contenido */
@media (max-width: 760px) {
  .vista-alumnos .vista-cab { flex-wrap: wrap; row-gap: 10px; height: auto; }
  .vista-alumnos .vista-cab-acciones { flex: 1 1 100%; min-width: 0; margin-left: 0; gap: 8px; }
  .vista-alumnos .adm-buscador { flex: 1 1 auto; width: auto; min-width: 0; min-height: 44px; }
  .vista-alumnos .adm-buscar { min-width: 0; width: 100%; min-height: 44px; }
  /* «Filtros» queda en el ícono (el nombre sigue para el lector de pantalla): la búsqueda cabe entera con su ejemplo */
  .alu-boton-filtros { position: relative; width: 44px; height: 44px; padding: 0; }
  .alu-boton-filtros .ic { width: 20px; height: 20px; }
  .alu-boton-texto { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .alu-filtros-n { position: absolute; top: -6px; right: -6px; }
  .alu-filtros { padding: 12px; }
  .alu-filtro { grid-template-columns: minmax(0, 1fr); gap: 6px; }
  .alu-filtro-titulo { padding-top: 0; }
  .alu-chip { height: 44px; padding: 0 14px; }
  .alu-separador { display: none; }
  .alu-restablecer { height: 44px; }
  .alu-cuerpo { flex: none; overflow: visible; margin: 0; padding: 0 0 8px; }
  .alu-rejilla { grid-template-columns: minmax(0, 1fr); gap: 10px; }
}

/* ═════ 17 oct noche · ficha de Admisiones: la franja de contacto arriba (fija) y «Ver toda la información» ═════
   La franja ocupa todo el ancho: foto, nombre, acudiente, teléfono con su WhatsApp, correo y el botón que despliega, debajo
   y en su sitio, todo lo que la ficha sabe del alumno (solo lectura). Estado, Instrumento y «Pasar a …» pasan a la fila de
   abajo. Siempre a la vista: la franja queda fuera de lo que se desliza (las etapas y los pasos se desplazan debajo de ella).
   La vista de administración de Alumnos (.ficha-perfil) tiene su propia cabecera (admin-perfil.css). */
.ficha-adm:not(.ficha-perfil) {
  grid-template-rows: auto auto auto auto minmax(0, 1fr) auto;
  grid-template-areas: "cab cab" "info info" "barra barra" "etapas etapas" "cuerpo cuerpo" "pie pie";
}
.ficha-adm:not(.ficha-perfil) .fc-cab.fc-contacto {
  gap: 16px; min-height: 100px; padding: 20px 64px 18px 24px;
  border-bottom: 1px solid var(--linea); background: var(--sup);
}
.ficha-adm:not(.ficha-perfil) .fc-cab.fc-contacto .fc-quien { gap: 6px; }
.fc-datos { gap: 6px 18px; font-size: var(--t-l); line-height: var(--lh-l); color: var(--tinta-2); }
.fc-datos > .fc-dato { display: inline-flex; align-items: center; gap: 7px; min-width: 0; max-width: 100%; overflow-wrap: anywhere; }
.fc-datos > .fc-dato > .ic { flex: none; width: 16px; height: 16px; color: var(--tinta-3); }
.fc-datos > .fc-dato.vacio { color: var(--tinta-4); }
.fc-datos > .fc-dato .boton.whatsapp { flex: none; margin-left: 2px; }
.fc-info-boton { flex: none; align-self: center; gap: 6px; }
.fc-info-boton .fc-info-flecha { width: 14px; height: 14px; transition: transform var(--dur) var(--ease); }
.fc-info-boton.abierta .fc-info-flecha { transform: rotate(180deg); }
.ficha-adm:not(.ficha-perfil) .fc-barra { padding: 12px 24px; }
.fc-info {
  grid-area: info; min-height: 0; max-height: min(46vh, 420px); overflow-y: auto; overscroll-behavior: contain;
  padding: 16px 24px 18px; border-bottom: 1px solid var(--linea); background: var(--sup-2);
}
.fc-info[hidden] { display: none; }
.fc-info-grupos { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px 24px; align-items: start; }
.fc-info-grupo { min-width: 0; }
.fc-info-grupo h4 { margin: 0 0 6px; font: 600 var(--t-m)/var(--lh-m) var(--f-ui); color: var(--tinta-2); }
.fc-info-datos { display: grid; gap: 3px; margin: 0; }
.fc-info-datos > div { display: grid; grid-template-columns: minmax(0, 42%) minmax(0, 1fr); gap: 10px; font: 400 var(--t-s)/var(--lh-s) var(--f-ui); }
.fc-info-datos dt { color: var(--tinta-3); overflow-wrap: anywhere; }
.fc-info-datos dd { margin: 0; color: var(--tinta); overflow-wrap: anywhere; white-space: pre-line; }
.fc-info-datos > .vacio dd { color: var(--tinta-4); }
@media (max-width: 1240px) {
  .ficha-adm:not(.ficha-perfil) .fc-cab.fc-contacto { padding: 16px 60px 14px 20px; min-height: 92px; }
  .ficha-adm:not(.ficha-perfil) .fc-barra { padding: 10px 20px; }
}
@media (max-height: 760px) {
  .ficha-adm:not(.ficha-perfil) .fc-cab.fc-contacto { padding-top: 14px; padding-bottom: 12px; min-height: 88px; }
  .ficha-adm:not(.ficha-perfil) .fc-barra { padding-top: 8px; padding-bottom: 8px; }
}
@media (max-width: 760px) {
  .ficha-adm:not(.ficha-perfil) {
    grid-template-columns: minmax(0, 1fr); grid-template-rows: auto auto auto auto minmax(0, 1fr) auto;
    grid-template-areas: "cab" "info" "barra" "etapas" "cuerpo" "pie";
  }
  /* abierta en el teléfono: toda la información ocupa el lugar de las etapas y los pasos (la franja sigue arriba) */
  .ficha-adm.info-abierta:not(.ficha-perfil) { grid-template-rows: auto minmax(0, 1fr) auto auto auto auto; }
  .ficha-adm.info-abierta:not(.ficha-perfil) > :is(.fc-etapas, .fc-cuerpo) { display: none; }
  .ficha-adm.info-abierta .fc-info { max-height: none; }
  .fc-info-grupos { grid-template-columns: minmax(0, 1fr); }
}
