*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
/* Revisión de rostros: una pregunta y dos fotos, sin franjas de estado. */
.rr-page { max-width: 980px; margin: 0 auto; color: #0B2947; }
.rr-back { display: inline-flex; align-items: center; min-height: 44px; color: inherit; text-decoration: none; }
.rr-progress { display: flex; justify-content: space-between; gap: 12px; margin: 12px 0; font-size: 14px; }
.rr-card { padding: 28px; border: 1px solid #D1D5DB; border-radius: 24px; background: #fff; }
.rr-person { display: flex; justify-content: space-between; align-items: center; gap: 16px; margin-bottom: 24px; }
.rr-person h2 { font-size: 26px; line-height: 1.25; margin: 6px 0; overflow-wrap: anywhere; }
.rr-eyebrow { font-size: 15px; font-weight: 600; }
.rr-similarity { display: inline-flex; flex-shrink: 0; padding: 8px 12px; border-radius: 24px; background: #FEF3A0; color: #854D0E; font-size: 14px; font-weight: 600; }
.rr-photos { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.rr-photos figure { min-width: 0; }
.rr-photos figcaption { font-size: 15px; font-weight: 600; margin-bottom: 10px; }
.rr-photo { display: grid; place-items: center; aspect-ratio: 4/3; background: #ECEDE7; border-radius: 16px; overflow: hidden; }
.rr-photo img { width: 100%; height: 100%; object-fit: contain; }
.rr-photo p { padding: 18px; font-size: 14px; text-align: center; }
.rr-photos figure > p { font-size: 13px; line-height: 1.5; margin-top: 10px; overflow-wrap: anywhere; }
.rr-help { display: flex; gap: 12px; align-items: flex-start; background: #E0F2F1; color: #0B2947; padding: 16px; margin-top: 24px; border-radius: 12px; font-size: 14px; line-height: 1.5; }
.rr-help svg { flex: 0 0 20px; width: 20px; height: 20px; }
.rr-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 24px; }
.rr-actions button { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 48px; border-radius: 12px; padding: 12px 16px; font: inherit; font-weight: 600; cursor: pointer; }
.rr-actions svg { width: 20px; height: 20px; }
.rr-yes { color: #fff; background: #0F9375; border: 1px solid #0F9375; }
.rr-no { color: #0B2947; background: #fff; border: 1px solid #0B2947; }
.rr-skip { grid-column: 1/-1; color: inherit; background: transparent; border: 1px solid transparent; text-decoration: underline; text-underline-offset: 3px; }
.rr-actions button:disabled { opacity: .5; cursor: wait; }
.rr-actions button:focus-visible, .rr-back:focus-visible { outline: 3px solid #0F9375; outline-offset: 3px; }
.rr-working { margin-top: 12px; text-align: center; }
.rr-done { text-align: center; padding: 50px 20px; background: #ECEDE7; border-radius: 24px; }
.rr-done > svg { width: 42px; height: 42px; color: #0F9375; }
.rr-done h2, .rr-done p { margin-bottom: 16px; }
body.qiwo-dark .rr-page { color: #ECEDE7; }
body.qiwo-dark .rr-card { background: #0B2947; border-color: #D1D5DB; }
body.qiwo-dark .rr-photo, body.qiwo-dark .rr-done { background: rgb(209 213 219 / 12%); }
body.qiwo-dark .rr-no { background: transparent; color: #ECEDE7; border-color: #D1D5DB; }
@media (max-width: 768px) { .rr-card { padding: 20px; } .rr-person h2 { font-size: 23px; } }
@media (max-width: 480px) {
    .rr-card { padding: 16px; border-radius: 18px; }
    .rr-person { align-items: flex-start; flex-direction: column; gap: 12px; }
    .rr-progress { flex-direction: column; gap: 4px; }
    .rr-photos { gap: 10px; }
    .rr-photo { aspect-ratio: 3/4; border-radius: 10px; }
    .rr-photo p { padding: 8px; font-size: 12px; }
    .rr-photos figcaption { font-size: 13px; }
    .rr-actions { grid-template-columns: 1fr; }
    .rr-actions button { width: 100%; }
}
body {
    font-family: "Segoe UI", system-ui, sans-serif;
    background: #FFFFFF;
}

/* ── SIN SELECCIÓN DE TEXTO ACCIDENTAL (agregado 02/09/2026) ──────────
   Uso táctil intensivo (kiosco, portal Auxiliar) con toques rápidos y
   repetidos: sin esto, un toque un poco prolongado sobre texto plano
   selecciona la palabra y dispara el menú contextual nativo de Android
   (Copiar/Compartir) + el banner de "buscar en Google" -- ambos tapan
   los botones reales debajo. Reportado en vivo el primer día de
   producción de Secundaria. input/textarea/contenteditable quedan
   explícitamente seleccionables -- ahí sí hace falta poder marcar y
   copiar texto. */
body {
    -webkit-user-select: none;
    user-select: none;
    -webkit-touch-callout: none;
}

/* ── SIN ZOOM POR GESTO (agregado 06/09/2026) ─────────────────────────
   Mismo origen que la regla de arriba: uso táctil intensivo por gente que
   no eligió esta app. En las tablets del kiosco y en los celulares de las
   auxiliares alguien hacía pellizco sin querer, la pantalla quedaba
   agrandada y no sabían cómo devolverla — el kiosco y el portal Auxiliar
   se quedaban deformados el resto del día.

   `pan-x pan-y` es lo que hay que escribir, no `manipulation`: manipulation
   quita el zoom por doble toque pero DEJA el pellizco, que es justo el que
   causa el problema. Esta combinación deja pasar el scroll normal y corta
   los dos gestos de zoom.

   Va acá y no solo en el meta viewport porque Chrome ignora
   user-scalable=no en una pestaña normal; touch-action lo respeta siempre.

   Decisión consciente sobre accesibilidad: en una web pública bloquear el
   zoom es un error, pero esto es una app operativa de pantalla fija donde
   el zoom no amplía, deforma. Quien necesite agrandar tiene el zoom del
   sistema Android, que sí escala todo de forma coherente. */
html, body {
    touch-action: pan-x pan-y;
}

/* ── SIN "PULL-TO-REFRESH" DE ANDROID (agregado 08/09/2026) ───────────
   Misma familia que las dos reglas de arriba: gestos del navegador que se
   cuelan en una app operativa y la delatan como web.

   Chrome de Android muestra su rueda de recarga en cuanto un arrastre hacia
   abajo llega a la raíz del documento. Reportado en producción por las
   auxiliares: al cerrar un sheet deslizándolo hacia abajo -- el gesto natural
   de cualquier app -- aparece la rueda y, si sueltan, se recarga la pantalla
   entera y pierden el contexto donde estaban.

   Pasaba en toda superficie que no fuera el área de contenido: el sheet, la
   topbar y el sidebar. El shell admin es `height:100dvh; overflow:hidden`, o
   sea la raíz jamás scrollea y siempre está en el tope -- cualquier gesto que
   llegue a ella cumple la condición del pull-to-refresh.

   `contain` y no `none`: corta el encadenamiento hacia el viewport (que es lo
   que dispara la recarga) pero conserva el destello de "llegaste al final" de
   las listas internas, que sí es feedback útil. Las listas largas siguen
   scrolleando exactamente igual. */
html, body {
    overscroll-behavior-y: contain;
}
input, textarea, [contenteditable="true"] {
    -webkit-user-select: text;
    user-select: text;
    -webkit-touch-callout: default;
}
/* Los navegadores le ponen letra monoespaciada al textarea; sin esta línea cada
   campo de motivo o comunicado se veía "de máquina de escribir" (12/10/2026). */
textarea { font-family: inherit; }

/* ── PERO EN ESCRITORIO SÍ SE SELECCIONA (agregado 08/09/2026) ─────────
   La regla de arriba nació de un problema exclusivamente táctil: el toque
   prolongado que abre el menú de Android. Con mouse ese menú no existe, y
   bloquear la selección le quita a quien administra algo que usa todo el
   día -- marcar un nombre de la tabla para pegarlo en el buscador.

   `hover: hover` + `pointer: fine` es la forma correcta de preguntar "¿hay
   un mouse de verdad?", no el ancho de pantalla: una tablet en horizontal
   puede ser más ancha que una laptop y seguir siendo táctil. Las tablets
   del kiosco y los celulares de las auxiliares reportan `pointer: coarse`
   y conservan la protección intacta. */
@media (hover: hover) and (pointer: fine) {
    body {
        -webkit-user-select: text;
        user-select: text;
        -webkit-touch-callout: default;
    }
}

/* ── SCROLLBARS PERSONALIZADOS ────────────────────── */
::-webkit-scrollbar {
    width: 6px;
    height: 6px;
}
::-webkit-scrollbar-track {
    background: transparent;
}
::-webkit-scrollbar-thumb {
    background: rgba(11, 41, 71, 0.15);
    border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
    background: rgba(11, 41, 71, 0.3);
}

/* ── LOGIN LAYOUT ─────────────────────────────────── */
.login-wrapper {
    display: flex;
    width: 100vw;
    height: 100vh;
    height: 100dvh;   /* mismo motivo que .admin-shell -- ver nota ahí */
    overflow: hidden;
    margin: 0;
    padding: 0;
    background: #FFFFFF;
}

.login-form-panel {
    background: #FFFFFF;
    display: flex;
    flex-direction: column;
    align-items: center;
    /* "safe center" y no "center" a secas (22/08/2026, bug reportado por Jordy
       en escritorio). Con justify-content:center, un contenido más alto que el
       panel desborda por LOS DOS lados, y la parte de arriba queda fuera del
       área scrolleable: inalcanzable, no hay forma de subir. Medido en vivo en
       el paso 2 del registro a 1440x900 -- contenido de 1311px en un panel de
       900px dejaba el chip del alumno en top:-177px con el scroll en 0.
       "safe" centra mientras el contenido quepa y deja de centrar cuando
       desbordaría, que es justo para lo que existe. La línea "center" queda
       antes como respaldo: un navegador que no entienda "safe" descarta esa
       declaración y se queda con la anterior. */
    justify-content: center;
    justify-content: safe center;
    width: 40%;
    height: 100vh;
    height: 100dvh;
    overflow-y: auto;
    padding: 40px;
    position: relative;
}

.login-form-panel > * {
    flex-shrink: 0;
}

.login-info-panel {
    background: #0B2947;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    width: 60%;
    height: 100%;
    padding: 64px 80px;
}

/* ── HEADER / LOGO ────────────────────────────────── */
.login-header {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
    margin-bottom: 28px;
}

/* Gafete de credencial del portal de Profesor (reboot 06/09/2026, pedido
   directo de Jordy: el login se veía idéntico al de Apoderado).
   Historial de intentos descartados en esta misma sesión -- se anota porque
   explica por qué se llegó a "cambiar la forma, no el color":
   1) Banda superior gris #D1D5DB -- Jordy: "muy muerto el color".
   2) Fondo navy de pared a pared -- Jordy: "se parece al administrativo"
      (LoginAdmin.razor YA es navy #0B2947 de pared a pared + tarjeta blanca,
      y su variante Auxiliar ya es lo mismo en verde #0F9375 -- los dos únicos
      colores "fuertes" de la paleta ya están tomados como fondo de otro
      portal). Sin un color nuevo disponible, la diferenciación tenía que
      venir de la FORMA: el logo pasa de un ícono redondo/cuadrado a una
      silueta de credencial (gafete), fondo del panel intacto en blanco --
      cero choque de color con ningún otro portal. */
.login-badge-profesor {
    display: flex;
    flex-direction: column;
    align-items: center;
    margin-bottom: 20px;
}
.login-badge-profesor-titulo {
    color: #0B2947;
    font-size: 12.5px;
    font-weight: 700;
    letter-spacing: .14em;
    text-align: center;
    margin: 6px 0 0;
}

body.qiwo-dark .login-badge-profesor-titulo { color: #E7EDF5; }

/* ── REBOOT TOTAL DEL FORMULARIO DE PROFESOR (06/09/2026) ────────────────
   El gafete por sí solo no alcanzaba -- Jordy: "quiero un lavado de cara
   total, cambio total total total". El gafete cambiaba el logo; el resto de
   la pantalla (inputs, botón, tarjetas) seguía siendo exactamente el mismo
   componente visual que Apoderado, por eso seguía leyéndose como "la misma
   pantalla". Este bloque re-viste TODO lo que va debajo del gafete, scoped a
   .login-form-panel--profesor para no tocar un solo pixel de Apoderado.
   Mismo principio de siempre: cambiar la forma (píldoras, chip circular de
   ícono, textura de puntos) usando solo navy/gris-azulado -- verde y navy de
   pared a pared ya son de Auxiliar/Administrativo. */
.login-form-panel--profesor {
    background-image: radial-gradient(#D1D5DB 1px, transparent 1px);
    background-size: 22px 22px;
    background-position: -6px -6px;
}
body.qiwo-dark .login-form-panel--profesor {
    background-image: radial-gradient(rgba(209,213,219,.14) 1px, transparent 1px);
}

.login-form-panel--profesor .login-label {
    color: #0B2947;
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
}
body.qiwo-dark .login-form-panel--profesor .login-label { color: #C7D2E0; }

.login-form-panel--profesor .login-input-icon {
    left: 7px;
    width: 30px;
    height: 30px;
    border-radius: 50%;
    background: #0B2947;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
}
.login-form-panel--profesor .login-input-icon svg { width: 15px; height: 15px; }
.login-form-panel--profesor .login-input {
    padding: 12px 42px 12px 50px;
    border-radius: 999px;
    border-color: #D1D5DB;
    background: #F8FAFC;
}
.login-form-panel--profesor .login-input:focus {
    border-color: #0B2947;
    box-shadow: 0 0 0 3px rgba(11,41,71,.12);
}
body.qiwo-dark .login-form-panel--profesor .login-input { background: #0F1923; border-color: #26344A; }
body.qiwo-dark .login-form-panel--profesor .login-input:focus {
    border-color: #8FA6C2;
    box-shadow: 0 0 0 3px rgba(143,166,194,.18);
}

.login-form-panel--profesor .login-forgot { color: #0B2947; }
.login-form-panel--profesor .login-forgot:hover { color: #163860; }
body.qiwo-dark .login-form-panel--profesor .login-forgot { color: #C7D2E0; }
body.qiwo-dark .login-form-panel--profesor .login-forgot:hover { color: #E7EDF5; }

.login-form-panel--profesor .login-btn-primary {
    border-radius: 999px;
    letter-spacing: .02em;
}

.login-form-panel--profesor .login-install-card,
.login-form-panel--profesor .login-instalada-card {
    border-radius: 999px;
    border-color: #D1D5DB;
    background: #F8FAFC;
}
.login-form-panel--profesor .login-install-card:hover { border-color: #0B2947; box-shadow: 0 4px 12px rgba(11,41,71,.10); }
.login-form-panel--profesor .login-install-icon { background: #0B2947; }
body.qiwo-dark .login-form-panel--profesor .login-install-card,
body.qiwo-dark .login-form-panel--profesor .login-instalada-card { background: #0F1923; border-color: #26344A; }

.login-form-panel--profesor .login-support-link { border-radius: 999px; }
.login-form-panel--profesor .login-support-link strong { color: #0B2947; }
body.qiwo-dark .login-form-panel--profesor .login-support-link strong { color: #C7D2E0; }

/* El WebAPK abre primero la app y luego comprueba si la cookie aún es válida.
   Mientras tanto, mostrar el formulario producía un parpadeo de login antes del
   dashboard. En el navegador normal no se esconde nada: solo aplica dentro de
   la app instalada. */
.login-resolviendo-inicio { display: none; }

@media (display-mode: standalone), (display-mode: minimal-ui) {
    /* .login-badge-profesor reemplaza a .login-header para el portal de
       Profesor (ver arriba) -- necesita el mismo trato: seguir visible
       mientras se resuelve la sesión dentro del WebAPK. */
    .login-form-panel--resolviendo > :not(.login-header):not(.login-badge-profesor):not(.login-resolviendo-inicio) {
        display: none;
    }

    .login-resolviendo-inicio {
        width: 100%;
        max-width: 360px;
        display: flex;
        flex-direction: column;
        align-items: center;
        gap: 8px;
        color: #526174;
        font-size: 14px;
        text-align: center;
    }

    .login-resolviendo-inicio strong {
        color: #0B2947;
        font-size: 16px;
    }

    .login-resolviendo-spinner {
        width: 28px;
        height: 28px;
        border: 3px solid #D5EEE8;
        border-top-color: #0F9375;
        border-radius: 50%;
        animation: qiwo-login-resolviendo .75s linear infinite;
    }

    @keyframes qiwo-login-resolviendo {
        to { transform: rotate(360deg); }
    }

    body.qiwo-dark .login-resolviendo-inicio { color: #B8C5D6; }
    body.qiwo-dark .login-resolviendo-inicio strong { color: #F1F5F9; }
    body.qiwo-dark .login-resolviendo-spinner {
        border-color: rgba(94, 234, 212, .25);
        border-top-color: #5EEAD4;
    }
}

/* Clases legacy usadas en otras páginas de auth */
.login-logo {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    margin-bottom: 28px;
}

.login-logo-bg {
    width: 72px; height: 72px;
    border-radius: 20px;
    background: #E0F2F1;
    border: 1px solid #A7F3D0;
    display: flex;
    align-items: center;
    justify-content: center;
}

/* Lockup de marca: el SVG es la "Q" y el <span> es "iwo" -- juntos forman la
   palabra, igual que el manual. El gap es de 1px a propósito: con separación
   se leen como dos elementos sueltos en vez de un logotipo. Reemplaza al patrón
   anterior de ícono-en-caja + "Qiwo" debajo, que repetía la Q (21/08/2026). */
.login-brand {
    display: flex;
    align-items: baseline;
    justify-content: center;
    gap: 1px;
    margin-bottom: 4px;
}

.login-brand svg  { align-self: center; }
.login-brand span {
    font-size: 30px;
    font-weight: 800;
    color: #0B2947;
    letter-spacing: -.02em;
    line-height: 1;
}

body.qiwo-dark .login-brand span { color: #E7EDF5; }

.login-product-name {
    font-size: 22px;
    font-weight: 700;
    color: #0B2947;
    letter-spacing: -0.3px;
}

.login-product-sub {
    font-size: 13px;
    color: #94A3B8;
}

.login-welcome {
    font-size: 26px;
    font-weight: 700;
    color: #0B2947;
    margin-bottom: 0;
}

.login-hint {
    font-size: 15px;
    color: #94A3B8;
    margin-bottom: 0;
    text-align: center;
}

/* ── CAMPOS ───────────────────────────────────────── */
.login-fields {
    width: 100%;
    max-width: 360px;
    display: flex;
    flex-direction: column;
    gap: 16px;
    margin-bottom: 14px;
}

.login-field-group {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.login-label {
    font-size: 13px;
    font-weight: 500;
    color: #475569;
}

.login-input-wrap {
    position: relative;
    display: flex;
    align-items: center;
}

.login-input-icon {
    position: absolute;
    left: 14px;
    color: #94A3B8;
    pointer-events: none;
}

.login-input-action {
    position: absolute;
    right: 10px;
    background: transparent;
    border: none;
    color: #94A3B8;
    cursor: pointer;
    padding: 6px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 6px;
    transition: color 0.15s, background 0.15s;
}

.login-input-action:hover {
    color: #64748B;
    background: #F1F5F9;
}

.login-input {
    width: 100%;
    padding: 12px 42px;
    border: 1px solid #E2E8F0;
    border-radius: 10px;
    font-size: 16px;
    color: #0B2947;
    background: #FFFFFF;
    outline: none;
    transition: border-color 0.15s, box-shadow 0.15s;
}

.login-input:focus {
    border-color: #0F9375;
    box-shadow: 0 0 0 3px rgba(15,147,117,0.12);
}

.login-input::placeholder { color: #94A3B8; }

/* ── OPCIONES ─────────────────────────────────────── */
.login-options {
    display: flex;
    justify-content: flex-end;
    align-items: center;
    width: 100%;
    max-width: 360px;
    margin-bottom: 20px;
}

.login-check {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    color: #475569;
    cursor: pointer;
}

.login-check input[type="checkbox"] {
    width: 16px; height: 16px;
    accent-color: #0F9375;
    cursor: pointer;
}

.login-link-green {
    font-size: 13px;
    color: #0F9375;
    text-decoration: none;
    font-weight: 500;
}

.login-link-green:hover { text-decoration: underline; }

/* ── BOTÓN PRINCIPAL ──────────────────────────────── */
.login-btn-primary {
    width: 100%;
    max-width: 360px;
    padding: 14px;
    background: #0B2947;
    color: #FFFFFF;
    border: none;
    border-radius: 10px;
    font-size: 15px;
    font-weight: 600;
    cursor: pointer;
    margin-bottom: 16px;
    transition: background 0.15s, transform 0.05s;
}

.login-btn-primary:hover { background: #163860; }
.login-btn-primary:active { transform: translateY(1px); }
.login-btn-primary:disabled { opacity: 0.7; cursor: not-allowed; }

/* ── AYUDAS DE CAMPO DEL REGISTRO (21/08/2026) ─────────────────────────────
   El "por qué" de cada campo. Teléfono y correo eran "(opcional)" a secas y la
   gente los salteaba: 43 de 209 apoderados quedaron sin correo y no pueden
   recuperar su contraseña nunca, y 12 sin ningún contacto. */
.qiwo-campo-info {
    display: flex;
    align-items: flex-start;
    gap: 6px;
    font-size: 11.5px;
    line-height: 1.4;
    color: #0C447C;
    margin: -1px 0 5px;
}

.qiwo-campo-info svg { flex-shrink: 0; margin-top: 1px; opacity: .85; }

.qiwo-campo-error {
    display: block;
    margin-top: 4px;
    font-size: 11.5px;
    line-height: 1.4;
    color: #B91C1C;
}

/* Se muestra mientras no haya ni teléfono ni correo válidos. */
.qiwo-aviso-contacto {
    width: 100%;
    max-width: 360px;
    display: flex;
    align-items: flex-start;
    gap: 9px;
    background: #FEF3C7;
    border: 1px solid #FCD34D;
    border-radius: 10px;
    padding: 11px 13px;
    margin-bottom: 14px;
    font-size: 12.5px;
    line-height: 1.45;
    color: #92400E;
}

.qiwo-aviso-contacto svg { flex-shrink: 0; margin-top: 1px; }

body.qiwo-dark .qiwo-campo-info     { color: #93C5FD; }
body.qiwo-dark .qiwo-campo-error    { color: #FCA5A5; }
body.qiwo-dark .qiwo-aviso-contacto { background: rgba(217,119,6,.20); border-color: rgba(252,211,77,.45); color: #FCD34D; }

/* Aviso de apoderados ya registrados, paso 1 del registro (21/08/2026).
   Azul informativo y no ámbar: no es un error ni algo que corregir — un
   segundo apoderado es un caso perfectamente válido (madre y padre por
   separado, muy común acá). */
.registro-aviso-apoderados {
    width: 100%;
    max-width: 360px;
    display: flex;
    align-items: flex-start;
    gap: 9px;
    background: #E6F1FB;
    border: 1px solid #B5D4F4;
    border-radius: 10px;
    padding: 11px 13px;
    margin-top: 10px;
    font-size: 12.5px;
    line-height: 1.45;
    color: #0C447C;
}

.registro-aviso-apoderados svg { flex-shrink: 0; margin-top: 1px; }

/* Tener solo teléfono permite completar la solicitud, pero cambia una decisión
   importante para el padre: sin correo no podrá recuperar su clave por su cuenta.
   Se presenta como información azul, no como una alerta que parezca impedirle
   continuar. */
.registro-aviso-correo {
    width: 100%;
    max-width: 360px;
    display: flex;
    align-items: flex-start;
    gap: 9px;
    background: #E6F1FB;
    border: 1px solid #B5D4F4;
    border-radius: 10px;
    padding: 11px 13px;
    margin-bottom: 14px;
    font-size: 12.5px;
    line-height: 1.45;
    color: #0C447C;
}

.registro-aviso-correo svg { flex-shrink: 0; margin-top: 1px; }

.registro-aviso-link {
    display: block;
    margin-top: 5px;
    font-weight: 500;
    color: inherit;
    text-decoration: underline;
}

body.qiwo-dark .registro-aviso-apoderados {
    background: rgba(55,138,221,.18);
    border-color: rgba(133,183,235,.45);
    color: #B5D4F4;
}

body.qiwo-dark .registro-aviso-correo {
    background: rgba(55,138,221,.18);
    border-color: rgba(133,183,235,.45);
    color: #B5D4F4;
}

/* ── PASO 2 DEL REGISTRO DE APODERADO (21/08/2026) ─────────────────────────
   Marca el cambio de dueño de los datos. El paso 1 pide el documento "del
   alumno(a)" y el paso 2 pedía "Nombres" / "Número de documento" a secas:
   4 de 5 solicitudes mal llenadas repetían ahí el nombre y DNI del hijo. */
.registro-paso2-cabecera {
    width: 100%;
    max-width: 360px;
    background: #F0FDFA;
    border: 1px solid #99E2D0;
    border-radius: 10px;
    padding: 11px 13px;
    margin-bottom: 16px;
}

.registro-paso2-titulo {
    font-size: 14px;
    font-weight: 600;
    color: #0B2947;
    margin-bottom: 2px;
}

.registro-paso2-sub {
    font-size: 12.5px;
    color: #475569;
    line-height: 1.45;
}

.registro-paso2-sub span {
    display: block;
    margin-top: 3px;
    font-weight: 500;
    color: #0F9375;
}

body.qiwo-dark .registro-paso2-cabecera { background: rgba(15,147,117,.14); border-color: rgba(15,147,117,.45); }
body.qiwo-dark .registro-paso2-titulo   { color: #E7EDF5; }
body.qiwo-dark .registro-paso2-sub      { color: #93A4BC; }
body.qiwo-dark .registro-paso2-sub span { color: #5EEAD4; }

/* ── REGISTRO APODERADO: propuesta UX mobile-first (22/08/2026) ────────────
   De propuestas/propuesta-registro-apoderado-20260822.html. El 90% del uso
   real es móvil: la línea de expectativa y la barra de envío fija solo se
   muestran <900px (ver media query de auth); en desktop mandan el panel
   derecho con los 3 pasos y el botón en flujo. */

/* Stepper: el hint dice "dos simples pasos" y nada mostraba en cuál estabas */
.registro-stepper { display: flex; align-items: center; gap: 8px; width: 100%; max-width: 360px; margin: 0 0 18px; }
.step-item { display: flex; align-items: center; gap: 7px; font-size: 12.5px; font-weight: 600; color: #9CA3AF; }
.step-num { width: 22px; height: 22px; border-radius: 50%; background: #E5E7EB; color: #6B7280; display: flex; align-items: center; justify-content: center; font-size: 11.5px; font-weight: 700; flex-shrink: 0; }
.step-item.activo { color: #0B2947; }
.step-item.activo .step-num { background: #0F9375; color: #fff; }
.step-item.listo { color: #0F9375; }
.step-item.listo .step-num { background: #D1FAE5; color: #065F46; }
.step-linea { flex: 1; height: 2px; background: #E5E7EB; border-radius: 1px; min-width: 18px; }

body.qiwo-dark .step-item.activo { color: #E7EDF5; }

/* Expectativa del proceso para móvil. Oculta en desktop: ahí lo cubre
   .info-pasos del panel derecho. */
.registro-expectativa { display: none; font-size: 12px; color: #64748B; margin: -8px 0 16px; text-align: center; width: 100%; max-width: 360px; }
.registro-expectativa b { color: #0F9375; font-weight: 600; }

/* Aviso del usuario recién creado, en la pantalla de éxito del registro
   (30/08/2026). Deliberadamente grande y con la advertencia en ámbar: teclear el
   DNI del hijo en vez del propio es la causa nº1 de fallo de ingreso medida sobre
   AuditoriaLogin -- 66 personas distintas. El número se muestra con espaciado de
   letras para que se pueda copiar a mano sin equivocarse. */
/* Aviso flotante de la Lectora para quien pasó la tarjeta mientras otra
   marcación estaba en vuelo (30/08/2026). Va arriba de todo pero SIN tapar el
   resultado del alumno anterior, que tiene derecho a verlo. Tamaño grande a
   propósito: se lee de pie, a un metro, en una fila. */
.kiosco-aviso-reintentar {
  position: fixed; top: 14px; left: 50%; transform: translateX(-50%);
  z-index: 60; max-width: 92vw; text-align: center;
  background: #B45309; color: #FFFFFF;
  font-size: 20px; font-weight: 700; line-height: 1.3;
  padding: 14px 22px; border-radius: 12px;
  box-shadow: 0 10px 28px rgba(0, 0, 0, .3);
}
@media (max-width: 600px) {
  .kiosco-aviso-reintentar { font-size: 16px; padding: 11px 16px; }
}

.registro-usuario-aviso {
  margin: 12px 0 0; padding: 16px; text-align: center;
  background: #F1F5F9; border: 2px dashed #0F9375; border-radius: 10px;
}
.registro-usuario-etiqueta { display: block; font-size: 12px; color: #64748B; }
.registro-usuario-valor {
  display: block; margin: 6px 0 8px; font-size: 26px; font-weight: 700;
  letter-spacing: 4px; color: #0B2947;
}
.registro-usuario-o { display: block; margin-top: 2px; font-size: 12px; color: #64748B; }
.registro-usuario-correo {
  display: block; margin: 3px 0 8px; overflow-wrap: anywhere;
  font-size: 14px; font-weight: 700; color: #0F9375;
}
.registro-usuario-nota {
  display: block; font-size: 12.5px; line-height: 1.5;
  color: #B45309; background: #FEF3C7; border-radius: 8px; padding: 8px 10px;
}

/* La consulta no usa .cta-flujo: en móvil esa clase se oculta para el
   formulario largo de registro. Este contenedor mantiene acciones cómodas y
   apiladas tanto en celular como en tablets angostas. */
.consulta-solicitud-actions {
  width: 100%; max-width: 360px; display: flex; flex-direction: column;
  gap: 10px; margin-top: 10px;
}
.consulta-solicitud-actions .qiwo-btn-primary,
.consulta-solicitud-actions .qiwo-btn-secondary {
  width: 100%; min-height: 44px; display: inline-flex;
  align-items: center; justify-content: center;
}

body.qiwo-dark .registro-usuario-o { color: #94A3B8; }
body.qiwo-dark .registro-usuario-correo { color: #5EEAD4; }

/* Tarjeta de confirmación del alumno: la pregunta y las acciones viven dentro
   de la tarjeta, no sueltas debajo. Botón principal full-width y el "No" como
   enlace: en móvil dos botones gemelos chicos son mal objetivo táctil. */
.alumno-card { width: 100%; max-width: 360px; border: 1px solid #99E2D0; background: #F0FDFA; border-radius: 12px; padding: 14px 16px; margin-bottom: 10px; }
.alumno-card-eyebrow { font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: #0F9375; margin-bottom: 8px; }
.alumno-card-fila { display: flex; align-items: center; gap: 12px; }
.alumno-card-logo { width: 46px; height: 46px; border-radius: 50%; object-fit: cover; flex-shrink: 0; background: #fff; border: 1px solid #E5E7EB; }
.alumno-card-nombre { font-size: 14.5px; font-weight: 700; color: #0B2947; line-height: 1.3; }
.alumno-card-seccion { display: inline-block; margin-top: 3px; font-size: 11.5px; font-weight: 600; color: #0F9375; background: #D1FAE5; border-radius: 20px; padding: 2px 9px; }
.alumno-card-pregunta { margin-top: 12px; font-size: 13.5px; font-weight: 600; color: #0B2947; }
.alumno-card .qiwo-btn-primary { width: 100%; justify-content: center; padding: 12px; margin-top: 8px; min-height: 46px; }
.alumno-card-corregir { display: block; width: 100%; text-align: center; margin-top: 4px; background: none; border: none; color: #64748B; font-size: 13px; font-weight: 500; font-family: inherit; cursor: pointer; padding: 8px 6px; }
.alumno-card-corregir:hover { color: #0B2947; text-decoration: underline; }

body.qiwo-dark .alumno-card { background: rgba(15,147,117,.14); border-color: rgba(15,147,117,.45); }
body.qiwo-dark .alumno-card-nombre,
body.qiwo-dark .alumno-card-pregunta { color: #E7EDF5; }
body.qiwo-dark .alumno-card-seccion { background: rgba(15,147,117,.25); color: #5EEAD4; }
body.qiwo-dark .alumno-card-corregir { color: #93A4BC; }

/* Chip persistente del alumno confirmado en paso 2 + salida. Antes, si
   confirmabas al alumno equivocado, la única vuelta atrás era recargar y
   perder todo lo escrito. */
.registro-chip-alumno { width: 100%; max-width: 360px; display: flex; align-items: center; gap: 10px; background: #F0FDFA; border: 1px solid #99E2D0; border-radius: 10px; padding: 9px 13px; margin-bottom: 16px; font-size: 12.5px; color: #0B2947; }
.registro-chip-alumno .check { width: 18px; height: 18px; border-radius: 50%; background: #0F9375; color: #fff; display: flex; align-items: center; justify-content: center; font-size: 11px; flex-shrink: 0; }
.registro-chip-alumno b { font-weight: 700; }
.registro-chip-cambiar { margin-left: auto; background: none; border: none; color: #0F9375; font-size: 12.5px; font-weight: 600; font-family: inherit; cursor: pointer; white-space: nowrap; padding: 4px; }
.registro-chip-cambiar:hover { text-decoration: underline; }

body.qiwo-dark .registro-chip-alumno { background: rgba(15,147,117,.14); border-color: rgba(15,147,117,.45); color: #E7EDF5; }
body.qiwo-dark .registro-chip-cambiar { color: #5EEAD4; }

/* .qiwo-form-group no traía width propio (24/08/2026): dentro de
   .login-form-panel (flex column, align-items:center) eso lo dejaba encogerse
   al ancho de su propio contenido -- "Parentesco" (select con "Padre") salía
   ~113px mientras "Correo electrónico" (con el renglón de ayuda debajo) salía
   ~320px, todos en la misma columna. Se ve como inputs "grandes y chicos" al
   azar. Mismo width:100%;max-width:360px que ya usan sus hermanos de este
   formulario (.form-seccion, .registro-chip-alumno, .cta-flujo, abajo). */
.login-form-panel .qiwo-form-group { width: 100%; max-width: 360px; }

/* Secciones del paso 2: 10 campos seguidos sin agrupar son ~3 pantallas de
   scroll en móvil; los separadores dan descanso visual */
.form-seccion { width: 100%; max-width: 360px; font-size: 11px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: #6B7280; margin: 18px 0 12px; padding-bottom: 6px; border-bottom: 1px solid #ECEFF3; }

body.qiwo-dark .form-seccion { color: #93A4BC; border-bottom-color: rgba(255,255,255,.1); }

/* Botón de envío: en flujo para desktop; barra fija abajo solo en móvil, con
   la razón del bloqueo (la misma que ya calcula FormularioValido — acá solo se
   expone donde está el pulgar) */
.cta-flujo { width: 100%; max-width: 360px; }
.cta-flujo .qiwo-btn-primary { width: 100%; justify-content: center; min-height: 46px; }
.cta-sticky { display: none; }
.cta-razon { font-size: 11.5px; color: #B45309; text-align: center; margin: 6px 0 0; }

body.qiwo-dark .cta-razon { color: #FCD34D; }

/* Panel derecho: el proceso en 3 pasos. El mensaje "el colegio valida en
   <24h" antes solo aparecía DESPUÉS de enviar la solicitud */
.info-pasos { display: flex; flex-direction: column; gap: 22px; width: 100%; max-width: 360px; margin-top: 8px; }
.info-paso { display: flex; align-items: flex-start; gap: 14px; }
.info-paso-num { width: 30px; height: 30px; border-radius: 50%; border: 1.5px solid rgba(255,255,255,.35); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 700; flex-shrink: 0; }
.info-paso.hecho .info-paso-num { background: #0F9375; border-color: #0F9375; }
.info-paso-titulo { font-size: 14.5px; font-weight: 600; color: #fff; margin: 2px 0 2px; }
.info-paso-sub { font-size: 12.5px; color: #94A3B8; line-height: 1.5; margin: 0; }

/* ── AYUDAS DEL LOGIN (21/08/2026) ─────────────────────────────────────────
   Nacen del diagnóstico de AuditoriaLogin: 170 apoderados distintos fallaron
   en 30 días y todos veían el mismo "Credenciales inválidas". El texto del
   error nunca confirma si la cuenta existe; lo que cambia es el atajo que se
   ofrece debajo. */

/* Aclaración bajo la etiqueta del campo ("Es el DNI del apoderado, no el del
   alumno") — la causa nº1 era teclear el DNI del hijo, porque el registro de
   apoderado pide justamente ese dato. */
.login-field-hint {
    display: block;
    font-size: 11.5px;
    color: #0F9375;
    margin: -2px 0 5px;
    line-height: 1.35;
}

.login-aviso {
    width: 100%;
    max-width: 360px;
    display: flex;
    align-items: flex-start;
    gap: 9px;
    padding: 11px 13px;
    border-radius: 10px;
    font-size: 13px;
    line-height: 1.45;
    margin-bottom: 12px;
}

.login-aviso svg { flex-shrink: 0; margin-top: 1px; }

.login-aviso-amber {
    background: #FEF3C7;
    border: 1px solid #FCD34D;
    color: #92400E;
}

/* Azul informativo, no de error: la solicitud pendiente no es culpa de nadie
   ni algo que el apoderado pueda corregir -- solo tiene que esperar. Pintarlo
   de rojo o ámbar lo haría sentir un problema suyo. */
.login-aviso-info {
    background: #E6F1FB;
    border: 1px solid #B5D4F4;
    color: #0C447C;
}

.login-aviso-link {
    display: block;
    margin-top: 6px;
    font-weight: 500;
    color: inherit;
    text-decoration: underline;
}

.login-aviso-accion {
    display: block;
    margin-top: 6px;
    padding: 0;
    background: none;
    border: none;
    font: inherit;
    font-weight: 500;
    color: #92400E;
    text-decoration: underline;
    cursor: pointer;
}

.login-aviso-accion:disabled { opacity: .6; cursor: not-allowed; }

/* Solo aparece cuando el identificador SÍ resolvió a una cuenta: es el empujón
   a recuperar la clave sin que el texto declare que la cuenta existe. */
.login-btn-recuperar {
    width: 100%;
    max-width: 360px;
    display: block;
    text-align: center;
    padding: 11px 16px;
    margin-bottom: 12px;
    border: 1.5px solid #0F9375;
    border-radius: 10px;
    background: #F0FDFA;
    color: #0F9375;
    font-size: 14px;
    font-weight: 500;
    text-decoration: none;
    transition: background .15s;
}

.login-btn-recuperar:hover { background: #DCFCE7; }

/* ── TARJETA INSTALAR PWA ──────────────────────────────────────────────────
   Botón propio: el banner nativo de Chrome sale por heurística, no vuelve si
   lo cierran y no existe en iOS. Reusa la forma de .login-register-card para
   que las dos tarjetas se lean como familia. */
.login-install-card {
    width: 100%;
    max-width: 360px;
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 14px 16px;
    border: 1px solid #99E2D0;
    border-radius: 12px;
    background: #F0FDFA;
    text-align: left;
    cursor: pointer;
    margin-bottom: 12px;
    transition: border-color .15s, box-shadow .15s;
}

.login-install-card:hover {
    border-color: #0F9375;
    box-shadow: 0 4px 12px rgba(15,147,117,.10);
}

.login-install-icon {
    width: 42px; height: 42px;
    border-radius: 50%;
    background: #0F9375;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

body.qiwo-dark .login-field-hint      { color: #5EEAD4; }
body.qiwo-dark .login-aviso-amber     { background: rgba(217,119,6,.20); border-color: rgba(252,211,77,.45); color: #FCD34D; }
body.qiwo-dark .login-aviso-info      { background: rgba(55,138,221,.18); border-color: rgba(133,183,235,.45); color: #B5D4F4; }
body.qiwo-dark .login-aviso-accion    { color: #FCD34D; }
body.qiwo-dark .login-btn-recuperar   { background: rgba(15,147,117,.16); border-color: #0F9375; color: #5EEAD4; }
body.qiwo-dark .login-btn-recuperar:hover { background: rgba(15,147,117,.26); }
body.qiwo-dark .login-install-card    { background: rgba(15,147,117,.14); border-color: rgba(15,147,117,.5); }

/* ── YA INSTALADA ─────────────────────────────────────
   Reemplaza a la tarjeta de instalar solo cuando Chrome confirmó el WebAPK. El
   enlace "Abrir Qiwo" queda fuera de la navegación mejorada de Blazor para que
   Android reciba el intent HTTPS nativo y entregue la ruta a la app instalada. */
.login-instalada-card {
    width: 100%;
    max-width: 360px;
    display: flex;
    align-items: flex-start;
    gap: 14px;
    padding: 14px 16px;
    border: 1px solid #99E2D0;
    border-radius: 12px;
    background: #F0FDFA;
    text-align: left;
    margin-bottom: 12px;
}

.login-instalada-icono {
    width: 52px;
    height: 52px;
    border-radius: 12px;
    flex-shrink: 0;
    box-shadow: 0 2px 8px rgba(11,41,71,.18);
}

.login-instalada-texto {
    display: flex;
    flex-direction: column;
    gap: 3px;
    min-width: 0;
}

.login-instalada-titulo {
    font-size: 14px;
    font-weight: 700;
    color: #0B2947;
}

.login-instalada-sub {
    font-size: 12.5px;
    color: #4B5563;
    line-height: 1.45;
}

.login-instalada-ayuda {
    font-size: 12px;
    color: #0A6B55;
    line-height: 1.45;
    margin-top: 2px;
}

.login-instalada-ayuda b { font-weight: 700; }

/* ── SESIÓN YA ABIERTA ────────────────────────────────
   Llegar al login teniendo la sesión viva (por QR, enlace pegado o historial)
   hacía que el apoderado volviera a teclear su clave creyendo que lo sacaron.
   Este aviso va arriba de todo, antes que el formulario. */
.login-sesion-viva {
    width: 100%;
    max-width: 360px;
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 14px 16px;
    margin-bottom: 20px;
    border: 1px solid #0F9375;
    border-radius: 12px;
    background: #F0FDFA;
}

.login-sesion-cabecera { display: flex; align-items: center; gap: 11px; }

.login-sesion-avatar {
    width: 38px; height: 38px; border-radius: 50%; flex-shrink: 0;
    background: #0F9375; color: #fff;
    display: flex; align-items: center; justify-content: center;
    font-size: 16px; font-weight: 700;
}

.login-sesion-texto { display: flex; flex-direction: column; min-width: 0; }
.login-sesion-titulo { font-size: 12px; color: #0A6B55; font-weight: 600; }
.login-sesion-nombre { font-size: 14.5px; font-weight: 700; color: #0B2947; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.login-sesion-continuar {
    width: 100%; padding: 11px 16px; border: none; border-radius: 10px;
    background: #0F9375; color: #fff;
    font-family: inherit; font-size: 14.5px; font-weight: 700; cursor: pointer;
}
.login-sesion-continuar:hover { background: #0B7A61; }

.login-sesion-otra {
    align-self: center; padding: 0; border: none; background: none;
    font-family: inherit; font-size: 12.5px; color: #6B7280;
    text-decoration: underline; cursor: pointer;
}

body.qiwo-dark .login-sesion-viva   { background: rgba(15,147,117,.14); border-color: rgba(15,147,117,.6); }
body.qiwo-dark .login-sesion-nombre { color: #E7EDF5; }
body.qiwo-dark .login-sesion-titulo { color: #5EEAD4; }
body.qiwo-dark .login-sesion-otra   { color: #93A4BC; }

/* ── INVITACIÓN A INSTALAR DENTRO DEL PORTAL ──────────
   Vive en el tablero, no en el login: instalando con la sesión ya puesta, abrir
   la app deposita al apoderado directo acá en vez de pedirle contraseña. */
.tutor-instalar-card {
    display: flex;
    align-items: center;
    gap: 14px;
    flex-wrap: wrap;
    padding: 14px 16px;
    margin-bottom: 20px;
    border: 1px solid #99E2D0;
    border-radius: 12px;
    background: #F0FDFA;
}

.tutor-instalar-icono { width: 46px; height: 46px; border-radius: 11px; flex-shrink: 0; box-shadow: 0 2px 8px rgba(11,41,71,.16); }
.tutor-instalar-texto { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 190px; }
.tutor-instalar-titulo { font-size: 14.5px; font-weight: 700; color: #0B2947; }
.tutor-instalar-sub { font-size: 12.5px; color: #4B5563; line-height: 1.45; }
.tutor-instalar-acciones { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }

.tutor-instalar-btn {
    padding: 9px 18px; border: none; border-radius: 8px; background: #0F9375;
    color: #fff; font-family: inherit; font-size: 13.5px; font-weight: 700; cursor: pointer;
}
.tutor-instalar-btn:hover:not(:disabled) { background: #0B7A61; }
.tutor-instalar-btn:disabled { opacity: .65; cursor: default; }

.tutor-instalar-luego {
    padding: 0; border: none; background: none; font-family: inherit;
    font-size: 12.5px; color: #6B7280; cursor: pointer; text-decoration: underline;
}

body.qiwo-dark .tutor-instalar-card   { background: rgba(15,147,117,.14); border-color: rgba(15,147,117,.5); }
body.qiwo-dark .tutor-instalar-titulo { color: #E7EDF5; }
body.qiwo-dark .tutor-instalar-sub    { color: #C4D0DE; }
body.qiwo-dark .tutor-instalar-luego  { color: #93A4BC; }
/* Aviso de instalación fallida (08/09/2026). Ocupa la fila completa debajo de
   los botones porque la tarjeta es flex en una sola línea: sin el width:100% se
   metía como cuarta columna y estrujaba el texto a dos letras por renglón.
   Ámbar y no rojo a propósito: no se rompió nada, solo no se completó, y la
   persona puede reintentar ahí mismo. */
.tutor-instalar-aviso {
    width: 100%;
    margin: 10px 0 0;
    padding: 8px 12px;
    border-radius: 8px;
    background: #FFF7ED;
    color: #9A3412;
    font-size: 12.5px;
    line-height: 1.45;
}
body.qiwo-dark .tutor-instalar-aviso { background: rgba(234,88,12,.20); color: #FDC58B; }

.login-instalada-abrir {
    align-self: flex-start;
    margin-top: 8px;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 8px 14px;
    border: none;
    border-radius: 8px;
    background: #0F9375;
    color: #fff;
    font-family: inherit;
    font-size: 13px;
    font-weight: 700;
    cursor: pointer;
    text-decoration: none;
}

.login-instalada-abrir svg { width: 15px; height: 15px; flex-shrink: 0; }
.login-instalada-abrir:hover { background: #0B7A61; }

/* Acción secundaria mientras Chrome termina de crear el WebAPK. */
.login-instalada-revisar {
    align-self: flex-start;
    margin-top: 6px;
    padding: 0;
    background: none;
    border: none;
    font-family: inherit;
    font-size: 11.5px;
    color: #6B7280;
    text-decoration: underline;
    cursor: pointer;
}

body.qiwo-dark .login-instalada-card   { background: rgba(15,147,117,.14); border-color: rgba(15,147,117,.5); }
body.qiwo-dark .login-instalada-titulo { color: #E7EDF5; }
body.qiwo-dark .login-instalada-sub    { color: #C4D0DE; }
body.qiwo-dark .login-instalada-ayuda  { color: #5EEAD4; }
body.qiwo-dark .login-instalada-revisar { color: #93A4BC; }

/* ── TARJETA REGISTRO ─────────────────────────────── */
/* Se destaca sola cuando el fallo fue "ese usuario no existe": ahí crear el
   acceso es la acción correcta, no reintentar la contraseña. */
.login-register-card-destacada {
    border-color: #0F9375;
    background: #F0FDFA;
    box-shadow: 0 4px 12px rgba(15,147,117,.10);
}

body.qiwo-dark .login-register-card-destacada {
    background: rgba(15,147,117,.14);
    border-color: rgba(15,147,117,.5);
}

.login-register-card {
    width: 100%;
    max-width: 360px;
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 14px 16px;
    border: 1px solid #E2E8F0;
    border-radius: 12px;
    background: #F8FAFC;
    text-decoration: none;
    margin-bottom: 12px;
    transition: border-color 0.15s, box-shadow 0.15s, background 0.15s;
}

.login-register-card:hover {
    border-color: #0F9375;
    background: #F0FDFA;
    box-shadow: 0 4px 12px rgba(15,147,117,0.10);
}

.login-register-icon {
    width: 42px; height: 42px;
    border-radius: 50%;
    background: #E0F2F1;
    color: #0F9375;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.login-register-text {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.login-register-title {
    font-size: 14px;
    font-weight: 600;
    color: #0B2947;
}

.login-register-action {
    font-size: 13px;
    font-weight: 600;
    color: #0F9375;
}

/* ── LINKS INFERIORES ─────────────────────────────── */
.login-soporte {
    font-size: 13px;
    color: #94A3B8;
    margin-bottom: 6px;
    text-align: center;
}

.login-support-link {
    width: 100%;
    max-width: 360px;
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 14px;
    border: 1px solid #E2E8F0;
    border-radius: 10px;
    color: #475569;
    font-size: 13px;
    text-decoration: none;
    margin-bottom: 20px;
    transition: border-color 0.15s, background 0.15s;
}

.login-support-link svg:last-child {
    margin-left: auto;
    color: #94A3B8;
}

.login-support-link:hover {
    border-color: #CBD5E1;
    background: #F8FAFC;
}

.login-support-link strong {
    color: #0F9375;
    font-weight: 500;
}

.login-admin-foot {
    width: 100%;
    max-width: 360px;
    display: flex;
    justify-content: center;
    padding-top: 16px;
}

.login-admin-link {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 11px;
    color: #CBD5E1;
    text-align: center;
    text-decoration: none;
    transition: color 0.15s;
}

.login-admin-link:hover { color: #0F9375; }

/* ── PANEL DERECHO ────────────────────────────────── */
.login-info-title {
    font-size: 28px;
    font-weight: 600;
    color: #FFFFFF;
    margin-bottom: 8px;
    text-align: center;
}

.login-info-sub {
    font-size: 15px;
    color: #94A3B8;
    line-height: 1.6;
    margin-bottom: 40px;
    text-align: center;
}

.login-features {
    display: flex;
    flex-direction: column;
    gap: 28px;
    width: 100%;
    max-width: 380px;
}

.login-feature {
    display: flex;
    align-items: flex-start;
    gap: 16px;
}

.login-feature-icon {
    width: 38px;
    height: 38px;
    border-radius: 10px;
    background: rgba(15, 147, 117, 0.15);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.login-feature-title {
    font-size: 15px;
    font-weight: 600;
    color: #FFFFFF;
    margin-bottom: 4px;
}

.login-feature-desc {
    font-size: 13px;
    color: #94A3B8;
    line-height: 1.5;
}

.login-info-footer {
    margin-top: 48px;
    padding-top: 20px;
    border-top: 1px solid rgba(255,255,255,0.12);
    font-size: 11px;
    color: #94A3B8;
    text-align: center;
}

/* Panel derecho de Profesor: los 3 íconos pasan de verde (color de Apoderado
   y de Auxiliar) a gris azulado, y se conectan con una línea vertical -- un
   horario de clases, no una lista de features genérica. Parte del reboot
   total pedido 06/09/2026 (ver .login-form-panel--profesor arriba). */
.login-info-panel--profesor .login-features { position: relative; }
.login-info-panel--profesor .login-features::before {
    content: "";
    position: absolute;
    left: 19px;
    top: 19px;
    height: 132px;
    width: 2px;
    background: rgba(209,213,219,.3);
}
.login-info-panel--profesor .login-feature-icon {
    position: relative;
    z-index: 1;
    background: rgba(209,213,219,.16);
}

/* ── RESPONSIVE ───────────────────────────────────── */
@media (max-width: 900px) {
    .login-wrapper { flex-direction: column; height: auto; min-height: 100vh; min-height: 100dvh; }
    .login-info-panel { display: none; }
    .login-form-panel { width: 100%; height: auto; min-height: 100vh; min-height: 100dvh; padding: 48px 24px; }
    .login-tabs, .login-fields, .login-options,
    .login-btn-primary, .login-register-card,
    .login-support-link, .login-error,
    .login-admin-foot { max-width: 100%; }

    /* Registro apoderado mobile-first (22/08/2026): el panel derecho no existe
       acá, así que la expectativa del proceso baja a una línea y el envío pasa
       a una barra fija abajo, al alcance del pulgar. El padding-bottom del
       panel deja sitio para que la barra no tape el checkbox de términos. */
    .registro-stepper, .registro-expectativa, .alumno-card,
    .registro-chip-alumno, .form-seccion, .cta-flujo, .login-form-panel .qiwo-form-group { max-width: 100%; }
    .registro-expectativa { display: block; }
    .cta-flujo { display: none; }
    /* Solo el registro tiene la CTA sticky. Reservar este espacio en todos los
       formularios dejaba un bloque blanco innecesario al final del login. */
    .login-form-panel--registro { padding-bottom: 110px; }

    /* Estos dos overflow:visible son lo que hace funcionar el sticky de abajo
       (22/08/2026). De la regla de escritorio vienen .login-wrapper con
       overflow:hidden y .login-form-panel con overflow-y:auto, porque allá cada
       panel scrollea por su cuenta. Pero un ancestro con overflow distinto de
       visible crea un contenedor de scroll que en móvil NO scrollea, y ahí
       position:sticky se ancla y nunca se despega.
       Medido en vivo: la barra quedaba en top:1620px con viewport de 812 (o sea
       al final del documento); con overflow visible pasa a top:733, pegada
       abajo como corresponde. En móvil hay una sola columna y quien scrollea es
       el documento, así que ninguno de los dos overflow hace falta acá. */
    .login-wrapper { overflow: visible; }
    .login-form-panel { overflow-y: visible; }

    .cta-sticky {
        display: block;
        position: sticky;
        bottom: 0;
        z-index: 10;
        width: 100%;
        background: linear-gradient(to top, #fff 78%, rgba(255,255,255,0));
        padding: 14px 0 10px;
        margin-top: 6px;
    }
    .cta-sticky .qiwo-btn-primary { width: 100%; justify-content: center; min-height: 48px; font-size: 15px; }
    .cta-sticky .qiwo-btn-primary:disabled { background: #CBD5E1; opacity: 1; }
    body.qiwo-dark .cta-sticky { background: linear-gradient(to top, #1A2535 78%, rgba(26,37,53,0)); }
}

@media (min-width: 901px) and (max-width: 1100px) {
    .login-form-panel { padding: 40px 32px; }
    .login-info-panel { padding: 40px 32px; }
    .login-info-title { font-size: 24px; }
}

/* ── LOGIN ERROR ─────────────────────────────────── */
.login-error {
    background: rgba(220, 38, 38, 0.08);
    border: 1px solid rgba(220, 38, 38, 0.3);
    color: #DC2626;
    font-size: 13px;
    font-weight: 500;
    padding: 10px 14px;
    border-radius: 8px;
    margin-bottom: 12px;
    width: 100%;
    max-width: 360px;
}

/* ── ADMIN SHELL ─────────────────────────────────────────── */
/* height: 100dvh y NO 100vh (21/08/2026, bug reportado en un S20 real).
   En Chrome de Android, 100vh es el viewport GRANDE -- el que habría si la
   barra de direcciones estuviera oculta. Con la barra visible, la parte de
   abajo del shell queda fuera de la pantalla, y como acá hay overflow:hidden
   no hay forma de llegar: el footer del sidebar (nombre + cerrar sesión)
   simplemente no existía para el usuario hasta que el navegador decidía
   esconder su barra. 100dvh sigue el alto REAL visible en todo momento.
   La declaración 100vh queda primero como respaldo para navegadores viejos
   que no entienden dvh; los que sí lo entienden usan la segunda. */
.admin-shell {
    display: flex;
    height: 100vh;
    height: 100dvh;
    overflow: hidden;
    background: #F5F6F8;
    position: relative;
}

.admin-sidebar-backdrop {
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(11, 41, 71, 0.4);
    backdrop-filter: blur(2px);
    z-index: 999;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.3s ease;
}

.admin-shell.mobile-open .admin-sidebar-backdrop {
    opacity: 1;
    pointer-events: auto;
}

/* ── SIDEBAR ──────────────────────────────────────────────── */
.admin-sidebar {
    width: 224px;
    flex-shrink: 0;
    background: #0B2947;
    display: flex;
    flex-direction: column;
    transition: width 0.2s ease, left 0.3s ease;
    overflow: hidden;
}

/* ── RESPONSIVE SIDEBAR ───────────────────────────────────── */
/* ---- DESKTOP (min-width: 1025px) ---- */
@media (min-width: 1025px) {
    .admin-sidebar.sidebar-toggled {
        width: 60px;
    }
    .admin-sidebar.sidebar-toggled .admin-sidebar-footer {
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 8px;
        padding: 12px 0;
    }
    .admin-sidebar.sidebar-toggled .admin-brand-text,
    .admin-sidebar.sidebar-toggled .admin-rol-badge-wrap,
    .admin-sidebar.sidebar-toggled .admin-nav-section,
    .admin-sidebar.sidebar-toggled .admin-nav-text,
    .admin-sidebar.sidebar-toggled .nav-badge-soon,
    .admin-sidebar.sidebar-toggled .admin-user-info {
        display: none !important;
    }
    .admin-sidebar.sidebar-toggled .admin-sidebar-header {
        flex-direction: column;
        justify-content: center;
        padding: 16px 0;
        gap: 12px;
    }
    .admin-sidebar.sidebar-toggled .admin-toggle-btn svg {
        transform: rotate(180deg);
    }
    .admin-sidebar.sidebar-toggled .admin-nav-item {
        justify-content: center;
    }
    /* .auxiliar-nav-badge se suma acá el 08/09/2026: tenía el mismo margin-left:auto
       que .nav-badge-role pero no su tratamiento de sidebar colapsado, así que al
       cerrar el menú el número se desbordaba fuera del ícono. El admin ya lo tenía
       resuelto -- esto solo lo extiende al badge del Auxiliar. */
    .admin-sidebar.sidebar-toggled .nav-badge-role,
    .admin-sidebar.sidebar-toggled .auxiliar-nav-badge {
        position: absolute;
        top: 2px;
        right: 8px;
        margin-left: 0;
        min-width: 15px;
        height: 15px;
        padding: 0;
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 8px;
        line-height: 1;
        border-radius: 50%;
    }
}

/* ---- TABLET (768px - 1024px) ---- */
@media (min-width: 768px) and (max-width: 1024.98px) {
    .admin-sidebar:not(.sidebar-toggled):not(.admin-sidebar-hybrid) {
        width: 60px;
    }
    .admin-sidebar:not(.sidebar-toggled):not(.admin-sidebar-hybrid) .admin-sidebar-footer {
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 8px;
        padding: 12px 0;
    }
    .admin-sidebar:not(.sidebar-toggled):not(.admin-sidebar-hybrid) .admin-brand-text,
    .admin-sidebar:not(.sidebar-toggled):not(.admin-sidebar-hybrid) .admin-rol-badge-wrap,
    .admin-sidebar:not(.sidebar-toggled):not(.admin-sidebar-hybrid) .admin-nav-section,
    .admin-sidebar:not(.sidebar-toggled):not(.admin-sidebar-hybrid) .admin-nav-text,
    .admin-sidebar:not(.sidebar-toggled):not(.admin-sidebar-hybrid) .nav-badge-soon,
    .admin-sidebar:not(.sidebar-toggled):not(.admin-sidebar-hybrid) .admin-user-info {
        display: none !important;
    }
    .admin-sidebar:not(.sidebar-toggled):not(.admin-sidebar-hybrid) .admin-sidebar-header {
        flex-direction: column;
        justify-content: center;
        padding: 16px 0;
        gap: 12px;
    }
    .admin-sidebar:not(.sidebar-toggled):not(.admin-sidebar-hybrid) .admin-toggle-btn svg {
        transform: rotate(180deg);
    }
    .admin-sidebar:not(.sidebar-toggled):not(.admin-sidebar-hybrid) .admin-nav-item {
        justify-content: center;
    }
    .admin-sidebar:not(.sidebar-toggled):not(.admin-sidebar-hybrid) .nav-badge-role,
    .admin-sidebar:not(.sidebar-toggled):not(.admin-sidebar-hybrid) .auxiliar-nav-badge {
        position: absolute;
        top: 2px;
        right: 8px;
        margin-left: 0;
        min-width: 15px;
        height: 15px;
        padding: 0;
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 8px;
        line-height: 1;
        border-radius: 50%;
    }

    .admin-content {
        padding: 16px;
    }
}

/* ---- MOBILE (max-width: 767px) ---- */
@media (max-width: 767px) {
    .admin-sidebar {
        position: absolute;
        left: -224px;
        top: 0;
        bottom: 0;
        z-index: 1000;
        width: 224px !important;
        box-shadow: 2px 0 12px rgba(0,0,0,0.15);
    }

    .admin-shell.mobile-open .admin-sidebar {
        left: 0;
    }

    .admin-hamburger {
        display: flex !important;
        align-items: center;
    }

    .admin-toggle-btn {
        display: none !important;
    }

    .admin-mobile-close-btn {
        display: flex !important;
    }

    .admin-topbar {
        padding: 0 16px;
    }

    .admin-sucursal-badge {
        display: none;
    }

    .admin-topbar-user {
        font-size: 13px;
        max-width: 100px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

    .admin-topbar-logo-inst {
        width: 22px;
        height: 22px;
    }

    .admin-content {
        padding: 12px;
    }
}

.admin-sidebar-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 20px 16px 16px;
    border-bottom: 1px solid rgba(255,255,255,0.07);
    min-height: 68px;
    gap: 10px;
}

.admin-sidebar-brand-wrap {
    display: flex;
    align-items: center;
    gap: 10px;
    overflow: hidden;
}

.admin-sidebar-brand {
    display: block;
    color: #fff;
    font-size: 16px;
    font-weight: 700;
    letter-spacing: 0.01em;
    white-space: nowrap;
}

.admin-sidebar-sucursal {
    display: block;
    color: rgba(255,255,255,0.45);
    font-size: 11px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 130px;
}

.admin-sidebar-sucursal-wrap {
    display: flex;
    align-items: center;
    gap: 5px;
    min-width: 0;
}

.admin-sidebar-logo-inst {
    width: 16px;
    height: 16px;
    border-radius: 50%;
    object-fit: cover;
    flex-shrink: 0;
    background: #fff;
}

.admin-topbar-logo-inst {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    object-fit: cover;
    flex-shrink: 0;
    background: #fff;
    border: 1px solid #E5E7EB;
}

.admin-toggle-btn {
    background: rgba(255,255,255,0.08);
    border: none;
    border-radius: 6px;
    padding: 6px;
    color: rgba(255,255,255,0.5);
    cursor: pointer;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: background 0.15s, color 0.15s;
}

.admin-mobile-close-btn {
    display: none;
    background: rgba(255,255,255,0.08);
    border: none;
    border-radius: 6px;
    padding: 6px;
    color: rgba(255,255,255,0.5);
    cursor: pointer;
    flex-shrink: 0;
    align-items: center;
    justify-content: center;
    transition: background 0.15s, color 0.15s;
}

.admin-toggle-btn svg, .admin-mobile-close-btn svg {
    transition: transform 0.3s ease;
}

.admin-toggle-btn:hover, .admin-mobile-close-btn:hover {
    background: rgba(255,255,255,0.14);
    color: #fff;
}

.admin-rol-badge-wrap {
    padding: 10px 16px 4px;
}

.admin-rol-badge {
    display: inline-block;
    background: rgba(15,147,117,0.18);
    color: #0F9375;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    padding: 3px 10px;
    border-radius: 20px;
    border: 1px solid rgba(15,147,117,0.3);
}

/* ── NAVEGACIÓN ───────────────────────────────────────────── */
.admin-nav {
    flex: 1;
    padding: 10px 10px;
    display: flex;
    flex-direction: column;
    gap: 2px;
    overflow-y: auto;
    overflow-x: hidden;
    scrollbar-width: thin;
    scrollbar-color: rgba(15,147,117,0.55) transparent;
}

.admin-nav::-webkit-scrollbar {
    width: 7px;
}

.admin-nav::-webkit-scrollbar-track {
    background: transparent;
}

.admin-nav::-webkit-scrollbar-thumb {
    background-color: rgba(15,147,117,0.55);
    border-radius: 10px;
}

.admin-nav::-webkit-scrollbar-thumb:hover {
    background-color: rgba(15,147,117,0.8);
}

.admin-nav-section {
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: rgba(255,255,255,0.28);
    padding: 14px 8px 4px;
    white-space: nowrap;
}

.admin-nav-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 9px 10px;
    border-radius: 8px;
    color: rgba(255,255,255,0.6);
    font-size: 13.5px;
    font-weight: 500;
    text-decoration: none;
    transition: background 0.15s, color 0.15s;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    cursor: pointer;
    position: relative;
}

.admin-nav-item:hover {
    background: rgba(255,255,255,0.07);
    color: rgba(255,255,255,0.9);
}

.admin-nav-item.active {
    background: rgba(15,147,117,0.18);
    color: #fff;
}

.admin-nav-item.active::before {
    content: '';
    position: absolute;
    left: 0;
    top: 50%;
    transform: translateY(-50%);
    height: 60%;
    width: 3px;
    background-color: #0F9375;
    border-radius: 0 4px 4px 0;
}

.admin-nav-item.active svg {
    color: #0F9375;
}

.admin-nav-item svg {
    flex-shrink: 0;
}

/* Ítems "próximamente" */
.admin-nav-item.nav-soon {
    opacity: 0.5;
    pointer-events: none;
    cursor: default;
}

.nav-badge-soon {
    margin-left: auto;
    font-size: 9px;
    font-weight: 600;
    background: rgba(255,255,255,0.08);
    color: rgba(255,255,255,0.4);
    padding: 2px 7px;
    border-radius: 10px;
    flex-shrink: 0;
}
.nav-badge-role {
    margin-left: auto;
    font-size: 9px;
    font-weight: 700;
    background: rgba(167,139,250,0.18);
    color: #C4B5FD;
    border: 1px solid rgba(167,139,250,0.35);
    padding: 1px 6px;
    border-radius: 10px;
    flex-shrink: 0;
}

/* Badge de "Récord de asistencia" en el menú del Auxiliar (28/08/2026) -- mismo
   patrón geométrico que .nav-badge-role, en rojo (alerta) en vez de morado (rol).
   Reemplaza la alerta grande que antes vivía en "Asistencia en vivo" -- pedido
   explícito de Jordy de moverla acá como notificación, no quitarla del todo. */
.auxiliar-nav-badge {
    margin-left: auto;
    font-size: 10px;
    font-weight: 700;
    background: #DC2626;
    color: #fff;
    padding: 1px 6px;
    border-radius: 10px;
    flex-shrink: 0;
    min-width: 15px;
    text-align: center;
}

/* ── SIDEBAR FOOTER ───────────────────────────────────────── */
.admin-sidebar-footer {
    padding: 14px 12px;
    border-top: 1px solid rgba(255,255,255,0.07);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
}

.admin-user-info {
    display: flex;
    flex-direction: column;
    overflow: hidden;
    min-width: 0;
}

.admin-user-name {
    color: #fff;
    font-size: 13px;
    font-weight: 600;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.admin-user-rol {
    color: rgba(255,255,255,0.4);
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: 0.07em;
}

.admin-logout-btn {
    background: rgba(255,255,255,0.07);
    border: none;
    border-radius: 8px;
    padding: 8px;
    color: rgba(255,255,255,0.5);
    cursor: pointer;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    transition: background 0.15s, color 0.15s;
}

.admin-logout-btn:hover {
    background: rgba(220,38,38,0.22);
    color: #FCA5A5;
}

/* ── TOPBAR ───────────────────────────────────────────────── */
.admin-main {
    flex: 1;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    min-width: 0;
}

.admin-topbar {
    height: 54px;
    background: #fff;
    border-bottom: 1px solid #E5E7EB;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 24px;
    flex-shrink: 0;
    gap: 12px;
}

.admin-topbar-left {
    display: flex;
    align-items: center;
    gap: 12px;
}

.admin-hamburger {
    display: none;
    background: none;
    border: none;
    color: #6B7280;
    cursor: pointer;
    padding: 4px;
    border-radius: 6px;
    position: relative;
}

.admin-hamburger-alert-dot {
    position: absolute;
    top: 1px;
    right: 1px;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: #DC2626;
    border: 1.5px solid #fff;
}

.admin-sucursal-badge {
    background: #E0F2F1;
    color: #0F9375;
    font-size: 12px;
    font-weight: 600;
    padding: 4px 12px;
    border-radius: 20px;
    white-space: nowrap;
}

.admin-topbar-right {
    display: flex;
    align-items: center;
    gap: 12px;
}

.admin-topbar-user {
    font-size: 14px;
    font-weight: 600;
    color: #0B2947;
    white-space: nowrap;
}

/* ── CONTENT ──────────────────────────────────────────────── */
.admin-content {
    flex: 1;
    overflow-y: auto;
    /* Evita que un gesto de scroll al inicio de una pantalla PWA dispare el
       pull-to-refresh nativo de Android por accidente. */
    overscroll-behavior-y: contain;
    padding: 28px;
}

/* Estado breve mientras una PWA nueva reconstruye su sesión desde la cookie. */
.portal-session-restore {
    align-items: center;
    background: #F5F7FA;
    display: flex;
    justify-content: center;
    min-height: 100dvh;
    padding: 24px;
}
.portal-session-restore-card {
    background: #FFFFFF;
    border: 1px solid #E1E8F0;
    border-radius: 16px;
    box-shadow: 0 12px 30px rgba(11, 41, 71, .10);
    color: #0B2947;
    max-width: 390px;
    padding: 32px 28px;
    text-align: center;
    width: 100%;
}
.portal-session-restore-card h1 {
    font-size: 20px;
    margin: 16px 0 8px;
}
.portal-session-restore-card p {
    color: #64748B;
    font-size: 14px;
    line-height: 1.55;
    margin: 0;
}
.portal-session-restore-spinner {
    animation: portal-session-spin .8s linear infinite;
    border: 3px solid #D7E6F1;
    border-radius: 50%;
    border-top-color: #0F9375;
    display: inline-block;
    height: 30px;
    width: 30px;
}
.portal-session-restore-button {
    background: #0F9375;
    border: 0;
    border-radius: 8px;
    color: #FFFFFF;
    cursor: pointer;
    font: inherit;
    font-size: 14px;
    font-weight: 700;
    margin-top: 20px;
    min-height: 42px;
    padding: 0 18px;
}
.portal-session-restore-button:hover { background: #0B8066; }
.portal-session-restore-button:disabled { cursor: wait; opacity: .7; }
@keyframes portal-session-spin { to { transform: rotate(360deg); } }

/* ── ADMIN PAGE HEADER ────────────────────────────────────── */
.admin-page-header {
    margin-bottom: 28px;
}

.admin-page-title {
    font-size: 22px;
    font-weight: 700;
    color: #0B2947;
    margin-bottom: 4px;
}

.admin-page-sub {
    font-size: 14px;
    color: #6B7280;
}

/* ── ADMIN STAT CARDS ─────────────────────────────────────── */
.admin-dashboard-cards {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
    gap: 16px;
}

.admin-stat-card {
    background: #fff;
    border: 1px solid #E5E7EB;
    border-radius: 14px;
    padding: 20px;
    display: flex;
    align-items: center;
    gap: 16px;
}

.admin-stat-icon {
    width: 44px;
    height: 44px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.admin-stat-icon.navy { background: #0B2947; }
.admin-stat-icon.teal { background: #0F9375; }
.admin-stat-icon.warm { background: #D97706; }
/* Amarillo de Tardanza alineado con el portal del Auxiliar (08/09/2026).
   Las otras dos tarjetas de "Asistencia de hoy" ya coincidían solas con la
   escala del Auxiliar -- Presentes usa el verde de marca #0F9375 igual que
   Puntual, y Ausentes el #DC2626 de Falta. Tardanzas era la única fuera: iba
   con .warm (#D97706), que en la escala del sistema se lee como "fuera de
   horario" y no como tardanza, así que la fila decía verde, NARANJA, rojo y
   se saltaba el amarillo del medio.
   No se toca .warm: la comparte "Apoderados activos", que no es un estado de
   asistencia y debe seguir con su naranja de categoría. */
.admin-stat-icon.tardanza { background: #CA8A04; }
.admin-stat-icon.gray { background: #6B7280; }

.admin-stat-label {
    font-size: 12px;
    color: #6B7280;
    font-weight: 500;
    margin-bottom: 4px;
}

.admin-stat-value {
    font-size: 24px;
    font-weight: 700;
    color: #0B2947;
}

/* ── ADMIN HUB CARDS (tarjetas de acceso a submódulos: Panel Director, Solicitudes) ── */
.admin-hub-cards {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
    gap: 16px;
}
.admin-hub-card {
    background: #fff;
    border: 1px solid #E5E7EB;
    border-radius: 14px;
    padding: 20px;
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.admin-hub-card-icon {
    width: 44px;
    height: 44px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    margin-bottom: 4px;
}
.admin-hub-card-title {
    font-size: 15px;
    font-weight: 700;
    color: #0B2947;
    margin: 0;
}
.admin-hub-card-desc {
    font-size: 13px;
    color: #6B7280;
    line-height: 1.5;
    margin: 0;
    flex: 1;
}
/* ── DASHBOARD EXTRAS ─────────────────────────────────────── */
.admin-section-label {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 0.03em;
    text-transform: uppercase;
    color: #374151;
    margin: 32px 0 16px;
    padding-bottom: 8px;
    border-bottom: 2px solid #E5E7EB;
}
.admin-section-label svg {
    width: 16px;
    height: 16px;
    flex-shrink: 0;
}

/* ── ACTIVITY TABLE ───────────────────────────────────────── */
.admin-activity-wrapper {
    background: #fff;
    border: 1px solid #E5E7EB;
    border-radius: 14px;
    overflow: hidden;
}
.admin-activity-wrapper table {
    width: 100%;
    border-collapse: collapse;
    font-size: 13px;
}
.admin-activity-wrapper thead th {
    background: #F9FAFB;
    padding: 10px 14px;
    text-align: left;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: #6B7280;
    border-bottom: 1px solid #E5E7EB;
}
.admin-activity-wrapper tbody td {
    padding: 10px 14px;
    color: #0B2947;
    border-bottom: 1px solid #F3F4F6;
}
.admin-activity-wrapper tbody tr:last-child td {
    border-bottom: none;
}
.admin-activity-empty {
    padding: 24px;
    text-align: center;
    color: #9CA3AF;
    font-size: 14px;
}

/* ── BADGES ───────────────────────────────────────────────── */
.admin-badge {
    display: inline-block;
    font-size: 11px;
    font-weight: 600;
    padding: 3px 10px;
    border-radius: 20px;
    letter-spacing: 0.04em;
}
.badge-puntual    { background: #D1FAE5; color: #065F46; }
.badge-tardanza   { background: #FEF3A0; color: #854D0E; }
/* Ámbar de aviso que NO es un estado de asistencia: tolerancia en minutos, "sin
   configurar", una fecha de vigencia. Vivía sobre .badge-tardanza, así que al
   alinear ese badge con la paleta se habrían repintado cosas que nada tienen que
   ver con llegar tarde. Conserva el ámbar anterior a propósito (09/09/2026). */
.badge-ambar      { background: #FEF3C7; color: #92400E; }
.badge-salida     { background: #DBEAFE; color: #1E40AF; }
.badge-denegado   { background: #FEE2E2; color: #991B1B; }
.badge-duplicado  { background: #F3F4F6; color: #374151; }
.badge-anulado    { background: #E2E8F0; color: #475569; text-decoration: line-through; }
.badge-entrada    { background: #E0F2F1; color: #0F9375; }

/* ── SPINNER ──────────────────────────────────────────────── */
.admin-spinner {
    width: 24px;
    height: 24px;
    border: 3px solid #E5E7EB;
    border-top-color: #0F9375;
    border-radius: 50%;
    animation: qiwo-spin 0.7s linear infinite;
    margin: 24px auto;
    display: block;
}
@keyframes qiwo-spin {
    to { transform: rotate(360deg); }
}

/* ── ALERT ERROR ──────────────────────────────────────────── */
.admin-alert-error {
    display: flex;
    align-items: center;
    gap: 10px;
    background: #FEF2F2;
    border: 1px solid #FECACA;
    border-radius: 10px;
    padding: 12px 16px;
    color: #991B1B;
    font-size: 14px;
    margin-bottom: 20px;
}
.admin-alert-error svg {
    width: 16px;
    height: 16px;
    flex-shrink: 0;
}

/* ── RESPONSIVE ───────────────────────────────────────────── */
@media (max-width: 640px) {
    .admin-dashboard-cards {
        grid-template-columns: repeat(2, 1fr);
    }
    .admin-content {
        padding: 16px;
    }
    .admin-stat-value {
        font-size: 20px;
    }
    .admin-activity-wrapper thead th:nth-child(2),
    .admin-activity-wrapper tbody td:nth-child(2) {
        display: none;
    }
}

@media (max-width: 480px) {
    .admin-dashboard-cards {
        grid-template-columns: 1fr;
    }
}

/* ══════════════════════════════════════════════════════════
   MÓDULO ADMIN — TABLA + MODAL + FORMULARIOS
   ══════════════════════════════════════════════════════════ */

/* ── TOOLBAR ──────────────────────────────────────────────── */
.qiwo-toolbar {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 20px;
    flex-wrap: wrap;
}
.qiwo-search-box {
    display: flex;
    align-items: center;
    gap: 8px;
    background: #fff;
    border: 1px solid #E5E7EB;
    border-radius: 10px;
    padding: 8px 14px;
    flex: 1;
    min-width: 200px;
}
.qiwo-search-box svg { color: #9CA3AF; flex-shrink: 0; }
.qiwo-search-box input {
    border: none;
    outline: none;
    font-size: 14px;
    width: 100%;
    color: #0B2947;
    background: transparent;
}
.qiwo-filter-chips { display: flex; gap: 6px; flex-wrap: wrap; }
.qiwo-chip {
    padding: 6px 14px;
    border-radius: 20px;
    font-size: 13px;
    font-weight: 500;
    border: 1px solid #E5E7EB;
    background: #fff;
    color: #6B7280;
    cursor: pointer;
    transition: all 0.15s;
}
.qiwo-chip:hover { border-color: #0F9375; color: #0F9375; }
.qiwo-chip-active {
    background: #E0F2F1;
    border-color: #0F9375;
    color: #0F9375;
    font-weight: 600;
}

/* ── TABLE CARD ───────────────────────────────────────────── */
.qiwo-table-card {
    background: #fff;
    border: 1px solid #E5E7EB;
    border-radius: 14px;
    overflow: hidden;
}
.qiwo-table-scroll {
    display: block;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    width: 100%;
}
.qiwo-table {
    width: 100%;
    min-width: 600px;
    border-collapse: collapse;
    font-size: 14px;
}
.qiwo-table thead th {
    position: sticky;
    top: 0;
    z-index: 10;
    background: #F9FAFB;
    padding: 11px 16px;
    text-align: left;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: #6B7280;
    border-bottom: 1px solid #E5E7EB;
}
.qiwo-table tbody td {
    padding: 12px 16px;
    color: #0B2947;
    border-bottom: 1px solid #F3F4F6;
    vertical-align: middle;
}
.qiwo-table tbody tr:last-child td { border-bottom: none; }
.qiwo-table tbody tr:hover td { background: #F9FAFB; }
.qiwo-table-empty {
    text-align: center;
    padding: 32px;
    color: #9CA3AF;
    font-size: 14px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 12px;
}
.qiwo-empty-state {
    text-align: center;
    padding: 48px 24px;
    color: #6B7280;
    font-size: 14px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 16px;
}
.qiwo-empty-state-icon {
    width: 64px;
    height: 64px;
    color: #D1D5DB;
    margin-bottom: 8px;
}
.qiwo-empty-state-title {
    font-size: 18px;
    font-weight: 600;
    color: #374151;
    margin: 0;
}
.qiwo-empty-state-desc {
    font-size: 14px;
    color: #6B7280;
    max-width: 320px;
    line-height: 1.5;
}
.qiwo-table-footer {
    padding: 10px 16px;
    font-size: 12px;
    color: #9CA3AF;
    border-top: 1px solid #F3F4F6;
    background: #FAFAFA;
}
.qiwo-table-loading {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    padding: 32px;
    color: #6B7280;
    font-size: 14px;
}

/* ── ALUMNO CELL ──────────────────────────────────────────── */
.qiwo-person-cell { display: flex; align-items: center; gap: 10px; }
.qiwo-avatar {
    width: 36px; height: 36px;
    border-radius: 10px;
    background: #E0F2F1;
    color: #0F9375;
    display: flex; align-items: center; justify-content: center;
    font-size: 13px; font-weight: 700;
    flex-shrink: 0;
}
.qiwo-person-name { font-weight: 600; font-size: 14px; color: #0B2947; }
.qiwo-person-sub  { font-size: 11px; color: #9CA3AF; margin-top: 1px; }
.qiwo-codigo-tag {
    display: inline-block;
    font-family: monospace;
    font-size: 12px;
    font-weight: 600;
    background: #F3F4F6;
    color: #374151;
    padding: 2px 8px;
    border-radius: 6px;
}
.qiwo-nivel-chip {
    display: inline-block;
    font-size: 10px;
    font-weight: 700;
    background: #EDE9FE;
    color: #6D28D9;
    padding: 2px 7px;
    border-radius: 4px;
    margin-right: 4px;
    letter-spacing: 0.04em;
    text-transform: uppercase;
}
.qiwo-text-muted { color: #9CA3AF; font-size: 13px; }

/* ── BADGES MATRÍCULA ─────────────────────────────────────── */
.badge-matricula-activa   { background: #D1FAE5; color: #065F46; }
.badge-matricula-inactiva { background: #FEE2E2; color: #991B1B; }

/* ── ACTION BUTTON ────────────────────────────────────────── */
.qiwo-action-btn {
    width: 32px; height: 32px;
    border-radius: 8px;
    border: 1px solid #E5E7EB;
    background: #fff;
    color: #6B7280;
    display: inline-flex; align-items: center; justify-content: center;
    cursor: pointer;
    transition: all 0.15s;
}
.qiwo-action-btn:hover { background: #E0F2F1; border-color: #0F9375; color: #0F9375; }
.qiwo-action-btn:disabled { opacity: 0.4; cursor: not-allowed; }
.qiwo-action-btn:disabled:hover { background: #fff; border-color: #E5E7EB; color: #6B7280; }

/* El menú de acciones se abre en la capa superior del navegador. No anular el
   overflow de la tarjeta ni del scroller: las tablas anchas deben conservar
   siempre su desplazamiento interno. */

.qiwo-row-actions-cell {
    width: 132px;
    min-width: 132px;
    text-align: right;
    vertical-align: middle;
    white-space: nowrap;
}

.qiwo-td-actions.qiwo-row-actions-cell {
    width: 132px;
}

/* ── ALERT SUCCESS ────────────────────────────────────────── */
.admin-alert-warning {
    display: flex;
    align-items: center;
    gap: 10px;
    background: #FEF9C3;
    border: 1px solid #FDE68A;
    border-radius: 10px;
    padding: 12px 16px;
    color: #854D0E;
    font-size: 14px;
    margin-bottom: 16px;
}

.admin-alert-success {
    display: flex;
    align-items: center;
    gap: 10px;
    background: #D1FAE5;
    border: 1px solid #6EE7B7;
    border-radius: 10px;
    padding: 12px 16px;
    color: #065F46;
    font-size: 14px;
    margin-bottom: 16px;
}

/* ── MODAL ────────────────────────────────────────────────── */
.qiwo-modal-overlay {
    position: fixed;
    inset: 0;
    background: rgba(11,41,71,0.45);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1000;
    padding: 16px;
}
/* max-height en dvh y no vh (21/08/2026, misma familia de bug que .admin-shell).
   En móvil el modal es un bottom-sheet anclado abajo (ver @media 767px), así que
   si 90vh supera el alto REALMENTE visible lo que se corta es la parte de ARRIBA:
   el header con la X de cerrar. El caso peor es el modal de detalle de alumno del
   Auxiliar, que ya de por sí es alto (historial + marcación manual + apoderados). */
.qiwo-modal-card {
    background: #fff;
    border-radius: 18px;
    width: 100%;
    max-width: 640px;
    max-height: 90vh;
    max-height: 90dvh;
    display: flex;
    flex-direction: column;
    box-shadow: 0 20px 60px rgba(11,41,71,0.2);
    transition: transform 0.3s ease-out;
}
.qiwo-modal-card-sm { max-width: 480px; }
.qiwo-modal-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 20px 24px 16px;
    border-bottom: 1px solid #F3F4F6;
    flex-shrink: 0;
}
.qiwo-modal-header h3 {
    font-size: 17px;
    font-weight: 700;
    color: #0B2947;
}
.qiwo-modal-close {
    width: 32px; height: 32px;
    border-radius: 8px;
    border: none;
    background: #F3F4F6;
    color: #6B7280;
    display: flex; align-items: center; justify-content: center;
    cursor: pointer;
}
.qiwo-modal-close:hover { background: #FEE2E2; color: #DC2626; }
.qiwo-modal-body {
    padding: 20px 24px;
    overflow-y: auto;
    overflow-x: hidden;
    /* El scroll del modal muere en el modal: sin esto, al llegar al tope o al
       fondo el gesto sigue de largo y arrastra la pantalla de atrás (o dispara
       la recarga de Chrome, ver la regla de html/body). */
    overscroll-behavior: contain;
    flex: 1;
}
.qiwo-modal-footer {
    display: flex;
    justify-content: flex-end;
    gap: 10px;
    padding: 16px 24px;
    border-top: 1px solid #F3F4F6;
    flex-shrink: 0;
}

/* ── STEP BADGE ───────────────────────────────────────────── */
.qiwo-section-title {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 13px;
    font-weight: 700;
    color: #0B2947;
    margin-bottom: 14px;
    margin-top: 4px;
}
.qiwo-step-badge {
    width: 22px; height: 22px;
    border-radius: 50%;
    background: #0B2947;
    color: #fff;
    font-size: 11px;
    font-weight: 700;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

/* ── FORM ELEMENTS ────────────────────────────────────────── */
.qiwo-form-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 14px;
    margin-bottom: 14px;
}
.qiwo-form-group { display: flex; flex-direction: column; gap: 5px; margin-bottom: 14px; }
.qiwo-form-group label {
    font-size: 13px;
    font-weight: 600;
    color: #374151;
}
.qiwo-form-group input,
.qiwo-form-group select,
.qiwo-form-group textarea {
    border: 1px solid #E5E7EB;
    border-radius: 8px;
    padding: 9px 12px;
    font-size: 14px;
    color: #0B2947;
    outline: none;
    transition: border-color 0.15s;
    background: #fff;
    width: 100%;
    font-family: inherit;
}
.qiwo-form-group input:focus,
.qiwo-form-group select:focus,
.qiwo-form-group textarea:focus { border-color: #0F9375; box-shadow: 0 0 0 3px rgba(15,147,117,0.1); }
/* Base de .qiwo-input fuera de .qiwo-form-group (12/10/2026). No existía: un campo suelto
   (minutos de marcación, motivos, códigos) se veía con el borde hundido nativo del
   navegador. Una sola clase para que cualquier regla de contexto le gane. */
.qiwo-input { box-sizing: border-box; min-height: 40px; padding: 9px 12px; border: 1px solid #D1D5DB; border-radius: 8px; background: #fff; color: #0B2947; font: inherit; font-size: 14px; outline: none; transition: border-color 0.15s; }
.qiwo-input:focus { border-color: #0F9375; box-shadow: 0 0 0 3px rgba(15,147,117,0.1); }
.qiwo-input-error { border-color: #DC2626 !important; }
.qiwo-form-hint { font-size: 11px; color: #9CA3AF; margin-top: 3px; }

/* CampoFecha (28/09/2026): dd/mm/aaaa escrito a mano, con el calendario nativo
   escondido detrás del ícono. Ver Components/Shared/CampoFecha.razor. */
.qiwo-campo-fecha-caja { width: 100%; min-width: 0; }
.qiwo-campo-fecha { position: relative; width: 100%; }
.qiwo-campo-fecha input[type="text"]:disabled { background: #F3F4F6; color: #9CA3AF; cursor: not-allowed; }
.qiwo-campo-fecha-cal:disabled { opacity: .4; cursor: not-allowed; }
.qiwo-campo-fecha-cal:disabled:hover { background: transparent; color: #6B7280; }
/* Selector de día de la Auxiliar (flechas + fecha): compacto y sin que la regla
   ".auxiliar-selector-fecha button" le ponga caja con borde al ícono. */
.auxiliar-selector-fecha .qiwo-campo-fecha-caja { width: 138px; flex: 0 0 auto; position: relative; }
.auxiliar-selector-fecha .qiwo-campo-fecha input[type="text"] { height: 28px; padding: 0 30px 0 8px; font-size: 13px; }
.auxiliar-selector-fecha .qiwo-campo-fecha .qiwo-campo-fecha-cal {
    width: 26px; height: 26px; right: 1px; border: none; background: transparent;
}
.auxiliar-selector-fecha .qiwo-campo-fecha-error {
    position: absolute; top: 100%; left: 0; white-space: nowrap; z-index: 5;
    background: #FFFFFF; padding: 2px 6px; border-radius: 6px; box-shadow: 0 2px 8px rgba(0,0,0,.08);
}
/* Estilo completo propio: ".qiwo-input" no tiene regla base (solo se veía bien dentro
   de .qiwo-form-group), y en filtros sueltos el campo salía con el borde del navegador
   y más ancho que su contenedor. Así se ve igual en cualquier pantalla. */
.qiwo-campo-fecha input[type="text"] {
    width: 100%;
    box-sizing: border-box;
    border: 1px solid #E5E7EB;
    border-radius: 8px;
    padding: 9px 40px 9px 12px;
    font-size: 14px;
    font-family: inherit;
    color: #0B2947;
    background: #FFFFFF;
    outline: none;
    transition: border-color 0.15s;
    font-variant-numeric: tabular-nums;
    letter-spacing: 0.3px;
}
.qiwo-campo-fecha input[type="text"]:focus { border-color: #0F9375; box-shadow: 0 0 0 3px rgba(15,147,117,0.1); }
.qiwo-campo-fecha input[type="text"]::placeholder { color: #9CA3AF; }
body.qiwo-dark .qiwo-campo-fecha input[type="text"] { background: #0F1923; border-color: rgba(255,255,255,0.1); color: #E2E8F0; }
body.qiwo-dark .qiwo-campo-fecha input[type="text"]::placeholder { color: #475569; }
body.qiwo-dark .qiwo-campo-fecha input[type="text"]:disabled { background: #1A2632; color: #64748B; }
.qiwo-campo-fecha-cal {
    position: absolute; top: 50%; right: 4px; transform: translateY(-50%);
    width: 34px; height: 32px; padding: 0;
    display: flex; align-items: center; justify-content: center;
    border: none; background: transparent; border-radius: 6px;
    color: #6B7280; cursor: pointer;
}
.qiwo-campo-fecha-cal:hover { background: rgba(15,147,117,0.08); color: #0F9375; }
/* El nativo solo existe para prestar su calendario: invisible y sin ocupar lugar,
   pero anclado abajo a la izquierda para que el calendario se abra ahí. */
.qiwo-form-group .qiwo-campo-fecha-nativo,
.qiwo-campo-fecha-nativo {
    position: absolute; left: 0; bottom: 0;
    width: 1px; height: 1px; padding: 0; border: 0;
    opacity: 0; pointer-events: none;
}
.qiwo-campo-fecha-error { font-size: 12px; color: #DC2626; margin: 4px 0 0; }
body.qiwo-dark .qiwo-campo-fecha-cal { color: #9CA3AF; }
body.qiwo-dark .qiwo-campo-fecha-error { color: #F87171; }
.qiwo-required { color: #DC2626; margin-left: 2px; }
.qiwo-optional { color: #9CA3AF; font-weight: 400; font-size: 11px; }
.qiwo-pendiente { color: #D97706; margin-left: 4px; font-weight: 600; font-size: 11px; }
.qiwo-input-warn { border-color: #D97706 !important; background: #FFFBEB; }

/* ── DNI LOOKUP ROW ───────────────────────────────────────── */
.qiwo-lookup-row {
    display: flex;
    gap: 10px;
    align-items: flex-end;
    margin-bottom: 10px;
}
.qiwo-lookup-row .qiwo-form-group { flex: 1; margin-bottom: 0; }
.qiwo-btn-lookup {
    padding: 9px 16px;
    background: #0B2947;
    color: #fff;
    border: none;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 6px;
    white-space: nowrap;
    flex-shrink: 0;
}
.qiwo-btn-lookup:hover:not(:disabled) { background: #163860; }
.qiwo-btn-lookup:disabled { opacity: 0.5; cursor: not-allowed; }

/* ── LOOKUP MESSAGE ───────────────────────────────────────── */
.qiwo-lookup-msg {
    font-size: 13px;
    padding: 8px 12px;
    border-radius: 8px;
    margin-bottom: 10px;
    display: flex;
    align-items: center;
    gap: 8px;
}
.lookup-ok    { background: #D1FAE5; color: #065F46; }
.lookup-warn  { background: #FEF3C7; color: #92400E; }
.lookup-info  { background: #EFF6FF; color: #1E40AF; }
.lookup-error { background: #FEE2E2; color: #991B1B; }

/* ── PERSONA CARD ─────────────────────────────────────────── */
.qiwo-persona-card {
    border: 1px solid #E5E7EB;
    border-radius: 10px;
    padding: 14px 16px;
    margin-bottom: 14px;
    background: #F9FAFB;
}
.qiwo-persona-card-header {
    display: flex; align-items: center; gap: 8px;
    font-size: 13px; font-weight: 700;
    margin-bottom: 10px;
}
.qiwo-persona-card-data {
    display: flex; flex-direction: column; gap: 3px;
    font-size: 13px; color: #374151;
}

/* ── MODAL BUTTONS ────────────────────────────────────────── */
.qiwo-btn-primary {
    padding: 9px 20px;
    background: #0F9375;
    color: #fff;
    border: none;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    display: flex; align-items: center; gap: 6px;
}
.qiwo-btn-primary:hover:not(:disabled) { background: #0d7a62; }
.qiwo-btn-primary:disabled { opacity: 0.6; cursor: not-allowed; }
.qiwo-btn-secondary {
    padding: 9px 20px;
    background: #fff;
    color: #374151;
    border: 1px solid #E5E7EB;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
}
.qiwo-btn-secondary:hover { background: #F9FAFB; }

/* ── MODAL ERROR ──────────────────────────────────────────── */
.qiwo-modal-error {
    font-size: 13px;
    color: #DC2626;
    background: #FEF2F2;
    border: 1px solid #FECACA;
    border-radius: 8px;
    padding: 10px 14px;
    margin-top: 10px;
}

/* ── DETALLE ALUMNO ───────────────────────────────────────── */
.qiwo-detalle-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 9px 0;
    border-bottom: 1px solid #F3F4F6;
    font-size: 14px;
}
.qiwo-detalle-row:last-child { border-bottom: none; }
.qiwo-detalle-label { color: #6B7280; font-weight: 500; font-size: 13px; }

/* ── RESPONSIVE ───────────────────────────────────────────── */
@media (max-width: 640px) {
    .qiwo-form-row    { grid-template-columns: 1fr; }

    .qiwo-modal-overlay {
        align-items: flex-end;
        padding: 0;
    }
    .qiwo-modal-card {
        max-width: 100%;
        max-height: 90vh;
        max-height: 90dvh;
        border-radius: 24px 24px 0 0;
        margin: 0;
        animation: slideUp 0.3s ease-out forwards;
    }
    @keyframes slideUp {
        from { transform: translateY(100%); }
        to { transform: translateY(0); }
    }

    .qiwo-toolbar     { flex-direction: column; align-items: stretch; }
    .qiwo-search-box  { min-width: unset; }
    .qiwo-toolbar select {
        width: 100%;
    }
}

@media (min-width: 641px) and (max-width: 1024.98px) {
    .admin-content { padding: 20px; }
    .admin-page-title { font-size: 20px; }
    .qiwo-toolbar select { min-width: 120px; }
}

/* ── TUTORES — EXTRAS ─────────────────────────────────────── */
.badge-usuario-activo {
    background: #D1FAE5;
    color: #065F46;
    font-size: 10px;
    font-weight: 600;
    padding: 2px 7px;
    border-radius: 10px;
    display: inline-block;
    margin-top: 2px;
}
.badge-usuario-inactivo {
    background: #FEE2E2;
    color: #991B1B;
    font-size: 10px;
    font-weight: 600;
    padding: 2px 7px;
    border-radius: 10px;
    display: inline-block;
    margin-top: 2px;
}

/* Estados de SolicitudRectificacionDatos/SolicitudApoderado (Mis Solicitudes)
   -- clases propias en vez de reciclar badge-usuario- y badge-matricula-:
   antes Pendiente y Aprobada compartían el mismo verde, y Rechazada/Cancelada
   el mismo rojo -- cuatro estados, dos colores, no se distinguían al vistazo. */
.badge-solicitud-pendiente  { background: #FEF3C7; color: #92400E; }
.badge-solicitud-aprobada   { background: #D1FAE5; color: #065F46; }
.badge-solicitud-rechazada  { background: #FEE2E2; color: #991B1B; }
.badge-solicitud-cancelada  { background: #F1F5F9; color: #64748B; }
.qiwo-avatar.warm       { background: #FEF3C7; color: #D97706; }
.qiwo-alumnos-csv {
    font-size: 12px;
    color: #6B7280;
    max-width: 200px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.qiwo-alumnos-count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: #0B2947;
    color: #fff;
    font-size: 11px;
    font-weight: 700;
    margin-right: 6px;
    flex-shrink: 0;
}

/* ── AUTOCOMPLETE ─────────────────────────────────────────── */
.qiwo-autocomplete-wrapper  { position: relative; }
.qiwo-autocomplete-dropdown {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    z-index: 200;
    background: #fff;
    border: 1px solid #E5E7EB;
    border-radius: 10px;
    box-shadow: 0 8px 24px rgba(0,0,0,0.1);
    max-height: 220px;
    overflow-y: auto;
    margin-top: 4px;
}
.qiwo-autocomplete-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 14px;
    cursor: pointer;
    font-size: 13px;
    border-bottom: 1px solid #F3F4F6;
    transition: background 0.1s;
}
.qiwo-autocomplete-item:last-child { border-bottom: none; }
.qiwo-autocomplete-item:hover { background: #F0FDF4; }
.qiwo-autocomplete-nombre { font-weight: 600; color: #0B2947; }
.qiwo-autocomplete-codigo { font-family: monospace; font-size: 11px; color: #9CA3AF; }
.qiwo-autocomplete-hint {
    font-size: 11px;
    color: #9CA3AF;
    display: block;
    margin-top: 4px;
}
.qiwo-selected-chip {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: #E0F2F1;
    border: 1px solid #0F9375;
    border-radius: 8px;
    padding: 6px 10px;
    font-size: 13px;
}
.qiwo-chip-clear {
    border: none;
    background: none;
    cursor: pointer;
    color: #0F9375;
    font-size: 16px;
    line-height: 1;
    padding: 0;
    font-weight: 700;
}
.qiwo-chip-clear:hover { color: #DC2626; }

/* Portal info banner */
.qiwo-portal-banner {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    background: #F0FDF4;
    border: 1px solid #A7F3D0;
    border-radius: 8px;
    padding: 10px 14px;
    font-size: 13px;
    color: #065F46;
    margin-bottom: 14px;
}
.qiwo-portal-banner svg { flex-shrink: 0; margin-top: 1px; }

/* Checkbox label */
.qiwo-checkbox-label {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    color: #374151;
    cursor: pointer;
}
.qiwo-checkbox-label input[type="checkbox"] {
    width: 16px;
    height: 16px;
    cursor: pointer;
    accent-color: #0F9375;
}

/* ═══════════════════════════════════════════════════════════════
   USUARIOS — EXTRAS
══════════════════════════════════════════════════════════════ */

/* Badge bloqueado */
.badge-usuario-bloqueado {
    background: #FEF3C7;
    color: #92400E;
    font-size: 10px;
    font-weight: 600;
    padding: 2px 7px;
    border-radius: 10px;
    display: inline-block;
    margin-top: 2px;
}

/* Tarjetas de opción "¿está presente?" — diálogo de registrar asistencia (Auxiliar) */
.qiwo-opcion-asistencia {
    border: 1.5px solid #E5E7EB;
    border-radius: 10px;
    padding: 10px 14px;
    cursor: pointer;
    transition: border-color 0.15s, background 0.15s;
}
.qiwo-opcion-asistencia:hover { border-color: #CBD5E1; }
.qiwo-opcion-si-activa { border-color: #0F9375; background: #F0FDF9; }
.qiwo-opcion-no-activa { border-color: #DC2626; background: #FEF2F2; }
body.qiwo-dark .qiwo-opcion-asistencia { border-color: rgba(255,255,255,0.1); }
body.qiwo-dark .qiwo-opcion-si-activa { background: rgba(15,147,117,0.12); }
body.qiwo-dark .qiwo-opcion-no-activa { background: rgba(220,38,38,0.12); }

/* Opciones excluyentes dentro de un modal — corregir vs. programar en Política de
   Acceso. Mismo criterio de color que las de asistencia: la elegida se tiñe entera
   en vez de llevar una franja lateral. */
.qiwo-opcion-lista { display: flex; flex-direction: column; gap: 8px; }
.qiwo-opcion {
    display: block;
    width: 100%;
    text-align: left;
    border: 1.5px solid #E5E7EB;
    border-radius: 10px;
    background: #FFFFFF;
    padding: 11px 14px;
    cursor: pointer;
    transition: border-color 0.15s, background 0.15s;
}
.qiwo-opcion:hover { border-color: #CBD5E1; }
.qiwo-opcion--activa { border-color: #0F9375; background: #F0FDF9; }
.qiwo-opcion-titulo {
    display: block;
    font-size: 14px;
    font-weight: 600;
    color: #111827;
    margin-bottom: 2px;
}
.qiwo-opcion--activa .qiwo-opcion-titulo { color: #0B6B55; }
.qiwo-opcion-desc {
    display: block;
    font-size: 12.5px;
    line-height: 1.5;
    color: #6B7280;
}
body.qiwo-dark .qiwo-opcion { border-color: rgba(255,255,255,0.1); background: transparent; }
body.qiwo-dark .qiwo-opcion--activa { background: rgba(15,147,117,0.12); border-color: #0F9375; }
body.qiwo-dark .qiwo-opcion-titulo { color: #E5E7EB; }
body.qiwo-dark .qiwo-opcion--activa .qiwo-opcion-titulo { color: #5EEAD4; }
body.qiwo-dark .qiwo-opcion-desc { color: #9CA3AF; }

/* Alcance del roster en un día mixto. Va inmediatamente bajo el aviso, antes de
   porcentajes, faltas y la lista: así queda claro qué alumnos representan todos
   esos números. Sigue siendo checkbox nativo, más familiar que un switch para
   una condición de vista y fiable con teclado, mouse y toque. */
.auxiliar-filtro-lectivo {
    display: grid;
    grid-template-columns: 18px minmax(0, 1fr) auto;
    align-items: center;
    gap: 10px;
    background: #F0FBF8;
    border: 1px solid #A7E3D4;
    border-radius: 9px;
    padding: 9px 12px;
    margin: 10px 0 12px;
    font-size: 13px;
    line-height: 1.4;
    color: #163A4A;
    cursor: pointer;
}
.auxiliar-filtro-lectivo:hover { border-color: #58C7B2; }
.auxiliar-filtro-lectivo input {
    width: 18px;
    height: 18px;
    margin: 0;
    accent-color: #0F9375;
    cursor: pointer;
}
.auxiliar-filtro-lectivo__texto { min-width: 0; font-weight: 700; }
.auxiliar-filtro-lectivo__alcance {
    color: #087A62;
    font-size: 12px;
    font-weight: 700;
    white-space: nowrap;
}
.auxiliar-filtro-lectivo--toda-sede {
    background: #F8FAFC;
    border-color: #D8E2EB;
}
.auxiliar-filtro-lectivo--toda-sede .auxiliar-filtro-lectivo__alcance { color: #526477; }
body.qiwo-dark .auxiliar-filtro-lectivo {
    background: rgba(255,255,255,0.04);
    border-color: rgba(255,255,255,0.10);
    color: #CBD5E1;
}
body.qiwo-dark .auxiliar-filtro-lectivo:hover { border-color: rgba(255,255,255,0.20); }
body.qiwo-dark .auxiliar-filtro-lectivo__texto { color: #E5E7EB; }
body.qiwo-dark .auxiliar-filtro-lectivo__alcance { color: #5EEAD4; }
body.qiwo-dark .auxiliar-filtro-lectivo--toda-sede .auxiliar-filtro-lectivo__alcance { color: #CBD5E1; }

/* Aviso de tarjetas a reponer, sobre el roster del Auxiliar. Superficie tintada
   completa, no franja lateral: el color ES el estado del bloque. Arranca colapsado
   porque no es una tarea del día — es un pendiente acumulado. */
.auxiliar-aviso-tarjetas {
    background: #FEFCE8;
    border: 1px solid #FDE68A;
    border-radius: 10px;
    margin-top: 14px;
    overflow: hidden;
}
.auxiliar-aviso-tarjetas-head {
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 11px 14px;
    font-size: 13px;
    line-height: 1.45;
    color: #854D0E;
    cursor: pointer;
}
.auxiliar-aviso-tarjetas-head > span:first-of-type { flex: 1; }
.auxiliar-aviso-tarjetas-toggle { font-size: 12px; opacity: .7; }
.auxiliar-aviso-tarjetas-lista {
    border-top: 1px solid #FDE68A;
    padding: 4px 14px 10px;
}
.auxiliar-aviso-tarjetas-item {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: 4px 12px;
    padding: 8px 0;
    border-bottom: 1px solid rgba(253,230,138,0.55);
}
.auxiliar-aviso-tarjetas-item:last-child { border-bottom: none; }
.auxiliar-aviso-tarjetas-nombre { font-size: 13px; font-weight: 600; color: #713F12; }
.auxiliar-aviso-tarjetas-sec {
    font-size: 12px; color: #A16207; display: block; margin-top: 1px;
}
.auxiliar-aviso-tarjetas-dato {
    font-size: 12px; color: #854D0E; text-align: right; display: flex;
    flex-direction: column; gap: 2px;
}
.auxiliar-aviso-tarjetas-nunca { font-weight: 700; color: #B91C1C; }
body.qiwo-dark .auxiliar-aviso-tarjetas {
    background: rgba(253,230,138,0.09); border-color: rgba(253,230,138,0.26);
}
body.qiwo-dark .auxiliar-aviso-tarjetas-head,
body.qiwo-dark .auxiliar-aviso-tarjetas-dato { color: #FDE68A; }
body.qiwo-dark .auxiliar-aviso-tarjetas-lista { border-top-color: rgba(253,230,138,0.26); }
body.qiwo-dark .auxiliar-aviso-tarjetas-item { border-bottom-color: rgba(253,230,138,0.16); }
body.qiwo-dark .auxiliar-aviso-tarjetas-nombre { color: #FEF3C7; }
body.qiwo-dark .auxiliar-aviso-tarjetas-sec { color: #D4B483; }
body.qiwo-dark .auxiliar-aviso-tarjetas-nunca { color: #FCA5A5; }

/* Tiempo que una solicitud lleva esperando aprobación. Solo color de texto, sin
   fondo ni franja: va dentro de una celda que ya tiene la fecha encima, y teñir
   la fila entera por antigüedad haría ilegible el resto. */
.qiwo-espera-media   { color: #B45309; }
.qiwo-espera-alta    { color: #C2410C; }
.qiwo-espera-critica { color: #DC2626; }
body.qiwo-dark .qiwo-espera-media   { color: #FCD34D; }
body.qiwo-dark .qiwo-espera-alta    { color: #FDBA74; }
body.qiwo-dark .qiwo-espera-critica { color: #FCA5A5; }

/* Aviso dentro de un modal: algo que se puede hacer, pero conviene leer antes. */
.qiwo-modal-warning {
    display: flex;
    gap: 9px;
    font-size: 12.5px;
    line-height: 1.55;
    color: #854D0E;
    background: #FEFCE8;
    border: 1px solid #FDE68A;
    border-radius: 8px;
    padding: 11px 13px;
}
body.qiwo-dark .qiwo-modal-warning {
    color: #FDE68A;
    background: rgba(253,230,138,0.10);
    border-color: rgba(253,230,138,0.28);
}

/* Footer que además puede mostrar el error del guardado, apilado sobre los botones:
   arriba del formulario quedaba fuera de la vista al estar el modal scrolleado. */
.qiwo-modal-footer--con-error {
    flex-direction: column;
    align-items: stretch;
    gap: 0;
}

/* Badge "Debe cambiar contraseña" */
.qiwo-badge-warn {
    background: #FEF9C3;
    color: #854D0E;
    font-size: 10px;
    font-weight: 600;
    padding: 2px 7px;
    border-radius: 10px;
    display: inline-block;
    margin-top: 2px;
}

/* Historial de hoy (timeline) — modal de detalle Auxiliar */
.qiwo-historial {
    display: flex;
    flex-direction: column;
    margin-bottom: 12px;
    border-left: 2px solid #E5E7EB;
    padding-left: 14px;
}
.qiwo-historial-item { position: relative; padding-bottom: 14px; }
.qiwo-historial-item:last-child { padding-bottom: 0; }
.qiwo-historial-dot {
    position: absolute;
    left: -19px;
    top: 3px;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: #94A3B8;
    border: 2px solid #fff;
}
.qiwo-historial-dot.dot-puntual  { background: #0F9375; }
/* #D97706 era un ámbar anaranjado que no es de la paleta: su vecino "puntual" ya
   usaba el acento oficial (#0F9375) y este se había quedado atrás (09/09/2026). */
.qiwo-historial-dot.dot-tardanza { background: #CA8A04; }
.qiwo-historial-dot.dot-salida   { background: #2563EB; }
/* FUERA DE HORARIO al naranja (04/09/2026). Acá era rojo Y compartía regla con
   DENEGADO: en el mismo timeline, "llegó tardísimo" y "el lector la rechazó"
   eran dos puntos idénticos, y ninguno de los dos coincidía con el naranja de
   la tarjeta del alumno. Tres significados, un solo color. */
.qiwo-historial-dot.dot-fuera    { background: #EA580C; }
.qiwo-historial-dot.dot-anulado  { background: #64748B; }
.qiwo-historial-dot.dot-falta    { background: #991B1B; }
/* Faltaban los dos (04/09/2026): sin regla propia caían al punto sin color, así
   que un "Repetido" y un "Registro excepcional" se veían igual entre sí y igual
   que cualquier estado no mapeado. Repetido va gris medio -- es ruido del lector,
   no un problema; Registro excepcional toma el mismo turquesa que su tarjeta. */
.qiwo-historial-dot.dot-duplicado { background: #94A3B8; }
.qiwo-historial-dot.dot-asistio   { background: #0F766E; }
/* Los dos del período de excepción (11/09/2026). Mismos acentos que ya usan sus
   estados en la paleta del 04/09, no colores nuevos: el lila es el acento de
   "Falta justificada" y el gris medio el de "día no hábil" -- que es literalmente
   lo que un día NO_APLICA significa para ese alumno. */
.qiwo-historial-dot.dot-justificado { background: #7C3AED; }
.qiwo-historial-dot.dot-nohabil     { background: #94A3B8; }
/* Rombo, igual que en el punto del resumen de aula: no es que el alumno no
   vino, es que la tarjeta o el lector fallaron -- y eso se resuelve revisando
   el lector, no llamando a la casa. */
.qiwo-historial-dot.dot-denegado {
    background: #DC2626;
    border-radius: 2px;
    transform: rotate(45deg);
}
.qiwo-historial-edicion {
    margin-top: 4px;
    padding: 6px 8px;
    background: #FEF3C7;
    border-radius: 6px;
    font-size: 12px;
    color: #92400E;
}
/* Anulación: mismo formato que "corrigió la hora" pero en rojo -- es una
   acción más seria (invalida la marcación entera, no solo su hora), 24/08/2026. */
.qiwo-historial-edicion.qiwo-historial-anulacion { background: #FEE2E2; color: #991B1B; }
.qiwo-log-auditoria {
    margin-top: 4px;
    padding: 6px 8px;
    background: #F1F5F9;
    border-radius: 6px;
}
.qiwo-log-auditoria p:first-child { margin-top: 0 !important; }
.qiwo-log-auditoria p:last-child { margin-bottom: 0 !important; }
/* padding 4px 0 daba un blanco de toque de ~24px de alto y CERO de ancho extra.
   Estos botones son "Corregir hora", "Corregir motivo" y "Anular" dentro de la
   hoja de detalle del Auxiliar -- la pantalla que más se usa en celular durante
   la hora de ingreso, y donde uno de los tres es destructivo. Se sube a 40px de
   alto real, que es el mínimo cómodo con el pulgar (30/08/2026). */
.qiwo-link-btn {
    background: none;
    border: none;
    color: #2563EB;
    font-size: 12px;
    font-weight: 600;
    cursor: pointer;
    padding: 10px 10px;
    margin: -10px -10px;   /* el área crece hacia afuera: no mueve el layout */
    min-height: 40px;
    text-decoration: underline;
}
.qiwo-link-btn:hover { color: #1D4ED8; }
.qiwo-link-btn.qiwo-link-btn-peligro { color: #DC2626; }
.qiwo-link-btn.qiwo-link-btn-peligro:hover { color: #991B1B; }
.qiwo-btn-primary.qiwo-btn-peligro { background: #DC2626; }
.qiwo-btn-primary.qiwo-btn-peligro:hover:not(:disabled) { background: #B91C1C; }

/* "tú" pill */
.qiwo-tu-cuenta {
    display: inline-block;
    margin-left: 6px;
    background: #E0F2FE;
    color: #0369A1;
    font-size: 10px;
    font-weight: 700;
    padding: 1px 6px;
    border-radius: 8px;
    vertical-align: middle;
}

/* Rol chips */
.qiwo-rol-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
}
.qiwo-rol-chip {
    display: inline-block;
    font-size: 10px;
    font-weight: 700;
    padding: 2px 7px;
    border-radius: 8px;
    background: #E5E7EB;
    color: #374151;
    text-transform: uppercase;
    letter-spacing: 0.03em;
}
.qiwo-rol-chip.rol-director {
    background: #EDE9FE;
    color: #5B21B6;
}
.qiwo-rol-chip.rol-administrativo {
    background: #DBEAFE;
    color: #1E40AF;
}
.qiwo-rol-chip.rol-superadmin {
    background: #FFE4E6;
    color: #9F1239;
}
.qiwo-rol-chip.rol-tutor {
    background: #D1FAE5;
    color: #065F46;
}
.qiwo-rol-chip.rol-auxiliar {
    background: #FEF3C7;
    color: #92400E;
}

/* ── AUXILIAR: contador general de la sede (27/08/2026) ──────────────────── */
/* Tarjeta espaciosa -- tablet/PC (≥768px). Mismo bosquejo que Jordy aprobó
   primero; la compacta de abajo se agregó después específicamente para no
   desperdiciar alto de pantalla en celular. Oculta por defecto, la muestra
   el media query de abajo. */
.auxiliar-resumen-general-tarjeta {
    display: none;
    background: #fff;
    border: 0.5px solid #E5E7EB;
    border-radius: 12px;
    padding: 14px 16px;
    margin-bottom: 16px;
}
.auxiliar-resumen-general-tarjeta-fila {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin-bottom: 8px;
}
.auxiliar-resumen-general-tarjeta-label { font-size: 13px; color: #64748B; font-weight: 600; }
.auxiliar-resumen-general-tarjeta-pct   { font-size: 20px; color: #0F9375; font-weight: 800; }
.auxiliar-resumen-general-tarjeta-bar {
    display: block;
    width: 100%;
    height: 8px;
    appearance: none;
    border: 0;
    border-radius: 99px;
    overflow: hidden;
    background: #F1F5F9;
    margin-bottom: 6px;
}
.auxiliar-resumen-general-tarjeta-bar::-webkit-progress-bar { background: #F1F5F9; }
.auxiliar-resumen-general-tarjeta-bar::-webkit-progress-value { background: #0F9375; }
.auxiliar-resumen-general-tarjeta-bar::-moz-progress-bar { background: #0F9375; }
.auxiliar-resumen-general-tarjeta-cant { font-size: 12px; color: #94A3B8; }
body.qiwo-dark .auxiliar-resumen-general-tarjeta { background: #1A2535; border-color: rgba(255,255,255,.08); }
body.qiwo-dark .auxiliar-resumen-general-tarjeta-label,
body.qiwo-dark .auxiliar-resumen-general-tarjeta-cant { color: #94A3B8; }
body.qiwo-dark .auxiliar-resumen-general-tarjeta-bar { background: rgba(255,255,255,.08); }
body.qiwo-dark .auxiliar-resumen-general-tarjeta-bar::-webkit-progress-bar { background: rgba(255,255,255,.08); }

/* Fila compacta -- celular (<768px), mismo corte donde ya aparece el menú
   hamburguesa (admin-hamburger, ver @media max-width:767px de admin-sidebar). */
.auxiliar-resumen-general {
    display: none;
    align-items: center;
    gap: 8px;
    padding: 8px 12px;
    background: #F0FDF9;
    border-radius: 10px;
    margin-bottom: 10px;
    font-size: 12px;
    color: #64748B;
}
.auxiliar-resumen-general strong {
    flex-shrink: 0;
    font-size: 15px;
    font-weight: 800;
    color: #0F9375;
}
.auxiliar-resumen-general progress {
    flex: 1;
    min-width: 40px;
    height: 7px;
    appearance: none;
    border: 0;
    border-radius: 99px;
    overflow: hidden;
    background: #E5E7EB;
}
.auxiliar-resumen-general progress::-webkit-progress-bar { background: #E5E7EB; }
.auxiliar-resumen-general progress::-webkit-progress-value { background: #0F9375; }
.auxiliar-resumen-general progress::-moz-progress-bar { background: #0F9375; }
.auxiliar-resumen-general span { flex-shrink: 0; white-space: nowrap; }
body.qiwo-dark .auxiliar-resumen-general {
    background: rgba(15,147,117,.14);
    color: #94A3B8;
}
body.qiwo-dark .auxiliar-resumen-general progress { background: rgba(255,255,255,.08); }
body.qiwo-dark .auxiliar-resumen-general progress::-webkit-progress-bar { background: rgba(255,255,255,.08); }

@media (min-width: 768px) {
    .auxiliar-resumen-general-tarjeta { display: block; }
}
@media (max-width: 767px) {
    .auxiliar-resumen-general { display: flex; }
}

/* ── AUXILIAR: resumen y grilla de asistencia en vivo ────────────────────── */
.auxiliar-resumen-principal {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    margin-bottom: 12px;
}
.auxiliar-resumen {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    margin-bottom: 20px;
}
.auxiliar-resumen-chip {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 10px 16px;
    border-radius: 10px;
    font-size: 13px;
    font-weight: 600;
    background: #F9FAFB;
    color: #374151;
}
.auxiliar-resumen-num {
    font-size: 18px;
    font-weight: 800;
}
/* Antes llevaban franja lateral de color como segundo canal de lectura (Pendiente,
   Fuera y Otros quedaban muy cerca en luminancia). Ya no hace falta: Fuera se
   unifico en morado (ver mas abajo) y cada chip tiene un tono de fondo propio y
   suficientemente distinto -- la franja aportaba poco y sumaba al aspecto de
   "borde de acento" que se pidio quitar en toda la app (19/08/2026). */
.auxiliar-resumen-chip.resumen-puntual   { background: #D1FAE5; color: #065F46; }
.auxiliar-resumen-chip.resumen-tardanza  { background: #FEF3A0; color: #854D0E; }
.auxiliar-resumen-chip.resumen-pendiente { background: #F3F4F6; color: #374151; }
.auxiliar-resumen-chip.resumen-falta     { background: #FCB3B3; color: #7F1D1D; }
/* FUERA_HORARIO unificado en morado en toda la app: antes era gris aca, rojo en
   la tabla del apoderado y ambar en el portal del profesor. */
.auxiliar-resumen-chip.resumen-fuera     { background: #FDC58B; color: #7C2D12; }
/* .resumen-otros no existia: el chip caia al fondo base y era ilegible como
   categoria propia. Agrupa SALIDA, DENEGADO, ASISTIO y SIN_POLITICA. */
.auxiliar-resumen-chip.resumen-otros     { background: #E2E8F0; color: #334155; }
.auxiliar-resumen-chip.resumen-presente  { background: #DBEAFE; color: #1D4ED8; }
.auxiliar-resumen-chip.resumen-sinmarcar { background: #F3F4F6; color: #374151; }
/* Chips exclusivos de Actividad del día (27/08/2026): ahí el resultado es de la
   marcación (evento), no del alumno -- SALIDA/DENEGADO/DUPLICADO/ANULADO son
   resultados reales que Dashboard no necesita como chip propio. Mismos colores
   que .qiwo-estado-* (fuente única de verdad del sistema de color). */
.auxiliar-resumen-chip.resumen-salida    { background: #DBEAFE; color: #1D4ED8; }
.auxiliar-resumen-chip.resumen-denegado  { background: #FEE2E2; color: #991B1B; box-shadow: inset 0 0 0 1.5px #DC2626; }
.auxiliar-resumen-chip.resumen-duplicado { background: #E2E8F0; color: #334155; }
.auxiliar-resumen-chip.resumen-anulado   { background: #E2E8F0; color: #475569; }

/* Celular (27/08/2026, pedido explícito de Jordy: "achicarlos para que quepan
   más, no tanto scroll"): en desktop los 6-7 chips ya entran en una sola fila
   con flex-wrap normal -- este ajuste es solo para pantallas angostas, donde
   antes cada chip ocupaba su propio ancho de contenido y el wrap quedaba
   irregular (2 por fila, 3 filas). Grid de 3 columnas fijas = más compacto y
   prolijo, mismo criterio que el grid 2x2 ya aplicado a qiwo-chips-motivo. */
@media (max-width: 480px) {
    .auxiliar-resumen-principal,
    .auxiliar-resumen {
        display: grid;
        grid-template-columns: repeat(3, 1fr);
        gap: 6px;
    }
    .auxiliar-resumen-chip {
        flex-direction: column;
        align-items: flex-start;
        gap: 2px;
        padding: 6px 8px;
        font-size: 11px;
    }
    .auxiliar-resumen-num { font-size: 15px; }
}

/* Chips como filtro (26/08/2026): clicables, con estado activo marcado por anillo
   -- no por franja lateral, mismo criterio de "tinte de superficie" del resto. */
.auxiliar-resumen-chip[role="button"] { cursor: pointer; border: 2px solid transparent; }
.auxiliar-resumen-chip[role="button"]:hover { filter: brightness(0.97); }
.auxiliar-resumen-chip--activo { border-color: currentColor; }
.auxiliar-resumen-chip-denegado {
    display: inline-flex; align-items: center; justify-content: center;
    min-width: 16px; height: 16px; padding: 0 4px; margin-left: 2px;
    border-radius: 999px; background: #DC2626; color: #fff;
    font-size: 10px; font-weight: 800; line-height: 16px;
}

.auxiliar-buscador {
    display: flex;
    align-items: center;
    gap: 8px;
    max-width: 380px;
    margin-bottom: 4px;
    padding: 0 12px;
    background: #FFFFFF;
    border: 1px solid #E5E7EB;
    border-radius: 10px;
    color: #94A3B8;
}
.auxiliar-buscador input {
    flex: 1;
    border: none;
    outline: none;
    background: transparent;
    padding: 10px 0;
    font-size: 13px;
    font-family: inherit;
    color: #0B2947;
}

/* Fila que agrupa buscador + filtro de sección + limpiar -- antes el buscador
   vivía solo; se sumó el filtro y la X (24/08/2026, pedido de Jordy). */
.auxiliar-buscador-fila {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-bottom: 4px;
}
.auxiliar-buscador-fila .auxiliar-buscador {
    flex: 1;
    min-width: 220px;
    margin-bottom: 0;
}
.auxiliar-seccion-filtro {
    max-width: 220px;
    width: auto;
    flex: 0 0 auto;
}
/* Filtros activos -- idea de Ergatis (27/08/2026): cada filtro combinado
   (búsqueda/sección/estado) queda visible como su propio chip, con su propia X
   para quitarlo, en vez de un solo botón "limpiar todo" ciego que no dice qué
   hay aplicado. Reemplaza al viejo .auxiliar-buscador-limpiar (un solo ícono
   sin texto, ya no se usa). */
.auxiliar-filtros-activos {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    margin-bottom: 12px;
}
.auxiliar-filtros-activos-label {
    font-size: 12px;
    font-weight: 600;
    color: #64748B;
}
.auxiliar-filtro-pill {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 5px 6px 5px 12px;
    border-radius: 999px;
    background: #EFF6FF;
    color: #1D4ED8;
    font-size: 12px;
    font-weight: 600;
    max-width: 260px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.auxiliar-filtro-pill button {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 18px;
    height: 18px;
    flex: 0 0 auto;
    border: none;
    border-radius: 50%;
    background: rgba(29,78,216,.12);
    color: inherit;
    cursor: pointer;
}
.auxiliar-filtro-pill button:hover { background: rgba(29,78,216,.24); }
.auxiliar-filtros-limpiar-todo {
    border: none;
    background: none;
    color: #64748B;
    font-size: 12px;
    font-weight: 600;
    text-decoration: underline;
    cursor: pointer;
    padding: 4px 0;
}
.auxiliar-filtros-limpiar-todo:hover { color: #DC2626; }

.auxiliar-aula {
    margin-top: 16px;
    overflow: hidden;
    background: #FFFFFF;
    border: 1px solid #E5E7EB;
    border-radius: 12px;
}
.auxiliar-aula-header {
    display: grid;
    grid-template-columns: minmax(155px, 1fr) minmax(260px, auto) minmax(190px, 1fr);
    gap: 14px;
    align-items: center;
    min-height: 54px;
    padding: 8px 14px;
    background: #FAFAFA;
    border-bottom: 1px solid #E5E7EB;
}
.auxiliar-aula-titulo,
.auxiliar-aula-progreso,
.auxiliar-aula-estados,
.auxiliar-aula-estado,
.auxiliar-card,
.auxiliar-card-estado {
    display: flex;
    align-items: center;
}
.auxiliar-aula-titulo {
    min-width: 0;
    gap: 7px;
    align-items: flex-start;
    color: #0B2947;
    font-size: 13px;
    font-weight: 800;
}
.auxiliar-aula-titulo svg.auxiliar-aula-chevron { margin-top: 2px; }
.auxiliar-aula-chevron { flex: 0 0 auto; color: #64748B; }
.auxiliar-aula-titulo-texto {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}
.auxiliar-aula-titulo-texto > span:first-child {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.auxiliar-aula-politica {
    font-size: 11px;
    font-weight: 400;
    color: #0F9375;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.auxiliar-aula-progreso {
    gap: 8px;
    color: #64748B;
    font-size: 12px;
    white-space: nowrap;
}
/* "· N no cursan" (11/09/2026): explica por qué el denominador de la barra no
   es el total de matriculados. Va en el mismo gris del texto que acompaña, un
   punto más tenue -- es una aclaración, no un estado que haya que atender. */
.auxiliar-aula-exentos {
    color: #94A3B8;
    margin-left: 2px;
}
body.qiwo-dark .auxiliar-aula-exentos { color: #7C8BA1; }
.auxiliar-aula-progreso progress {
    width: 82px;
    height: 7px;
    appearance: none;
    border: 0;
    border-radius: 99px;
    overflow: hidden;
    background: #E5E7EB;
}
.auxiliar-aula-progreso progress::-webkit-progress-bar { background: #E5E7EB; }
.auxiliar-aula-progreso progress::-webkit-progress-value { background: #0F9375; }
.auxiliar-aula-progreso progress::-moz-progress-bar { background: #0F9375; }
.auxiliar-aula-progreso strong { color: #0B2947; font-size: 12px; }
.auxiliar-aula-estados {
    justify-content: flex-end;
    flex-wrap: wrap;
    gap: 6px 10px;
}
.auxiliar-aula-estado {
    gap: 4px;
    color: #475569;
    font-size: 11px;
    line-height: 1;
    white-space: nowrap;
}
.auxiliar-aula-estado-punto {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: #94A3B8;
}
.auxiliar-aula-estado.estado-puntual .auxiliar-aula-estado-punto { background: #0F9375; }
/* Al acento oficial de tardanza, igual que el dot del historial (09/09/2026). */
.auxiliar-aula-estado.estado-tardanza .auxiliar-aula-estado-punto { background: #CA8A04; }
.auxiliar-aula-estado.estado-falta .auxiliar-aula-estado-punto { background: #E66A6A; }
/* FUERA DE HORARIO en naranja (04/09/2026). Estaba en gris: el mismo alumno se
   veía naranja en su tarjeta y gris en el resumen de su aula, dos pasos arriba
   en la misma pantalla. El gris además lo hacía parecer un estado neutro tipo
   "pendiente", cuando es el más grave que todavía cuenta como asistencia. */
.auxiliar-aula-estado.estado-fuera .auxiliar-aula-estado-punto { background: #EA580C; }
.auxiliar-aula-estado.estado-asistio .auxiliar-aula-estado-punto { background: #0F766E; }
/* Tarjeta rechazada se separa de FALTA por FORMA, no por color: en un punto de
   7px no cabe un anillo ni un ícono, pero un rombo sí se distingue de un
   círculo. Mismo recurso que usan los mapas de metro para las estaciones de
   transbordo -- no cambian de color, cambian de figura. */
.auxiliar-aula-estado.estado-denegado .auxiliar-aula-estado-punto {
    background: #DC2626;
    border-radius: 1px;
    transform: rotate(45deg);
}
.auxiliar-grid {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 8px;
    padding: 10px;
}
.auxiliar-card {
    position: relative;
    min-width: 0;
    height: 54px;
    gap: 8px;
    padding: 7px 8px 7px 12px;
    overflow: hidden;
    cursor: pointer;
    background: #FFFFFF;
    border: 1px solid #E5E7EB;
    border-radius: 10px;
    transition: border-color .15s, box-shadow .15s, transform .15s;
}
.auxiliar-card:hover {
    border-color: #94A3B8;
    box-shadow: 0 2px 6px rgba(15, 41, 71, .08);
    transform: translateY(-1px);
}
/* Selector de fecha junto al título "Asistencia en vivo" (27/08/2026, pedido
   explícito de Jordy: cambiador de fechas para ver días pasados, a la derecha
   del título -- reemplaza el subtítulo largo que había antes). */
.auxiliar-selector-fecha {
    display: flex;
    align-items: center;
    gap: 4px;
}
.auxiliar-selector-fecha button {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border: 1px solid #E5E7EB;
    border-radius: 8px;
    background: #FFFFFF;
    color: #64748B;
    cursor: pointer;
}
.auxiliar-selector-fecha button:hover:not(:disabled) { background: #F3F4F6; color: #0B2947; }
.auxiliar-selector-fecha button:disabled { opacity: .4; cursor: default; }
.auxiliar-selector-fecha-input {
    height: 28px;
    padding: 0 8px;
    border: 1px solid #E5E7EB;
    border-radius: 8px;
    background: #FFFFFF;
    color: #0B2947;
    font-size: 13px;
    font-family: inherit;
}
.auxiliar-selector-fecha-hoy {
    width: auto !important;
    padding: 0 10px !important;
    font-size: 12px;
    font-weight: 600;
    color: #2563EB !important;
    border-color: #BFDBFE !important;
    background: #EFF6FF !important;
}
.auxiliar-card-avatar {
    display: inline-flex;
    flex: 0 0 30px;
    width: 30px;
    height: 30px;
    align-items: center;
    justify-content: center;
    color: #475569;
    background: #F1F5F9;
    border-radius: 50%;
    font-size: 10px;
    font-weight: 800;
}
.auxiliar-card-info { min-width: 0; flex: 1 1 auto; }
.auxiliar-card-nombre {
    overflow: hidden;
    color: #0B2947;
    font-size: 13px;
    font-weight: 700;
    line-height: 16px;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.auxiliar-card-estado {
    min-width: 0;
    gap: 5px;
    margin-top: 3px;
    overflow: hidden;
    /* #334155 y no #64748B (04/09/2026). Medido sobre los fondos reales de las
       tarjetas: el gris anterior daba entre 2.49:1 y 3.43:1 según el estado,
       todos por debajo del mínimo AA de 4.5:1 para texto de este tamaño. Con
       este da 7.46:1. Es la línea de la hora y del motivo, o sea texto de 10px
       que la auxiliar lee en el celular, de pie en la puerta y con reflejo --
       el peor escenario posible para un gris flojo. */
    color: #334155;
    font-size: 10px;
    white-space: nowrap;
}
.auxiliar-card-badge {
    flex: 0 0 auto;
    padding: 2px 5px;
    border-radius: 4px;
    background: #F1F5F9;
    color: #475569;
    font-size: 10px;
    font-weight: 700;
}
.auxiliar-card-hora { overflow: hidden; text-overflow: ellipsis; }
/* Aparte del badge de estado (Puntual/Tardanza), no fundido con el texto gris
   de la hora -- antes usaba la misma clase que .auxiliar-card-hora y se perdía
   entre la hora y "Justificado" (24/08/2026, reclamo real de varias auxiliares:
   no se notaba que una marcación había sido puesta a mano y no por el lector). */
.auxiliar-card-badge-manual {
    display: inline-flex;
    flex: 0 0 auto;
    align-items: center;
    gap: 3px;
    padding: 2px 6px 2px 5px;
    border-radius: 4px;
    background: rgba(255,255,255,.8);
    border: 1px solid rgba(11,41,71,.3);
    color: #0B2947;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: .01em;
}
/* 30/10/2026: "Lectora" va más callado que "Manual": lo normal es marcar solo, lo manual es la excepción. */
.auxiliar-card-badge-manual.auxiliar-card-badge-lectora {
    background: transparent;
    border-color: rgba(11,41,71,.18);
    font-weight: 600;
    opacity: .85;
}
/* Origen de cada marca en el historial del alumno (Auxiliar). */
.auxiliar-origen-marca {
    display: inline-flex;
    align-items: center;
    gap: 3px;
    margin-right: 6px;
    padding: 1px 6px;
    border-radius: 4px;
    border: 1px solid rgba(11,41,71,.25);
    color: #0B2947;
    font-size: 11px;
    font-weight: 600;
    vertical-align: 1px;
}
body.qiwo-dark .auxiliar-origen-marca { border-color: rgba(255,255,255,.3); color: #E2E8F0; }
.auxiliar-card-detalle { flex: 0 0 auto; color: #94A3B8; }
/* Fondo tintado completo por estado (19/08/2026) -- reemplaza la franja lateral
   de 4px + fondo casi blanco de antes, que se leia como el "borde de acento"
   generico de un dashboard hecho por IA y exigia acercarse a los 4px para saber
   el estado. El tinte ahora es el mismo tono que ya usaba el avatar/badge (no
   se suma un color nuevo); avatar y badge pasan a un blanco semitransparente
   para no perderse contra el fondo mas saturado. Estructura sin cambios: solo
   color -- ver AuxiliarDashboard.razor:161-186. */
.auxiliar-card.estado-puntual {
    background: #D1FAE5;
    border-color: #A3DFC4;
}
.auxiliar-card.estado-puntual .auxiliar-card-avatar,
.auxiliar-card.estado-puntual .auxiliar-card-badge { background: rgba(255,255,255,.55); color: #065F46; }
.auxiliar-card.estado-tardanza {
    background: #FEF3A0;
    border-color: #F7E271;
}
.auxiliar-card.estado-tardanza .auxiliar-card-avatar,
.auxiliar-card.estado-tardanza .auxiliar-card-badge { background: rgba(255,255,255,.55); color: #854D0E; }
.auxiliar-card.estado-asistio {
    background: #99F6E4;
    border-color: #5EEAD4;
}
.auxiliar-card.estado-asistio .auxiliar-card-avatar,
.auxiliar-card.estado-asistio .auxiliar-card-badge { background: rgba(255,255,255,.55); color: #115E59; }
.auxiliar-card.estado-falta,
.auxiliar-card.estado-denegado {
    background: #FCB3B3;
    border-color: #F49494;
}
.auxiliar-card.estado-falta .auxiliar-card-avatar,
.auxiliar-card.estado-falta .auxiliar-card-badge {
    background: rgba(255,255,255,.55); color: #7F1D1D;
}
/* Justificado (02/09/2026): una FALTA con motivo ya registrado se tiñe cian
   en vez de rojo -- sigue siendo la misma ausencia real para el % de
   asistencia (el conteo de arriba no cambia), esto solo distingue de un
   vistazo cuáles ya están resueltas de cuáles siguen sin explicar. */
.auxiliar-card.estado-justificado {
    background: #DDD6FE;
    border-color: #BFB2FB;
}
.auxiliar-card.estado-justificado .auxiliar-card-avatar,
.auxiliar-card.estado-justificado .auxiliar-card-badge {
    background: rgba(255,255,255,.55); color: #5B21B6;
}
/* Anillo exclusivo de DENEGADO, igual que .qiwo-estado-denegado: sin el,
   DENEGADO y FALTA son pixel-identicos y la auxiliar no puede distinguir una
   tarjeta/lector que fallo de una ausencia real. Antes esta regla agrupaba
   por error el selector de FALTA junto al de DENEGADO -- FALTA tambien salia
   con el anillo, invisible en la tarjeta casi blanca de antes pero muy visible
   ahora que el fondo va saturado (corregido 19/08/2026). */
.auxiliar-card.estado-denegado .auxiliar-card-avatar,
.auxiliar-card.estado-denegado .auxiliar-card-badge {
    background: rgba(255,255,255,.55); color: #7F1D1D; box-shadow: inset 0 0 0 1.5px #DC2626;
}
/* FUERA_HORARIO al morado comun en toda la app -- antes el fondo de la tarjeta
   se quedaba gris mientras el badge ya era morado, dos tonos para un mismo
   estado dentro de la misma tarjeta. */
.auxiliar-card.estado-fuera {
    background: #FDC58B;
    border-color: #F8AC69;
}
.auxiliar-card.estado-fuera .auxiliar-card-avatar,
.auxiliar-card.estado-fuera .auxiliar-card-badge { background: rgba(255,255,255,.55); color: #7C2D12; }
.auxiliar-card.estado-pendiente,
.auxiliar-card.estado-sinpolitica {
    background: #EDF1F5;
    border-color: #D6DEE6;
}
.auxiliar-card.estado-pendiente .auxiliar-card-avatar,
.auxiliar-card.estado-pendiente .auxiliar-card-badge,
.auxiliar-card.estado-sinpolitica .auxiliar-card-avatar,
.auxiliar-card.estado-sinpolitica .auxiliar-card-badge { background: rgba(255,255,255,.55); color: #52606D; }
/* Defensivo: el roster nunca debería traer ANULADO como estado vigente (el SP
   ya lo excluye y recalcula Pendiente/Falta), pero si algún día llega, que se
   vea distinto y no se confunda con Falta o Pendiente. */
.auxiliar-card.estado-anulado {
    background: #E2E8F0;
    border-color: #CBD5E1;
}
.auxiliar-card.estado-anulado .auxiliar-card-avatar,
.auxiliar-card.estado-anulado .auxiliar-card-badge { background: rgba(255,255,255,.55); color: #475569; }
/* Mismo criterio para DUPLICADO: el SP del roster tambien lo excluye, pero el
   detalle del alumno si lo lista en su Historial. */
.auxiliar-card.estado-duplicado {
    background: #F1F5F9;
    border-color: #CBD5E1;
}
.auxiliar-card.estado-duplicado .auxiliar-card-avatar,
.auxiliar-card.estado-duplicado .auxiliar-card-badge { background: rgba(255,255,255,.6); color: #475569; }
/* ─────────────────────────────────────────────────────────────────────────
   ESTADOS DE ASISTENCIA — fuente unica de verdad (14/08/2026)
   Antes cada pantalla re-tipeaba sus hex inline: FUERA_HORARIO llego a tener
   5 colores distintos (morado, rojo, ambar, gris y gris pizarra) y SALIDA
   compartia el #EDE9FF del morado, asi que el padre no los distinguia.
   Reparto definitivo de tonos, uno por significado:
     verde=puntual  ambar=tardanza  MORADO=fuera de horario  AZUL=salida
     teal=asistio (dia no habil)    rojo=falta   gris rayado=dia no habil
   ───────────────────────────────────────────────────────────────────────── */
.qiwo-estado {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 11px;
    font-weight: 700;
    padding: 2px 8px;
    border-radius: 20px;
    white-space: nowrap;
}
/* Ícono dentro del badge (04/09/2026). "Repetido" y "Anulado" comparten el mismo
   gris a propósito -- los dos son ruido del día, no un problema del alumno -- así
   que lo que los separa es la forma, no el color: Repetido lleva el ícono de
   repetición, Anulado el tachado que ya tenía. Sirve además para daltonismo y
   para cazarlos de un vistazo en una tabla larga. */
.qiwo-estado > svg {
    width: 12px;
    height: 12px;
    flex: none;
}
/* ESCALA DE GRAVEDAD (04/09/2026) -- los cuatro estados que responden "¿llegó
   y a qué hora?" van en una progresión cálida continua, para que se lean como
   grados de lo mismo sin consultar leyenda:

       puntual → tardanza → fuera de horario → falta
       verde     amarillo   naranja            rojo

   Antes FUERA_HORARIO era lila, y el lila rompía la progresión: siendo un
   color frío en medio de una rampa cálida, no se leía como "peor que
   tardanza". Es el estado más grave que todavía cuenta como asistencia, así
   que tiene que verse casi como una falta, no como otra categoría.

   PUNTUAL se queda deliberadamente en el tono más suave de los cuatro pese a
   que los demás subieron de saturación: son ~204 de 340 tarjetas en un día
   normal. Si el verde grita, tapa a los 3 naranjas que son justamente los que
   la auxiliar necesita ver. El drama sube con la gravedad, no parejo.

   FALTA subió junto con el naranja a propósito: si el naranja se intensifica
   y el rojo se queda pálido, la escala se invierte y "casi falta" pesa más
   que "faltó". */
.qiwo-estado-puntual   { background: #D1FAE5; color: #065F46; }
.qiwo-estado-tardanza  { background: #FEF3A0; color: #854D0E; }
.qiwo-estado-fuera     { background: #FDC58B; color: #7C2D12; }
.qiwo-estado-falta     { background: #FCB3B3; color: #7F1D1D; }

/* FUERA DE LA ESCALA -- no son grados de gravedad, son otra cosa. */
.qiwo-estado-salida    { background: #DBEAFE; color: #1D4ED8; }
.qiwo-estado-asistio   { background: #99F6E4; color: #115E59; }
/* Justificado pasa de cian a lila (04/09/2026). El cian se eligió en su
   momento PARA no chocar con el azul de SALIDA, y en la práctica chocaba
   igual: dos tonos fríos y claros que a un metro de la pantalla son el mismo.
   Lo detectó Jordy mirando la grilla real. El lila queda libre justamente
   porque FUERA_HORARIO se fue al naranja, y contra el azul sí se distingue.
   Sigue siendo el único estado que no sale de una MarcacionAcceso sino de
   JustificacionAsistencia (el alumno no vino, pero el colegio ya aceptó por
   qué), y sigue sin contar como asistencia en el %. */
.qiwo-estado-justificado { background: #DDD6FE; color: #5B21B6; }
.qiwo-estado-neutro    { background: #F1F5F9; color: #64748B; }
/* DENEGADO comparte la familia roja del kiosco (es el "no pasaste" universal),
   pero lleva anillo para no confundirse con FALTA en una lista: no es que el
   alumno no vino, es que la tarjeta o el lector fallaron. Hoy hay 222 rechazos
   concentrados en 5 alumnos y eran invisibles por verse igual que una falta. */
.qiwo-estado-denegado {
    /* Sube con FALTA (04/09/2026): si el rojo de falta se intensifica y este se
       queda pálido, un rechazo del lector pesa menos que una inasistencia, que
       es al revés de lo que significa. El anillo lo sigue separando de FALTA. */
    background: #FCB3B3;
    color: #7F1D1D;
    box-shadow: inset 0 0 0 1.5px #DC2626;
}
/* Anulado: no es un rechazo (DENEGADO) ni una falta -- es que la fila misma
   quedó invalidada por un humano. Gris propio, distinto de FALTA/DENEGADO. */
.qiwo-estado-anulado {
    background: #E2E8F0;
    color: #475569;
    text-decoration: line-through;
}
/* Duplicado: NO es un rechazo (no comparte el rojo de DENEGADO) -- es solo una
   marcación repetida dentro de la ventana anti-duplicado. Gris neutro, mismo
   valor que ya usaba .badge-duplicado (Admin) y el kiosco (.res-duplicado) --
   antes "Actividad del día" lo pintaba rojo por error, como si fuera un
   rechazo (27/08/2026, hallazgo de Jordy). */
.qiwo-estado-duplicado {
    background: #E2E8F0;
    color: #334155;
}
/* Rayado: distingue el dia no habil del neutro sin gastar un tono, y se lee
   sin depender del color (daltonismo). */
.qiwo-estado-nohabil {
    background: repeating-linear-gradient(
        45deg, #F1F5F9, #F1F5F9 4px, #E2E8F0 4px, #E2E8F0 8px);
    color: #475569;
}
body.qiwo-dark .qiwo-estado-puntual  { background: rgba(16,185,129,.18);  color: #6EE7B7; }
/* Misma escala en oscuro: el naranja tiene que quedar entre el amarillo y el
   rojo también acá, o la progresión solo funciona de día. */
body.qiwo-dark .qiwo-estado-tardanza { background: rgba(234,179,8,.22);   color: #FDE68A; }
body.qiwo-dark .qiwo-estado-fuera    { background: rgba(234,88,12,.26);   color: #FDC58B; }
body.qiwo-dark .qiwo-estado-salida   { background: rgba(37,99,235,.22);   color: #93C5FD; }
body.qiwo-dark .qiwo-estado-asistio  { background: rgba(20,184,166,.30);  color: #5EEAD4; }
body.qiwo-dark .qiwo-estado-falta    { background: rgba(220,38,38,.26);   color: #FCB3B3; }
body.qiwo-dark .qiwo-estado-justificado { background: rgba(124,58,237,.24); color: #C4B5FD; }
body.qiwo-dark .qiwo-estado-neutro   { background: rgba(100,116,139,.20); color: #CBD5E1; }
body.qiwo-dark .qiwo-estado-denegado {
    background: rgba(220,38,38,.20); color: #FCB3B3;
    box-shadow: inset 0 0 0 1.5px rgba(248,113,113,.75);
}
body.qiwo-dark .qiwo-estado-anulado { background: rgba(100,116,139,.22); color: #CBD5E1; }
body.qiwo-dark .qiwo-estado-duplicado { background: rgba(156,163,175,.18); color: #E2E8F0; }
body.qiwo-dark .qiwo-estado-nohabil {
    background: repeating-linear-gradient(
        45deg, rgba(100,116,139,.16), rgba(100,116,139,.16) 4px,
               rgba(148,163,184,.24) 4px, rgba(148,163,184,.24) 8px);
    color: #CBD5E1;
}

/* Banner de estado del sheet de detalle del alumno. El color viene de
   .qiwo-estado-* (arriba), esto solo define layout. (27/08/2026: la fila de
   acciones rápidas y el sub "DNI · Código" salieron del markup -- la acción
   pendiente ahora es la CTA pegajosa de abajo y DNI/grado van en el
   encabezado del sheet; se borran esas dos clases muertas.) */
.qiwo-detalle-estado {
    border-radius: var(--radius, 8px);
    padding: 10px 12px;
    margin-bottom: 10px;
    font-size: 14px;
}
/* Tabs del sheet de detalle como segmented control (27/08/2026) -- antes texto con
   subrayado de ~30px de alto, casi imposible de atinar en táctil. Estas clases solo
   las usa el detalle del alumno del portal Auxiliar (verificado 27/08/2026). */
.qiwo-detalle-tabs {
    display: grid;
    grid-auto-flow: column;
    grid-auto-columns: 1fr;
    gap: 4px;
    padding: 4px;
    background: #F1F5F9;
    border-radius: 12px;
    margin-bottom: 14px;
}
.qiwo-detalle-tab {
    background: none;
    border: none;
    border-radius: 9px;
    min-height: 40px;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 8px 10px;
    font-size: 13px;
    font-weight: 700;
    color: #64748B;
    cursor: pointer;
}
.qiwo-detalle-tab:hover { color: #0F9375; }
.qiwo-detalle-tab-activo {
    background: #fff;
    color: #0B2947;
    box-shadow: 0 1px 3px rgba(15,23,42,.12);
}
.qiwo-detalle-tab-activo:hover { color: #0B2947; }
body.qiwo-dark .qiwo-detalle-tabs { background: rgba(255,255,255,.06); }
body.qiwo-dark .qiwo-detalle-tab { color: #94A3B8; }
body.qiwo-dark .qiwo-detalle-tab:hover { color: #34D399; }
body.qiwo-dark .qiwo-detalle-tab-activo { background: #0F1923; color: #E2E8F0; box-shadow: none; }
body.qiwo-dark .qiwo-detalle-tab-activo:hover { color: #E2E8F0; }

/* Aviso de dia no habil en el portal del auxiliar (y reusado por Tutor). Informativo,
   no de alarma: no paso nada malo, simplemente no hay clases. El rayado de fondo ya
   carga el significado -- nunca una franja lateral aislada encima (regla del proyecto:
   eso lee como "dashboard genérico hecho por IA", ver .comunicado-card.comunicado-urgente
   arriba, mismo criterio aplicado acá 29/08/2026 tras hallazgo de Jordy). */
.auxiliar-aviso-nohabil {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 16px;
    margin-bottom: 16px;
    border-radius: 10px;
    border: 1px solid #CBD5E1;
    background: repeating-linear-gradient(
        45deg,
        #F1F5F9, #F1F5F9 6px,
        #E7EDF3 6px, #E7EDF3 12px
    );
    color: #334155;
}
.auxiliar-aviso-nohabil svg { flex: none; color: #64748B; }
.auxiliar-aviso-nohabil strong { display: block; font-size: 14px; font-weight: 700; }
.auxiliar-aviso-nohabil span   { font-size: 13px; color: #52606D; }
body.qiwo-dark .auxiliar-aviso-nohabil {
    background: rgba(100, 116, 139, .14);
    border-color: rgba(148, 163, 184, .32);
    color: #E2E8F0;
}
body.qiwo-dark .auxiliar-aviso-nohabil span { color: #CBD5E1; }

/* Confirmación de "Enviar aviso al apoderado" (usada en Récord de asistencia --
   la alerta grande que vivía en "Asistencia en vivo" se quitó el 28/08/2026,
   pedido explícito de Jordy, y se convirtió en el badge .auxiliar-nav-badge del
   menú). */
.auxiliar-alerta-racha-confirm {
    display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 12px;
}

/* ── Récord de asistencia (Portal Auxiliares, 28/08/2026) ────────────────────
   Tinte de superficie completo por nivel -- nunca franja/borde lateral aislado
   (preferencia explícita de Jordy, ver skill comparativo). Mismos 3 colores que
   .qiwo-estado-falta/tardanza/neutro, para que "rojo" siga significando lo mismo
   en toda la app. */
.auxiliar-record-chips { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 16px; }
.auxiliar-record-chip {
    display: flex; align-items: center; gap: 8px; padding: 10px 16px;
    border-radius: 10px; border: 2px solid transparent; cursor: pointer;
    font-size: 13px; background: #F1F5F9; color: #475569;
}
.auxiliar-record-chip .auxiliar-record-chip-num { font-size: 16px; font-weight: 700; }
.auxiliar-record-chip.nivel-riesgo      { background: #FEE2E2; color: #991B1B; }
.auxiliar-record-chip.nivel-media       { background: #FEF3C7; color: #92400E; }
.auxiliar-record-chip.nivel-observacion { background: #F1F5F9; color: #475569; }
.auxiliar-record-chip.nivel-perfecto    { background: #D1FAE5; color: #065F46; }
.auxiliar-record-chip--activo { border-color: currentColor; }
.auxiliar-record-chip:hover { filter: brightness(0.97); }

.auxiliar-record-card {
    display: flex; flex-direction: column; gap: 0; padding: 14px 16px;
    border-radius: 12px; margin-bottom: 10px; cursor: pointer;
    background: #F8FAFC; border: 1px solid rgba(15,23,42,.06);
}
.auxiliar-record-card.nivel-riesgo      { background: #FEE2E2; border-color: rgba(153,27,27,.12); }
.auxiliar-record-card.nivel-media       { background: #FEF3C7; border-color: rgba(146,64,14,.12); }
.auxiliar-record-card.nivel-observacion { background: #F1F5F9; border-color: rgba(71,85,105,.10); }
.auxiliar-record-card.nivel-perfecto    { background: #D1FAE5; border-color: rgba(6,95,70,.12); }
.auxiliar-record-card-fila { display: flex; align-items: center; gap: 12px; }
.auxiliar-record-card-avatar-wrap { position: relative; flex-shrink: 0; }
.auxiliar-record-card-avatar {
    width: 36px; height: 36px; border-radius: 50%; flex-shrink: 0;
    background: rgba(255,255,255,.65); display: flex; align-items: center;
    justify-content: center; font-weight: 700; font-size: 13px;
}
/* Punto de "notificación leída" (28/08/2026) -- desaparece solo al abrir el
   detalle del alumno, reaparece si vuelve a faltar después. */
.auxiliar-record-card-nuevo {
    position: absolute; top: -2px; right: -2px; width: 10px; height: 10px;
    border-radius: 50%; background: #DC2626; border: 2px solid #fff;
}
body.qiwo-dark .auxiliar-record-card-nuevo { border-color: #1A2535; }
.auxiliar-record-card-info { flex: 1; min-width: 0; }
.auxiliar-record-card-nombre {
    margin: 0; font-weight: 600; font-size: 14px; white-space: nowrap;
    overflow: hidden; text-overflow: ellipsis; color: #1E293B;
}
.auxiliar-record-card-metrica { margin: 0; font-size: 12px; }
.auxiliar-record-card.nivel-riesgo      .auxiliar-record-card-metrica { color: #991B1B; }
.auxiliar-record-card.nivel-media       .auxiliar-record-card-metrica { color: #92400E; }
.auxiliar-record-card.nivel-observacion .auxiliar-record-card-metrica { color: #475569; }
.auxiliar-record-card.nivel-perfecto    .auxiliar-record-card-metrica { color: #065F46; }
.auxiliar-record-card-chevron { flex-shrink: 0; color: #94A3B8; }
.auxiliar-record-vacio { color: #94A3B8; font-size: 13px; padding: 24px 0; text-align: center; }
.auxiliar-record-card-motivo {
    margin: 3px 0 0; font-size: 11px; font-weight: 600; opacity: .8;
}
.auxiliar-record-card.nivel-riesgo      .auxiliar-record-card-motivo { color: #991B1B; }
.auxiliar-record-card.nivel-media       .auxiliar-record-card-motivo { color: #92400E; }
.auxiliar-record-card.nivel-observacion .auxiliar-record-card-motivo { color: #475569; }
.auxiliar-record-card.nivel-perfecto    .auxiliar-record-card-motivo { color: #065F46; }
/* Qué señal disparó el nivel (01/09/2026) -- color fijo por señal, no por nivel:
   RACHA y AÑO_LECTIVO pueden darse tanto en Riesgo como en Media. */
.auxiliar-record-card-senal {
    display: inline-block; margin-top: 3px; padding: 1px 8px; border-radius: 20px;
    font-size: 10px; font-weight: 700; letter-spacing: .02em; color: #FFFFFF;
}
.auxiliar-record-card-senal.senal-racha     { background: #991B1B; }
.auxiliar-record-card-senal.senal-tendencia { background: #0B2947; }
.auxiliar-record-card-patron {
    display: flex; align-items: center; gap: 5px; margin: 4px 0 0; font-size: 11px;
    font-style: italic; opacity: .85;
}
/* Color propio, independiente del nivel (01/09/2026) -- "mejorando" y
   "empeorando" son una pregunta distinta de "qué tan urgente es hoy", no deben
   compartir el rojo/ámbar del nivel o se leen como la misma señal. */
.auxiliar-record-card-tendencia {
    flex-shrink: 0; display: flex; align-items: center; gap: 3px;
    padding: 2px 8px; border-radius: 20px; font-size: 11px; font-weight: 700;
}
.auxiliar-record-card-tendencia.tendencia-mejorando  { background: #D1FAE5; color: #065F46; }
.auxiliar-record-card-tendencia.tendencia-empeorando { background: #FEF3C7; color: #92400E; }

body.qiwo-dark .auxiliar-record-card-tendencia.tendencia-mejorando  { background: rgba(16,185,129,.18);  color: #6EE7B7; }
body.qiwo-dark .auxiliar-record-card-tendencia.tendencia-empeorando { background: rgba(217,119,6,.20);   color: #FCD34D; }

body.qiwo-dark .auxiliar-record-chip                    { background: rgba(100,116,139,.20); color: #CBD5E1; }
body.qiwo-dark .auxiliar-record-chip.nivel-riesgo        { background: rgba(220,38,38,.20);   color: #FCB3B3; }
body.qiwo-dark .auxiliar-record-chip.nivel-media         { background: rgba(217,119,6,.20);   color: #FCD34D; }
body.qiwo-dark .auxiliar-record-chip.nivel-observacion   { background: rgba(100,116,139,.20); color: #CBD5E1; }
body.qiwo-dark .auxiliar-record-chip.nivel-perfecto      { background: rgba(16,185,129,.18);  color: #6EE7B7; }
body.qiwo-dark .auxiliar-record-card                     { background: #1A2535; border-color: rgba(255,255,255,.06); }
body.qiwo-dark .auxiliar-record-card.nivel-riesgo        { background: rgba(220,38,38,.14);   border-color: rgba(248,113,113,.20); }
body.qiwo-dark .auxiliar-record-card.nivel-media         { background: rgba(217,119,6,.14);   border-color: rgba(252,211,77,.20); }
body.qiwo-dark .auxiliar-record-card.nivel-observacion   { background: rgba(100,116,139,.16); border-color: rgba(203,213,225,.15); }
body.qiwo-dark .auxiliar-record-card.nivel-perfecto      { background: rgba(16,185,129,.14);  border-color: rgba(110,231,183,.20); }
body.qiwo-dark .auxiliar-record-card-nombre              { color: #F1F5F9; }
body.qiwo-dark .auxiliar-record-card.nivel-riesgo      .auxiliar-record-card-metrica { color: #FCB3B3; }
body.qiwo-dark .auxiliar-record-card.nivel-media       .auxiliar-record-card-metrica { color: #FCD34D; }
body.qiwo-dark .auxiliar-record-card.nivel-observacion .auxiliar-record-card-metrica { color: #CBD5E1; }
body.qiwo-dark .auxiliar-record-card.nivel-perfecto    .auxiliar-record-card-metrica { color: #6EE7B7; }
body.qiwo-dark .auxiliar-record-card.nivel-riesgo      .auxiliar-record-card-motivo { color: #FCB3B3; }
body.qiwo-dark .auxiliar-record-card.nivel-media       .auxiliar-record-card-motivo { color: #FCD34D; }
body.qiwo-dark .auxiliar-record-card.nivel-observacion .auxiliar-record-card-motivo { color: #CBD5E1; }
body.qiwo-dark .auxiliar-record-card.nivel-perfecto    .auxiliar-record-card-motivo { color: #6EE7B7; }
body.qiwo-dark .auxiliar-record-card-avatar { background: rgba(255,255,255,.10); }

/* ── Dark: buscador, resumen y grilla del auxiliar (20/08/2026) ──────────── */
body.qiwo-dark .auxiliar-buscador {
    background: #0F1923;
    border-color: rgba(255,255,255,.1) !important;
    color: #64748B;
}
body.qiwo-dark .auxiliar-buscador input { color: #E2E8F0; }
body.qiwo-dark .auxiliar-filtro-pill { background: rgba(29,78,216,.22); color: #93C5FD; }
body.qiwo-dark .auxiliar-filtro-pill button { background: rgba(147,197,253,.16); }
body.qiwo-dark .auxiliar-filtro-pill button:hover { background: rgba(147,197,253,.28); }
body.qiwo-dark .auxiliar-filtros-activos-label { color: #94A3B8; }
body.qiwo-dark .auxiliar-filtros-limpiar-todo { color: #94A3B8; }
body.qiwo-dark .auxiliar-filtros-limpiar-todo:hover { color: #F87171; }

body.qiwo-dark .auxiliar-resumen-chip.resumen-puntual   { background: rgba(16,185,129,.18);  color: #6EE7B7; }
body.qiwo-dark .auxiliar-resumen-chip.resumen-tardanza  { background: rgba(234,179,8,.22);   color: #FDE68A; }
body.qiwo-dark .auxiliar-resumen-chip.resumen-pendiente { background: rgba(100,116,139,.20); color: #CBD5E1; }
body.qiwo-dark .auxiliar-resumen-chip.resumen-falta     { background: rgba(220,38,38,.26);   color: #FCB3B3; }
body.qiwo-dark .auxiliar-resumen-chip.resumen-fuera     { background: rgba(234,88,12,.26);   color: #FDC58B; }
body.qiwo-dark .auxiliar-resumen-chip.resumen-otros     { background: rgba(71,85,105,.24);   color: #94A3B8; }
body.qiwo-dark .auxiliar-resumen-chip.resumen-presente  { background: rgba(29,78,216,.22);   color: #93C5FD; }
body.qiwo-dark .auxiliar-resumen-chip.resumen-sinmarcar { background: rgba(100,116,139,.20); color: #CBD5E1; }
body.qiwo-dark .auxiliar-resumen-chip.resumen-salida    { background: rgba(37,99,235,.22);   color: #93C5FD; }
body.qiwo-dark .auxiliar-resumen-chip.resumen-denegado  { background: rgba(220,38,38,.20);   color: #FCB3B3; box-shadow: inset 0 0 0 1.5px rgba(248,113,113,.75); }
body.qiwo-dark .auxiliar-resumen-chip.resumen-duplicado { background: rgba(156,163,175,.18); color: #E2E8F0; }
body.qiwo-dark .auxiliar-resumen-chip.resumen-anulado   { background: rgba(100,116,139,.22); color: #CBD5E1; }

body.qiwo-dark .auxiliar-aula {
    background: #1A2535;
    border-color: rgba(255,255,255,.06) !important;
}
body.qiwo-dark .auxiliar-aula-header {
    background: rgba(255,255,255,.02);
    border-bottom-color: rgba(255,255,255,.06) !important;
}
body.qiwo-dark .auxiliar-aula-titulo         { color: #E2E8F0; }
body.qiwo-dark .auxiliar-aula-chevron        { color: #64748B; }
body.qiwo-dark .auxiliar-aula-progreso       { color: #64748B; }
body.qiwo-dark .auxiliar-aula-progreso strong { color: #E2E8F0; }
body.qiwo-dark .auxiliar-aula-progreso progress { background: rgba(255,255,255,.08); }
body.qiwo-dark .auxiliar-aula-progreso progress::-webkit-progress-bar { background: rgba(255,255,255,.08); }
body.qiwo-dark .auxiliar-aula-estado         { color: #94A3B8; }

/* Tarjeta neutra (sin estado tintado -- no debería darse en la práctica,
   pero cubre el caso por si EstadoClase cae al default). */
body.qiwo-dark .auxiliar-card {
    background: #1A2535;
    border-color: rgba(255,255,255,.06) !important;
}
body.qiwo-dark .auxiliar-card-nombre { color: #E2E8F0; }
body.qiwo-dark .auxiliar-card-avatar,
body.qiwo-dark .auxiliar-card-badge  { background: rgba(255,255,255,.08); color: #94A3B8; }
/* En oscuro el gris tiene que ir al otro extremo: sobre los fondos teñidos de
   las tarjetas, #64748B daba 2.49:1 en tardanza -- el peor de todos. Con
   #CBD5E1 sube a 7.99:1. Va sobre .auxiliar-card-estado, que es el contenedor,
   para que alcance también al motivo y no solo a la hora. */
body.qiwo-dark .auxiliar-card-estado,
body.qiwo-dark .auxiliar-card-hora   { color: #CBD5E1; }
body.qiwo-dark .auxiliar-card-badge-manual {
    background: rgba(0,0,0,.35); border-color: rgba(255,255,255,.3); color: #E2E8F0;
}
body.qiwo-dark .auxiliar-card-detalle { color: #475569; }
body.qiwo-dark .auxiliar-card:hover  { border-color: rgba(255,255,255,.18) !important; }

/* Mismo tinte que los chips de resumen -- el avatar/badge pasa a un overlay
   oscuro semitransparente (el blanco de modo claro se lavaría contra un
   fondo ya oscuro) conservando el color de texto de cada estado. */
body.qiwo-dark .auxiliar-card.estado-puntual {
    background: rgba(16,185,129,.16); border-color: rgba(16,185,129,.35) !important;
}
body.qiwo-dark .auxiliar-card.estado-puntual .auxiliar-card-avatar,
body.qiwo-dark .auxiliar-card.estado-puntual .auxiliar-card-badge { background: rgba(0,0,0,.25); color: #6EE7B7; }

body.qiwo-dark .auxiliar-card.estado-tardanza {
    background: rgba(234,179,8,.20); border-color: rgba(234,179,8,.38) !important;
}
body.qiwo-dark .auxiliar-card.estado-tardanza .auxiliar-card-avatar,
body.qiwo-dark .auxiliar-card.estado-tardanza .auxiliar-card-badge { background: rgba(0,0,0,.25); color: #FDE68A; }

body.qiwo-dark .auxiliar-card.estado-asistio {
    background: rgba(20,184,166,.30); border-color: rgba(45,212,191,.50) !important;
}
body.qiwo-dark .auxiliar-card.estado-asistio .auxiliar-card-avatar,
body.qiwo-dark .auxiliar-card.estado-asistio .auxiliar-card-badge { background: rgba(0,0,0,.25); color: #5EEAD4; }

body.qiwo-dark .auxiliar-card.estado-falta,
body.qiwo-dark .auxiliar-card.estado-denegado {
    background: rgba(220,38,38,.24); border-color: rgba(220,38,38,.42) !important;
}
body.qiwo-dark .auxiliar-card.estado-falta .auxiliar-card-avatar,
body.qiwo-dark .auxiliar-card.estado-falta .auxiliar-card-badge,
body.qiwo-dark .auxiliar-card.estado-denegado .auxiliar-card-avatar,
body.qiwo-dark .auxiliar-card.estado-denegado .auxiliar-card-badge {
    background: rgba(0,0,0,.25); color: #FCB3B3;
    box-shadow: inset 0 0 0 1.5px rgba(248,113,113,.75);
}
body.qiwo-dark .auxiliar-card.estado-justificado {
    background: rgba(124,58,237,.22); border-color: rgba(167,139,250,.38) !important;
}
body.qiwo-dark .auxiliar-card.estado-justificado .auxiliar-card-avatar,
body.qiwo-dark .auxiliar-card.estado-justificado .auxiliar-card-badge {
    background: rgba(0,0,0,.25); color: #C4B5FD;
}

body.qiwo-dark .auxiliar-card.estado-fuera {
    background: rgba(234,88,12,.24); border-color: rgba(234,88,12,.42) !important;
}
body.qiwo-dark .auxiliar-card.estado-fuera .auxiliar-card-avatar,
body.qiwo-dark .auxiliar-card.estado-fuera .auxiliar-card-badge { background: rgba(0,0,0,.25); color: #FDC58B; }

body.qiwo-dark .auxiliar-card.estado-pendiente,
body.qiwo-dark .auxiliar-card.estado-sinpolitica {
    background: rgba(100,116,139,.18); border-color: rgba(100,116,139,.35) !important;
}
body.qiwo-dark .auxiliar-card.estado-pendiente .auxiliar-card-avatar,
body.qiwo-dark .auxiliar-card.estado-pendiente .auxiliar-card-badge,
body.qiwo-dark .auxiliar-card.estado-sinpolitica .auxiliar-card-avatar,
body.qiwo-dark .auxiliar-card.estado-sinpolitica .auxiliar-card-badge { background: rgba(0,0,0,.25); color: #CBD5E1; }

body.qiwo-dark .auxiliar-card.estado-salida {
    background: rgba(37,99,235,.20); border-color: rgba(37,99,235,.38) !important;
}
body.qiwo-dark .auxiliar-card.estado-salida .auxiliar-card-avatar,
body.qiwo-dark .auxiliar-card.estado-salida .auxiliar-card-badge { background: rgba(0,0,0,.25); color: #93C5FD; }

body.qiwo-dark .auxiliar-card.estado-nohabil {
    background: repeating-linear-gradient(
        45deg, rgba(100,116,139,.14), rgba(100,116,139,.14) 6px,
               rgba(148,163,184,.20) 6px, rgba(148,163,184,.20) 12px);
    border-color: rgba(148,163,184,.3) !important;
}
body.qiwo-dark .auxiliar-card.estado-nohabil .auxiliar-card-avatar,
body.qiwo-dark .auxiliar-card.estado-nohabil .auxiliar-card-badge { background: rgba(0,0,0,.25); color: #CBD5E1; }

/* Dia no habil (feriado, paro o fin de semana): no es falta ni pendiente, no
   hubo clases. Se distingue del neutro de "pendiente" con un rayado diagonal,
   que ademas funciona sin depender del color (daltonismo). */
.auxiliar-card.estado-nohabil {
    background: repeating-linear-gradient(
        45deg,
        #F1F5F9, #F1F5F9 6px,
        #E7EDF3 6px, #E7EDF3 12px
    );
    border-color: #CBD5E1;
}
.auxiliar-card.estado-nohabil .auxiliar-card-avatar,
.auxiliar-card.estado-nohabil .auxiliar-card-badge { background: #E2E8F0; color: #475569; }

.auxiliar-card.estado-salida {
    background: #DBEAFE;
    border-color: #BBD8F8;
}
.auxiliar-card.estado-salida .auxiliar-card-avatar,
.auxiliar-card.estado-salida .auxiliar-card-badge { background: rgba(255,255,255,.55); color: #1D4ED8; }
/* Techo de 5 columnas sin importar cuán ancha sea la pantalla -- a 8 columnas
   (el salto que había desde 1800px) el nombre completo del alumno ya no
   entraba y se cortaba con "..." (24/08/2026, reclamo real de las auxiliares
   en una FHD). Medido en vivo: a 6 columnas (263px de tarjeta) un nombre largo
   real todavía se cortaba 60px; a 5 columnas (317px) el peor caso corta solo
   ~6px -- el mismo margen de "a veces se corta el segundo nombre" que Jordy
   ya vio aceptable en la tablet en vertical. */
@media (min-width: 1440px) {
    .auxiliar-grid { grid-template-columns: repeat(5, minmax(0, 1fr)); }
}
@media (min-width: 1024px) and (max-width: 1439px) {
    .auxiliar-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
@media (min-width: 768px) and (max-width: 1023px) {
    .auxiliar-aula-header { grid-template-columns: 1fr 1fr; }
    .auxiliar-aula-estados { grid-column: 1 / -1; justify-content: flex-start; }
    .auxiliar-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (min-width: 560px) and (max-width: 767px) {
    .auxiliar-aula-header { display: flex; flex-wrap: wrap; gap: 8px; padding: 10px 12px; }
    .auxiliar-aula-progreso { width: 100%; }
    .auxiliar-aula-progreso progress { flex: 1 1 auto; width: auto; }
    .auxiliar-aula-estados { justify-content: flex-start; }
    .auxiliar-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 559px) {
    .auxiliar-aula-header { display: flex; flex-wrap: wrap; gap: 8px; padding: 10px 12px; }
    .auxiliar-aula-progreso { width: 100%; }
    .auxiliar-aula-progreso progress { flex: 1 1 auto; width: auto; }
    .auxiliar-aula-estados { justify-content: flex-start; }
    .auxiliar-grid { grid-template-columns: 1fr; }

    /* Historia del scroll horizontal acá (para no repetir el ciclo): medido
       26/08/2026 en 375px real, los 8 chips de entonces (incl. Presentes/Sin
       marcar, que compartían fila con los 6 de siempre) envolviendo a 3 filas
       dejaban 688 de 812px de pantalla en puro chrome. Se probó scroll horizontal
       con fade -- pero Jordy lo encontró feo y pidió volver a como se veía antes,
       todo visible sin deslizar (27/08/2026). Con Presentes/Sin marcar ya en su
       propia fila arriba (auxiliar-resumen-principal), acá solo quedan los 6 de
       siempre -- envolver a 2-3 filas es bastante más barato que los 8 originales. */
    .auxiliar-resumen { margin-bottom: 14px; }
}

/* Roles checkbox list in modal */
.qiwo-roles-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding: 10px 12px;
    background: #F9FAFB;
    border: 1px solid #E5E7EB;
    border-radius: 8px;
}

/* Password input + toggle */
.qiwo-password-wrap {
    position: relative;
    display: flex;
    align-items: center;
}
.qiwo-password-wrap .qiwo-input {
    padding-right: 40px;
    width: 100%;
}
.qiwo-password-toggle {
    position: absolute;
    right: 10px;
    background: none;
    border: none;
    cursor: pointer;
    color: #6B7280;
    display: flex;
    align-items: center;
    padding: 0;
}
.qiwo-password-toggle:hover { color: #0F9375; }

/* Pagination */
.qiwo-pagination {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 4px;
    margin-top: 20px;
    padding-bottom: 8px;
}
.qiwo-page-btn {
    min-width: 32px;
    height: 32px;
    padding: 0 8px;
    border-radius: 8px;
    border: 1px solid #E5E7EB;
    background: #fff;
    color: #374151;
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: background 0.15s, border-color 0.15s, color 0.15s;
}
.qiwo-page-btn:hover:not(:disabled) {
    background: #F0FDF4;
    border-color: #0F9375;
    color: #0F9375;
}
.qiwo-page-btn.active {
    background: #0B2947;
    border-color: #0B2947;
    color: #fff;
    font-weight: 700;
}
.qiwo-page-btn:disabled {
    opacity: 0.35;
    cursor: not-allowed;
}

/* Small modal variant */
.qiwo-modal.qiwo-modal-sm {
    max-width: 440px;
}

/* Responsive — Usuarios (solo tabla de usuarios, no otras tablas) */
@media (max-width: 640px) {
    .qiwo-table-usuarios thead th:nth-child(3),
    .qiwo-table-usuarios tbody td:nth-child(3),
    .qiwo-table-usuarios thead th:nth-child(4),
    .qiwo-table-usuarios tbody td:nth-child(4) { display: none; }
    .qiwo-pagination { flex-wrap: wrap; }
    .qiwo-modal.qiwo-modal-sm { max-width: 95vw; }
}

/* ── NUEVO USUARIO — lookup states ───────────────────────── */
.qiwo-persona-result {
    border-radius: 10px;
    padding: 12px 14px;
    margin-bottom: 14px;
    font-size: 13px;
}
.qiwo-persona-result.result-new     { background: #E0F2F1; border: 1px solid #0F9375; color: #065F46; }
.qiwo-persona-result.result-found   { background: #D1FAE5; border: 1px solid #6EE7B7; color: #065F46; }
.qiwo-persona-result.result-warn    { background: #FEF3C7; border: 1px solid #FCD34D; color: #92400E; }
.qiwo-persona-result.result-blocked { background: #FEE2E2; border: 1px solid #FECACA; color: #991B1B; }

.qiwo-persona-result-header {
    display: flex;
    align-items: center;
    gap: 8px;
    font-weight: 700;
    margin-bottom: 8px;
}

.qiwo-persona-result-data {
    display: flex;
    flex-direction: column;
    gap: 3px;
    padding-left: 24px;
}

/* Botón "Nuevo Usuario" en el header */
.qiwo-btn-nuevo {
    display: flex;
    align-items: center;
    gap: 8px;
    background: #0F9375;
    color: #fff;
    border: none;
    border-radius: 10px;
    padding: 8px 16px;
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    transition: background 0.15s;
    white-space: nowrap;
}
.qiwo-btn-nuevo:hover { background: #0d7d63; }
.qiwo-btn-nuevo:disabled { background: #CBD5E1; color: #64748B; cursor: not-allowed; }
.qiwo-btn-nuevo:disabled:hover { background: #CBD5E1; }
/* ── Transición suave al cambiar tema ── */
.admin-shell,
.admin-topbar,
.admin-content,
.admin-stat-card,
.qiwo-table-card,
.qiwo-modal-card,
.qiwo-form-group input,
.qiwo-form-group select {
    transition: background 0.2s ease, border-color 0.2s ease, color 0.15s ease;
}

/* ══════════════════════════════════════════════════════════
   DARK MODE GLOBAL — body.qiwo-dark
   Aplica a: Admin Panel, Portal Tutor, Login screens.
   El Kiosco usa .tema-oscuro por separado — NO se toca aquí.
   ══════════════════════════════════════════════════════════ */

/* ── Transición suave global ── */
body {
    transition: background 0.2s ease, color 0.15s ease;
}

/* ── Shell y fondo base ── */
body.qiwo-dark { background: #0F1923; }
/* ...y su color de texto (08/09/2026). Sin esta línea el modo oscuro pintaba el
   fondo pero dejaba el color en el valor por omisión del navegador: NEGRO. La
   app se veía bien solo porque casi todo elemento trae su clase con color
   propio; el que no la traía quedaba negro sobre #0F1923 y desaparecía. Así se
   veían el <strong> "Lector" de cada línea del historial y el nombre del
   apoderado en el sheet del Auxiliar (contraste ~1.5:1).
   Va en body y no en cada caso porque el agujero es de herencia: cualquier
   texto futuro sin color explícito hereda de acá en vez de caer al negro. Todo
   lo que define su propio color sigue ganando por especificidad. */
body.qiwo-dark { color: #E2E8F0; }
body.qiwo-dark .admin-shell { background: #0F1923; }

/* ── Topbar ── */
body.qiwo-dark .admin-topbar {
    background: #1A2535;
    border-bottom-color: rgba(255,255,255,0.06);
}
body.qiwo-dark .admin-topbar-user { color: #E2E8F0; }
body.qiwo-dark .admin-hamburger { color: #94A3B8; }
body.qiwo-dark .admin-sucursal-badge {
    background: rgba(15,147,117,0.2);
    color: #34D399;
}

/* ── Content area ── */
body.qiwo-dark .admin-content { background: #0F1923; }

/* ── Page headers ── */
body.qiwo-dark .admin-page-title { color: #E2E8F0; }
body.qiwo-dark .admin-page-sub   { color: #64748B; }
body.qiwo-dark .auxiliar-selector-fecha button {
    background: #0F1923;
    border-color: rgba(255,255,255,.1);
    color: #94A3B8;
}
body.qiwo-dark .auxiliar-selector-fecha button:hover:not(:disabled) { background: #1A2535; color: #E2E8F0; }
body.qiwo-dark .auxiliar-selector-fecha-input {
    background: #0F1923;
    border-color: rgba(255,255,255,.1);
    color: #E2E8F0;
    color-scheme: dark;
}
body.qiwo-dark .auxiliar-selector-fecha-hoy {
    color: #93C5FD !important;
    border-color: rgba(59,130,246,.4) !important;
    background: rgba(29,78,216,.18) !important;
}

/* ── Dashboard stat cards ── */
body.qiwo-dark .admin-stat-card {
    background: #1A2535;
    border-color: rgba(255,255,255,0.06);
}
body.qiwo-dark .admin-stat-label { color: #64748B; }
body.qiwo-dark .admin-stat-value { color: #E2E8F0; }

/* ── Hub cards (Panel Director, Solicitudes) ── */
body.qiwo-dark .admin-hub-card {
    background: #1A2535;
    border-color: rgba(255,255,255,0.06);
}
body.qiwo-dark .admin-hub-card-title { color: #E2E8F0; }
body.qiwo-dark .admin-hub-card-desc  { color: #64748B; }

/* ── Section labels del dashboard ── */
body.qiwo-dark .admin-section-label { color: #64748B; }
body.qiwo-dark .admin-section-label::before,
body.qiwo-dark .admin-section-label::after { background: rgba(255,255,255,0.06); }

/* ── Actividad reciente ── */
body.qiwo-dark .admin-activity-empty {
    background: #1A2535;
    border-color: rgba(255,255,255,0.06);
    color: #475569;
}

/* ── Table cards ── */
body.qiwo-dark .qiwo-table-card {
    background: #1A2535;
    border-color: rgba(255,255,255,0.06);
}
body.qiwo-dark .qiwo-table thead th {
    background: #0F1923;
    color: #64748B;
    border-bottom-color: rgba(255,255,255,0.06);
}
body.qiwo-dark .qiwo-table tbody td {
    color: #CBD5E1;
    border-bottom-color: rgba(255,255,255,0.04);
}
body.qiwo-dark .qiwo-table tbody tr:hover td {
    background: rgba(255,255,255,0.03);
}
body.qiwo-dark .qiwo-table-footer {
    background: #0F1923;
    color: #475569;
    border-top-color: rgba(255,255,255,0.04);
}
body.qiwo-dark .qiwo-table-loading,
body.qiwo-dark .qiwo-table-empty { color: #475569; }

/* ── Search box ── */
body.qiwo-dark .qiwo-search-box {
    background: #0F1923;
    border-color: rgba(255,255,255,0.1);
    color: #E2E8F0;
}
body.qiwo-dark .qiwo-search-box input {
    color: #E2E8F0;
    background: transparent;
}
body.qiwo-dark .qiwo-search-box input::placeholder { color: #475569; }
body.qiwo-dark .qiwo-search-box svg { color: #64748B; }
body.qiwo-dark .qiwo-search-box::placeholder { color: #475569; }

/* ── Filter chips ── */
body.qiwo-dark .qiwo-chip {
    background: #1A2535;
    border-color: rgba(255,255,255,0.08);
    color: #94A3B8;
}
body.qiwo-dark .qiwo-chip.active {
    background: rgba(15,147,117,0.2);
    border-color: rgba(15,147,117,0.4);
    color: #34D399;
}

/* ── Formularios en contenido ── */
body.qiwo-dark .qiwo-form-group input,
body.qiwo-dark .qiwo-form-group select,
body.qiwo-dark .qiwo-form-group textarea {
    background: #0F1923;
    border-color: rgba(255,255,255,0.1);
    color: #E2E8F0;
}
body.qiwo-dark .qiwo-form-group input::placeholder,
body.qiwo-dark .qiwo-form-group select::placeholder,
body.qiwo-dark .qiwo-form-group textarea::placeholder { color: #475569; }
body.qiwo-dark .qiwo-form-group input:focus,
body.qiwo-dark .qiwo-form-group select:focus {
    border-color: #0F9375;
    box-shadow: 0 0 0 3px rgba(15,147,117,0.15);
}
body.qiwo-dark .qiwo-form-group label { color: #94A3B8; }
body.qiwo-dark .qiwo-required   { color: #F87171; }
body.qiwo-dark .qiwo-optional   { color: #475569; }
body.qiwo-dark .qiwo-pendiente  { color: #FBBF24; }
body.qiwo-dark .qiwo-input-warn { background: rgba(217,119,6,0.1); border-color: #D97706 !important; }
body.qiwo-dark .qiwo-form-hint  { color: #475569; }
body.qiwo-dark .qiwo-input {
    background: #0F1923;
    border-color: rgba(255,255,255,0.1);
    color: #E2E8F0;
}
body.qiwo-dark .qiwo-input:focus {
    border-color: #0F9375;
    box-shadow: 0 0 0 3px rgba(15,147,117,0.15);
}
body.qiwo-dark .qiwo-label { color: #94A3B8; }

/* ── Bloques inline style background:#fff ── */
body.qiwo-dark [style*="background:#fff"],
body.qiwo-dark [style*="background: #fff"],
body.qiwo-dark [style*="background:#FFFFFF"],
body.qiwo-dark [style*="background: #FFFFFF"] {
    background: #1A2535 !important;
}
body.qiwo-dark [style*="border: 1px solid #E5E7EB"],
body.qiwo-dark [style*="border:1px solid #E5E7EB"],
body.qiwo-dark [style*="border: 1px solid #e5e7eb"] {
    border-color: rgba(255,255,255,0.06) !important;
}
body.qiwo-dark [style*="color: #6b7280"],
body.qiwo-dark [style*="color:#6b7280"],
body.qiwo-dark [style*="color: #6B7280"],
body.qiwo-dark [style*="color:#6B7280"] { color: #64748B !important; }
body.qiwo-dark [style*="color: #0B2947"],
body.qiwo-dark [style*="color:#0B2947"] { color: #E2E8F0 !important; }
body.qiwo-dark [style*="background:#F9FAFB"],
body.qiwo-dark [style*="background: #F9FAFB"] { background: #0F1923 !important; }
body.qiwo-dark [style*="background:#F3F4F6"],
body.qiwo-dark [style*="background: #F3F4F6"] { background: #243044 !important; }

/* ── Secciones / step badges ── */
body.qiwo-dark .qiwo-section-title { color: #CBD5E1; }
body.qiwo-dark .qiwo-step-badge    { background: #0F9375; }

/* ── Person cells / avatars ── */
body.qiwo-dark .qiwo-person-name { color: #CBD5E1; }
body.qiwo-dark .qiwo-text-muted  { color: #475569; }
body.qiwo-dark .qiwo-avatar {
    background: rgba(15,147,117,0.15) !important;
    color: #34D399 !important;
}

/* ── Alertas ── */
body.qiwo-dark .admin-alert-error {
    background: rgba(220,38,38,0.1);
    border-color: rgba(220,38,38,0.3);
    color: #FCB3B3;
}
body.qiwo-dark .admin-alert-success {
    background: rgba(5,150,105,0.1);
    border-color: rgba(5,150,105,0.3);
    color: #6EE7B7;
}
body.qiwo-dark .admin-alert-warning {
    background: rgba(217,119,6,0.12);
    border-color: rgba(217,119,6,0.3);
    color: #FCD34D;
}
body.qiwo-dark .admin-hamburger-alert-dot {
    border-color: #1A2535;
}

/* ── Botones secundarios ── */
body.qiwo-dark .qiwo-btn-secondary {
    background: #1A2535;
    border-color: rgba(255,255,255,0.1);
    color: #CBD5E1;
}
body.qiwo-dark .qiwo-btn-secondary:hover { background: #243044; }

/* ── Historial de hoy (timeline) ── */
body.qiwo-dark .qiwo-historial { border-left-color: rgba(255,255,255,0.12); }
body.qiwo-dark .qiwo-historial-dot { border-color: #1A2535; }
body.qiwo-dark .qiwo-historial-edicion { background: rgba(217,119,6,0.18); color: #FCD34D; }
body.qiwo-dark .qiwo-historial-edicion.qiwo-historial-anulacion { background: rgba(220,38,38,.20); color: #FCB3B3; }
body.qiwo-dark .qiwo-log-auditoria { background: rgba(255,255,255,0.05); }
body.qiwo-dark .qiwo-log-auditoria p { color: #94A3B8 !important; }
body.qiwo-dark .qiwo-link-btn { color: #60A5FA; }
body.qiwo-dark .qiwo-link-btn:hover { color: #93C5FD; }
body.qiwo-dark .qiwo-link-btn.qiwo-link-btn-peligro { color: #FCB3B3; }
body.qiwo-dark .qiwo-link-btn.qiwo-link-btn-peligro:hover { color: #FECACA; }

/* ── Modales ── */
body.qiwo-dark .qiwo-modal-overlay { background: rgba(0,0,0,0.6); }
body.qiwo-dark .qiwo-modal-card {
    background: #1A2535;
    box-shadow: 0 20px 60px rgba(0,0,0,0.5);
}
/* El modal en oscuro pintaba su fondo pero NO su color de texto (08/09/2026).
   Todo lo que no traía color propio caía al negro por omisión del navegador:
   el <strong> que dice "Lector" en cada línea del historial y el nombre del
   apoderado quedaban en #000 sobre #1A2535 -- contraste ~1.5:1, ahí pero
   ilegibles. Cazado por Jordy en la tablet, en Asistencia en vivo.
   El arreglo va acá y no en cada texto: la tarjeta hereda un gris claro a todo
   su contenido, y lo que sí define su propio color (los estados, los enlaces,
   los badges) sigue ganando por especificidad. */
body.qiwo-dark .qiwo-modal-card { color: #E2E8F0; }
body.qiwo-dark .qiwo-modal-header { border-bottom-color: rgba(255,255,255,0.06); }
body.qiwo-dark .qiwo-modal-header h3 { color: #E2E8F0; }
body.qiwo-dark .qiwo-modal-close {
    background: rgba(255,255,255,0.06);
    color: #64748B;
}
body.qiwo-dark .qiwo-modal-close:hover {
    background: rgba(248,113,113,0.15);
    color: #F87171;
}

/* ── Dark: section labels del dashboard ── */
body.qiwo-dark .admin-section-label {
    color: #64748B;
    border-bottom-color: rgba(255,255,255,0.06);
}

/* ── Dark: activity table del dashboard ── */
body.qiwo-dark .admin-activity-wrapper {
    background: #1A2535;
    border-color: rgba(255,255,255,0.06);
}
body.qiwo-dark .admin-activity-wrapper thead th {
    background: #0F1923;
    color: #64748B;
    border-bottom-color: rgba(255,255,255,0.06);
}
body.qiwo-dark .admin-activity-wrapper tbody td {
    color: #CBD5E1;
    border-bottom-color: rgba(255,255,255,0.04);
}
body.qiwo-dark .admin-activity-empty { color: #475569; }

/* ── Dark: persona result cards (modales wizard) ── */
body.qiwo-dark .qiwo-persona-result.result-new {
    background: rgba(15,147,117,0.1);
    border-color: rgba(15,147,117,0.3);
    color: #34D399;
}
body.qiwo-dark .qiwo-persona-result.result-found {
    background: rgba(5,150,105,0.1);
    border-color: rgba(52,211,153,0.3);
    color: #6EE7B7;
}
body.qiwo-dark .qiwo-persona-result.result-warn {
    background: rgba(146,64,14,0.12);
    border-color: rgba(252,211,77,0.3);
    color: #FCD34D;
}
body.qiwo-dark .qiwo-persona-result.result-blocked {
    background: rgba(220,38,38,0.1);
    border-color: rgba(252,165,165,0.3);
    color: #FCB3B3;
}

/* ── Dark: lookup messages ── */
body.qiwo-dark .lookup-ok    { background: rgba(5,150,105,0.12); color: #6EE7B7; }
body.qiwo-dark .lookup-warn  { background: rgba(146,64,14,0.12); color: #FCD34D; }
body.qiwo-dark .lookup-info  { background: rgba(30,64,175,0.12); color: #93C5FD; }
body.qiwo-dark .lookup-error { background: rgba(220,38,38,0.1);  color: #FCB3B3; }

/* ── Dark: btn-lookup ── */
body.qiwo-dark .qiwo-btn-lookup {
    background: #0F9375;
    color: #fff;
}
body.qiwo-dark .qiwo-btn-lookup:hover:not(:disabled) { background: #0d7a62; }

/* ── Dark: paneles info teal inline (PuntoAcceso, etc.) ── */
body.qiwo-dark [style*="background:#E0F2F1"],
body.qiwo-dark [style*="background: #E0F2F1"] {
    background: rgba(15,147,117,0.1) !important;
    border-color: rgba(15,147,117,0.25) !important;
}

/* ── Dark: leyenda calendario ── */
body.qiwo-dark [style*="background:#FEE2E2"][style*="border:1px solid #FECACA"] {
    background: rgba(220,38,38,0.15) !important;
    border-color: rgba(252,165,165,0.3) !important;
}
body.qiwo-dark [style*="background:#D1FAE5"][style*="border:1px solid #6EE7B7"] {
    background: rgba(5,150,105,0.15) !important;
    border-color: rgba(110,231,183,0.3) !important;
}

/* ── Dark: hint texto en modales ── */
body.qiwo-dark [style*="color:#856404"],
body.qiwo-dark [style*="color: #856404"] { color: #FCD34D !important; }
body.qiwo-dark [style*="color:#065F46"],
body.qiwo-dark [style*="color: #065F46"] { color: #34D399 !important; }
body.qiwo-dark .qiwo-modal-body   { background: #1A2535; }
body.qiwo-dark .qiwo-modal-footer {
    border-top-color: rgba(255,255,255,0.06);
    background: #1A2535;
}
body.qiwo-dark .qiwo-modal-error {
    background: rgba(220,38,38,0.1);
    color: #FCB3B3;
    border-color: rgba(220,38,38,0.2);
}

/* ── Action buttons ── */
body.qiwo-dark .qiwo-action-btn {
    background: rgba(255,255,255,0.04);
    border-color: rgba(255,255,255,0.08);
    color: #94A3B8;
}
body.qiwo-dark .qiwo-action-btn:hover {
    background: rgba(255,255,255,0.08);
    color: #E2E8F0;
}
body.qiwo-dark .qiwo-action-btn:disabled:hover {
    background: rgba(255,255,255,0.04);
    color: #94A3B8;
}

/* ── Badges de estado ── */
body.qiwo-dark .admin-badge.badge-matricula-activa {
    background: rgba(5,150,105,0.15);
    color: #34D399;
    border-color: rgba(52,211,153,0.2);
}
body.qiwo-dark .admin-badge.badge-matricula-inactiva {
    background: rgba(100,116,139,0.15);
    color: #94A3B8;
    border-color: rgba(148,163,184,0.2);
}
body.qiwo-dark .admin-badge.badge-solicitud-pendiente  { background: rgba(217,119,6,.20);   color: #FCD34D; }
body.qiwo-dark .admin-badge.badge-solicitud-aprobada   { background: rgba(5,150,105,.15);   color: #34D399; }
body.qiwo-dark .admin-badge.badge-solicitud-rechazada  { background: rgba(220,38,38,.20);   color: #FCB3B3; }
body.qiwo-dark .admin-badge.badge-solicitud-cancelada  { background: rgba(100,116,139,.20); color: #CBD5E1; }

/* ── Spinner ── */
body.qiwo-dark .admin-spinner {
    border-color: rgba(255,255,255,0.1);
    border-top-color: #0F9375;
}

/* ── Scrollbar ── */
body.qiwo-dark ::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.1); }
body.qiwo-dark ::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,0.2); }

/* ── Login screens en dark ── */
body.qiwo-dark .login-wrapper  { background: #0F1923; }
body.qiwo-dark .login-form-panel {
    background: #1A2535;
    border-right-color: rgba(255,255,255,0.06);
}
body.qiwo-dark .login-logo-bg {
    background: #0B2947;
    border-color: rgba(15,147,117,0.3);
}
body.qiwo-dark .login-product-name { color: #E2E8F0; }
body.qiwo-dark .login-product-sub  { color: #64748B; }
body.qiwo-dark .login-welcome { color: #E2E8F0; }
body.qiwo-dark .login-hint    { color: #64748B; }
body.qiwo-dark .login-tabs-label { color: #94A3B8; }
body.qiwo-dark .login-label   { color: #94A3B8; }
body.qiwo-dark .login-input {
    background: #0F1923;
    border-color: rgba(255,255,255,0.1);
    color: #E2E8F0;
}
body.qiwo-dark .login-input::placeholder  { color: #475569; }
body.qiwo-dark .login-input:focus {
    border-color: #0F9375;
    box-shadow: 0 0 0 3px rgba(15,147,117,0.15);
}
body.qiwo-dark .login-input-icon { color: #64748B; }
body.qiwo-dark .login-input-action { color: #64748B; }
body.qiwo-dark .login-input-action:hover {
    color: #94A3B8;
    background: rgba(255,255,255,0.06);
}
body.qiwo-dark .login-check  { color: #94A3B8; }
body.qiwo-dark .login-link-green { color: #34D399; }
body.qiwo-dark .login-register-card {
    background: #0F1923;
    border-color: rgba(255,255,255,0.08);
}
body.qiwo-dark .login-register-card:hover {
    border-color: #0F9375;
    background: rgba(15,147,117,0.10);
}
body.qiwo-dark .login-register-icon { background: rgba(15,147,117,0.15); }
body.qiwo-dark .login-register-title { color: #E2E8F0; }
body.qiwo-dark .login-register-action { color: #34D399; }
body.qiwo-dark .login-support-link {
    background: transparent;
    border-color: rgba(255,255,255,0.08);
    color: #94A3B8;
}
body.qiwo-dark .login-support-link:hover {
    background: rgba(255,255,255,0.04);
    border-color: rgba(255,255,255,0.12);
}
body.qiwo-dark .login-support-link strong { color: #34D399; }
body.qiwo-dark .login-soporte { color: #64748B; }
body.qiwo-dark .login-admin-link { color: #475569; }
body.qiwo-dark .login-admin-link:hover { color: #34D399; }
body.qiwo-dark .login-info-panel { background: #0A1E32; }

/* ── Admin login card en dark ── */
body.qiwo-dark .admin-login-container { background: #0A1E32; }
body.qiwo-dark .admin-login-card {
    background: #1A2535;
    box-shadow: 0 8px 32px rgba(0,0,0,0.4);
}
body.qiwo-dark .admin-login-label { color: #94A3B8; }
body.qiwo-dark .admin-login-input {
    background: #0F1923;
    border-color: rgba(255,255,255,0.1);
    color: #E2E8F0;
}
body.qiwo-dark .admin-login-input::placeholder { color: #475569; }
body.qiwo-dark .admin-login-input:focus {
    border-color: #0F9375;
    box-shadow: 0 0 0 3px rgba(15,147,117,0.15);
}
/* Contraparte dark del <style> local de LoginAdmin.razor — mismo bug que la
   onda: colores fijos pensados para tarjeta blanca, invisibles/ilegibles
   sobre el fondo #1A2535 de la tarjeta en dark. */
body.qiwo-dark .admin-login-soporte { color: #94A3B8; }
body.qiwo-dark .admin-login-link-green { color: #34D399; }
body.qiwo-dark .admin-login-link:hover { color: #34D399; }
body.qiwo-dark .admin-login-pass-toggle:hover { color: #94A3B8; }

/* Mismo bug de logo invisible en dark, versión genérica por selector de
   atributo -- cubre RegistroApoderado.razor y ConsultarSolicitud.razor
   (usan .login-brand pero no tienen la variable _isDark para un ternario).
   Login.razor y LoginAdmin.razor ya resuelven esto con un ternario en el
   propio fill, así que este selector simplemente no matchea ahí en dark. */
body.qiwo-dark .login-brand svg path[fill="#0B2947"] { fill: #FFFFFF; }

/* ── Botón flotante de tema (login screens) ── */
.qiwo-theme-fab {
    position: fixed;
    bottom: 20px;
    bottom: calc(20px + env(safe-area-inset-bottom, 0px));
    right: 20px;
    width: 40px; height: 40px;
    border-radius: 50%;
    background: rgba(11,41,71,0.08);
    border: 1px solid rgba(11,41,71,0.12);
    color: #6B7280;
    cursor: pointer;
    display: flex; align-items: center; justify-content: center;
    transition: background 0.2s, border-color 0.2s, color 0.2s;
    z-index: 9999;
}
.qiwo-theme-fab:hover {
    background: rgba(11,41,71,0.15);
    color: #0B2947;
}
body.qiwo-dark .qiwo-theme-fab {
    background: rgba(255,255,255,0.08);
    border-color: rgba(255,255,255,0.12);
    color: #94A3B8;
}
body.qiwo-dark .qiwo-theme-fab:hover {
    background: rgba(255,255,255,0.14);
    color: #E2E8F0;
}

/* ── Dark mode: colores inline hardcodeados en módulos ── */
body.qiwo-dark [style*="color:#475569"],
body.qiwo-dark [style*="color: #475569"],
body.qiwo-dark [style*="color:#64748B"],
body.qiwo-dark [style*="color: #64748B"] { color: #94A3B8 !important; }

body.qiwo-dark [style*="color:#6B7280"],
body.qiwo-dark [style*="color: #6B7280"],
body.qiwo-dark [style*="color:#9CA3AF"],
body.qiwo-dark [style*="color: #9CA3AF"] { color: #64748B !important; }

body.qiwo-dark [style*="color:#065F46"],
body.qiwo-dark [style*="color: #065F46"] { color: #34D399 !important; }

body.qiwo-dark [style*="background:#FFF3CD"],
body.qiwo-dark [style*="background: #FFF3CD"] {
    background: rgba(133,96,4,0.15) !important;
    border-color: rgba(133,96,4,0.3) !important;
    color: #FCD34D !important;
}

body.qiwo-dark [style*="background:#FEF2F2"],
body.qiwo-dark [style*="background: #FEF2F2"] {
    background: rgba(220,38,38,0.1) !important;
    border-color: rgba(220,38,38,0.25) !important;
}

body.qiwo-dark [style*="background:#D1FAE5"],
body.qiwo-dark [style*="background: #D1FAE5"] {
    background: rgba(5,150,105,0.12) !important;
    border-color: rgba(52,211,153,0.25) !important;
    color: #6EE7B7 !important;
}

body.qiwo-dark [style*="background:#EDE9FE"],
body.qiwo-dark [style*="background: #EDE9FE"] {
    background: rgba(91,33,182,0.15) !important;
    color: #C4B5FD !important;
}

body.qiwo-dark [style*="background:#F1F5F9"],
body.qiwo-dark [style*="background: #F1F5F9"] {
    background: rgba(255,255,255,0.06) !important;
    color: #94A3B8 !important;
}

body.qiwo-dark [style*="background:#FEF3C7"],
body.qiwo-dark [style*="background: #FEF3C7"] {
    background: rgba(146,64,14,0.15) !important;
    color: #FCD34D !important;
}

body.qiwo-dark [style*="border-bottom:2px solid #D1D5DB"],
body.qiwo-dark [style*="border-bottom: 2px solid #D1D5DB"] {
    border-bottom-color: rgba(255,255,255,0.08) !important;
}

/* ══════════════════════════════════════════════════════════
   MÓDULO ADMIN CREDENCIALES — clases movidas desde AdminCredenciales.razor
   ══════════════════════════════════════════════════════════ */

/* ── Toolbar ── */
.cred-toolbar {
    display: flex;
    align-items: center;
    gap: 12px;
    flex-wrap: wrap;
    margin-bottom: 16px;
}

.cred-search-box {
    display: flex;
    align-items: center;
    gap: 8px;
    background: #fff;
    border: 1px solid #E5E7EB;
    border-radius: 8px;
    padding: 7px 12px;
    flex: 1;
    min-width: 220px;
    max-width: 360px;
}

.cred-search-box input {
    border: none;
    outline: none;
    background: transparent;
    font-size: 13px;
    color: #0B2947;
    width: 100%;
}

.cred-search-box input::placeholder { color: #9CA3AF; }

.cred-chips {
    display: flex;
    gap: 6px;
    flex-wrap: wrap;
}

.cred-chip {
    border: 1px solid #E5E7EB;
    background: #fff;
    color: #374151;
    border-radius: 20px;
    padding: 5px 12px;
    font-size: 12px;
    font-weight: 500;
    cursor: pointer;
    transition: all .15s;
}

.cred-chip:hover { border-color: #0F9375; color: #0F9375; }

.cred-chip-active {
    background: #0F9375;
    border-color: #0F9375;
    color: #fff;
}

/* ── Método badge ── */
.metodo-badge {
    display: inline-block;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: .5px;
    padding: 2px 8px;
    border-radius: 4px;
    text-transform: uppercase;
}

.metodo-nfc { background: #EFF6FF; color: #1D4ED8; }
.metodo-qr  { background: #F0FDF4; color: #16A34A; }

/* ── Valor de credencial ── */
.credencial-valor {
    font-family: 'Courier New', Courier, monospace;
    font-size: 11px;
    color: #6B7280;
    word-break: break-all;
}

/* ── Selector de método en modal ── */
.metodo-selector { display: flex; gap: 8px; }

.metodo-btn {
    display: flex;
    align-items: center;
    gap: 6px;
    border: 1.5px solid #E5E7EB;
    background: #fff;
    color: #374151;
    border-radius: 8px;
    padding: 8px 16px;
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    transition: all .15s;
    flex: 1;
    justify-content: center;
}

.metodo-btn:hover { border-color: #0F9375; color: #0F9375; }

.metodo-btn-active {
    background: #0B2947;
    border-color: #0B2947;
    color: #fff;
}

/* ── Alumno seleccionado (chip) ── */
.alumno-selected-chip {
    display: flex;
    align-items: center;
    gap: 8px;
    background: #E0F2F1;
    border: 1px solid #0F9375;
    border-radius: 8px;
    padding: 8px 12px;
    font-size: 13px;
    color: #0B2947;
    font-weight: 500;
}

.alumno-selected-chip button {
    background: none;
    border: none;
    color: #0B2947;
    font-size: 18px;
    line-height: 1;
    cursor: pointer;
    padding: 0 0 0 4px;
    margin-left: auto;
    opacity: .6;
}

.alumno-selected-chip button:hover { opacity: 1; }

/* ── Autocomplete dropdown ── */
.autocomplete-dropdown {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    background: #fff;
    border: 1px solid #E5E7EB;
    border-radius: 8px;
    box-shadow: 0 4px 12px rgba(0,0,0,.12);
    z-index: 999;
    max-height: 220px;
    overflow-y: auto;
    margin-top: 4px;
}

.autocomplete-item {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 9px 12px;
    cursor: pointer;
    border-bottom: 1px solid #F3F4F6;
    transition: background .1s;
}

.autocomplete-item:last-child { border-bottom: none; }
.autocomplete-item:hover { background: #F0FDF4; }

.autocomplete-nombre { font-size: 13px; font-weight: 500; color: #0B2947; }
.autocomplete-codigo { font-size: 11px; color: #9CA3AF; }
.autocomplete-empty  { padding: 12px; text-align: center; font-size: 13px; color: #9CA3AF; }

/* ── Resultado identificar ── */
.identificar-result {
    background: #F9FAFB;
    border: 1px solid #E5E7EB;
    border-radius: 8px;
    overflow: hidden;
    margin-top: 4px;
}

.identificar-row {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 8px 14px;
    border-bottom: 1px solid #F3F4F6;
    font-size: 13px;
}

.identificar-row:last-child { border-bottom: none; }
.identificar-label     { min-width: 130px; color: #6B7280; font-size: 12px; }
.identificar-valor-cell { color: #0B2947; flex: 1; }

/* ── Botón danger ── */
.qiwo-btn-danger {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background: #DC2626;
    color: #fff;
    border: none;
    border-radius: 8px;
    padding: 8px 16px;
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    transition: background .15s;
}

.qiwo-btn-danger:hover:not(:disabled) { background: #B91C1C; }
.qiwo-btn-danger:disabled { opacity: .6; cursor: not-allowed; }

/* ── DARK MODE — AdminCredenciales ── */
body.qiwo-dark .cred-search-box {
    background: #1A2535;
    border-color: rgba(255,255,255,0.08);
}

body.qiwo-dark .cred-search-box input { color: #E2E8F0; }

body.qiwo-dark .cred-chip {
    background: #1A2535;
    border-color: rgba(255,255,255,0.10);
    color: #94A3B8;
}

body.qiwo-dark .cred-chip:hover { border-color: #0F9375; color: #34D399; }

body.qiwo-dark .cred-chip-active {
    background: #0F9375;
    border-color: #0F9375;
    color: #fff;
}

body.qiwo-dark .metodo-nfc { background: rgba(29,78,216,0.15); color: #93C5FD; }
body.qiwo-dark .metodo-qr  { background: rgba(22,163,74,0.15);  color: #86EFAC; }

body.qiwo-dark .credencial-valor { color: #64748B; }

body.qiwo-dark .metodo-btn {
    background: #1A2535;
    border-color: rgba(255,255,255,0.10);
    color: #94A3B8;
}

body.qiwo-dark .metodo-btn:hover { border-color: #0F9375; color: #34D399; }

body.qiwo-dark .metodo-btn-active {
    background: #0F9375;
    border-color: #0F9375;
    color: #fff;
}

body.qiwo-dark .alumno-selected-chip {
    background: rgba(15,147,117,0.12);
    border-color: rgba(15,147,117,0.4);
    color: #E2E8F0;
}

body.qiwo-dark .alumno-selected-chip button { color: #94A3B8; }

/* ── Tabs de vista (Emitidas / Asignación rápida) ── */
.cred-vista-tabs {
    display: flex;
    gap: 4px;
    border-bottom: 1px solid #E5E7EB;
    margin-bottom: 20px;
}
.cred-vista-tab {
    display: flex;
    align-items: center;
    gap: 8px;
    background: none;
    border: none;
    border-bottom: 2px solid transparent;
    padding: 10px 4px;
    margin-right: 20px;
    font-size: 14px;
    font-weight: 600;
    color: #6B7280;
    cursor: pointer;
    transition: all .15s;
}
.cred-vista-tab:hover { color: #0F9375; }
.cred-vista-tab-active {
    color: #0F9375;
    border-bottom-color: #0F9375;
}
.cred-vista-tab-badge {
    background: #FEE2E2;
    color: #B91C1C;
    font-size: 11px;
    font-weight: 700;
    border-radius: 10px;
    padding: 1px 7px;
}

/* ── Historial de tarjeta (modal Identificar) ── */
.cred-historial {
    margin-top: 14px;
    border-top: 1px solid #E5E7EB;
    padding-top: 12px;
}
.cred-historial-titulo {
    font-size: 12px;
    font-weight: 700;
    color: #6B7280;
    text-transform: uppercase;
    letter-spacing: .04em;
    margin-bottom: 8px;
}
.cred-historial-item {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    padding: 8px 0;
    border-bottom: 1px solid #F3F4F6;
    font-size: 13px;
}
.cred-historial-item:last-child { border-bottom: none; }
.cred-historial-icono { font-size: 14px; line-height: 1.4; }
.cred-historial-detalle { flex: 1; color: #0B2947; }

/* ── DARK MODE — Asignación rápida / Historial ── */
body.qiwo-dark .cred-vista-tabs { border-bottom-color: rgba(255,255,255,0.10); }
body.qiwo-dark .cred-vista-tab { color: #64748B; }
body.qiwo-dark .cred-vista-tab:hover { color: #34D399; }
body.qiwo-dark .cred-vista-tab-active { color: #34D399; border-bottom-color: #34D399; }
body.qiwo-dark .cred-vista-tab-badge { background: rgba(220,38,38,0.2); color: #FCB3B3; }
body.qiwo-dark .cred-historial { border-top-color: rgba(255,255,255,0.10); }
body.qiwo-dark .cred-historial-titulo { color: #64748B; }
body.qiwo-dark .cred-historial-item { border-bottom-color: rgba(255,255,255,0.06); color: #E2E8F0; }

body.qiwo-dark .autocomplete-dropdown {
    background: #1A2535;
    border-color: rgba(255,255,255,0.08);
    box-shadow: 0 4px 12px rgba(0,0,0,.4);
}

body.qiwo-dark .autocomplete-item { border-bottom-color: rgba(255,255,255,0.06); }
body.qiwo-dark .autocomplete-item:hover { background: rgba(15,147,117,0.10); }
body.qiwo-dark .autocomplete-nombre { color: #E2E8F0; }
body.qiwo-dark .autocomplete-codigo { color: #475569; }
body.qiwo-dark .autocomplete-empty  { color: #475569; }

body.qiwo-dark .identificar-result {
    background: #1A2535;
    border-color: rgba(255,255,255,0.08);
}

body.qiwo-dark .identificar-row    { border-bottom-color: rgba(255,255,255,0.06); }
body.qiwo-dark .identificar-label  { color: #475569; }
body.qiwo-dark .identificar-valor-cell { color: #E2E8F0; }

/* ═══════════════════════════════════════════════════════════════════
   CLASES COMPLEMENTARIAS — Chat 44
   Clases usadas en AdminUsuarios, AdminSecciones, AdminAlumnos
   y los 3 dashboards que faltaban definición en qiwo.css.
   ═══════════════════════════════════════════════════════════════════ */

/* ── Alertas: AdminUsuarios usa qiwo-alert-*, resto usa admin-alert-* ── */
.qiwo-alert-error {
    display: flex; align-items: center; gap: 10px;
    background: #FEF2F2; border: 1px solid #FECACA;
    border-radius: 10px; padding: 12px 16px;
    color: #991B1B; font-size: 14px; font-weight: 500;
}
.qiwo-alert-success {
    display: flex; align-items: center; gap: 10px;
    background: #D1FAE5; border: 1px solid #6EE7B7;
    border-radius: 10px; padding: 12px 16px;
    color: #065F46; font-size: 14px; font-weight: 500;
}

/* ── Spinner y wrapper de carga ── */
.qiwo-spinner {
    width: 24px; height: 24px;
    border: 3px solid #E5E7EB; border-top-color: #0F9375;
    border-radius: 50%; animation: qiwo-spin 0.7s linear infinite;
    margin: 24px auto; display: block;
}
.qiwo-spinner-sm {
    width: 16px; height: 16px;
    border: 2px solid #E5E7EB; border-top-color: #0F9375;
    border-radius: 50%; animation: qiwo-spin 0.7s linear infinite;
    display: inline-block; vertical-align: middle;
}
.qiwo-loading-wrap {
    display: flex; justify-content: center;
    align-items: center; padding: 40px 0;
}

/* ── Select estilizado (mismo aspecto que qiwo-input) ── */
.qiwo-select {
    border: 1px solid #E5E7EB; border-radius: 8px;
    padding: 9px 12px; font-size: 14px; color: #0B2947;
    outline: none; transition: border-color 0.15s;
    background: #fff; width: 100%;
    font-family: inherit; cursor: pointer;
}
.qiwo-select:focus {
    border-color: #0F9375;
    box-shadow: 0 0 0 3px rgba(15,147,117,0.1);
}

/* Reset del spinner cuando se usa inline dentro de un botón (loading state) */
button .admin-spinner {
    margin: 0;
    display: inline-block;
    flex-shrink: 0;
}

/* ── Labels con indicador ── */
.qiwo-label-required { color: #DC2626; }
.qiwo-label-optional { color: #9CA3AF; font-weight: 400; font-size: 11px; }
.qiwo-field-hint     { font-size: 11px; color: #9CA3AF; margin-top: 3px; }

/* ── Tabla: celdas especiales ── */
.qiwo-td-mono    { font-family: 'JetBrains Mono', monospace; font-size: 12px; color: #374151; }
.qiwo-td-actions { width: 80px; text-align: center; white-space: nowrap; }

/* ── Modal: párrafo descriptivo ── */
.qiwo-modal-desc { font-size: 13px; color: #6B7280; margin-bottom: 12px; }

/* ── Wrappers de página y stat card ── */
.admin-page-wrap { display: block; }
.admin-stat-body { flex: 1; min-width: 0; }

/* ── Dark mode para las clases nuevas ── */
body.qiwo-dark .qiwo-alert-error   { background: rgba(220,38,38,0.1); border-color: rgba(220,38,38,0.3); color: #FCB3B3; }
body.qiwo-dark .qiwo-alert-success { background: rgba(5,150,105,0.1);  border-color: rgba(5,150,105,0.3);  color: #6EE7B7; }
body.qiwo-dark .qiwo-spinner       { border-color: rgba(255,255,255,0.1); border-top-color: #0F9375; }
body.qiwo-dark .qiwo-spinner-sm    { border-color: rgba(255,255,255,0.1); border-top-color: #0F9375; }
body.qiwo-dark .qiwo-select        { background: #0F1923; border-color: rgba(255,255,255,0.1); color: #E2E8F0; }
body.qiwo-dark .qiwo-select:focus  { border-color: #0F9375; box-shadow: 0 0 0 3px rgba(15,147,117,0.15); }
body.qiwo-dark .qiwo-td-mono       { color: #CBD5E1; }
body.qiwo-dark .qiwo-modal-desc    { color: #64748B; }
body.qiwo-dark .qiwo-field-hint    { color: #475569; }
body.qiwo-dark .qiwo-label-required { color: #F87171; }
body.qiwo-dark .qiwo-label-optional { color: #475569; }

/* ── TOOLTIP (Política de Acceso) ──────────────────────────── */
.qiwo-tip { position: relative; display: inline-flex; margin-left: 6px; cursor: help; vertical-align: middle; }
.qiwo-tip-icon {
    width: 15px; height: 15px; border-radius: 50%;
    background: #E5E7EB; color: #6B7280;
    font-size: 10px; font-style: normal; font-weight: 700;
    display: inline-flex; align-items: center; justify-content: center;
}
.qiwo-tip-box {
    display: none; position: absolute; left: 0; top: 20px; z-index: 20;
    width: 240px; background: #0B2947; color: #E2E8F0;
    font-size: 12px; font-weight: 400; line-height: 1.5;
    border-radius: 8px; padding: 10px 12px;
    box-shadow: 0 4px 12px rgba(0,0,0,0.15);
}
.qiwo-tip:hover .qiwo-tip-box { display: block; }
body.qiwo-dark .qiwo-tip-icon { background: #334155; color: #94A3B8; }
body.qiwo-dark .qiwo-tip-box  { background: #1E293B; color: #CBD5E1; }

/* ── INTERRUPTOR DE TARDANZA (Política de Acceso) ─────────── */
.qiwo-tardanza-box { background: #F9FAFB; border: 1px solid #E5E7EB; border-radius: 10px; padding: 14px 16px; margin: 16px 0; }
.qiwo-tardanza-header { display: flex; align-items: center; justify-content: space-between; }
.qiwo-switch { position: relative; display: inline-block; width: 38px; height: 22px; flex-shrink: 0; }
.qiwo-switch input { opacity: 0; width: 0; height: 0; }
.qiwo-switch-slider { position: absolute; inset: 0; cursor: pointer; background: #CBD5E1; border-radius: 22px; transition: 0.15s; }
.qiwo-switch-slider::before { content: ""; position: absolute; width: 16px; height: 16px; left: 3px; top: 3px; background: #fff; border-radius: 50%; transition: 0.15s; }
.qiwo-switch input:checked + .qiwo-switch-slider { background: #0F9375; }
.qiwo-switch input:checked + .qiwo-switch-slider::before { transform: translateX(16px); }
body.qiwo-dark .qiwo-tardanza-box { background: #1E293B; border-color: #334155; }

/* ── Selector de días (Política de Acceso) ── */
.qiwo-dias-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; }
.qiwo-dia-btn {
    height: 38px;
    border-radius: 8px;
    border: 1px solid #E2E8F0;
    background: #fff;
    color: #64748B;
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    transition: 0.15s;
}
.qiwo-dia-btn:hover { border-color: #0F9375; color: #0F9375; }
.qiwo-dia-btn--activo, .qiwo-dia-btn--activo:hover {
    background: #0F9375;
    border-color: #0F9375;
    color: #fff;
}
body.qiwo-dark .qiwo-dia-btn { background: #0F1923; border-color: rgba(255,255,255,0.1); color: #94A3B8; }
body.qiwo-dark .qiwo-dia-btn:hover { border-color: #0F9375; color: #34D399; }
body.qiwo-dark .qiwo-dia-btn--activo, body.qiwo-dark .qiwo-dia-btn--activo:hover {
    background: #0F9375;
    border-color: #0F9375;
    color: #fff;
}

/* ── Menú de acciones en tablas ── */
.qiwo-row-actions-menu-item {
    align-items: center; background: transparent; border: 0; border-radius: 6px; color: #234A70;
    cursor: pointer; display: flex; font: inherit; font-size: 13px; gap: 10px; line-height: 1.3;
    padding: 9px 10px; text-align: left; width: 100%;
}
.qiwo-row-actions-menu-item svg { color: #0F9375; flex-shrink: 0; }
.qiwo-row-actions-menu-item:hover,
.qiwo-row-actions-menu-item:focus-visible { background: #E0F2F1; color: #0B2947; outline: none; }
.qiwo-row-actions-menu-item:disabled { cursor: not-allowed; opacity: .55; }
.qiwo-row-actions-menu-item:disabled:hover,
.qiwo-row-actions-menu-item:disabled:focus-visible { background: transparent; }
.qiwo-row-actions-menu-item--success,
.qiwo-row-actions-menu-item--success svg { color: #0F9375; }
.qiwo-row-actions-menu-item--success:hover,
.qiwo-row-actions-menu-item--success:focus-visible { background: rgba(15, 147, 117, .12); color: #0B6B56; }
.qiwo-row-actions-menu-item--danger,
.qiwo-row-actions-menu-item--danger svg { color: #C62828; }
.qiwo-row-actions-menu-item--danger:hover,
.qiwo-row-actions-menu-item--danger:focus-visible { background: rgba(220, 38, 38, .10); color: #991B1B; }
.qiwo-row-actions-menu-item--kiosco,
.qiwo-row-actions-menu-item--kiosco svg { color: #0B2947; }
.qiwo-row-actions-menu-item--kiosco:hover,
.qiwo-row-actions-menu-item--kiosco:focus-visible { background: rgba(11, 41, 71, .08); color: #0B2947; }
.qiwo-row-actions-menu-item--tablet,
.qiwo-row-actions-menu-item--tablet svg { color: #0F9375; }
.qiwo-row-actions-menu-item--tablet:hover,
.qiwo-row-actions-menu-item--tablet:focus-visible { background: rgba(15, 147, 117, .12); color: #0B6B56; }
body.qiwo-dark .qiwo-row-actions-menu-list { background: #172B44; border-color: #36516D; box-shadow: 0 8px 20px rgba(0, 0, 0, .35); }
body.qiwo-dark .qiwo-row-actions-menu-item { color: #D6E2EE; }
body.qiwo-dark .qiwo-row-actions-menu-item svg { color: #5EEAD4; }
body.qiwo-dark .qiwo-row-actions-menu-item:hover,
body.qiwo-dark .qiwo-row-actions-menu-item:focus-visible { background: rgba(15, 147, 117, .18); color: #FFFFFF; }
body.qiwo-dark .qiwo-row-actions-menu-item--success,
body.qiwo-dark .qiwo-row-actions-menu-item--success svg { color: #5EEAD4; }
body.qiwo-dark .qiwo-row-actions-menu-item--success:hover,
body.qiwo-dark .qiwo-row-actions-menu-item--success:focus-visible { background: rgba(15, 147, 117, .24); color: #FFFFFF; }
body.qiwo-dark .qiwo-row-actions-menu-item--danger,
body.qiwo-dark .qiwo-row-actions-menu-item--danger svg { color: #FCB3B3; }
body.qiwo-dark .qiwo-row-actions-menu-item--danger:hover,
body.qiwo-dark .qiwo-row-actions-menu-item--danger:focus-visible { background: rgba(220, 38, 38, .18); color: #FECACA; }
body.qiwo-dark .qiwo-row-actions-menu-item--kiosco,
body.qiwo-dark .qiwo-row-actions-menu-item--kiosco svg { color: #BFDBFE; }
body.qiwo-dark .qiwo-row-actions-menu-item--kiosco:hover,
body.qiwo-dark .qiwo-row-actions-menu-item--kiosco:focus-visible { background: rgba(59, 130, 246, .16); color: #DBEAFE; }
body.qiwo-dark .qiwo-row-actions-menu-item--tablet,
body.qiwo-dark .qiwo-row-actions-menu-item--tablet svg { color: #5EEAD4; }
body.qiwo-dark .qiwo-row-actions-menu-item--tablet:hover,
body.qiwo-dark .qiwo-row-actions-menu-item--tablet:focus-visible { background: rgba(15, 147, 117, .24); color: #FFFFFF; }
/* ── Menús de acciones: capa superior, sin romper el scroll de la tabla ── */
.qiwo-row-actions-menu {
    display: inline-block;
    min-width: 0;
    position: static;
    vertical-align: middle;
}
.qiwo-row-actions-trigger {
    align-items: center;
    background: #FFFFFF;
    border: 1px solid #C7D2E0;
    border-radius: 7px;
    box-sizing: border-box;
    color: #0B2947;
    cursor: pointer;
    display: inline-flex;
    font: inherit;
    font-size: 12px;
    font-weight: 700;
    gap: 6px;
    justify-content: center;
    min-height: 36px;
    padding: 7px 10px;
    user-select: none;
    width: 112px;
}
.qiwo-row-actions-trigger:hover,
.qiwo-row-actions-trigger[aria-expanded="true"] {
    background: #E0F2F1;
    border-color: #0F9375;
    color: #0F9375;
}
.qiwo-row-actions-trigger:focus-visible {
    outline: 2px solid rgba(15, 147, 117, .3);
    outline-offset: 2px;
}
.qiwo-row-actions-trigger[aria-expanded="true"] svg { transform: rotate(180deg); }
.qiwo-row-actions-menu-list[popover] {
    background: #FFFFFF;
    border: 1px solid #D8E1EC;
    border-radius: 10px;
    box-shadow: 0 10px 24px rgba(11, 41, 71, .18);
    box-sizing: border-box;
    color: #234A70;
    display: none;
    gap: 2px;
    inset: auto;
    margin: 0;
    max-height: min(440px, calc(100dvh - 24px));
    max-width: min(320px, calc(100vw - 24px));
    min-width: 220px;
    overflow-y: auto;
    padding: 5px;
    position: fixed;
    z-index: 2000;
}
.qiwo-row-actions-menu-list[popover]:popover-open,
.qiwo-row-actions-menu-list[data-qiwo-open="true"] { display: grid; }
.qiwo-row-actions-menu-heading { display: none; }
.qiwo-row-actions-menu-close {
    align-items: center;
    background: transparent;
    border: 0;
    border-radius: 7px;
    color: #64748B;
    cursor: pointer;
    display: inline-flex;
    height: 36px;
    justify-content: center;
    padding: 0;
    width: 36px;
}
.qiwo-row-actions-menu-close:hover,
.qiwo-row-actions-menu-close:focus-visible { background: #EAF1F8; color: #0B2947; outline: none; }
.qiwo-row-actions-menu-list .qiwo-row-actions-menu-item {
    align-items: center;
    box-sizing: border-box;
    min-height: 40px;
    white-space: normal;
}
body.qiwo-dark .qiwo-row-actions-trigger { background: #172B44; border-color: #36516D; color: #E5EDF5; }
body.qiwo-dark .qiwo-row-actions-trigger:hover,
body.qiwo-dark .qiwo-row-actions-trigger[aria-expanded="true"] {
    background: rgba(15, 147, 117, .18);
    border-color: #0F9375;
    color: #5EEAD4;
}
body.qiwo-dark .qiwo-row-actions-menu-list[popover] {
    background: #172B44;
    border-color: #36516D;
    box-shadow: 0 10px 24px rgba(0, 0, 0, .40);
}
body.qiwo-dark .qiwo-row-actions-menu-close { color: #AABFD3; }
body.qiwo-dark .qiwo-row-actions-menu-close:hover,
body.qiwo-dark .qiwo-row-actions-menu-close:focus-visible { background: rgba(255,255,255,.08); color: #FFFFFF; }

@media (max-width: 767px) {
    .qiwo-row-actions-menu-list[popover][data-qiwo-placement="sheet"] {
        border-radius: 16px;
        bottom: 12px;
        left: 12px;
        max-height: min(70dvh, 520px);
        max-width: none;
        min-width: 0;
        padding: 8px;
        right: 12px;
        top: auto;
        width: auto;
    }
    .qiwo-row-actions-menu-list[popover][data-qiwo-placement="sheet"]::backdrop {
        background: rgba(11, 41, 71, .42);
    }
    .qiwo-row-actions-menu-heading {
        align-items: center;
        border-bottom: 1px solid #E5EAF0;
        color: #0B2947;
        display: flex;
        font-size: 14px;
        font-weight: 800;
        justify-content: space-between;
        padding: 2px 2px 8px 10px;
    }
    .qiwo-row-actions-menu-list .qiwo-row-actions-menu-item {
        font-size: 14px;
        min-height: 44px;
        padding: 11px 10px;
    }
    body.qiwo-dark .qiwo-row-actions-menu-heading { border-bottom-color: #36516D; color: #E5EDF5; }
}

/* ── Portal Tutor: Mis hijos ───────────────────────────────── */
.tutor-children-page-header {
    align-items: center;
    display: flex;
    gap: 16px;
    justify-content: space-between;
    margin-bottom: 20px;
}
.tutor-link-child-open {
    align-items: center;
    display: inline-flex;
    flex-shrink: 0;
    justify-content: center;
    white-space: nowrap;
}
.tutor-link-child-card {
    margin: 0 0 28px;
}
.tutor-link-child-header {
    border-bottom: 1px solid #E5EAF0;
    padding: 20px 24px 16px;
}
.tutor-section-kicker {
    color: #0F9375;
    display: block;
    font-size: 11px;
    font-weight: 800;
    letter-spacing: .08em;
    margin-bottom: 5px;
    text-transform: uppercase;
}
.tutor-link-child-header h2,
.tutor-children-section-header h2 {
    color: #0B2947;
    font-size: 18px;
    line-height: 1.25;
    margin: 0;
}
.tutor-link-child-header p,
.tutor-children-section-header p {
    color: #64748B;
    font-size: 13px;
    line-height: 1.45;
    margin: 5px 0 0;
}
.tutor-link-child-body {
    padding: 20px 24px 22px;
}
.tutor-link-child-fields {
    grid-template-columns: minmax(180px, .78fr) minmax(260px, 1.22fr);
    margin-bottom: 0;
}
.tutor-link-child-fields .qiwo-form-group { margin-bottom: 0; }
.tutor-link-child-alert {
    align-items: center;
    display: flex;
    gap: 8px;
    margin: 0 0 16px;
}
.tutor-inline-loading {
    align-items: center;
    color: #64748B;
    display: flex;
    font-size: 13px;
    gap: 9px;
    min-height: 72px;
}
.tutor-inline-loading .admin-spinner { height: 18px; width: 18px; }
.tutor-form-actions {
    align-items: center;
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 18px;
}
.tutor-form-actions .qiwo-btn-primary,
.tutor-form-actions .qiwo-btn-secondary,
.tutor-child-editor-actions .qiwo-btn-primary,
.tutor-child-editor-actions .qiwo-btn-secondary {
    align-items: center;
    display: inline-flex;
    justify-content: center;
}
.tutor-verified-child {
    align-items: flex-start;
    background: #F0FDF9;
    border: 1px solid #A7F3D0;
    border-radius: 10px;
    display: flex;
    gap: 11px;
    margin-bottom: 18px;
    padding: 13px 14px;
}
.tutor-verified-child-icon {
    align-items: center;
    background: #D1FAE5;
    border-radius: 50%;
    color: #0F9375;
    display: flex;
    flex: 0 0 30px;
    height: 30px;
    justify-content: center;
    margin-top: 1px;
    width: 30px;
}
.tutor-verified-child span,
.tutor-verified-child p {
    color: #64748B;
    display: block;
    font-size: 12px;
    line-height: 1.35;
    margin: 0;
}
.tutor-verified-child strong {
    color: #0B2947;
    display: block;
    font-size: 14px;
    margin: 2px 0;
}
.tutor-children-section { margin-top: 4px; }
.tutor-children-section-header {
    align-items: center;
    display: flex;
    gap: 10px;
    margin-bottom: 12px;
}
.tutor-children-section-icon {
    align-items: center;
    background: #E0F2F1;
    border-radius: 9px;
    color: #0F9375;
    display: flex;
    flex: 0 0 36px;
    height: 36px;
    justify-content: center;
    width: 36px;
}
.tutor-children-section-header h2 { font-size: 16px; }
.tutor-children-section-header p { font-size: 12px; margin-top: 2px; }
.tutor-child-avatar {
    background: #E0F2F1;
    color: #0F9375;
    font-weight: 700;
}
.tutor-primary-link {
    color: #0F9375;
    display: inline-block;
    font-size: 11px;
    font-weight: 700;
    margin-top: 2px;
}
.tutor-child-code {
    color: #0B4F8A;
    font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
    font-size: 12px;
    font-weight: 700;
}
.tutor-child-section-detail {
    display: flex;
    flex-direction: column;
    gap: 3px;
}
.tutor-child-section-detail > span { color: #0B2947; font-size: 13px; font-weight: 700; }
.tutor-child-section-detail small { color: #64748B; font-size: 12px; }
.tutor-attendance-summary {
    align-items: flex-start;
    display: flex;
    gap: 18px;
}
.tutor-attendance-summary > div { display: flex; flex-direction: column; gap: 2px; }
.tutor-attendance-summary strong { color: #0F9375; font-size: 16px; line-height: 1.1; }
.tutor-attendance-summary small { color: #64748B; font-size: 11px; white-space: nowrap; }
.tutor-attendance-summary .tutor-attendance-late strong { color: #B45309; }
.tutor-child-row-expanded > td { background: #F0FDF9 !important; }
.qiwo-table .tutor-child-editor-cell { padding: 0; }
.tutor-child-editor {
    background: #F0FDF9;
    border-top: 1px solid #A7F3D0;
    padding: 20px 24px 22px;
}
.tutor-child-editor-success { align-items: center; display: flex; gap: 8px; margin-bottom: 16px; }
.tutor-child-editor-heading {
    align-items: flex-start;
    border-bottom: 1px solid #BAEAD9;
    display: flex;
    flex-wrap: wrap;
    gap: 18px;
    justify-content: space-between;
    margin-bottom: 18px;
    padding-bottom: 15px;
}
.tutor-child-editor-heading > div > span,
.tutor-child-editor-heading dt {
    color: #0F9375;
    display: block;
    font-size: 10px;
    font-weight: 800;
    letter-spacing: .06em;
    margin-bottom: 3px;
    text-transform: uppercase;
}
.tutor-child-editor-heading > div > strong { color: #0B2947; font-size: 14px; }
.tutor-child-editor-heading dl {
    display: flex;
    flex-wrap: wrap;
    gap: 16px 24px;
    margin: 0;
}
.tutor-child-editor-heading dd {
    color: #475569;
    font-size: 13px;
    margin: 0;
}
.tutor-child-editor-form {
    display: grid;
    gap: 14px;
    grid-template-columns: repeat(3, minmax(0, 1fr));
}
.tutor-child-editor-form .qiwo-form-group { margin: 0; }
.tutor-child-editor-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    justify-content: flex-end;
    margin-top: 18px;
}
.tutor-status-muted {
    background: #F1F5F9;
    border-radius: 20px;
    color: #64748B;
    font-size: 11px;
    font-weight: 700;
    padding: 2px 8px;
}
.tutor-children-mobile-list { display: none; }

body.qiwo-dark .tutor-link-child-header { border-bottom-color: rgba(255,255,255,.08); }
body.qiwo-dark .tutor-link-child-header h2,
body.qiwo-dark .tutor-children-section-header h2,
body.qiwo-dark .tutor-verified-child strong,
body.qiwo-dark .tutor-child-section-detail > span,
body.qiwo-dark .tutor-child-editor-heading > div > strong { color: #E5EDF5; }
body.qiwo-dark .tutor-verified-child { background: rgba(15,147,117,.12); border-color: rgba(52,211,153,.28); }
body.qiwo-dark .tutor-verified-child-icon,
body.qiwo-dark .tutor-children-section-icon { background: rgba(15,147,117,.18); color: #5EEAD4; }
body.qiwo-dark .tutor-child-code { color: #7DD3FC; }
body.qiwo-dark .tutor-child-row-expanded > td { background: rgba(15,147,117,.12) !important; }
body.qiwo-dark .tutor-child-editor { background: rgba(15,147,117,.10); border-top-color: rgba(52,211,153,.28); }
body.qiwo-dark .tutor-child-editor-heading { border-bottom-color: rgba(52,211,153,.22); }
body.qiwo-dark .tutor-child-editor-heading dd { color: #AABFD3; }
body.qiwo-dark .tutor-status-muted { background: #243044; color: #AABFD3; }
body.qiwo-dark .tutor-inline-loading { color: #AABFD3; }

@media (max-width: 767px) {
    .tutor-children-page-header { align-items: flex-start; flex-direction: column; }
    .tutor-link-child-open { width: 100%; }
    .tutor-link-child-card { margin-bottom: 22px; }
    .tutor-link-child-header,
    .tutor-link-child-body { padding-left: 16px; padding-right: 16px; }
    .tutor-link-child-fields { grid-template-columns: 1fr; }
    .tutor-form-actions > button { flex: 1 1 160px; }
    .tutor-children-table-desktop { display: none; }
    .tutor-children-mobile-list { display: grid; gap: 12px; }
    .tutor-child-card {
        background: #FFFFFF;
        border: 1px solid #E1E8F0;
        border-radius: 14px;
        overflow: hidden;
    }
    .tutor-child-card-expanded { border-color: #88D8C5; }
    .tutor-child-card-header { align-items: center; display: flex; gap: 11px; padding: 16px 16px 12px; }
    .tutor-child-card-header h3 { color: #0B2947; font-size: 15px; line-height: 1.3; margin: 0; }
    .tutor-child-card-data {
        display: grid;
        gap: 0;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        padding: 0 16px 14px;
    }
    .tutor-child-card-data > div { border-top: 1px solid #EDF1F5; min-height: 67px; padding: 10px 10px 8px 0; }
    .tutor-child-card-data > div:nth-child(even) { padding-left: 10px; padding-right: 0; }
    .tutor-child-card-data span,
    .tutor-child-card-data small { color: #64748B; display: block; font-size: 11px; line-height: 1.35; }
    .tutor-child-card-data > div > strong { color: #0B2947; display: block; font-size: 13px; line-height: 1.35; margin-top: 2px; }
    .tutor-child-card-data .tutor-mobile-attendance { color: #0F9375; font-size: 16px; }
    /* El selector de arriba pone display:block a TODO span de la tarjeta -- es
       para los rotulos ("Codigo", "Seccion"), pero tambien atrapaba al chip de
       matricula, que quedaba estirado de lado a lado de la columna como una
       barra verde. Un chip de estado se ajusta a su texto. (09/09/2026) */
    .tutor-child-card-data .admin-badge,
    .tutor-child-card-data .tutor-status-muted {
        display: inline-flex;
        align-items: center;
        width: auto;
        margin-top: 4px;
    }
    /* Ese mismo selector de rotulos tambien le pisaba el COLOR al chip: quedaba
       texto gris (#64748B) sobre fondo verde, apagado y sin relacion con el
       estado. Se le devuelven sus colores; las variantes de modo oscuro
       (body.qiwo-dark .admin-badge.badge-matricula-*) siguen ganando por
       especificidad, asi que no hace falta repetirlas aca. */
    .tutor-child-card-data .badge-matricula-activa   { color: #065F46; }
    .tutor-child-card-data .badge-matricula-inactiva { color: #991B1B; }
    .tutor-child-card-actions { border-top: 1px solid #E5EAF0; padding: 12px 16px; }
    .tutor-child-card-actions .qiwo-row-actions-menu,
    .tutor-child-card-actions .qiwo-row-actions-trigger { width: 100%; }
    .tutor-child-card-actions .qiwo-row-actions-trigger { justify-content: space-between; }
    .tutor-child-editor { border-top-color: #A7F3D0; padding: 18px 16px; }
    .tutor-child-editor-heading { display: block; }
    .tutor-child-editor-heading dl { gap: 12px 16px; margin-top: 14px; }
    .tutor-child-editor-form { grid-template-columns: 1fr; }
    .tutor-child-editor-actions > button { flex: 1 1 150px; }
    body.qiwo-dark .tutor-child-card { background: #1A2535; border-color: rgba(255,255,255,.08); }
    body.qiwo-dark .tutor-child-card-expanded { border-color: rgba(52,211,153,.42); }
    body.qiwo-dark .tutor-child-card-header h3,
    body.qiwo-dark .tutor-child-card-data > div > strong { color: #E5EDF5; }
    body.qiwo-dark .tutor-child-card-data > div,
    body.qiwo-dark .tutor-child-card-actions { border-color: rgba(255,255,255,.08); }
}

@media (max-width: 420px) {
    .tutor-child-card-data { grid-template-columns: 1fr; }
    .tutor-child-card-data > div:nth-child(even) { padding-left: 0; }
}

/* ─────────────────────────────────────────────────────────────────────────
   Recuperacion de contrasena del apoderado (/qiwo/recuperar-password)
   Va en el CSS global, no en un .razor.css scoped (regla CLAUDE.md seccion 6).
   ───────────────────────────────────────────────────────────────────────── */
.recup-wrapper {
    min-height: 100vh;
    min-height: 100dvh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 24px;
    background: #F8FAFC;
}
.recup-card {
    width: 100%;
    max-width: 420px;
    background: #FFFFFF;
    border: 1px solid #E2E8F0;
    border-radius: 16px;
    padding: 32px;
    box-shadow: 0 2px 12px rgba(0, 0, 0, .06);
}
/* El SVG es la "Q" del logotipo y el texto es "iwo": juntos forman la palabra.
   Por eso el gap es casi cero -- con separación se leía como dos elementos
   distintos en vez de una sola marca. */
.recup-brand {
    display: flex; align-items: baseline; justify-content: center; gap: 1px;
    margin-bottom: 26px;
}
.recup-brand svg { align-self: center; }
.recup-brand span { font-size: 21px; font-weight: 800; color: #0B2947; letter-spacing: -.02em; }
.recup-titulo { font-size: 20px; font-weight: 700; color: #0B2947; margin: 0 0 6px; text-align: center; }
.recup-sub    { font-size: 13.5px; color: #64748B; line-height: 1.55; margin: 0 0 20px; text-align: center; }
.recup-label  { display: block; font-size: 13px; font-weight: 600; color: #334155; margin-bottom: 6px; }
.recup-input {
    width: 100%; height: 44px; padding: 0 12px;
    border: 1px solid #E2E8F0; border-radius: 10px;
    font-size: 15px; color: #0B2947; background: #FFFFFF;
}
.recup-input:focus { outline: none; border-color: #0F9375; box-shadow: 0 0 0 3px rgba(15,147,117,.12); }
/* El codigo se lee de un correo y a veces se dicta por telefono: letra grande y
   bien espaciada para que no se confunda un digito. */
.recup-input--codigo {
    text-align: center; font-size: 26px; font-weight: 700;
    letter-spacing: 10px; height: 56px; padding: 0;
}
.recup-btn {
    width: 100%; height: 46px; margin-top: 16px;
    background: #0F9375; color: #FFFFFF;
    border: 0; border-radius: 10px;
    font-size: 15px; font-weight: 600; cursor: pointer;
}
.recup-btn:hover:not(:disabled) { background: #0B7A61; }
.recup-btn:disabled { opacity: .6; cursor: default; }
.recup-link-btn {
    width: 100%; margin-top: 10px; padding: 8px;
    background: transparent; border: 0; color: #64748B;
    font-size: 13px; cursor: pointer;
}
.recup-link-btn:hover { color: #0F9375; }
.recup-error {
    margin-top: 12px; padding: 10px 12px;
    background: #FEE2E2; color: #991B1B;
    border-radius: 8px; font-size: 13px; line-height: 1.5;
}
.recup-ok-icono {
    width: 52px; height: 52px; margin: 0 auto 12px;
    background: #D1FAE5; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
}
.recup-usuario-box {
    background: #D1FAE5; border-radius: 10px;
    padding: 16px; margin: 16px 0 4px; text-align: center;
}
.recup-usuario-label { display: block; font-size: 12px; color: #065F46; margin-bottom: 4px; }
.recup-usuario-valor { display: block; font-size: 24px; font-weight: 700; color: #065F46; letter-spacing: 1px; }
.recup-usuario-nota  { display: block; font-size: 12px; color: #065F46; margin-top: 6px; }
.recup-ayuda {
    margin-top: 20px; padding-top: 16px; border-top: 1px solid #F1F5F9;
    font-size: 12.5px; color: #64748B; line-height: 1.6; text-align: center;
}
.recup-ayuda a { color: #0F9375; font-weight: 600; text-decoration: none; }
.recup-volver {
    display: block; margin-top: 12px; text-align: center;
    font-size: 13px; color: #64748B; text-decoration: none;
}
.recup-volver:hover { color: #0F9375; }

/* ── COMUNICADOS (tarjeta en Inicio del portal Tutor) ──────────────── */
.comunicados-section { display: flex; flex-direction: column; gap: 10px; margin-bottom: 28px; }
.comunicados-kicker {
    display: flex; align-items: center; gap: 8px; margin: 0 0 2px;
    font-size: 12px; font-weight: 700; letter-spacing: .04em; color: #64748B; text-transform: uppercase;
}
.comunicado-card {
    background: #fff; border: 1px solid #E2E8F0;
    border-radius: 12px; padding: 14px 16px; display: flex; gap: 12px; align-items: flex-start;
}
/* Urgente tiñe toda la superficie de la tarjeta (nunca una franja lateral aislada
   -- regla del proyecto: eso lee como "dashboard genérico hecho por IA"). Título y
   mensaje van en dos tonos distintos de la misma familia roja, no el mismo stop. */
.comunicado-card.comunicado-urgente { background: #FEE2E2; border-color: transparent; }
.comunicado-card.comunicado-urgente .comunicado-titulo  { color: #7F1D1D; }
.comunicado-card.comunicado-urgente .comunicado-mensaje { color: #991B1B; }
.comunicado-card.comunicado-urgente .comunicado-fecha   { color: #B45454; }
.comunicado-leido-btn {
    display: flex; align-items: center; gap: 4px; flex-shrink: 0;
    background: transparent; border: 1px solid currentColor; opacity: .55;
    border-radius: 8px; padding: 6px 10px; font-size: 11.5px; font-weight: 600;
    color: inherit; cursor: pointer; white-space: nowrap;
}
.comunicado-leido-btn:hover { opacity: 1; background: rgba(0,0,0,.04); }
.comunicado-badge {
    font-size: 10px; font-weight: 700; letter-spacing: .03em; padding: 2px 8px; border-radius: 10px;
}
.comunicado-badge-sede        { background: #E1F5EE; color: #085041; }
.comunicado-badge-institucion { background: #E6F1FB; color: #0C447C; }
.comunicado-badge-auto        { background: #FEF9C3; color: #854D0E; }
.comunicado-badge-urgente     { background: #FEE2E2; color: #991B1B; }
.comunicado-fecha    { font-size: 12px; color: #94A3B8; }
.comunicado-titulo   { font-size: 14px; font-weight: 600; color: #0B2947; margin: 0 0 2px; }
.comunicado-mensaje  { font-size: 13px; color: #64748B; margin: 0; }
.comunicados-vacio    { font-size: 13px; color: #94A3B8; text-align: center; padding: 12px 0; }
.comunicados-mes-header {
    font-size: 11px; font-weight: 700; letter-spacing: .04em; color: #94A3B8;
    text-transform: uppercase; margin: 20px 0 10px; padding-top: 4px;
}
.comunicados-mes-header:first-child { margin-top: 0; }
.comunicados-ver-todos { font-size: 12px; color: #0F9375; text-decoration: none; font-weight: 600; margin-left: auto; }

body.qiwo-dark .comunicados-kicker,
body.qiwo-dark .comunicados-mes-header { color: #64748B; }
body.qiwo-dark .comunicado-card   { background: #1A2535; border-color: #26344A; }
body.qiwo-dark .comunicado-titulo { color: #E7EDF5; }
body.qiwo-dark .comunicado-mensaje,
body.qiwo-dark .comunicado-fecha,
body.qiwo-dark .comunicados-vacio { color: #93A4BC; }
body.qiwo-dark .comunicado-badge-sede        { background: rgba(15,147,117,.18); color: #5DCAA5; }
body.qiwo-dark .comunicado-badge-institucion { background: rgba(59,138,221,.18); color: #85B7EB; }
body.qiwo-dark .comunicado-badge-urgente     { background: rgba(220,38,38,.20); color: #FCB3B3; }
body.qiwo-dark .comunicado-card.comunicado-urgente { background: rgba(220,38,38,.15); }
body.qiwo-dark .comunicado-card.comunicado-urgente .comunicado-titulo,
body.qiwo-dark .comunicado-card.comunicado-urgente .comunicado-mensaje,
body.qiwo-dark .comunicado-card.comunicado-urgente .comunicado-fecha { color: #FCB3B3; }
body.qiwo-dark .comunicado-badge-auto        { background: rgba(217,119,6,.18); color: #FBBF24; }

/* ── FRANJA DE STATS + TARJETAS DE HIJO (dashboard Tutor, mobile-first) ──────
   Reemplaza las 3 .admin-stat-card sueltas + la tabla de 5 columnas con scroll
   horizontal (28/08/2026, pedido directo de Jordy: "el PWA de Apoderados es
   netamente experiencia de app, hay que pulirla"). El estado de hoy tiñe toda
   la tarjeta con la misma paleta de .qiwo-estado-*, nunca un badge chico sobre
   fondo neutro ni una franja lateral. */
.qiwo-stats-strip {
    display: flex; background: #fff; border: 1px solid #E2E8F0; border-radius: 14px;
    padding: 14px 4px; margin-bottom: 24px;
}
.qiwo-stats-strip-item { flex: 1; text-align: center; padding: 0 4px; min-width: 0; }
.qiwo-stats-strip-divider { width: 1px; background: #E2E8F0; }
.qiwo-stats-strip-value { font-size: 19px; font-weight: 600; color: #0B2947; margin: 0; }
.qiwo-stats-strip-label { font-size: 10.5px; color: #64748B; margin: 2px 0 0; }

.qiwo-hijos-lista { display: flex; flex-direction: column; gap: 10px; margin-bottom: 28px; }
.qiwo-hijo-card {
    display: flex; align-items: center; gap: 12px; width: 100%;
    border-radius: 14px; padding: 14px; border: none; background: #F1F5F9; color: #334155;
    cursor: pointer; text-align: left; font-family: inherit;
}
.qiwo-hijo-avatar {
    width: 40px; height: 40px; border-radius: 50%; flex-shrink: 0; background: #fff;
    display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 700;
}
.qiwo-hijo-cuerpo { flex: 1; min-width: 0; }
.qiwo-hijo-nombre { font-size: 13.5px; font-weight: 600; margin: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.qiwo-hijo-detalle { font-size: 11.5px; margin: 1px 0 0; opacity: .85; }
.qiwo-hijo-chevron { flex-shrink: 0; opacity: .6; }

.qiwo-hijo-card-puntual  { background: #D1FAE5; color: #065F46; }
.qiwo-hijo-card-tardanza { background: #FEF3A0; color: #854D0E; }
.qiwo-hijo-card-fuera    { background: #FDC58B; color: #7C2D12; }
.qiwo-hijo-card-salida   { background: #DBEAFE; color: #1D4ED8; }
.qiwo-hijo-card-asistio  { background: #99F6E4; color: #115E59; }
.qiwo-hijo-card-falta    { background: #FCB3B3; color: #7F1D1D; }
.qiwo-hijo-card-justificado { background: #DDD6FE; color: #5B21B6; }
/* Jornada todavía abierta (14/09/2026): gris neutro a propósito. Cualquier color
   del semáforo se leería como veredicto, y acá justamente no hay veredicto —
   el alumno puede llegar y marcar en cualquier momento hasta el fin de jornada. */
.qiwo-hijo-card-pendiente { background: #E8EDF3; color: #47576B; }
.qiwo-hijo-card-neutro   { background: #F1F5F9; color: #64748B; }
.qiwo-hijo-card-nohabil  {
    background: repeating-linear-gradient(45deg, #F1F5F9, #F1F5F9 4px, #E2E8F0 4px, #E2E8F0 8px);
    color: #475569;
}

/* ── LISTA DE ASISTENCIAS (Tutor, mobile-first) ──────────────────────────────
   Reemplaza la tabla de 6 columnas con scroll horizontal -- mismo tratamiento
   que .qiwo-hijo-card: el color va en la superficie completa, reusando las
   clases .qiwo-hijo-card-* de estado (mismo significado en toda la app). */
.qiwo-asistencias-lista { display: flex; flex-direction: column; gap: 8px; margin-bottom: 8px; }
.qiwo-asis-card { display: flex; align-items: center; gap: 12px; border-radius: 12px; padding: 12px 14px; }
.qiwo-asis-fecha-col { flex-shrink: 0; text-align: center; min-width: 44px; }
.qiwo-asis-fecha { display: block; font-size: 12.5px; font-weight: 600; }
.qiwo-asis-hora  { display: block; font-size: 11px; opacity: .8; font-family: monospace; }

body.qiwo-dark .qiwo-stats-strip        { background: #1A2535; border-color: #26344A; }
body.qiwo-dark .qiwo-stats-strip-divider { background: #26344A; }
body.qiwo-dark .qiwo-stats-strip-value  { color: #E7EDF5; }
body.qiwo-dark .qiwo-stats-strip-label  { color: #93A4BC; }
body.qiwo-dark .qiwo-hijo-avatar        { background: rgba(255,255,255,.15); }
body.qiwo-dark .qiwo-hijo-card-puntual  { background: rgba(16,185,129,.18);  color: #6EE7B7; }
body.qiwo-dark .qiwo-hijo-card-tardanza { background: rgba(234,179,8,.22);   color: #FDE68A; }
body.qiwo-dark .qiwo-hijo-card-fuera    { background: rgba(234,88,12,.26);   color: #FDC58B; }
body.qiwo-dark .qiwo-hijo-card-salida   { background: rgba(37,99,235,.22);   color: #93C5FD; }
body.qiwo-dark .qiwo-hijo-card-asistio  { background: rgba(20,184,166,.30);  color: #5EEAD4; }
body.qiwo-dark .qiwo-hijo-card-falta    { background: rgba(220,38,38,.26);   color: #FCB3B3; }
body.qiwo-dark .qiwo-hijo-card-justificado { background: rgba(124,58,237,.24); color: #C4B5FD; }
body.qiwo-dark .qiwo-hijo-card-pendiente { background: rgba(148,163,184,.20); color: #C7D3E0; }
body.qiwo-dark .qiwo-hijo-card-neutro   { background: rgba(100,116,139,.20); color: #CBD5E1; }

/* ── MODAL DE DESTINATARIOS (Admin Comunicados) ────────────────────── */
.qiwo-modal-destinatarios { max-width: 640px; }
.destinatarios-columnas {
    display: grid; grid-template-columns: 1fr 1fr; gap: 0;
}
.destinatarios-columna { padding-right: 16px; }
.destinatarios-columna-pendiente { border-left: 1px solid #F1F5F9; padding-left: 16px; padding-right: 0; }
.destinatarios-columna-header {
    display: flex; align-items: center; gap: 6px; margin-bottom: 10px;
    font-size: 11px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
}
.destinatarios-lista {
    display: flex; flex-direction: column; gap: 10px;
    max-height: 280px; overflow-y: auto;
}
.destinatario-fila { display: flex; align-items: center; gap: 10px; }
.destinatario-nombre {
    font-size: 13px; font-weight: 600; color: #0B2947; margin: 0;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.destinatario-fecha { font-size: 11px; color: #94A3B8; margin: 0; }
.destinatarios-vacio { font-size: 12px; color: #94A3B8; }

body.qiwo-dark .destinatarios-columna-pendiente { border-left-color: #26344A; }
body.qiwo-dark .destinatario-nombre { color: #E7EDF5; }
body.qiwo-dark .destinatario-fecha,
body.qiwo-dark .destinatarios-vacio { color: #64748B; }

/* ── PÁGINAS LEGALES (Términos de Uso / Política de Privacidad) ──── */
.legal-wrapper {
    min-height: 100vh;
    min-height: 100dvh;
    display: flex;
    justify-content: center;
    padding: 40px 24px;
    background: #F8FAFC;
}
.legal-card {
    width: 100%;
    max-width: 760px;
    background: #FFFFFF;
    border: 1px solid #E2E8F0;
    border-radius: 16px;
    padding: 40px 48px;
    box-shadow: 0 2px 12px rgba(0, 0, 0, .06);
}
.legal-brand {
    display: flex; align-items: center; gap: 9px;
    margin-bottom: 28px;
}
.legal-brand span { font-size: 18px; font-weight: 800; color: #0B2947; letter-spacing: -.02em; }
.legal-titulo   { font-size: 24px; font-weight: 700; color: #0B2947; margin: 0 0 4px; }
.legal-updated  { font-size: 12px; color: #94A3B8; margin: 0 0 28px; }
.legal-card h2  { font-size: 15.5px; font-weight: 700; color: #0B2947; margin: 26px 0 10px; }
.legal-card p, .legal-card li { font-size: 14px; line-height: 1.7; color: #334155; }
.legal-card ul  { margin: 6px 0 16px; padding-left: 20px; }
.legal-card strong { color: #0B2947; }
.legal-volver {
    display: inline-flex; align-items: center; gap: 6px; margin-top: 32px;
    font-size: 13px; color: #0F9375; font-weight: 600; text-decoration: none;
}
.legal-volver:hover { color: #0B7A61; }
.legal-cruce {
    display: block; margin-top: 6px;
    font-size: 13px; color: #64748B; text-decoration: none;
}
.legal-cruce:hover { color: #0F9375; }

body.qiwo-dark .legal-wrapper { background: #0B1220; }
body.qiwo-dark .legal-card    { background: #131C2B; border-color: #26344A; }
body.qiwo-dark .legal-brand span,
body.qiwo-dark .legal-titulo,
body.qiwo-dark .legal-card h2,
body.qiwo-dark .legal-card strong { color: #E7EDF5; }
body.qiwo-dark .legal-updated,
body.qiwo-dark .legal-card p,
body.qiwo-dark .legal-card li,
body.qiwo-dark .legal-cruce { color: #93A4BC; }

/* Links de legales en el footer del login/registro — mismo tono apagado que
   "Acceso administrativo" (.login-admin-link), están en el panel BLANCO. */
.login-legal-links {
    width: 100%;
    max-width: 360px;
    margin-top: 4px;
    font-size: 11px;
    text-align: center;
}
.login-legal-links a { color: #CBD5E1; text-decoration: none; }
.login-legal-links a:hover { color: #0F9375; }
.login-legal-links span { color: #CBD5E1; margin: 0 6px; }

body.qiwo-dark .login-legal-links a,
body.qiwo-dark .login-legal-links span { color: #475569; }
body.qiwo-dark .login-legal-links a:hover { color: #34D399; }

body.qiwo-dark .recup-wrapper { background: #0B1220; }
body.qiwo-dark .recup-card    { background: #131C2B; border-color: #26344A; }
body.qiwo-dark .recup-brand span,
body.qiwo-dark .recup-titulo  { color: #E7EDF5; }
body.qiwo-dark .recup-sub,
body.qiwo-dark .recup-ayuda,
body.qiwo-dark .recup-volver  { color: #93A4BC; }
body.qiwo-dark .recup-label   { color: #CBD5E1; }
body.qiwo-dark .recup-input   { background: #0F1923; border-color: #26344A; color: #E2E8F0; }
body.qiwo-dark .recup-ayuda   { border-top-color: #26344A; }

/* Link de recuperacion en el login. El contenedor .login-options ya existe
   (linea ~236) y estaba vacio desde que se oculto el "olvide mi contrasena"
   en el commit bcf3604; aca solo se estiliza el enlace que vuelve a poblarlo. */
.login-forgot {
    font-size: 13px; color: #64748B; text-decoration: none; font-weight: 500;
}
.login-forgot:hover { color: #0F9375; }
body.qiwo-dark .login-forgot { color: #93A4BC; }
body.qiwo-dark .login-forgot:hover { color: #34D399; }


/* ══════════════════════════════════════════════════════════════════════════
   SHEET DE DETALLE DEL ALUMNO — Portal Auxiliar (27/08/2026)
   Propuesta propuestas/propuesta-marcar-asistencia-movil-20260827.html,
   aprobada por Jordy: las auxiliares marcan más desde tablet y celular en
   vertical que desde PC. El modal centrado pasa a bottom sheet en táctil y a
   panel lateral derecho en PC; la acción pendiente es una CTA grande pegajosa
   abajo; motivo = chips de un toque; hora = steppers. Todo con clases
   modificadoras (--sheet) para no tocar los demás modales del sistema, que
   siguen centrados como siempre.
   ══════════════════════════════════════════════════════════════════════════ */

@keyframes qiwoSheetUp   { from { transform: translateY(100%); } to { transform: translateY(0); } }
@keyframes qiwoSheetIzq  { from { transform: translateX(100%); } to { transform: translateX(0); } }

/* PC: panel lateral derecho -- la grilla de alumnos sigue visible y la
   auxiliar no pierde el contexto de la sección que está mirando. */
.qiwo-modal-overlay--sheet {
    justify-content: flex-end;
    padding: 0;
}
.qiwo-modal-card--sheet {
    max-width: 460px;
    /* 100vh primero (respaldo) y 100dvh después -- regla del proyecto, bug real
       del 21/08/2026: en Chrome Android 100vh es el viewport GRANDE y lo que se
       corta es el header con la X. */
    height: 100vh;
    height: 100dvh;
    max-height: none;
    border-radius: 0;
    box-shadow: -18px 0 50px rgba(8,31,54,.25);
    animation: qiwoSheetIzq .25s ease-out;
}

/* Handle de arrastre: solo en táctil (bottom sheet), en PC no aplica. */
.qiwo-sheet-handle { display: none; }

/* Tablet y celular: bottom sheet anclado abajo, contenido en zona del pulgar.
   Sube el breakpoint del bottom sheet de 640px (solo celular) a 1024px para
   esta pantalla -- la Galaxy Tab A11 en vertical (800px) es el caso principal. */
@media (max-width: 1024px) {
    .qiwo-modal-overlay--sheet {
        align-items: flex-end;
        justify-content: center;
    }
    .qiwo-modal-card--sheet {
        max-width: min(560px, 100%);
        height: auto;
        max-height: 92vh;
        max-height: 92dvh;
        border-radius: 20px 20px 0 0;
        box-shadow: 0 -18px 50px rgba(8,31,54,.30);
        animation: qiwoSheetUp .3s ease-out forwards;
    }
    .qiwo-sheet-handle {
        display: block;
        padding-top: 10px;
        text-align: center;
        flex-shrink: 0;
    }
    .qiwo-sheet-handle::before {
        content: "";
        display: inline-block;
        width: 44px;
        height: 5px;
        border-radius: 99px;
        background: #D5DDE5;
    }
}

/* Encabezado del sheet: avatar + nombre + DNI/grado-sección + X grande.
   El código de estudiante salió de acá (27/08/2026, pedido de Jordy):
   lo que importa al marcar es el DNI y el grado. */
.qiwo-sheet-head {
    align-items: center;
    gap: 12px;
    padding: 10px 16px 12px;
}
.qiwo-sheet-head-avatar {
    flex: 0 0 46px;
    width: 46px;
    height: 46px;
    display: grid;
    place-items: center;
    border-radius: 50%;
    background: #D1FAE5;
    color: #065F46;
    font-size: 14px;
    font-weight: 800;
}
.qiwo-sheet-head-texto { flex: 1; min-width: 0; }
.qiwo-sheet-head-texto h3 { font-size: 16px; line-height: 1.25; }
.qiwo-sheet-head-sub {
    font-size: 12px;
    color: #64748B;
    margin-top: 2px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.qiwo-modal-card--sheet .qiwo-modal-close {
    width: 40px;
    height: 40px;
    border-radius: 10px;
    flex-shrink: 0;
}

/* CTA pegajosa: la acción pendiente siempre visible abajo, sin scroll y al
   alcance del pulgar. padding-bottom con safe-area para el gesto home del
   celular/tablet. */
.qiwo-sheet-cta {
    padding: 12px 16px;
    padding-bottom: calc(12px + env(safe-area-inset-bottom, 0px));
}
/* En escritorio se conserva el botón junto al formulario. En móvil/tablet el
   mismo registro sube al pie fijo para que no se pierda debajo del scroll. */
.qiwo-sheet-cta--registro { display: none; }
.qiwo-cta-btn {
    width: 100%;
    min-height: 54px;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    border: none;
    border-radius: 14px;
    background: #0F9375;
    color: #fff;
    font-size: 15.5px;
    font-weight: 800;
    font-family: inherit;
    cursor: pointer;
}
.qiwo-cta-btn:hover:not(:disabled) { background: #0d7a62; }
.qiwo-cta-btn:disabled { opacity: .6; cursor: not-allowed; }
.qiwo-cta-btn:active:not(:disabled) { transform: scale(.98); }
.qiwo-cta-hora { font-size: 12.5px; font-weight: 600; opacity: .85; }

/* Botón primario a todo el ancho (formularios del tab Marcar y Llamar en
   Apoderados) -- targets de 50px en vez de los ~38px de antes. */
.qiwo-btn-block {
    width: 100%;
    justify-content: center;
    min-height: 50px;
    font-size: 15px;
    border-radius: 12px;
}
.qiwo-modal-card--sheet a.qiwo-btn-primary { text-decoration: none; }

/* Links del Historial (Corregir hora / Corregir motivo / Anular) con target
   táctil decente -- solo dentro del sheet, el resto del sistema no se toca. */
.qiwo-modal-card--sheet .qiwo-link-btn {
    min-height: 36px;
    padding: 8px 4px;
    font-size: 13px;
}

/* Chips de motivo: un toque en vez del select nativo (que en móvil abre el
   picker del SO, tapa media pantalla y exige dos toques). */
.qiwo-chips-motivo {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 8px;
}
.qiwo-chip-motivo {
    width: 100%;
    box-sizing: border-box;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    min-height: 38px;
    padding: 7px 8px;
    border: 1.5px solid #E2E8F0;
    border-radius: 99px;
    background: #fff;
    color: #334155;
    font-size: 12.5px;
    font-weight: 600;
    font-family: inherit;
    cursor: pointer;
    text-align: center;
    line-height: 1.25;
}
.qiwo-chip-motivo--activo {
    background: #E8F8F3;
    border-color: #0F9375;
    color: #075B49;
    box-shadow: inset 0 0 0 1px rgba(15,147,117,.10);
}
.qiwo-chip-motivo--activo::before {
    content: "✓";
    width: 16px;
    height: 16px;
    display: inline-grid;
    place-items: center;
    flex: 0 0 16px;
    border-radius: 50%;
    background: #0F9375;
    color: #fff;
    font-size: 10px;
    font-weight: 900;
}
body.qiwo-dark .qiwo-chip-motivo {
    background: #0F1923;
    border-color: rgba(255,255,255,.14);
    color: #CBD5E1;
}
body.qiwo-dark .qiwo-chip-motivo--activo {
    background: rgba(15,147,117,.20);
    border-color: #0F9375;
    color: #6EE7B7;
}
body.qiwo-dark .qiwo-chip-motivo--activo::before {
    background: #34D399;
    color: #06382E;
}

@media (max-width: 1024px) {
    .qiwo-sheet-cta--registro { display: flex; }
    .qiwo-modal-card--sheet .qiwo-accion-guardar-cuerpo { display: none; }
}

/* Steppers de hora: las correcciones reales son casi siempre "fue hace un par
   de minutos" -- botones de 46px para ±1/±5 y "Ahora"; tocar el valor central
   abre el input[type=time] nativo como ajuste fino. */
.qiwo-hora-stepper {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-wrap: wrap;
    gap: 8px;
    row-gap: 6px;
}
.qiwo-hora-paso {
    flex: 0 0 auto;
    min-width: 46px;
    min-height: 46px;
    border: 1.5px solid #E2E8F0;
    border-radius: 12px;
    background: #fff;
    color: #0B2947;
    font-size: 13px;
    font-weight: 800;
    font-family: inherit;
    cursor: pointer;
}
.qiwo-hora-paso:active { background: #EEF2F6; }
.qiwo-hora-valor {
    flex: 1;
    min-height: 46px;
    border: none;
    border-radius: 12px;
    background: none;
    color: #0B2947;
    font-size: 24px;
    font-weight: 800;
    font-family: inherit;
    font-variant-numeric: tabular-nums;
    cursor: pointer;
    text-align: center;
}
.qiwo-hora-valor:hover { background: #F1F5F9; }
/* Variante de solo lectura para "Corregir hora" en el Historial -- ahí el
   input nativo queda visible abajo, el valor central no es clickeable. */
.qiwo-hora-valor--static { cursor: default; }
.qiwo-hora-valor--static:hover { background: none; }
.qiwo-hora-ahora {
    flex: 0 0 auto;
    min-height: 46px;
    padding: 0 14px;
    border: none;
    border-radius: 12px;
    background: #E8F8F3;
    color: #08745B;
    font-size: 13px;
    font-weight: 800;
    font-family: inherit;
    cursor: pointer;
}
/* 27/08/2026: el grid de 3 columnas que hubo acá (commit anterior) resultó peor
   -- Jordy lo probó y pidió volver a la fila única de siempre para los 5
   botones principales (−5/−1/hora/+1/+5), con "Ahora" solo cuando de verdad no
   entra, centrado en su propia línea. flex-wrap normal ya hace exactamente
   eso: el valor central tiene flex:1 y siempre completa el ancho de su línea,
   así que el justify-content:center de arriba no mueve nada en esa fila (ya
   ocupa el 100%) pero sí centra a "Ahora" cuando cae solo a la fila de abajo.
   Sin necesidad de grid ni de restructurar el HTML. */
body.qiwo-dark .qiwo-hora-paso {
    background: #0F1923;
    border-color: rgba(255,255,255,.14);
    color: #E2E8F0;
}
body.qiwo-dark .qiwo-hora-valor { color: #E2E8F0; }
body.qiwo-dark .qiwo-hora-valor:hover { background: rgba(255,255,255,.06); }
body.qiwo-dark .qiwo-hora-valor--static:hover { background: none; }
body.qiwo-dark .qiwo-hora-ahora { background: rgba(15,147,117,.18); color: #34D399; }

/* Encabezado del sheet en dark (el card ya lo cubre body.qiwo-dark
   .qiwo-modal-card; acá solo los textos nuevos). */
body.qiwo-dark .qiwo-sheet-head-sub { color: #94A3B8; }
body.qiwo-dark .qiwo-sheet-head-avatar { background: rgba(15,147,117,.2); color: #34D399; }
@media (max-width: 1024px) {
    body.qiwo-dark .qiwo-sheet-handle::before { background: rgba(255,255,255,.18); }
}

/* Botón de salida rápida en la tarjeta del roster (27/08/2026): reemplaza al
   chevron cuando el alumno tiene entrada y no salida. Blanco translúcido para
   que funcione sobre el tinte de cualquier estado. */
.auxiliar-card-quick {
    flex: 0 0 auto;
    width: 38px;
    height: 38px;
    display: grid;
    place-items: center;
    border: none;
    border-radius: 50%;
    background: rgba(255,255,255,.85);
    color: #0B2947;
    cursor: pointer;
    box-shadow: 0 1px 4px rgba(15,23,42,.18);
}
.auxiliar-card-quick:hover:not(:disabled) { background: #fff; }
.auxiliar-card-quick:active:not(:disabled) { transform: scale(.92); }
.auxiliar-card-quick:disabled { opacity: .5; cursor: not-allowed; }

/* Toast de confirmación con Deshacer (27/08/2026) -- lo muestran la salida
   rápida desde la tarjeta y la CTA directa del sheet. z-index sobre el sheet
   (1000) porque la CTA cierra el sheet y el toast aparece encima del roster. */
.auxiliar-toast {
    position: fixed;
    left: 50%;
    bottom: calc(18px + env(safe-area-inset-bottom, 0px));
    transform: translateX(-50%);
    z-index: 1200;
    display: flex;
    align-items: center;
    gap: 12px;
    max-width: min(92vw, 480px);
    padding: 12px 16px;
    border-radius: 12px;
    background: #0B2947;
    color: #fff;
    font-size: 13.5px;
    font-weight: 600;
    box-shadow: 0 12px 30px rgba(8,31,54,.4);
    animation: auxiliarToastSube .25s ease;
}
.auxiliar-toast--error { background: #991B1B; }
.auxiliar-toast-texto {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.auxiliar-toast-deshacer {
    flex-shrink: 0;
    border: none;
    background: none;
    color: #7EE7D0;
    font-size: 13.5px;
    font-weight: 800;
    font-family: inherit;
    cursor: pointer;
    padding: 6px 4px;
}
.auxiliar-toast--error .auxiliar-toast-deshacer { color: #FECACA; }
@keyframes auxiliarToastSube {
    from { transform: translate(-50%, 12px); opacity: 0; }
    to   { transform: translate(-50%, 0);    opacity: 1; }
}

/* ── CASOS A REVISAR (03/09/2026, posible intercambio de tarjetas) ──────────
   Campana con contador en el header + hoja deslizable (qiwo-modal-overlay--sheet
   ya existente) -- nunca tarjetas fijas arriba del roster, eso saturaba la
   pantalla (feedback real de Jordy sobre el primer bosquejo). */
.auxiliar-alerta-btn {
    position: relative;
    background: #F1F5F9;
    border: none;
    border-radius: 50%;
    width: 30px; height: 30px;
    display: flex; align-items: center; justify-content: center;
    color: #94A3B8;
    cursor: pointer;
    flex-shrink: 0;
}
/* Gris = sin nada captado hoy, rojo = hay casos detectados hoy (04/09/2026,
   pedido explícito de Jordy) -- tinte de superficie completo, mismo criterio
   de color que el resto de "Casos a revisar", nunca franja lateral. */
.auxiliar-alerta-btn--activo { background: #FEE2E2; color: #DC2626; }
.auxiliar-alerta-btn svg { width: 16px; height: 16px; }
.auxiliar-alerta-dot {
    position: absolute;
    top: -3px; right: -3px;
    background: #DC2626;
    color: #fff;
    font-size: 10px;
    font-weight: 700;
    min-width: 15px; height: 15px;
    border-radius: 8px;
    display: flex; align-items: center; justify-content: center;
    padding: 0 3px;
}
.auxiliar-caso-aviso {
    display: flex; align-items: flex-start; gap: 8px;
    background: #F1F5F9; color: #475569; font-size: 12px; line-height: 1.5;
    border-radius: 10px; padding: 9px 11px; margin-bottom: 14px;
}
.auxiliar-caso-aviso svg { flex-shrink: 0; margin-top: 1px; }
body.qiwo-dark .auxiliar-caso-aviso { background: #16202E; color: #93A4BC; }
.auxiliar-caso { border-radius: 14px; padding: 13px; margin-bottom: 10px; }
.auxiliar-caso-alta  { background: #FEE2E2; }
.auxiliar-caso-media { background: #FEF3C7; }
.auxiliar-caso-top { display: flex; align-items: center; gap: 8px; margin-bottom: 9px; }
.auxiliar-caso-badge { font-size: 10.5px; font-weight: 700; padding: 3px 9px; border-radius: 20px; color: #fff; }
.auxiliar-caso-badge-alta  { background: #DC2626; }
.auxiliar-caso-badge-media { background: #D97706; }
.auxiliar-caso-fecha { margin-left: auto; font-size: 11.5px; font-weight: 600; }
.auxiliar-caso-alta  .auxiliar-caso-fecha { color: #991B1B; }
.auxiliar-caso-media .auxiliar-caso-fecha { color: #92400E; }
.auxiliar-caso-desc { font-size: 12.5px; line-height: 1.5; margin: 0 0 11px; color: #991B1B; }
.auxiliar-caso-who {
    display: flex; align-items: center; gap: 9px;
    background: #fff; border-radius: 11px; padding: 9px 10px; margin-bottom: 6px;
}
.auxiliar-caso-avatar {
    width: 32px; height: 32px; border-radius: 50%; flex-shrink: 0;
    display: flex; align-items: center; justify-content: center;
    font-size: 11.5px; font-weight: 700;
}
.auxiliar-caso-alta  .auxiliar-caso-avatar { background: #FEE2E2; color: #991B1B; }
.auxiliar-caso-media .auxiliar-caso-avatar { background: #FEF3C7; color: #92400E; }
.auxiliar-caso-nombre  { font-size: 13px; font-weight: 600; color: #0B2947; margin: 0; }
.auxiliar-caso-detalle { font-size: 11.5px; color: #64748B; margin: 1px 0 0; }
.auxiliar-caso-nota { font-size: 11px; color: #94A3B8; text-align: center; margin: 14px 0 2px; line-height: 1.5; }

body.qiwo-dark .auxiliar-alerta-btn      { background: #1A2535; color: #64748B; }
body.qiwo-dark .auxiliar-alerta-btn--activo { background: rgba(220,38,38,.20); color: #F87171; }
body.qiwo-dark .auxiliar-caso-alta       { background: rgba(220,38,38,.20); }
body.qiwo-dark .auxiliar-caso-media      { background: rgba(217,119,6,.20); }
body.qiwo-dark .auxiliar-caso-alta  .auxiliar-caso-fecha,
body.qiwo-dark .auxiliar-caso-desc       { color: #FCB3B3; }
body.qiwo-dark .auxiliar-caso-media .auxiliar-caso-fecha { color: #FCD34D; }
body.qiwo-dark .auxiliar-caso-who        { background: #1A2535; }
body.qiwo-dark .auxiliar-caso-alta  .auxiliar-caso-avatar { background: rgba(220,38,38,.20); color: #FCB3B3; }
body.qiwo-dark .auxiliar-caso-media .auxiliar-caso-avatar { background: rgba(217,119,6,.20); color: #FCD34D; }
body.qiwo-dark .auxiliar-caso-nombre     { color: #E7EDF5; }
body.qiwo-dark .auxiliar-caso-detalle    { color: #93A4BC; }
body.qiwo-dark .auxiliar-caso-nota       { color: #6B7C93; }

/* Confirmación de salida de la PWA: aparece solo en la raíz del portal y no
   compite con las acciones propias de cada pantalla. */
.qiwo-pwa-exit-toast {
    position: fixed;
    left: 50%;
    bottom: calc(20px + env(safe-area-inset-bottom, 0px));
    z-index: 2200;
    max-width: calc(100vw - 32px);
    padding: 13px 17px;
    border-radius: 14px;
    transform: translateX(-50%);
    background: #0B2947;
    color: #fff;
    font-size: 14px;
    font-weight: 700;
    line-height: 1.3;
    box-shadow: 0 12px 30px rgba(8,31,54,.34);
    animation: qiwoPwaExitToastEntra .2s ease-out;
}
body.qiwo-dark .qiwo-pwa-exit-toast {
    background: #E8F1FB;
    color: #102A43;
}
@keyframes qiwoPwaExitToastEntra {
    from { transform: translate(-50%, 10px); opacity: 0; }
    to   { transform: translate(-50%, 0); opacity: 1; }
}

/* ── Modo búsqueda del portal Auxiliar (29/08/2026) ──────────────────────────
   Con el teclado abierto en el celular queda menos de la mitad de la pantalla.
   Agrupar los resultados por sección gastaba tres líneas de cabecera por grupo y
   empujaba a los alumnos fuera de la vista: buscar un apellido mostraba 2
   resultados usando 350px en encabezados. Mientras se busca, la sección baja a
   una etiqueta dentro de la propia fila. */
.auxiliar-busqueda-resultados { margin-top: 4px; }

.auxiliar-busqueda-conteo {
    margin: 0 0 8px;
    font-size: 12px;
    font-weight: 600;
    color: #64748B;
}

/* Neutra a propósito: el color en esta pantalla ya significa estado de asistencia
   (verde puntual, ámbar tardanza, rojo falta). Un chip de color para la sección
   competiría con esa lectura. */
.auxiliar-busqueda-seccion {
    font-size: 11px;
    font-weight: 600;
    color: #475569;
    background: #F1F5F9;
    padding: 2px 7px;
    border-radius: 6px;
}

body.qiwo-dark .auxiliar-busqueda-conteo { color: #93A4BC; }
body.qiwo-dark .auxiliar-busqueda-seccion { background: rgba(148,163,184,.18); color: #CBD5E1; }

/* Resultados de búsqueda: una sola columna, ancho completo.
   En la grilla normal caben 4-5 columnas porque hay 30+ alumnos por sección y lo
   que importa es abarcar. Buscando es al revés: hay 1 o 2 resultados y sobra
   ancho, así que meterlos en una columna angosta solo lograba cortar el nombre
   ("Zarate Moreno, Yosi...") justo cuando el nombre completo ES la respuesta que
   la auxiliar está buscando (29/08/2026, hallazgo de Jordy en pantalla grande). */
.auxiliar-busqueda-resultados .auxiliar-grid {
    grid-template-columns: 1fr;
    padding: 0;
}

.auxiliar-busqueda-resultados .auxiliar-card-nombre {
    white-space: normal;
    overflow: visible;
    text-overflow: clip;
}

/* X para limpiar la búsqueda. 32px de lado: por debajo de eso el dedo falla y
   termina tocando el campo, que reabre el teclado justo cuando se quería cerrar. */
.auxiliar-buscador-limpiar {
    display: flex;
    align-items: center;
    justify-content: center;
    flex: none;
    width: 32px;
    height: 32px;
    margin-right: -6px;
    padding: 0;
    border: none;
    border-radius: 50%;
    background: transparent;
    color: #64748B;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}
.auxiliar-buscador-limpiar:hover,
.auxiliar-buscador-limpiar:focus-visible {
    background: #F1F5F9;
    color: #0B2947;
    outline: none;
}
.auxiliar-buscador-limpiar:active { transform: scale(.92); }

body.qiwo-dark .auxiliar-buscador-limpiar { color: #93A4BC; }
body.qiwo-dark .auxiliar-buscador-limpiar:hover,
body.qiwo-dark .auxiliar-buscador-limpiar:focus-visible {
    background: rgba(148,163,184,.16);
    color: #E2E8F0;
}

/* Botón "Registrar salida" del Auxiliar. Azul, el mismo que .qiwo-estado-salida
   usa en toda la app para ese estado: el botón verde de acción primaria hacía
   pensar que registrar la salida era parte del flujo normal, cuando en Modelo A
   es la excepción -- un retiro antes de hora (31/08/2026, lo pidió Jordy). */
.qiwo-btn-salida {
    background: #1D4ED8;
    color: #FFFFFF;
    border: 0;
    border-radius: 10px;
    padding: 12px 18px;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    transition: background .15s;
}
.qiwo-btn-salida:hover:not(:disabled) { background: #1E40AF; }
.qiwo-btn-salida:disabled { opacity: .55; cursor: not-allowed; }
body.qiwo-dark .qiwo-btn-salida { background: #2563EB; }
body.qiwo-dark .qiwo-btn-salida:hover:not(:disabled) { background: #1D4ED8; }

/* ── Semáforo de fiabilidad en Apoderados Pendientes (04/09/2026) ──────
   El color sale de los tokens .qiwo-estado-* que ya son la fuente única
   de verdad del sistema: alta reusa PUNTUAL, media TARDANZA y revisar
   FALTA. No se inventa una paleta nueva para un semáforo nuevo. */
.qiwo-chip-fiab {
    display: inline-block;
    font-size: 12px;
    font-weight: 600;
    padding: 3px 10px;
    border-radius: 6px;
    white-space: nowrap;
}
.qiwo-chip-fiab-motivo {
    font-size: 12px;
    color: #64748B;
    margin-top: 5px;
    max-width: 30ch;
    line-height: 1.35;
}
body.qiwo-dark .qiwo-chip-fiab-motivo { color: #94A3B8; }

.qiwo-chip-filtro {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    font-size: 13px;
    font-weight: 500;
    padding: 6px 14px;
    border-radius: 20px;
    border: 1px solid #CBD5E1;
    background: transparent;
    color: #475569;
    cursor: pointer;
    transition: background .12s ease, border-color .12s ease;
}
.qiwo-chip-filtro:hover      { border-color: #94A3B8; }
.qiwo-chip-filtro.activo     { background: #F1F5F9; border-color: #64748B; color: #0F172A; }
.qiwo-chip-filtro .qiwo-chip-n { color: #94A3B8; font-variant-numeric: tabular-nums; }
.qiwo-chip-filtro.activo .qiwo-chip-n { color: #475569; }

body.qiwo-dark .qiwo-chip-filtro        { border-color: #33475F; color: #9FB0C4; }
body.qiwo-dark .qiwo-chip-filtro:hover  { border-color: #64748B; }
body.qiwo-dark .qiwo-chip-filtro.activo { background: #1E2D42; border-color: #64748B; color: #E8EDF4; }

.qiwo-pip { width: 9px; height: 9px; border-radius: 50%; flex: none; }
.qiwo-pip-alta  { background: #0F9375; }
.qiwo-pip-media { background: #D97706; }
.qiwo-pip-rev   { background: #DC2626; }

@media (prefers-reduced-motion: reduce) {
    .qiwo-chip-filtro { transition: none; }
}

/* ── Columna Apoderado(s) en Alumnos (04/09/2026) ──────────────────────
   Espejo de la columna "Alumnos vinculados" de Padres/Apoderados: un
   contador circular y el primer nombre. El "+N" evita que una familia
   con 3 apoderados estire la fila y rompa el escaneo de la tabla. */
.qiwo-apo-cell {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    font-size: 13px;
}
.qiwo-apo-count {
    flex: none;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: #F1F5F9;
    border: 1px solid #E2E8F0;
    color: #475569;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 11px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}
.qiwo-apo-mas {
    color: #94A3B8;
    font-size: 12px;
    font-variant-numeric: tabular-nums;
}
body.qiwo-dark .qiwo-apo-count { background: #1E2D42; border-color: #33475F; color: #9FB0C4; }
body.qiwo-dark .qiwo-apo-mas   { color: #7789A0; }

/* Par positivo de .qiwo-badge-warn (04/09/2026). Mismo tamaño y forma que
   ese, con el verde de PUNTUAL: se usa para confirmar un dato que ya quedó
   resuelto, como el alumno preseleccionado al vincular un apoderado.
   Un poco más de padding porque acá lleva una frase, no una palabra. */
.qiwo-badge-ok {
    background: #D1FAE5;
    color: #065F46;
    font-size: 12px;
    font-weight: 500;
    padding: 7px 12px;
    border-radius: 8px;
    display: block;
}
.qiwo-badge-ok strong { font-weight: 600; }
body.qiwo-dark .qiwo-badge-ok { background: rgba(16,185,129,.18); color: #6EE7B7; }

/* ── Botones de exportación con identidad de formato (04/09/2026) ──────
   Excepción deliberada a la paleta de marca: estos dos colores son de
   Excel y Acrobat, no de Qiwo. Acá el color no decora, identifica el
   formato del archivo antes de que se lea el texto -- mismo criterio que
   un botón "entrar con Google" que lleva el logo de Google.
   El fondo se mantiene claro y el color vive en el ícono y el borde, para
   que no compitan con el botón primario verde de la app. */
.qiwo-btn-export {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    font-weight: 500;
    padding: 8px 14px;
    border-radius: 8px;
    background: #fff;
    cursor: pointer;
    transition: background .12s ease, border-color .12s ease;
    /* Ancho fijo: al pasar a "Generando..." el botón no debe encogerse ni
       mover al de al lado. */
    min-width: 152px;
    justify-content: center;
}
.qiwo-btn-export:disabled { opacity: .55; cursor: default; }

.qiwo-btn-export--excel        { border: 1px solid #A7D7BE; color: #1D6F42; }
.qiwo-btn-export--excel svg    { color: #1D6F42; }
.qiwo-btn-export--excel:hover:not(:disabled) { background: #EAF7F0; border-color: #1D6F42; }

.qiwo-btn-export--pdf          { border: 1px solid #F0B5B0; color: #B30B00; }
.qiwo-btn-export--pdf svg      { color: #B30B00; }
.qiwo-btn-export--pdf:hover:not(:disabled) { background: #FDEDEB; border-color: #B30B00; }

.qiwo-btn-export:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }

/* La ruedita hereda el color del botón, así el de Excel gira verde y el de
   PDF rojo -- sigue diciendo qué formato se está generando. */
.qiwo-export-spinner {
    width: 14px;
    height: 14px;
    border: 2px solid currentColor;
    border-top-color: transparent;
    border-radius: 50%;
    display: inline-block;
    animation: qiwo-export-spin .6s linear infinite;
    flex: none;
}
@keyframes qiwo-export-spin { to { transform: rotate(360deg); } }

body.qiwo-dark .qiwo-btn-export { background: #132135; }
body.qiwo-dark .qiwo-btn-export--excel { border-color: #2F6B4E; color: #6EE7B7; }
body.qiwo-dark .qiwo-btn-export--excel svg { color: #6EE7B7; }
body.qiwo-dark .qiwo-btn-export--excel:hover:not(:disabled) { background: #1632284D; }
body.qiwo-dark .qiwo-btn-export--pdf { border-color: #7A2E28; color: #FCB3B3; }
body.qiwo-dark .qiwo-btn-export--pdf svg { color: #FCB3B3; }
body.qiwo-dark .qiwo-btn-export--pdf:hover:not(:disabled) { background: #3A19174D; }

@media (prefers-reduced-motion: reduce) {
    .qiwo-btn-export { transition: none; }
    .qiwo-export-spinner { animation-duration: 2s; }
}

/* ── Avisos del apoderado ──────────────────────────────────────────────
   La tarjeta habla del estado de ESTE celular. Así no se confunde un permiso
   concedido con una suscripción que aún necesita reconectarse. */
.qiwo-notification-card {
    background: #fff;
    border: 1px solid #DCE5EC;
    border-radius: 16px;
    padding: 20px;
    color: #0B2947;
}
.qiwo-notification-card__main {
    display: flex;
    align-items: flex-start;
    gap: 13px;
}
.qiwo-notification-card__icon {
    width: 40px;
    height: 40px;
    flex: none;
    display: grid;
    place-items: center;
    border-radius: 12px;
    background: #E6F7F2;
    color: #087A62;
}
.qiwo-notification-card__title {
    margin: 0;
    color: #0B2947;
    font-size: 15px;
    line-height: 1.35;
    font-weight: 700;
}
.qiwo-notification-card__description {
    margin: 3px 0 0;
    max-width: 620px;
    color: #52667D;
    font-size: 13px;
    line-height: 1.45;
}
.qiwo-notification-card__status {
    display: inline-flex;
    align-items: center;
    min-height: 22px;
    margin-bottom: 4px;
    padding: 2px 8px;
    border-radius: 999px;
    background: #DCF7EB;
    color: #087A62;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .01em;
}
.qiwo-notification-card__message {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin: 15px 0 0;
    padding: 10px 12px;
    border-radius: 10px;
    font-size: 13px;
    line-height: 1.4;
}
.qiwo-notification-card__message--success {
    background: #ECFDF5;
    border: 1px solid #A7E8CF;
    color: #087A62;
}
.qiwo-notification-card__message--error {
    background: #FEF2F2;
    border: 1px solid #F5C2C0;
    color: #B42318;
}
.qiwo-notification-card__message-actions {
    display: inline-flex;
    flex: none;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px;
}
.qiwo-notification-card__actions {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 16px;
}
.qiwo-notification-button {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    padding: 9px 15px;
    border-radius: 10px;
    border: 1px solid transparent;
    font: inherit;
    font-size: 13px;
    font-weight: 700;
    line-height: 1.2;
    cursor: pointer;
    transition: background .15s ease, border-color .15s ease, color .15s ease;
}
.qiwo-notification-button:disabled { cursor: wait; opacity: .68; }
.qiwo-notification-button:focus-visible,
.qiwo-notification-link:focus-visible,
.qiwo-notification-help summary:focus-visible {
    outline: 2px solid #087A62;
    outline-offset: 2px;
}
.qiwo-notification-button--primary { background: #087A62; color: #fff; }
.qiwo-notification-button--primary:hover:not(:disabled) { background: #066850; }
.qiwo-notification-button--secondary { background: #fff; border-color: #08977A; color: #087A62; }
.qiwo-notification-button--secondary:hover:not(:disabled) { background: #EFFBF7; }
.qiwo-notification-button--quiet { background: transparent; border-color: #CBD5E1; color: #52667D; }
.qiwo-notification-button--quiet:hover:not(:disabled) { background: #F8FAFC; border-color: #94A3B8; }
.qiwo-notification-button--danger { background: #B42318; color: #fff; }
.qiwo-notification-button--danger:hover:not(:disabled) { background: #8F1C13; }
.qiwo-notification-button__spinner {
    width: 14px;
    height: 14px;
    border-width: 2px;
    border-color: currentColor;
    border-top-color: transparent;
}
.qiwo-notification-button--primary .qiwo-notification-button__spinner,
.qiwo-notification-button--danger .qiwo-notification-button__spinner {
    border-color: rgba(255,255,255,.38);
    border-top-color: #fff;
}
.qiwo-notification-link {
    min-height: 30px;
    padding: 3px 0;
    border: 0;
    border-bottom: 1px solid currentColor;
    background: transparent;
    color: inherit;
    font: inherit;
    font-size: 12px;
    font-weight: 700;
    cursor: pointer;
}
.qiwo-notification-help {
    margin-top: 17px;
    border-top: 1px solid #E4EAF0;
    color: #52667D;
}
.qiwo-notification-help summary {
    min-height: 44px;
    display: flex;
    align-items: center;
    cursor: pointer;
    color: #0B2947;
    font-size: 13px;
    font-weight: 700;
}
/* display:flex mata el ::marker nativo en Chrome, asi que la flecha va como SVG
   propio dentro del <summary> (ver ApoderadoCuenta.razor). Se oculta el marker
   por si algun navegador si lo dibuja, para no tener dos flechas. */
.qiwo-notification-help summary { justify-content: space-between; gap: 10px; }
.qiwo-notification-help summary::marker { content: ''; }
.qiwo-notification-help summary::-webkit-details-marker { display: none; }
.qiwo-notification-help__chevron {
    color: #087A62;
    flex: none;
    transition: transform .18s ease;
}
.qiwo-notification-help[open] .qiwo-notification-help__chevron { transform: rotate(180deg); }
/* Sin esta regla la flecha queda verde oscuro sobre fondo oscuro y no se ve --
   el par roto fondo-oscuro/texto-oscuro de siempre. #34D399 es el verde de modo
   oscuro del proyecto. */
body.qiwo-dark .qiwo-notification-help__chevron { color: #34D399; }
.qiwo-notification-help__body {
    padding: 0 0 2px;
    color: #52667D;
    font-size: 13px;
    line-height: 1.5;
}
.qiwo-notification-help__body p { margin: 0 0 10px; }
.qiwo-notification-help__body ol { margin: 0 0 10px; padding-left: 22px; }
.qiwo-notification-help__body li + li { margin-top: 4px; }
.qiwo-notification-help__tip {
    padding: 10px 11px;
    border-left: 3px solid #94A3B8;
    border-radius: 0 8px 8px 0;
    background: #F8FAFC;
}
.qiwo-notification-help__note { color: #64748B; font-size: 12px; }

body.qiwo-dark .qiwo-notification-card {
    background: #1A2535;
    border-color: rgba(255,255,255,.09);
    color: #E2E8F0;
}
body.qiwo-dark .qiwo-notification-card__icon { background: rgba(15,147,117,.18); color: #5EEAD4; }
body.qiwo-dark .qiwo-notification-card__title,
body.qiwo-dark .qiwo-notification-help summary { color: #E2E8F0; }
body.qiwo-dark .qiwo-notification-card__description,
body.qiwo-dark .qiwo-notification-help,
body.qiwo-dark .qiwo-notification-help__body { color: #A8B7C9; }
body.qiwo-dark .qiwo-notification-card__status { background: rgba(16,185,129,.18); color: #6EE7B7; }
body.qiwo-dark .qiwo-notification-card__message--success { background: rgba(16,185,129,.12); border-color: rgba(110,231,183,.28); color: #6EE7B7; }
body.qiwo-dark .qiwo-notification-card__message--error { background: rgba(220,38,38,.13); border-color: rgba(252,165,165,.28); color: #FCA5A5; }
body.qiwo-dark .qiwo-notification-button--secondary { background: #132135; border-color: #2D8D79; color: #6EE7B7; }
body.qiwo-dark .qiwo-notification-button--secondary:hover:not(:disabled) { background: rgba(15,147,117,.18); }
body.qiwo-dark .qiwo-notification-button--quiet { border-color: #42546A; color: #B5C2D2; }
body.qiwo-dark .qiwo-notification-button--quiet:hover:not(:disabled) { background: #223149; }
body.qiwo-dark .qiwo-notification-help { border-top-color: rgba(255,255,255,.08); }
body.qiwo-dark .qiwo-notification-help__tip { background: #132135; border-left-color: #64748B; }
body.qiwo-dark .qiwo-notification-help__note { color: #8C9CAF; }

@media (max-width: 640px) {
    .qiwo-notification-card { padding: 18px 16px; }
    .qiwo-notification-card__message { align-items: flex-start; flex-direction: column; }
    .qiwo-notification-card__message-actions { width: 100%; gap: 16px; }
    .qiwo-notification-card__actions { align-items: stretch; }
    .qiwo-notification-button { flex: 1 1 150px; }
}

@media (prefers-reduced-motion: reduce) {
    .qiwo-notification-button { transition: none; }
}

/* Uso de la credencial de un alumno en la puerta de OTRA sede (08/09/2026).
   Caso real: la tarjeta de un alumno de Primaria apoyada en la lectora de
   Inicial. Se muestra en su historial porque la informacion prevalece, pero
   NO es asistencia suya y su auxiliar no puede editarlo -- el guard de
   spAuxiliar_AnularMarcacion valida contra la sucursal de la marcacion.
   Superficie tintada completa, nunca franja lateral: mismos hex de la familia
   DENEGADO que ya usan el chip y la tarjeta del roster. */
.qiwo-aviso-credencial-ajena {
    background: #FEE2E2;
    color: #991B1B;
    border-radius: 8px;
    padding: 10px 12px;
    margin-bottom: 8px;
}
.qiwo-aviso-credencial-ajena p { color: #991B1B; }
.qiwo-aviso-credencial-ajena p + p { opacity: .85; }

/* Fila clicable de "Actividad del dia" (08/09/2026). Solo el cursor y el hover:
   el afford tiene que existir sin agregarle una columna a una tabla que ya venia
   apretada en tablet. Las filas de alumnos de otra sede no la llevan -- no tienen
   ficha que abrir desde esta sede. */
tr.qiwo-fila-clicable { cursor: pointer; }
tr.qiwo-fila-clicable:hover { background: rgba(15, 147, 117, .06); }

/* ══════════════════════════════════════════════════════════
   PASADA DE CONTRASTE — 08/09/2026
   El modo oscuro no debe invertir la gravedad de los estados ni dejar texto
   gris sobre panel gris. Las reglas de abajo cubren dos casos distintos:
   1) componentes compartidos con clases semánticas; 2) fragmentos legacy que
   todavía declaran tokens neutrales directamente en los .razor.
   Los colores de estado no se resuelven por posición ni por nombre del portal:
   puntual, tardanza, falta, etc. conservan siempre la misma familia.
   ══════════════════════════════════════════════════════════ */

/* ── Calendario mensual compartido (Auxiliar: vivo, actividad y récord) ── */
.qiwo-calendario-asistencia__navegacion {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 8px;
}
.qiwo-calendario-asistencia__mes {
    color: #0B2947;
    font-size: 13px;
    font-weight: 700;
}
.qiwo-calendario-asistencia__resumen {
    display: flex;
    align-items: baseline;
    gap: 8px;
    padding: 10px 14px;
    border-radius: 10px;
    margin-bottom: 12px;
}
.qiwo-calendario-asistencia__porcentaje {
    font-size: 22px;
    font-weight: 700;
}
.qiwo-calendario-asistencia__texto-resumen { font-size: 12px; }
.qiwo-calendario-asistencia__resumen--puntual { background: #D1FAE5; color: #065F46; }
.qiwo-calendario-asistencia__resumen--tardanza { background: #FEF3A0; color: #854D0E; }
.qiwo-calendario-asistencia__resumen--falta { background: #FCB3B3; color: #7F1D1D; }
.qiwo-calendario-asistencia__resumen--neutro { background: #F1F5F9; color: #475569; }
.qiwo-calendario-asistencia__superficie {
    background: #fff;
    border: 1px solid #E2E8F0;
    border-radius: 14px;
    padding: 16px;
    overflow-x: auto;
}
.qiwo-calendario-asistencia__semana {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 4px;
    margin-bottom: 4px;
}
.qiwo-calendario-asistencia__semana--titulos { margin-bottom: 8px; }
.qiwo-calendario-asistencia__dia-semana {
    padding: 4px;
    color: #64748B;
    font-size: 11px;
    font-weight: 700;
    text-align: center;
}
.qiwo-calendario-asistencia__celda {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 44px;
    padding: 6px 4px;
    border: 1px solid transparent;
    border-radius: 8px;
    box-sizing: border-box;
    font-size: 13px;
    font-weight: 600;
    text-align: center;
}
.qiwo-calendario-asistencia__estado--puntual { background: #D1FAE5; border-color: #0F9375; color: #065F46; }
.qiwo-calendario-asistencia__estado--tardanza { background: #FEF3A0; border-color: #CA8A04; color: #854D0E; }
.qiwo-calendario-asistencia__estado--fuera { background: #FDC58B; border-color: #EA580C; color: #7C2D12; }
.qiwo-calendario-asistencia__estado--falta { background: #FCB3B3; border-color: #DC2626; color: #7F1D1D; }
.qiwo-calendario-asistencia__estado--justificado { background: #DDD6FE; border-color: #7C3AED; color: #5B21B6; }
/* Registro excepcional (11/09/2026): vino un día en que no se le exigía venir.
   Turquesa saturado de la paleta del 04/09 -- se queda dentro de la familia
   verde a propósito, porque significa "SÍ vino"; sacarlo de esa familia lo
   acercaría visualmente a Falta, y leer "vino" como "faltó" es el peor error
   posible en esta pantalla. */
.qiwo-calendario-asistencia__estado--excepcional { background: #99F6E4; border-color: #0F766E; color: #115E59; }
/* Interior de un período (11/09/2026). El primer y el último día del rango se
   quedan con el lila pleno de "Justificado"; los del medio bajan de peso, así el
   rango se lee como un bloque con principio y fin en vez de N días sueltos.
   Es el mismo lila, no un color nuevo: solo cambia la intensidad, que es lo que
   ya hace la paleta cuando necesita separar dos cosas de la misma familia. */
.qiwo-calendario-asistencia__estado--periodo-interior {
    background: #EEEAFE;
    border-color: #E3DCFD;
    color: #6D4AAF;
}
/* La etiqueta que dice el rango en fechas. Es lo que de verdad comunica el
   período: un matiz se pierde al sol, una frase no. */
.qiwo-calendario-asistencia__periodo {
    display: flex;
    align-items: center;
    gap: 7px;
    margin-top: 10px;
    padding: 7px 11px;
    background: #F5F3FF;
    border: 1px solid #DDD6FE;
    border-radius: 8px;
    color: #5B21B6;
    font-size: 12px;
    font-weight: 600;
    line-height: 1.4;
}
.qiwo-calendario-asistencia__periodo svg { flex-shrink: 0; }
.qiwo-calendario-asistencia__estado--sin-dato { background: #F8FAFC; border-color: #E2E8F0; color: #64748B; }
.qiwo-calendario-asistencia__estado--feriado {
    background-color: #F1F5F9;
    background-image: repeating-linear-gradient(45deg, transparent, transparent 3px, rgba(100,116,139,.28) 3px, rgba(100,116,139,.28) 6px);
    border-color: #CBD5E1;
    color: #475569;
}
.qiwo-calendario-asistencia__leyenda {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    margin-top: 8px;
    padding-top: 10px;
    border-top: 1px solid #F1F5F9;
}
.qiwo-calendario-asistencia__item-leyenda {
    display: flex;
    align-items: center;
    gap: 5px;
    color: #52667D;
    font-size: 11px;
}
.qiwo-calendario-asistencia__muestra {
    display: inline-block;
    width: 12px;
    height: 12px;
    flex: none;
    border: 1px solid transparent;
    border-radius: 3px;
    box-sizing: border-box;
}

body.qiwo-dark .qiwo-calendario-asistencia__mes { color: #E2E8F0; }
body.qiwo-dark .qiwo-calendario-asistencia__superficie {
    background: #0F1923;
    border-color: rgba(255,255,255,.10);
}
body.qiwo-dark .qiwo-calendario-asistencia__dia-semana,
body.qiwo-dark .qiwo-calendario-asistencia__item-leyenda { color: #A8B7C9; }
body.qiwo-dark .qiwo-calendario-asistencia__resumen--puntual { background: rgba(16,185,129,.18); color: #6EE7B7; }
body.qiwo-dark .qiwo-calendario-asistencia__resumen--tardanza { background: rgba(234,179,8,.20); color: #FDE68A; }
body.qiwo-dark .qiwo-calendario-asistencia__resumen--falta { background: rgba(220,38,38,.20); color: #FCB3B3; }
body.qiwo-dark .qiwo-calendario-asistencia__resumen--neutro { background: #243044; color: #CBD5E1; }
body.qiwo-dark .qiwo-calendario-asistencia__estado--puntual { background: rgba(16,185,129,.18); border-color: rgba(110,231,183,.36); color: #6EE7B7; }
body.qiwo-dark .qiwo-calendario-asistencia__estado--tardanza { background: rgba(234,179,8,.20); border-color: rgba(253,230,138,.38); color: #FDE68A; }
body.qiwo-dark .qiwo-calendario-asistencia__estado--fuera { background: rgba(234,88,12,.22); border-color: rgba(253,197,139,.38); color: #FDC58B; }
body.qiwo-dark .qiwo-calendario-asistencia__estado--falta { background: rgba(220,38,38,.20); border-color: rgba(252,179,179,.38); color: #FCB3B3; }
body.qiwo-dark .qiwo-calendario-asistencia__estado--justificado { background: rgba(124,58,237,.22); border-color: rgba(196,181,253,.38); color: #C4B5FD; }
body.qiwo-dark .qiwo-calendario-asistencia__estado--excepcional { background: rgba(15,118,110,.22); border-color: rgba(153,246,228,.38); color: #99F6E4; }
body.qiwo-dark .qiwo-calendario-asistencia__estado--periodo-interior {
    background: rgba(124,58,237,.11);
    border-color: rgba(196,181,253,.16);
    color: #A78BD8;
}
body.qiwo-dark .qiwo-calendario-asistencia__periodo {
    background: rgba(124,58,237,.14);
    border-color: rgba(196,181,253,.28);
    color: #C4B5FD;
}
body.qiwo-dark .qiwo-calendario-asistencia__estado--sin-dato { background: #243044; border-color: rgba(255,255,255,.10); color: #A8B7C9; }
body.qiwo-dark .qiwo-calendario-asistencia__estado--feriado {
    background-color: #243044;
    background-image: repeating-linear-gradient(45deg, transparent, transparent 3px, rgba(148,163,184,.16) 3px, rgba(148,163,184,.16) 6px);
    border-color: rgba(203,213,225,.35);
    color: #CBD5E1;
}
body.qiwo-dark .qiwo-calendario-asistencia__leyenda { border-top-color: rgba(255,255,255,.10); }

/* ── Texto secundario: #64748B era demasiado tenue sobre #1A2535 ── */
body.qiwo-dark .admin-page-sub,
body.qiwo-dark .admin-stat-label,
body.qiwo-dark .admin-hub-card-desc,
body.qiwo-dark .admin-section-label,
body.qiwo-dark .admin-activity-empty,
body.qiwo-dark .qiwo-table-footer,
body.qiwo-dark .qiwo-table-loading,
body.qiwo-dark .qiwo-table-empty,
body.qiwo-dark .qiwo-text-muted,
body.qiwo-dark .qiwo-form-hint,
body.qiwo-dark .qiwo-optional,
body.qiwo-dark .qiwo-modal-desc { color: #94A3B8; }
body.qiwo-dark .qiwo-search-box input::placeholder,
body.qiwo-dark .qiwo-search-box::placeholder,
body.qiwo-dark .qiwo-form-group input::placeholder,
body.qiwo-dark .qiwo-form-group select::placeholder,
body.qiwo-dark .qiwo-form-group textarea::placeholder { color: #8C9CAF; }

/* El nombre real de la clase activa es qiwo-chip-active. El selector previo
   buscaba .active y dejaba filtros/tabs claros en los tres portales. */
body.qiwo-dark .qiwo-chip-active,
body.qiwo-dark .qiwo-chip.active {
    background: rgba(15,147,117,.20);
    border-color: rgba(52,211,153,.42);
    color: #6EE7B7;
}

/* ── Tokens neutrales todavía declarados inline por pantallas legacy ── */
body.qiwo-dark [style*="background:#F8FAFC"],
body.qiwo-dark [style*="background: #F8FAFC"] { background: #0F1923 !important; }
body.qiwo-dark [style*="border:1px solid #E2E8F0"],
body.qiwo-dark [style*="border: 1px solid #E2E8F0"],
body.qiwo-dark [style*="border-top:1px solid #E2E8F0"],
body.qiwo-dark [style*="border-top: 1px solid #E2E8F0"] { border-color: rgba(255,255,255,.10) !important; }
body.qiwo-dark [style*="border-top:1px solid #F1F5F9"],
body.qiwo-dark [style*="border-top: 1px solid #F1F5F9"],
body.qiwo-dark [style*="border-bottom:1px solid #F1F5F9"],
body.qiwo-dark [style*="border-bottom: 1px solid #F1F5F9"] { border-color: rgba(255,255,255,.08) !important; }
body.qiwo-dark [style*="color:#0F172A"],
body.qiwo-dark [style*="color: #0F172A"],
body.qiwo-dark [style*="color:#1E293B"],
body.qiwo-dark [style*="color: #1E293B"],
body.qiwo-dark [style*="color:#334155"],
body.qiwo-dark [style*="color: #334155"] { color: #E2E8F0 !important; }
body.qiwo-dark [style*="color:#475569"],
body.qiwo-dark [style*="color: #475569"],
body.qiwo-dark [style*="color:#64748B"],
body.qiwo-dark [style*="color: #64748B"],
body.qiwo-dark [style*="color:#6B7280"],
body.qiwo-dark [style*="color: #6B7280"],
body.qiwo-dark [style*="color:#9CA3AF"],
body.qiwo-dark [style*="color: #9CA3AF"] { color: #94A3B8 !important; }

/* Semántica de estados antiguos: al oscurecer el fondo, también se aclara el
   texto/acento. Esto cubre avisos y badges legacy; los calendarios nuevos usan
   clases específicas arriba para no depender de coincidencias de texto. */
body.qiwo-dark [style*="background:#FEF3A0"],
body.qiwo-dark [style*="background: #FEF3A0"],
body.qiwo-dark [style*="background:#FEF3C7"],
body.qiwo-dark [style*="background: #FEF3C7"] { background: rgba(234,179,8,.20) !important; color: #FDE68A !important; }
body.qiwo-dark [style*="background:#FDC58B"],
body.qiwo-dark [style*="background: #FDC58B"] { background: rgba(234,88,12,.22) !important; color: #FDC58B !important; }
body.qiwo-dark [style*="background:#FCB3B3"],
body.qiwo-dark [style*="background: #FCB3B3"],
body.qiwo-dark [style*="background:#FEE2E2"],
body.qiwo-dark [style*="background: #FEE2E2"],
body.qiwo-dark [style*="background:#FEF2F2"],
body.qiwo-dark [style*="background: #FEF2F2"] { background: rgba(220,38,38,.20) !important; color: #FCB3B3 !important; }
body.qiwo-dark [style*="background:#DDD6FE"],
body.qiwo-dark [style*="background: #DDD6FE"] { background: rgba(124,58,237,.22) !important; color: #C4B5FD !important; }
body.qiwo-dark [style*="background:#DBEAFE"],
body.qiwo-dark [style*="background: #DBEAFE"] { background: rgba(29,78,216,.22) !important; color: #93C5FD !important; }
body.qiwo-dark [style*="background:#CCFBF1"],
body.qiwo-dark [style*="background: #CCFBF1"],
body.qiwo-dark [style*="background:#99F6E4"],
body.qiwo-dark [style*="background: #99F6E4"] { background: rgba(20,184,166,.20) !important; color: #5EEAD4 !important; }
body.qiwo-dark [style*="color:#991B1B"],
body.qiwo-dark [style*="color: #991B1B"],
body.qiwo-dark [style*="color:#7F1D1D"],
body.qiwo-dark [style*="color: #7F1D1D"],
body.qiwo-dark [style*="color:#B91C1C"],
body.qiwo-dark [style*="color: #B91C1C"] { color: #FCB3B3 !important; }
body.qiwo-dark [style*="color:#854D0E"],
body.qiwo-dark [style*="color: #854D0E"],
body.qiwo-dark [style*="color:#92400E"],
body.qiwo-dark [style*="color: #92400E"] { color: #FDE68A !important; }
body.qiwo-dark [style*="color:#7C2D12"],
body.qiwo-dark [style*="color: #7C2D12"] { color: #FDC58B !important; }
body.qiwo-dark [style*="color:#5B21B6"],
body.qiwo-dark [style*="color: #5B21B6"] { color: #C4B5FD !important; }

/* ── Formularios y modales administrativos ── */
body.qiwo-dark .qiwo-roles-list,
body.qiwo-dark .qiwo-persona-card,
body.qiwo-dark .qiwo-autocomplete-dropdown { background: #0F1923; border-color: rgba(255,255,255,.10); }
body.qiwo-dark .qiwo-checkbox-label,
body.qiwo-dark .qiwo-persona-card-data,
body.qiwo-dark .qiwo-detalle-label,
body.qiwo-dark .qiwo-autocomplete-hint { color: #A8B7C9; }
body.qiwo-dark .qiwo-codigo-tag { background: #243044; color: #CBD5E1; }
body.qiwo-dark .qiwo-autocomplete-nombre { color: #E2E8F0; }
body.qiwo-dark .qiwo-autocomplete-codigo { color: #94A3B8; }
body.qiwo-dark .qiwo-selected-chip {
    background: rgba(15,147,117,.16);
    border-color: rgba(52,211,153,.32);
    color: #6EE7B7;
}
body.qiwo-dark .qiwo-portal-banner {
    background: rgba(15,147,117,.14);
    border-color: rgba(52,211,153,.28);
    color: #6EE7B7;
}
body.qiwo-dark .qiwo-password-toggle { color: #A8B7C9; }
body.qiwo-dark .qiwo-password-toggle:hover { color: #5EEAD4; }
body.qiwo-dark .qiwo-page-btn {
    background: #1A2535;
    border-color: rgba(255,255,255,.12);
    color: #CBD5E1;
}
body.qiwo-dark .qiwo-page-btn:hover:not(:disabled) { background: #243044; border-color: rgba(52,211,153,.42); color: #6EE7B7; }
body.qiwo-dark .qiwo-page-btn.active { background: #0F9375; border-color: #0F9375; color: #fff; }

/* Selector de institución/sucursal: ambos .razor llevan estilos locales claros. */
body.qiwo-dark .sel-inst-card { background: #1A2535; }
body.qiwo-dark .sel-inst-title,
body.qiwo-dark .sel-inst-nombre { color: #E2E8F0; }
body.qiwo-dark .sel-inst-sub,
body.qiwo-dark .sel-inst-ruc,
body.qiwo-dark .sel-inst-cerrar { color: #A8B7C9; }
body.qiwo-dark .sel-inst-item { background: #0F1923; border-color: rgba(255,255,255,.10); }
body.qiwo-dark .sel-inst-item:hover { background: rgba(15,147,117,.16); border-color: rgba(52,211,153,.44); }
body.qiwo-dark .sel-inst-icon { background: rgba(29,78,216,.18); }
body.qiwo-dark .sel-inst-arrow { color: #94A3B8; }
body.qiwo-dark .sel-inst-card svg path[fill="#0B2947"] { fill: #E2E8F0; }

/* Un aviso rojo usa superficie completa, no letras oscuras sobre rojo apagado. */
body.qiwo-dark .qiwo-aviso-credencial-ajena { background: rgba(220,38,38,.18); color: #FCB3B3; }
body.qiwo-dark .qiwo-aviso-credencial-ajena p { color: #FCB3B3; }

/* Picker de alumno de Reportes: las opciones activas seguían usando verde claro. */
body.qiwo-dark .auxiliar-alumno-picker-option:hover,
body.qiwo-dark .auxiliar-alumno-picker-option--selected { background: rgba(15,147,117,.18); color: #6EE7B7; }
body.qiwo-dark .auxiliar-alumno-picker-empty { color: #A8B7C9; }

/* ── Calendario del apoderado ──
   Es independiente del calendario resumido de Auxiliar porque permite tocar un
   día y tiene más estados. Comparten la paleta, no los estilos inline. */
.qiwo-calendario-apoderado__titulo { margin-bottom: 12px; }
.qiwo-calendario-apoderado__titulo svg { display: block; flex: none; }
.qiwo-calendario-apoderado__resumen {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 16px;
    margin-bottom: 12px;
    padding: 10px 16px;
    background: #F8FAFC;
    border: 1px solid #E2E8F0;
    border-radius: 10px;
}
.qiwo-calendario-apoderado__resumen-texto { color: #52667D; font-size: 13px; }
.qiwo-calendario-apoderado__resumen-texto strong { color: #0B2947; }
/* Aviso de período sin exigencia de asistencia (11/09/2026). Mismo esqueleto
   que __resumen — es información del mismo rango, no una alerta — pero en el
   lila de "Falta justificada", que ya es el color de "el colegio sabe y está
   en orden". No suma un ítem a la leyenda: es una frase, no un estado. */
.qiwo-calendario-apoderado__aviso-periodo {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    margin-bottom: 12px;
    padding: 10px 16px;
    background: #F5F3FF;
    border: 1px solid #DDD6FE;
    border-radius: 10px;
    color: #5B21B6;
    font-size: 13px;
    line-height: 1.5;
}
.qiwo-calendario-apoderado__aviso-periodo svg { flex-shrink: 0; margin-top: 1px; }
.qiwo-calendario-apoderado__aviso-periodo strong { color: #4C1D95; }
body.qiwo-dark .qiwo-calendario-apoderado__aviso-periodo {
    background: rgba(124,58,237,.14);
    border-color: rgba(196,181,253,.28);
    color: #C4B5FD;
}
body.qiwo-dark .qiwo-calendario-apoderado__aviso-periodo strong { color: #DDD6FE; }
.qiwo-calendario-apoderado__porcentaje { font-size: 15px; font-weight: 700; }
.qiwo-calendario-apoderado__porcentaje--positivo { color: #059669; }
.qiwo-calendario-apoderado__porcentaje--alerta { color: #DC2626; }
.qiwo-calendario-apoderado__superficie {
    margin-bottom: 20px;
    padding: 16px;
    overflow-x: auto;
    background: #fff;
    border: 1px solid #E2E8F0;
    border-radius: 14px;
}
.qiwo-calendario-apoderado__semana {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 4px;
}
.qiwo-calendario-apoderado__semana--titulos { margin-bottom: 8px; }
.qiwo-calendario-apoderado__dia-semana {
    padding: 4px;
    color: #64748B;
    font-size: 11px;
    font-weight: 700;
    text-align: center;
}
.qiwo-calendario-apoderado__celda {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    min-height: 44px;
    padding: 6px 4px;
    border: 1px solid transparent;
    border-radius: 8px;
    box-sizing: border-box;
    cursor: pointer;
    /* Ancla del lápiz de "registrado por el colegio", que va en la esquina. */
    position: relative;
}
.qiwo-calendario-apoderado__celda--sin-interaccion { cursor: default; }
.qiwo-calendario-apoderado__numero { font-size: 13px; font-weight: 600; }
/* Registrado a mano por el colegio (09/09/2026). Va en la esquina y no debajo del
   número para no empujar la cifra fuera del centro de la celda. Hereda
   --qiwo-calendario-punto, o sea el mismo tono del estado de ese día, así que no
   suma un color más a la escala. */
.qiwo-calendario-apoderado__lapiz {
    position: absolute;
    top: 3px;
    right: 3px;
    color: var(--qiwo-calendario-punto, currentColor);
    pointer-events: none;
}
.qiwo-calendario-apoderado__muestra-lapiz {
    flex: none;
    color: #52667D;
}
.qiwo-calendario-apoderado__celda--seleccionada { outline: 2px solid #0B2947; outline-offset: 2px; }
.qiwo-calendario-apoderado__celda--puntual { --qiwo-calendario-punto: #0F9375; background: #D1FAE5; border-color: #0F9375; color: #065F46; }
.qiwo-calendario-apoderado__celda--tardanza { --qiwo-calendario-punto: #CA8A04; background: #FEF3A0; border-color: #CA8A04; color: #854D0E; }
.qiwo-calendario-apoderado__celda--fuera { --qiwo-calendario-punto: #EA580C; background: #FDC58B; border-color: #EA580C; color: #7C2D12; }
.qiwo-calendario-apoderado__celda--ausente { --qiwo-calendario-punto: #DC2626; background: #FCB3B3; border-color: #DC2626; color: #7F1D1D; }
.qiwo-calendario-apoderado__celda--justificado { --qiwo-calendario-punto: #7C3AED; background: #DDD6FE; border-color: #7C3AED; color: #5B21B6; }
/* Interior de un período (11/09/2026): el primer y el último día del rango se
   quedan con el lila pleno de arriba, los del medio bajan de peso. El rango se
   lee entonces como un bloque con principio y fin, en vez de N días sueltos.
   Mismo lila, menos intensidad — no es un estado nuevo ni suma un ítem a la
   leyenda, que ya estaba cargada. */
.qiwo-calendario-apoderado__celda--periodo-interior { --qiwo-calendario-punto: #A78BD8; background: #EEEAFE; border-color: #E3DCFD; color: #6D4AAF; }
.qiwo-calendario-apoderado__celda--salida { --qiwo-calendario-punto: #1D4ED8; background: #DBEAFE; border-color: #1D4ED8; color: #1E40AF; }
.qiwo-calendario-apoderado__celda--asistio-nohabil { --qiwo-calendario-punto: #2DD4BF; background: #99F6E4; border-color: #2DD4BF; color: #115E59; }
.qiwo-calendario-apoderado__celda--feriado {
    background-color: #F1F5F9;
    background-image: repeating-linear-gradient(45deg, transparent, transparent 3px, rgba(100,116,139,.28) 3px, rgba(100,116,139,.28) 6px);
    border-color: #CBD5E1;
    color: #475569;
}
.qiwo-calendario-apoderado__celda--sin-registro { background: #F1F5F9; border-color: #E2E8F0; color: #64748B; }
.qiwo-calendario-apoderado__celda--finde { background: #F1F5F9; border-color: #E2E8F0; color: #64748B; }
/* El futuro queda visible, pero sin parecer una falta pendiente. #64748B pasa
   AA en la superficie blanca; el anterior #CBD5E1 no alcanzaba contraste. */
.qiwo-calendario-apoderado__celda--futuro { background: #fff; border-color: #EEF2F6; color: #64748B; }
/* Día en curso, jornada sin terminar (14/09/2026). El borde punteado dice "esto
   todavía no está decidido" sin gastar un color de estado: si fuera gris pleno
   se confundiría con fin de semana, y cualquier tinte se leería como veredicto.
   El alumno aún puede llegar y marcar. */
.qiwo-calendario-apoderado__celda--pendiente {
    background: #F8FAFC;
    border-color: #CBD5E1;
    border-style: dashed;
    color: #475569;
}
.qiwo-calendario-apoderado__leyenda {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    margin-top: 12px;
    padding-top: 10px;
    border-top: 1px solid #F1F5F9;
}
.qiwo-calendario-apoderado__item-leyenda {
    display: flex;
    align-items: center;
    gap: 5px;
    color: #52667D;
    font-size: 11px;
}
.qiwo-calendario-apoderado__muestra {
    display: inline-block;
    width: 12px;
    height: 12px;
    flex: none;
    border: 1px solid transparent;
    border-radius: 3px;
    box-sizing: border-box;
}
.qiwo-calendario-apoderado__muestra--asistio-nohabil { background: #CCFBF1; border-color: #14B8A6; }

body.qiwo-dark .qiwo-calendario-apoderado__resumen {
    background: #0F1923;
    border-color: rgba(255,255,255,.10);
}
body.qiwo-dark .qiwo-calendario-apoderado__resumen-texto { color: #A8B7C9; }
body.qiwo-dark .qiwo-calendario-apoderado__resumen-texto strong { color: #E2E8F0; }
body.qiwo-dark .qiwo-calendario-apoderado__porcentaje--positivo { color: #6EE7B7; }
body.qiwo-dark .qiwo-calendario-apoderado__porcentaje--alerta { color: #FCB3B3; }
body.qiwo-dark .qiwo-calendario-apoderado__superficie { background: #0F1923; border-color: rgba(255,255,255,.10); }
body.qiwo-dark .qiwo-calendario-apoderado__dia-semana,
body.qiwo-dark .qiwo-calendario-apoderado__item-leyenda { color: #A8B7C9; }
body.qiwo-dark .qiwo-calendario-apoderado__muestra-lapiz { color: #A8B7C9; }
body.qiwo-dark .qiwo-calendario-apoderado__celda--seleccionada { outline-color: #5EEAD4; }
body.qiwo-dark .qiwo-calendario-apoderado__celda--puntual { --qiwo-calendario-punto: #6EE7B7; background: rgba(16,185,129,.18); border-color: rgba(110,231,183,.36); color: #6EE7B7; }
body.qiwo-dark .qiwo-calendario-apoderado__celda--tardanza { --qiwo-calendario-punto: #FDE68A; background: rgba(234,179,8,.22); border-color: rgba(253,230,138,.38); color: #FDE68A; }
body.qiwo-dark .qiwo-calendario-apoderado__celda--fuera { --qiwo-calendario-punto: #FDC58B; background: rgba(234,88,12,.22); border-color: rgba(253,197,139,.38); color: #FDC58B; }
body.qiwo-dark .qiwo-calendario-apoderado__celda--ausente { --qiwo-calendario-punto: #FCB3B3; background: rgba(220,38,38,.20); border-color: rgba(252,179,179,.38); color: #FCB3B3; }
body.qiwo-dark .qiwo-calendario-apoderado__celda--justificado { --qiwo-calendario-punto: #C4B5FD; background: rgba(124,58,237,.22); border-color: rgba(196,181,253,.38); color: #C4B5FD; }
body.qiwo-dark .qiwo-calendario-apoderado__celda--periodo-interior { --qiwo-calendario-punto: #A78BD8; background: rgba(124,58,237,.11); border-color: rgba(196,181,253,.16); color: #A78BD8; }
body.qiwo-dark .qiwo-calendario-apoderado__celda--salida { --qiwo-calendario-punto: #93C5FD; background: rgba(29,78,216,.22); border-color: rgba(147,197,253,.38); color: #93C5FD; }
body.qiwo-dark .qiwo-calendario-apoderado__celda--asistio-nohabil,
body.qiwo-dark .qiwo-calendario-apoderado__muestra--asistio-nohabil { --qiwo-calendario-punto: #5EEAD4; background: rgba(20,184,166,.20); border-color: rgba(94,234,212,.38); color: #5EEAD4; }
body.qiwo-dark .qiwo-calendario-apoderado__celda--feriado {
    background-color: #243044;
    background-image: repeating-linear-gradient(45deg, transparent, transparent 3px, rgba(148,163,184,.16) 3px, rgba(148,163,184,.16) 6px);
    border-color: rgba(203,213,225,.35);
    color: #CBD5E1;
}
body.qiwo-dark .qiwo-calendario-apoderado__celda--sin-registro,
body.qiwo-dark .qiwo-calendario-apoderado__celda--finde { background: #243044; border-color: rgba(255,255,255,.10); color: #A8B7C9; }
body.qiwo-dark .qiwo-calendario-apoderado__celda--futuro { background: #132135; border-color: rgba(255,255,255,.08); color: #8C9CAF; }
body.qiwo-dark .qiwo-calendario-apoderado__celda--pendiente { background: #1B2A3F; border-color: rgba(255,255,255,.22); color: #C7D3E0; }
body.qiwo-dark .qiwo-calendario-apoderado__leyenda { border-top-color: rgba(255,255,255,.10); }

/* Estados vacíos y días no hábiles del Dashboard del apoderado. */
body.qiwo-dark .qiwo-empty-state { color: #A8B7C9; }
body.qiwo-dark .qiwo-empty-state-title { color: #E2E8F0; }
body.qiwo-dark .qiwo-empty-state-desc { color: #A8B7C9; }
body.qiwo-dark .qiwo-empty-state-icon { color: #64748B; }
body.qiwo-dark .qiwo-hijo-card-nohabil {
    background: repeating-linear-gradient(45deg, #243044, #243044 4px, #2E3C52 4px, #2E3C52 8px);
    color: #CBD5E1;
}

/* Roles, búsquedas y detalle dentro de modales: antes heredaban grises claros. */
body.qiwo-dark .qiwo-rol-chip { background: #243044; color: #CBD5E1; }
body.qiwo-dark .qiwo-rol-chip.rol-director { background: rgba(124,58,237,.20); color: #C4B5FD; }
body.qiwo-dark .qiwo-rol-chip.rol-administrativo { background: rgba(29,78,216,.20); color: #93C5FD; }
body.qiwo-dark .qiwo-rol-chip.rol-superadmin { background: rgba(220,38,38,.18); color: #FCB3B3; }
body.qiwo-dark .qiwo-rol-chip.rol-tutor { background: rgba(16,185,129,.18); color: #6EE7B7; }
body.qiwo-dark .qiwo-rol-chip.rol-auxiliar { background: rgba(234,179,8,.20); color: #FDE68A; }
body.qiwo-dark .qiwo-detalle-row { border-bottom-color: rgba(255,255,255,.08); color: #CBD5E1; }
body.qiwo-dark .qiwo-autocomplete-item { border-bottom-color: rgba(255,255,255,.08); color: #CBD5E1; }
body.qiwo-dark .qiwo-autocomplete-item:hover { background: rgba(15,147,117,.16); }

/* Los acentos que se escribieron directamente en Razor también necesitan una
   versión legible: en oscuro el tono de texto se aclara, no se apaga. */
body.qiwo-dark [style*="color:#0F9375"],
body.qiwo-dark [style*="color: #0F9375"],
body.qiwo-dark [style*="color:#087A62"],
body.qiwo-dark [style*="color: #087A62"],
body.qiwo-dark [style*="color:#0D9488"],
body.qiwo-dark [style*="color: #0D9488"] { color: #5EEAD4 !important; }
body.qiwo-dark [style*="color:#B45309"],
body.qiwo-dark [style*="color: #B45309"],
body.qiwo-dark [style*="color:#D97706"],
body.qiwo-dark [style*="color: #D97706"],
body.qiwo-dark [style*="color:#F59E0B"],
body.qiwo-dark [style*="color: #F59E0B"] { color: #FCD34D !important; }
body.qiwo-dark [style*="color:#DC2626"],
body.qiwo-dark [style*="color: #DC2626"],
body.qiwo-dark [style*="color:#EF4444"],
body.qiwo-dark [style*="color: #EF4444"] { color: #FCA5A5 !important; }
body.qiwo-dark [style*="color:#1D4ED8"],
body.qiwo-dark [style*="color: #1D4ED8"],
body.qiwo-dark [style*="color:#1E40AF"],
body.qiwo-dark [style*="color: #1E40AF"] { color: #93C5FD !important; }
body.qiwo-dark [style*="color:#7C3AED"],
body.qiwo-dark [style*="color: #7C3AED"] { color: #C4B5FD !important; }
body.qiwo-dark [style*="background:#E0F2F1"],
body.qiwo-dark [style*="background: #E0F2F1"],
body.qiwo-dark [style*="background:#E1F5EE"],
body.qiwo-dark [style*="background: #E1F5EE"],
body.qiwo-dark [style*="background:#ECFDF5"],
body.qiwo-dark [style*="background: #ECFDF5"],
body.qiwo-dark [style*="background:#DCFCE7"],
body.qiwo-dark [style*="background: #DCFCE7"],
body.qiwo-dark [style*="background:#F0FDF9"],
body.qiwo-dark [style*="background: #F0FDF9"] { background: rgba(16,185,129,.18) !important; }
body.qiwo-dark [style*="background:#EFF6FF"],
body.qiwo-dark [style*="background: #EFF6FF"],
body.qiwo-dark [style*="background:#E6F1FB"],
body.qiwo-dark [style*="background: #E6F1FB"] { background: rgba(29,78,216,.20) !important; }
body.qiwo-dark [style*="background:#EDE9FE"],
body.qiwo-dark [style*="background: #EDE9FE"] { background: rgba(124,58,237,.20) !important; }
body.qiwo-dark [style*="background:#FFF7ED"],
body.qiwo-dark [style*="background: #FFF7ED"],
body.qiwo-dark [style*="background:#FFEDD5"],
body.qiwo-dark [style*="background: #FFEDD5"] { background: rgba(234,88,12,.20) !important; }
body.qiwo-dark [style*="background:#FEF9C3"],
body.qiwo-dark [style*="background: #FEF9C3"],
body.qiwo-dark [style*="background:#FFFBEB"],
body.qiwo-dark [style*="background: #FFFBEB"] { background: rgba(234,179,8,.18) !important; }

/* ══════════════════════════════════════════════════════════════════════════
   MODO OSCURO — LOS TEXTOS QUE SE QUEDARON SIN SU PAR (08/09/2026)

   El barrido de tema oscuro oscureció los FONDOS pastel puestos en línea
   (`[style*="background:#FFEDD5"]` -> naranja translúcido, y otros cinco
   iguales), pero no tocó los colores de TEXTO que viajan en ese mismo
   atributo. El resultado es un par roto: el fondo pasa a oscuro y encima
   queda un marrón #9A3412 o un azul #0C447C pensados para papel blanco.
   Contraste real ~1.3:1 — el badge existe pero no se puede leer.

   Cada texto va al claro de SU MISMA familia, todos tomados de la paleta que
   el modo oscuro ya usa en otras superficies (#FDC58B naranja, #93C5FD azul,
   #34D399 verde, #5EEAD4 turquesa) — no se introduce ningún color nuevo.

   Superficies afectadas, verificadas una por una:
     #9A3412  aviso de AdminPersonas · badge "TARDE" de AdminSecciones
     #1E3A8A  aviso azul de KioscoCapturas
     #166534  badge "INICIAL" de AdminSecciones · "Ya se avisó" del Récord
     #0C447C  badge "INSTITUCIÓN" de AdminComunicados
     #085041  badge de sucursal de AdminComunicados

   ⚠️ Deuda que esto NO resuelve: el enganche por `[style*="..."]` depende de
   que el atributo se escriba idéntico (mismo espaciado, mismas mayúsculas del
   hex). Un .razor nuevo que escriba `color: #9a3412` en minúscula vuelve a
   caer fuera de la red y nadie se entera hasta verlo en pantalla. La salida de
   fondo es migrar estos inline a clases semánticas, como ya se hizo con
   CalendarioAsistenciaAlumno.
   ══════════════════════════════════════════════════════════════════════════ */
body.qiwo-dark [style*="color:#9A3412"],
body.qiwo-dark [style*="color: #9A3412"] { color: #FDC58B !important; }
body.qiwo-dark [style*="color:#1E3A8A"],
body.qiwo-dark [style*="color: #1E3A8A"],
body.qiwo-dark [style*="color:#0C447C"],
body.qiwo-dark [style*="color: #0C447C"] { color: #93C5FD !important; }
body.qiwo-dark [style*="color:#166534"],
body.qiwo-dark [style*="color: #166534"] { color: #34D399 !important; }
body.qiwo-dark [style*="color:#085041"],
body.qiwo-dark [style*="color: #085041"] { color: #5EEAD4 !important; }

/* ══════════════════════════════════════════════════════════════════════════
   EL BOTÓN DE ENTRAR SE PERDÍA EN MODO OSCURO (08/09/2026)

   `.login-btn-primary` es `background:#0B2947`, el azul marino de marca, y no
   tenía ninguna regla en tema oscuro. Sobre papel blanco resalta; sobre el
   fondo oscuro del portal queda azul marino sobre azul marino y el botón
   principal de la pantalla casi desaparece. Cazado en la tablet, en el portal
   de Apoderados de producción — la PWA de más gente y la única donde el botón
   no tiene tarjeta clara detrás que lo despegue del fondo.

   Alrededor sí se habían atendido `.login-field-hint`, `.login-aviso-*` y
   `.login-btn-recuperar`: se pasó por alto justo el principal.

   Va al VERDE de marca, no a un azul aclarado. No es salirse de la paleta: el
   manual tiene DOS primarios, `#0B2947` y `#0F9375`, ambos pensados para
   llevar la Q en blanco encima. Y el verde ya es el color de acción primaria
   en todo el resto de Qiwo (el CTA del Auxiliar, "Nueva Sección", "Nuevo
   comunicado"), así que en oscuro el login queda MÁS alineado con el sistema,
   no menos. En modo claro no cambia nada: ahí el azul contrasta perfecto y es
   la identidad que los padres ya reconocen.

   Alcanza a los tres logins (Apoderado, Admin y Profesor) porque la variante
   `--profesor` solo redefine forma, hereda el fondo.
   ══════════════════════════════════════════════════════════════════════════ */
body.qiwo-dark .login-btn-primary { background: #0F9375; color: #FFFFFF; }
body.qiwo-dark .login-btn-primary:hover { background: #0d7a62; }

/* ── Video en vivo de una puerta (09/09/2026) ────────────────────────────────
   El alto se fija por proporción y no por píxeles: la cámara de cada tablet
   entrega la resolución que ella decide (medido: 1600x1200 en una, 1280x720 en
   otra), así que una altura fija dejaría franjas negras en unas y recortaría en
   otras. */
.qiwo-video-puerta {
    position: relative;
    width: 100%;
    aspect-ratio: 4 / 3;
    background: #0B2947;
    border-radius: 10px;
    overflow: hidden;
}
.qiwo-video-puerta video {
    width: 100%;
    height: 100%;
    object-fit: contain;
    display: block;
}
.qiwo-video-puerta-espera {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 10px;
    color: #E2E8F0;
    font-size: 13px;
    text-align: center;
    padding: 0 16px;
}
.qiwo-video-puerta-pie {
    margin: 10px 0 0;
    font-size: 12px;
    color: #52667D;
    text-align: center;
}
body.qiwo-dark .qiwo-video-puerta-pie { color: #A8B7C9; }

/* ── AVISO DE ERROR CON ORIGEN (AvisoError.razor) ─────────────
   Hereda el color de admin-alert-warning (validación: hay algo que puedes
   corregir) o admin-alert-error (servidor: se cayó de nuestro lado), así que acá
   solo va la estructura. El ícono se alinea con la primera línea porque el aviso
   ahora tiene dos o tres renglones y centrado verticalmente quedaba flotando. */
.qiwo-aviso-error {
    align-items: flex-start;
    gap: 12px;
}
.qiwo-aviso-error > svg {
    width: 18px;
    height: 18px;
    flex-shrink: 0;
    margin-top: 1px;
}
.qiwo-aviso-error__cuerpo {
    display: flex;
    flex-direction: column;
    gap: 3px;
    min-width: 0;
    flex: 1;
}
.qiwo-aviso-error__titulo {
    font-size: 14px;
    font-weight: 700;
    line-height: 1.3;
}
.qiwo-aviso-error__texto {
    font-size: 14px;
    line-height: 1.45;
}
.qiwo-aviso-error__codigo {
    font-size: 12px;
    opacity: .8;
    margin-top: 3px;
}
.qiwo-aviso-error__accion {
    flex-shrink: 0;
    align-self: center;
    white-space: nowrap;
}

@media (max-width: 640px) {
    /* En celular el botón no cabe al lado del texto: pasa debajo y ocupa el ancho,
       que además es el área táctil que se espera en un bottom-sheet. */
    .qiwo-aviso-error {
        flex-wrap: wrap;
    }
    .qiwo-aviso-error__accion {
        width: 100%;
        align-self: stretch;
        margin-top: 4px;
    }
}

/* ── Historial de cambios (Panel SkyMars, 22/09/2026) ─────────────────────────
   El estado se lee por el tinte de toda la tarjeta (blanca, verde, ámbar) y
   nunca por una franja lateral: regla de diseño de SkyMars. */
.hc-prod { background: #0B2947; color: #fff; border-radius: 14px; padding: 14px 16px; display: flex; flex-direction: column; gap: 8px; margin-bottom: 14px; max-width: 720px; }
.hc-prod-fila { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: rgba(255,255,255,.7); }
.hc-punto { width: 8px; height: 8px; border-radius: 50%; background: #34D399; box-shadow: 0 0 0 3px rgba(52,211,153,.25); flex-shrink: 0; }
.hc-prod-titulo { font-size: 15px; font-weight: 600; }
.hc-hash { font-family: Consolas, "Cascadia Mono", monospace; font-size: 13px; background: rgba(255,255,255,.1); padding: 1px 6px; border-radius: 5px; }
.hc-contadores { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.hc-contador { background: rgba(255,255,255,.08); border-radius: 10px; padding: 8px 10px; }
.hc-contador b { display: block; font-size: 22px; line-height: 1.1; font-variant-numeric: tabular-nums; }
.hc-contador span { font-size: 11px; color: rgba(255,255,255,.65); }

.hc-chips { display: flex; gap: 6px; overflow-x: auto; padding-bottom: 2px; margin-bottom: 12px; }
.hc-chip { border: 1px solid #D1D5DB; background: #fff; color: #64748B; border-radius: 999px; font-size: 12.5px; font-weight: 600; padding: 6px 14px; white-space: nowrap; cursor: pointer; font-family: inherit; }
.hc-chip[aria-pressed="true"] { background: #0F9375; border-color: #0F9375; color: #fff; }

.hc-grupo { display: flex; flex-direction: column; gap: 8px; margin-bottom: 16px; max-width: 720px; }
.hc-grupo-cab { display: flex; justify-content: space-between; gap: 8px; font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: #64748B; padding: 2px 2px 0; }
.hc-grupo-cuando { font-weight: 600; letter-spacing: 0; text-transform: none; font-variant-numeric: tabular-nums; }
.hc-grupo--local .hc-grupo-cab { color: #92400E; }

.hc-cambio { background: #fff; border: 1px solid #E2E8F0; border-radius: 12px; overflow: hidden; }
.hc-cambio[data-estado="OK"] { background: #E0F2F1; border-color: #B6E0DA; }
.hc-cambio[data-estado="OBSERVACION"] { background: #FEF3C7; border-color: #FCD34D; }
.hc-cambio-cab { width: 100%; background: none; border: 0; text-align: left; font-family: inherit; color: inherit; padding: 11px 12px; display: grid; grid-template-columns: 18px 1fr; gap: 10px; cursor: pointer; }
.hc-cambio-cab:focus-visible, .hc-chip:focus-visible, .hc-btn:focus-visible { outline: 2px solid #0F9375; outline-offset: 2px; }
.hc-ico { margin-top: 1px; }
.hc-cuerpo-cab { display: block; min-width: 0; }
.hc-titulo { display: block; font-size: 13.5px; font-weight: 600; line-height: 1.35; color: #1E293B; overflow-wrap: anywhere; }
.hc-meta { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; align-items: center; }
.hc-tag { font-size: 10.5px; font-weight: 600; padding: 2px 7px; border-radius: 999px; white-space: nowrap; }
.hc-tag--area { background: #E0F2F1; color: #0B6B55; }
.hc-tag--sql { background: #EDE9FE; color: #5B21B6; }
.hc-quien { font-size: 11px; color: #64748B; font-variant-numeric: tabular-nums; }
.hc-detalle { padding: 0 12px 12px 40px; display: flex; flex-direction: column; gap: 10px; }
.hc-texto { margin: 0; font-size: 12.5px; line-height: 1.55; color: #334155; white-space: pre-line; overflow-wrap: anywhere; }
.hc-archivos { font-family: Consolas, "Cascadia Mono", monospace; font-size: 11px; color: #64748B; line-height: 1.6; overflow-x: auto; white-space: nowrap; }
.hc-acciones { display: flex; gap: 8px; flex-wrap: wrap; }
.hc-btn { font-family: inherit; font-size: 12.5px; font-weight: 600; border-radius: 9px; padding: 8px 12px; cursor: pointer; display: inline-flex; align-items: center; gap: 6px; border: 1px solid transparent; }
.hc-btn:disabled { opacity: .55; cursor: default; }
.hc-btn--ok { background: #0F9375; color: #fff; }
.hc-btn--obs { background: #fff; color: #92400E; border-color: #FCD34D; }
.hc-btn--link { background: none; color: #64748B; border: 0; padding-inline: 4px; text-decoration: underline; }
.hc-textarea { width: 100%; font-family: inherit; font-size: 13px; border: 1px solid #FCD34D; border-radius: 9px; padding: 8px 10px; resize: vertical; min-height: 64px; background: #fff; color: #1E293B; }
.hc-obs-guardada { font-size: 12.5px; color: #92400E; background: rgba(255,255,255,.6); border-radius: 8px; padding: 8px 10px; line-height: 1.45; display: flex; flex-direction: column; gap: 4px; white-space: pre-line; }
.hc-vacio { font-size: 13px; color: #64748B; padding: 24px 8px; text-align: center; max-width: 720px; }
.hc-leyenda { font-size: 11.5px; color: #94A3B8; max-width: 720px; text-align: center; }

body.qiwo-dark .hc-prod { background: #1A2535; }
body.qiwo-dark .hc-chip { background: #1A2535; border-color: rgba(255,255,255,.1); color: #94A3B8; }
body.qiwo-dark .hc-chip[aria-pressed="true"] { background: #0F9375; border-color: #0F9375; color: #fff; }
body.qiwo-dark .hc-cambio { background: #1A2535; border-color: rgba(255,255,255,.06); }
body.qiwo-dark .hc-cambio[data-estado="OK"] { background: rgba(15,147,117,.16); border-color: rgba(15,147,117,.4); }
body.qiwo-dark .hc-cambio[data-estado="OBSERVACION"] { background: rgba(217,119,6,.16); border-color: rgba(217,119,6,.45); }
body.qiwo-dark .hc-titulo { color: #E2E8F0; }
body.qiwo-dark .hc-texto { color: #CBD5E1; }
body.qiwo-dark .hc-tag--area { background: rgba(15,147,117,.18); color: #6EE7B7; }
body.qiwo-dark .hc-tag--sql { background: rgba(139,92,246,.2); color: #C4B5FD; }
body.qiwo-dark .hc-btn--obs { background: transparent; color: #FCD34D; border-color: rgba(252,211,77,.5); }
body.qiwo-dark .hc-textarea { background: #0F1923; color: #E2E8F0; border-color: rgba(252,211,77,.5); }
body.qiwo-dark .hc-obs-guardada { background: rgba(0,0,0,.2); color: #FCD34D; }

/* ══ Panel SkyMars · Uso de padres (24/09/2026) ══════════════════════ */
.up-chips { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 16px; }
.up-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 12px; margin-bottom: 16px; }
.up-kpi {
    background: #fff; border: 1px solid #E5E7EB; border-radius: 14px;
    padding: 14px 16px; display: flex; flex-direction: column; gap: 4px;
}
.up-kpi--lead { background: #0B2947; border-color: #0B2947; color: #fff; }
.up-kpi-lbl { font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: #6B7280; }
.up-kpi-val { font-size: 28px; font-weight: 700; line-height: 1.1; color: #0B2947; font-variant-numeric: tabular-nums; }
.up-kpi-val small { font-size: 14px; font-weight: 600; opacity: .7; }
.up-kpi-foot { font-size: 12px; color: #6B7280; }
.up-kpi--lead .up-kpi-lbl, .up-kpi--lead .up-kpi-foot { color: #B8C7D6; }
.up-kpi--lead .up-kpi-val { color: #fff; }
.up-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); gap: 16px; margin-bottom: 16px; }
.up-card { display: flex; flex-direction: column; margin-bottom: 16px; }
.up-grid .up-card { margin-bottom: 0; }
.up-card-h {
    padding: 14px 16px; border-bottom: 1px solid #F3F4F6; display: flex;
    justify-content: space-between; align-items: baseline; gap: 12px; flex-wrap: wrap;
    font-size: 14px; color: #0B2947;
}
.up-card-h span { font-size: 12px; color: #6B7280; }
.up-card-b { padding: 16px; flex: 1; }
.up-embudo { display: flex; flex-direction: column; gap: 12px; }
.up-embudo-fila { display: grid; grid-template-columns: minmax(120px, 200px) 1fr 56px; gap: 10px; align-items: center; font-size: 13px; color: #475569; }
.up-embudo-fila strong { text-align: right; color: #0B2947; font-variant-numeric: tabular-nums; }
.up-track { height: 22px; background: #F3F4F6; border-radius: 6px; overflow: hidden; }
.up-fill { height: 100%; background: #0F9375; border-radius: 6px; }
.up-stack { display: flex; height: 28px; border-radius: 8px; overflow: hidden; margin-bottom: 14px; background: #F3F4F6; }
.up-stack-seg { height: 100%; }
.up-leyenda { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 8px; }
.up-leyenda-item { display: flex; align-items: center; gap: 8px; font-size: 13px; color: #475569; }
.up-leyenda-item b { margin-left: auto; color: #0B2947; font-variant-numeric: tabular-nums; }
.up-punto { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; }
.up-hab--frecuente { background: #0F9375; }
.up-hab--ocasional { background: #6CC4A9; }
.up-hab--unavez    { background: #E4C04A; }
.up-hab--dejo      { background: #E07A5F; }
.up-hab--nunca     { background: #CBD5E1; }
.up-chart { display: block; width: 100%; height: 200px; max-width: 560px; margin: 0 auto; }
.up-chart text { fill: #6B7280; font-size: 11px; font-family: inherit; }
.up-chart .up-chart-val { fill: #0B2947; font-weight: 700; font-size: 12px; }
.up-chart-grid { stroke: #E5E7EB; }
.up-bar { fill: #0F9375; }
.up-bar--suave { fill: #9FD9C9; }
.up-dim { color: #9CA3AF; font-size: 12px; }
.up-mini { display: inline-block; height: 6px; border-radius: 3px; background: #0F9375; vertical-align: middle; margin-right: 8px; min-width: 2px; }
.up-tel { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.up-tel-num { font-variant-numeric: tabular-nums; user-select: all; }
.up-btn-copiar {
    border: 1px solid #E5E7EB; background: #fff; color: #475569; border-radius: 6px;
    width: 26px; height: 26px; display: inline-flex; align-items: center; justify-content: center; cursor: pointer;
}
.up-btn-copiar:hover { border-color: #0F9375; color: #0F9375; }
.up-btn-copiar:focus-visible { outline: 2px solid #0F9375; outline-offset: 2px; }
.up-aviso { color: #B45309; margin-right: 12px; }
@media (max-width: 480px) {
    .up-grid { grid-template-columns: 1fr; }
    .up-embudo-fila { grid-template-columns: 1fr 48px; }
    .up-track { grid-column: 1 / -1; grid-row: 2; }
    .up-kpi-val { font-size: 24px; }
}
body.qiwo-dark .up-kpi { background: #1A2535; border-color: rgba(255,255,255,0.06); }
body.qiwo-dark .up-kpi--lead { background: #0B2947; border-color: rgba(255,255,255,0.10); }
body.qiwo-dark .up-kpi-val { color: #E2E8F0; }
body.qiwo-dark .up-kpi-lbl, body.qiwo-dark .up-kpi-foot { color: #64748B; }
body.qiwo-dark .up-kpi--lead .up-kpi-lbl, body.qiwo-dark .up-kpi--lead .up-kpi-foot { color: #93A8BD; }
body.qiwo-dark .up-card-h { color: #E2E8F0; border-bottom-color: rgba(255,255,255,0.04); }
body.qiwo-dark .up-card-h span { color: #64748B; }
body.qiwo-dark .up-embudo-fila, body.qiwo-dark .up-leyenda-item { color: #94A3B8; }
body.qiwo-dark .up-embudo-fila strong, body.qiwo-dark .up-leyenda-item b { color: #E2E8F0; }
body.qiwo-dark .up-track, body.qiwo-dark .up-stack { background: rgba(255,255,255,0.06); }
body.qiwo-dark .up-hab--nunca { background: #475569; }
body.qiwo-dark .up-chart text { fill: #64748B; }
body.qiwo-dark .up-chart .up-chart-val { fill: #E2E8F0; }
body.qiwo-dark .up-chart-grid { stroke: rgba(255,255,255,0.08); }
body.qiwo-dark .up-bar--suave { fill: #1F5E50; }
body.qiwo-dark .up-dim { color: #64748B; }
body.qiwo-dark .up-btn-copiar { background: #0F1923; border-color: rgba(255,255,255,0.10); color: #94A3B8; }
body.qiwo-dark .up-aviso { color: #FCD34D; }

/* ══ Panel SkyMars · Salud por Institución (24/09/2026) ══════════════
   Estado por tinte de toda la superficie, nunca con franja lateral. */
.sal-barra { display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap; margin-bottom: 16px; }
.sal-resumen {
    display: flex; gap: 12px; align-items: center; border-radius: 14px;
    padding: 14px 18px; margin-bottom: 16px; border: 1px solid transparent; color: #0B2947;
}
.sal-resumen strong { font-size: 16px; }
.sal-resumen-detalle { font-size: 13px; opacity: .85; }
.sal-punto { width: 12px; height: 12px; border-radius: 50%; flex-shrink: 0; }
.sal-punto--ok { background: #0F9375; } .sal-punto--aviso { background: #D97706; }
.sal-punto--alerta { background: #DC2626; } .sal-punto--neutro { background: #94A3B8; }
.sal-tinte--ok     { background: #ECFDF5; border-color: #A7F3D0; }
.sal-tinte--aviso  { background: #FFFBEB; border-color: #FDE68A; }
.sal-tinte--alerta { background: #FEF2F2; border-color: #FECACA; }
.sal-tinte--neutro { background: #F8FAFC; border-color: #E2E8F0; }
.sal-sedes { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; margin-bottom: 16px; }
.sal-sede { border-radius: 14px; border: 1px solid; padding: 16px; display: flex; flex-direction: column; gap: 6px; color: #0B2947; }
.sal-sede-cab { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.sal-sede-num { font-size: 30px; font-weight: 700; line-height: 1.1; font-variant-numeric: tabular-nums; }
.sal-sede-num small { font-size: 13px; font-weight: 600; opacity: .7; }
.sal-sede-comp { font-size: 13px; color: #475569; }
.sal-sede-datos { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin: 6px 0 0; }
.sal-sede-datos div, .sal-avisos div { display: flex; flex-direction: column; }
.sal-sede-datos dt, .sal-avisos dt { font-size: 11px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: #6B7280; }
.sal-sede-datos dd, .sal-avisos dd { margin: 0; font-size: 18px; font-weight: 700; font-variant-numeric: tabular-nums; }
.sal-sede-pie { font-size: 12px; color: #6B7280; margin-top: 4px; }
.sal-pill { display: inline-block; border-radius: 999px; padding: 2px 10px; font-size: 12px; font-weight: 600; white-space: nowrap; }
.sal-pill--ok     { background: #D1FAE5; color: #065F46; }
.sal-pill--aviso  { background: #FEF3C7; color: #92400E; }
.sal-pill--alerta { background: #FEE2E2; color: #991B1B; }
.sal-pill--neutro { background: #E2E8F0; color: #475569; }
.sal-avisos { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 12px; margin: 0; }
.sal-avisos dd { font-size: 24px; color: #0B2947; }
.sal-avisos dd.sal-malo { color: #B91C1C; }
.sal-bar-apagada { fill: #CBD5E1; }
@media (max-width: 480px) { .sal-sede-datos { grid-template-columns: repeat(2, 1fr); } }
body.qiwo-dark .sal-resumen, body.qiwo-dark .sal-sede { color: #E2E8F0; }
body.qiwo-dark .sal-tinte--ok     { background: rgba(16,185,129,.10); border-color: rgba(16,185,129,.30); }
body.qiwo-dark .sal-tinte--aviso  { background: rgba(217,119,6,.12);  border-color: rgba(217,119,6,.35); }
body.qiwo-dark .sal-tinte--alerta { background: rgba(220,38,38,.12);  border-color: rgba(220,38,38,.35); }
body.qiwo-dark .sal-tinte--neutro { background: #1A2535; border-color: rgba(255,255,255,0.06); }
body.qiwo-dark .sal-sede-comp { color: #94A3B8; }
body.qiwo-dark .sal-sede-pie, body.qiwo-dark .sal-sede-datos dt, body.qiwo-dark .sal-avisos dt { color: #64748B; }
body.qiwo-dark .sal-avisos dd { color: #E2E8F0; }
body.qiwo-dark .sal-avisos dd.sal-malo { color: #FCA5A5; }
body.qiwo-dark .sal-pill--ok     { background: rgba(16,185,129,.18); color: #6EE7B7; }
body.qiwo-dark .sal-pill--aviso  { background: rgba(217,119,6,.22);  color: #FCD34D; }
body.qiwo-dark .sal-pill--alerta { background: rgba(220,38,38,.24);  color: #FCA5A5; }
body.qiwo-dark .sal-pill--neutro { background: rgba(100,116,139,.22); color: #CBD5E1; }
body.qiwo-dark .sal-bar-apagada { fill: #334155; }

/* ══ Panel SkyMars · Entrega de avisos (24/09/2026) ══ */
.av-bar-ko { fill: #E07A5F; }
.av-malo { color: #B91C1C; font-weight: 700; }
body.qiwo-dark .av-malo { color: #FCA5A5; }

/* ── Parque de tarjetas (Panel SkyMars, 25/09/2026) ─────────────────────────
   Botón (i) con su explicación, y el historial vertical de tarjeta / alumno. */
.pt-info-btn {
    display: inline-flex; align-items: center; justify-content: center;
    width: 22px; height: 22px; margin-left: 4px; padding: 0; vertical-align: middle;
    border: 0; border-radius: 50%; background: transparent; color: #64748B; cursor: pointer;
}
.pt-info-btn:hover, .pt-info-btn[aria-expanded="true"] { background: #E2E8F0; color: #0B2947; }
.pt-info-btn:focus-visible { outline: 2px solid #0F9375; outline-offset: 2px; }
.pt-info {
    margin: 0 16px 12px; padding: 12px 14px; border-radius: 10px;
    background: #F0F9F6; border: 1px solid #CDEBE1; font-size: 13px; color: #334155;
    display: grid; grid-template-columns: minmax(120px, 190px) 1fr; gap: 6px 14px;
}
.pt-info dt { font-weight: 700; color: #0B2947; }
.pt-info dd { margin: 0; }
@media (max-width: 640px) { .pt-info { grid-template-columns: 1fr; } .pt-info dd { margin-bottom: 6px; } }

.pt-tl { list-style: none; margin: 0; padding: 14px 16px 6px 16px; position: relative; }
.pt-tl-item { position: relative; padding: 0 0 16px 28px; }
.pt-tl-item::before {
    content: ""; position: absolute; left: 7px; top: 16px; bottom: 0; width: 2px; background: #E2E8F0;
}
.pt-tl-item:last-child::before { display: none; }
.pt-tl-punto {
    position: absolute; left: 0; top: 3px; width: 16px; height: 16px; border-radius: 50%;
    background: #CBD5E1; border: 3px solid #fff; box-shadow: 0 0 0 1px #CBD5E1;
}
.pt-tl--ok     .pt-tl-punto { background: #0F9375; box-shadow: 0 0 0 1px #0F9375; }
.pt-tl--neutro .pt-tl-punto { background: #94A3B8; box-shadow: 0 0 0 1px #94A3B8; }
.pt-tl--alerta .pt-tl-punto { background: #DC2626; box-shadow: 0 0 0 1px #DC2626; }
.pt-tl-cabeza { display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: baseline; }
.pt-tl-cabeza strong { color: #0B2947; font-size: 14px; }
.pt-tl-hora { font-size: 12px; color: #64748B; font-variant-numeric: tabular-nums; }
.pt-tl-quien { font-size: 13px; color: #334155; margin-top: 2px; }

body.qiwo-dark .pt-info-btn { color: #94A3B8; }
body.qiwo-dark .pt-info-btn:hover, body.qiwo-dark .pt-info-btn[aria-expanded="true"] { background: #1E293B; color: #E2E8F0; }
body.qiwo-dark .pt-info { background: rgba(15,147,117,.10); border-color: rgba(15,147,117,.35); color: #CBD5E1; }
body.qiwo-dark .pt-info dt, body.qiwo-dark .pt-tl-cabeza strong { color: #E2E8F0; }
body.qiwo-dark .pt-tl-item::before { background: #334155; }
body.qiwo-dark .pt-tl-punto { border-color: #0F172A; }
body.qiwo-dark .pt-tl-quien { color: #CBD5E1; }
body.qiwo-dark .pt-tl-hora { color: #94A3B8; }

/* ── Tutores de aula y personal (08/10/2026) ── */
.pers-toolbar { display:flex; flex-wrap:wrap; gap:12px; margin:16px 0; align-items:center; }
.pers-toolbar .qiwo-search-box { flex:1; min-width:180px; }
.pers-actions,.tut-chips { display:flex; flex-wrap:wrap; align-items:center; gap:8px; }
.pers-modal { width:calc(100% - 24px); max-width:620px; max-height:90vh; max-height:90dvh; display:flex; flex-direction:column; }
.pers-modal .qiwo-modal-body { overflow-y:auto; }
.pers-form { display:grid; gap:16px; }
.pers-form label { display:grid; gap:6px; font-weight:600; }
.pers-form input,.pers-form select,.pers-form textarea { width:100%; box-sizing:border-box; padding:10px 12px; border:1px solid #D1D5DB; border-radius:8px; font:inherit; background:#FFFFFF; color:#0B2947; }
.pers-form input[type=checkbox] { width:auto; }
.pers-help { font-size:13px; margin:0; font-weight:400; }
.tut-aviso { padding:14px 16px; border-radius:12px; background:#ECEDE7; color:#0B2947; margin:16px 0; }
.tut-sin-tutor { background:#ECEDE7; color:#0B2947; }
.tut-chip { display:inline-flex; align-items:center; gap:5px; padding:4px 8px; border-radius:12px; max-width:100%; }
.tut-chip .qiwo-row-actions-trigger { width:auto; max-width:280px; white-space:normal; text-align:left; background:transparent; border:0; color:inherit; }
body.qiwo-dark .tut-chip .qiwo-row-actions-trigger { background:transparent; color:inherit; }
.tut-cotutor { background:#E0F2F1; color:#0B2947; }
.tut-historial { padding-left:24px; margin:0; }
.tut-historial li { padding:12px 0; }
@media(max-width:600px) { .pers-modal .qiwo-modal-header { gap:8px; align-items:flex-start; } .pers-modal h2 { font-size:18px; } .pers-toolbar .qiwo-filter-chips { flex-wrap:wrap; } }
/* ── Asistencia del personal (08/10/2026) ── */
.pers-resumen { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; margin:16px 0; }
.pers-resumen-card { display:grid; gap:4px; padding:16px; border-radius:12px; background:#E0F2F1; color:#0B2947; text-decoration:none; }
.pers-resumen-card strong { font-size:26px; }
.pers-manual { display:inline-flex; align-items:center; gap:4px; font-size:12px; }
.pers-reporte { margin-top:24px; }
.pers-reporte label { display:grid; gap:6px; }
.pers-marca { padding:14px; border:1px solid #D1D5DB; border-radius:10px; overflow-wrap:anywhere; }
.pers-marca p { margin:6px 0; }
.pers-marca-atenuada { background:#ECEDE7; color:#0B2947; }
/* Foto de la marca con rostro (23/10/2026): la que tomó la Lectora al reconocer. */
.pers-marca-foto { display:block; width:100%; max-width:320px; aspect-ratio:4/3; object-fit:cover; margin:8px 0 4px; border-radius:10px; border:1px solid #D1D5DB; background:#ECEDE7; }
/* "Revisar foto" (23/10/2026): discreto, debajo de la hora, con el ámbar de aviso que ya usa Qiwo. */
.pers-revisar { display:flex; align-items:center; gap:3px; margin-top:2px; padding:0; border:0; background:none; color:#B45309; font-size:.72rem; font-weight:600; cursor:pointer; text-align:left; }
.pers-revisar:hover, .pers-revisar:focus-visible { text-decoration:underline; }
body.qiwo-dark .pers-revisar { color:#FCD34D; }
.pers-marca-alerta { display:flex; align-items:center; gap:6px; padding:6px 10px; border-radius:8px; background:#0B2947; color:#ECEDE7; font-weight:600; }
@media(min-width:800px) { .pers-resumen { grid-template-columns:repeat(4,minmax(0,1fr)); } }
/* ── Horario del personal (08/10/2026) ── */
.pers-dia { display:inline-flex; align-items:center; justify-content:center; width:26px; height:26px; border-radius:50%; background:#ECEDE7; color:#0B2947; }
.pers-dia-activo { background:#0F9375; color:#ECEDE7; font-weight:700; }
.pers-form .pers-checkbox { display:flex; align-items:center; gap:10px; }
/* ── Sticker en profesores (08/10/2026) ── */
.pers-prof-chips { display:flex; flex-wrap:wrap; gap:6px; margin-top:6px; max-width:300px; overflow-wrap:anywhere; }
@media(max-width:600px) { .pers-prof-chips { max-width:200px; } }
/* ── Profesor: mi asistencia y mi aula (08/10/2026) ── */
.prof-mes { display:flex; align-items:center; justify-content:space-between; gap:8px; margin:16px 0; }
.prof-mes strong { text-align:center; text-transform:capitalize; }
.prof-lista { display:grid; gap:12px; margin:16px 0; }
.prof-dia,.prof-alumno { border:1px solid #D1D5DB; background:#ECEDE7; border-radius:14px; padding:16px; color:#0B2947; text-decoration:none; overflow-wrap:anywhere; }
.prof-dia .qiwo-person-sub,.prof-alumno .qiwo-person-sub,.tut-sin-tutor .qiwo-person-sub { color:#0B2947; }
.prof-dia-marcas { display:grid; grid-template-columns:1fr 1fr; gap:12px; margin:12px 0; }
.prof-dia-marcas>div { display:grid; gap:4px; }
.prof-dia-marcas strong { font-size:24px; }
.prof-dia-marcas span { font-size:13px; }
.prof-aulas { display:flex; flex-wrap:wrap; margin:16px 0; gap:8px; }
.prof-contadores { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); background:#E0F2F1; color:#0B2947; border-radius:14px; padding:16px 8px; }
.prof-contadores>div { display:grid; gap:4px; text-align:center; }
.prof-contadores strong { font-size:32px; }
.prof-alumno { display:flex; flex-wrap:wrap; gap:12px; align-items:center; justify-content:space-between; }
.prof-alumno>div { flex:1; min-width:180px; }
.prof-alumno button { min-height:44px; }
.prof-aula-enlace { display:block; margin-top:12px; color:inherit; text-decoration:none; }
@media(min-width:800px) { .prof-tablero-personal { grid-template-columns:1fr 1fr; } }
@media(max-width:400px) { .prof-alumno button { width:100%; } .prof-mes button { padding:8px; } }
/* Admin híbrido: columna de navegación y grupos, ADR 0035. */
.admin-sidebar.admin-sidebar-hybrid {
    width: 264px;
    background: #0B2947;
    color: #ECEDE7;
}
.admin-sidebar-hybrid .admin-nav { padding: 12px; gap: 4px; }
.admin-sidebar-hybrid .admin-nav-item { color: #D1D5DB; min-height: 42px; white-space: normal; }
.admin-sidebar-hybrid .admin-nav-item:hover,
.admin-sidebar-hybrid .admin-nav-item.active { background: rgba(224,242,241,.09); color: #E0F2F1; }
.admin-sidebar-hybrid .admin-nav-item.active svg { color: #E0F2F1; }
.admin-sidebar-hybrid .admin-nav-divider { margin: 8px 0; border-top: 1px solid rgba(209,213,219,.2); }
.admin-sidebar-hybrid .admin-nav-group-toggle {
    display: flex; align-items: center; gap: 10px; width: 100%; min-height: 44px;
    padding: 10px; border: 0; border-radius: 8px; background: transparent;
    color: #ECEDE7; font: inherit; font-size: 13px; text-align: left; cursor: pointer;
}
.admin-sidebar-hybrid .admin-nav-group-toggle > svg { flex-shrink: 0; }
.admin-sidebar-hybrid .admin-nav-group-chevron { margin-left: auto; transition: transform .15s; }
.admin-sidebar-hybrid .admin-nav-group-toggle[aria-expanded="true"] { background: rgba(224,242,241,.06); }
.admin-sidebar-hybrid .admin-nav-group-toggle[aria-expanded="true"] .admin-nav-group-chevron { transform: rotate(180deg); }
.admin-sidebar-hybrid .admin-nav-group-links { padding: 4px 0 8px 12px; display: flex; flex-direction: column; gap: 2px; }
.admin-sidebar-hybrid .admin-nav-group-links .admin-nav-item { font-size: 12px; }
.admin-sidebar-hybrid .nav-badge-role { background: #E0F2F1; color: #0B2947; border: 0; }
.admin-sidebar-hybrid .admin-rol-badge { color: #E0F2F1; }
.admin-sidebar-hybrid button:focus-visible,
.admin-sidebar-hybrid a:focus-visible { outline: 2px solid #E0F2F1; outline-offset: -2px; }
@media (max-width: 767px) {
    .admin-sidebar.admin-sidebar-hybrid {
        position: absolute; left: 0; top: 0; bottom: 0; z-index: 1000;
        width: 280px !important; max-width: calc(100% - 40px);
        transform: translateX(-100%); visibility: hidden; transition: transform .2s, visibility .2s;
    }
    .admin-shell.mobile-open .admin-sidebar.admin-sidebar-hybrid { transform: translateX(0); visibility: visible; }
    .admin-sidebar.admin-sidebar-hybrid .admin-sidebar-footer { flex-direction: row; align-items: center; gap: 10px; padding: 12px; }
    .admin-sidebar.admin-sidebar-hybrid .admin-brand-text,
    .admin-sidebar.admin-sidebar-hybrid .admin-rol-badge-wrap,
    .admin-sidebar.admin-sidebar-hybrid .admin-nav-text,
    .admin-sidebar.admin-sidebar-hybrid .admin-user-info { display: block; }
    .admin-sidebar.admin-sidebar-hybrid .nav-badge-role { display: inline-flex; width: auto; height: auto; padding: 1px 6px; font-size: 9px; border-radius: 10px; }
    .admin-sidebar.admin-sidebar-hybrid .admin-sidebar-header { justify-content: space-between; padding: 16px; }
    .admin-sidebar.admin-sidebar-hybrid .admin-nav-item { justify-content: flex-start; padding: 9px 10px; }
    .admin-sidebar.admin-sidebar-hybrid .admin-mobile-close-btn,
    .admin-shell:has(.admin-sidebar-hybrid) .admin-hamburger { display: flex !important; }
}
/* Listas administrativas: las fichas se presentan en diálogos. */
.admin-workspace { display: grid; grid-template-columns: minmax(0, 1fr); gap: 20px; align-items: start; }

.admin-workspace-list { min-width: 0; }
body .admin-hybrid-page { color: #0B2947; }
body .admin-hybrid-page .qiwo-table-card { background: #ECEDE7; border-color: #D1D5DB; box-shadow: none; }
body .admin-hybrid-page .qiwo-table thead th { background: #E0F2F1; color: #0B2947; }
body .admin-hybrid-page .qiwo-table tbody td { color: #0B2947; border-color: #D1D5DB; }
body .admin-hybrid-page .qiwo-table tr.admin-row-selected td { background: #E0F2F1; }
.admin-record-link { display: inline; padding: 2px 0; border: 0; background: transparent; color: #0B2947; text-align: left; font: inherit; font-weight: 600; cursor: pointer; overflow-wrap: anywhere; }
.admin-record-link:hover { text-decoration: underline; text-underline-offset: 3px; }
.admin-record-link:disabled { cursor: wait; }

.admin-record-link:focus-visible{ outline: 2px solid #0F9375; outline-offset: 3px; }

.admin-detail-facts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin: 0 0 20px; }
.admin-detail-facts > div { display: flex; flex-direction: column; gap: 4px; padding: 12px; border: 1px solid #D1D5DB; border-radius: 10px; background: #ECEDE7; }
.admin-detail-facts span { font-size: 11px; }
.admin-detail-facts strong { font-size: 14px; }


.admin-detail-empty { padding: 18px 0; color: #0B2947; font-size: 13px; }

body .admin-hybrid-page .qiwo-avatar { background: #0B2947; color: #ECEDE7; }
body .admin-hybrid-page .qiwo-chip, body .admin-hybrid-page .admin-badge, body .admin-hybrid-page .metodo-badge, body .admin-hybrid-page .nivel-chip { background: #ECEDE7; color: #0B2947; border-color: #D1D5DB; }
body .admin-hybrid-page .qiwo-chip-active, body .admin-hybrid-page .estado-activa { background: #E0F2F1; color: #0B2947; border-color: #0F9375; }
body .admin-hybrid-page .qiwo-chip-warning { background: #D1D5DB; color: #0B2947; }
body .admin-hybrid-page .qiwo-text-muted, body .admin-hybrid-page .qiwo-person-sub { color: #0B2947; opacity: .7; }
body .admin-hybrid-page .qiwo-btn-primary { background: #0F9375; color: #ECEDE7; }
body .admin-hybrid-page .qiwo-btn-secondary { background: #ECEDE7; color: #0B2947; border-color: #D1D5DB; }
body .admin-hybrid-page .qiwo-btn-danger { background: #0B2947; color: #ECEDE7; }
body .admin-hybrid-page .admin-alert-error { background: #D1D5DB; color: #0B2947; border: 1px solid #0B2947; }
body .admin-hybrid-page .admin-alert-success { background: #E0F2F1; color: #0B2947; border: 1px solid #0F9375; }

@media (max-width: 767px) {

    body .admin-hybrid-page .qiwo-table-scroll { overflow: visible; }
    body .admin-hybrid-page .qiwo-table { min-width: 0; display: block; }
    body .admin-hybrid-page .qiwo-table thead { display: none; }
    body .admin-hybrid-page .qiwo-table tbody { display: block; }
    body .admin-hybrid-page .qiwo-table tbody tr { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); padding: 12px; border-bottom: 1px solid #D1D5DB; }
    body .admin-hybrid-page .qiwo-table tbody td { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; padding: 6px; border: 0; min-width: 0; white-space: normal; overflow-wrap: anywhere; }
    body .admin-hybrid-page .qiwo-table tbody td:first-child { grid-column: 1 / -1; }
    body .admin-hybrid-page .qiwo-table tbody td[data-label]:not(:first-child)::before { content: attr(data-label); display: block; width: 100%; font-size: 10px; font-weight: 600; }
    body .admin-hybrid-page .qiwo-row-actions-cell { justify-content: flex-end; }
    body .admin-hybrid-page .qiwo-person-cell { min-width: 0; }
}
body .admin-hybrid-page .qiwo-modal-overlay { z-index: 1100; }

body .admin-hybrid-page .pers-resumen-card, body .admin-hybrid-page .qiwo-search-box, body .admin-hybrid-page .cred-search-box { background: #ECEDE7; border-color: #D1D5DB; color: #0B2947; }
body .admin-hybrid-page .cred-chip { background: #ECEDE7; border-color: #D1D5DB; color: #0B2947; }
body .admin-hybrid-page .cred-chip-active { background: #E0F2F1; border-color: #0F9375; color: #0B2947; }
body .admin-hybrid-page .qiwo-nivel-chip { background: #E0F2F1; color: #0B2947; }
body .admin-hybrid-page .qiwo-row-actions-menu-item, body .admin-hybrid-page .qiwo-row-actions-menu-item--danger svg { color: #0B2947; }
body .admin-hybrid-page .qiwo-row-actions-menu-item--danger:hover { background: #D1D5DB; color: #0B2947; }
body .admin-hybrid-page .credencial-valor { white-space: nowrap; overflow-wrap: normal; word-break: normal; }

/* Colores y legibilidad del rework ante las reglas del tema existente. */
body .admin-hybrid-page .qiwo-row-actions-trigger,
body .admin-hybrid-page .qiwo-row-actions-menu { background: #ECEDE7; border-color: #D1D5DB; color: #0B2947; }
body .admin-hybrid-page .qiwo-search-box input,
body .admin-hybrid-page .cred-search-box input { color: #0B2947; }
body .admin-hybrid-page .qiwo-search-box input::placeholder,
body .admin-hybrid-page .cred-search-box input::placeholder { color: #0B2947; opacity: .7; }
body .admin-hybrid-page .qiwo-table-footer,
body .admin-hybrid-page .qiwo-table-loading,
body .admin-hybrid-page .qiwo-table-empty { background: #ECEDE7; color: #0B2947; border-color: #D1D5DB; }
body.qiwo-dark .admin-content:has(.admin-hybrid-page) { background: #0F1923; }
body.qiwo-dark .admin-hybrid-page .admin-page-title { color: #E0F2F1; }
body.qiwo-dark .admin-hybrid-page .admin-page-sub { color: #D1D5DB; }
body.qiwo-dark .admin-hybrid-page .admin-badge,
body.qiwo-dark .admin-hybrid-page .qiwo-chip { background: #ECEDE7; color: #0B2947; border-color: #D1D5DB; }
body.qiwo-dark .admin-hybrid-page .qiwo-chip-active { background: #E0F2F1; border-color: #0F9375; }

body .admin-hybrid-page .qiwo-person-name { color: #0B2947; }
body .admin-hybrid-page a { color: #0F9375; }
/* Las conversiones legacy de estilos inline en modo oscuro no se aplican a la lista nueva. */
body .admin-hybrid-page .admin-workspace-list [style*="color:#0B2947"],
body .admin-hybrid-page .qiwo-filter-chips .qiwo-chip { color: var(--admin-ink) !important; }
body .admin-hybrid-page .admin-workspace-list button[style*="background:transparent"][style*="color:#0B2947"],
body .admin-hybrid-page .admin-workspace-list button[style*="background:transparent"][style*="color:#0F9375"] { background: #ECEDE7 !important; color: #0B2947 !important; }
body .admin-hybrid-page .qiwo-table tbody tr:hover td { background: inherit; }

/* Admin: superficies de lectura y escritura. El tinte se reserva a la selección. */
body .admin-content .admin-stat-icon.warm,
body .admin-content .admin-stat-icon.tardanza { background: #0B2947; }
body .admin-content .admin-hub-card { background: var(--admin-surface); color: var(--admin-ink); border: 1px solid #D1D5DB; min-width: 0; }
body .admin-content .admin-hub-card-icon { background: #0B2947; color: #E0F2F1; }
body .admin-content .admin-hub-card:nth-child(even) .admin-hub-card-icon { background: #E0F2F1; color: #0B2947; }
body .admin-content .admin-hub-card-title { color: var(--admin-ink); }
body .admin-content .admin-hub-card-desc { color: var(--admin-muted); }
body .admin-content .admin-stat-card { background: var(--admin-surface); border-color: #D1D5DB; }
body .admin-content .admin-stat-label, body .admin-content .admin-stat-value { color: var(--admin-ink); }
.admin-shell { --admin-surface: #fff; --admin-ink: #0B2947; --admin-muted: #0B2947; --admin-selected: #E0F2F1; }
body .admin-shell .admin-main { background: #ECEDE7; }
body .admin-shell .admin-topbar { background: #FFFFFF; color: #0B2947; border-color: #D1D5DB; }
body.qiwo-dark .admin-shell .admin-main,
body.qiwo-dark .admin-shell .admin-topbar { background: #1A2535; color: #E0F2F1; }
body.qiwo-dark .admin-shell { --admin-surface: #1A2535; --admin-ink: #E0F2F1; --admin-muted: #D1D5DB; --admin-selected: rgba(15,147,117,.24); }
body .admin-content .qiwo-table-card,
body .admin-content .qiwo-table tbody td,
body .admin-content .qiwo-table-footer,
body .admin-content .qiwo-table-loading,
body .admin-content .qiwo-table-empty,
body .admin-content .qiwo-search-box,
body .admin-content .cred-search-box,
body .admin-content .qiwo-row-actions-menu,
body .admin-content .qiwo-row-actions-trigger { background: var(--admin-surface); color: var(--admin-ink); border-color: #D1D5DB; }
body .admin-content .qiwo-table tbody tr:hover td { background: var(--admin-surface); }
body .admin-content .qiwo-table tbody tr.admin-row-selected td { background: var(--admin-selected); }
body .admin-content .qiwo-table thead th { background: #E0F2F1; color: #0B2947; }
body .admin-content input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]),
body .admin-content textarea, body .admin-content select { background: var(--admin-surface); color: var(--admin-ink); border-color: #D1D5DB; }
body .admin-content input::placeholder, body .admin-content textarea::placeholder { color: var(--admin-muted); opacity: .75; }
body .admin-content .qiwo-search-box svg, body .admin-content .cred-search-box svg,
body .admin-content .qiwo-person-name, body .admin-content .admin-record-link,
body .admin-content .qiwo-text-muted { color: var(--admin-ink); }
body .admin-content .admin-record-link, body .admin-content .qiwo-person-name { overflow-wrap: normal; word-break: normal; white-space: normal; }
body .admin-content .qiwo-person-cell > div:last-child { min-width: 0; }
body .admin-content td[data-label=Alumno] { min-width: 240px; }
body .admin-content td[data-label=Sección] { min-width: 100px; overflow-wrap: normal; word-break: normal; }
body .admin-content .credencial-valor { display: inline-block; font-family: ui-monospace, Consolas, monospace; font-size: 12px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; word-break: normal; overflow-wrap: normal; vertical-align: middle; }
body .admin-content td[data-label=NFC], body .admin-content td[data-label=QR] { min-width: 116px; }
body .admin-content td[data-label=NFC] > div, body .admin-content td[data-label=QR] > div { min-width: 0; max-width: 220px; }
@media (max-width: 767px) {
    body .admin-alumnos-page .qiwo-table-scroll { overflow: visible; }
    body .admin-alumnos-page .qiwo-table { min-width: 0; display: block; }
    body .admin-alumnos-page .qiwo-table thead { display: none; }
    body .admin-alumnos-page .qiwo-table tbody { display: block; }
    body .admin-alumnos-page .qiwo-table tbody tr { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); padding: 12px; border-bottom: 1px solid #D1D5DB; background: var(--admin-surface); }
    body .admin-alumnos-page .qiwo-table tbody td { display: flex; flex-wrap: wrap; gap: 4px 8px; padding: 6px; border: 0; min-width: 0; white-space: normal; overflow-wrap: normal; }
    body .admin-alumnos-page .qiwo-table tbody td:first-child { grid-column: 1 / -1; }
    body .admin-alumnos-page .qiwo-table tbody td[data-label]:not(:first-child)::before { content: attr(data-label); width: 100%; font-size: 11px; font-weight: 600; }
}
@media (max-width: 767px) {
    body .admin-content .qiwo-table td[data-label] { min-width: 0; overflow-wrap: normal; word-break: normal; }
}


/* El menú de escritorio y el cajón móvil no heredan el antiguo rail de tablet. */
.admin-sidebar-hybrid .admin-collapse-btn, .admin-flyout-close { display: flex; align-items: center; justify-content: center; flex-shrink: 0; width: 32px; height: 32px; border: 1px solid rgba(209,213,219,.3); border-radius: 8px; background: transparent; color: #E0F2F1; cursor: pointer; }
.admin-sidebar-hybrid .admin-sidebar-header { gap: 8px; justify-content: space-between; }
.admin-sidebar-hybrid .admin-sidebar-brand-wrap { min-width: 0; }
.admin-sidebar-hybrid .admin-nav-group-toggle .admin-nav-text { flex: 1; }
.admin-sidebar-hybrid .nav-badge-role { background: #E0F2F1; color: #0B2947; border-color: #D1D5DB; }
.admin-flyout-heading { display: none; }
.admin-flyout-hub { display: none; }
.admin-nav-group-heading { display: flex; align-items: center; gap: 2px; }
.admin-sidebar-hybrid .admin-nav-group-link { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; padding: 10px; min-height: 44px; color: #ECEDE7; font-size: 13px; text-decoration: none; border-radius: 8px; }
.admin-sidebar-hybrid .admin-nav-group-link svg { flex-shrink: 0; }
.admin-sidebar-hybrid .admin-nav-group-link:hover,
.admin-sidebar-hybrid .admin-nav-group-link.active { background: rgba(224,242,241,.12); }
.admin-sidebar-hybrid .admin-nav-group-heading .admin-nav-group-toggle { width: 32px; flex-shrink: 0; padding: 8px; justify-content: center; }
.admin-sidebar-hybrid .admin-nav-group-heading .admin-nav-group-chevron { margin: 0; }
.admin-module-hub { grid-template-columns: repeat(auto-fit,minmax(min(100%,260px),1fr)); }
body .admin-content a.admin-module-card { text-decoration: none; color: var(--admin-ink); transition: box-shadow .15s; }
body .admin-content a.admin-module-card:hover { box-shadow: 0 4px 16px rgba(11,41,71,.14); border-color: #0F9375; }
.admin-module-card:focus-visible { outline: 3px solid #0F9375; outline-offset: 3px; }
.admin-module-card-action { display: flex; align-items: center; gap: 8px; margin-top: auto; padding-top: 12px; font-weight: 600; font-size: 13px; }
@media (min-width: 768px) {
    .admin-sidebar-hybrid.is-collapsed .admin-nav-group-link { justify-content: center; padding: 10px 3px; }
    .admin-sidebar-hybrid.is-collapsed .admin-nav-group-link .admin-nav-text { display: none !important; }
    .admin-sidebar-hybrid.is-collapsed .admin-nav-group-heading .admin-nav-group-toggle { width: 20px; padding: 2px !important; }
    .admin-sidebar-hybrid.is-collapsed .admin-nav-group-heading .admin-nav-group-chevron { display: block !important; }
    .admin-sidebar-hybrid.is-collapsed .admin-flyout-hub { display: flex; }
}
.admin-sidebar-hybrid .admin-logout-btn:hover { background: rgba(224,242,241,.15); color: #E0F2F1; }
@media (min-width: 768px) {
    .admin-shell .admin-sidebar-backdrop { display: none; }
    .admin-sidebar-hybrid .admin-mobile-close-btn { display: none !important; }
    .admin-sidebar.admin-sidebar-hybrid.is-collapsed { width: 68px; }
    .admin-sidebar-hybrid.is-collapsed .admin-brand-text,
    .admin-sidebar-hybrid.is-collapsed .admin-rol-badge-wrap,
    .admin-sidebar-hybrid.is-collapsed .admin-user-info,
    .admin-sidebar-hybrid.is-collapsed .admin-nav > .admin-nav-item > .admin-nav-text,
    .admin-sidebar-hybrid.is-collapsed .admin-nav-group-toggle > .admin-nav-text,
    .admin-sidebar-hybrid.is-collapsed .admin-nav-group-chevron,
    .admin-sidebar-hybrid.is-collapsed .admin-context-switch .admin-nav-text,
    .admin-sidebar-hybrid.is-collapsed .admin-nav > .admin-nav-item > .nav-badge-role,
    .admin-sidebar-hybrid.is-collapsed .admin-nav-group-heading > .admin-nav-group-link > .nav-badge-role { display: none !important; }
    /* El chip del encabezado pasa a punto, como las solicitudes; el flyout conserva sus chips. */
    .admin-sidebar-hybrid.is-collapsed .admin-nav-group-heading > .admin-nav-group-link > .nav-badge-role.nav-badge-prueba {
        display: block !important; position: absolute !important; top: 5px; right: 8px;
        width: 10px; height: 10px; min-width: 0 !important; padding: 0 !important;
        border-radius: 50%; font-size: 0 !important; overflow: hidden;
        background: #E0F2F1; box-shadow: 0 0 0 2px #0B2947;
    }
    .admin-sidebar-hybrid.is-collapsed .admin-sidebar-header { justify-content: center; padding: 12px 8px; }
    .admin-sidebar-hybrid.is-collapsed .admin-collapse-btn svg { transform: rotate(180deg); }
    .admin-sidebar-hybrid.is-collapsed .admin-nav { padding: 8px; }
    .admin-sidebar-hybrid.is-collapsed .admin-nav > .admin-nav-item,
    .admin-sidebar-hybrid.is-collapsed .admin-nav-group-toggle,
    .admin-sidebar-hybrid.is-collapsed .admin-context-switch { justify-content: center; padding: 12px 8px !important; }
    .admin-sidebar-hybrid.is-collapsed .admin-sidebar-footer { flex-direction: column; padding: 10px 8px; }
    .admin-sidebar-hybrid.is-collapsed .admin-nav-group-links { display: none; }
    .admin-sidebar-hybrid.is-collapsed .admin-nav-group-links.is-manual { display: flex; position: fixed; z-index: 1050; left: 76px; top: var(--nav-flyout-top, 100px); width: 264px; max-height: calc(100vh - 24px); max-height: calc(100dvh - 24px); overflow-y: auto; padding: 10px; background: #0B2947; border: 1px solid #D1D5DB; border-radius: 12px; box-shadow: 0 8px 24px rgba(11,41,71,.24); }
    .admin-sidebar-hybrid.is-collapsed .admin-flyout-heading { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 4px 6px 10px; color: #E0F2F1; font-size: 13px; }
    .admin-sidebar-hybrid.is-collapsed .admin-nav-group-links .admin-nav-text { display: block !important; }
}
@media (max-width: 767px) {
    .admin-sidebar-hybrid .admin-collapse-btn { display: none; }
    .admin-shell.mobile-open .admin-sidebar.admin-sidebar-hybrid { transition: transform .2s; }
    .admin-sidebar.admin-sidebar-hybrid .admin-brand-text,
    .admin-sidebar.admin-sidebar-hybrid .admin-nav-text,
    .admin-sidebar.admin-sidebar-hybrid .admin-user-info,
    .admin-sidebar.admin-sidebar-hybrid .admin-rol-badge-wrap { display: flex !important; }
    .admin-sidebar.admin-sidebar-hybrid .admin-brand-text { flex-direction: column; }
    .admin-shell .admin-sidebar-backdrop { backdrop-filter: none; }
    .admin-sidebar-hybrid .admin-sidebar-footer { flex-direction: row; }
    .admin-sidebar-hybrid .admin-nav { justify-items: stretch; }
    .admin-sidebar-hybrid .admin-nav-item { justify-content: flex-start !important; }
}

/* Paleta Admin: ajustes de color acotados al shell; no alteran otros portales. */
.admin-shell .cta-sticky .qiwo-btn-primary:disabled { background: #E0F2F1; }
.admin-shell { background: #FFFFFF; }
.admin-shell .admin-topbar-logo-inst { border: 1px solid #D1D5DB; }
.admin-shell .admin-logout-btn:hover { color: #0B2947; }
.admin-shell .admin-topbar { border-bottom: 1px solid #D1D5DB; }
.admin-shell .admin-hamburger { color: #0B2947; }
.admin-shell .admin-page-sub { color: #0B2947; }
.admin-shell .admin-stat-card { border: 1px solid #D1D5DB; }
.admin-shell .admin-stat-icon.warm { background: #0B2947; }
.admin-shell .admin-stat-icon.tardanza { background: #0B2947; }
.admin-shell .admin-stat-icon.gray { background: #0B2947; }
.admin-shell .admin-stat-label { color: #0B2947; }
.admin-shell .admin-hub-card { border: 1px solid #D1D5DB; }
.admin-shell .admin-hub-card-desc { color: #0B2947; }
.admin-shell .admin-section-label { color: #0B2947; border-bottom: 2px solid #D1D5DB; }
.admin-shell .admin-activity-wrapper { border: 1px solid #D1D5DB; }
.admin-shell .admin-activity-wrapper thead th { background: #FFFFFF; color: #0B2947; border-bottom: 1px solid #D1D5DB; }
.admin-shell .admin-activity-wrapper tbody td { border-bottom: 1px solid #D1D5DB; }
.admin-shell .admin-activity-empty { color: #0B2947; }
.admin-shell .badge-ambar { background: #E0F2F1; color: #DC2626; }
.admin-shell .badge-duplicado { background: #FFFFFF; color: #0B2947; }
.admin-shell .admin-spinner { border: 3px solid #D1D5DB; }
.admin-shell .admin-alert-error { background: #D1D5DB; border: 1px solid #D1D5DB; color: #DC2626; }
.admin-shell .qiwo-search-box { border: 1px solid #D1D5DB; }
.admin-shell .qiwo-search-box svg { color: #0B2947; }
.admin-shell .qiwo-chip { border: 1px solid #D1D5DB; color: #0B2947; }
.admin-shell .qiwo-table-card { border: 1px solid #D1D5DB; }
.admin-shell .qiwo-table thead th { background: #FFFFFF; color: #0B2947; border-bottom: 1px solid #D1D5DB; }
.admin-shell .qiwo-table tbody td { border-bottom: 1px solid #D1D5DB; }
.admin-shell .qiwo-table tbody tr:hover td { background: #FFFFFF; }
.admin-shell .qiwo-table-empty { color: #0B2947; }
.admin-shell .qiwo-table-footer { color: #0B2947; border-top: 1px solid #D1D5DB; background: #FFFFFF; }
.admin-shell .qiwo-table-loading { color: #0B2947; }
.admin-shell .qiwo-person-sub { color: #0B2947; }
.admin-shell .qiwo-codigo-tag { background: #FFFFFF; color: #0B2947; }
.admin-shell .qiwo-nivel-chip { background: #E0F2F1; color: #0B2947; }
.admin-shell .qiwo-text-muted { color: #0B2947; }
.admin-shell .badge-matricula-activa { background: #E0F2F1; color: #0F9375; }
.admin-shell .badge-matricula-inactiva { background: #E0F2F1; color: #DC2626; }
.admin-shell .qiwo-action-btn { border: 1px solid #D1D5DB; color: #0B2947; }
.admin-shell .qiwo-action-btn:disabled:hover { border-color: #D1D5DB; color: #0B2947; }
.admin-shell .admin-alert-warning { background: #E0F2F1; border: 1px solid #D1D5DB; color: #DC2626; }
.admin-shell .admin-alert-success { background: #E0F2F1; border: 1px solid #D1D5DB; color: #0F9375; }
.admin-shell .qiwo-modal-header { border-bottom: 1px solid #D1D5DB; }
.admin-shell .qiwo-modal-close { background: #FFFFFF; color: #0B2947; }
.admin-shell .qiwo-modal-close:hover { background: #E0F2F1; }
.admin-shell .qiwo-modal-footer { border-top: 1px solid #D1D5DB; }
.admin-shell .qiwo-form-group label { color: #0B2947; }
.admin-shell .qiwo-form-group input, .admin-shell .qiwo-form-group select, .admin-shell .qiwo-form-group textarea { border: 1px solid #D1D5DB; }
.admin-shell .qiwo-form-hint { color: #0B2947; }
.admin-shell .qiwo-optional { color: #0B2947; }
.admin-shell .qiwo-btn-lookup:hover:not(:disabled) { background: #0B2947; }
.admin-shell .qiwo-persona-card { border: 1px solid #D1D5DB; background: #FFFFFF; }
.admin-shell .qiwo-persona-card-data { color: #0B2947; }
.admin-shell .qiwo-btn-primary:hover:not(:disabled) { background: #0F9375; }
.admin-shell .qiwo-btn-secondary { color: #0B2947; border: 1px solid #D1D5DB; }
.admin-shell .qiwo-btn-secondary:hover { background: #FFFFFF; }
.admin-shell .qiwo-modal-error { background: #D1D5DB; border: 1px solid #D1D5DB; }
.admin-shell .qiwo-detalle-row { border-bottom: 1px solid #D1D5DB; }
.admin-shell .qiwo-detalle-label { color: #0B2947; }
.admin-shell .qiwo-avatar.warm { background: #E0F2F1; color: #0B2947; }
.admin-shell .qiwo-alumnos-csv { color: #0B2947; }
.admin-shell .qiwo-autocomplete-dropdown { border: 1px solid #D1D5DB; }
.admin-shell .qiwo-autocomplete-item { border-bottom: 1px solid #D1D5DB; }
.admin-shell .qiwo-autocomplete-item:hover { background: #D1D5DB; }
.admin-shell .qiwo-autocomplete-codigo { color: #0B2947; }
.admin-shell .qiwo-autocomplete-hint { color: #0B2947; }
.admin-shell .qiwo-portal-banner { background: #D1D5DB; border: 1px solid #D1D5DB; color: #0F9375; }
.admin-shell .qiwo-checkbox-label { color: #0B2947; }
.admin-shell .qiwo-opcion-titulo { color: #0B2947; }
.admin-shell .qiwo-opcion--activa .qiwo-opcion-titulo { color: #0F9375; }
.admin-shell .qiwo-opcion-desc { color: #0B2947; }
body.qiwo-dark .admin-shell .qiwo-opcion-titulo { color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-opcion--activa .qiwo-opcion-titulo { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-opcion-desc { color: #D1D5DB; }
.admin-shell .qiwo-modal-warning { color: #DC2626; background: #E0F2F1; border: 1px solid #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-modal-warning { color: #E0F2F1; }
.admin-shell .qiwo-badge-warn { background: #E0F2F1; color: #DC2626; }
.admin-shell .qiwo-link-btn { color: #0B2947; }
.admin-shell .qiwo-link-btn:hover { color: #0B2947; }
.admin-shell .qiwo-link-btn.qiwo-link-btn-peligro:hover { color: #DC2626; }
.admin-shell .qiwo-btn-primary.qiwo-btn-peligro:hover:not(:disabled) { background: #DC2626; }
.admin-shell .qiwo-tu-cuenta { background: #E0F2F1; color: #0B2947; }
.admin-shell .qiwo-rol-chip { background: #D1D5DB; color: #0B2947; }
.admin-shell .qiwo-rol-chip.rol-director { background: #E0F2F1; color: #0B2947; }
.admin-shell .qiwo-rol-chip.rol-administrativo { background: #E0F2F1; color: #0B2947; }
.admin-shell .qiwo-rol-chip.rol-superadmin { background: #E0F2F1; color: #DC2626; }
.admin-shell .qiwo-rol-chip.rol-tutor { background: #E0F2F1; color: #0F9375; }
.admin-shell .qiwo-rol-chip.rol-auxiliar { background: #E0F2F1; color: #DC2626; }
.admin-shell .qiwo-roles-list { background: #FFFFFF; border: 1px solid #D1D5DB; }
.admin-shell .qiwo-password-toggle { color: #0B2947; }
.admin-shell .qiwo-page-btn { border: 1px solid #D1D5DB; color: #0B2947; }
.admin-shell .qiwo-page-btn:hover:not(:disabled) { background: #D1D5DB; }
.admin-shell .qiwo-persona-result.result-new { color: #0F9375; }
.admin-shell .qiwo-persona-result.result-found { background: #E0F2F1; border: 1px solid #D1D5DB; color: #0F9375; }
.admin-shell .qiwo-persona-result.result-warn { background: #E0F2F1; border: 1px solid #D1D5DB; color: #DC2626; }
.admin-shell .qiwo-persona-result.result-blocked { background: #E0F2F1; border: 1px solid #D1D5DB; color: #DC2626; }
.admin-shell .qiwo-btn-nuevo:hover { background: #0F9375; }
.admin-shell .qiwo-btn-nuevo:disabled { background: #E0F2F1; color: #0B2947; }
.admin-shell .qiwo-btn-nuevo:disabled:hover { background: #E0F2F1; }
body.qiwo-dark .admin-shell { background: #0F1923; }
body.qiwo-dark .admin-shell .admin-topbar { background: #1A2535; }
body.qiwo-dark .admin-shell .admin-topbar-user { color: #D1D5DB; }
body.qiwo-dark .admin-shell .admin-hamburger { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-sucursal-badge { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-content { background: #0F1923; }
body.qiwo-dark .admin-shell .admin-page-title { color: #D1D5DB; }
body.qiwo-dark .admin-shell .admin-page-sub { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-stat-card { background: #1A2535; }
body.qiwo-dark .admin-shell .admin-stat-label { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-stat-value { color: #D1D5DB; }
body.qiwo-dark .admin-shell .admin-hub-card { background: #1A2535; }
body.qiwo-dark .admin-shell .admin-hub-card-title { color: #D1D5DB; }
body.qiwo-dark .admin-shell .admin-hub-card-desc { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-section-label { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-activity-empty { background: #1A2535; color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-table-card { background: #1A2535; }
body.qiwo-dark .admin-shell .qiwo-table thead th { background: #1A2535; color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-table tbody td { color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-table-footer { background: #1A2535; color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-table-loading, body.qiwo-dark .admin-shell .qiwo-table-empty { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-search-box { background: #1A2535; color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-search-box input { color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-search-box input::placeholder { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-search-box svg { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-search-box::placeholder { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-chip { background: #1A2535; color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-chip.active { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-form-group input, body.qiwo-dark .admin-shell .qiwo-form-group select, body.qiwo-dark .admin-shell .qiwo-form-group textarea { background: #1A2535; color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-form-group input::placeholder, body.qiwo-dark .admin-shell .qiwo-form-group select::placeholder, body.qiwo-dark .admin-shell .qiwo-form-group textarea::placeholder { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-form-group label { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-required { color: #DC2626; }
body.qiwo-dark .admin-shell .qiwo-optional { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-form-hint { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-input { background: #1A2535; color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-label { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-section-title { color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-person-name { color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-text-muted { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-avatar { color: #E0F2F1 !important; }
body.qiwo-dark .admin-shell .admin-alert-error { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-alert-success { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-alert-warning { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-hamburger-alert-dot { border-color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-btn-secondary { background: #1A2535; color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-btn-secondary:hover { background: #1A2535; }
body.qiwo-dark .admin-shell .qiwo-link-btn { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-link-btn:hover { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-link-btn.qiwo-link-btn-peligro { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-link-btn.qiwo-link-btn-peligro:hover { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-modal-card { background: #1A2535; }
body.qiwo-dark .admin-shell .qiwo-modal-card { color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-modal-header h3 { color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-modal-close { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-modal-close:hover { color: #DC2626; }
body.qiwo-dark .admin-shell .admin-section-label { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-activity-wrapper { background: #1A2535; }
body.qiwo-dark .admin-shell .admin-activity-wrapper thead th { background: #1A2535; color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-activity-wrapper tbody td { color: #D1D5DB; }
body.qiwo-dark .admin-shell .admin-activity-empty { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-persona-result.result-new { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-persona-result.result-found { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-persona-result.result-warn { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-persona-result.result-blocked { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-btn-lookup:hover:not(:disabled) { background: #1A2535; }
body.qiwo-dark .admin-shell .qiwo-modal-body { background: #1A2535; }
body.qiwo-dark .admin-shell .qiwo-modal-footer { background: #1A2535; }
body.qiwo-dark .admin-shell .qiwo-modal-error { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-action-btn { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-action-btn:hover { color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-action-btn:disabled:hover { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-badge.badge-matricula-activa { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-badge.badge-matricula-inactiva { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-badge.badge-solicitud-pendiente { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-badge.badge-solicitud-aprobada { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-badge.badge-solicitud-rechazada { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-badge.badge-solicitud-cancelada { color: #D1D5DB; }
body.qiwo-dark .admin-shell .admin-login-container { background: #1A2535; }
body.qiwo-dark .admin-shell .admin-login-card { background: #1A2535; }
body.qiwo-dark .admin-shell .admin-login-label { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-login-input { background: #1A2535; color: #D1D5DB; }
body.qiwo-dark .admin-shell .admin-login-input::placeholder { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-login-soporte { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-login-link-green { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-login-link:hover { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-login-pass-toggle:hover { color: #E0F2F1; }
.admin-shell .cred-search-box { border: 1px solid #D1D5DB; }
.admin-shell .cred-search-box input::placeholder { color: #0B2947; }
.admin-shell .cred-chip { border: 1px solid #D1D5DB; color: #0B2947; }
.admin-shell .credencial-valor { color: #0B2947; }
.admin-shell .metodo-btn { border: 1.5px solid #D1D5DB; color: #0B2947; }
.admin-shell .autocomplete-dropdown { border: 1px solid #D1D5DB; }
.admin-shell .autocomplete-item { border-bottom: 1px solid #D1D5DB; }
.admin-shell .autocomplete-item:hover { background: #D1D5DB; }
.admin-shell .autocomplete-codigo { color: #0B2947; }
.admin-shell .autocomplete-empty { color: #0B2947; }
.admin-shell .identificar-result { background: #FFFFFF; border: 1px solid #D1D5DB; }
.admin-shell .identificar-row { border-bottom: 1px solid #D1D5DB; }
.admin-shell .identificar-label { color: #0B2947; }
.admin-shell .qiwo-btn-danger:hover:not(:disabled) { background: #DC2626; }
body.qiwo-dark .admin-shell .cred-search-box { background: #1A2535; }
body.qiwo-dark .admin-shell .cred-search-box input { color: #D1D5DB; }
body.qiwo-dark .admin-shell .cred-chip { background: #1A2535; color: #E0F2F1; }
body.qiwo-dark .admin-shell .cred-chip:hover { color: #E0F2F1; }
body.qiwo-dark .admin-shell .credencial-valor { color: #E0F2F1; }
body.qiwo-dark .admin-shell .metodo-btn { background: #1A2535; color: #E0F2F1; }
body.qiwo-dark .admin-shell .metodo-btn:hover { color: #E0F2F1; }
body.qiwo-dark .admin-shell .alumno-selected-chip { color: #D1D5DB; }
body.qiwo-dark .admin-shell .alumno-selected-chip button { color: #E0F2F1; }
.admin-shell .cred-vista-tabs { border-bottom: 1px solid #D1D5DB; }
.admin-shell .cred-vista-tab { color: #0B2947; }
.admin-shell .cred-vista-tab-badge { background: #E0F2F1; color: #DC2626; }
.admin-shell .cred-historial { border-top: 1px solid #D1D5DB; }
.admin-shell .cred-historial-titulo { color: #0B2947; }
.admin-shell .cred-historial-item { border-bottom: 1px solid #D1D5DB; }
body.qiwo-dark .admin-shell .cred-vista-tab { color: #E0F2F1; }
body.qiwo-dark .admin-shell .cred-vista-tab:hover { color: #E0F2F1; }
body.qiwo-dark .admin-shell .cred-vista-tab-badge { color: #E0F2F1; }
body.qiwo-dark .admin-shell .cred-historial-titulo { color: #E0F2F1; }
body.qiwo-dark .admin-shell .cred-historial-item { color: #D1D5DB; }
body.qiwo-dark .admin-shell .autocomplete-dropdown { background: #1A2535; }
body.qiwo-dark .admin-shell .autocomplete-nombre { color: #D1D5DB; }
body.qiwo-dark .admin-shell .autocomplete-codigo { color: #E0F2F1; }
body.qiwo-dark .admin-shell .autocomplete-empty { color: #E0F2F1; }
body.qiwo-dark .admin-shell .identificar-result { background: #1A2535; }
body.qiwo-dark .admin-shell .identificar-label { color: #E0F2F1; }
body.qiwo-dark .admin-shell .identificar-valor-cell { color: #D1D5DB; }
.admin-shell .qiwo-alert-error { background: #D1D5DB; border: 1px solid #D1D5DB; color: #DC2626; }
.admin-shell .qiwo-alert-success { background: #E0F2F1; border: 1px solid #D1D5DB; color: #0F9375; }
.admin-shell .qiwo-spinner { border: 3px solid #D1D5DB; }
.admin-shell .qiwo-spinner-sm { border: 2px solid #D1D5DB; }
.admin-shell .qiwo-select { border: 1px solid #D1D5DB; }
.admin-shell .qiwo-label-optional { color: #0B2947; }
.admin-shell .qiwo-field-hint { color: #0B2947; }
.admin-shell .qiwo-td-mono { color: #0B2947; }
.admin-shell .qiwo-modal-desc { color: #0B2947; }
body.qiwo-dark .admin-shell .qiwo-alert-error { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-alert-success { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-select { background: #1A2535; color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-td-mono { color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-modal-desc { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-field-hint { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-label-required { color: #DC2626; }
body.qiwo-dark .admin-shell .qiwo-label-optional { color: #E0F2F1; }
.admin-shell .qiwo-tip-icon { background: #D1D5DB; color: #0B2947; }
.admin-shell .qiwo-tip-box { color: #0B2947; }
body.qiwo-dark .admin-shell .qiwo-tip-icon { background: #1A2535; color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-tip-box { background: #1A2535; color: #D1D5DB; }
.admin-shell .qiwo-tardanza-box { background: #FFFFFF; border: 1px solid #D1D5DB; }
.admin-shell .qiwo-switch-slider { background: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-tardanza-box { background: #1A2535; border-color: #D1D5DB; }
.admin-shell .qiwo-dia-btn { border: 1px solid #D1D5DB; color: #0B2947; }
body.qiwo-dark .admin-shell .qiwo-dia-btn { background: #1A2535; color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-dia-btn:hover { color: #E0F2F1; }
.admin-shell .qiwo-row-actions-menu-item { color: #0B2947; }
.admin-shell .qiwo-row-actions-menu-item--success:hover, .admin-shell .qiwo-row-actions-menu-item--success:focus-visible { color: #0F9375; }
.admin-shell .qiwo-row-actions-menu-item--danger, .admin-shell .qiwo-row-actions-menu-item--danger svg { color: #DC2626; }
.admin-shell .qiwo-row-actions-menu-item--danger:hover, .admin-shell .qiwo-row-actions-menu-item--danger:focus-visible { color: #DC2626; }
body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item { color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item svg { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--success, body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--success svg { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--danger, body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--danger svg { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--danger:hover, body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--danger:focus-visible { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--kiosco, body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--kiosco svg { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--kiosco:hover, body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--kiosco:focus-visible { color: #E0F2F1; }
.admin-shell .tutor-inline-loading { color: #0B2947; }
body.qiwo-dark .admin-shell .tutor-inline-loading { color: #E0F2F1; }
.admin-shell .tutor-child-card-data .badge-matricula-activa { color: #0F9375; }
.admin-shell .tutor-child-card-data .badge-matricula-inactiva { color: #DC2626; }
.admin-shell .destinatarios-columna-pendiente { border-left: 1px solid #D1D5DB; }
.admin-shell .destinatario-fecha { color: #0B2947; }
.admin-shell .destinatarios-vacio { color: #0B2947; }
body.qiwo-dark .admin-shell .destinatarios-columna-pendiente { border-left-color: #D1D5DB; }
body.qiwo-dark .admin-shell .destinatario-nombre { color: #D1D5DB; }
body.qiwo-dark .admin-shell .destinatario-fecha, body.qiwo-dark .admin-shell .destinatarios-vacio { color: #E0F2F1; }
.admin-shell .qiwo-chip-fiab-motivo { color: #0B2947; }
body.qiwo-dark .admin-shell .qiwo-chip-fiab-motivo { color: #E0F2F1; }
.admin-shell .qiwo-chip-filtro { border: 1px solid #D1D5DB; color: #0B2947; }
.admin-shell .qiwo-chip-filtro:hover { border-color: #D1D5DB; }
.admin-shell .qiwo-chip-filtro.activo { background: #D1D5DB; border-color: #D1D5DB; color: #0B2947; }
.admin-shell .qiwo-chip-filtro .qiwo-chip-n { color: #0B2947; }
.admin-shell .qiwo-chip-filtro.activo .qiwo-chip-n { color: #0B2947; }
body.qiwo-dark .admin-shell .qiwo-chip-filtro { border-color: #D1D5DB; color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-chip-filtro:hover { border-color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-chip-filtro.activo { background: #1A2535; border-color: #D1D5DB; color: #D1D5DB; }
.admin-shell .qiwo-pip-media { background: #0B2947; }
.admin-shell .qiwo-apo-count { background: #D1D5DB; border: 1px solid #D1D5DB; color: #0B2947; }
.admin-shell .qiwo-apo-mas { color: #0B2947; }
body.qiwo-dark .admin-shell .qiwo-apo-count { background: #1A2535; border-color: #D1D5DB; color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-apo-mas { color: #E0F2F1; }
.admin-shell .qiwo-badge-ok { background: #E0F2F1; color: #0F9375; }
body.qiwo-dark .admin-shell .qiwo-badge-ok { color: #E0F2F1; }
body.qiwo-dark .admin-shell .admin-page-sub, body.qiwo-dark .admin-shell .admin-stat-label, body.qiwo-dark .admin-shell .admin-hub-card-desc, body.qiwo-dark .admin-shell .admin-section-label, body.qiwo-dark .admin-shell .admin-activity-empty, body.qiwo-dark .admin-shell .qiwo-table-footer, body.qiwo-dark .admin-shell .qiwo-table-loading, body.qiwo-dark .admin-shell .qiwo-table-empty, body.qiwo-dark .admin-shell .qiwo-text-muted, body.qiwo-dark .admin-shell .qiwo-form-hint, body.qiwo-dark .admin-shell .qiwo-optional, body.qiwo-dark .admin-shell .qiwo-modal-desc { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-search-box input::placeholder, body.qiwo-dark .admin-shell .qiwo-search-box::placeholder, body.qiwo-dark .admin-shell .qiwo-form-group input::placeholder, body.qiwo-dark .admin-shell .qiwo-form-group select::placeholder, body.qiwo-dark .admin-shell .qiwo-form-group textarea::placeholder { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-chip.active { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-roles-list, body.qiwo-dark .admin-shell .qiwo-persona-card, body.qiwo-dark .admin-shell .qiwo-autocomplete-dropdown { background: #1A2535; }
body.qiwo-dark .admin-shell .qiwo-checkbox-label, body.qiwo-dark .admin-shell .qiwo-persona-card-data, body.qiwo-dark .admin-shell .qiwo-detalle-label, body.qiwo-dark .admin-shell .qiwo-autocomplete-hint { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-codigo-tag { background: #1A2535; color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-autocomplete-nombre { color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-autocomplete-codigo { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-selected-chip { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-portal-banner { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-password-toggle { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-password-toggle:hover { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-page-btn { background: #1A2535; color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-page-btn:hover:not(:disabled) { background: #1A2535; color: #E0F2F1; }
body.qiwo-dark .admin-shell .sel-inst-card { background: #1A2535; }
body.qiwo-dark .admin-shell .sel-inst-title, body.qiwo-dark .admin-shell .sel-inst-nombre { color: #D1D5DB; }
body.qiwo-dark .admin-shell .sel-inst-sub, body.qiwo-dark .admin-shell .sel-inst-ruc, body.qiwo-dark .admin-shell .sel-inst-cerrar { color: #E0F2F1; }
body.qiwo-dark .admin-shell .sel-inst-item { background: #1A2535; }
body.qiwo-dark .admin-shell .sel-inst-arrow { color: #E0F2F1; }
body.qiwo-dark .admin-shell .sel-inst-card svg path[fill="#0B2947"] { fill: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-rol-chip { background: #1A2535; color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-rol-chip.rol-director { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-rol-chip.rol-administrativo { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-rol-chip.rol-superadmin { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-rol-chip.rol-tutor { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-rol-chip.rol-auxiliar { color: #E0F2F1; }
body.qiwo-dark .admin-shell .qiwo-detalle-row { color: #D1D5DB; }
body.qiwo-dark .admin-shell .qiwo-autocomplete-item { color: #D1D5DB; }
.admin-shell .qiwo-video-puerta-espera { color: #0B2947; }
.admin-shell .qiwo-video-puerta-pie { color: #0B2947; }
body.qiwo-dark .admin-shell .qiwo-video-puerta-pie { color: #E0F2F1; }
.admin-shell .hc-punto { background: #0F9375; }
.admin-shell .hc-chip { color: #0B2947; }
.admin-shell .hc-grupo-cab { color: #0B2947; }
.admin-shell .hc-grupo--local .hc-grupo-cab { color: #DC2626; }
.admin-shell .hc-cambio { border: 1px solid #D1D5DB; }
.admin-shell .hc-cambio[data-estado="OK"] { border-color: #D1D5DB; }
.admin-shell .hc-cambio[data-estado="OBSERVACION"] { background: #E0F2F1; border-color: #D1D5DB; }
.admin-shell .hc-titulo { color: #0B2947; }
.admin-shell .hc-tag--area { color: #0F9375; }
.admin-shell .hc-tag--sql { background: #E0F2F1; color: #0B2947; }
.admin-shell .hc-quien { color: #0B2947; }
.admin-shell .hc-texto { color: #0B2947; }
.admin-shell .hc-archivos { color: #0B2947; }
.admin-shell .hc-btn--obs { color: #DC2626; border-color: #D1D5DB; }
.admin-shell .hc-btn--link { color: #0B2947; }
.admin-shell .hc-textarea { border: 1px solid #D1D5DB; color: #0B2947; }
.admin-shell .hc-obs-guardada { color: #DC2626; }
.admin-shell .hc-vacio { color: #0B2947; }
.admin-shell .hc-leyenda { color: #0B2947; }
body.qiwo-dark .admin-shell .hc-prod { background: #1A2535; }
body.qiwo-dark .admin-shell .hc-chip { background: #1A2535; color: #E0F2F1; }
body.qiwo-dark .admin-shell .hc-cambio { background: #1A2535; }
body.qiwo-dark .admin-shell .hc-titulo { color: #D1D5DB; }
body.qiwo-dark .admin-shell .hc-texto { color: #D1D5DB; }
body.qiwo-dark .admin-shell .hc-tag--area { color: #E0F2F1; }
body.qiwo-dark .admin-shell .hc-tag--sql { color: #E0F2F1; }
body.qiwo-dark .admin-shell .hc-btn--obs { color: #E0F2F1; }
body.qiwo-dark .admin-shell .hc-textarea { background: #1A2535; color: #D1D5DB; }
body.qiwo-dark .admin-shell .hc-obs-guardada { color: #E0F2F1; }
.admin-shell .up-kpi { border: 1px solid #D1D5DB; }
.admin-shell .up-kpi-lbl { color: #0B2947; }
.admin-shell .up-kpi-foot { color: #0B2947; }
.admin-shell .up-kpi--lead .up-kpi-lbl, .admin-shell .up-kpi--lead .up-kpi-foot { color: #0B2947; }
.admin-shell .up-card-h { border-bottom: 1px solid #D1D5DB; }
.admin-shell .up-card-h span { color: #0B2947; }
.admin-shell .up-embudo-fila { color: #0B2947; }
.admin-shell .up-track { background: #FFFFFF; }
.admin-shell .up-stack { background: #FFFFFF; }
.admin-shell .up-leyenda-item { color: #0B2947; }
.admin-shell .up-chart text { fill: #0B2947; }
.admin-shell .up-chart-grid { stroke: #0B2947; }
.admin-shell .up-dim { color: #0B2947; }
.admin-shell .up-btn-copiar { border: 1px solid #D1D5DB; color: #0B2947; }
.admin-shell .up-aviso { color: #DC2626; }
body.qiwo-dark .admin-shell .up-kpi { background: #1A2535; }
body.qiwo-dark .admin-shell .up-kpi-val { color: #D1D5DB; }
body.qiwo-dark .admin-shell .up-kpi-lbl, body.qiwo-dark .admin-shell .up-kpi-foot { color: #E0F2F1; }
body.qiwo-dark .admin-shell .up-kpi--lead .up-kpi-lbl, body.qiwo-dark .admin-shell .up-kpi--lead .up-kpi-foot { color: #E0F2F1; }
body.qiwo-dark .admin-shell .up-card-h { color: #D1D5DB; }
body.qiwo-dark .admin-shell .up-card-h span { color: #E0F2F1; }
body.qiwo-dark .admin-shell .up-embudo-fila, body.qiwo-dark .admin-shell .up-leyenda-item { color: #E0F2F1; }
body.qiwo-dark .admin-shell .up-embudo-fila strong, body.qiwo-dark .admin-shell .up-leyenda-item b { color: #D1D5DB; }
body.qiwo-dark .admin-shell .up-chart text { fill: #E0F2F1; }
body.qiwo-dark .admin-shell .up-chart .up-chart-val { fill: #D1D5DB; }
body.qiwo-dark .admin-shell .up-dim { color: #E0F2F1; }
body.qiwo-dark .admin-shell .up-btn-copiar { background: #1A2535; color: #E0F2F1; }
body.qiwo-dark .admin-shell .up-aviso { color: #E0F2F1; }
.admin-shell .sal-sede-comp { color: #0B2947; }
.admin-shell .sal-sede-datos dt, .admin-shell .sal-avisos dt { color: #0B2947; }
.admin-shell .sal-sede-pie { color: #0B2947; }
.admin-shell .sal-pill--ok { background: #E0F2F1; color: #0F9375; }
.admin-shell .sal-pill--aviso { background: #E0F2F1; color: #DC2626; }
.admin-shell .sal-pill--alerta { background: #E0F2F1; color: #DC2626; }
.admin-shell .sal-pill--neutro { background: #D1D5DB; color: #0B2947; }
.admin-shell .sal-avisos dd.sal-malo { color: #DC2626; }
body.qiwo-dark .admin-shell .sal-resumen, body.qiwo-dark .admin-shell .sal-sede { color: #D1D5DB; }
body.qiwo-dark .admin-shell .sal-sede-comp { color: #E0F2F1; }
body.qiwo-dark .admin-shell .sal-sede-pie, body.qiwo-dark .admin-shell .sal-sede-datos dt, body.qiwo-dark .admin-shell .sal-avisos dt { color: #E0F2F1; }
body.qiwo-dark .admin-shell .sal-avisos dd { color: #D1D5DB; }
body.qiwo-dark .admin-shell .sal-avisos dd.sal-malo { color: #E0F2F1; }
body.qiwo-dark .admin-shell .sal-pill--ok { color: #0B2947; }
body.qiwo-dark .admin-shell .sal-pill--aviso { color: #E0F2F1; }
body.qiwo-dark .admin-shell .sal-pill--alerta { color: #E0F2F1; }
body.qiwo-dark .admin-shell .sal-pill--neutro { color: #D1D5DB; }
.admin-shell .av-bar-ko { fill: #0B2947; }
.admin-shell .pt-info-btn { color: #0B2947; }
.admin-shell .pt-info-btn:hover, .admin-shell .pt-info-btn[aria-expanded="true"] { background: #D1D5DB; }
.admin-shell .pt-info { background: #D1D5DB; border: 1px solid #D1D5DB; color: #0B2947; }
.admin-shell .pt-tl-item::before { background: #D1D5DB; }
.admin-shell .pt-tl-punto { background: #E0F2F1; box-shadow: 0 0 0 1px #E0F2F1; }
.admin-shell .pt-tl--neutro .pt-tl-punto { background: #0B2947; box-shadow: 0 0 0 1px #0B2947; }
.admin-shell .pt-tl-hora { color: #0B2947; }
.admin-shell .pt-tl-quien { color: #0B2947; }
body.qiwo-dark .admin-shell .pt-info-btn { color: #E0F2F1; }
body.qiwo-dark .admin-shell .pt-info-btn:hover, body.qiwo-dark .admin-shell .pt-info-btn[aria-expanded="true"] { background: #1A2535; color: #D1D5DB; }
body.qiwo-dark .admin-shell .pt-info { color: #D1D5DB; }
body.qiwo-dark .admin-shell .pt-info dt, body.qiwo-dark .admin-shell .pt-tl-cabeza strong { color: #D1D5DB; }
body.qiwo-dark .admin-shell .pt-tl-item::before { background: #1A2535; }
body.qiwo-dark .admin-shell .pt-tl-punto { border-color: #D1D5DB; }
body.qiwo-dark .admin-shell .pt-tl-quien { color: #D1D5DB; }
body.qiwo-dark .admin-shell .pt-tl-hora { color: #E0F2F1; }

/* Transparencias de marca en Admin. */
.admin-shell .admin-sidebar { box-shadow: 2px 0 12px rgba(11,41,71,0.15); }
.admin-shell .qiwo-autocomplete-dropdown { box-shadow: 0 8px 24px rgba(11,41,71,0.1); }
body.qiwo-dark .admin-shell .qiwo-modal-warning { background: rgba(11,41,71,0.10); border-color: rgba(11,41,71,0.28); }
body.qiwo-dark .admin-shell .admin-alert-success { background: rgba(15,147,117,0.1); border-color: rgba(15,147,117,0.3); }
body.qiwo-dark .admin-shell .admin-alert-warning { background: rgba(220,38,38,0.12); border-color: rgba(220,38,38,0.3); }
body.qiwo-dark .admin-shell .qiwo-modal-overlay { background: rgba(11,41,71,0.6); }
body.qiwo-dark .admin-shell .qiwo-modal-card { box-shadow: 0 20px 60px rgba(11,41,71,0.5); }
body.qiwo-dark .admin-shell .qiwo-modal-close:hover { background: rgba(220,38,38,0.15); }
body.qiwo-dark .admin-shell .qiwo-persona-result.result-found { background: rgba(15,147,117,0.1); border-color: rgba(15,147,117,0.3); }
body.qiwo-dark .admin-shell .qiwo-persona-result.result-warn { background: rgba(220,38,38,0.12); border-color: rgba(11,41,71,0.3); }
body.qiwo-dark .admin-shell .qiwo-persona-result.result-blocked { border-color: rgba(11,41,71,0.3); }
body.qiwo-dark .admin-shell .admin-badge.badge-matricula-activa { background: rgba(15,147,117,0.15); border-color: rgba(15,147,117,0.2); }
body.qiwo-dark .admin-shell .admin-badge.badge-matricula-inactiva { background: rgba(11,41,71,0.15); border-color: rgba(11,41,71,0.2); }
body.qiwo-dark .admin-shell .admin-badge.badge-solicitud-pendiente { background: rgba(220,38,38,.20); }
body.qiwo-dark .admin-shell .admin-badge.badge-solicitud-aprobada { background: rgba(15,147,117,.15); }
body.qiwo-dark .admin-shell .admin-badge.badge-solicitud-cancelada { background: rgba(11,41,71,.20); }
body.qiwo-dark .admin-shell .admin-login-card { box-shadow: 0 8px 32px rgba(11,41,71,0.4); }
.admin-shell .autocomplete-dropdown { box-shadow: 0 4px 12px rgba(11,41,71,.12); }
body.qiwo-dark .admin-shell .autocomplete-dropdown { box-shadow: 0 4px 12px rgba(11,41,71,.4); }
body.qiwo-dark .admin-shell .qiwo-alert-success { background: rgba(15,147,117,0.1); border-color: rgba(15,147,117,0.3); }
.admin-shell .qiwo-tip-box { box-shadow: 0 4px 12px rgba(11,41,71,0.15); }
body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--kiosco:hover, body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--kiosco:focus-visible { background: rgba(11,41,71, .16); }
body.qiwo-dark .admin-shell .qiwo-badge-ok { background: rgba(15,147,117,.18); }
body.qiwo-dark .admin-shell .qiwo-chip-active, body.qiwo-dark .admin-shell .qiwo-chip.active { border-color: rgba(15,147,117,.42); }
body.qiwo-dark .admin-shell .qiwo-selected-chip { border-color: rgba(15,147,117,.32); }
body.qiwo-dark .admin-shell .qiwo-portal-banner { border-color: rgba(15,147,117,.28); }
body.qiwo-dark .admin-shell .qiwo-page-btn:hover:not(:disabled) { border-color: rgba(15,147,117,.42); }
body.qiwo-dark .admin-shell .sel-inst-item:hover { border-color: rgba(15,147,117,.44); }
body.qiwo-dark .admin-shell .sel-inst-icon { background: rgba(11,41,71,.18); }
body.qiwo-dark .admin-shell .qiwo-rol-chip.rol-director { background: rgba(11,41,71,.20); }
body.qiwo-dark .admin-shell .qiwo-rol-chip.rol-administrativo { background: rgba(11,41,71,.20); }
body.qiwo-dark .admin-shell .qiwo-rol-chip.rol-tutor { background: rgba(15,147,117,.18); }
body.qiwo-dark .admin-shell .qiwo-rol-chip.rol-auxiliar { background: rgba(11,41,71,.20); }
.admin-shell .hc-punto { box-shadow: 0 0 0 3px rgba(15,147,117,.25); }
body.qiwo-dark .admin-shell .hc-cambio[data-estado="OBSERVACION"] { background: rgba(220,38,38,.16); border-color: rgba(220,38,38,.45); }
body.qiwo-dark .admin-shell .hc-tag--sql { background: rgba(11,41,71,.2); }
body.qiwo-dark .admin-shell .hc-btn--obs { border-color: rgba(11,41,71,.5); }
body.qiwo-dark .admin-shell .hc-textarea { border-color: rgba(11,41,71,.5); }
body.qiwo-dark .admin-shell .hc-obs-guardada { background: rgba(11,41,71,.2); }
body.qiwo-dark .admin-shell .sal-pill--ok { background: #E0F2F1; }
body.qiwo-dark .admin-shell .sal-pill--aviso { background: rgba(220,38,38,.22); }
body.qiwo-dark .admin-shell .sal-pill--neutro { background: rgba(11,41,71,.22); }
/* Contraste de superficies y estados de Admin, común a ambos temas. */
body .admin-content table,
body .admin-content table tbody td { background: var(--admin-surface); color: var(--admin-ink); }
body .admin-shell { color: var(--admin-ink); }
body .admin-content .admin-page-sub,
body .admin-content .admin-hub-card-desc,
body .admin-content .qiwo-person-sub,
body .admin-content .qiwo-form-hint,
body .admin-content .qiwo-optional { color: var(--admin-muted); }
body .admin-content .qiwo-btn-primary,
body .admin-content .qiwo-btn-nuevo:not(:disabled),
body .admin-content .qiwo-btn-nuevo:not(:disabled):hover,
body .admin-content button[style*="background:#0F9375"],
body .admin-content button[style*="background: #0F9375"] { background: #0B2947 !important; color: #FFFFFF !important; }
body .admin-content .admin-badge,
body .admin-content .estado-badge,
body .admin-content .metodo-badge,
body .admin-content .qiwo-badge-ok,
body .admin-content .qiwo-badge-warn,
body .admin-content .badge-matricula-activa,
body .admin-content .badge-matricula-inactiva { background: #E0F2F1; color: #0B2947; border-color: #D1D5DB; }
body.qiwo-dark .admin-content .admin-badge,
body.qiwo-dark .admin-content .estado-badge,
body.qiwo-dark .admin-content .metodo-badge,
body.qiwo-dark .admin-content .qiwo-badge-ok,
body.qiwo-dark .admin-content .qiwo-badge-warn,
body.qiwo-dark .admin-content .badge-matricula-activa,
body.qiwo-dark .admin-content .badge-matricula-inactiva { background: #E0F2F1; color: #0B2947; border-color: #D1D5DB; }
body .admin-content .qiwo-chip { background: var(--admin-surface); color: var(--admin-ink); }
body .admin-content .qiwo-chip.active,
body .admin-content .qiwo-chip-active,
body.qiwo-dark .admin-content .qiwo-chip.active,
body.qiwo-dark .admin-content .qiwo-chip-active { background: #E0F2F1; color: #0B2947 !important; }
body .admin-content button { font-family: inherit; }
body .admin-content a:not([class]) { color: var(--admin-ink); text-underline-offset: 3px; }
body .admin-content .qiwo-campo-fecha,
body .admin-content .qiwo-campo-fecha-cal,
body.qiwo-dark .admin-content .qiwo-campo-fecha,
body.qiwo-dark .admin-content .qiwo-campo-fecha-cal { color: var(--admin-ink); }
body .admin-content .admin-alert-success,
body .admin-content .admin-alert-warning,
body.qiwo-dark .admin-content .admin-alert-success,
body.qiwo-dark .admin-content .admin-alert-warning { background: #E0F2F1; color: #0B2947; border-color: #D1D5DB; }
body .admin-content .admin-alert-error,
body.qiwo-dark .admin-content .admin-alert-error { background: #FFFFFF; color: #DC2626; border-color: #DC2626; }
body .admin-content [style*="color:#DC2626"],
body .admin-content [style*="color: #DC2626"] { background: #FFFFFF !important; color: #DC2626 !important; }
body.qiwo-dark .admin-shell .admin-hamburger { color: #E0F2F1; }
body .admin-sidebar-hybrid .admin-logout-btn:hover { color: #E0F2F1; }
body .admin-content .qiwo-notification-help__tip { border-left: 0; }

/* Textos pequeños: el verde de marca se reserva a superficies, bordes e iconos. */
body .admin-content [style*="color:#0F9375"],
body .admin-content [style*="color: #0F9375"] { color: var(--admin-ink) !important; }
body .admin-content .qiwo-alumnos-csv { color: var(--admin-ink); }
body .admin-content .qiwo-chip-filtro .qiwo-chip-n,
body.qiwo-dark .admin-content .qiwo-chip-filtro .qiwo-chip-n { color: inherit; }
body .admin-content [style*="background:#D1D5DB"],
body .admin-content [style*="background: #D1D5DB"] {
    --admin-ink: #0B2947; --admin-muted: #0B2947;
    background: #D1D5DB !important; color: #0B2947 !important;
}
body .admin-content [style*="background:#E0F2F1"],
body .admin-content [style*="background: #E0F2F1"] {
    --admin-ink: #0B2947; --admin-muted: #0B2947;
    background: #E0F2F1 !important; color: #0B2947 !important;
}
body.qiwo-dark .admin-content [style*="color:#0B2947"],
body.qiwo-dark .admin-content [style*="color: #0B2947"] { color: var(--admin-ink) !important; }
body .admin-content .up-kpi--lead .up-kpi-lbl,
body .admin-content .up-kpi--lead .up-kpi-foot { color: #E0F2F1; }
body .admin-content .pt-info,
body.qiwo-dark .admin-content .pt-info,
body.qiwo-dark .admin-content .pt-info dt { color: #0B2947; }
body .admin-content .sal-pill--ok { background: #E0F2F1; color: #0B2947; }
body .admin-content .sal-pill--aviso,
body .admin-content .sal-pill--alerta { background: #FFFFFF; color: #DC2626; }

/* Selectores compartidos: estilos antes duplicados en Razor. */

  .sel-inst-wrap {
    min-height: 100vh;
    min-height: 100dvh;   /* ver nota en .admin-shell (qiwo.css) */
    background: #0B2947;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    box-sizing: border-box;
  }
  .sel-inst-card {
    background: #FFFFFF;
    max-width: 480px;
    width: 100%;
    border-radius: 16px;
    padding: 40px;
    box-sizing: border-box;
    box-shadow: 0 10px 25px rgba(0,0,0,0.5);
  }
  .sel-inst-title {
    color: #0B2947;
    font-size: 22px;
    font-weight: 700;
    text-align: center;
    margin: 16px 0 6px;
  }
  .sel-inst-sub {
    color: #0B2947;
    font-size: 14px;
    text-align: center;
    margin: 0 0 28px;
  }
  .sel-inst-list {
    display: flex;
    flex-direction: column;
    gap: 12px;
  }
  .sel-inst-item {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 16px 20px;
    border: 1.5px solid #D1D5DB;
    border-radius: 12px;
    cursor: pointer;
    transition: border-color 0.2s, background 0.2s;
    background: #FFFFFF;
  }
  .sel-inst-item:hover {
    border-color: #0F9375;
    background: #D1D5DB;
  }
  .sel-inst-icon {
    width: 40px;
    height: 40px;
    border-radius: 10px;
    background: #D1D5DB;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
  }
  .sel-inst-info { flex: 1; min-width: 0; }
  .sel-inst-nombre {
    font-size: 15px;
    font-weight: 700;
    color: #0B2947;
    white-space: normal;
    overflow-wrap: break-word;
    line-height: 1.3;
  }
  .sel-inst-ruc { font-size: 12px; color: #0B2947; margin-top: 2px; }
  .sel-inst-arrow { color: #E0F2F1; flex-shrink: 0; }
  .sel-inst-loading {
    display: flex;
    justify-content: center;
    padding: 32px 0;
  }
  .sel-inst-empty {
    text-align: center;
    color: #DC2626;
    font-size: 14px;
    padding: 24px 0;
  }
  .sel-inst-footer {
    text-align: center;
    margin-top: 24px;
  }
  .sel-inst-cerrar {
    font-size: 13px;
    color: #0B2947;
    text-decoration: none;
    cursor: pointer;
    background: none;
    border: none;
    padding: 0;
    transition: color 0.2s;
  }
  .sel-inst-cerrar:hover { color: #0B2947; }

/* Acceso administrativo y auxiliar: estilos trasladados desde LoginAdmin. */

  .admin-login-container {
    min-height: 100vh;
    min-height: 100dvh;   /* ver nota en .admin-shell (qiwo.css) */
    background-color: #0B2947;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    box-sizing: border-box;
  }
  .admin-login-card {
    background: #FFFFFF;
    max-width: 420px;
    width: 100%;
    border-radius: 16px;
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    align-items: center;
    overflow: hidden;
    box-shadow: 0 10px 25px rgba(11,41,71,0.5);
  }
  /* Separado del banner de marca: así el banner puede ocupar el 100% del ancho
     de la tarjeta sin pelear contra el padding + align-items:center de arriba
     (un margin negativo sobre un flex item centrado no llega limpio al borde). */
  .admin-login-card-body {
    width: 100%;
    box-sizing: border-box;
    padding: 40px;
    display: flex;
    flex-direction: column;
    align-items: center;
  }
  .admin-login-badge {
    background-color: rgba(15,147,117,.16);
    border: 1px solid #D1D5DB;
    color: rgba(11,41,71,.72);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.12em;
    padding: 5px 14px;
    border-radius: 20px;
    margin-top: 16px;
    margin-bottom: 24px;
    text-transform: uppercase;
  }
  .admin-login-title {
    color: #0B2947;
    font-size: 22px;
    font-weight: 700;
    text-align: center;
    margin: 0 0 24px 0;
  }
  .admin-login-fields {
    width: 100%;
    display: flex;
    flex-direction: column;
    gap: 16px;
  }
  .admin-login-field-group {
    display: flex;
    flex-direction: column;
    gap: 6px;
  }
  .admin-login-label {
    font-size: 14px;
    font-weight: 600;
    color: #0B2947;
  }
  .admin-login-input {
    width: 100%;
    padding: 12px;
    border: 1px solid #D1D5DB;
    border-radius: 8px;
    font-size: 15px;
    box-sizing: border-box;
    outline: none;
    transition: border-color 0.2s;
  }
  .admin-login-input:focus {
    border-color: #0B2947;
  }
  .admin-login-pass-wrap {
    position: relative;
    display: flex;
    align-items: center;
  }
  .admin-login-pass-wrap .admin-login-input {
    padding-right: 44px;
  }
  .admin-login-pass-toggle {
    position: absolute;
    right: 12px;
    background: none;
    border: none;
    cursor: pointer;
    padding: 0;
    color: rgba(11,41,71,.72);
    display: flex;
    align-items: center;
  }
  .admin-login-pass-toggle:hover { color: #0B2947; }
  .admin-login-error {
    color: #DC2626;
    font-size: 14px;
    margin-top: 16px;
    text-align: center;
  }
  .admin-login-btn-primary {
    width: 100%;
    background-color: #0B2947;
    color: #ffffff;
    border: none;
    border-radius: 8px;
    padding: 14px;
    font-size: 16px;
    font-weight: 600;
    cursor: pointer;
    margin-top: 24px;
    transition: background-color 0.2s;
  }
  .admin-login-btn-primary:hover:not(:disabled) {
    background-color: #0F9375;
  }
  .admin-login-btn-primary:disabled {
    opacity: 0.7;
    cursor: not-allowed;
  }
  .admin-login-footer {
    margin-top: 24px;
    text-align: center;
    width: 100%;
  }
  .admin-login-soporte {
    font-size: 14px;
    color: rgba(11,41,71,.8);
    margin-bottom: 12px;
    margin-top: 0;
  }
  .admin-login-link-green {
    color: #0F9375;
    text-decoration: none;
    font-weight: 600;
  }
  .admin-login-link {
    color: rgba(11,41,71,.76);
    text-decoration: none;
    font-size: 14px;
    display: inline-block;
    margin-top: 8px;
    transition: color 0.2s;
  }
  .admin-login-link:hover {
    color: #0B2947;
  }
  .admin-login-logo-banner {
    position: relative;
    width: 100%;
    box-sizing: border-box;
    background: #0B2947;
    padding: 32px 40px 44px;
  }
  .admin-login-logo-banner .login-brand span { color: #FFFFFF; }
  .admin-login-logo-banner .login-product-sub { color: rgba(255,255,255,.65); margin: 0; }
  .admin-login-logo-wave {
    position: absolute;
    left: 0;
    bottom: -1px;
    width: 100%;
    height: 28px;
    display: block;
  }
  /* La onda debe fundirse con el fondo REAL de la tarjeta, no quedar blanca fija
     -- en modo oscuro .admin-login-card es #0B2947 (ver qiwo.css), y una onda
     blanca ahí se ve como un parche pegado en vez de una transición. */
  .admin-login-logo-wave path { fill: #FFFFFF; }
  body.qiwo-dark .admin-login-logo-wave path { fill: #0B2947; }

  /* ── Portal de Auxiliares · propuesta A / Operativo ───────────────────
     La referencia aprobada usa una franja verde de marca a todo el ancho y un
     cuerpo blanco continuo. No es una tarjeta blanca centrada: la composición
     debe sentirse como una app operativa y no como el login de Administrativo. */
  .auxiliar-login-container {
    align-items: stretch;
    padding: 0;
    background: #0F9375;
  }
  .auxiliar-login-card {
    width: 100%;
    max-width: 460px;
    min-height: 100dvh;
    border: 0;
    border-radius: 0;
    box-shadow: none;
  }
  .auxiliar-login-logo-banner {
    min-height: 208px;
    padding: 31px 30px 28px;
    background: #0F9375;
    border-bottom: 0;
  }
  .auxiliar-login-logo-banner .login-logo {
    display: flex;
    justify-content: flex-start;
    width: 100%;
  }
  .auxiliar-login-brand-block {
    display: flex;
    align-items: flex-start;
    flex-direction: column;
    width: 100%;
  }
  .auxiliar-login-wordmark {
    display: block;
    width: 166px;
    height: auto;
  }
  .auxiliar-login-logo-banner .login-product-sub {
    margin: 24px 0 0;
    color: #FFFFFF;
    font-size: 16px;
    font-weight: 600;
  }
  .auxiliar-login-strapline {
    margin: 4px 0 0;
    max-width: 230px;
    color: rgba(255,255,255,.84);
    font-size: 12px;
    line-height: 1.4;
  }
  .auxiliar-login-container .admin-login-card-body {
    flex: 1;
    align-items: stretch;
    padding: 26px 30px 32px;
  }
  .auxiliar-login-form-intro {
    width: 100%;
    margin: 0 0 20px;
  }
  .auxiliar-login-form-intro strong {
    display: block;
    color: #0B2947;
    font-size: 18px;
    font-weight: 700;
    letter-spacing: -.02em;
  }
  .auxiliar-login-form-intro span {
    display: block;
    margin-top: 4px;
    color: rgba(11,41,71,.76);
    font-size: 13px;
    line-height: 1.4;
  }
  .auxiliar-login-container .admin-login-fields { gap: 14px; }
  .auxiliar-login-container .admin-login-label { color: #0B2947; }
  .auxiliar-login-container .admin-login-input { border-color: #D1D5DB; }
  .auxiliar-login-container .admin-login-input:focus {
    border-color: #0F9375;
    box-shadow: 0 0 0 3px rgba(15,147,117,.13);
  }
  .auxiliar-login-container .admin-login-pass-toggle:hover { color: #0F9375; }
  .auxiliar-login-container .admin-login-btn-primary {
    margin-top: 22px;
    border-radius: 11px;
    background: #0F9375;
    box-shadow: 0 5px 12px rgba(15,147,117,.18);
  }
  .auxiliar-login-container .admin-login-btn-primary:hover:not(:disabled) { background: #0B2947; }
  .auxiliar-login-container .login-sesion-viva {
    max-width: none;
    border-color: #D1D5DB;
    background: #E0F2F1;
  }
  .auxiliar-login-container .login-sesion-continuar { background: #0F9375; }
  .auxiliar-login-container .login-sesion-continuar:hover { background: #0B2947; }
  .auxiliar-login-container .login-install-card,
  .auxiliar-login-container .login-instalada-card {
    max-width: none;
    border-color: transparent;
    background: #ECEDE7;
  }
  .auxiliar-login-container .login-install-card {
    align-items: flex-start;
    gap: 8px;
    padding: 10px;
    margin-bottom: 0;
  }
  .auxiliar-login-container .login-install-icon {
    width: 25px;
    height: 25px;
    border-radius: 8px;
    background: transparent;
    color: #0F9375;
  }
  .auxiliar-login-container .login-register-text { gap: 1px; }
  .auxiliar-login-container .login-register-title {
    color: #0B2947;
    font-size: 11px;
    font-weight: 600;
  }
  .auxiliar-login-container .login-register-action {
    color: rgba(11,41,71,.8);
    font-size: 10px;
    line-height: 1.35;
  }
  .auxiliar-login-container .login-install-card:hover {
    border-color: transparent;
    box-shadow: 0 4px 12px rgba(15,147,117,.10);
  }
  .auxiliar-login-container .admin-login-footer {
    margin-top: 24px;
    padding-top: 0;
  }
  .auxiliar-login-container .admin-login-soporte { color: rgba(11,41,71,.8); }
  .auxiliar-login-container + .qiwo-theme-fab { display: none; }
  body.qiwo-dark .auxiliar-login-container {
    background: #0B2947;
  }
  body.qiwo-dark .auxiliar-login-card {
    background: #0B2947;
    border-color: transparent;
  }
  body.qiwo-dark .auxiliar-login-logo-banner {
    background: #0F9375;
    border-color: transparent;
  }
  body.qiwo-dark .auxiliar-login-form-intro strong { color: #E0F2F1; }
  body.qiwo-dark .auxiliar-login-form-intro span { color: #D1D5DB; }
  body.qiwo-dark .auxiliar-login-container .admin-login-label { color: #D1D5DB; }
  body.qiwo-dark .auxiliar-login-container .admin-login-input {
    background: rgba(11,41,71,.9);
    border-color: rgba(209,213,219,.18);
  }
  body.qiwo-dark .auxiliar-login-container .login-sesion-viva,
  body.qiwo-dark .auxiliar-login-container .login-install-card,
  body.qiwo-dark .auxiliar-login-container .login-instalada-card {
    border-color: rgba(209,213,219,.40);
    background: rgba(15,147,117,.16);
  }
  body.qiwo-dark .auxiliar-login-container .admin-login-soporte { color: #D1D5DB; }

  @media (min-width: 481px) {
    .auxiliar-login-container {
      align-items: center;
      padding: 28px;
    }
    .auxiliar-login-card {
      min-height: 0;
      border-radius: 24px;
      box-shadow: 0 18px 42px rgba(11,41,71,.28);
      overflow: hidden;
    }
  }

  @media (max-width: 480px) {
    .admin-login-card {
      width: 90%;
    }
    .admin-login-card-body {
      padding: 28px;
    }
    .admin-login-logo-banner {
      padding: 28px 28px 36px;
    }
    .auxiliar-login-logo-banner {
      min-height: 208px;
      padding: 31px 30px 28px;
    }
    .auxiliar-login-container .admin-login-card-body {
      padding: 26px 30px 32px;
    }
    .auxiliar-login-card { width: 100%; }
  }

/* Contrastes encontrados con filas SANDBOX en el barrido masivo. */
body .admin-content .qiwo-avatar,
body.qiwo-dark .admin-content .qiwo-avatar { background: #E0F2F1 !important; color: #0B2947 !important; }
body .admin-content .qiwo-table-footer,
body.qiwo-dark .admin-content .qiwo-table-footer { background: var(--admin-surface); color: var(--admin-ink); }
body .admin-content .pers-reporte h2,
body .admin-content .pers-reporte label,
body.qiwo-dark .admin-content .pers-reporte h2,
body.qiwo-dark .admin-content .pers-reporte label { color: var(--admin-ink); }
body .admin-content .pers-dia-activo,
body.qiwo-dark .admin-content .pers-dia-activo { background: #E0F2F1; color: #0B2947; }
body.qiwo-dark .admin-content .sal-pill--aviso,
body.qiwo-dark .admin-content .sal-pill--alerta { background: #FFFFFF; color: #DC2626; }

/* Acceso y selección Admin. Los otros portales conservan su composición. */
.admin-login-admin { background: #0B2947; }
.admin-login-admin .admin-login-card { background: #FFFFFF; box-shadow: 0 10px 25px rgba(11,41,71,.5); }
.admin-login-admin .admin-login-badge { background: #E0F2F1; border-color: #D1D5DB; color: #0B2947; }
.admin-login-admin .admin-login-label,
.admin-login-admin .admin-login-soporte,
.admin-login-admin .admin-login-link,
.admin-login-admin .admin-login-link-green,
.admin-login-admin .admin-login-pass-toggle { color: #0B2947; }
.admin-login-admin .admin-login-input { background: #FFFFFF; border-color: #D1D5DB; color: #0B2947; }
.admin-login-admin .admin-login-input::placeholder { color: #0B2947; opacity: 1; }
.admin-login-admin .admin-login-error { color: #DC2626; }
.admin-login-admin .admin-login-btn-primary:hover:not(:disabled) { background: #0B2947; outline: 2px solid #0F9375; outline-offset: 2px; }
body.qiwo-dark .admin-login-admin { background: #1A2535; }
body.qiwo-dark .admin-login-admin .admin-login-card,
body.qiwo-dark .admin-login-admin .admin-login-input { background: #1A2535; color: #E0F2F1; }
body.qiwo-dark .admin-login-admin .admin-login-logo-wave path { fill: #0B2947; }
body.qiwo-dark .admin-login-admin .admin-login-title,
body.qiwo-dark .admin-login-admin .admin-login-label,
body.qiwo-dark .admin-login-admin .admin-login-soporte,
body.qiwo-dark .admin-login-admin .admin-login-link,
body.qiwo-dark .admin-login-admin .admin-login-link-green,
body.qiwo-dark .admin-login-admin .admin-login-link:hover,
body.qiwo-dark .admin-login-admin .admin-login-pass-toggle,
body.qiwo-dark .admin-login-admin .admin-login-input::placeholder { color: #E0F2F1; }
.admin-auth-selection .sel-inst-arrow { color: #0B2947; }
.admin-auth-selection .sel-inst-card { box-shadow: 0 10px 25px rgba(11,41,71,.5); }
body.qiwo-dark .admin-auth-selection .sel-inst-card,
body.qiwo-dark .admin-auth-selection .sel-inst-item { background: #1A2535; border-color: #D1D5DB; }
body.qiwo-dark .admin-auth-selection .sel-inst-title,
body.qiwo-dark .admin-auth-selection .sel-inst-nombre,
body.qiwo-dark .admin-auth-selection .sel-inst-sub,
body.qiwo-dark .admin-auth-selection .sel-inst-ruc,
body.qiwo-dark .admin-auth-selection .sel-inst-cerrar,
body.qiwo-dark .admin-auth-selection .sel-inst-arrow { color: #E0F2F1; }
body.qiwo-dark .admin-auth-selection .sel-inst-icon { background: #E0F2F1; color: #0B2947; }
body.qiwo-dark .admin-auth-selection .sel-inst-card svg path[fill="#0B2947"] { fill: #E0F2F1; }
body.qiwo-dark .admin-auth-selection .sel-inst-icon svg path[fill="#0B2947"] { fill: #0B2947; }
.admin-legal .legal-card { background: #FFFFFF; color: #0B2947; }
.admin-legal .legal-titulo,
.admin-legal .legal-updated,
.admin-legal .legal-card h2,
.admin-legal .legal-card p,
.admin-legal .legal-card li,
.admin-legal .legal-card a { color: #0B2947 !important; }
.admin-legal .legal-brand svg path[fill="#0F9375"] { fill: #0F9375; }
body.qiwo-dark .admin-legal { background: #1A2535; }
body.qiwo-dark .admin-legal .legal-card { background: #1A2535; color: #E0F2F1; border-color: #D1D5DB; }
body.qiwo-dark .admin-legal .legal-titulo,
body.qiwo-dark .admin-legal .legal-updated,
body.qiwo-dark .admin-legal .legal-card h2,
body.qiwo-dark .admin-legal .legal-card p,
body.qiwo-dark .admin-legal .legal-card li,
body.qiwo-dark .admin-legal .legal-card a { color: #E0F2F1 !important; }
body.qiwo-dark .admin-legal .legal-brand { color: #E0F2F1; }
body.qiwo-dark .admin-legal .legal-brand svg path { fill: #E0F2F1; }

body .admin-content .admin-alumnos-total { color: #0B2947; background: #E0F2F1; padding: 4px 12px; border-radius: 8px; font-size: 13px; font-weight: 600; white-space: nowrap; flex-shrink: 0; }
body.qiwo-dark .admin-content .admin-alumnos-total { color: #0B2947; background: #E0F2F1; }

.admin-login-admin .admin-login-logo-banner .login-product-sub,
body.qiwo-dark .admin-login-admin .admin-login-logo-banner .login-product-sub { color: #E0F2F1; }
.admin-login-admin .login-legal-links a,
.admin-login-admin .login-legal-links span { color: #0B2947; }
body.qiwo-dark .admin-login-admin .login-legal-links a,
body.qiwo-dark .admin-login-admin .login-legal-links span { color: #E0F2F1; }
.admin-login-admin .login-install-card,
.admin-login-admin .login-instalada-card,
.admin-login-admin .login-sesion-viva { background: #E0F2F1; border-color: #D1D5DB; color: #0B2947; }
.admin-login-admin .login-register-title,
.admin-login-admin .login-register-action,
.admin-login-admin .login-instalada-titulo,
.admin-login-admin .login-instalada-sub,
.admin-login-admin .login-sesion-titulo,
.admin-login-admin .login-sesion-nombre { color: #0B2947; }
.admin-login-admin .login-instalada-abrir,
.admin-login-admin .login-instalada-revisar,
.admin-login-admin .login-sesion-continuar { background: #0B2947; color: #FFFFFF; }
.admin-legal { background: #ECEDE7; }
.admin-legal .legal-card { border-color: #D1D5DB; box-shadow: 0 2px 12px rgba(11,41,71,.06); }
body.qiwo-dark .admin-legal .legal-brand span,
body.qiwo-dark .admin-legal .legal-card strong { color: #E0F2F1; }

/* Estados compartidos también se usan en otros portales: alcance exclusivo Admin. */
body .admin-shell .tutor-child-card-data .badge-matricula-inactiva,
body.qiwo-dark .admin-shell .tutor-child-card-data .badge-matricula-inactiva { background: #ECEDE7; color: #0B2947; }
body .admin-shell .comunicado-card,
body.qiwo-dark .admin-shell .comunicado-card { background: var(--admin-surface); border-color: #D1D5DB; }
body .admin-shell .comunicado-card.comunicado-urgente,
body.qiwo-dark .admin-shell .comunicado-card.comunicado-urgente { background: #E0F2F1; border-color: #0B2947; }
body .admin-shell .comunicado-card .comunicado-titulo,
body .admin-shell .comunicado-card .comunicado-mensaje,
body .admin-shell .comunicado-card .comunicado-fecha,
body.qiwo-dark .admin-shell .comunicado-card .comunicado-titulo,
body.qiwo-dark .admin-shell .comunicado-card .comunicado-mensaje,
body.qiwo-dark .admin-shell .comunicado-card .comunicado-fecha { color: var(--admin-ink); }
body .admin-shell .comunicado-card.comunicado-urgente .comunicado-titulo,
body .admin-shell .comunicado-card.comunicado-urgente .comunicado-mensaje,
body .admin-shell .comunicado-card.comunicado-urgente .comunicado-fecha,
body.qiwo-dark .admin-shell .comunicado-card.comunicado-urgente .comunicado-titulo,
body.qiwo-dark .admin-shell .comunicado-card.comunicado-urgente .comunicado-mensaje,
body.qiwo-dark .admin-shell .comunicado-card.comunicado-urgente .comunicado-fecha { color: #0B2947; }
.admin-shell .up-hab--ocasional { background: #0B2947; }
.admin-shell .up-hab--unavez { background: #ECEDE7; }
.admin-shell .up-hab--dejo { background: #E0F2F1; }
body .admin-shell .up-hab--nunca,
body.qiwo-dark .admin-shell .up-hab--nunca { background: #D1D5DB; }
.admin-shell .up-punto.up-hab--ocasional { border-radius: 0; }
.admin-shell .up-punto.up-hab--unavez { border-radius: 0; transform: rotate(45deg); border: 1px solid #0B2947; }
.admin-shell .up-punto.up-hab--dejo { border: 2px solid #0B2947; }
.admin-shell .up-punto.up-hab--nunca { border-radius: 2px; }
.admin-shell .up-chart text { fill: #0B2947; }
body.qiwo-dark .admin-shell .up-chart text { fill: #E0F2F1; }
.admin-shell .up-chart-grid { stroke: #D1D5DB; }
.admin-shell .up-bar--suave { fill: #E0F2F1; }
body.qiwo-dark .admin-shell .up-bar--suave { fill: #D1D5DB; }
.admin-shell .sal-punto--aviso { background: #0B2947; border-radius: 0; transform: rotate(45deg); }
.admin-shell .sal-punto--neutro { background: #D1D5DB; }
body .admin-shell .sal-tinte--ok,
body .admin-shell .sal-tinte--aviso,
body.qiwo-dark .admin-shell .sal-tinte--ok,
body.qiwo-dark .admin-shell .sal-tinte--aviso { background: #E0F2F1; border-color: #0F9375; color: #0B2947; }
body .admin-shell .sal-tinte--alerta,
body.qiwo-dark .admin-shell .sal-tinte--alerta { background: var(--admin-surface); border-color: #DC2626; color: var(--admin-ink); }
body .admin-shell .sal-tinte--neutro,
body.qiwo-dark .admin-shell .sal-tinte--neutro { background: var(--admin-surface); border-color: #D1D5DB; color: var(--admin-ink); }
body .admin-shell .sal-sede-comp,
body.qiwo-dark .admin-shell .sal-sede-comp { color: var(--admin-ink); }
.admin-login-admin .login-brand span,
body.qiwo-dark .admin-login-admin .login-brand span { color: #FFFFFF; }
.admin-login-admin + .qiwo-theme-fab { background: #FFFFFF; color: #0B2947; border-color: #D1D5DB; }
body.qiwo-dark .admin-login-admin + .qiwo-theme-fab { background: #1A2535; color: #E0F2F1; border-color: #D1D5DB; }

.admin-auth-selection .sel-inst-empty,
body.qiwo-dark .admin-auth-selection .sel-inst-empty { color: #0B2947; background: #E0F2F1; border: 1px solid #D1D5DB; }
body .admin-shell .badge-usuario-inactivo,
body.qiwo-dark .admin-shell .badge-usuario-inactivo { background: #ECEDE7; color: #0B2947; }
body .admin-shell .admin-comunicados-legend,
body.qiwo-dark .admin-shell .admin-comunicados-legend { background: var(--admin-surface); border: 1px solid #D1D5DB; }
.admin-shell .admin-politica-guide { background: var(--admin-surface); }
body .admin-shell .cred-vista-tab-active,
body.qiwo-dark .admin-shell .cred-vista-tab-active { border-bottom-color: #0F9375; }
.admin-shell input[type="checkbox"],
.admin-shell input[type="radio"] { accent-color: #0F9375; color: var(--admin-ink); }
body .admin-content input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]):not([type="color"]):not([type="range"]),
body .admin-content textarea,
body .admin-content select,
body.qiwo-dark .admin-content input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]):not([type="color"]):not([type="range"]),
body.qiwo-dark .admin-content textarea,
body.qiwo-dark .admin-content select { background-color: var(--admin-surface) !important; color: var(--admin-ink) !important; border-color: #D1D5DB; }
body .admin-shell .sal-tinte--ok .sal-sede-comp,
body .admin-shell .sal-tinte--aviso .sal-sede-comp,
body.qiwo-dark .admin-shell .sal-tinte--ok .sal-sede-comp,
body.qiwo-dark .admin-shell .sal-tinte--aviso .sal-sede-comp { color: #0B2947; }
body .admin-shell :is(.sal-tinte--ok, .sal-tinte--aviso) :is(.sal-sede-datos dt, .sal-sede-pie, .sal-sede-num small, .sal-resumen-detalle),
body.qiwo-dark .admin-shell :is(.sal-tinte--ok, .sal-tinte--aviso) :is(.sal-sede-datos dt, .sal-sede-pie, .sal-sede-num small, .sal-resumen-detalle) { color: #0B2947; }
body .admin-content input::placeholder,
body .admin-content textarea::placeholder,
body.qiwo-dark .admin-content input::placeholder,
body.qiwo-dark .admin-content textarea::placeholder { color: var(--admin-ink) !important; opacity: .75; }
body .admin-content :is(.cred-search-box, .qiwo-search-box) > svg,
body .admin-content :is(.cred-search-box, .qiwo-search-box) > svg path,
body.qiwo-dark .admin-content :is(.cred-search-box, .qiwo-search-box) > svg,
body.qiwo-dark .admin-content :is(.cred-search-box, .qiwo-search-box) > svg path { fill: var(--admin-ink); }

body.qiwo-dark .admin-content tr.admin-row-selected :is(.qiwo-person-sub, .qiwo-text-muted) { color: #E0F2F1; }


/* Credenciales de alumnos y personal: pestaña persistida en la URL. */
.cred-personas-tabs { display:flex; gap:6px; flex-wrap:wrap; margin:0 0 20px; padding:5px; border:1px solid #D1D5DB; border-radius:12px; width:fit-content; max-width:100%; }
body .admin-content .cred-personas-tab { display:flex; align-items:center; justify-content:center; min-height:44px; padding:10px 24px; border-radius:8px; color:var(--admin-ink); text-decoration:none; font-weight:600; }
body .admin-content .cred-personas-tab.is-active { background:#E0F2F1; color:#0B2947; }
.cred-personas-tab:focus-visible { outline:2px solid #0F9375; outline-offset:2px; }
.cred-personal-toolbar { display:flex; align-items:center; flex-wrap:wrap; gap:12px; margin-bottom:16px; }
.cred-personal-toolbar .qiwo-search-box { flex:1 1 260px; min-width:0; }
.cred-personal-filter { display:flex; align-items:center; gap:8px; font-size:13px; color:var(--admin-ink); }
.cred-personal-state { display:inline-flex; padding:5px 9px; border-radius:999px; white-space:nowrap; background:#ECEDE7; color:#0B2947; font-size:12px; font-weight:600; }
.cred-personal-state.is-active { background:#E0F2F1; }
.cred-personal-actions { display:flex; flex-wrap:wrap; gap:10px; margin:16px 0; }
.cred-personal-form { display:grid; gap:8px; }
.cred-personal-form p { line-height:1.55; margin:4px 0 8px; }
.cred-personal-form label { color:var(--admin-ink); font-size:13px; font-weight:600; }
.cred-personal-help { color:var(--admin-muted); font-size:13px; }

.cred-personal-value { overflow-wrap:anywhere; }
/* ══ Credenciales del personal (12/10/2026, Claude SkyMars) ══
   Filas con columnas también en celular (Jordy: "es más cómodo que tarjetas") y la ficha
   como diálogo, igual que Asignar de alumnos. La tabla NO usa .qiwo-table a propósito:
   la regla general del admin híbrido convierte toda .qiwo-table en tarjetas en celular. */
.cp-sr { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }
.cp-tabla-wrap { overflow:hidden; }
.cp-tabla { width:100%; border-collapse:collapse; table-layout:auto; font-size:14px; color:var(--admin-ink, #0B2947); }
.cp-tabla thead th { padding:11px 16px; text-align:left; font-size:11px; font-weight:700; letter-spacing:.07em; text-transform:uppercase; color:#0B2947; background:#E0F2F1; border-bottom:1px solid #D1D5DB; white-space:nowrap; }
.cp-tabla tbody td { padding:12px 16px; border-bottom:1px solid #D1D5DB; vertical-align:middle; }
.cp-tabla tbody tr:last-child td { border-bottom:0; }
.cp-fila { cursor:pointer; }
@media (hover:hover) { .cp-fila:hover td { background:#ECEDE7; } }
.cp-fila.is-seleccionada td { background:#E0F2F1; }
body.qiwo-dark .cp-fila:hover td, body.qiwo-dark .cp-fila.is-seleccionada td { background:#1A2535; }
.cp-nombre { display:block; padding:0; border:0; background:none; font:inherit; font-weight:600; color:inherit; text-align:left; cursor:pointer; }
.cp-nombre:focus-visible { outline:2px solid #0F9375; outline-offset:2px; border-radius:4px; }
.cp-sub { margin-top:2px; font-size:12px; color:var(--admin-muted, #0B2947); opacity:.85; }
.cp-col-cred { white-space:nowrap; }
.cp-estado { display:inline-flex; align-items:center; padding:3px 9px; border-radius:999px; background:#ECEDE7; border:1px solid #D1D5DB; color:#0B2947; font-size:12px; font-weight:600; white-space:nowrap; }
.cp-estado.is-activa { background:#E0F2F1; border-color:#0F9375; }
.cp-estado.is-revisar { background:#ECEDE7; border-color:#0B2947; }
.cp-valor { margin-left:8px; font-family:ui-monospace, SFMono-Regular, Consolas, monospace; font-size:13px; letter-spacing:.02em; }
.cp-col-accion, .cp-th-accion { width:1%; text-align:right; white-space:nowrap; }
.cp-accion { display:inline-flex; align-items:center; gap:2px; color:#0B2947; font-size:13px; font-weight:700; }
.cp-accion svg { color:#0F9375; }
body.qiwo-dark .cp-accion { color:#E0F2F1; }

/* Diálogo */
.cp-modal-header { align-items:flex-start; gap:12px; }
.cp-identidad { display:flex; align-items:center; gap:12px; min-width:0; }
.cp-identidad h3 { margin:0 0 2px; font-size:17px; line-height:1.3; overflow-wrap:anywhere; }
.cp-identidad p { margin:0; font-size:13px; opacity:.8; }
.cp-avatar { display:flex; align-items:center; justify-content:center; width:44px; height:44px; flex:0 0 44px; border-radius:50%; background:#0B2947; color:#ECEDE7; font-size:15px; font-weight:700; }
.cp-form { display:flex; flex-direction:column; min-height:0; flex:1; }
.cp-modal .qiwo-modal-body { display:grid; gap:10px; }
.cp-etiqueta, .cp-label { font-size:12px; font-weight:700; letter-spacing:.03em; }
.cp-credencial-actual { display:grid; gap:8px; }
.cp-credencial-linea { display:flex; align-items:center; flex-wrap:wrap; gap:8px; }
.cp-credencial-linea .cp-valor { margin-left:0; }
.cp-valor-grande { font-size:18px; font-weight:700; }
.cp-ayuda { margin:0; font-size:13px; line-height:1.5; opacity:.85; }
.cp-modal .qiwo-modal-error { margin:0; }
.cp-modal textarea.qiwo-input { width:100%; box-sizing:border-box; font-family:inherit; font-size:15px; resize:vertical; }
.cp-input-valor { width:100%; max-width:100%; box-sizing:border-box; min-height:48px; padding:10px 14px; font-size:18px; font-family:ui-monospace, SFMono-Regular, Consolas, monospace; letter-spacing:.06em; }
.cp-nfc { display:flex; align-items:center; flex-wrap:wrap; gap:10px; padding:12px 14px; border:1px solid #D1D5DB; border-radius:12px; background:#ECEDE7; color:#0B2947; font-size:13px; font-weight:600; }
.cp-nfc span { flex:1 1 170px; }
.cp-nfc svg { flex:0 0 auto; color:#0B2947; }
/* Probar credencial (23/10/2026): resultado teñido entero, sin franja lateral; solo los 5 colores de marca. */
.cp-prueba-resultado { display:flex; flex-direction:column; gap:4px; margin:12px 0; padding:12px 14px; border:1px solid #D1D5DB; border-radius:12px; background:#ECEDE7; color:#0B2947; font-size:13px; }
.cp-prueba-resultado strong { font-size:15px; }
.cp-prueba-resultado.is-ok { background:#E0F2F1; border-color:#0F9375; }
.cp-prueba-resultado.is-ok strong { color:#0F9375; }
body.qiwo-dark .cp-prueba-resultado { background:#1A2535; border-color:#D1D5DB; color:#ECEDE7; }
body.qiwo-dark .cp-prueba-resultado.is-ok { border-color:#0F9375; }
body.qiwo-dark .cp-prueba-resultado.is-ok strong { color:#E0F2F1; }
.cp-nfc.is-escuchando { border-color:#0F9375; background:#E0F2F1; }
.cp-nfc.is-escuchando svg { color:#0F9375; animation:cp-nfc-pulso 1.4s ease-in-out infinite; }
@keyframes cp-nfc-pulso { 50% { opacity:.35; } }
@media (prefers-reduced-motion: reduce) { .cp-nfc.is-escuchando svg { animation:none; } }
.cp-modal-footer .cp-btn-revocar { margin-right:auto; }


/* Botones NFC / QR de Asignar credencial: .admin-shell .metodo-btn pintaba el texto azul marino
   y le ganaba al estado activo (fondo azul marino) — el botón elegido se veía vacío. */
.admin-shell .metodo-btn.metodo-btn-active, body.qiwo-dark .admin-shell .metodo-btn.metodo-btn-active { background:#0B2947; border-color:#0B2947; color:#ECEDE7; }

@media (max-width:767px) {
    /* Personal (12/10/2026): filas compactas como en Credenciales del personal. Especialidad,
       Portal y Estado se ven en la ficha y en el filtro; en el celular cortaban la tabla. */
    .pers-chips { flex:1 1 100%; flex-wrap:nowrap; overflow-x:auto; min-width:0; max-width:100%; padding-bottom:4px; }
    .pers-chips .qiwo-chip { flex:0 0 auto; }
    .qiwo-toolbar > div:has(> .pers-chips) { min-width:0; width:100%; max-width:100%; }
    .qiwo-table.pers-tabla { min-width:0; }
    .pers-tabla th:nth-child(3), .pers-tabla td:nth-child(3), .pers-tabla th:nth-child(4), .pers-tabla td:nth-child(4), .pers-tabla th:nth-child(5), .pers-tabla td:nth-child(5), .pers-tabla th:nth-child(6), .pers-tabla td:nth-child(6) { display:none; }
    .pers-tabla thead th, .pers-tabla tbody td { padding:10px 8px; }
    .pers-tabla .qiwo-avatar { display:none; }
    .pers-tabla .qiwo-row-actions-menu, .pers-tabla .qiwo-row-actions-trigger { width:auto; min-width:0; }
    .pers-tabla .qiwo-row-actions-trigger { padding:6px 10px; gap:4px; }
    .pers-tabla thead th:last-child { font-size:0; padding:0; }
    .pers-tabla .qiwo-row-actions-cell { width:auto; min-width:0; }
    .cred-personal-toolbar { display:grid; grid-template-columns:1fr auto; gap:10px; }
    .cred-personal-toolbar .qiwo-search-box { grid-column:1/-1; flex:none; min-height:0; height:auto; }
    .cp-chips { flex-wrap:nowrap; overflow-x:auto; padding-bottom:4px; margin-bottom:12px; }
    .cp-chips .qiwo-chip { flex:0 0 auto; }
    /* Filas compactas: Personal | Cargo | Credencial. La flecha sobra: toda la fila se toca. */
    .cp-tabla thead th, .cp-tabla tbody td { padding:10px 8px; }
    .cp-tabla thead th:first-child, .cp-tabla tbody td:first-child { padding-left:12px; }
    .cp-tabla thead th:last-child, .cp-tabla tbody td:last-child { padding-right:12px; }
    .cp-col-accion, .cp-th-accion { display:none; }
    .cp-nombre { font-size:13px; line-height:1.3; }
    .cp-sub { font-size:11px; }
    .cp-tabla .pers-cargo-docente, .cp-tabla .pers-cargo-auxiliar, .cp-tabla .pers-cargo-administrativo, .cp-tabla .pers-cargo-servicio { padding:3px 8px; font-size:11px; }
    .cp-col-cred { white-space:normal; }
    .cp-col-cred .cp-valor { display:block; margin:4px 0 0; font-size:12px; }
    .cp-estado { font-size:11px; padding:2px 8px; }
    .cp-modal-footer { flex-wrap:wrap; }
    .cp-modal-footer > button { flex:1 1 140px; justify-content:center; }
    .cp-modal-footer .cp-btn-revocar { margin-right:0; }
}

/* ══ Reconciliación del modo oscuro del Admin (09/10/2026, Claude SkyMars) ══
   El rework dejó en oscuro bordes #D1D5DB y fondos claros (#E0F2F1, #ECEDE7,
   blanco) pensados para el tema claro: se veían como líneas y parches blancos.
   Este bloque va al final a propósito y devuelve las capas de producción
   (99b0bd6): fondo #0F1923, superficies #1A2535, bordes casi invisibles y
   chips con tinte, no con fondo claro. Hallazgos medidos recorriendo 27
   pantallas en oscuro. */
body.qiwo-dark .admin-shell .admin-topbar { border-bottom-color: rgba(255,255,255,.06) !important; }
body.qiwo-dark .admin-shell .admin-content :is(.admin-stat-card, .admin-hub-card, .qiwo-table-card, .qiwo-table-footer,
    .qiwo-search-box, .cred-search-box, .qiwo-input, input, select, textarea, .qiwo-row-actions-trigger,
    .qiwo-btn-secondary, .qiwo-chip, .qiwo-chip-filtro, .cred-chip, .cred-personas-tabs, .admin-comunicados-legend,
    .admin-politica-guide, .qiwo-apo-count, .admin-alert-warning, .pers-resumen-card, button) {
    border-color: rgba(255,255,255,.10) !important;
}
body.qiwo-dark .admin-shell .admin-content :is(input, select, textarea, .qiwo-input, .qiwo-search-box, .cred-search-box) {
    background-color: #0F1923 !important; color: #E2E8F0 !important;
}
body.qiwo-dark .admin-shell .admin-content .admin-stat-value { background: transparent !important; }
body.qiwo-dark .admin-shell .admin-content .admin-alert-error {
    background: rgba(220,38,38,.10) !important; border-color: rgba(220,38,38,.30) !important; color: #FCB3B3 !important;
}
/* Chips, badges, avatares e íconos con tinte verde de marca */
body.qiwo-dark .admin-shell .admin-content :is(.qiwo-chip-active, .qiwo-chip-filtro.activo, .cred-personas-tab.is-active,
    .qiwo-avatar, .admin-hub-card-icon, .admin-badge, .qiwo-nivel-chip, .pers-dia-activo, .tut-chip, .qiwo-tu-cuenta,
    .admin-alumnos-total, .badge-usuario-activo, .qiwo-badge-warn, .badge-entrada) {
    background: rgba(15,147,117,.18) !important; color: #A7F3D0 !important; border-color: rgba(15,147,117,.35) !important;
}
/* Superficies neutras (crema y gris del tema claro) */
body.qiwo-dark .admin-shell .admin-content :is(.pers-resumen-card, .pers-dia, .tut-aviso, tr.tut-sin-tutor,
    .admin-alert-warning,  .qiwo-btn-secondary, .qiwo-row-actions-trigger, .qiwo-chip:not(.qiwo-chip-active)) {
    background: rgba(255,255,255,.05) !important; color: #E2E8F0 !important;
}
/* Elementos sin clase con fondo claro escrito en línea (style="background:#E0F2F1"),
   en Secciones, Puntos de acceso, Política, Profesores, Materias, Comunicados… */
body.qiwo-dark .admin-shell .admin-content :is(span, div)[style*="background:#E0F2F1"],
body.qiwo-dark .admin-shell .admin-content :is(span, div)[style*="background: #E0F2F1"] {
    background: rgba(15,147,117,.18) !important; color: #A7F3D0 !important;
}
body.qiwo-dark .admin-shell .admin-content :is(span, div)[style*="background:#D1D5DB"],
body.qiwo-dark .admin-shell .admin-content :is(span, div)[style*="background: #D1D5DB"],
body.qiwo-dark .admin-shell .admin-content :is(span, div, button)[style*="background:#ECEDE7"],
body.qiwo-dark .admin-shell .admin-content :is(span, div, button)[style*="background: #ECEDE7"],
body.qiwo-dark .admin-shell .admin-content button:not([class]) {
    background: rgba(255,255,255,.06) !important; color: #E2E8F0 !important; border-color: rgba(255,255,255,.10) !important;
}

/* Contadores de pendientes en rojo, como las notificaciones del celular (pedido de Jordy 09/10).
   Solo para conteos que piden acción; las marcas de rol (D, A) siguen neutras. */
.admin-shell .nav-badge-role.nav-badge-alerta,
.admin-sidebar-hybrid .nav-badge-role.nav-badge-alerta {
    background: #DC2626 !important; color: #FFFFFF !important; border: 0 !important;
    font-weight: 700; min-width: 18px; justify-content: center; text-align: center;
}
.admin-hub-card-title .nav-badge-alerta { display: inline-flex; margin-left: 6px; padding: 1px 7px; border-radius: 10px; font-size: 11px; vertical-align: middle; }
.admin-nav-group-link .admin-nav-group-total { margin-left: auto; }

/* Modo oscuro: separadores de filas y borde de la tabla tan tenues como el resto */
body.qiwo-dark .admin-shell .admin-content :is(table, thead, tbody, tr, th, td, .qiwo-table, .qiwo-table-card) {
    border-color: rgba(255,255,255,.07) !important;
}

/* ══ Inicio nuevo del Admin (09/10/2026, ADR 0039) ══
   Arriba lo que pide acción, al medio asistencia y lectoras, abajo la actividad.
   Solo los 5 colores de marca + el rojo de alerta #DC2626. */
.inicio-header { display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 18px; }
.inicio-kicker { margin: 0 0 2px; font-size: 13px; color: #0F9375; font-weight: 600; }
.inicio-refrescar { display: inline-flex; align-items: center; gap: 6px; }
.inicio-refresco-config { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 10px; font-size: 12px; color: #0B2947; }
.inicio-refresco-config select { font: inherit; color: #0B2947; background: #FFFFFF; border: 1px solid #D1D5DB; border-radius: 6px; padding: 3px 6px; min-height: 32px; }
.inicio-refresco-config select:focus-visible { outline: 2px solid #0F9375; outline-offset: 2px; }
.inicio-refresco-config select:disabled { opacity: .65; }
.inicio-card { background: #FFFFFF; border: 1px solid #D1D5DB; border-radius: 14px; padding: 16px 18px; margin-bottom: 16px; }
.inicio-card-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 10px; }
.inicio-card-head h2 { margin: 0; font-size: 15px; font-weight: 700; color: #0B2947; display: inline-flex; align-items: center; gap: 8px; }
.inicio-atencion .inicio-card-head { justify-content: flex-start; }
.inicio-pendientes { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.inicio-pendiente { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border-radius: 10px; background: #E0F2F1; color: #0B2947; }
.inicio-pendiente.is-urgente { background: rgba(220,38,38,.08); }
.inicio-pendiente.is-urgente strong { color: #DC2626; }
.inicio-pendiente-texto { flex: 1; min-width: 0; font-size: 14px; }
.inicio-pendiente-accion { flex-shrink: 0; text-decoration: none; padding: 6px 14px; }
.inicio-sede:not(.is-urgente) { background: #F3F4F6; }
.inicio-sede-detalle { display: block; font-size: 13px; opacity: .85; margin-top: 2px; }
.inicio-todo-ok { display: flex; align-items: center; gap: 8px; margin: 0; color: #0F9375; font-weight: 600; }
.inicio-grid { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 16px; }
.inicio-grid > .inicio-card, .inicio-columna > .inicio-card { margin-bottom: 0; }
.inicio-grid { margin-bottom: 16px; }
.inicio-columna { display: grid; gap: 16px; align-content: start; }
.inicio-grande { margin: 2px 0 10px; color: #0B2947; font-size: 15px; }
.inicio-grande span { font-size: 34px; font-weight: 800; margin-right: 4px; }
.inicio-grande--chico span { font-size: 26px; }
.inicio-barra { display: flex; height: 12px; border-radius: 6px; overflow: hidden; background: #D1D5DB; }
.inicio-barra .is-puntual { background: #0F9375; }
.inicio-barra .is-tarde { background: #CA8A04; }
.inicio-leyenda { display: flex; flex-wrap: wrap; gap: 14px; margin: 10px 0 12px; font-size: 13px; color: #0B2947; }
.inicio-leyenda i { display: inline-block; width: 9px; height: 9px; border-radius: 50%; margin-right: 6px; background: #D1D5DB; }
.inicio-leyenda i.is-puntual { background: #0F9375; }
.inicio-leyenda i.is-tarde { background: #CA8A04; }
.inicio-grados { display: grid; gap: 7px; border-top: 1px solid #D1D5DB; padding-top: 12px; }
.inicio-grado { display: grid; grid-template-columns: 80px 1fr 64px; align-items: center; gap: 10px; font-size: 13px; color: #0B2947; }
.inicio-grado-barra { height: 7px; border-radius: 4px; background: #D1D5DB; overflow: hidden; }
.inicio-grado-barra span { display: block; height: 100%; background: #0F9375; }
.inicio-grado-num { text-align: right; font-variant-numeric: tabular-nums; }
.inicio-lectoras, .inicio-actividad { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.inicio-lectoras > li { font-size: 13px; color: #0B2947; padding: 8px 0; }
.inicio-lectora-cabecera { display: flex; align-items: center; gap: 10px; }
.inicio-dispositivos { list-style: none; margin: 7px 0 0 20px; padding: 0; display: grid; gap: 6px; }
.inicio-dispositivos li { display: grid; gap: 2px; overflow-wrap: anywhere; }
.inicio-dispositivos small { font-size: 12px; opacity: .8; }
.inicio-dispositivos-aviso { display: block; margin: 8px 0 0; padding: 7px 9px; border-radius: 7px; font-size: 12px; color: #0B2947; background: #E0F2F1; }
.inicio-sede-dispositivo { display: block; font-size: 12px; margin-top: 6px; overflow-wrap: anywhere; }
.inicio-punto { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; }
.inicio-punto.is-ok { background: #0F9375; }
.inicio-punto.is-mal { background: #DC2626; }
.inicio-lectora-nombre { flex: 1; min-width: 0; font-weight: 600; }
.inicio-lectora-estado { text-align: right; opacity: .8; }
.inicio-actividad li { display: grid; grid-template-columns: 70px minmax(0, 1fr) auto; align-items: center; gap: 10px; font-size: 13px; color: #0B2947; padding-bottom: 8px; border-bottom: 1px solid #ECEDE7; }
.inicio-actividad li:last-child { border-bottom: 0; padding-bottom: 0; }
.inicio-hora { font-weight: 700; font-variant-numeric: tabular-nums; }
.inicio-quien small { display: block; opacity: .7; }
.inicio-vacio { margin: 0; font-size: 13px; color: #0B2947; opacity: .75; }
.inicio-pie { text-align: center; font-size: 12px; color: #0B2947; opacity: .65; margin: 4px 0 8px; }
@media (max-width: 900px) {
    .inicio-grid { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 520px) {
    .inicio-pendiente { flex-wrap: wrap; }
    .inicio-lectora-cabecera { flex-wrap: wrap; }
    .inicio-lectora-estado { width: 100%; text-align: left; margin-left: 20px; }
    .inicio-actividad li { grid-template-columns: 56px minmax(0, 1fr); }
    .inicio-actividad li .qiwo-estado { grid-column: 2; justify-self: start; }
}
body.qiwo-dark .admin-shell .inicio-card { background: #1A2535; border-color: rgba(255,255,255,.08); }
body.qiwo-dark .admin-shell :is(.inicio-card-head h2, .inicio-grande, .inicio-leyenda, .inicio-grado, .inicio-lectoras li, .inicio-actividad li, .inicio-vacio, .inicio-pie, .inicio-pendiente) { color: #E2E8F0; }
body.qiwo-dark .admin-shell .inicio-pendiente { background: rgba(15,147,117,.14); }
body.qiwo-dark .admin-shell .inicio-refresco-config { color: #ECEDE7; }
body.qiwo-dark .admin-shell .inicio-refresco-config select { background: #0B2947; color: #ECEDE7; border-color: #D1D5DB; }
body.qiwo-dark .admin-shell .inicio-dispositivos-aviso { background: rgba(15,147,117,.14); color: #ECEDE7; }
body.qiwo-dark .admin-shell .inicio-pendiente.is-urgente { background: rgba(220,38,38,.12); }
body.qiwo-dark .admin-shell .inicio-pendiente.is-urgente strong { color: #FCA5A5; }
body.qiwo-dark .admin-shell .inicio-sede:not(.is-urgente) { background: rgba(255,255,255,.05); }
body.qiwo-dark .admin-shell :is(.inicio-barra, .inicio-grado-barra) { background: rgba(255,255,255,.10); }
body.qiwo-dark .admin-shell .inicio-barra .is-tarde, body.qiwo-dark .admin-shell .inicio-leyenda i.is-tarde { background: #FDE68A; }
body.qiwo-dark .admin-shell .inicio-grados { border-top-color: rgba(255,255,255,.08); }
body.qiwo-dark .admin-shell .inicio-actividad li { border-bottom-color: rgba(255,255,255,.06); }
body.qiwo-dark .admin-shell .inicio-kicker, body.qiwo-dark .admin-shell .inicio-todo-ok { color: #5EEAD4; }

/* Tarjeta de contexto del menú (09/10/2026): dónde estás + cambiar de sede en un solo lugar */
.admin-contexto { padding: 4px 12px 12px; display: grid; gap: 4px; }
.admin-contexto-sede { display: flex; align-items: center; gap: 10px; width: 100%; padding: 10px 12px; border-radius: 10px; border: 1px solid rgba(224,242,241,.14); background: rgba(224,242,241,.06); color: #ECEDE7; text-align: left; cursor: pointer; font: inherit; }
.admin-contexto-sede:hover { background: rgba(224,242,241,.12); }
.admin-contexto-sede.is-fija { cursor: default; }
.admin-contexto-sede:focus-visible, .admin-contexto-inst-btn:focus-visible { outline: 2px solid #0F9375; outline-offset: 2px; }
.admin-contexto-textos { flex: 1; min-width: 0; display: grid; }
.admin-contexto-inst { font-size: 10px; letter-spacing: .06em; text-transform: uppercase; color: #0F9375; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.admin-contexto-nombre { font-size: 14px; font-weight: 700; color: #FFFFFF; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.admin-contexto-inst-btn { justify-self: start; background: none; border: 0; padding: 2px 4px; color: #D1D5DB; font-size: 11px; text-decoration: underline; cursor: pointer; }
.admin-sidebar-hybrid.is-collapsed .admin-contexto { display: none; }
.inicio-punto.is-off { background: #D1D5DB; }

/* Inicio: cada grado se toca para ver quiénes faltan */
button.inicio-grado { width: 100%; border: 0; background: none; padding: 3px 6px; margin: 0 -6px; border-radius: 8px; font: inherit; text-align: left; cursor: pointer; }
button.inicio-grado:hover, button.inicio-grado.is-abierto { background: #E0F2F1; }
button.inicio-grado:focus-visible { outline: 2px solid #0F9375; outline-offset: 1px; }
.inicio-faltan { margin: 2px 0 8px; padding: 10px 12px; border-radius: 10px; background: #ECEDE7; color: #0B2947; font-size: 13px; }
.inicio-faltan-titulo { margin: 0 0 6px; font-weight: 700; }
.inicio-faltan ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; max-height: 260px; overflow: auto; }
.inicio-faltan li { display: flex; justify-content: space-between; gap: 10px; }
.inicio-faltan small { opacity: .7; white-space: nowrap; }
body.qiwo-dark .admin-shell button.inicio-grado:hover, body.qiwo-dark .admin-shell button.inicio-grado.is-abierto { background: rgba(15,147,117,.14); }
body.qiwo-dark .admin-shell .inicio-faltan { background: rgba(255,255,255,.05); color: #E2E8F0; }
/* Alumnos: todos los apoderados, uno debajo de otro (09/10/2026) */
.qiwo-apo-lista { display: grid; gap: 2px; }
.qiwo-apo-fila { font-size: 13px; line-height: 1.35; color: #0B2947; }
.qiwo-apo-fila:first-child { font-weight: 600; }
body.qiwo-dark .admin-shell .qiwo-apo-fila { color: #E2E8F0; }

/* Ruta de migas, Atrás y avisos en el menú colapsado o en el botón hamburguesa (09/10/2026) */
.admin-topbar-left { min-width: 0; }
.admin-atras { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; flex-shrink: 0; border-radius: 9px; border: 1px solid #D1D5DB; background: #FFFFFF; color: #0B2947; cursor: pointer; }
.admin-atras:hover { background: #E0F2F1; }
.admin-atras:focus-visible, .admin-migas a:focus-visible { outline: 2px solid #0F9375; outline-offset: 2px; }
.admin-migas { display: flex; align-items: center; gap: 6px; min-width: 0; font-size: 13px; color: #0B2947; white-space: nowrap; overflow: hidden; }
.admin-migas a { color: #0F9375; text-decoration: none; font-weight: 600; }
.admin-migas a:hover { text-decoration: underline; }
.admin-migas-sep { opacity: .5; }
.admin-migas-actual { font-weight: 700; overflow: hidden; text-overflow: ellipsis; }
@media (max-width: 640px) { .admin-migas > :not(:last-child) { display: none; } }
.admin-hamburger { position: relative; }
.admin-hamburger-badge { position: absolute; top: -5px; right: -6px; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px; background: #DC2626; color: #FFFFFF; font-size: 10px; font-weight: 700; line-height: 18px; text-align: center; }
.admin-sidebar-hybrid.is-collapsed .admin-nav-item, .admin-sidebar-hybrid.is-collapsed .admin-nav-group-link { position: relative; }
.admin-sidebar-hybrid.is-collapsed .nav-badge-role.nav-badge-alerta { display: block !important; position: absolute !important; top: 4px; right: 6px; min-width: 0 !important; width: 10px; height: 10px; padding: 0 !important; border-radius: 50%; font-size: 0 !important; overflow: hidden; }
body.qiwo-dark .admin-shell .admin-atras { background: #1A2535; border-color: rgba(255,255,255,.10); color: #E2E8F0; }
body.qiwo-dark .admin-shell .admin-migas { color: #E2E8F0; }
body.qiwo-dark .admin-shell .admin-migas a { color: #5EEAD4; }
/* Menú colapsado: el punto rojo también en los accesos directos (Solicitudes) y en los grupos.
   Hacía falta más especificidad que la regla del rework que esconde los badges del riel. */
.admin-sidebar-hybrid.is-collapsed .admin-nav > .admin-nav-item > .nav-badge-role.nav-badge-alerta,
.admin-sidebar-hybrid.is-collapsed .admin-nav-group-heading .admin-nav-group-link > .nav-badge-role.nav-badge-alerta {
    display: block !important; position: absolute !important; top: 5px; right: 8px; width: 10px; height: 10px;
    min-width: 0 !important; padding: 0 !important; border-radius: 50%; font-size: 0 !important; overflow: hidden;
    background: #DC2626 !important; box-shadow: 0 0 0 2px #0B2947;
}

/* Alumnos entre tablet y laptop (768-1279): tabla en filas, no tarjetas. Se esconde Matrícula
   (casi siempre ACTIVA) para que el nombre no se aplaste. */
@media (min-width: 768px) and (max-width: 1279px) {
    body .admin-alumnos-page .qiwo-table th:nth-child(5),
    body .admin-alumnos-page .qiwo-table td:nth-child(5) { display: none; }
    body .admin-alumnos-page .qiwo-table td:first-child { min-width: 200px; }
}

/* Riel colapsado (tablet o a pedido): el logo de Qiwo arriba y el botón de expandir debajo, como en producción.
   La regla vieja del riel de tablet (768-1024) ya no toca al menú nuevo: escondía los textos aunque se expandiera. */
@media (min-width: 768px) {
    .admin-sidebar-hybrid.is-collapsed .admin-sidebar-header { flex-direction: column; gap: 10px; padding: 14px 8px; }
    .admin-sidebar-hybrid.is-collapsed .admin-sidebar-brand-wrap { justify-content: center; }
    .admin-sidebar-hybrid.is-collapsed .admin-sidebar-brand-wrap svg { width: 30px; height: 30px; }
}
@media (min-width: 768px) and (max-width: 1024px) {
    .admin-sidebar.admin-sidebar-hybrid:not(.is-collapsed) { width: 264px; }
}
/* Tablet: el menú expandido se abre ENCIMA del contenido (no lo empuja), así la tabla no se aplasta
   ni se corta "Opciones" al expandirlo. El riel de 68 px queda reservado. */
@media (min-width: 768px) and (max-width: 1024px) {
    .admin-sidebar.admin-sidebar-hybrid:not(.is-collapsed) { position: fixed; left: 0; top: 0; bottom: 0; z-index: 1000; box-shadow: 8px 0 24px rgba(11,41,71,.25); }
    .admin-shell:has(.admin-sidebar-hybrid:not(.is-collapsed)) .admin-main { margin-left: 68px; }
}

/* ══ Panel SkyMars · Testers de Play (11/10/2026, v2 aprobada por Jordy) ══ */
.admin-page-header.tp-header { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; flex-wrap: wrap; margin-bottom: 20px; }
.tp-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 12px; margin-bottom: 16px; }
.tp-kpi { background: #fff; border: 1px solid #E5E7EB; border-radius: 14px; padding: 14px 16px; display: flex; flex-direction: column; gap: 4px; }
.tp-kpi-lbl { font-size: 12px; font-weight: 600; color: #6B7280; }
.tp-kpi-val { font-size: 28px; font-weight: 700; line-height: 1.1; color: #0B2947; font-variant-numeric: tabular-nums; }
.tp-kpi-val small { font-size: 14px; font-weight: 600; opacity: .7; }
.tp-kpi-foot { font-size: 12px; color: #6B7280; }
.tp-kpi--meta { background: #085041; border-color: #085041; }
.tp-kpi--meta .tp-kpi-lbl, .tp-kpi--meta .tp-kpi-foot, .tp-kpi--meta .tp-kpi-val small { color: #9FE1CB; opacity: 1; }
.tp-kpi--meta .tp-kpi-val { color: #fff; }
.tp-meta-barra { position: relative; height: 6px; background: #0F6E56; border-radius: 3px; margin: 4px 0 2px; }
.tp-meta-fill { height: 100%; background: #5DCAA5; border-radius: 3px; }
.tp-meta-marca { position: absolute; top: -3px; width: 2px; height: 12px; background: #fff; transform: translateX(-1px); }
.tp-kpi--mal { background: #FCEBEB; border-color: #F7C1C1; }
.tp-kpi--mal .tp-kpi-lbl, .tp-kpi--mal .tp-kpi-foot { color: #A32D2D; }
.tp-kpi--mal .tp-kpi-val { color: #791F1F; }
.tp-leyenda { display: flex; flex-wrap: wrap; gap: 16px; padding: 10px 16px 0; font-size: 12px; color: #6B7280; }
.tp-leyenda span { display: inline-flex; align-items: center; gap: 6px; }
.tp-leyenda .tp-c { width: 16px; height: 16px; border-radius: 4px; }
.tp-c { width: 24px; height: 24px; border-radius: 7px; display: inline-flex; align-items: center; justify-content: center; font-style: normal; vertical-align: middle; box-sizing: border-box; }
.tp-c--si { background: #1D9E75; color: #fff; }
.tp-c--no { background: #F1F5F9; border: 1px solid #E2E8F0; }
.tp-c--futuro { background: transparent; border: 1px dashed #CBD5E1; }
.tp-c--hoy { background: #E6F1FB; }
.tp-cal { width: 100%; border-collapse: collapse; font-size: 13px; color: #334155; }
.tp-cal th, .tp-cal td { padding: 6px 3px; text-align: center; white-space: nowrap; }
.tp-cal tbody tr { border-top: 1px solid #F1F5F9; }
.tp-cal thead th { font-weight: 500; color: #6B7280; }
.tp-cal .tp-dia span { display: block; font-size: 10px; text-transform: uppercase; letter-spacing: .04em; }
.tp-cal .tp-dia b { display: block; font-size: 13px; color: #0B2947; font-variant-numeric: tabular-nums; }
.tp-cal .tp-hoy { background: #E6F1FB; }
.tp-cal-card { min-width: 0; max-width: 100%; }
.tp-cal-scroll { max-width: 100%; overscroll-behavior-x: contain; }
.tp-cal .tp-dia { min-width: 36px; }
.tp-cal .tp-google, .tp-c--google { background: #E0F2F1; }
.tp-cal .tp-hoy { background: #D1D5DB; }
.tp-cal thead .tp-hoy { border-radius: 8px 8px 0 0; }
.tp-cal tfoot .tp-hoy { border-radius: 0 0 8px 8px; }
.tp-cal thead .tp-hoy b { color: #185FA5; }
.tp-cal .tp-quien { text-align: left; padding-left: 16px; padding-right: 12px; position: sticky; left: 0; background: #fff; z-index: 1; min-width: 180px; }
.tp-correo { display: block; font-weight: 600; color: #0B2947; }
.tp-meta { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; font-size: 11px; color: #6B7280; }
.tp-tag { font-size: 10px; font-weight: 700; padding: 1px 6px; border-radius: 999px; }
.tp-tag--propio { background: #EEEDFE; color: #3C3489; }
.tp-celda { min-width: 30px; }
.tp-estado-col { padding-left: 10px !important; padding-right: 16px !important; text-align: left !important; }
.tp-chip { font-size: 11px; font-weight: 600; padding: 3px 9px; border-radius: 999px; white-space: nowrap; }
.tp-chip--hoy { background: #E1F5EE; color: #085041; }
.tp-chip--volver { background: #FAEEDA; color: #633806; }
.tp-chip--nunca { background: #F1F5F9; color: #64748B; }
.tp-chip--mal { background: #FCEBEB; color: #791F1F; }
.tp-cal tfoot tr { border-top: 1px solid #CBD5E1; }
.tp-cal tfoot td { vertical-align: bottom; height: 58px; color: #6B7280; }
.tp-cal tfoot .tp-quien { vertical-align: middle; font-weight: 600; }
.tp-barra-celda b { display: block; font-size: 11px; color: #0B2947; }
.tp-barra { width: 14px; margin: 2px auto 0; background: #5DCAA5; border-radius: 3px 3px 0 0; }
.tp-barra--meta { background: #1D9E75; }
.tp-meta-txt { font-size: 11px; vertical-align: middle !important; }
body.qiwo-dark .tp-kpi { background: #1A2535; border-color: rgba(255,255,255,0.06); }
body.qiwo-dark .tp-kpi-val { color: #E2E8F0; }
body.qiwo-dark .tp-kpi-lbl, body.qiwo-dark .tp-kpi-foot { color: #94A3B8; }
body.qiwo-dark .tp-kpi--meta { background: #085041; border-color: #0F6E56; }
body.qiwo-dark .tp-kpi--meta .tp-kpi-val { color: #fff; }
body.qiwo-dark .tp-kpi--meta .tp-kpi-lbl, body.qiwo-dark .tp-kpi--meta .tp-kpi-foot { color: #9FE1CB; }
body.qiwo-dark .tp-kpi--mal { background: rgba(226,75,74,.16); border-color: rgba(226,75,74,.3); }
body.qiwo-dark .tp-kpi--mal .tp-kpi-val { color: #F7C1C1; }
body.qiwo-dark .tp-kpi--mal .tp-kpi-lbl, body.qiwo-dark .tp-kpi--mal .tp-kpi-foot { color: #F09595; }
body.qiwo-dark .tp-cal { color: #CBD5E1; }
body.qiwo-dark .tp-cal tbody tr { border-top-color: rgba(255,255,255,0.05); }
body.qiwo-dark .tp-cal .tp-quien { background: #1A2535; }
body.qiwo-dark .tp-correo, body.qiwo-dark .tp-cal .tp-dia b, body.qiwo-dark .tp-barra-celda b { color: #E2E8F0; }
body.qiwo-dark .tp-cal .tp-hoy, body.qiwo-dark .tp-c--hoy { background: rgba(55,138,221,.16); }
body.qiwo-dark .tp-cal thead .tp-hoy b { color: #85B7EB; }
body.qiwo-dark .tp-cal .tp-google, body.qiwo-dark .tp-c--google { background: #0B2947; color: #E0F2F1; }
body.qiwo-dark .tp-cal .tp-hoy { background: #0F9375; color: #E0F2F1; }
body.qiwo-dark .tp-c--no { background: rgba(255,255,255,0.04); border-color: rgba(255,255,255,0.08); }
body.qiwo-dark .tp-c--futuro { border-color: rgba(255,255,255,0.12); }
body.qiwo-dark .tp-tag--propio { background: rgba(127,119,221,.22); color: #CECBF6; }
body.qiwo-dark .tp-chip--hoy { background: rgba(29,158,117,.2); color: #9FE1CB; }
body.qiwo-dark .tp-chip--volver { background: rgba(239,159,39,.18); color: #FAC775; }
body.qiwo-dark .tp-chip--nunca { background: rgba(255,255,255,0.06); color: #94A3B8; }
body.qiwo-dark .tp-chip--mal { background: rgba(226,75,74,.2); color: #F7C1C1; }
body.qiwo-dark .tp-cal tfoot tr { border-top-color: rgba(255,255,255,0.12); }
/* Personal: cargos y configuración de marcación (11/10/2026). */
.pers-choice-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; margin:12px 0 20px; }
.pers-choice-grid-modos { grid-template-columns:repeat(3,minmax(0,1fr)); }
.pers-choice { display:flex; flex-direction:column; gap:6px; padding:16px; border:2px solid #D1D5DB; border-radius:12px; background:#ECEDE7; color:#0B2947; text-align:left; font:inherit; cursor:pointer; }
.pers-choice span { font-size:13px; line-height:1.5; }
.pers-choice:hover, .pers-choice:focus-visible { border-color:#0F9375; }
.pers-choice-selected { border-color:#0F9375; background:#E0F2F1; }
.pers-choice:disabled { cursor:wait; opacity:.65; }
.pers-cargo-docente, .pers-cargo-auxiliar, .pers-cargo-administrativo, .pers-cargo-servicio { display:inline-flex; align-items:center; padding:4px 10px; border-radius:20px; font-size:12px; font-weight:600; color:#0B2947; white-space:nowrap; }
.pers-cargo-docente { background:#E0F2F1; }
.pers-cargo-auxiliar { background:#D1D5DB; }
.pers-cargo-administrativo { background:#ECEDE7; border:1px solid #D1D5DB; }
.pers-cargo-servicio { background:#0B2947; color:#ECEDE7; }
.pers-config { padding:20px; margin-bottom:24px; }
.pers-config h2, .pers-section-header h2 { font-size:18px; margin:0; }
.pers-minimo { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin:0 0 18px; font-size:14px; }
.pers-minimo input { width:95px; }
.pers-section-header { display:flex; justify-content:space-between; align-items:center; gap:12px; margin:20px 0 12px; }
.pers-toast { position:fixed; z-index:1200; right:24px; bottom:24px; display:flex; align-items:center; gap:16px; max-width:calc(100vw - 48px); padding:14px 18px; border-radius:12px; background:#E0F2F1; color:#0B2947; border:1px solid #0F9375; box-shadow:0 8px 24px rgb(11 41 71 / 15%); }
/* Advertencia ámbar solicitada en el encargo de traslado; superficie completa. */
.q-personal-traslado-advertencia { padding:14px 16px; border:1px solid rgba(217,119,6,.35); border-radius:10px; background:rgba(217,119,6,.12); color:var(--q-ink); line-height:1.6; }
.q-personal-traslado-advertencia p { margin:6px 0; }
.q-personal-traslado-advertencia ul { margin:6px 0 0; padding-left:20px; }
body.qiwo-dark .pers-choice { background:#0B2947; color:#ECEDE7; }
body.qiwo-dark .pers-choice-selected { background:#0F9375; border-color:#E0F2F1; }
@media(max-width:700px) { .pers-choice-grid-modos { grid-template-columns:1fr; } .pers-config { padding:16px; } .pers-toast { right:12px; bottom:12px; max-width:calc(100vw - 24px); } }
@media(max-width:420px) { .pers-choice-grid { grid-template-columns:1fr; } .pers-section-header { align-items:flex-start; flex-direction:column; } }

/* ══ DialogoConfirmar (12/10/2026): reemplaza al confirm() de Chrome ══ */
.dc-overlay { z-index:1200; }
.dc-card { max-width:440px; }
.dc-body { display:grid; gap:8px; padding-top:24px; }
.dc-pregunta { margin:0; font-size:16px; font-weight:700; line-height:1.4; color:#0B2947; }
.dc-detalle { margin:0; font-size:14px; line-height:1.5; color:#0B2947; opacity:.85; }
body.qiwo-dark .dc-pregunta, body.qiwo-dark .dc-detalle { color:#E0F2F1; }
.dc-footer { border-top:0; padding-top:8px; }
@media (max-width:640px) { .dc-footer > button { flex:1 1 0; justify-content:center; } }
/* Configuración de marcación: el botón de minutos aparece al lado del campo solo si cambió. */
.pers-minimo-fila { display:flex; align-items:center; flex-wrap:wrap; gap:12px; margin:0 0 6px; }
.pers-minimo-fila .pers-minimo { margin:0; }

.admin-punto-ayuda-texto { font-size:13px; color:#0B2947; }
body.qiwo-dark .admin-punto-ayuda-texto { color:#0B2947; }

/* Admin: filas compactas con acciones accesibles en celular (12/10/2026). */
.admin-tabla-solo-movil, .admin-tabla-detalle-movil { display:none; }
.admin-auditoria-secundaria { table-layout:fixed; width:100%; }
.admin-auditoria-secundaria td { overflow-wrap:anywhere; }
.admin-auditoria-secundaria td span { white-space:normal !important; }
@media (max-width:767px) {
    body .admin-content .qiwo-table.admin-tabla-compacta {
        display:table;
        table-layout:fixed;
        width:100%;
        min-width:0;
    }
    body .admin-content .admin-tabla-compacta thead { display:table-header-group; }
    /* Sin filas, el colspan conserva columnas ocultas y comprime los títulos.
       El estado vacío ocupa toda la tabla; la cabecera vuelve cuando hay datos. */
    body .admin-content .admin-tabla-compacta:has(> tbody > tr:only-child > td[colspan].qiwo-table-empty, > tbody > tr:only-child > td[colspan] .qiwo-table-empty) thead { display:none; }
    body .admin-content .admin-tabla-compacta tbody { display:table-row-group; }
    body .admin-content .admin-tabla-compacta tr { display:table-row; padding:0; }
    body .admin-content .admin-tabla-compacta :is(th, td) {
        display:table-cell;
        min-width:0;
        padding:10px 6px;
        font-size:12px;
        white-space:normal !important;
        overflow-wrap:anywhere;
        vertical-align:top;
    }
    body .admin-content .admin-tabla-compacta :is(th, td):not(.admin-col-principal):not(.admin-col-estado):not(.admin-col-acciones):not(.admin-col-seleccion):not([colspan]) {
        display:none;
    }
    body .admin-content .admin-tabla-compacta td[data-label]::before { display:none; }
    body .admin-content .admin-tabla-compacta .admin-col-estado { width:76px; }
    body .admin-content .admin-tabla-compacta .admin-col-acciones { width:92px; }
    body .admin-content .admin-tabla-compacta .admin-col-seleccion { width:28px; padding-inline:4px; }
    body .admin-content .admin-dias-tabla .admin-col-acciones { width:48px; }
    body .admin-content .admin-dias-tabla .admin-col-estado { width:94px; }
    body .admin-content .admin-auditoria-secundaria .admin-col-estado { width:100px; }
    body .admin-content .admin-tabla-compacta .qiwo-avatar,
    body .admin-content .admin-tabla-compacta .admin-tabla-avatar { display:none !important; }
    body .admin-content .admin-tabla-compacta .qiwo-person-cell { min-width:0; gap:0; }
    body .admin-content .admin-tabla-compacta .qiwo-person-cell > :not(.qiwo-avatar) { min-width:0; }
    body .admin-content .admin-tabla-compacta .qiwo-person-name { white-space:normal; overflow-wrap:anywhere; }
    body .admin-content .admin-tabla-compacta .admin-badge { white-space:normal; padding:3px 6px; font-size:10px; }
    body .admin-content .admin-tabla-compacta .qiwo-row-actions-trigger {
        width:auto;
        min-width:0;
        max-width:100%;
        padding:6px;
        gap:4px;
        font-size:11px;
    }
    body .admin-content .admin-tabla-compacta .admin-col-acciones .qiwo-row-actions-trigger span { white-space:nowrap; }
    body .admin-content .admin-tabla-compacta .admin-col-acciones .qiwo-row-actions-trigger svg { flex-shrink:0; }
    body .admin-content .admin-tabla-compacta .admin-col-tutores { width:auto; }
    body .admin-content .admin-tabla-compacta .admin-col-acciones > button,
    body .admin-content .admin-tabla-compacta .admin-col-acciones .pers-actions > button {
        max-width:100%;
        margin:0 0 5px !important;
        padding:6px 8px !important;
        white-space:normal;
        font-size:12px;
    }
    body .admin-content .admin-tabla-compacta .admin-col-acciones .pers-actions { flex-direction:column; align-items:stretch; gap:4px; }
    .admin-tabla-solo-movil { display:block; }
    .admin-tabla-solo-escritorio { display:none; }
    button.admin-tabla-solo-movil { display:flex; }
    .admin-tabla-detalle-movil { display:block; margin-top:6px; font-weight:400; line-height:1.5; }
    .admin-tabla-detalle-movil summary { cursor:pointer; font-weight:600; text-decoration:underline; text-underline-offset:2px; }
    .admin-tabla-detalle-movil > div { margin-top:4px; }
}

/* Diálogos enfocados (16/10/2026): contenedores auditados de los cuatro portales. */
body .qiwo-dialog-overlay {
    align-items: center;
    justify-content: center;
    padding: 20px;
    z-index: 1100;
    background: rgba(11,41,71,.45);
}
body .qiwo-dialog-overlay > .qiwo-modal-card {
    --admin-surface: #ECEDE7;
    --admin-ink: #0B2947;
    --admin-muted: #0B2947;
    --admin-selected: #E0F2F1;
    min-width: 0;
    max-width: min(640px, 100%);
    max-height: 90vh;
    max-height: 90dvh;
    height: auto;
    border: 1px solid #D1D5DB;
    border-radius: 18px;
    background: #ECEDE7;
    color: #0B2947;
    box-shadow: 0 20px 60px rgba(11,41,71,.2);
    animation: none;
    overflow: hidden;
}
body .qiwo-dialog-overlay > .qiwo-modal-card-sm { max-width: 480px; }
body .qiwo-dialog-overlay > .admin-detail-dialog { max-width: 640px; }
body .qiwo-dialog-overlay .qiwo-modal-header { gap: 16px; border-color: #D1D5DB; }
body .qiwo-dialog-overlay .qiwo-modal-header :is(h2, h3) { margin: 0; font-size: 18px; line-height: 1.4; overflow-wrap: anywhere; color: #0B2947; }
body .qiwo-dialog-overlay .qiwo-modal-body { min-height: 0; overflow-y: auto; overscroll-behavior: contain; overflow-wrap: anywhere; }
body .qiwo-dialog-overlay .qiwo-modal-footer { flex-shrink: 0; flex-wrap: wrap; gap: 10px; border-color: #D1D5DB; padding-bottom: max(16px, env(safe-area-inset-bottom)); }
body .qiwo-dialog-overlay .qiwo-modal-close { flex: 0 0 40px; width: 40px; height: 40px; background: #D1D5DB; color: #0B2947; }
body .qiwo-dialog-overlay .qiwo-modal-close:hover { background: #E0F2F1; color: #0B2947; }
body .qiwo-dialog-overlay button:focus-visible { outline: 2px solid #0F9375; outline-offset: 2px; }
body .qiwo-dialog-overlay .qiwo-sheet-handle { display: none; }
.admin-dialog-identity { display: flex; align-items: center; gap: 12px; margin-bottom: 20px; }
.admin-dialog-identity h3 { margin: 0 0 4px; font-size: 18px; }
.admin-dialog-identity p { margin: 0; font-size: 13px; }
.admin-dialog-section { margin: 24px 0 12px; font-size: 14px; }
body .admin-content .admin-dialog-identity .qiwo-avatar { width: 44px; height: 44px; flex: 0 0 44px; border-radius: 50%; background: #0B2947 !important; color: #ECEDE7 !important; }
body .qiwo-dialog-overlay .qiwo-detalle-row { border-color: #D1D5DB; gap: 16px; }
body .qiwo-dialog-overlay .qiwo-detalle-row > span { min-width: 0; overflow-wrap: anywhere; }
body .qiwo-dialog-overlay .qiwo-detalle-row .qiwo-detalle-label { flex-shrink: 0; }
body .qiwo-dialog-overlay .cred-historial-detalle { min-width: 0; }
body .qiwo-dialog-overlay .admin-detail-facts .credencial-valor { white-space: normal; overflow-wrap: anywhere; word-break: normal; }
body .qiwo-dialog-overlay .pers-marca { background: #E0F2F1; border-color: #D1D5DB; }
body .qiwo-dialog-overlay .pers-marca-atenuada { background: #D1D5DB; }
body.qiwo-dark .admin-content .qiwo-dialog-overlay > .qiwo-modal-card { background: #ECEDE7; color: #0B2947; }
body.qiwo-dark .admin-content .qiwo-dialog-overlay :is(.qiwo-modal-header, .qiwo-modal-body, .qiwo-modal-footer) { background: #ECEDE7; color: #0B2947; border-color: #D1D5DB; }
body.qiwo-dark .admin-content .qiwo-dialog-overlay :is(.admin-dialog-identity h3, .admin-dialog-identity p, .qiwo-detalle-row > span, .admin-dialog-section, .admin-detail-facts span, .admin-detail-facts strong, .pers-marca strong, .pers-marca div, .pers-marca p, .cred-historial-detalle .qiwo-text-muted, .credencial-valor) { color: #0B2947 !important; }
body .qiwo-dialog-overlay .qiwo-photo-footer { flex-direction: column; align-items: center; }
body .qiwo-dialog-overlay .tutor-link-child-card { margin-bottom: 0; }
body .admin-content .qiwo-dialog-overlay .admin-alert-error,
body .admin-content .qiwo-dialog-overlay .qiwo-modal-error,
body.qiwo-dark .admin-content .qiwo-dialog-overlay .admin-alert-error,
body.qiwo-dark .admin-content .qiwo-dialog-overlay .qiwo-modal-error { background: #D1D5DB; color: #0B2947; border: 1px solid #0B2947; }
body.qiwo-dark .admin-shell .admin-content .qiwo-dialog-overlay :is(input, select, textarea, .qiwo-input) { background-color: #ECEDE7 !important; color: #0B2947 !important; border-color: #D1D5DB !important; }
body.qiwo-dark .admin-content .qiwo-dialog-overlay :is(label, .qiwo-label, .qiwo-label-optional, .qiwo-text-muted, .pers-help, .qiwo-person-sub) { color: #0B2947; }
body.qiwo-dark .admin-shell .admin-content .qiwo-dialog-overlay :is(.qiwo-btn-secondary, .qiwo-modal-close, .qiwo-chip:not(.qiwo-chip-active)) { background: #ECEDE7 !important; color: #0B2947 !important; border-color: #D1D5DB !important; }
body.qiwo-dark .admin-shell .admin-content .qiwo-dialog-overlay .admin-alert-error { background: #D1D5DB !important; color: #0B2947 !important; border-color: #0B2947 !important; }
body.qiwo-dark .admin-shell .admin-content .qiwo-dialog-overlay :is(.admin-badge, .qiwo-chip-active, .qiwo-nivel-chip, .pers-dia-activo) { background: #E0F2F1 !important; color: #0B2947 !important; border-color: #D1D5DB !important; }
body.qiwo-dark .admin-shell .admin-content .qiwo-dialog-overlay .qiwo-avatar { background: #0B2947 !important; color: #ECEDE7 !important; }
@media (max-width: 767px) {
    body .qiwo-dialog-overlay { align-items: flex-end; padding: 0; }
    body .qiwo-dialog-overlay > .qiwo-modal-card { width: 100%; max-width: 100% !important; max-height: 92vh; max-height: 92dvh; border-radius: 20px 20px 0 0; margin: 0; }
    body .qiwo-dialog-overlay .qiwo-modal-header { padding: 16px; }
    body .qiwo-dialog-overlay .qiwo-modal-body { padding: 16px; }
    body .qiwo-dialog-overlay .qiwo-modal-footer { padding-inline: 16px; }
    body .qiwo-dialog-overlay .qiwo-detalle-row { flex-wrap: wrap; gap: 4px 12px; }
}

/* ═══════════ Cobros v1 (ADR 0065, 20/10/2026): pantallas de administración, caja y estado de cuenta.
   Origen: Arquitectura/_insumos/noche-20261020/cobros/css-admin.css, css-caja-1.css y css-caja-2.css,
   pegados en ese orden. Prefijos propios: cob-adm-, cob-bandeja-, cob-cobro-, cob-alerta, cob-rep-, cob-cta-. ═══════════ */

/* ═══════════════════════════════════════════════════════════════════════════
   Cobros: AdminCobroConceptos + AdminCobroCronograma
   Cobros v1 (ADR 0065, 20/10/2026). El integrador pega este bloque al final de
   wwwroot/css/qiwo.css (no hay .razor.css en Qiwo).

   · Prefijo cob-adm- en todo: las pantallas de Caja usan cob-bandeja-, cob-alerta,
     etc. Con un prefijo propio, pegar los CSS juntos no pisa nada.
   · Reusa lo que ya existe: qiwo-table-card, qiwo-toolbar, qiwo-search-box,
     qiwo-chip, qiwo-select, qiwo-input, admin-tabla-compacta (celular),
     admin-tabla-solo-movil, qiwo-modal-*, qiwo-dialog-overlay, DialogoConfirmar,
     admin-alert-*, admin-badge.
   · Solo los 5 colores de marca (#0B2947 #0F9375 #ECEDE7 #D1D5DB #E0F2F1), más
     blanco. Los estados se distinguen por FORMA (punto lleno, medio, hueco,
     guion, borde punteado) y tinte de toda la píldora: nunca franja lateral.
   · Celular primero (390 px sin scroll horizontal de página); se abre en 480,
     641, 768 y 1024.
   · Modo oscuro: el texto suelto hereda (color: inherit + opacidad) para servir
     igual dentro de la tabla oscura y dentro del diálogo, que en Qiwo queda claro
     también en modo oscuro. Las cajas con fondo propio llevan su propio color.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── Guard: módulo apagado, rol sin permiso o sin sede ── */
.cob-adm-bloqueo {
    padding: 34px 22px;
    text-align: center;
    color: #0B2947;
    font-size: 14px;
    line-height: 1.5;
}
body.qiwo-dark .cob-adm-bloqueo { color: #ECEDE7; }

/* ── Cabecera: título + botón o selector de año (apilado en celular) ── */
.cob-adm-cabecera {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 12px;
    margin-bottom: 20px;
}
.cob-adm-cabecera .qiwo-btn-nuevo { align-self: flex-start; }
.cob-adm-campo-anio {
    display: flex;
    flex-direction: column;
    gap: 4px;
    width: 100%;
    min-width: 0;
}
.cob-adm-campo-anio-texto { font-size: 12px; font-weight: 600; color:var(--q-capa-texto, #0B2947); }
body.qiwo-dark .cob-adm-campo-anio-texto { color: #ECEDE7; }

/* ── Barra de herramientas ── */
.cob-adm-toolbar { margin-bottom: 16px; }
.cob-adm-toolbar .qiwo-filter-chips { max-width: 100%; }
.cob-adm-buscador { flex: 1 1 100%; min-width: 0; }
.cob-adm-contador {
    margin-left: auto;
    padding: 4px 12px;
    border-radius: 8px;
    background: #D1D5DB;
    color:var(--q-capa-texto, #0B2947);
    font-size: 13px;
    font-weight: 600;
    white-space: nowrap;
}

/* ── Texto dentro de las tablas ── */
.cob-adm-codigo {
    display: inline-block;
    max-width: 100%;
    padding: 2px 8px;
    border-radius: 6px;
    background: #D1D5DB;
    color:var(--q-capa-texto, #0B2947);
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 13px;
    font-weight: 700;
    overflow-wrap: anywhere;
}
.cob-adm-nombre { display: block; font-weight: 600; overflow-wrap: anywhere; }
.cob-adm-subtexto {
    display: block;
    margin-top: 2px;
    color: inherit;
    opacity: .78;
    font-size: 12px;
    font-weight: 400;
    line-height: 1.4;
    overflow-wrap: anywhere;
}
.cob-adm-movil-detalle { margin-top: 4px; font-size: 12px; font-weight: 400; line-height: 1.4; }
.cob-adm-num { white-space: nowrap; font-variant-numeric: tabular-nums; }
.cob-adm-motivo {
    display: block;
    margin-top: 4px;
    color: inherit;
    font-size: 12px;
    font-style: italic;
    line-height: 1.4;
    overflow-wrap: anywhere;
}
.cob-adm-vacio-ayuda { max-width: 420px; font-size: 13px; line-height: 1.5; text-align: center; }
.cob-adm-fila-inactiva td:not(.admin-col-acciones) { opacity: .72; }
.cob-adm-fila-anulada .cob-adm-nombre { text-decoration: line-through; text-decoration-thickness: 1px; }

/* Botón de la fila ("Ver cargos") y botones con ícono o spinner */
.cob-adm-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; }
.cob-adm-btn-fila { padding: 6px 12px; font-size: 13px; white-space: nowrap; }

/* "Mostrar más" al pie de la lista de alumnos */
.cob-adm-mas {
    display: flex;
    justify-content: center;
    padding: 12px;
    border-top: 1px solid var(--q-capa-borde, #D1D5DB);
}
.cob-adm-error-tabla {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 12px;
    padding: 28px 16px;
    text-align: center;
}

/* ── Estado de un cargo: píldora teñida entera + forma del punto ──
   Pendiente = punto hueco · Parcial = punto a medias · Pagado = punto lleno
   Vencido = píldora azul marino · Exonerado = guion · Anulado = borde punteado */
.cob-adm-estado {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    max-width: 100%;
    padding: 3px 9px;
    border: 1px solid var(--q-capa-borde, #D1D5DB);
    border-radius: 999px;
    background: var(--q-capa-hover, #ECEDE7);
    color:var(--q-capa-texto, #0B2947);
    font-size: 11px;
    font-weight: 700;
    line-height: 1.3;
    letter-spacing: .02em;
    white-space: nowrap;
}
.cob-adm-estado::before {
    content: "";
    flex-shrink: 0;
    box-sizing: border-box;
    width: 8px;
    height: 8px;
    border: 2px solid currentColor;
    border-radius: 50%;
    background: transparent;
}
.cob-adm-estado--parcial { border-color: #0F9375; background: var(--q-capa-hover, #ECEDE7); }
.cob-adm-estado--parcial::before { border-color: #0F9375; background: linear-gradient(90deg, #0F9375 50%, transparent 50%); }
.cob-adm-estado--pagado { border-color: #0F9375; background: var(--q-capa-hover, #ECEDE7); }
.cob-adm-estado--pagado::before { border-color: #0F9375; background: #0F9375; }
.cob-adm-estado--vencido { border-color: #0B2947; background: #0B2947; color: #ECEDE7; }
.cob-adm-estado--vencido::before { background: var(--q-capa-hover, #ECEDE7); border-color: #ECEDE7; }
.cob-adm-estado--exonerado { border-color: var(--q-capa-borde, #D1D5DB); background: #D1D5DB; }
.cob-adm-estado--exonerado::before { height: 2px; border: 0; border-radius: 1px; background: currentColor; }
.cob-adm-estado--anulado { border: 1px dashed #0B2947; background: var(--q-capa-hover, #ECEDE7); }
.cob-adm-estado--anulado::before { display: none; }

/* ── Tarjetas de acciones en lote (cronograma y retirados) ── */
.cob-adm-acciones-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 16px;
    margin-bottom: 24px;
}
.cob-adm-tarjeta { padding: 16px; overflow: visible; color:var(--q-capa-texto, #0B2947); }
body.qiwo-dark .cob-adm-tarjeta { color: #ECEDE7; }
.cob-adm-tarjeta-titulo {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 8px;
    color: inherit;
    font-size: 16px;
    font-weight: 700;
}
.cob-adm-tarjeta-titulo svg { flex-shrink: 0; color: #0F9375; }
.cob-adm-tarjeta-texto { margin: 0 0 10px; color: inherit; font-size: 13px; line-height: 1.55; }
.cob-adm-tarjeta-botones { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 12px; }
.cob-adm-tarjeta-botones > button { flex: 1 1 100%; justify-content: center; }
.cob-adm-campo-corte { margin: 12px 0 0; }
.cob-adm-hint { color: inherit; opacity: .78; font-size: 12px; line-height: 1.45; }

/* Enlaces: azul marino subrayado en verde (el verde solo como texto no llega a 4.5:1) */
.cob-adm-enlace {
    color:var(--q-capa-texto, #0B2947);
    font-weight: 600;
    text-decoration: underline;
    text-decoration-color: #0F9375;
    text-decoration-thickness: 2px;
    text-underline-offset: 2px;
}
body.qiwo-dark .cob-adm-tarjeta .cob-adm-enlace { color: #E0F2F1; }
.cob-adm-enlace-boton {
    padding: 0;
    border: 0;
    background: none;
    color:var(--q-capa-texto, #0B2947);
    font: inherit;
    font-weight: 700;
    text-decoration: underline;
    text-decoration-color: #0F9375;
    text-decoration-thickness: 2px;
    text-underline-offset: 2px;
    cursor: pointer;
}
.cob-adm-enlace-boton:disabled { opacity: .6; cursor: not-allowed; }

/* ── Notas y avisos con fondo propio (se leen igual en modo claro y oscuro) ── */
.cob-adm-nota {
    margin: 0;
    padding: 10px 12px;
    border: 1px solid var(--q-capa-borde, #D1D5DB);
    border-radius: 10px;
    background: var(--q-capa-hover, #ECEDE7);
    color:var(--q-capa-texto, #0B2947);
    font-size: 13px;
    line-height: 1.5;
    overflow-wrap: anywhere;
}
.cob-adm-nota .cob-adm-enlace { color:var(--q-capa-texto, #0B2947); font-weight: 700; }
.cob-adm-nota--alerta { border-color: #0B2947; background: #0B2947; color: #ECEDE7; }

/* ── Resumen (vista previa del lote, totales del alumno, cargo elegido) ── */
.cob-adm-resumen-caja {
    margin-top: 14px;
    padding: 14px;
    border: 1px solid var(--q-capa-borde, #D1D5DB);
    border-radius: 12px;
    background: var(--q-capa-hover, #ECEDE7);
    color:var(--q-capa-texto, #0B2947);
}
.cob-adm-resumen-titulo { margin: 0 0 10px; font-size: 13px; font-weight: 700; }
.cob-adm-resumen {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px 14px;
    margin: 0;
}
.cob-adm-resumen > div { min-width: 0; }
.cob-adm-resumen dt { margin: 0; font-size: 11px; font-weight: 600; opacity: .8; }
.cob-adm-resumen dd {
    margin: 2px 0 0;
    font-size: 16px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    overflow-wrap: anywhere;
}
.cob-adm-resumen--totales,
.cob-adm-cargo-elegido {
    margin-bottom: 14px;
    padding: 12px 14px;
    border: 1px solid var(--q-capa-borde, #D1D5DB);
    border-radius: 12px;
    background: var(--q-capa-hover, #ECEDE7);
    color:var(--q-capa-texto, #0B2947);
}
.cob-adm-cargo-elegido .cob-adm-nombre { margin: 0 0 10px; }
.cob-adm-cargo-elegido .cob-adm-resumen dd { font-size: 14px; }

/* ── Sección "Cargos por alumno" ── */
.cob-adm-seccion-titulo { margin: 8px 0 12px; color:var(--q-capa-texto, #0B2947); font-size: 18px; font-weight: 700; }
body.qiwo-dark .cob-adm-seccion-titulo { color: #ECEDE7; }

/* ── Diálogo de cargos del alumno (más ancho que el diálogo base de 640) ── */
body .qiwo-dialog-overlay > .qiwo-modal-card.cob-adm-dialogo-ancho { max-width: min(960px, 100%); }
.cob-adm-detalle-cabecera { min-width: 0; }
.cob-adm-detalle-cabecera h3 { margin: 0; }
.cob-adm-detalle-cabecera .cob-adm-subtexto { margin-top: 4px; }

/* ── Formulario del concepto ── */
.cob-adm-form-tres { display: grid; grid-template-columns: minmax(0, 1fr); gap: 14px; }
.cob-adm-check { align-items: flex-start; margin-top: 6px; color:var(--q-capa-texto, #0B2947); }
.cob-adm-check input[type="checkbox"] { flex-shrink: 0; margin-top: 2px; }

/* ── Celular: la tabla compacta deja solo principal, estado y acciones ── */
@media (max-width: 767px) {
    body .admin-content .admin-tabla-compacta .cob-adm-estado {
        padding: 3px 6px;
        font-size: 10px;
        white-space: normal;
    }
}

/* ── Desde 480 px: botones de las tarjetas a su ancho ── */
@media (min-width: 480px) {
    .cob-adm-tarjeta-botones > button { flex: 0 1 auto; }
}

/* ── Desde 641 px: los tres campos de la pensión en una fila ── */
@media (min-width: 641px) {
    .cob-adm-form-tres { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* ── Desde 768 px: cabecera en fila, buscador a su ancho, resúmenes en 3 y 4 ── */
@media (min-width: 768px) {
    .cob-adm-cabecera {
        flex-direction: row;
        flex-wrap: wrap;
        align-items: flex-end;
        justify-content: space-between;
    }
    .cob-adm-campo-anio { width: 220px; }
    .cob-adm-buscador { flex: 1 1 240px; }
    .cob-adm-tarjeta { padding: 20px 22px; }
    .cob-adm-resumen { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .cob-adm-resumen--totales { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

/* ── Desde 1024 px: las dos tarjetas de lote lado a lado ── */
@media (min-width: 1024px) {
    .cob-adm-acciones-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: start; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   Cobros: CajaBandeja y CajaCobro (Cobros v1, ADR 0065, 20/10/2026)
   Insumo para el integrador: se pega tal cual al final de wwwroot/css/qiwo.css.

   Prefijos:
     cob-bandeja-*  Components/Pages/Caja/CajaBandeja.razor  (/admin/caja/bandeja)
     cob-cobro-*    Components/Pages/Caja/CajaCobro.razor    (/admin/caja/cobro)
   Cada pantalla tiene su prefijo para no chocar con las otras pantallas de
   Cobros que se escriben en paralelo; lo común va con selectores agrupados.

   Reglas que respeta:
     - Solo los 5 colores de Qiwo: #0B2947 #0F9375 #ECEDE7 #D1D5DB #E0F2F1, más
       las variables del panel (--admin-surface, --admin-ink, --admin-muted,
       --admin-selected), que ya cambian solas en modo oscuro y dentro de los
       diálogos (los diálogos fuerzan crema con tinta azul).
     - Estado por color: chip con punto, tinte de toda la superficie o ícono.
       Nunca franja o borde lateral aislado.
     - Celular primero. A 390 px nada se sale del ancho: no hay tablas, todo
       es lista o tarjeta, y los textos largos cortan con overflow-wrap.
     - Reutiliza qiwo-table-card, qiwo-search-box, qiwo-chip, qiwo-btn-*,
       qiwo-empty-state, qiwo-modal-*, qiwo-dialog-overlay, admin-alert-error.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── Cabecera, bloqueo del módulo y conteos (las dos pantallas) ── */
.cob-bandeja-cabecera,
.cob-cobro-cabecera { display:flex; align-items:flex-start; justify-content:space-between; flex-wrap:wrap; gap:12px; margin-bottom:16px; }
.cob-bandeja-cabecera > div,
.cob-cobro-cabecera > div { min-width:0; }
.cob-bandeja-bloqueo,
.cob-cobro-bloqueo { padding:34px 22px; text-align:center; font-size:14px; line-height:1.5; color:var(--admin-ink); }
.cob-bandeja-btn-icono,
.cob-cobro-btn-icono { display:inline-flex; align-items:center; gap:8px; }
.cob-bandeja-btn-chico,
.cob-cobro-btn-chico { padding:6px 12px; font-size:12.5px; }
.cob-bandeja-conteo,
.cob-cobro-conteo { margin:0 0 10px; font-size:13px; color:var(--admin-muted); }
.cob-bandeja-mono,
.cob-cobro-mono { font-family:ui-monospace, Menlo, Consolas, monospace; font-variant-numeric:tabular-nums; overflow-wrap:anywhere; }
.cob-bandeja-opcional,
.cob-cobro-opcional { font-weight:400; opacity:.8; }
.cob-bandeja-ayuda,
.cob-cobro-ayuda { margin:0; font-size:12.5px; line-height:1.45; color:var(--admin-muted); }
.cob-bandeja-textarea,
.cob-cobro-textarea { width:100%; min-height:72px; resize:vertical; }
.cob-bandeja-spinner-boton,
.cob-cobro-spinner-boton { width:14px; height:14px; border-width:2px; margin:0; }

/* ── Barra de búsqueda y filtros ── */
.cob-bandeja-toolbar,
.cob-cobro-toolbar { margin-bottom:12px; }
.cob-bandeja-toolbar .qiwo-search-box,
.cob-cobro-toolbar .qiwo-search-box { flex:1 1 260px; min-width:0; }
@media (max-width:640px) {
    /* La barra pasa a columna: los 260px de ancho no deben convertirse en alto. */
    .cob-bandeja-toolbar .qiwo-search-box,
    .cob-cobro-toolbar .qiwo-search-box { flex:0 1 auto; }
}
.cob-bandeja-chips { flex:1 1 100%; }
.cob-cobro-check { display:inline-flex; align-items:center; gap:8px; min-height:40px; font-size:13.5px; color:var(--admin-ink); cursor:pointer; }
.cob-cobro-check input { width:18px; height:18px; accent-color:#0F9375; }
@media (min-width:900px) {
    .cob-bandeja-chips { flex:0 1 auto; }
}

/* ── Chip de estado con punto (pago y cargo) ──
   La forma también distingue, no solo el color: en revisión lleva el punto
   hueco, rechazado va invertido y anulado lleva el borde punteado. */
.cob-bandeja-estado,
.cob-cobro-estado { display:inline-flex; align-items:center; gap:6px; padding:3px 10px; border:1px solid var(--q-capa-borde, #D1D5DB); border-radius:999px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); font-size:12px; font-weight:600; line-height:1.4; white-space:nowrap; }
.cob-bandeja-punto,
.cob-cobro-punto { flex-shrink:0; width:8px; height:8px; border-radius:50%; background:currentColor; }
.cob-bandeja-estado--revision,
.cob-cobro-estado--revision { border-color:#0B2947; }
.cob-bandeja-estado--revision .cob-bandeja-punto,
.cob-cobro-estado--revision .cob-cobro-punto { background:transparent; box-shadow:inset 0 0 0 2px #0B2947; }
.cob-bandeja-estado--aprobado,
.cob-cobro-estado--aprobado { background:var(--q-capa-hover, #ECEDE7); border-color:#0F9375; }
.cob-bandeja-estado--aprobado .cob-bandeja-punto,
.cob-cobro-estado--aprobado .cob-cobro-punto { background:#0F9375; }
.cob-bandeja-estado--rechazado,
.cob-cobro-estado--rechazado { background:#0B2947; border-color:#0B2947; color:#ECEDE7; }
.cob-bandeja-estado--anulado,
.cob-cobro-estado--anulado { border-style:dashed; border-color:#0B2947; }
.cob-bandeja-estado--anulado .cob-bandeja-punto,
.cob-cobro-estado--anulado .cob-cobro-punto { background:#D1D5DB; box-shadow:inset 0 0 0 1px #0B2947; }
.cob-cobro-estado--neutro { background:#D1D5DB; }
body.qiwo-dark .cob-bandeja-estado--rechazado,
body.qiwo-dark .cob-cobro-estado--rechazado { border-color:#E0F2F1; }

/* ── Historial "estilo Facebook" (las dos pantallas) ── */
.cob-bandeja-historial,
.cob-cobro-historial { list-style:none; margin:0; padding:0; display:flex; flex-direction:column; }
.cob-bandeja-historial li,
.cob-cobro-historial li { position:relative; display:flex; gap:12px; padding:0 0 14px; }
.cob-bandeja-historial li:not(:last-child)::before,
.cob-cobro-historial li:not(:last-child)::before { content:""; position:absolute; left:5px; top:16px; bottom:0; width:2px; background:#D1D5DB; }
.cob-bandeja-historial-punto,
.cob-cobro-historial-punto { flex-shrink:0; width:12px; height:12px; margin-top:3px; border-radius:50%; background:#0F9375; box-shadow:0 0 0 3px #E0F2F1; }
.cob-bandeja-historial li > div,
.cob-cobro-historial li > div { display:flex; flex-direction:column; gap:2px; min-width:0; font-size:12.5px; line-height:1.45; color:var(--admin-ink); }
.cob-bandeja-historial strong,
.cob-cobro-historial strong { font-size:13.5px; }
.cob-bandeja-historial q,
.cob-cobro-historial q { display:block; margin-top:4px; padding:6px 10px; border-radius:8px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); font-style:normal; overflow-wrap:anywhere; }

/* ── Aviso de éxito (toast) ── */
.cob-bandeja-toast,
.cob-cobro-toast { position:fixed; z-index:1200; right:24px; bottom:24px; display:flex; align-items:center; gap:12px; max-width:min(480px, calc(100vw - 48px)); padding:12px 14px 12px 16px; border:1px solid #0F9375; border-radius:12px; background:#0B2947; color:#ECEDE7; box-shadow:0 8px 24px rgb(11 41 71 / 25%); font-size:13.5px; line-height:1.45; }
.cob-bandeja-toast svg,
.cob-cobro-toast svg { flex-shrink:0; color:#E0F2F1; }
.cob-bandeja-toast span,
.cob-cobro-toast span { flex:1 1 auto; min-width:0; overflow-wrap:anywhere; }
.cob-bandeja-toast .qiwo-btn-secondary,
.cob-cobro-toast .qiwo-btn-secondary { flex-shrink:0; padding:6px 12px; font-size:12.5px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); border-color:#ECEDE7; }
@media (max-width:640px) {
    .cob-bandeja-toast,
    .cob-cobro-toast { left:12px; right:12px; bottom:12px; max-width:none; }
}

/* ══ Cobros: CajaBandeja ═══════════════════════════════════════════════════ */

/* El aviso que no se cierra: verificar en la cuenta, no en la foto. */
.cob-bandeja-verifica { display:flex; align-items:flex-start; gap:12px; margin:0 0 16px; padding:14px 16px; border:1px solid #0B2947; border-radius:12px; background:#0B2947; color:#ECEDE7; }
.cob-bandeja-verifica svg { flex-shrink:0; margin-top:1px; color:#E0F2F1; }
.cob-bandeja-verifica > div { min-width:0; }
.cob-bandeja-verifica strong { display:block; font-size:14.5px; line-height:1.4; }
.cob-bandeja-verifica span { display:block; margin-top:4px; font-size:13px; line-height:1.5; }
body.qiwo-dark .cob-bandeja-verifica { border-color:#E0F2F1; }

/* Lista de tarjetas: una columna en el celular, rejilla desde tablet. */
.cob-bandeja-lista { list-style:none; margin:0; padding:0; display:grid; grid-template-columns:minmax(0,1fr); gap:12px; }
.cob-bandeja-tarjeta { display:flex; flex-direction:column; gap:10px; min-width:0; padding:16px; border:1px solid var(--q-capa-borde, #D1D5DB); border-radius:14px; background:var(--admin-surface); color:var(--admin-ink); }
.cob-bandeja-tarjeta-cabeza { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:8px 10px; }
.cob-bandeja-monto { font-size:22px; font-weight:700; letter-spacing:-.01em; font-variant-numeric:tabular-nums; }
.cob-bandeja-operacion { display:flex; flex-wrap:wrap; align-items:center; gap:6px 12px; font-size:13.5px; font-weight:600; }
.cob-bandeja-origen { padding:2px 8px; border-radius:6px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); font-size:12px; font-weight:600; }
.cob-bandeja-alertas { list-style:none; margin:0; padding:10px 12px; display:flex; flex-direction:column; gap:6px; border:1px solid #0B2947; border-radius:10px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); font-size:13px; font-weight:600; }
.cob-bandeja-alertas li { display:flex; align-items:flex-start; gap:8px; line-height:1.4; }
.cob-bandeja-alertas svg { flex-shrink:0; margin-top:1px; }
.cob-bandeja-datos { display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:8px 14px; margin:0; }
.cob-bandeja-datos > div,
.cob-bandeja-ficha > div { min-width:0; }
.cob-bandeja-dato-ancho { grid-column:1 / -1; }
.cob-bandeja-datos dt,
.cob-bandeja-ficha dt,
.cob-cobro-resumen dt,
.cob-cobro-anular-ficha dt { margin:0 0 2px; font-size:11.5px; font-weight:600; letter-spacing:.02em; color:inherit; opacity:.75; }
.cob-bandeja-datos dd,
.cob-bandeja-ficha dd,
.cob-cobro-resumen dd,
.cob-cobro-anular-ficha dd { margin:0; font-size:13.5px; overflow-wrap:anywhere; }
.cob-bandeja-cubre { font-size:13px; }
.cob-bandeja-cubre-titulo { display:block; margin-bottom:4px; font-size:11.5px; font-weight:600; opacity:.75; }
.cob-bandeja-cubre ul { margin:0; padding-left:18px; display:flex; flex-direction:column; gap:2px; overflow-wrap:anywhere; }
.cob-bandeja-cubre-mas { list-style:none; margin-left:-18px; font-weight:600; }
.cob-bandeja-tiempo { margin:0; font-size:12.5px; color:var(--admin-muted); }
.cob-bandeja-tiempo:empty { display:none; }
.cob-bandeja-revisar { width:100%; min-height:44px; margin-top:auto; justify-content:center; }
@media (min-width:768px) {
    .cob-bandeja-lista { grid-template-columns:repeat(auto-fill, minmax(320px, 1fr)); }
}

/* Diálogo de revisión: ancho en escritorio (foto + datos), hoja completa en el celular. */
body .qiwo-dialog-overlay > .qiwo-modal-card.cob-bandeja-dialogo { width:100%; max-width:min(1040px, 100%); }
.cob-bandeja-dialogo-titulo { min-width:0; }
.cob-bandeja-dialogo-titulo p { display:flex; flex-wrap:wrap; align-items:center; gap:6px 10px; margin:6px 0 0; font-size:12.5px; }
.cob-bandeja-revision { display:grid; grid-template-columns:minmax(0,1fr); gap:18px; }
.cob-bandeja-foto { display:flex; flex-direction:column; gap:8px; min-width:0; }
.cob-bandeja-foto-vacia { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:10px; min-height:180px; padding:20px; border:1px dashed #0B2947; border-radius:12px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); font-size:13px; line-height:1.45; text-align:center; }
.cob-bandeja-foto-vacia .admin-spinner { margin:0; }
.cob-bandeja-foto-marco { overflow:hidden; max-height:60vh; max-height:60dvh; border:1px solid var(--q-capa-borde, #D1D5DB); border-radius:12px; background:#0B2947; }
.cob-bandeja-foto-marco img { display:block; width:100%; height:auto; max-height:60vh; max-height:60dvh; object-fit:contain; cursor:zoom-in; }
.cob-bandeja-foto-marco--ampliada { overflow:auto; max-height:75vh; max-height:75dvh; overscroll-behavior:contain; -webkit-overflow-scrolling:touch; }
.cob-bandeja-foto-marco--ampliada img { width:auto; max-width:none; max-height:none; cursor:zoom-out; }
.cob-bandeja-foto-pie { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:8px; font-size:12.5px; }
.cob-bandeja-foto-pie a { color:var(--q-capa-texto, #0B2947); font-weight:600; text-decoration:underline; text-underline-offset:2px; }
.cob-bandeja-foto-datos { font-size:11.5px; color:var(--q-capa-texto, #0B2947); opacity:.8; font-variant-numeric:tabular-nums; }
.cob-bandeja-info { display:flex; flex-direction:column; gap:12px; min-width:0; }
.cob-bandeja-ficha { display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:10px 16px; margin:0; padding:14px; border-radius:12px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); }
.cob-bandeja-ficha-monto { font-size:20px; font-weight:700; font-variant-numeric:tabular-nums; }
.cob-bandeja-etiqueta-alerta { display:inline-flex; align-items:center; gap:4px; margin:4px 0 0; padding:2px 8px; border-radius:999px; background:#0B2947; color:#ECEDE7; font-family:inherit; font-size:11.5px; font-weight:600; white-space:nowrap; }
.cob-bandeja-sub { display:block; font-size:12.5px; color:inherit; }
a.cob-bandeja-sub { text-decoration:underline; text-underline-offset:2px; }
.cob-bandeja-alerta-bloque { display:flex; align-items:flex-start; gap:10px; padding:10px 12px; border:1px solid #0B2947; border-radius:10px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); font-size:13px; font-weight:600; line-height:1.45; }
.cob-bandeja-alerta-bloque svg { flex-shrink:0; margin-top:1px; }
.cob-bandeja-subtitulo { margin:6px 0 0; font-size:14px; font-weight:700; color:var(--q-capa-texto, #0B2947); }
.cob-bandeja-nota { margin:0; font-size:13px; color:var(--q-capa-texto, #0B2947); }
.cob-bandeja-cargos { list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:8px; }
.cob-bandeja-cargo { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:4px 12px; padding:10px 12px; border:1px solid var(--q-capa-borde, #D1D5DB); border-radius:10px; background:var(--admin-surface); color:var(--q-capa-texto, #0B2947); }
.cob-bandeja-cargo--no-alcanza { border-color:#0B2947; background:#D1D5DB; }
.cob-bandeja-cargo-texto { display:flex; flex-direction:column; gap:2px; min-width:0; font-size:12.5px; overflow-wrap:anywhere; }
.cob-bandeja-cargo-texto strong { font-size:13.5px; }
.cob-bandeja-cargo-montos { display:flex; flex-direction:column; align-items:flex-end; gap:2px; font-size:12px; text-align:right; font-variant-numeric:tabular-nums; }
.cob-bandeja-cargo-montos strong { font-size:14px; }
.cob-bandeja-cargo-aviso { grid-column:1 / -1; display:flex; align-items:center; gap:6px; margin:4px 0 0; font-size:12.5px; font-weight:600; }
.cob-bandeja-cargo-aviso svg { flex-shrink:0; }
.cob-bandeja-decision { display:flex; flex-direction:column; gap:10px; padding-top:14px; border-top:1px solid var(--q-capa-borde, #D1D5DB); }
.cob-bandeja-verificado { display:flex; align-items:flex-start; gap:10px; padding:12px; border:1px solid #0B2947; border-radius:10px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); font-size:13.5px; font-weight:600; line-height:1.45; cursor:pointer; }
.cob-bandeja-verificado input { flex-shrink:0; width:20px; height:20px; margin-top:1px; accent-color:#0F9375; }
.cob-bandeja-campos { display:grid; grid-template-columns:minmax(0,1fr); gap:10px 14px; }
.cob-bandeja-campos .qiwo-form-group { margin-bottom:0; }
.cob-bandeja-sugerencias { display:flex; flex-wrap:wrap; gap:6px; }
.cob-bandeja-sugerencias .qiwo-chip { max-width:100%; border-radius:12px; font-size:12.5px; line-height:1.4; text-align:left; white-space:normal; }
/* Sticky al pie del cuerpo: el aviso va al final y, en una laptop de 768 px de
   alto, quedaba debajo del borde; la cajera apretaba "Aprobar pago" y no veía
   nada (testeo de Caja, 23/10/2026). */
.cob-bandeja-error-revision { position:sticky; bottom:0; z-index:2; flex-wrap:wrap; justify-content:space-between; margin:14px 0 0; box-shadow:0 -6px 12px -8px rgba(11,41,71,.35); }
.cob-bandeja-acciones { justify-content:flex-end; }
@media (min-width:600px) {
    .cob-bandeja-campos { grid-template-columns:repeat(2, minmax(0,1fr)); }
}
@media (min-width:900px) {
    .cob-bandeja-revision { grid-template-columns:minmax(0,5fr) minmax(0,6fr); align-items:start; }
    .cob-bandeja-foto { position:sticky; top:0; }
}
@media (max-width:640px) {
    .cob-bandeja-acciones > button { flex:1 1 0; justify-content:center; }
}
@media (max-width:420px) {
    .cob-bandeja-ficha { grid-template-columns:minmax(0,1fr); }
}

/* ══ Cobros: CajaCobro ═════════════════════════════════════════════════════ */

/* Paso 1: resultados de la búsqueda (una fila tocable por alumno). */
.cob-cobro-resultados { list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:8px; }
.cob-cobro-alumno-fila { display:flex; align-items:center; gap:12px; width:100%; min-height:56px; padding:12px 14px; border:1px solid var(--q-capa-borde, #D1D5DB); border-radius:12px; background:var(--admin-surface); color:var(--admin-ink); font:inherit; text-align:left; cursor:pointer; }
.cob-cobro-alumno-fila:hover { border-color:#0F9375; background:var(--admin-selected); }
.cob-cobro-alumno-fila:focus-visible { outline:2px solid #0F9375; outline-offset:2px; }
.cob-cobro-alumno-nombre { flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:2px; }
.cob-cobro-alumno-nombre strong { font-size:14.5px; overflow-wrap:anywhere; }
.cob-cobro-alumno-nombre small { font-size:12.5px; color:var(--admin-muted); overflow-wrap:anywhere; }
.cob-cobro-alumno-deuda { flex:0 1 auto; max-width:45%; display:flex; flex-direction:column; align-items:flex-end; gap:2px; font-size:12px; text-align:right; font-variant-numeric:tabular-nums; }
.cob-cobro-alumno-deuda strong { font-size:15px; }
.cob-cobro-vencido { display:inline-block; padding:1px 6px; border-radius:6px; background:#0B2947; color:#ECEDE7; font-weight:700; }
body.qiwo-dark .cob-cobro-vencido { background:#ECEDE7; color:#0B2947; }
.cob-cobro-chevron { flex-shrink:0; opacity:.6; }

/* Paso 2: ficha del alumno. */
.cob-cobro-ficha { margin-bottom:16px; padding:16px; }
.cob-cobro-ficha-cabeza { display:flex; align-items:flex-start; justify-content:space-between; flex-wrap:wrap; gap:12px; }
.cob-cobro-ficha-cabeza > div { flex:1 1 220px; min-width:0; }
.cob-cobro-ficha-cabeza h2 { margin:0; font-size:18px; font-weight:700; color:var(--admin-ink); overflow-wrap:anywhere; }
.cob-cobro-ficha-cabeza h2:focus { outline:none; }
.cob-cobro-ficha-cabeza h2:focus-visible { outline:2px solid #0F9375; outline-offset:2px; }
.cob-cobro-ficha-cabeza p { margin:4px 0 0; font-size:13px; color:var(--admin-muted); }
.cob-cobro-resumen { display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:8px; margin:14px 0 0; }
.cob-cobro-resumen > div { min-width:0; padding:10px 12px; border-radius:10px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); }
.cob-cobro-resumen dd { font-size:15px; font-weight:700; font-variant-numeric:tabular-nums; }
.cob-cobro-error-accion { flex-wrap:wrap; justify-content:space-between; margin:0 0 16px; }

/* Dos columnas en escritorio: cargos a la izquierda, el cobro fijo a la derecha. */
.cob-cobro-columnas { display:grid; grid-template-columns:minmax(0,1fr); gap:16px; align-items:start; margin-bottom:16px; }
.cob-cobro-seccion-cabeza { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:10px; padding:14px 16px; border-bottom:1px solid var(--q-capa-borde, #D1D5DB); }
.cob-cobro-seccion-cabeza h3 { margin:0; font-size:15px; font-weight:700; color:var(--admin-ink); }
.cob-cobro-contador { min-width:24px; padding:2px 8px; border-radius:999px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); font-size:12px; font-weight:700; text-align:center; }
.cob-cobro-vacio { padding:28px 16px; }

/* Repartir un monto desde el cargo más antiguo. */
.cob-cobro-repartir { display:flex; flex-direction:column; gap:6px; padding:14px 16px; border-bottom:1px solid var(--q-capa-borde, #D1D5DB); }
.cob-cobro-repartir-fila { display:flex; flex-wrap:wrap; gap:8px; }
.cob-cobro-repartir-fila .cob-cobro-monto-campo { flex:1 1 160px; }
.cob-cobro-monto-campo { display:flex; align-items:center; gap:6px; min-width:0; }
.cob-cobro-monto-campo > span { font-weight:600; color:var(--admin-ink); }
.cob-cobro-monto-campo .qiwo-input { width:100%; min-width:0; text-align:right; font-variant-numeric:tabular-nums; }
.cob-cobro-aviso { margin:2px 0 0; padding:8px 10px; border-radius:8px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); font-size:12.5px; font-weight:600; line-height:1.45; }

/* Cada cargo: casilla + texto; al marcarlo, toda la fila se tiñe (no una franja). */
.cob-cobro-cargos-lista { list-style:none; margin:0; padding:0; }
.cob-cobro-cargo { display:grid; grid-template-columns:minmax(0,1fr); gap:8px; padding:12px 16px; border-bottom:1px solid var(--q-capa-borde, #D1D5DB); }
.cob-cobro-cargo:last-child { border-bottom:0; }
.cob-cobro-cargo--elegido { background:var(--admin-selected); }
.cob-cobro-cargo-elegir { display:flex; align-items:flex-start; gap:10px; min-width:0; cursor:pointer; }
.cob-cobro-cargo-elegir input { flex-shrink:0; width:20px; height:20px; margin-top:2px; accent-color:#0F9375; }
.cob-cobro-cargo-texto { display:flex; flex-direction:column; gap:2px; min-width:0; font-size:12.5px; line-height:1.45; color:var(--admin-ink); }
.cob-cobro-cargo-texto strong { font-size:14px; overflow-wrap:anywhere; }
.cob-cobro-cargo-texto .cob-cobro-vencido { align-self:flex-start; }
.cob-cobro-cargo-monto { display:flex; flex-direction:column; gap:4px; min-width:0; padding-left:30px; }
.cob-cobro-saldo { font-size:12.5px; color:var(--admin-ink); }
.cob-cobro-saldo strong { font-size:14px; font-variant-numeric:tabular-nums; }
.cob-cobro-monto-label { font-size:12px; font-weight:600; color:var(--admin-ink); }
.cob-cobro-monto-error { padding:4px 8px; border:1px solid #0B2947; border-radius:6px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); font-size:12px; font-weight:600; line-height:1.4; }
.cob-cobro-parcial { font-size:12px; color:var(--admin-ink); }
.cob-cobro-otros { border-top:1px solid var(--q-capa-borde, #D1D5DB); }
.cob-cobro-otros summary { padding:12px 16px; font-size:13px; font-weight:600; color:var(--admin-ink); cursor:pointer; }
.cob-cobro-otros ul { list-style:none; margin:0; padding:0 16px 12px; display:flex; flex-direction:column; }
.cob-cobro-otros li { display:flex; align-items:flex-start; justify-content:space-between; gap:10px; padding:10px 0; border-top:1px solid var(--q-capa-borde, #D1D5DB); }
.cob-cobro-otros li > div { display:flex; flex-direction:column; gap:2px; min-width:0; font-size:12.5px; color:var(--admin-ink); overflow-wrap:anywhere; }

/* El formulario del cobro. */
.cob-cobro-pago-cuerpo { display:flex; flex-direction:column; gap:10px; padding:14px 16px 16px; }
.cob-cobro-pago-cuerpo .qiwo-form-group { margin-bottom:0; }
.cob-cobro-medios { display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:6px; }
.cob-cobro-medios .qiwo-chip { min-height:40px; padding:6px 8px; border-radius:10px; text-align:center; }
.cob-cobro-ayuda--verifica { display:flex; align-items:flex-start; gap:6px; padding:8px 10px; border-radius:8px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); font-weight:600; }
.cob-cobro-ayuda--verifica svg { flex-shrink:0; margin-top:2px; }
.cob-cobro-total { display:flex; flex-wrap:wrap; align-items:baseline; justify-content:space-between; gap:4px 10px; padding:12px 14px; border-radius:12px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); }
.cob-cobro-total span { font-size:13px; font-weight:600; }
.cob-cobro-total strong { font-size:22px; font-variant-numeric:tabular-nums; }
.cob-cobro-total small { flex-basis:100%; font-size:12px; color:var(--q-capa-texto, #0B2947); }
body.qiwo-dark .cob-cobro-total { border:1px solid #E0F2F1; }
.cob-cobro-error-cobro { margin:0; }
.cob-cobro-registrar { width:100%; min-height:46px; justify-content:center; font-size:15px; }

/* Pagos del alumno. */
.cob-cobro-pagos { margin-bottom:16px; }
.cob-cobro-pagos-lista { list-style:none; margin:0; padding:0; }
.cob-cobro-pago-item { display:flex; flex-direction:column; gap:6px; min-width:0; padding:14px 16px; border-bottom:1px solid var(--q-capa-borde, #D1D5DB); color:var(--admin-ink); }
.cob-cobro-pago-item:last-child { border-bottom:0; }
.cob-cobro-pago-cabeza { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:8px 10px; }
.cob-cobro-pago-cabeza strong { font-size:17px; font-variant-numeric:tabular-nums; }
.cob-cobro-pago-nota,
.cob-cobro-pago-linea,
.cob-cobro-pago-meta { margin:0; font-size:12.5px; line-height:1.45; overflow-wrap:anywhere; }
.cob-cobro-pago-meta { display:flex; flex-wrap:wrap; gap:2px 14px; opacity:.85; }
.cob-cobro-pago-motivo { margin:0; padding:6px 10px; border-radius:8px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); font-size:12.5px; overflow-wrap:anywhere; }
.cob-cobro-pago-acciones { display:flex; flex-wrap:wrap; gap:8px; margin-top:4px; }
.cob-cobro-btn-anular { border-color:#0B2947; }

/* Diálogo de anulación (los diálogos siempre son crema con tinta azul). */
.cob-cobro-anular-ficha { display:grid; gap:8px; margin:0 0 12px; padding:12px; border-radius:10px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); }
.cob-cobro-anular-aviso { margin:0 0 12px; font-size:13px; line-height:1.5; color:var(--q-capa-texto, #0B2947); }

@media (min-width:600px) {
    .cob-cobro-cargo { grid-template-columns:minmax(0,1fr) minmax(170px, 210px); align-items:start; }
    .cob-cobro-cargo-monto { padding-left:0; }
}
@media (min-width:1024px) {
    .cob-cobro-columnas { grid-template-columns:minmax(0,3fr) minmax(300px,2fr); }
    .cob-cobro-pago { position:sticky; top:12px; }
}
@media (max-width:420px) {
    .cob-cobro-resumen > div { padding:8px; }
    .cob-cobro-resumen dd { font-size:13.5px; }
    .cob-cobro-medios { grid-template-columns:repeat(2, minmax(0,1fr)); }
}

/* ══ Cobros: CajaReportes (cob-rep-) y ApoderadoEstadoCuenta (cob-cta-) ══
   Cobros v1, ADR 0065, 20/10/2026. Lo pega el integrador al final de
   wwwroot/css/qiwo.css (Qiwo no usa .razor.css).

   · Prefijo propio por pantalla, como los demás agentes (cob-adm-, cob-bandeja-,
     cob-cobro-): pegar todos los CSS de Cobros juntos no pisa nada.
   · Reusa primero lo que ya existe: admin-hybrid-page (tablas que se vuelven
     tarjetas en celular), qiwo-table-card, qiwo-table, qiwo-chip, qiwo-search-box,
     pers-resumen(-card), pers-toast, qiwo-modal-* + qiwo-dialog-overlay,
     CierraConAtras, qiwo-empty-state, qiwo-form-group, CampoFecha.
   · Solo los 5 colores de marca (#0B2947 #0F9375 #ECEDE7 #D1D5DB #E0F2F1); en
     modo oscuro, transparencias de esos mismos (criterio del bloque del 09/10).
   · Celular primero: lo base es la pantalla de 390 px; lo de escritorio va en
     min-width. Sin franja lateral de acento: el estado se marca tiñendo toda la
     superficie, con un punto o con la pastilla. */

/* ── Comunes a las dos pantallas ─────────────────────────────────────────── */
.cob-rep-encabezado, .cob-cta-encabezado { display:flex; flex-wrap:wrap; align-items:flex-end; justify-content:space-between; gap:12px; margin-bottom:16px; }
.cob-rep-encabezado > div, .cob-cta-encabezado > div { min-width:0; }
.cob-rep-aviso-bloqueo, .cob-cta-aviso-bloqueo { padding:34px 22px; text-align:center; color:#0B2947; font-size:14px; line-height:1.5; }
.cob-rep-alerta, .cob-cta-alerta { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:12px; margin-bottom:16px; }
.cob-rep-alerta > span, .cob-cta-alerta > span { flex:1 1 220px; min-width:0; overflow-wrap:anywhere; }
.cob-rep-ayuda, .cob-cta-ayuda { margin:8px 0 0; font-size:13px; line-height:1.5; color:#0B2947; opacity:.8; }
.cob-rep-sub, .cob-cta-sub { display:block; font-size:12px; line-height:1.45; color:#0B2947; opacity:.75; overflow-wrap:anywhere; }
.cob-rep-num { font-variant-numeric:tabular-nums; white-space:nowrap; }

/* Pastillas de estado: superficie teñida + punto (la forma distingue sin depender del color). */
.cob-rep-estado, .cob-cta-estado { display:inline-flex; align-items:center; gap:6px; padding:3px 10px; border-radius:999px; border:1px solid #D1D5DB; background:#ECEDE7; color:#0B2947; font-size:12px; font-weight:600; line-height:1.4; white-space:nowrap; }
.cob-rep-estado::before, .cob-cta-estado::before { content:""; flex:0 0 7px; width:7px; height:7px; border-radius:50%; background:#D1D5DB; }
.cob-rep-estado-alerta, .cob-cta-estado-alerta { background:#0B2947; border-color:#0B2947; color:#ECEDE7; }
.cob-rep-estado-alerta::before, .cob-cta-estado-alerta::before { background:#ECEDE7; }
.cob-rep-estado-revision, .cob-cta-estado-revision { background:#D1D5DB; border-color:#D1D5DB; color:#0B2947; }
.cob-rep-estado-revision::before, .cob-cta-estado-revision::before { flex-basis:5px; width:5px; height:5px; background:transparent; border:2px solid #0B2947; }
.cob-cta-estado-ok { background:#E0F2F1; border-color:#0F9375; color:#0B2947; }
.cob-cta-estado-ok::before { background:#0F9375; }
.cob-rep-estado-neutro::before, .cob-cta-estado-neutro::before { background:#0B2947; opacity:.35; }

/* Resumen de cifras (sobre pers-resumen): montos largos sin desbordar en 390 px. */
.cob-rep-resumen, .cob-cta-resumen { grid-template-columns:repeat(2, minmax(0, 1fr)); gap:10px; margin:0 0 16px; }
.cob-rep-resumen .pers-resumen-card, .cob-cta-resumen .pers-resumen-card { min-width:0; padding:14px; }
.cob-rep-resumen .pers-resumen-card strong, .cob-cta-resumen .pers-resumen-card strong { font-size:clamp(17px, 5vw, 24px); line-height:1.2; overflow-wrap:anywhere; font-variant-numeric:tabular-nums; }
.cob-rep-resumen .pers-resumen-card span, .cob-cta-resumen .pers-resumen-card span { font-size:12px; }
body .admin-hybrid-page .cob-cta-resumen .pers-resumen-card.cob-cta-resumen-alerta { background:#0B2947; border-color:#0B2947; color:#ECEDE7; }

/* Aviso flotante (sobre pers-toast) */
.cob-rep-toast, .cob-cta-toast { max-width:min(520px, calc(100vw - 24px)); }
.cob-rep-toast > span, .cob-cta-toast > span { min-width:0; overflow-wrap:anywhere; }
.cob-rep-toast-error { background:#D1D5DB; border-color:#0B2947; }

/* ── CajaReportes ────────────────────────────────────────────────────────── */
/* Pestañas: el indicador inferior del activo es navegación (permitido), no estado. */
.cob-rep-tabs { display:flex; gap:4px; margin:0 0 16px; border-bottom:1px solid var(--q-capa-borde, #D1D5DB); overflow-x:auto; scrollbar-width:none; }
.cob-rep-tab { display:inline-flex; flex:1 1 0; align-items:center; justify-content:center; gap:8px; min-height:44px; padding:10px 14px; border:0; border-bottom:3px solid transparent; background:transparent; color:var(--q-capa-texto, #0B2947); font:inherit; font-size:14px; font-weight:600; opacity:.7; cursor:pointer; white-space:nowrap; }
.cob-rep-tab:hover { opacity:1; }
.cob-rep-tab-activa { opacity:1; border-bottom-color:#0F9375; }
.cob-rep-tab:focus-visible { outline:2px solid #0F9375; outline-offset:-2px; }

.cob-rep-filtros { padding:14px; margin-bottom:16px; }
.cob-rep-filtros-fila { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:12px; align-items:end; }
.cob-rep-campo { display:flex; flex-direction:column; gap:6px; min-width:0; }
.cob-rep-filtros-fila > .qiwo-filter-chips,
.cob-rep-filtros-fila > .cob-rep-buscar,
.cob-rep-filtros-fila > .cob-rep-select,
.cob-rep-filtros-fila > .cob-rep-btn-excel { grid-column:1 / -1; }
.cob-rep-btn-excel { display:inline-flex; align-items:center; justify-content:center; gap:8px; min-height:42px; }
.cob-rep-buscar { min-width:0; }
.cob-rep-buscar input { width:100%; min-width:0; }
.cob-rep-select { width:100%; min-width:0; }

.cob-rep-tabla-card { overflow:hidden; }
.cob-rep-vistas { padding:12px 14px; border-bottom:1px solid var(--q-capa-borde, #D1D5DB); }
.cob-rep-tabla td strong { font-variant-numeric:tabular-nums; }
.cob-rep-alumno { display:flex; flex-direction:column; gap:3px; min-width:0; }
.cob-rep-alumno .cob-rep-estado { align-self:flex-start; margin-top:2px; }
.cob-rep-barra { display:block; width:100%; max-width:220px; height:6px; margin-top:6px; border-radius:999px; background:#D1D5DB; overflow:hidden; }
.cob-rep-barra > span { display:block; height:100%; border-radius:inherit; background:#0F9375; }
.cob-rep-tel { display:inline-flex; align-items:center; gap:5px; margin-top:2px; color:var(--q-capa-texto, #0B2947); font-weight:600; text-decoration:underline; text-underline-offset:3px; overflow-wrap:anywhere; }
.cob-rep-tel:focus-visible { outline:2px solid #0F9375; outline-offset:2px; border-radius:4px; }
.cob-rep-ayuda-tabla { padding:0 14px 12px; }
.cob-rep-pie { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:6px 12px; }

/* En celular la tabla ya se vuelve tarjetas (admin-hybrid-page): acá solo se
   ajusta lo propio para que nada pase de 390 px. */
@media (max-width:767px) {
    body .admin-hybrid-page .cob-rep-tabla tbody td.cob-rep-num { justify-content:flex-start; text-align:left; white-space:normal; }
    body .admin-hybrid-page .cob-rep-tabla tbody td > .cob-rep-sub,
    body .admin-hybrid-page .cob-rep-tabla tbody td > .cob-rep-barra,
    body .admin-hybrid-page .cob-rep-tabla tbody td > .cob-rep-alumno { flex-basis:100%; }
    body .admin-hybrid-page .cob-rep-tabla tbody td > .cob-rep-barra { max-width:none; }
}

@media (min-width:768px) {
    .cob-rep-tab { flex:0 0 auto; }
    .cob-rep-filtros-fila { display:flex; flex-wrap:wrap; }
    .cob-rep-campo { width:170px; }
    .cob-rep-filtros-fila > .cob-rep-buscar { flex:1 1 240px; }
    .cob-rep-filtros-fila > .cob-rep-select { width:auto; min-width:170px; }
    .cob-rep-filtros-fila > .cob-rep-btn-excel { margin-left:auto; }
    .cob-rep-resumen { grid-template-columns:repeat(auto-fit, minmax(170px, 1fr)); }
    .cob-rep-tabla th.cob-rep-num, .cob-rep-tabla td.cob-rep-num { text-align:right; }
}

/* ── ApoderadoEstadoCuenta ───────────────────────────────────────────────── */
.cob-cta-btn-voucher { display:inline-flex; align-items:center; justify-content:center; gap:8px; width:100%; min-height:44px; }

.cob-cta-hijo { padding:16px; margin-bottom:16px; }
.cob-cta-hijo-cabecera { display:flex; flex-direction:column; gap:14px; }
.cob-cta-hijo-nombre { display:flex; align-items:center; gap:12px; min-width:0; }
.cob-cta-hijo-nombre > div:last-child { min-width:0; }
.cob-cta-hijo-nombre h2 { margin:0; font-size:17px; line-height:1.3; color:#0B2947; overflow-wrap:anywhere; }
.cob-cta-hijo-cifras { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:8px; margin:0; }
.cob-cta-hijo-cifras > div { min-width:0; padding:10px 12px; border:1px solid #D1D5DB; border-radius:10px; }
.cob-cta-hijo-cifras dt { margin:0; font-size:12px; color:#0B2947; opacity:.75; }
.cob-cta-hijo-cifras dd { margin:2px 0 0; font-size:16px; font-weight:700; color:#0B2947; font-variant-numeric:tabular-nums; overflow-wrap:anywhere; }

.cob-cta-al-dia { display:flex; align-items:center; gap:8px; margin:14px 0 0; font-size:14px; font-weight:600; color:#0B2947; }
.cob-cta-al-dia svg { flex-shrink:0; color:#0F9375; }
.cob-cta-lista-titulo { margin:18px 0 8px; font-size:14px; font-weight:700; color:#0B2947; }

.cob-cta-cargos { display:flex; flex-direction:column; gap:8px; margin:0; padding:0; list-style:none; }
.cob-cta-cargo { display:grid; grid-template-columns:minmax(0, 1fr) auto; align-items:center; gap:8px 12px; padding:12px; border:1px solid #D1D5DB; border-radius:12px; }
.cob-cta-cargo-vencido { background:#D1D5DB; }
.cob-cta-cargo-info { display:flex; flex-direction:column; gap:2px; min-width:0; }
.cob-cta-cargo-titulo { font-size:14px; font-weight:600; color:#0B2947; overflow-wrap:anywhere; }
.cob-cta-cargo-monto { display:flex; flex-direction:column; align-items:flex-end; gap:4px; text-align:right; }
.cob-cta-cargo-monto strong { font-size:16px; color:#0B2947; font-variant-numeric:tabular-nums; white-space:nowrap; }
.cob-cta-btn-pagar { grid-column:1 / -1; justify-content:center; min-height:40px; }

.cob-cta-cerrados { margin-top:14px; }
.cob-cta-cerrados > summary { display:inline-flex; align-items:center; min-height:40px; font-size:14px; font-weight:600; color:#0B2947; cursor:pointer; text-decoration:underline; text-underline-offset:3px; }
.cob-cta-cerrados > summary:focus-visible { outline:2px solid #0F9375; outline-offset:2px; border-radius:4px; }
.cob-cta-cerrados[open] > summary { margin-bottom:8px; }

.cob-cta-seccion { margin-top:28px; }
.cob-cta-seccion-titulo { margin:0; font-size:18px; color:#0B2947; }
.cob-cta-seccion > .cob-cta-ayuda { margin:4px 0 12px; }
.cob-cta-pagos { display:flex; flex-direction:column; gap:10px; margin:0; padding:0; list-style:none; }
.cob-cta-pago { display:flex; flex-direction:column; gap:6px; padding:14px 16px; }
.cob-cta-pago-cabecera { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:8px; }
.cob-cta-pago-cabecera strong { font-size:18px; color:#0B2947; font-variant-numeric:tabular-nums; }
.cob-cta-pago-detalle { font-size:13px; line-height:1.5; color:#0B2947; overflow-wrap:anywhere; }
.cob-cta-pago-motivo { display:flex; flex-direction:column; gap:2px; padding:10px 12px; border-radius:10px; background:#D1D5DB; color:#0B2947; font-size:13px; line-height:1.5; overflow-wrap:anywhere; }
.cob-cta-btn-foto { display:inline-flex; align-self:flex-start; align-items:center; justify-content:center; gap:6px; min-height:40px; cursor:pointer; }
.cob-cta-btn-inactivo { opacity:.6; pointer-events:none; }

/* Formulario del voucher (dentro de qiwo-dialog-overlay, que en celular es hoja inferior) */
.cob-cta-modal-voucher .qiwo-modal-body { padding-bottom:8px; }
/* El aviso se pinta al inicio del formulario, pero el papá aprieta "Enviar" al
   final, con la lista ya bajada: sin sticky el aviso quedaba 1 500 px arriba y
   el botón parecía no hacer nada (testeo de Caja, 23/10/2026). */
.cob-cta-modal-error { position:sticky; top:0; z-index:2; margin-bottom:12px; box-shadow:0 6px 12px -8px rgba(11,41,71,.35); }
.cob-cta-fieldset { min-width:0; margin:0 0 18px; padding:0; border:0; }
.cob-cta-fieldset > legend { margin-bottom:4px; padding:0; }
.cob-cta-elegir { display:flex; flex-direction:column; gap:8px; margin:10px 0 0; padding:0; list-style:none; }
.cob-cta-elegir-fila { display:flex; flex-wrap:wrap; align-items:center; gap:8px 12px; padding:10px 12px; border:1px solid #D1D5DB; border-radius:10px; }
.cob-cta-elegir-activa { background:#E0F2F1; border-color:#0F9375; }
.cob-cta-elegir-check { display:flex; flex:1 1 220px; align-items:flex-start; gap:10px; min-width:0; cursor:pointer; }
.cob-cta-elegir-check input[type="checkbox"] { flex:0 0 20px; width:20px; height:20px; margin:2px 0 0; accent-color:#0F9375; cursor:pointer; }
.cob-cta-elegir-check input[type="checkbox"]:disabled { cursor:not-allowed; }
.cob-cta-elegir-check input[type="checkbox"]:focus-visible { outline:2px solid #0B2947; outline-offset:2px; }
.cob-cta-elegir-texto { display:flex; flex-direction:column; gap:2px; min-width:0; }
.cob-cta-elegir-monto { display:flex; flex:1 1 100%; align-items:center; gap:6px; padding-left:30px; }
.cob-cta-elegir-monto .qiwo-input { width:100%; max-width:160px; text-align:right; font-variant-numeric:tabular-nums; }
.cob-cta-moneda { font-size:14px; font-weight:600; color:#0B2947; }
.cob-cta-total { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-top:12px; padding:12px 14px; border-radius:10px; background:#0B2947; color:#ECEDE7; }
.cob-cta-total strong { font-size:18px; font-variant-numeric:tabular-nums; text-align:right; }
.cob-cta-form-grid { display:grid; grid-template-columns:minmax(0, 1fr); gap:0 12px; }
.cob-cta-foto { display:flex; align-items:center; gap:12px; padding:12px; border:1px dashed #0B2947; border-radius:10px; }
.cob-cta-foto-mini { flex:0 0 72px; width:72px; height:72px; object-fit:cover; border:1px solid #D1D5DB; border-radius:8px; }
.cob-cta-foto-datos { display:flex; flex-direction:column; align-items:flex-start; gap:8px; min-width:0; }
.cob-cta-foto-lista { display:inline-flex; align-items:center; gap:6px; font-size:13px; font-weight:600; color:#0B2947; }
.cob-cta-foto-lista svg { flex-shrink:0; color:#0F9375; }
/* El input de archivo queda accesible pero invisible; el label hace de botón. */
.cob-cta-file-oculto { position:absolute; width:1px; height:1px; margin:-1px; padding:0; border:0; overflow:hidden; clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap; }
.cob-cta-file-oculto:focus-visible + label { outline:2px solid #0F9375; outline-offset:2px; }
.cob-cta-error-campo { margin:6px 0 0; padding:8px 10px; border-radius:8px; background:#D1D5DB; color:#0B2947; font-size:13px; font-weight:600; line-height:1.45; }
.cob-cta-foto-grande { display:block; max-width:100%; max-height:70vh; max-height:70dvh; margin:0 auto; border-radius:8px; object-fit:contain; }

@media (min-width:600px) {
    .cob-cta-btn-voucher { width:auto; }
    .cob-cta-cargo { grid-template-columns:minmax(0, 1fr) auto auto; }
    .cob-cta-btn-pagar { grid-column:auto; }
    .cob-cta-elegir-monto { flex:0 0 auto; padding-left:0; }
    .cob-cta-elegir-monto .qiwo-input { width:130px; }
    .cob-cta-form-grid { grid-template-columns:repeat(2, minmax(0, 1fr)); }
}
@media (min-width:768px) {
    .cob-cta-hijo { padding:18px 20px; }
    .cob-cta-hijo-cabecera { flex-direction:row; flex-wrap:wrap; align-items:center; justify-content:space-between; }
    .cob-cta-hijo-cifras { grid-template-columns:repeat(4, minmax(110px, 1fr)); }
    .cob-cta-resumen { grid-template-columns:repeat(3, minmax(0, 1fr)); }
}

/* ── Modo oscuro (mismo criterio que la reconciliación del 09/10: superficies
   con transparencia, texto claro de marca, tintes en vez de fondos claros) ── */
body.qiwo-dark .admin-shell .admin-content :is(.cob-rep-aviso-bloqueo, .cob-cta-aviso-bloqueo, .cob-rep-ayuda, .cob-cta-ayuda,
    .cob-rep-sub, .cob-cta-sub, .cob-rep-tab, .cob-rep-tel, .cob-cta-hijo-nombre h2, .cob-cta-hijo-cifras dt, .cob-cta-hijo-cifras dd,
    .cob-cta-al-dia, .cob-cta-lista-titulo, .cob-cta-cargo-titulo, .cob-cta-cargo-monto strong, .cob-cta-cerrados > summary,
    .cob-cta-seccion-titulo, .cob-cta-pago-cabecera strong, .cob-cta-pago-detalle, .cob-cta-moneda, .cob-cta-foto-lista) { color:#ECEDE7; }
body.qiwo-dark .admin-shell .admin-content :is(.cob-rep-tabs, .cob-rep-vistas, .cob-cta-cargo, .cob-cta-hijo-cifras > div, .cob-cta-elegir-fila) { border-color:rgba(255,255,255,.10); }
body.qiwo-dark .admin-shell .admin-content .cob-rep-tab-activa { border-bottom-color:#0F9375; }
body.qiwo-dark .admin-shell .admin-content :is(.cob-cta-cargo-vencido, .cob-cta-pago-motivo, .cob-cta-error-campo) { background:rgba(209,213,219,.12); color:#ECEDE7; }
body.qiwo-dark .admin-shell .admin-content .cob-cta-elegir-activa { background:rgba(15,147,117,.18); border-color:rgba(15,147,117,.45); }
body.qiwo-dark .admin-shell .admin-content .cob-cta-total { background:rgba(15,147,117,.18); color:#ECEDE7; }
body.qiwo-dark .admin-shell .admin-content .cob-cta-foto { border-color:rgba(255,255,255,.25); }
body.qiwo-dark .admin-shell .admin-content .cob-rep-barra { background:rgba(255,255,255,.10); }
body.qiwo-dark .admin-shell .admin-content :is(.cob-rep-estado, .cob-cta-estado) { background:rgba(255,255,255,.06); border-color:rgba(255,255,255,.12); color:#ECEDE7; }
body.qiwo-dark .admin-shell .admin-content :is(.cob-rep-estado, .cob-cta-estado)::before { background:#D1D5DB; }
body.qiwo-dark .admin-shell .admin-content :is(.cob-rep-estado-alerta, .cob-cta-estado-alerta) { background:#ECEDE7; border-color:#ECEDE7; color:#0B2947; }
body.qiwo-dark .admin-shell .admin-content :is(.cob-rep-estado-alerta, .cob-cta-estado-alerta)::before { background:#0B2947; }
body.qiwo-dark .admin-shell .admin-content :is(.cob-rep-estado-revision, .cob-cta-estado-revision)::before { background:transparent; border-color:#ECEDE7; }
body.qiwo-dark .admin-shell .admin-content .cob-cta-estado-ok { background:rgba(15,147,117,.18); border-color:rgba(15,147,117,.45); color:#E0F2F1; }
body.qiwo-dark .admin-shell .admin-content .cob-cta-estado-ok::before { background:#0F9375; }
body.qiwo-dark .admin-shell .admin-content .cob-cta-resumen .pers-resumen-card.cob-cta-resumen-alerta { background:#ECEDE7 !important; color:#0B2947 !important; }
body.qiwo-dark .cob-rep-toast-error { background:#D1D5DB; color:#0B2947; }

/* ── Rostro del personal (21/10/2026): registrar en Admin y "Soy profesor" en la Lectora ── */
.rostro-modal { max-width: 560px; }
.rostro-ayuda { margin: 0 0 12px; line-height: 1.5; }
.rostro-camara { position: relative; aspect-ratio: 4 / 3; background: #0B2947; border-radius: 14px; overflow: hidden; }
.rostro-camara video { width: 100%; height: 100%; object-fit: cover; transform: scaleX(-1); }
.rostro-camara video.camara-trasera { transform: none; }
.rostro-pista { margin: 12px 0 8px; font-weight: 600; text-align: center; min-height: 1.4em; }
.rostro-progreso { display: flex; justify-content: center; gap: 10px; margin-bottom: 16px; }
.rostro-punto { width: 14px; height: 14px; border-radius: 50%; background: #D1D5DB; }
.rostro-punto-hecho { background: #0F9375; }
.rostro-acciones { justify-content: center; }
/* La cámara frontal se ve como espejo: es lo natural para quien se mira. El análisis usa el cuadro real. */
.kiosco-rostro .kiosco-qr-scan-marco video { transform: scaleX(-1); }
/* Acción común a V1/V2/V3: ocupa su propia fila y no tapa la marcación. */
.kiosco-personal-accion { position:relative; z-index:10; flex-shrink:0; display:flex; justify-content:center; padding:6px 16px 10px; }
.kiosco-personal-btn { display:inline-flex; align-items:center; justify-content:center; gap:12px; min-height:60px; min-width:240px; max-width:100%; padding:12px 28px; border:2px solid #ECEDE7; border-radius:18px; background:#FFFFFF; color:#0B2947; font:inherit; font-size:20px; font-weight:800; cursor:pointer; }
.kiosco-personal-btn svg { width:28px; height:28px; flex-shrink:0; }
.kiosco-personal-btn:focus-visible { outline:3px solid #0F9375; outline-offset:3px; }
.kiosco-personal-btn:hover, .kiosco-personal-btn:active { background:#ECEDE7; }
/* Encima del video, sin desmontarlo: dos avisos como máximo y sin interceptar toques. */
.kiosco-rostro-avisos { position:absolute; z-index:3; top:8px; left:8px; right:8px; display:grid; gap:6px; pointer-events:none; }
.kiosco-rostro-aviso { display:flex; align-items:center; flex-wrap:wrap; gap:4px; padding:9px 12px; border:1px solid #D1D5DB; border-radius:12px; background:#D1D5DB; color:#0B2947; font-size:16px; line-height:1.25; text-align:left; }
.kiosco-rostro-aviso svg { width:20px; height:20px; flex-shrink:0; }
.kiosco-rostro-aviso strong { overflow-wrap:anywhere; }
.kiosco-rostro-aviso--puntual, .kiosco-rostro-aviso--salida, .kiosco-rostro-aviso--asistio { background:#E0F2F1; border-color:#0F9375; color:#0B2947; }
.kiosco-rostro-aviso--tardanza { background: #FEF3A0; color: #854D0E; }
.kiosco-rostro-aviso--denegado, .kiosco-rostro-aviso--fuera_horario { background:#0B2947; color:#ECEDE7; }
@media (max-height:600px) { .kiosco-personal-accion { padding-block:4px; } .kiosco-personal-btn { min-height:56px; padding-block:8px; } }
/* Guía de "Soy profesor" (21/10/2026): la mueve rostro.mjs. */
.kiosco-rostro .rostro-abriendo { position: absolute; inset: 0; display: none; flex-direction: column; align-items: center; justify-content: center; gap: 10px; background: #0B2947; color: #ECEDE7; font-size: 1rem; }
.kiosco-rostro .rostro-abriendo svg { width: 32px; height: 32px; }
.kiosco-rostro .rostro-sin-imagen .rostro-abriendo { display: flex; }
.rostro-caja { position: absolute; border: 4px solid #0F9375; border-radius: 12px; pointer-events: none; transition: left .12s linear, top .12s linear, width .12s linear, height .12s linear; }
.rostro-caja.rostro-caja-ok { border-color: #ECEDE7; }
.rostro-caja[hidden] { display: none; }
.kiosco-rostro-pista { margin-top: .4rem; }
/* Descarga del motor (21/10/2026): barra delgada bajo el texto, con el verde de marca. */
.rostro-carga { width: min(320px, 80%); height: 6px; margin: 8px auto 12px; border-radius: 999px; background: #D1D5DB; overflow: hidden; }
.rostro-carga[hidden] { display: none; }
.rostro-carga > span { display: block; height: 100%; width: 0; border-radius: inherit; background: #0F9375; transition: width .3s ease-out; }
@media (prefers-reduced-motion: reduce) { .rostro-carga > span { transition: none; } }
.espera-acciones { display: flex; gap: .75rem; flex-wrap: wrap; justify-content: center; }
.rostro-exito { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 24px 8px 16px; text-align: center; font-weight: 600; }
.rostro-exito p { margin: 0; line-height: 1.5; }

/* ADR 0068: ficha conjunta de tarjeta, QR y rostro del personal. */
.cp-metodo { display:grid; gap:10px; padding:16px; border:1px solid #D1D5DB; border-radius:12px; background:#ECEDE7; min-width:0; }
.cp-metodo h4 { margin:0; color:#0B2947; font-size:15px; }
/* La grilla estira a sus hijos: el estado ("Activo", "Sin QR") y el código van a su ancho natural. */
.cp-metodo > .cp-estado, .cp-metodo > .cp-valor { justify-self:start; }
.cp-metodo .cp-ayuda { margin:0; }
.cp-metodo .pers-actions { flex-wrap:wrap; }
.cp-qr { width:220px; max-width:100%; height:auto; justify-self:center; }
.cred-personal .cp-modal { width:min(640px, calc(100vw - 32px)); max-height:90vh; max-height:90dvh; }
.cred-personal .cp-form { min-height:0; overflow:auto; }
.cred-personal .cp-tabla-wrap { overflow-x:auto; }
.cred-personal .cp-tabla { min-width:560px; }
@media (max-width:600px) {
    .cred-personal .cp-modal { width:100%; max-height:95vh; max-height:95dvh; }
    .cred-personal-toolbar { align-items:stretch; flex-direction:column; }
    .cp-metodo .pers-actions > button { flex:1 1 140px; }
}

/* ── Panel SkyMars › Tablets (pulso de QiwoLectora, 22/10/2026) ── */
.tablets-kpis { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-bottom: 16px; }
.tablets-kpi { background: #fff; border: 1px solid #D1D5DB; border-radius: 12px; padding: 12px 14px; }
.tablets-kpi span { display: block; font-size: 12px; color: #506376; }
.tablets-kpi strong { font-size: 22px; color: #0B2947; }
.tablet-detalle { background: #ECEDE7; }
/* Mismo tinte de riesgo que auxiliar-record-card.nivel-riesgo; toda la superficie. */
body .admin-content .qiwo-table tbody tr.tablet-riesgo td,
body .admin-content .qiwo-table tbody tr.tablet-riesgo:hover td { background: #FEE2E2; }
body.qiwo-dark .admin-content .qiwo-table tbody tr.tablet-riesgo td,
body.qiwo-dark .admin-content .qiwo-table tbody tr.tablet-riesgo:hover td { background: rgba(220,38,38,.14); }
.tablet-eventos { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.tablet-eventos li { display: flex; gap: 8px; align-items: baseline; font-size: 13px; }
.tablet-evento-hora { font-variant-numeric: tabular-nums; color: #506376; white-space: nowrap; }
body.qiwo-dark .tablets-kpi { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.12); }
body.qiwo-dark .tablets-kpi strong { color: #ECEDE7; }
body.qiwo-dark .tablet-detalle { background: rgba(255,255,255,.03); }
@media (max-width: 800px) { .tablets-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* Recibo interno de Caja: tarjeta y acciones compartidas con el portal. */
.cob-recibo { display: grid; gap: 12px; min-width: 0; margin: 16px 0; padding: 20px; background: #E0F2F1; color: #0B2947; border: 1px solid #D1D5DB; border-radius: 12px; overflow-wrap: anywhere; }
.cob-recibo-acciones { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.cob-recibo-acciones a { text-decoration: none; }
.cob-recibo-aviso { margin: 0; font-size: 13px; line-height: 1.5; }
.cob-recibo--compacto { padding: 10px 12px; margin: 8px 0; font-size: 13px; }
@media (max-width: 600px) { .cob-recibo { padding: 14px; } .cob-recibo-acciones > * { flex: 1 1 auto; text-align: center; } }
/* Caja: venta suelta y arqueo del día. */
.cob-venta-campos { border: 0; margin: 0; min-width: 0; }
.cob-venta-form { padding: 0; display: flex; flex-direction: column; }
.cob-venta-form .qiwo-label { display: block; margin: .9rem 0 .35rem; font-weight: 600; }
.cob-venta-form .qiwo-label:first-child { margin-top: .25rem; }
.cob-venta-form .qiwo-input { display: block; width: 100%; box-sizing: border-box; }
.cob-cierre-pagina { color:var(--q-capa-texto, #0B2947); }
@media (max-width: 600px) {
    .cob-cierre-totales { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .cob-cierre-filtros > div { width: 100%; min-width: 0; }
    .cob-cierre-seccion { padding: 1rem; }
}

/* Caja abierta: catálogo y carrito (ADR 0076). */
.cob-catalogo-grilla { display:grid; grid-template-columns:repeat(auto-fill,minmax(135px,1fr)); gap:12px; margin-top:16px; }
.cob-catalogo-tarjeta { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:8px; min-height:150px; padding:14px; border:1px solid var(--q-capa-borde, #D1D5DB); border-radius:14px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); cursor:pointer; font:inherit; overflow-wrap:anywhere; }
.cob-catalogo-tarjeta:hover { background:var(--q-capa-hover, #ECEDE7); border-color:#0F9375; }
.cob-catalogo-tarjeta:focus-visible { outline:3px solid #0F9375; outline-offset:2px; }
.cob-catalogo-tarjeta img { width:100%; height:100px; object-fit:contain; border-radius:8px; }
.cob-catalogo-tallas, .cob-catalogo-acciones { display:flex; flex-wrap:wrap; gap:10px; margin:14px 0; }
.cob-catalogo-tallas strong { flex-basis:100%; }
.cob-catalogo-tallas button, .cob-carrito button { min-height:40px; min-width:40px; }
.cob-carrito { display:grid; gap:12px; min-width:0; }
.cob-carrito h3 { margin:0; font-size:18px; }
.cob-carrito-linea { padding:12px; border:1px solid var(--q-capa-borde, #D1D5DB); border-radius:12px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); overflow-wrap:anywhere; }
.cob-carrito-cantidad { display:flex; align-items:center; gap:10px; margin:8px 0; flex-wrap:wrap; }
.cob-carrito-cantidad strong { margin-left:auto; font-variant-numeric:tabular-nums; }
.cob-carrito-precio { background:transparent; color:inherit; border:0; text-decoration:underline; cursor:pointer; font:inherit; font-size:13px; }
.cob-catalogo-miniatura { display:inline-flex; vertical-align:middle; margin-right:8px; }
.cob-catalogo-miniatura img { width:40px; height:40px; object-fit:contain; border-radius:6px; }
.cob-catalogo-preview { width:140px; height:140px; object-fit:contain; }
.cob-catalogo-form { display:grid; gap:14px; margin-top:14px; }
.cob-catalogo-form label { display:grid; gap:6px; min-width:0; }
.cob-catalogo-form input[type=file] { width:100%; max-width:100%; }
.cob-catalogo-talla-fila { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto; gap:8px; align-items:end; }
@media (max-width:600px) {
    .cob-catalogo-grilla { grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
    .cob-catalogo-tarjeta { padding:10px; }
    .cob-catalogo-talla-fila { grid-template-columns:minmax(0,1fr) minmax(0,1fr); }
    .cob-catalogo-talla-fila button { grid-column:1 / -1; }
}

.cob-cobro-cargos .cob-venta-campos > .qiwo-label { display:block; margin-bottom:6px; }
.cob-cobro-cargos .cob-venta-campos > .qiwo-input { width:100%; }
.cob-catalogo-talla-fila input, .cob-catalogo-form input { width:100%; }

/* Caja: modos, efectivo y visor (25/10/2026). */
.cob-modo { position:relative; isolation:isolate; display:grid; grid-template-columns:1fr 1fr; width:min(100%,440px); padding:4px; margin:0 0 20px; border:1px solid var(--q-capa-borde, #D1D5DB); border-radius:14px; background:var(--q-capa-hover, #ECEDE7); }
.cob-modo-indicador { position:absolute; z-index:-1; inset:4px auto 4px 4px; width:calc((100% - 8px)/2); border-radius:10px; background:var(--q-capa-hover, #ECEDE7); box-shadow:0 1px 4px #D1D5DB; transform:translateX(0); transition:transform 200ms ease-out; }
.cob-modo--venta .cob-modo-indicador { transform:translateX(100%); }
.cob-modo button { min-width:0; min-height:44px; padding:8px; border:0; border-radius:10px; background:transparent; color:var(--q-capa-texto, #0B2947); font:inherit; font-size:14px; cursor:pointer; }
.cob-modo button[aria-pressed="true"] { font-weight:700; }
.cob-modo button:focus-visible { outline:2px solid #0F9375; outline-offset:-2px; }
.cob-modo button:disabled { cursor:wait; opacity:.6; }
.cob-efectivo { display:grid; gap:10px; padding:14px; border-radius:12px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); }
.cob-efectivo-billetes { display:flex; flex-wrap:wrap; gap:8px; }
.cob-efectivo-billetes button { min-height:40px; }
.cob-efectivo-vuelto { margin:0; font-size:20px; font-weight:700; font-variant-numeric:tabular-nums; }
.cob-efectivo-aviso { padding:16px; margin-bottom:16px; background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); }
.dc-card { position:relative; }
.dc-card .dc-cerrar { position:absolute; top:12px; right:12px; width:40px; height:40px; min-width:40px; background:#D1D5DB; color:#0B2947; }
.dc-card .dc-body { padding-top:60px; }
.cob-recibo-visor { width:min(960px,100%); max-width:960px; max-height:calc(100vh - 32px); max-height:calc(100dvh - 32px); }
.cob-recibo-visor .qiwo-modal-body { overflow:auto; }
.cob-recibo-visor iframe { width:100%; height:55vh; height:55dvh; border:1px solid #D1D5DB; border-radius:8px; background:#ECEDE7; }
@media (prefers-reduced-motion:reduce) { .cob-modo-indicador { transition:none; } }

/* Módulos por institución (25/10/2026): Caja en modo prueba. Superficie completa, sin franja lateral. */
.caja-prueba-aviso { display:flex; align-items:center; gap:10px; padding:12px 16px; margin:0 0 16px; border-radius:12px; background:#E0F2F1; color:#0B2947; font-size:14px; line-height:1.45; }
.caja-prueba-aviso svg { flex-shrink:0; display:block; }
.nav-badge-prueba { background:#E0F2F1; color:#0B2947; }

/* Panel SkyMars · Módulos por colegio (25/10/2026, ADR 0077). */
.mod-campo-colegio { display:flex; flex-direction:column; gap:6px; max-width:360px; margin:0 0 16px; font-size:13px; color:#0B2947; }
.mod-lista { padding:4px 0; }
.mod-grupo { border-bottom:1px solid #D1D5DB; padding:6px 0; }
.mod-grupo:last-child { border-bottom:0; }
.mod-fila { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:10px 16px; padding:10px 16px; }
.mod-fila--pestana { padding-left:40px; }
.mod-fila-nombre { display:flex; flex-wrap:wrap; align-items:baseline; gap:6px 10px; color:#0B2947; font-size:14px; }
.mod-fila-grupo { font-weight:700; font-size:15px; }
.mod-nota { font-size:12px; color:#0B2947; background:#ECEDE7; border-radius:99px; padding:2px 8px; }
.mod-estados { display:inline-grid; grid-template-columns:repeat(3, minmax(84px, 1fr)); gap:4px; padding:4px; border:1px solid #D1D5DB; border-radius:12px; background:#ECEDE7; }
.mod-estado { min-height:36px; padding:6px 10px; border:0; border-radius:8px; background:transparent; color:#0B2947; font:inherit; font-size:13px; cursor:pointer; transition:background-color 160ms ease-out; }
.mod-estado[aria-pressed="true"] { font-weight:700; background:#FFFFFF; box-shadow:0 1px 3px #D1D5DB; }
.mod-estado--activo[aria-pressed="true"] { background:#0F9375; color:#FFFFFF; }
.mod-estado--prueba[aria-pressed="true"] { background:#E0F2F1; }
.mod-estado:disabled { cursor:not-allowed; opacity:.6; }
.mod-estado:focus-visible { outline:2px solid #0F9375; outline-offset:1px; }
.mod-historial-titulo { margin:24px 0 10px; font-size:17px; color:#0B2947; }
.mod-dialogo-texto { margin:0 0 14px; color:#0B2947; line-height:1.5; }
.mod-ayuda { margin:4px 0 12px; font-size:12px; color:#0B2947; }
.mod-error { margin:10px 0 0; color:#0B2947; font-weight:700; }
@media (prefers-reduced-motion:reduce) { .mod-estado { transition:none; } }

/* Guía del permiso discreto de Chrome: el reloj vive en CSS, sin viajes SignalR. */
.qiwo-push-permiso { width:100%; color:#0B2947; }
.qiwo-push-permiso > span { display:flex; align-items:center; gap:6px; font-size:16px; }
.qiwo-push-permiso svg { flex-shrink:0; }
.qiwo-push-permiso__barra { height:4px; margin-top:12px; background:#D1D5DB; border-radius:4px; overflow:hidden; }
.qiwo-push-permiso__barra > span { display:block; height:100%; background:#0F9375; transform-origin:left; animation:qiwo-push-permiso-cuenta 10s linear forwards; }
@keyframes qiwo-push-permiso-cuenta { from { transform:scaleX(1); } to { transform:scaleX(0); } }
.qiwo-push-aviso { display:block; margin:8px 0 0; padding:8px 12px; border-radius:8px; background:#ECEDE7; color:#0B2947; font-size:13px; }
body.qiwo-dark .qiwo-push-permiso { color:#ECEDE7; }

/* Asistencia del personal: fotos recibidas sin conexión, pendientes de revisión. */
.rostro-sin-red-aviso { display:flex; align-items:center; gap:10px; margin:16px 0; background:#E0F2F1; color:#0B2947; }
.rostro-sin-red-aviso strong { padding:2px 10px; border-radius:20px; background:#0B2947; color:#ECEDE7; }
.rostro-sin-red-dialog { width:min(840px, 94vw); max-height:90vh; max-height:90dvh; }
/* Bandeja rediseñada (27/10/2026): evidencia a la izquierda, una sola decisión a la derecha. */
.rostro-sin-red-dialog .qiwo-modal-header h2 { margin:0; }
.rsr-sub { margin:2px 0 0; font-size:13px; color:#5B6B7A; }
.rsr-grid { display:grid; grid-template-columns:minmax(0,1.15fr) minmax(0,1fr); gap:20px; align-items:start; }
.rsr-foto-grande { aspect-ratio:4/3; border-radius:12px; background:#D1D5DB; display:flex; align-items:center; justify-content:center; overflow:hidden; color:#0B2947; }
.rsr-foto-grande img { width:100%; height:100%; object-fit:cover; display:block; }
.rsr-miniaturas { display:flex; gap:8px; margin-top:8px; }
.rsr-mini { flex:1; padding:0; border:2px solid transparent; border-radius:8px; overflow:hidden; background:#D1D5DB; cursor:pointer; aspect-ratio:4/3; }
.rsr-mini img { width:100%; height:100%; object-fit:cover; display:block; }
.rsr-mini-activa { border-color:#0F9375; }
.rsr-mini:focus-visible { outline:2px solid #0F9375; outline-offset:2px; }
.rsr-chips { display:flex; flex-wrap:wrap; gap:6px; margin-top:10px; }
.rsr-chip { display:inline-flex; align-items:center; gap:6px; padding:4px 10px; border-radius:20px; background:#FFFFFF; color:#0B2947; font-size:13px; }
.rsr-chip-ok { background:#E0F2F1; color:#0B5E4C; }
.rsr-chip-aviso { background:#FEF3C7; color:#7A4A06; }
.rsr-decision { display:flex; flex-direction:column; gap:6px; }
.rsr-contexto { margin:0; font-size:13px; color:#5B6B7A; }
.rsr-pregunta { margin:0 0 8px; font-size:18px; color:#0B2947; }
.rsr-label { margin:6px 0 0; font-size:13px; font-weight:600; color:#0B2947; }
.rsr-campo { width:100%; box-sizing:border-box; }
.rsr-ayuda { margin:0; font-size:12px; color:#5B6B7A; }
.rsr-personas { display:flex; flex-direction:column; gap:4px; max-height:188px; overflow-y:auto; margin:2px 0 4px; }
.rsr-persona { display:flex; justify-content:space-between; align-items:center; gap:8px; width:100%; padding:8px 10px; border:1px solid #D1D5DB; border-radius:8px; background:#FFFFFF; color:#0B2947; font:inherit; font-size:14px; text-align:left; cursor:pointer; }
.rsr-persona small { color:#5B6B7A; font-size:12px; }
.rsr-persona:hover { border-color:#0F9375; }
.rsr-persona-elegida { border-color:#0F9375; background:#E0F2F1; font-weight:600; }
.rsr-hora { display:flex; flex-direction:column; gap:6px; margin-top:4px; }
.rsr-registrar { width:100%; min-height:44px; margin-top:10px; font-size:15px; }
.rsr-descartar { display:flex; flex-direction:column; gap:8px; margin-top:18px; padding-top:14px; border-top:1px solid #D1D5DB; }
.rsr-motivos { display:flex; flex-wrap:wrap; gap:6px; }
.rsr-peligro { color:#B42318 !important; border-color:#E8A9A3 !important; background:#FFFFFF !important; }
.rsr-peligro:hover { background:#FDECEA !important; }
.rsr-confirmar { padding:12px; border-radius:10px; background:#FDECEA; color:#7A1A12; }
.rsr-confirmar p { margin:0 0 10px; font-size:13px; }
.rsr-confirmar-acciones { display:flex; gap:8px; justify-content:flex-end; }
.rsr-pie { display:flex; gap:8px; justify-content:flex-end; }
@media (max-width:700px) { .rsr-grid { grid-template-columns:minmax(0,1fr); } .rostro-sin-red-aviso { width:100%; text-align:left; } }

/* Puertas en vivo: ADR 0079, configuración de lectora. */
.ki-puerta .ki-puerta-estado { display:block; font-size:.85rem; line-height:1.45; color:inherit; opacity:.8; margin-top:.35rem; }
.ki-puerta.ki-puerta-ocupada { background:#ECEDE7; color:#0B2947; border-color:#D1D5DB; cursor:not-allowed; box-shadow:none; }
.ki-puerta.ki-puerta-ocupada:hover { transform:none; box-shadow:none; }

/* ── Campos legibles dentro de los diálogos (27/10/2026, crítica /impeccable) ──
   Dentro de .qiwo-modal-card --admin-surface vale #ECEDE7, el mismo crema del
   diálogo, y la regla global de campos usa ese token: el campo se fundía con su
   fondo y parecía de solo lectura (Jordy: "el entry parece readonly"). Además el
   placeholder salía en marino (--admin-muted) y parecía un valor ya escrito.
   Campo editable = blanco con borde; deshabilitado o de solo lectura = crema
   atenuado. En modo oscuro los diálogos siguen claros (regla de ~10740). */
body .admin-content .qiwo-dialog-overlay :is(input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]):not([type=hidden]), select, textarea),
body.qiwo-dark .admin-shell .admin-content .qiwo-dialog-overlay :is(input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]):not([type=hidden]), select, textarea, .qiwo-input) { background-color: #FFFFFF !important; color: #0B2947 !important; border: 1px solid #C9CDD3 !important; }
body .admin-content .qiwo-dialog-overlay :is(input, select, textarea):focus,
body.qiwo-dark .admin-shell .admin-content .qiwo-dialog-overlay :is(input, select, textarea, .qiwo-input):focus { border-color: #0F9375 !important; box-shadow: 0 0 0 3px rgba(15,147,117,.15); outline: none; }
body .admin-content .qiwo-dialog-overlay :is(input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]):not([type=hidden]), select, textarea):is(:disabled, [readonly]),
body.qiwo-dark .admin-shell .admin-content .qiwo-dialog-overlay :is(input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]):not([type=hidden]), select, textarea, .qiwo-input):is(:disabled, [readonly]) { background-color: #ECEDE7 !important; color: #5B6B7A !important; border-color: #D1D5DB !important; }
body .admin-content .qiwo-dialog-overlay :is(input, textarea)::placeholder,
body.qiwo-dark .admin-content .qiwo-dialog-overlay :is(input, textarea)::placeholder { color: #6B7280 !important; opacity: 1; }
body .qiwo-dialog-overlay > .qiwo-modal-card.rostro-sin-red-dialog { width:min(900px, 100%); max-width:min(900px, 100%); }
.pers-hora-editada { margin-left:6px; padding:1px 8px; border-radius:20px; background:#FEF3C7; color:#7A4A06; cursor:help; }
/* Tablets por aprobar en Puntos de acceso (27/10/2026): tinte de superficie, sin franja lateral. */
.pa-dispositivo { padding:6px 8px; border-radius:8px; margin-bottom:6px; }
.pa-dispositivo-pendiente { background:#FEF3C7; color:#5A3A06; }
.pa-por-aprobar { background:#FDE68A !important; color:#5A3A06 !important; margin-left:4px; }
.pa-dispositivo-acciones { display:flex; gap:6px; margin-top:6px; }

/* Vencimiento efectivo de credenciales: superficie completa y texto explícito. */
body .admin-shell .admin-content .admin-credenciales-page .admin-badge.credencial-estado-vencida {
    background: #0B2947 !important;
    color: #ECEDE7 !important;
    border-color: #0B2947 !important;
    font-weight: 700;
}

/* Listas legibles y estados distinguibles sin franjas laterales. */
body .admin-content .apoderados-alumnos-lista { margin: 0; padding-left: 22px; display: grid; gap: 6px; }
body .admin-content .apoderados-alumnos-lista li { padding-left: 3px; white-space: normal; overflow-wrap: anywhere; }
body .admin-shell .admin-content .comunicado-estado { display: inline-flex; align-items: center; gap: 5px; margin-top: 4px; width: fit-content; }
body .admin-shell .admin-content .admin-badge.comunicado-estado.comunicado-estado-urgente { background: #0B2947 !important; color: #ECEDE7 !important; border-color: #0B2947 !important; font-weight: 700; }
body .admin-shell .admin-content .admin-badge.comunicado-estado.comunicado-estado-automatico { background: #ECEDE7 !important; color: #0B2947 !important; border: 1px dashed #0B2947 !important; }
body .admin-shell .admin-content .admin-badge.comunicado-estado.comunicado-estado-anulado { background: #D1D5DB !important; color: #0B2947 !important; border-color: #D1D5DB !important; }
body .admin-shell .admin-content .comunicado-fila-urgente > td { background: #E0F2F1; color: #0B2947; }
body .admin-shell .admin-content .comunicado-fila-anulada > td { background: #ECEDE7; color: #0B2947; }
body .admin-shell .admin-content .marca-diagnostico { margin: 8px 0; padding: 10px 12px; background: var(--admin-surface); border: 1px solid #D1D5DB; border-radius: 8px; }
body .admin-content .marca-diagnostico summary { cursor: pointer; font-size: 12px; font-weight: 600; }
body .admin-content .marca-diagnostico p { font-size: 12px; margin-bottom: 0; }
@media (max-width: 767px) {
    body .admin-alumnos-page .qiwo-table.admin-tabla-compacta tbody { display: table-row-group; }
    body .admin-alumnos-page .qiwo-table.admin-tabla-compacta tbody tr { display: table-row; padding: 0; }
    body .admin-alumnos-page .qiwo-table.admin-tabla-compacta tbody td { display: table-cell; }
    body .admin-alumnos-page .qiwo-table.admin-tabla-compacta tbody td[data-label]::before { display: none; }
    body .admin-alumnos-page .qiwo-table.admin-tabla-compacta .admin-col-estado { width: 68px; }
    body .admin-alumnos-page .qiwo-table.admin-tabla-compacta .admin-col-acciones { width: 88px; }
}

/* Asistencia personal: contraste y lectura de marcas (27/10/2026).
   Tardanza reutiliza el ámbar semántico existente, pedido explícito del encargo. */
body .admin-shell .admin-content .admin-personal-page .pers-status { display:inline-flex; align-items:center; gap:6px; opacity:1; font-weight:600; text-decoration:none; border:0; }
body .admin-shell .admin-content .admin-personal-page .pers-status-present { background:#E0F2F1 !important; color:#0B2947 !important; box-shadow:inset 0 0 0 1px #0F9375; }
body .admin-shell .admin-content .admin-personal-page .pers-status-late { background:#FEF3A0 !important; color:#854D0E !important; }
body .admin-shell .admin-content .admin-personal-page .pers-status-neutral { background:#D1D5DB !important; color:#0B2947 !important; }
.pers-status { padding:4px 10px; border-radius:20px; font-size:12px; white-space:nowrap; }
.pers-status svg, .pers-origen svg, .pers-resumen-card > svg { flex-shrink:0; }
body .admin-shell .admin-content .pers-horario-page .qiwo-chip { border:1px solid #0B2947; color:#0B2947; background:#ECEDE7; }
body .admin-shell .admin-content .pers-horario-page .qiwo-chip-active { background:#0B2947 !important; color:#ECEDE7 !important; border-color:#0B2947 !important; }
body.qiwo-dark .admin-shell .admin-content .pers-horario-page .qiwo-chip { border-color:#ECEDE7; }
body .admin-shell .admin-content :is(.admin-personal-page,.pers-horario-page) :is(input,select,textarea,.qiwo-search-box,.pers-choice,.qiwo-btn-secondary,.qiwo-row-actions-trigger) { border-color:#0B2947; }
body.qiwo-dark .admin-shell .admin-content :is(.admin-personal-page,.pers-horario-page) :is(input,select,textarea,.qiwo-search-box,.pers-choice,.qiwo-btn-secondary,.qiwo-row-actions-trigger) { border-color:#D1D5DB; }
body .admin-shell .admin-content :is(.admin-personal-page,.pers-horario-page) .qiwo-dialog-overlay :is(input,select,textarea,.qiwo-btn-secondary) { border-color:#0B2947; }
body .admin-shell .admin-content .pers-horario-page .pers-choice-selected { background:#E0F2F1; color:#0B2947; border-color:#0B2947; }
body.qiwo-dark .admin-shell .admin-content .pers-horario-page .pers-choice { background:#0B2947; color:#ECEDE7; }
body.qiwo-dark .admin-shell .admin-content .pers-horario-page .pers-choice-selected { background:#E0F2F1; color:#0B2947; border-color:#ECEDE7; }
body .admin-shell .admin-content .pers-horario-page .qiwo-dialog-overlay .pers-choice { background:#ECEDE7; color:#0B2947; border-color:#0B2947; }
body .admin-shell .admin-content .pers-horario-page .qiwo-dialog-overlay .pers-choice-selected { background:#E0F2F1; }
body .admin-personal-page .pers-marca { display:flex; flex-direction:column; align-items:flex-start; gap:8px; border:1px solid #0B2947; background:#E0F2F1; color:#0B2947; }
body .admin-personal-page .pers-marca-atenuada { background:#D1D5DB; }
.pers-marca-heading { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.pers-marca-hora { font-size:24px; font-variant-numeric:tabular-nums; }
.pers-origen { display:flex; align-items:center; flex-wrap:wrap; gap:6px; }
body .admin-personal-page .pers-marca p { margin:0; }
body .admin-personal-page .pers-facts { grid-template-columns:repeat(3,minmax(0,1fr)); }
body .admin-personal-page .pers-facts > div { min-width:0; overflow-wrap:anywhere; }
body .admin-shell .admin-content :is(.admin-personal-page,.pers-horario-page) :is(a,button,input,select,textarea,summary):focus-visible { outline:3px solid #0F9375; outline-offset:3px; }
body .admin-personal-page .pers-marca-alerta { background:#D1D5DB; color:#0B2947; }
@media(max-width:600px) {
    body .admin-personal-page .pers-facts { grid-template-columns:repeat(2,minmax(0,1fr)); }
    body .admin-personal-page .pers-facts > div:last-child { grid-column:1/-1; }
}
body .admin-shell .admin-content .admin-personal-page .pers-status-present svg { color:#0F9375; }
/* Controles de estas dos pantallas: pares opacos medibles en ambos temas. */
body .admin-shell .admin-content :is(.admin-personal-page,.pers-horario-page) :is(.qiwo-btn-primary,.qiwo-btn-nuevo) { background:#0B2947 !important; color:#ECEDE7 !important; border:1px solid #0B2947; }
body.qiwo-dark .admin-shell .admin-content :is(.admin-personal-page,.pers-horario-page) :is(.qiwo-btn-primary,.qiwo-btn-nuevo) { border-color:#D1D5DB; }
body .admin-shell .admin-content :is(.admin-personal-page,.pers-horario-page) :is(input:not([type=checkbox]),select,textarea,.qiwo-search-box,.qiwo-btn-secondary,.qiwo-row-actions-trigger) { background:#ECEDE7 !important; color:#0B2947 !important; border-color:#0B2947 !important; }
body.qiwo-dark .admin-shell .admin-content :is(.admin-personal-page,.pers-horario-page) :is(input:not([type=checkbox]),select,textarea,.qiwo-search-box,.qiwo-btn-secondary,.qiwo-row-actions-trigger) { background:#0B2947 !important; color:#ECEDE7 !important; border-color:#D1D5DB !important; }
body.qiwo-dark .admin-shell .admin-content :is(.admin-personal-page,.pers-horario-page) .qiwo-dialog-overlay :is(input:not([type=checkbox]),select,textarea,.qiwo-btn-secondary) { background:#ECEDE7 !important; color:#0B2947 !important; border-color:#0B2947 !important; }
body .admin-shell .admin-content .admin-personal-page .qiwo-btn-danger { background:#B91C1C !important; color:#ECEDE7 !important; border:1px solid #B91C1C; display:inline-flex; align-items:center; gap:6px; }
body.qiwo-dark .admin-shell .admin-content .pers-horario-page .qiwo-chip-active { border-color:#D1D5DB !important; }

/* === Componentes admin v2 (piloto Personal 28/10) === */
:root {
    --q-ink: #0B2947;
    --q-action: #0F9375;
    --q-action-ink: #FFFFFF;
    --q-surface: #FFFFFF;
    --q-surface-secondary: #ECEDE7;
    --q-border: #D1D5DB;
    --q-tint: #E0F2F1;
    --q-muted: color-mix(in srgb, #0B2947 72%, #D1D5DB);
    --q-avatar-ink: #0F9375;
    --q-focus: #0F9375;
    /* Capas del estándar (08/11/2026). Una pantalla se arma solo con estas: fondo < tarjeta < control
       < hover; los campos de un diálogo van en "campo". Todo sale de los 5 colores de marca
       (color-mix entre ellos); no se escribe un hex nuevo en una pantalla. */
    --q-capa-fondo: #ECEDE7;
    --q-capa-tarjeta: #FFFFFF;
    --q-capa-control: #FFFFFF;
    --q-capa-hover: #ECEDE7;
    --q-capa-cabecera: #0B2947;
    --q-capa-borde: #D1D5DB;
    --q-capa-texto: #0B2947;
    --q-capa-suave: color-mix(in srgb, #0B2947 72%, #D1D5DB);
    --q-capa-campo: #FFFFFF;
    --q-capa-campo-borde: #D1D5DB;
    --q-capa-acento: #0F9375;
}
body.qiwo-dark {
    --q-capa-fondo: #0B2947;
    --q-capa-tarjeta: color-mix(in srgb, #0B2947 94%, #D1D5DB);
    --q-capa-control: color-mix(in srgb, #0B2947 88%, #D1D5DB);
    --q-capa-hover: color-mix(in srgb, #0B2947 80%, #D1D5DB);
    --q-capa-cabecera: color-mix(in srgb, #0B2947 84%, #D1D5DB);
    --q-capa-borde: color-mix(in srgb, #ECEDE7 14%, transparent);
    --q-capa-texto: #ECEDE7;
    --q-capa-suave: color-mix(in srgb, #ECEDE7 72%, #0B2947);
    --q-capa-campo: #0B2947;
    --q-capa-campo-borde: color-mix(in srgb, #ECEDE7 30%, transparent);
    --q-capa-acento: color-mix(in srgb, #0F9375 65%, #ECEDE7);
    --q-ink: #ECEDE7;
    --q-action: #0F9375;
    --q-action-ink: #FFFFFF;
    --q-surface: color-mix(in srgb, #0B2947 88%, #D1D5DB);
    --q-surface-secondary: color-mix(in srgb, #0B2947 78%, #D1D5DB);
    --q-border: color-mix(in srgb, #0B2947 58%, #D1D5DB);
    --q-tint: color-mix(in srgb, #0B2947 75%, #0F9375);
    --q-muted: #D1D5DB;
    --q-avatar-ink: #E0F2F1;
    --q-focus: #0F9375;
}
.q-page-head { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:16px; margin-bottom:22px; color:var(--q-ink); }
.q-page-head h1 { margin:0; font-size:28px; font-weight:700; line-height:1.2; letter-spacing:-.025em; color:var(--q-ink); }
.q-page-head p { margin:7px 0 0; color:var(--q-muted); font-size:14px; }
.q-page-finding { display:flex; align-items:baseline; flex-wrap:wrap; gap:6px 12px; }
.q-text-action { padding:0; border:0; background:transparent; color:var(--q-ink); font:inherit; font-weight:600; text-decoration:underline; text-underline-offset:3px; cursor:pointer; }
.q-text-action:hover { color:var(--q-avatar-ink); }
.q-page-head-actions { display:flex; flex-wrap:wrap; align-items:center; gap:10px; }
.q-button { display:inline-flex; justify-content:center; align-items:center; gap:8px; min-height:42px; padding:10px 15px; box-sizing:border-box; border:1px solid var(--q-border); border-radius:9px; background:var(--q-surface); color:var(--q-ink); font:inherit; font-size:13px; font-weight:600; line-height:1.3; text-decoration:none; cursor:pointer; }
.q-button:hover { background:var(--q-tint); color:var(--q-ink); text-decoration:none; }
.q-button-primary { background:var(--q-action); border-color:var(--q-action); color:var(--q-action-ink); }
.q-button-primary:hover { background:color-mix(in srgb, var(--q-action) 90%, #0B2947); color:var(--q-action-ink); }
.q-button svg, .q-search svg, .q-alert-tag svg, .q-notice > svg { flex-shrink:0; }
.q-filterbar { padding:16px; margin-bottom:18px; border:1px solid var(--q-border); border-radius:12px; background:var(--q-surface-secondary); color:var(--q-ink); }
.q-filterbar-controls { display:flex; align-items:stretch; gap:12px; min-width:0; }
.q-search { --admin-surface:var(--q-surface); --admin-ink:var(--q-ink); display:flex; align-items:center; gap:10px; flex:1 1 auto; min-width:0; min-height:44px; box-sizing:border-box; padding:0 13px; border:1px solid var(--q-border); border-radius:8px; background:var(--q-surface); color:var(--q-muted); }
.q-search input { width:100%; min-width:0; min-height:42px; padding:0; border:0; border-radius:8px; outline:none; font:inherit; font-size:14px; background:var(--q-surface); color:var(--q-ink); box-shadow:none; }
.q-search input::placeholder { color:var(--q-muted); opacity:1; }
.q-search:focus-within { border-color:var(--q-focus); outline:2px solid var(--q-focus); outline-offset:2px; }
.q-select { --admin-surface:var(--q-surface); --admin-ink:var(--q-ink); flex:0 0 auto; max-width:100%; min-height:44px; padding:9px 32px 9px 12px; border:1px solid var(--q-border); border-radius:8px; background:var(--q-surface); color:var(--q-ink); font:inherit; font-size:13px; }
.q-filterbar-summary { display:flex; flex-wrap:wrap; align-items:center; gap:12px; margin-top:14px; }
.q-chips { display:flex; flex-wrap:wrap; gap:7px; min-width:0; }
.q-chip { display:inline-flex; align-items:center; justify-content:center; gap:8px; min-height:36px; padding:7px 11px; box-sizing:border-box; border:1px solid var(--q-border); border-radius:20px; background:var(--q-surface); color:var(--q-ink); font:inherit; font-size:12px; font-weight:500; line-height:1.3; cursor:pointer; }
.q-chip > span { font-variant-numeric:tabular-nums; color:var(--q-muted); }
.q-chip:hover, .q-chip.is-active { background:var(--q-tint); color:var(--q-ink); }
.q-chip.is-active { border-color:var(--q-action); font-weight:700; }
.q-filterbar-alerts { display:flex; padding-left:12px; border-left:1px solid var(--q-border); }
.q-result-count { margin-left:auto; color:var(--q-muted); font-size:12px; white-space:nowrap; font-variant-numeric:tabular-nums; }
.q-table-card { container-type:inline-size; min-width:0; border:1px solid var(--q-border); border-radius:12px; background:var(--q-surface); color:var(--q-ink); }
.q-table-wrap { min-width:0; border-radius:inherit; }
.q-table { --admin-surface:var(--q-surface); --admin-ink:var(--q-ink); width:100%; table-layout:fixed; border-collapse:separate; border-spacing:0; color:var(--q-ink); background:var(--q-surface); font-size:13px; line-height:1.5; }
.q-table th { padding:10px 12px; text-align:left; background:var(--q-tint); color:var(--q-ink); font-size:12px; font-weight:500; letter-spacing:normal; text-transform:none; }
.q-table th:first-child { width:36%; border-top-left-radius:11px; }
.q-table th:nth-child(2) { width:14%; }
.q-table th:nth-child(3) { width:18%; }
.q-table th:last-child { border-top-right-radius:11px; }
.q-table td { height:68px; box-sizing:border-box; padding:6px 12px; vertical-align:middle; border-top:1px solid var(--q-border); overflow-wrap:anywhere; }
.q-table tbody tr:hover { --admin-surface:color-mix(in srgb, var(--q-surface) 80%, var(--q-tint)); }
.q-person { display:flex; align-items:center; gap:12px; min-width:0; }
.q-person-avatar { display:flex; align-items:center; justify-content:center; flex:0 0 32px; height:32px; border-radius:50%; background:var(--q-tint); color:var(--q-avatar-ink); font-size:11px; font-weight:700; }
.q-person-body { flex:1; min-width:0; }
.q-person-name { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--q-ink); font-size:14px; font-weight:600; line-height:1.4; }
.q-person-sub { display:block; margin-top:2px; font-size:12px; color:var(--q-muted); line-height:1.35; }
.q-cell-stack { display:flex; flex-direction:column; align-items:flex-start; gap:3px; min-width:0; }
.q-cell-stack > .q-person-sub { margin-top:0; }
.q-credential { white-space:nowrap; }
.q-tag, .q-alert-tag { display:inline-flex; flex:none; align-items:center; gap:5px; max-width:100%; box-sizing:border-box; padding:2px 6px; border-radius:6px; background:var(--q-surface-secondary); color:var(--q-ink); font-size:11px; font-weight:500; line-height:1.4; }
.q-tag { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; display:block; }
.q-table td[data-label=Alertas] .q-cell-stack { flex-direction:row; flex-wrap:wrap; }
.q-alert-tag { white-space:nowrap; }
.q-alert-tag { border:1px solid var(--q-border); }
.q-text-muted { color:var(--q-muted); font-size:12px; }
.q-notice { display:flex; align-items:center; flex-wrap:wrap; gap:12px; padding:14px 16px; margin-bottom:16px; border:1px solid var(--q-border); border-radius:10px; background:var(--q-tint); color:var(--q-ink); font-size:13px; }
.q-notice .q-button { margin-left:auto; }
.q-table .q-actions-cell { width:138px; box-sizing:border-box; text-align:right; white-space:nowrap; }
.q-actions-cell .qiwo-row-actions-trigger { width:106px; min-height:38px; max-width:100%; background:var(--q-surface); border-color:var(--q-border); color:var(--q-ink); }
.q-actions-cell .qiwo-row-actions-trigger:hover, .q-actions-cell .qiwo-row-actions-trigger[aria-expanded=true] { background:var(--q-tint); border-color:var(--q-action); color:var(--q-ink); }
.q-table tbody tr:last-child td:first-child { border-bottom-left-radius:11px; }
.q-table tbody tr:last-child td:last-child { border-bottom-right-radius:11px; }
.q-table .q-empty-cell { padding:0; }
.q-table-card :is(.qiwo-table-empty, .qiwo-table-loading) { background:var(--q-surface); color:var(--q-muted); border-radius:inherit; }
:is(.q-button, .q-chip, .q-select, .q-text-action):focus-visible, .q-actions-cell .qiwo-row-actions-trigger:focus-visible { outline:2px solid var(--q-focus); outline-offset:3px; }
/* Compatibilidad con las reglas oscuras globales !important ya existentes.
   Alcance por componente reutilizable; no altera los controles del admin anterior. */
body.qiwo-dark .q-filterbar .q-filterbar-controls .q-select,
body.qiwo-dark .q-filterbar .q-filterbar-summary .q-chip,
body.qiwo-dark .q-page-head .q-page-head-actions .q-button { border-color:var(--q-border) !important; }
body.qiwo-dark .q-filterbar .q-filterbar-controls .q-select { background:var(--q-surface) !important; color:var(--q-ink) !important; }
body.qiwo-dark .q-filterbar .q-filterbar-summary .q-chip.is-active { border-color:var(--q-action) !important; }
body.qiwo-dark .q-page-head .q-page-head-actions .q-button-primary { border-color:var(--q-action) !important; }
body.qiwo-dark .q-table-card .q-table :is(th, td) { border-color:var(--q-border) !important; }
body.qiwo-dark .q-table .q-actions-cell .qiwo-row-actions-trigger { background:var(--q-surface) !important; color:var(--q-ink) !important; border-color:var(--q-border) !important; }
body.qiwo-dark .q-table .q-actions-cell .qiwo-row-actions-trigger:hover { background:var(--q-tint) !important; }
@media (max-width:1100px) and (min-width:768px) {
    .q-table :is(th, td) { padding-left:11px; padding-right:11px; }
    .q-table .q-actions-cell { width:128px; }
    .q-person { gap:8px; }
}
@media (max-width:767px) {
    .q-page-head { gap:14px; margin-bottom:18px; }
    .q-page-head-actions { width:100%; }
    .q-page-head-actions .q-button { flex:1 1 auto; }
    .q-filterbar { padding:12px; }
    .q-filterbar-controls { flex-wrap:wrap; gap:10px; }
    .q-search { flex-basis:100%; }
    .q-search input { font-size:13px; }
    .q-select { width:100%; }
    .q-filterbar-summary { gap:10px; }
    .q-chips { width:100%; }
    .q-filterbar-alerts { border:0; padding:0; }
    .q-notice { gap:10px; }
    .q-notice .q-button { width:100%; margin-left:0; }
}
/* La tabla pasa a tarjetas según el espacio real que deja la navegación.
   Evita apretar etiquetas y acceso en tablets o con el menú lateral abierto. */
@container (max-width:900px) {
    .q-table-wrap { padding:10px; }
    .q-table, .q-table tbody { display:block; width:100%; }
    .q-table thead { position:absolute; width:1px; height:1px; padding:0; overflow:hidden; clip-path:inset(50%); white-space:nowrap; }
    .q-table tbody tr { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px 12px; margin-bottom:10px; padding:15px; border:1px solid var(--q-border); border-radius:10px; background:var(--q-surface); }
    .q-table tbody tr:last-child { margin-bottom:0; }
    .q-table tbody td { display:block; min-width:0; height:auto; padding:0; border:0; background:transparent; }
    .q-table td[data-label]::before { content:attr(data-label); display:block; margin-bottom:5px; color:var(--q-muted); font-size:12px; font-weight:500; letter-spacing:normal; text-transform:none; }
    .q-table .q-person-cell, .q-table td[data-label=Alertas], .q-table .q-actions-cell, .q-table .q-empty-cell { grid-column:1/-1; }
    .q-table td.q-person-cell[data-label]::before, .q-table td.q-actions-cell[data-label]::before { display:none; }
    .q-table td[data-label=Alertas] .q-cell-stack { flex-direction:row; flex-wrap:wrap; }
    .q-table .q-actions-cell { width:100%; padding-top:10px; border-top:1px solid var(--q-border); }
    .q-table tbody tr:has(.q-empty-cell) { display:block; padding:0; border:0; }
}

/* Resúmenes y controles compartidos por las vistas diarias y mensuales. */
.q-filterbar-controls-wrap { flex-wrap:wrap; }
.q-filterbar-controls-wrap > .q-search { flex:1 1 230px; }
.q-date-control { flex:0 0 180px; width:180px; max-width:100%; --admin-surface:var(--q-surface); --admin-ink:var(--q-ink); }
.q-date-control .qiwo-campo-fecha-caja, .q-date-control .qiwo-campo-fecha { width:100%; min-width:0; }
.q-date-control .qiwo-campo-fecha input:not(.qiwo-campo-fecha-nativo) { min-height:44px; box-sizing:border-box; background:var(--q-surface); color:var(--q-ink); border:1px solid var(--q-border); border-radius:8px; font-size:13px; }
.q-date-control .qiwo-campo-fecha-cal { color:var(--q-ink); }
.q-period-control { display:flex; align-items:center; gap:5px; }
.q-period-control > span { min-width:130px; text-align:center; font-size:13px; text-transform:capitalize; font-weight:600; }
.q-period-control .q-button { padding:10px; }
.q-period-control svg { width:16px; height:16px; }
.q-kpi-strip { display:flex; flex-wrap:wrap; margin:0 0 18px; border:1px solid var(--q-border); border-radius:12px; overflow:hidden; background:var(--q-surface); color:var(--q-ink); }
.q-kpi { display:flex; flex:1 1 150px; flex-direction:column; justify-content:center; align-items:flex-start; gap:6px; padding:18px 22px; box-sizing:border-box; border:0; border-inline-end:1px solid var(--q-border); background:var(--q-surface); color:var(--q-ink); text-decoration:none; }
.q-kpi:last-child { border-inline-end:0; }
.q-kpi > span { font-size:12px; color:var(--q-muted); line-height:1.4; }
.q-kpi > strong { font-size:24px; line-height:1.2; font-weight:600; font-variant-numeric:tabular-nums; }
.q-kpi-lead { flex-grow:1.4; background:var(--q-tint); }
.q-kpi-lead > strong { font-size:32px; }
.q-kpi strong small { font-size:14px; font-weight:400; color:var(--q-muted); }
.q-kpi-link > span:last-child { color:var(--q-ink); text-decoration:underline; text-underline-offset:3px; }
.q-kpi-link:hover { background:var(--q-tint); color:var(--q-ink); text-decoration:none; }
.q-kpi-link:focus-visible { outline:2px solid var(--q-focus); outline-offset:-4px; }
.q-status { display:inline-flex; align-items:center; gap:6px; color:var(--q-muted); font-size:12px; white-space:nowrap; }
.q-status-positive, .q-status-attention { padding:3px 7px; border-radius:6px; background:var(--q-tint); color:var(--q-ink); font-weight:600; }
.q-status-positive::before, .q-status-attention::before { content:""; width:6px; height:6px; border-radius:50%; background:var(--q-avatar-ink); }
.q-status-attention { background:var(--q-surface-secondary); border:1px solid var(--q-border); }
.q-status-attention::before { border-radius:1px; background:var(--q-ink); }
/* Tardanza: ámbar en todo Qiwo (ADR 0085), no el gris genérico de "atención". */
.q-status-late { padding:3px 7px; border-radius:6px; background:#FEF3A0; color:#854D0E; font-weight:600; }
.q-status-late::before { content:""; width:6px; height:6px; border-radius:50%; background:#CA8A04; }
body.qiwo-dark .q-status-late { background:rgba(234,179,8,.20); color:#FDE68A; }
body.qiwo-dark .q-status-late::before { background:#FDE68A; }
.q-table-marks th:nth-child(3) { width:24%; }
.q-table-marks td[data-label=Marcas] { font-variant-numeric:tabular-nums; }
.q-actions-cell .qiwo-row-actions-menu-item { display:flex; align-items:center; gap:8px; }
.q-record-link { display:block; max-width:100%; padding:0; border:0; background:transparent; font-family:inherit; text-align:left; cursor:pointer; }
.q-record-link:hover { text-decoration:underline; text-underline-offset:3px; }
.q-record-link:focus-visible { outline:2px solid var(--q-focus); outline-offset:3px; }
.q-table .q-row-selected > td { background:var(--q-tint); }
.q-button-compact { min-height:30px; padding:4px 8px; font-size:12px; }
.q-button:disabled, .q-record-link:disabled { opacity:.6; cursor:not-allowed; }
.q-panel { min-width:0; padding:18px; margin-top:22px; border:1px solid var(--q-border); border-radius:12px; background:var(--q-surface); color:var(--q-ink); }
.q-panel h2 { margin:0 0 12px; font-size:16px; font-weight:600; color:var(--q-ink); }
.q-control-row { display:flex; align-items:flex-end; flex-wrap:wrap; gap:12px; }
.q-field { display:grid; grid-template-columns:minmax(0,1fr); gap:6px; font-size:12px; color:var(--q-muted); }
.q-field > .q-date-control { width:100%; }

/* Credenciales y configuración del personal: mismo lenguaje admin v2. */
.q-credential-status { display:inline-flex; align-items:center; gap:6px; color:var(--q-muted); font-size:12px; line-height:1.4; font-variant-numeric:tabular-nums; }
.q-credential-status.is-present { color:var(--q-ink); }
.q-credential-status.is-present::before { content:""; flex:0 0 6px; height:6px; border-radius:50%; background:var(--q-action); }
.q-row-action { display:inline-flex; align-items:center; justify-content:flex-end; gap:4px; min-height:44px; padding:6px; border:0; background:transparent; color:var(--q-ink); font:inherit; font-size:13px; font-weight:600; cursor:pointer; }
.q-row-action:focus-visible { outline:2px solid var(--q-focus); outline-offset:2px; border-radius:4px; }
.q-credentials-table .q-person-name { white-space:normal; overflow-wrap:anywhere; }
.q-table.q-credentials-table th:first-child { width:27%; }
.q-table.q-credentials-table th:nth-child(2) { width:13%; }
.q-table.q-credentials-table th:is(.cp-col-rostro,.cp-col-huella) { width:11%; }
.q-table.q-credentials-table th:nth-child(3) { width:11%; }
.q-table.q-credentials-table th.cp-col-relojes { width:19%; }
.q-table.q-credentials-table .q-actions-cell { width:78px; }
/* Rostro y Huella en una línea ("Registrado", "Sin registrar"); cada reloj: nombre arriba, lo que tiene abajo. */
.q-credentials-table td:is([data-label=Rostro],[data-label=Huella]) .q-credential-status { white-space:nowrap; }
.q-credentials-table .cp-reloj { display:flex; flex-direction:column; gap:2px; min-width:0; }
.q-credentials-table .cp-reloj + .cp-reloj { margin-top:8px; }
.q-credentials-table .cp-reloj-nombre { overflow:hidden; color:var(--q-ink); font-size:12px; font-weight:600; text-overflow:ellipsis; white-space:nowrap; }
.cred-personal .q-filterbar-alerts { flex-wrap:wrap; width:auto; }
.q-back-link { display:inline-block; margin-bottom:12px; color:var(--q-muted); font-size:13px; text-decoration:none; }
.q-back-link:hover { color:var(--q-ink); text-decoration:underline; }
.q-settings-mode { margin-top:0; }
.q-section-head { display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:12px; margin:24px 0 14px; color:var(--q-ink); }
.q-section-head h2, .q-settings-mode h2 { margin:0; color:var(--q-ink); font-size:18px; font-weight:600; }
.q-mode-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; margin:18px 0; }
.q-mode-choice { display:flex; flex-direction:column; align-items:flex-start; gap:8px; min-width:0; padding:16px; border:1px solid var(--q-border); border-radius:10px; background:var(--q-surface); color:var(--q-ink); font:inherit; text-align:left; cursor:pointer; }
.q-mode-choice strong { font-size:14px; font-weight:600; }
.q-mode-choice span { color:var(--q-muted); font-size:13px; line-height:1.5; }
.q-mode-choice.is-selected { border-color:var(--q-action); background:var(--q-tint); box-shadow:inset 0 0 0 1px var(--q-action); }
.q-mode-choice:focus-visible, .q-input:focus-visible, .q-settings-form :is(input,select):focus-visible { outline:2px solid var(--q-focus); outline-offset:3px; }
.q-mode-choice:disabled, .q-settings-page .q-button:disabled { cursor:wait; opacity:.75; }
.q-form-help { margin:0; color:var(--q-muted); font-size:13px; line-height:1.5; }
.q-minimum-row { display:flex; flex-wrap:wrap; align-items:flex-end; gap:12px; margin-top:18px; }
.q-minimum-row .q-field { gap:8px; color:var(--q-ink); font-size:14px; }
.q-minimum-row .q-input { width:120px; }
.q-input, .q-settings-form :is(input,select) { --admin-surface:var(--q-surface); --admin-ink:var(--q-ink); width:100%; min-height:42px; box-sizing:border-box; padding:10px 12px; border:1px solid var(--q-border); border-radius:8px; background:var(--q-surface); color:var(--q-ink); font:inherit; font-size:14px; }
.q-settings-form { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; color:var(--q-ink); }
.q-settings-form > label { display:grid; grid-template-columns:minmax(0,1fr); align-content:start; gap:8px; min-width:0; font-size:14px; font-weight:500; }
.q-settings-form > :is(div,p,.pers-checkbox) { grid-column:1/-1; }
.q-settings-form > .pers-checkbox { display:flex; align-items:center; gap:10px; }
.q-settings-form input[type=checkbox] { width:18px; min-height:18px; height:18px; margin:0; accent-color:var(--q-action); }
.q-settings-form .q-mode-grid { margin:0; }
/* Los diálogos de Qiwo conservan superficie crema incluso en tema oscuro. */
.q-settings-dialog { --q-ink:#0B2947; --q-muted:#0B2947; --q-surface:#FFFFFF; --q-surface-secondary:#ECEDE7; --q-border:#D1D5DB; --q-tint:#E0F2F1; }
.q-table.q-schedules-table th:first-child { width:19%; }
.q-table.q-schedules-table th:nth-child(2) { width:14%; }
.q-table.q-schedules-table th:nth-child(3) { width:16%; }
.q-table.q-schedules-table .q-actions-cell { width:124px; }
.q-schedules-table .pers-actions { gap:3px; }
.q-schedules-table .pers-dia { width:20px; height:24px; padding:0; font-size:11px; }
body.qiwo-dark .q-settings-page :is(.q-input,.q-settings-form input,.q-settings-form select) { background:var(--q-surface) !important; color:var(--q-ink) !important; border-color:var(--q-border) !important; }
@container (max-width:900px) {
    .q-table.q-credentials-table .q-actions-cell { width:100%; }
    .q-table.q-schedules-table .q-actions-cell { width:100%; }
    .q-schedules-table td[data-label=Vigencia] { grid-column:1/-1; }
}
@media (max-width:700px) {
    .q-mode-grid { grid-template-columns:1fr; }
    .q-mode-choice { display:grid; grid-template-columns:20px minmax(0,1fr); gap:6px 10px; padding:12px; }
    .q-mode-choice span { grid-column:2; }
    .q-settings-form { grid-template-columns:minmax(0,1fr); }
    .q-settings-form .q-mode-grid { gap:8px; }
    .q-section-head .q-button { min-height:44px; }
}
.q-notice p { margin:0; line-height:1.6; }
.q-notice p + p { margin-top:6px; }

/* Calendario de asistencia: matriz con identidad fija y desplazamiento interno. */
.q-calendar-note { font-size:12px; line-height:1.6; margin:8px 0; color:var(--q-muted); }
.q-calendar-scroll { overflow-x:auto; max-width:100%; overscroll-behavior-x:contain; border-radius:8px; }
.q-calendar-chart { display:grid; grid-template-columns:repeat(31,minmax(28px,1fr)); gap:4px; min-width:960px; padding:8px 4px; }
.q-calendar-bar-day { display:flex; flex-direction:column; align-items:center; gap:7px; border-radius:5px; font-size:12px; padding:4px 0; }
.q-calendar-bar-track { height:100px; width:14px; display:flex; align-items:flex-end; background:var(--q-border); border-radius:3px; overflow:hidden; }
.q-calendar-bar { width:100%; background:var(--q-action); }
.q-calendar-bar-count { font-weight:600; font-variant-numeric:tabular-nums; }
.q-calendar-weekend { background:var(--q-surface-secondary); }
.q-calendar-weekend .q-calendar-bar { background:var(--q-muted); }
.q-calendar-today { outline:2px solid var(--q-ink); outline-offset:-2px; }
.q-calendar-legend { display:flex; flex-wrap:wrap; gap:12px 20px; margin:18px 0; font-size:12px; }
.q-calendar-legend > span { display:inline-flex; align-items:center; gap:7px; }
.q-calendar-legend > span > svg { width:16px; height:16px; }
.q-calendar-cell { display:inline-flex; width:30px; height:30px; align-items:center; justify-content:center; border-radius:7px; position:relative; color:var(--q-ink); text-decoration:none; box-sizing:border-box; }
.q-calendar-cell svg { width:16px; height:16px; }
.q-calendar-marca { background:var(--q-tint); }
.q-calendar-tarde { background:var(--q-ink); color:var(--q-surface); }
a.q-calendar-tarde { color:var(--q-surface); }
.q-calendar-registro { background:var(--q-surface-secondary); box-shadow:inset 0 0 0 2px var(--q-ink); }
.q-calendar-falta { background:var(--q-border); }
.q-calendar-libre { background:var(--q-surface-secondary); }
.q-calendar-pendiente { background:var(--q-tint); border:1px dashed var(--q-ink); }
.q-calendar-manual { position:absolute; right:-3px; bottom:-3px; background:var(--q-ink); color:var(--q-surface); border-radius:50%; display:flex; padding:2px; }
.q-calendar-manual svg { width:10px; height:10px; }
.q-calendar-grid { border-collapse:separate; border-spacing:0; font-size:12px; width:max-content; min-width:100%; color:var(--q-ink); background:var(--q-surface); }
.q-calendar-grid caption { text-align:left; padding:12px 0; caption-side:bottom; color:var(--q-muted); }
.q-calendar-grid th, .q-calendar-grid td { padding:9px 5px; text-align:center; border-bottom:1px solid var(--q-border); min-width:40px; font-variant-numeric:tabular-nums; }
.q-calendar-grid thead th { background:var(--q-tint); font-weight:500; text-transform:none; }
.q-calendar-grid thead th.q-calendar-weekend { background:var(--q-surface-secondary); }
.q-calendar-grid thead th > span { display:block; font-size:11px; font-weight:400; margin-bottom:5px; }
.q-calendar-grid .q-calendar-person { position:sticky; left:0; z-index:1; text-align:left; width:220px; min-width:220px; max-width:220px; background:var(--q-surface); padding:12px; box-shadow:1px 0 var(--q-border); white-space:normal; overflow-wrap:anywhere; }
.q-calendar-grid thead .q-calendar-person { background:var(--q-tint); }
.q-calendar-person strong, .q-calendar-person span { display:block; }
.q-calendar-person span { font-weight:400; font-size:12px; margin-top:5px; color:var(--q-muted); }
:is(.q-calendar-scroll, .q-calendar-cell, .q-calendar-bar-day):focus-visible { outline:2px solid var(--q-focus); outline-offset:2px; }
/* Los controles heredan los tokens q también bajo las reglas globales oscuras. */
body.qiwo-dark .q-date-control .qiwo-campo-fecha input:not(.qiwo-campo-fecha-nativo) { background:var(--q-surface) !important; color:var(--q-ink) !important; border-color:var(--q-border) !important; }
body.qiwo-dark :is(.q-control-row, .q-period-control) .q-button { background:var(--q-surface) !important; color:var(--q-ink) !important; border-color:var(--q-border) !important; }
body.qiwo-dark .q-control-row .q-button-primary { background:var(--q-action) !important; color:var(--q-action-ink) !important; }
@media (max-width:767px) {
    .q-filterbar-controls-wrap > .q-search { flex-basis:100%; }
    .q-filterbar-controls-wrap > .q-select { flex:1 1 130px; width:auto; }
    .q-date-control { flex:1 1 160px; width:180px; }
    .q-kpi-strip { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); }
    .q-kpi { min-width:0; padding:12px; gap:4px; border-inline-end:0; border-bottom:1px solid var(--q-border); }
    .q-kpi:nth-child(odd) { border-inline-end:1px solid var(--q-border); }
    .q-kpi:last-child:nth-child(odd) { grid-column:1/-1; border:0; }
    .q-kpi:nth-last-child(-n+2) { border-bottom:0; }
    .q-kpi-lead > strong { font-size:32px; }
    .q-kpi-lead > span:last-child:not(:first-child) { display:none; }
    .q-chips-scroll { flex-wrap:nowrap; overflow-x:auto; padding:2px; }
    .q-chips-scroll > .q-chip { flex-shrink:0; }
    .q-panel { padding:12px; }
    .q-calendar-grid .q-calendar-person { width:126px; min-width:126px; max-width:126px; padding:8px; }
    .q-control-row > .q-field { flex:1 1 130px; min-width:0; }
    .q-control-row > .q-button { width:100%; }
}

/* Caja: acciones del recibo y del pago (28/10/2026). Bloque añadido, sin cambiar reglas previas. */
.cob-cobro-pago-acciones { flex-direction: column; align-items: flex-start; }
.cob-pago-acciones-fila { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }
.cob-pago-acciones-fila > button { flex: none; align-self: center; min-height: 0; height: auto; }
.cob-pago-acciones-fila .cob-cobro-btn-anular { font-weight: 700; border: 2px solid currentColor; }
.cob-pago-acciones-fila .cob-cobro-btn-anular:hover { color: #ECEDE7; background: #0B2947; }
.cob-recibo-acciones { align-items: center; flex-wrap: wrap; }
.cob-recibo-acciones svg { flex-shrink: 0; }
.cob-recibo-acciones a[aria-current="true"] { background: #E0F2F1; color: #0B2947; font-weight: 700; }
.cob-recibo-acciones .qiwo-btn-secondary, .cob-recibo-visor .qiwo-modal-footer a, .cob-pago-acciones-fila > button { display: inline-flex; align-items: center; justify-content: center; gap: .375rem; }

/* Cifra de tardanzas: ámbar, excepción al manual (ADR 0085). */
.qiwo-stats-strip-tardanzas { color:#854D0E; }
body.qiwo-dark .qiwo-stats-strip-tardanzas { color:#FDE68A; }
/* Personal: códigos completos y chips con iconos compartidos. */
/* Alumnos usa el mismo modelo de lista que Personal. */
.q-alumnos-page { min-width:0; color:var(--q-ink); }
.q-alumnos-page .q-filterbar-alerts { flex-wrap:wrap; gap:7px; border:0; }
.q-alumnos-table th:first-child { width:27%; }
.q-alumnos-table th:nth-child(2) { width:12%; }
.q-alumnos-table th:nth-child(3) { width:18%; }
.q-alumnos-table th:nth-child(4) { width:19%; }
.q-alumnos-table th:nth-child(5) { width:11%; }
.q-alumnos-table .q-person-name { white-space:normal; overflow-wrap:anywhere; }
.q-alumnos-table .q-alert-tag { white-space:normal; }
.q-alumnos-table .q-person-body { min-width:0; }
.q-alumnos-table .q-status::before { border-radius:50%; }
.q-alumnos-page :is(button,a):focus-visible { outline:2px solid var(--q-focus); outline-offset:3px; }
.q-alumnos-page :is(button,a) { touch-action:manipulation; }
.q-alumnos-page .qiwo-modal-body { overscroll-behavior:contain; }
@media (max-width:767px) {
    .q-alumnos-page .q-chip { min-height:44px; }
    .q-alumnos-page .q-filterbar-controls > .q-button { width:100%; }
}
.q-chip > svg, .q-credential > svg, .q-credential-status > svg { flex:0 0 14px; }
.q-credential { display:inline-flex; align-items:center; gap:6px; min-width:0; max-width:100%; }
.q-credential-code { display:inline-block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; vertical-align:middle; font-family:inherit; font-variant-numeric:tabular-nums; font-weight:400; }
.q-credential-code.is-long { max-width:12ch; }
.q-credential-status:has(> svg)::before { display:none; }
.q-settings-page .qiwo-modal-body, .cred-personal .qiwo-modal-body, .admin-personal-page .qiwo-modal-body { overscroll-behavior:contain; }
.q-settings-page :is(button, a):focus-visible, .cred-personal :is(button, a):focus-visible, .q-table :is(button, a):focus-visible { outline:2px solid var(--q-focus); outline-offset:3px; }
@media (max-width:600px) {
    .q-chips.q-chips-scroll { flex-wrap:wrap; overflow-x:visible; }
    .q-chip, .q-button, .q-row-action, .q-text-action, .q-actions-cell .qiwo-row-actions-trigger { min-height:44px; }
}

:is(.q-button, .q-chip, .q-row-action, .q-text-action) { touch-action:manipulation; }
.q-icono-nav .q-nav-acento {
    fill: #0F9375;
    stroke: none;
}

/* Set B: crema sobre el sidebar marino en ambos temas; fuera del menú hereda texto. */
.admin-sidebar-hybrid .admin-nav-item svg.q-icono-nav,
.admin-sidebar-hybrid .admin-nav-group-link svg.q-icono-nav {
    color: #ECEDE7;
    flex-shrink: 0;
}

/* === Apoderados q-* · 28/10/2026 · inicio del bloque aislado === */
.q-apoderados-page { min-width:0; color:var(--q-ink); }
.q-apoderados-table th:first-child { width:25%; }
.q-apoderados-table th:nth-child(2) { width:12%; }
.q-apoderados-table th:nth-child(3) { width:17%; }
.q-apoderados-table th:nth-child(4) { width:23%; }
.q-apoderados-table th:nth-child(5) { width:11%; }
.q-apoderados-table .q-person-name { white-space:normal; overflow-wrap:anywhere; text-align:left; }
.q-apoderados-table .q-status::before { border-radius:50%; }
.q-linked-list { margin:0; padding-left:17px; font-size:12px; }
.q-linked-list li + li { margin-top:4px; }
.q-linked-students .q-text-muted { display:inline-flex; align-items:center; gap:6px; }
.q-apoderado-contacto { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; margin-top:16px; }
.q-apoderados-page .qiwo-modal-footer, .q-apoderados-page .qiwo-modal-footer > div { flex-wrap:wrap; }
.q-apoderados-page .qiwo-modal-card { max-height:90vh; max-height:90dvh; }
.q-apoderados-page .qiwo-modal-body { overscroll-behavior:contain; }
.q-apoderados-page .qiwo-autocomplete-item { width:100%; border:0; background:transparent; color:inherit; font:inherit; text-align:left; cursor:pointer; }
.q-apoderados-page .qiwo-autocomplete-item:hover { background:var(--q-tint); }
.q-apoderados-page :is(button,input,select):focus-visible { outline:2px solid var(--q-focus); outline-offset:3px; }
.q-apoderados-page button { touch-action:manipulation; }
@media(max-width:600px) {
    .q-apoderado-contacto { grid-template-columns:minmax(0,1fr); }
    .q-apoderados-table .q-linked-students { grid-column:1/-1; }
    .q-apoderados-page .qiwo-modal-footer > div { width:100%; }
    .q-apoderados-page .qiwo-modal-footer button { min-height:44px; }
}
/* === Apoderados q-* · fin del bloque aislado === */

/* Mensajes locales con los colores de marca; no cambia avisos de otras pantallas. */
.q-apoderados-page .qiwo-lookup-msg { background:var(--q-tint); color:var(--q-ink); }
.q-apoderados-page :is(.lookup-warn,.lookup-error) { background:var(--q-surface-secondary); color:var(--q-ink); border:1px solid var(--q-border); }
body.qiwo-dark .q-apoderados-page .qiwo-lookup-msg { color:var(--q-ink); }

/* Corregir marca personal */
.admin-personal-page .qiwo-dialog-overlay { --q-ink:#0B2947; --q-muted:#0B2947; --q-tint:#E0F2F1; }
.admin-personal-page .pers-historial :is(h3,strong,p,time),.admin-personal-page .pers-corregir-form h3 { color:#0B2947; }
.pers-corregir-form { display:grid; gap:12px; padding:16px; margin:12px 0; background:var(--q-tint); border-radius:12px; color:var(--q-ink); }
.pers-corregir-form h3,.pers-corregir-form p { margin:0; }
.pers-corregir-form textarea { width:100%; box-sizing:border-box; resize:vertical; }
.pers-correccion { padding:12px; background:var(--q-tint); border-radius:8px; overflow-wrap:anywhere; }
.pers-historial { margin-top:24px; color:var(--q-ink); }
.pers-timeline { list-style:none; padding:0; margin:16px 0 0; display:grid; gap:16px; }
.pers-timeline li { display:grid; grid-template-columns:32px minmax(0,1fr); gap:12px; }
.pers-timeline-icon { display:flex; align-items:center; justify-content:center; width:32px; height:32px; border-radius:50%; background:var(--q-tint); color:var(--q-ink); }
.pers-timeline time { display:block; font-size:.8rem; color:var(--q-muted); }
.pers-timeline p { margin:4px 0; overflow-wrap:anywhere; }
.pers-historial a,.pers-correccion a { color:inherit; text-decoration:underline; text-underline-offset:3px; }
.pers-marca:target { outline:2px solid var(--q-ink); outline-offset:3px; }
@media(max-width:600px) { .pers-corregir-form { padding:12px; } .pers-corregir-form .pers-actions { display:grid; } .pers-corregir-form button { min-height:44px; } }
/* Corregir marca personal: fin */

/* === Paneles de módulo con íconos B · 28/10/2026 (Claude ELA) ===
   Las tarjetas «Abrir módulo» usan el mismo ícono que su ítem del menú (QIconoNav),
   más grande y en baldosa celeste: se reconoce de lejos y el clic se siente obvio. */
body .admin-content .admin-module-card .admin-hub-card-icon,
body .admin-content .admin-hub-card:nth-child(even).admin-module-card .admin-hub-card-icon {
    width: 56px; height: 56px; border-radius: 14px;
    background: #E0F2F1; color: #0B2947;
    transition: background-color .15s ease, transform .15s ease;
}
.admin-module-card .admin-hub-card-icon svg.q-icono-nav { width: 30px; height: 30px; }
body .admin-content a.admin-module-card:hover .admin-hub-card-icon { background: #ECEDE7; transform: translateY(-1px); }
body.qiwo-dark .admin-shell .admin-content .admin-module-card .admin-hub-card-icon {
    background: #ECEDE7 !important; color: #0B2947 !important;
}
@media (prefers-reduced-motion: reduce) {
    body .admin-content a.admin-module-card:hover .admin-hub-card-icon { transform: none; }
}

/* === Ícono del menú junto al título · 28/10/2026 (Claude ELA) ===
   La pantalla repite el ícono de su ítem del menú (mismo Tipo de QIconoNav) en una baldosa
   celeste: título y menú quedan amarrados a la vista. El subtítulo sigue bajo el título. */
.q-page-head-con-icono > div:first-child { display:grid; grid-template-columns:auto minmax(0,1fr); column-gap:14px; align-items:center; }
.q-page-head-con-icono > div:first-child > :not(.q-page-head-icon) { grid-column:2; }
.q-page-head-icon { grid-column:1; grid-row:1; display:flex; align-items:center; justify-content:center; width:44px; height:44px; border-radius:12px; background:#E0F2F1; color:#0B2947; }
.q-page-head-icon svg.q-icono-nav { width:24px; height:24px; }
body.qiwo-dark .q-page-head-icon { background:#ECEDE7; color:#0B2947; }
@media (max-width: 600px) {
    .q-page-head-con-icono > div:first-child { column-gap:10px; }
    .q-page-head-icon { width:36px; height:36px; border-radius:10px; }
    .q-page-head-icon svg.q-icono-nav { width:20px; height:20px; }
}
/* Configuración de la lectora: una página, paleta Qiwo, superficies sin acento lateral. */
.ki-root { --ki-bg:#ECEDE7; --ki-panel:#E0F2F1; --ki-text:#0B2947; --ki-muted:rgba(11,41,71,.72); --ki-line:rgba(11,41,71,.18); background:var(--ki-bg); color:var(--ki-text); height:100vh; height:100dvh; overflow-y:auto; overflow-x:hidden; overscroll-behavior:contain; font-family:"Segoe UI",system-ui,sans-serif; }
.ki-root.tema-oscuro { --ki-bg:#0B2947; --ki-panel:rgba(209,213,219,.07); --ki-text:#ECEDE7; --ki-muted:#D1D5DB; --ki-line:rgba(209,213,219,.24); color-scheme:dark; }
.ki-content { width:100%; max-width:1080px; margin:0 auto; padding:24px 32px 40px; display:flex; flex-direction:column; gap:16px; }
.ki-header { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:8px; }
.ki-brand { display:inline-flex; align-items:center; gap:10px; background:transparent; border:0; color:inherit; padding:0; cursor:pointer; font:inherit; }
.ki-brand span { margin:0; font-size:16px; font-weight:700; color:var(--ki-text); }
.ki-theme { display:grid; place-items:center; border:1px solid var(--ki-line); border-radius:50%; width:42px; height:42px; background:transparent; color:inherit; cursor:pointer; }
.ki-root svg { width:22px; height:22px; flex-shrink:0; }
.ki-root h1 { font-size:26px; letter-spacing:-.6px; line-height:1.2; font-weight:750; margin:4px 0 8px; overflow-wrap:anywhere; }
.ki-root h2 { font-size:16px; font-weight:700; margin:0 0 12px; }
.ki-root p { color:var(--ki-muted); font-size:14px; line-height:1.55; margin:4px 0 12px; }
.ki-root .ki-eyebrow { font-size:12px; margin:0 0 8px; }
.ki-panel { min-width:0; border:1px solid var(--ki-line); border-radius:16px; background:var(--ki-panel); padding:20px; }
.ki-door-header { display:flex; align-items:center; justify-content:space-between; gap:24px; }
.ki-status { display:inline-flex; align-items:center; gap:8px; font-size:13px; }
.ki-dot { width:8px; height:8px; border-radius:50%; background:#0F9375; }
.ki-grid { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:16px; align-items:start; }
.ki-row { display:flex; align-items:center; justify-content:space-between; gap:14px; padding:12px 0; border-bottom:1px solid var(--ki-line); font-size:14px; }
.ki-row > :first-child { min-width:0; }
.ki-pill { display:inline-flex; align-items:center; justify-content:center; border-radius:999px; background:rgba(15,147,117,.12); border:1px solid var(--ki-line); padding:4px 10px; font-size:12px; line-height:1.3; text-align:center; flex-shrink:0; max-width:65%; }
.ki-root .ki-hint { font-size:12px; margin:10px 0 0; }
.ki-root .ki-notice { color:var(--ki-text); background:rgba(209,213,219,.25); border:1px solid var(--ki-line); border-radius:10px; padding:12px; font-size:13px; margin:0; }
.ki-root .qiwo-btn-primary,.ki-root .qiwo-btn-secondary { display:inline-flex; align-items:center; justify-content:center; gap:8px; min-height:44px; border-radius:10px; padding:10px 16px; font:inherit; font-size:14px; font-weight:650; text-decoration:none; cursor:pointer; box-shadow:none; }
.ki-root .qiwo-btn-primary { background:#0B2947; border:1px solid #0B2947; color:#ECEDE7; white-space:nowrap; }
.ki-root.tema-oscuro .qiwo-btn-primary { background:#ECEDE7; border-color:#ECEDE7; color:#0B2947; }
.ki-root .qiwo-btn-secondary { background:transparent; border:1px solid var(--ki-line); color:var(--ki-text); }
.ki-root button:disabled { opacity:.65; cursor:default; }
.ki-root button:focus-visible,.ki-root summary:focus-visible,.ki-root a:focus-visible { outline:3px solid #0F9375; outline-offset:3px; }
.ki-test { width:100%; margin:12px 0; }
.ki-profiles { display:flex; flex-direction:column; gap:8px; }
.ki-option { display:flex; flex-direction:column; gap:4px; text-align:left; border:1px solid var(--ki-line); padding:12px 14px; border-radius:10px; background:transparent; color:inherit; font:inherit; cursor:pointer; min-height:68px; }
.ki-option strong { font-size:14px; }
.ki-option span { font-size:12px; color:var(--ki-muted); }
.ki-option.is-selected { border:2px solid #0F9375; padding:11px 13px; background:rgba(15,147,117,.12); }
.ki-metrics { display:grid; grid-template-columns:1fr 1fr; gap:16px; }
.ki-metrics > div { display:flex; flex-direction:column; gap:8px; }
.ki-metrics span { color:var(--ki-muted); font-size:12px; }
.ki-metrics strong { font-size:30px; font-weight:750; }
.ki-root summary { cursor:pointer; font-size:15px; font-weight:650; line-height:1.4; min-height:24px; }
.ki-rules p:last-child { margin-top:12px; margin-bottom:0; font-size:12px; }
.ki-change { align-self:center; min-height:44px; border:0; background:transparent; color:var(--ki-muted); font:inherit; font-size:14px; cursor:pointer; padding:8px 16px; text-decoration:underline; text-underline-offset:4px; }
.ki-picker { width:100%; }
.ki-sede { margin-top:24px; }
.ki-sede h2 { font-size:13px; color:var(--ki-muted); font-weight:600; margin-bottom:8px; }
.ki-list { display:flex; flex-direction:column; gap:10px; }
.ki-card { display:flex; align-items:center; gap:14px; width:100%; min-width:0; padding:18px; border:1px solid var(--ki-line); border-radius:12px; background:var(--ki-panel); color:inherit; font:inherit; text-align:left; cursor:pointer; }
.ki-card:hover:not(:disabled) { border-color:#0F9375; background:rgba(15,147,117,.12); }
.ki-card-info { display:flex; flex:1; flex-direction:column; gap:6px; min-width:0; overflow-wrap:anywhere; }
.ki-card-info strong { font-size:15px; }
.ki-card-info > span { font-size:12px; line-height:1.4; color:var(--ki-muted); }
.ki-root .ki-puerta.ki-puerta-ocupada { background:rgba(209,213,219,.13); color:var(--ki-text); border-color:var(--ki-line); }
.ki-backup { margin:24px 0 16px; }
.ki-backup p { margin-top:12px; }
@media (max-width:800px) { .ki-content { padding:20px 24px 32px; } .ki-door-header { gap:16px; } }
@media (max-width:600px) { .ki-content { padding:16px 16px 28px; gap:12px; } .ki-grid { grid-template-columns:minmax(0,1fr); gap:12px; } .ki-panel { padding:16px; border-radius:12px; } .ki-door-header { align-items:stretch; flex-direction:column; } .ki-root h1 { font-size:23px; } .ki-card { padding:14px 12px; gap:10px; } .ki-row { gap:10px; font-size:13px; } .ki-pill { font-size:11px; } }
.ki-brand .ki-logo { width:36px; height:38px; }
.ki-brand .ki-logo path:last-child { fill:var(--ki-text); }
.ki-status.is-inactive .ki-dot { background:#D1D5DB; }

/* INICIO AVISO BATERÍA PUSH — encargo 2026-10-29_aviso-bateria-push */
.bateria-push-control { position: relative; color: var(--qiwo-text, #0B2947); }
.bateria-push-control > summary { display: flex; align-items: center; justify-content: center; cursor: pointer; padding: 8px; border-radius: 8px; list-style: none; }
.bateria-push-control > summary::-webkit-details-marker { display: none; }
.bateria-push-control > summary:focus-visible { outline: 2px solid #0F9375; outline-offset: 2px; }
.bateria-push-panel { position: absolute; right: 0; top: calc(100% + 8px); z-index: 1100; width: min(330px, calc(100vw - 32px)); padding: 20px; background: var(--qiwo-card-bg, #ECEDE7); color: var(--qiwo-text, #0B2947); border: 1px solid #D1D5DB; border-radius: 14px; box-shadow: 0 12px 32px rgba(11,41,71,.18); }
.bateria-push-panel p { margin: 12px 0; line-height: 1.5; font-size: 13px; }
.bateria-push-panel button { margin: 4px 6px 0 0; }
.qiwo-dark .bateria-push-control { color: #D1D5DB; }
.qiwo-dark .bateria-push-panel { background: #0B2947; color: #ECEDE7; }
@media (max-width: 600px) { .bateria-push-panel { position: fixed; top: 64px; right: 16px; } }
/* FIN AVISO BATERÍA PUSH */

/* === TABLETS EN PUNTOS DE ACCESO ? Codex ? 2026-10-29 ? INICIO === */
.q-pa-equipo { padding:10px 0; min-width:0; color:#0B2947; }
.q-pa-equipo + .q-pa-equipo { border-top:1px solid #D1D5DB; }
.q-pa-equipo-nombre { display:flex; flex-wrap:wrap; gap:4px 8px; align-items:baseline; white-space:normal; overflow-wrap:anywhere; }
.q-pa-equipo-pendiente { padding:10px; border-radius:10px; background:#E0F2F1; }
.q-pa-equipo .pa-por-aprobar { background:#D1D5DB !important; color:#0B2947 !important; }
.q-pa-senal { display:flex; align-items:center; gap:7px; margin:5px 0; white-space:normal; }
.q-pa-punto { width:8px; height:8px; flex:0 0 8px; border-radius:50%; background:#D1D5DB; outline:1px solid #0B2947; }
.q-pa-punto.is-online { background:#0F9375; outline:0; }
.q-pa-metricas { display:flex; flex-wrap:wrap; gap:5px 7px; max-width:620px; }
.q-pa-metrica { display:inline-flex; align-items:center; gap:5px; border-radius:6px; padding:3px 6px; background:#E0F2F1; font-size:12px; line-height:1.5; white-space:normal; }
.q-pa-metrica svg { width:16px; height:16px; flex:0 0 16px; }
.q-pa-metrica.is-problema { background:#0B2947; color:#ECEDE7; font-weight:600; }
.q-pa-nota { display:block; color:#0B2947; font-size:12px; margin:6px 0 12px; white-space:normal; }
.q-pa-resumen { margin:0 0 16px; padding:16px 20px; border-radius:12px; overflow-wrap:anywhere; }
.q-pa-resumen h2 { margin:0 0 10px; font-size:17px; }
.q-pa-resumen p { margin:5px 0; white-space:normal; }
.q-pa-resumen-alerta { color:#0B2947; background:#ECEDE7; border:1px solid #D1D5DB; }
.q-pa-detalle { width:min(720px,calc(100vw - 24px)); max-height:92vh; max-height:92dvh; }
.q-pa-detalle .qiwo-modal-body { overflow-y:auto; min-height:0; }
.q-pa-detalle .qiwo-modal-header h2 { margin:0; font-size:20px; overflow-wrap:anywhere; }
.q-pa-ficha { display:grid; grid-template-columns:minmax(120px,1fr) minmax(0,2fr); gap:8px 16px; margin:18px 0; font-size:13px; }
.q-pa-ficha dt { font-weight:600; }
.q-pa-ficha dd { margin:0; overflow-wrap:anywhere; }
.q-pa-eventos { list-style:none; display:grid; gap:8px; padding:0; font-size:13px; }
.q-pa-eventos li { display:flex; flex-wrap:wrap; gap:4px 8px; padding:8px; border-radius:8px; background:#E0F2F1; color:#0B2947; }
.q-pa-eventos li span { flex-basis:100%; overflow-wrap:anywhere; }
body.qiwo-dark .q-pa-equipo, body.qiwo-dark .q-pa-nota { color:#ECEDE7; }
body.qiwo-dark .q-pa-equipo-pendiente { background:rgba(15,147,117,.18); }
body.qiwo-dark .q-pa-metrica { color:#ECEDE7; background:rgba(209,213,219,.12); }
body.qiwo-dark .q-pa-metrica.is-problema { color:#0B2947; background:#ECEDE7; }
body.qiwo-dark .q-pa-resumen-alerta { background:#0B2947; color:#ECEDE7; border-color:#D1D5DB; }
@media (max-width:767px) {
 body .admin-content .qiwo-table-puntos-acceso.admin-tabla-compacta { display:block; }
 body .admin-content .qiwo-table-puntos-acceso.admin-tabla-compacta thead { display:none; }
 body .admin-content .qiwo-table-puntos-acceso.admin-tabla-compacta tbody { display:block; }
 body .admin-content .qiwo-table-puntos-acceso.admin-tabla-compacta tbody tr { display:grid; grid-template-columns:minmax(0,1fr) auto; padding:12px; border-bottom:1px solid #D1D5DB; }
 body .admin-content .qiwo-table-puntos-acceso.admin-tabla-compacta tbody td { display:block; border:0; width:auto; padding:4px 0; }
 body .admin-content .qiwo-table-puntos-acceso.admin-tabla-compacta tbody td:nth-child(2):not(.admin-col-principal):not(.admin-col-estado):not(.admin-col-acciones) { display:block; grid-column:1 / -1; grid-row:3; padding-top:10px; }
 body .admin-content .qiwo-table-puntos-acceso.admin-tabla-compacta .admin-col-principal { grid-column:1; grid-row:1; }
 body .admin-content .qiwo-table-puntos-acceso.admin-tabla-compacta .admin-col-estado { grid-column:1; grid-row:2; }
 body .admin-content .qiwo-table-puntos-acceso.admin-tabla-compacta .admin-col-acciones { grid-column:2; grid-row:1 / 3; padding-left:8px; }
 body .admin-content .qiwo-table-puntos-acceso.admin-tabla-compacta td[colspan] { grid-column:1 / -1; }
 .q-pa-metricas { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); }
 .q-pa-metrica { overflow-wrap:anywhere; }
 .q-pa-ficha { grid-template-columns:1fr; gap:4px; }
 .q-pa-ficha dd { margin-bottom:8px; }
 .q-pa-detalle { max-height:94vh; max-height:94dvh; }
}
/* === TABLETS EN PUNTOS DE ACCESO ? Codex ? 2026-10-29 ? FIN === */

/* INICIO ENCARGO 2026-10-29 baja-del-personal · ADR 0087 · Codex */
.q-personal-exportar{position:relative}
.q-personal-exportar>summary{list-style:none;cursor:pointer}
.q-personal-exportar>summary::-webkit-details-marker{display:none}
.q-personal-exportar-menu{position:absolute;right:0;top:calc(100% + 6px);z-index:40;display:grid;gap:6px;padding:10px;min-width:180px;background:var(--q-surface,#ECEDE7);color:var(--q-text,#0B2947);border:1px solid #D1D5DB;border-radius:12px;box-shadow:0 10px 28px #0B294733}
.q-personal-de-baja .q-person-body,.q-personal-de-baja>td:not(.q-actions-cell){opacity:.7}
.q-personal-estado{max-width:30ch;white-space:normal}
.q-personal-baja-consecuencias{padding:16px;background:#E0F2F1;color:#0B2947;border-radius:14px}
.q-personal-baja-consecuencias p{margin:10px 0 0}
.q-personal-historial{list-style:none;padding:0;margin:0;display:grid;gap:12px}
.q-personal-historial li{padding:14px;background:#E0F2F1;color:#0B2947;border-radius:12px;overflow-wrap:anywhere}
.q-personal-historial p{margin:7px 0 0}
.q-personal-baja-dialogo{max-height:90vh;max-height:90dvh}
.qiwo-dark .q-personal-exportar-menu{background:#0B2947;color:#ECEDE7}
.qiwo-dark .q-personal-baja-consecuencias,.qiwo-dark .q-personal-historial li{background:#0B2947;color:#ECEDE7}
@media(max-width:700px){
 .q-personal-exportar-menu{right:auto;left:0}
 .q-table[aria-label="Personal de esta sede"] td[data-label="Portal"],.q-table[aria-label="Personal de esta sede"] td[data-label="Credencial"]{display:flex;grid-column:1/-1;align-items:flex-start;gap:10px;white-space:normal}
 .q-table[aria-label="Personal de esta sede"] td[data-label="Portal"]::before,.q-table[aria-label="Personal de esta sede"] td[data-label="Credencial"]::before{content:attr(data-label);font-weight:600;min-width:76px}
 .q-table[aria-label="Personal de esta sede"] .q-credential{overflow-wrap:anywhere;white-space:normal}
}
/* FIN ENCARGO 2026-10-29 baja-del-personal · ADR 0087 · Codex */

/* INICIO ENCARGO 2026-10-29 lectora-v4-personal · ADR 0088 · Codex */
.kp-pulso{display:none}
.kp-root,.kp-root *,.kp-overlay *{box-sizing:border-box}
.kp-root{height:100vh;height:100dvh;width:100%;overflow:hidden;background:#0B2947;color:#ECEDE7;display:flex;flex-direction:column;font-family:inherit;padding:clamp(16px,3vw,36px);gap:20px}
.kp-header{display:flex;align-items:center;justify-content:space-between;gap:16px;flex:none}
.kp-header strong{font-size:24px;font-weight:750;letter-spacing:-.6px}.kp-header strong span{font-size:13px;letter-spacing:.02em;font-weight:500;margin-left:16px;color:#D1D5DB}
.kp-header small{display:block;color:#D1D5DB;font-size:12px;margin-top:5px}
.kp-button{min-height:48px;border:1px solid #D1D5DB66;border-radius:14px;background:#0B2947;color:#ECEDE7;font:inherit;font-size:14px;padding:12px 18px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:10px}
.kp-button:hover{background:#E0F2F11A}.kp-button:focus-visible{outline:3px solid #0F9375;outline-offset:3px}.kp-icon{width:48px;padding:12px}.kp-icon svg{width:24px;height:24px}
.kp-body{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:clamp(24px,5vw,72px)}
.kp-camera{position:relative;border-radius:28px;overflow:hidden;min-height:0;background:#E0F2F114;border:1px solid #D1D5DB33}
.kp-camera video{width:100%;height:100%;object-fit:cover;transform:scaleX(-1)}
.kp-face-guide{position:absolute;inset:15% 23% 18%;color:#E0F2F1;pointer-events:none}.kp-face-guide svg{width:100%;height:100%}
.kp-camera-hint{position:absolute;bottom:32px;left:16px;right:16px;margin:0;background:#0B2947D9;color:#ECEDE7;padding:12px 16px;border-radius:14px;text-align:center;font-size:14px;line-height:1.4}
.kp-door{position:absolute;top:16px;left:16px;background:#0B2947CC;color:#ECEDE7;border-radius:10px;padding:8px 12px;font-size:12px;max-width:90%}
.kp-camera-start{position:absolute;top:45%;left:50%;transform:translate(-50%,-50%);background:#0F9375;min-width:170px}.kp-camera-start[hidden]{display:none}
.kp-panel{min-width:0;min-height:0;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;padding:16px 0;gap:14px}
.kp-panel p{margin:0;line-height:1.5;font-size:clamp(14px,1.6vw,20px);max-width:33em;color:#D1D5DB}
.kp-panel .kp-eyebrow{font-size:12px;font-weight:650;letter-spacing:.13em;color:#E0F2F1}
.kp-clock{font-size:clamp(72px,10.5vw,160px);line-height:.95;letter-spacing:-.075em;font-weight:650;font-variant-numeric:tabular-nums}
.kp-panel .kp-date{text-transform:capitalize;font-size:clamp(14px,1.7vw,21px);margin-bottom:clamp(8px,3vh,36px)}
.kp-panel h1{font-size:clamp(28px,3.5vw,54px);font-weight:600;line-height:1.12;letter-spacing:-.045em;margin:0 0 10px;overflow-wrap:anywhere}
.kp-panel .kp-connection{font-size:12px;color:#E0F2F1;margin-top:16px;display:flex;align-items:center;gap:8px}.kp-connection::before{content:"";width:7px;height:7px;border-radius:50%;background:#0F9375;flex:none}
.kp-result-icon{height:74px;width:74px;border-radius:50%;background:#0F9375;color:#E0F2F1;display:grid;place-items:center;margin-bottom:16px}.kp-result-icon svg{height:40px;width:40px}
.kp-panel .kp-mark-time{font-size:30px;font-weight:600;color:#E0F2F1}.kp-mark-time span{font-size:18px;font-weight:500}
.kp-root[data-estado="tardanza"] .kp-panel{background:#FEF3A0;color:#854D0E;border-radius:26px;padding:clamp(16px,3vw,40px)}
.kp-root[data-estado="tardanza"] .kp-panel p,.kp-root[data-estado="tardanza"] .kp-mark-time{color:#854D0E}.kp-root[data-estado="tardanza"] .kp-result-icon{background:#FDE68A;color:#854D0E}.kp-root[data-estado="tardanza"] .kp-connection::before{background:#CA8A04}
.kp-root[data-estado="no-reconocido"] .kp-result-icon{background:#E0F2F1;color:#0B2947}
.kp-panel .kp-warning{font-size:13px;padding:10px 12px;background:#ECEDE7;color:#0B2947;border-radius:12px}
.kp-footer{display:flex;justify-content:space-between;gap:12px;font-size:11px;color:#D1D5DB;flex:none}.kp-unavailable{margin:auto;max-width:620px;line-height:1.5}.kp-unavailable h1{font-size:32px}
.kp-overlay{position:fixed;z-index:10000;inset:0;background:#0B2947CC;padding:20px;display:grid;place-items:center;color:#ECEDE7}
.kp-settings{position:relative;background:#0B2947;border:1px solid #D1D5DB66;border-radius:24px;padding:28px;width:min(520px,100%);max-height:95vh;max-height:95dvh;overflow:auto;box-shadow:0 20px 80px #0B294799}
.kp-settings h2{margin:0 56px 20px 0;font-size:24px}.kp-settings p{font-size:14px;line-height:1.5;color:#D1D5DB}.kp-close{position:absolute;right:16px;top:16px}.kp-setting-row{display:flex;align-items:center;justify-content:space-between;min-height:60px;gap:16px}.kp-settings input[type="checkbox"]{width:28px;height:28px;accent-color:#0F9375}.kp-settings input[type="range"]{width:100%;min-height:48px;accent-color:#0F9375}.kp-settings .kp-settings-hint{font-size:12px}.kp-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:20px}.kp-primary{background:#0F9375;border-color:#0F9375}
@media(orientation:portrait){.kp-root{gap:14px;padding:20px}.kp-body{grid-template-columns:1fr;grid-template-rows:minmax(0,1fr) minmax(0,1.03fr);gap:20px}.kp-camera{border-radius:24px}.kp-panel{align-items:center;text-align:center;padding:8px 16px;gap:9px}.kp-panel h1{font-size:clamp(26px,5vw,46px)}.kp-clock{font-size:clamp(62px,12vw,110px)}.kp-panel .kp-date{margin-bottom:8px}.kp-camera-hint{bottom:14px;font-size:13px;padding:9px 12px}.kp-face-guide{inset:10% 30% 12%}.kp-result-icon{margin-bottom:2px;width:56px;height:56px}.kp-result-icon svg{width:32px;height:32px}.kp-panel .kp-connection{margin-top:4px}.kp-footer{justify-content:center}.kp-footer span:last-child{display:none}}
@media(max-width:600px) and (orientation:portrait){.kp-root{padding:14px;gap:10px}.kp-header strong{font-size:21px}.kp-header strong span{display:block;font-size:11px;margin:2px 0 0}.kp-header small{font-size:10px;max-width:260px}.kp-body{gap:12px;grid-template-rows:minmax(0,1fr) minmax(0,1.2fr)}.kp-panel{gap:6px;padding:6px}.kp-panel h1{font-size:28px;margin-bottom:4px}.kp-panel p{font-size:13px}.kp-panel .kp-eyebrow{font-size:10px}.kp-panel .kp-date{font-size:13px;margin-bottom:6px}.kp-clock{font-size:66px}.kp-panel .kp-mark-time{font-size:25px}.kp-panel .kp-connection{font-size:10px}.kp-camera-hint{font-size:11px}.kp-footer{font-size:10px}.kp-root[data-estado="tardanza"] .kp-panel{padding:14px}}
@media(max-height:650px) and (orientation:landscape){.kp-root{padding:14px;gap:12px}.kp-clock{font-size:76px}.kp-panel h1{font-size:30px}.kp-panel{gap:8px}.kp-panel .kp-date{margin-bottom:8px}.kp-result-icon{width:50px;height:50px;margin-bottom:2px}.kp-panel p{font-size:14px}.kp-footer{font-size:10px}}
/* FIN ENCARGO 2026-10-29 lectora-v4-personal · ADR 0088 · Codex */

/* INICIO ENCARGO 2026-10-29 biblioteca-iconos — solo q-bi-* y q-biblioteca */
.q-biblioteca { max-width:1500px; color:var(--q-ink); }
.q-bi-filtros { display:flex; flex-wrap:wrap; align-items:end; gap:12px; }
.q-biblioteca label { display:grid; gap:7px; font-size:13px; }
.q-bi-filtros label { flex:1 1 150px; }
.q-bi-filtros select { width:100%; }
.q-bi-aviso, .q-bi-pedido { padding:16px; border:1px solid var(--q-border); border-radius:12px; background:var(--q-tint); line-height:1.6; }
.q-bi-conteos { display:flex; flex-wrap:wrap; gap:10px; margin:18px 0; }
.q-bi-estado { display:inline-flex; align-items:center; gap:6px; padding:5px 10px; border-radius:20px; font-size:12px; background:var(--q-surface-secondary); color:var(--q-ink); }
.q-bi-ELEGIDO { background:var(--q-tint); }
.q-bi-REHACER { background:var(--q-surface-secondary); text-decoration:underline dotted; text-underline-offset:3px; }
.q-bi-DESCARTADO { color:var(--q-muted); }
.q-bi-cuenta { font-size:13px; color:var(--q-muted); margin:18px 0 12px; }
.q-bi-grilla { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,370px),1fr)); align-items:start; gap:18px; }
.q-bi-tarjeta { min-width:0; padding:18px; border:1px solid var(--q-border); border-radius:14px; background:var(--q-surface); }
.q-bi-tarjeta > header, .q-bi-dialogo > header { display:flex; align-items:start; justify-content:space-between; gap:12px; margin-bottom:16px; }
.q-bi-tarjeta h2 { margin:5px 0 0; font-size:18px; line-height:1.35; color:var(--q-ink); }
.q-bi-tarjeta > header small, .q-bi-id { color:var(--q-muted); font-size:11px; }
.q-bi-tarjeta > header .q-bi-estado { flex-shrink:0; }
.q-bi-muestras { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:10px; padding:12px 6px; border:1px solid var(--q-border); border-radius:9px; }
.q-bi-fondo-claro { background:#ECEDE7; color:#0B2947; color-scheme:light; }
.q-bi-fondo-oscuro { background:#0B2947; color:#ECEDE7; color-scheme:dark; }
.q-bi-muestras figure { min-width:0; margin:0; text-align:center; }
.q-bi-muestras figcaption { font-size:11px; }
.q-bi-lienzo { min-height:144px; display:grid; place-items:center; padding:8px 0; }
.q-bi-svg { max-width:100%; display:grid; place-items:center; }
.q-bi-svg svg { display:block; width:100%; height:100%; }
.q-bi-muestras small { display:block; font-size:10px; overflow-wrap:anywhere; line-height:1.4; }
.q-bi-id { display:block; margin-top:14px; overflow-wrap:anywhere; }
.q-bi-comentario { padding:10px; border-radius:8px; background:var(--q-tint); font-size:13px; white-space:pre-wrap; overflow-wrap:anywhere; }
.q-bi-acciones { display:flex; flex-wrap:wrap; gap:8px; margin-top:16px; }
.q-biblioteca .q-button, .q-bi-dialogo .q-button { min-height:44px; }
.q-bi-historial { border-top:1px solid var(--q-border); margin-top:16px; padding-top:12px; font-size:12px; }
.q-bi-historial > div { padding:12px 0; overflow-wrap:anywhere; line-height:1.6; }
.q-bi-historial p { white-space:pre-wrap; }
.q-biblioteca summary { cursor:pointer; min-height:32px; }
.q-bi-pedido textarea, .q-bi-dialogo textarea { box-sizing:border-box; width:100%; min-height:120px; padding:12px; border:1px solid var(--q-border); border-radius:8px; background:var(--q-surface); color:var(--q-ink); font:inherit; resize:vertical; }
.q-bi-pedido label { margin-top:12px; }
.q-bi-vacio { padding:32px; text-align:center; background:var(--q-surface-secondary); border-radius:12px; }
.q-bi-dialogo { box-sizing:border-box; width:min(560px,calc(100vw - 28px)); max-height:90vh; max-height:90dvh; overflow:auto; padding:24px; background:var(--q-surface); color:var(--q-ink); }
.q-bi-dialogo h2 { margin:0; font-size:20px; line-height:1.4; }
.q-bi-dialogo > header .q-button { flex-shrink:0; }
.q-bi-dialogo form { display:grid; gap:10px; }
.q-bi-dialogo p { line-height:1.6; margin:0 0 8px; }
.q-bi-dialogo .q-bi-acciones { justify-content:flex-end; }
.q-bi-dialogo textarea:focus, .q-biblioteca .q-select:focus-visible { outline:2px solid var(--q-focus); outline-offset:2px; }
@media(max-width:560px) {
 .q-bi-filtros { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); padding:12px; }
 .q-bi-filtros label { min-width:0; }
 .q-bi-filtros > button { grid-column:1 / -1; }
 .q-bi-tarjeta { padding:12px; }
 .q-bi-dialogo { padding:18px; }
}
/* FIN ENCARGO 2026-10-29 biblioteca-iconos */
/* INICIO ENCARGO 2026-10-29 biblioteca-iconos — contorno SVG por fondo */
.q-bi-fondo-claro { --q-bi-icono-contorno:#0B2947; }
.q-bi-fondo-oscuro { --q-bi-icono-contorno:#ECEDE7; }
/* FIN ENCARGO 2026-10-29 biblioteca-iconos — contorno SVG por fondo */

/* INICIO CODEX 2026-10-29: credenciales de alumnos y comunicados q-*.
   Bloque propio; no modifica las reglas ni las pantallas de otros encargos. */
:is(.q-credenciales-page, .q-comunicados-page) { min-width:0; color:var(--q-ink); }
:is(.q-credenciales-page, .q-comunicados-page) .q-record-link { color:var(--q-ink); }
.q-credenciales-table .q-status { align-self:flex-start; }
:is(.q-credenciales-page, .q-comunicados-page) .q-filterbar-alerts { border:0; flex-wrap:wrap; }
.q-cred-vistas { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:18px; }
.q-cred-rafaga { display:flex; align-items:center; gap:8px; font-size:13px; cursor:pointer; }
.q-cred-rafaga input { accent-color:var(--q-action); }
.q-cred-footer { padding:12px 16px; color:var(--q-muted); font-size:12px; border-top:1px solid var(--q-border); }
.q-credenciales-page :is(.q-cred-valor, .credencial-valor) { display:inline; max-width:none; overflow:visible; white-space:normal; text-overflow:clip; overflow-wrap:anywhere; font-family:monospace; font-size:12px; color:var(--q-ink); }
:is(.q-credenciales-table, .q-comunicados-table) .q-person-name { white-space:normal; overflow:visible; overflow-wrap:anywhere; text-align:left; }
:is(.q-credenciales-table, .q-comunicados-table) .q-status::before { border-radius:50%; flex-shrink:0; }
:is(.q-credenciales-table, .q-comunicados-table) th:first-child { width:29%; }
.q-credenciales-table th:nth-child(2) { width:20%; }
.q-credenciales-table th:nth-child(3) { width:20%; }
.q-credenciales-page .autocomplete-item { display:block; width:100%; border:0; font:inherit; text-align:left; cursor:pointer; background:var(--q-surface); color:var(--q-ink); }
.q-credenciales-page .autocomplete-item:hover, .q-credenciales-page .autocomplete-item:focus-visible { background:var(--q-tint); }
.q-credenciales-page .q-filterbar > .q-text-muted { margin-top:14px; }
.q-comunicados-table th:first-child { width:32%; }
.q-comunicados-table th:nth-child(2) { width:12%; }
.q-comunicados-table th:nth-child(3) { width:18%; }
.q-comunicados-table th:nth-child(4) { width:16%; }
.q-comunicados-table th:nth-child(5) { width:9%; }
.q-comunicados-table .q-actions-cell { width:128px; }
.q-comunicado-mensaje { display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; white-space:normal; }
.q-comunicado-estados { display:flex; flex-wrap:wrap; align-items:center; gap:6px; margin-top:8px; }
.q-comunicado-remitente { gap:8px; }
.q-comunicado-remitente .q-person-avatar { flex-basis:28px; height:28px; font-size:10px; }
.q-comunicados-table tr.q-comunicado-urgente { background:var(--q-tint); }
.q-comunicados-table tr.q-comunicado-anulado { background:var(--q-surface-secondary); }
body .q-comunicados-page .q-comunicados-table tr.q-comunicado-urgente { background:var(--q-tint) !important; }
body .q-comunicados-page .q-comunicados-table tr.q-comunicado-anulado { background:var(--q-surface-secondary) !important; }
body .q-comunicados-page .q-comunicados-table tr:is(.q-comunicado-urgente, .q-comunicado-anulado) > td { background:transparent !important; }
.q-comunicado-anulado .q-person-name { text-decoration:line-through; }
.q-comunicado-progreso { display:block; width:64px; height:4px; margin-top:6px; border-radius:4px; background:var(--q-border); }
.q-comunicado-progreso > span { display:block; height:100%; border-radius:inherit; background:var(--q-action); }
.q-comunicado-texto { white-space:pre-wrap; overflow-wrap:anywhere; margin:0 0 12px; color:var(--q-ink); }
.q-comunicados-page .destinatarios-columna-pendiente { background:var(--q-surface-secondary); border-color:var(--q-border); }
.q-comunicados-page .destinatarios-columna-header { text-transform:none; letter-spacing:normal; }
.q-comunicados-page .destinatarios-columnas { grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; }
.q-comunicados-page .destinatarios-columna { min-width:0; padding:0; }
.q-comunicados-page .destinatarios-columna-pendiente { border-left:0; }
.q-comunicados-page .destinatario-fila > div { min-width:0; }
.q-comunicados-page .destinatario-nombre { white-space:normal; overflow:visible; text-overflow:clip; overflow-wrap:anywhere; }
body .admin-shell .admin-content .q-comunicados-page .qiwo-modal-card .q-search input { border:0 !important; background:transparent !important; box-shadow:none !important; }
/* Los diálogos de Qiwo conservan superficie crema en ambos temas. Sus tokens
   locales evitan heredar texto claro de la página cuando el tema es oscuro. */
:is(.q-credenciales-page, .q-comunicados-page) .qiwo-modal-card { --q-ink:#0B2947; --q-muted:#0B2947; --q-avatar-ink:#0F9375; --q-tint:#E0F2F1; --q-surface:#ECEDE7; --q-surface-secondary:#ECEDE7; --q-border:#D1D5DB; color:var(--q-ink); }
:is(.q-credenciales-page, .q-comunicados-page) .qiwo-modal-card :is(.cred-historial-item, .destinatario-nombre, .destinatario-fecha, .destinatarios-vacio) { color:var(--q-ink) !important; }
:is(.q-credenciales-page, .q-comunicados-page) .qiwo-modal-header :is(h2,h3) { color:#0B2947 !important; }
body .admin-shell .admin-content :is(.q-credenciales-page, .q-comunicados-page) .qiwo-modal-card .q-person-avatar { background:#E0F2F1 !important; color:#0B2947 !important; }
.q-credenciales-page .qiwo-modal-card .identificar-result { background:#E0F2F1 !important; border-color:#D1D5DB !important; }
.q-credenciales-page .qiwo-modal-card :is(.identificar-label, .identificar-valor-cell, .cred-historial-titulo, .qiwo-form-hint) { color:#0B2947 !important; }
.q-credenciales-page .qiwo-modal-card .cred-historial-titulo { text-transform:none; letter-spacing:normal; }
body.qiwo-dark :is(.q-credenciales-page, .q-comunicados-page) :is(.q-text-muted, .q-person-sub) { color:var(--q-muted) !important; }
body.qiwo-dark :is(.q-credenciales-page, .q-comunicados-page) :is(.q-cred-valor, .credencial-valor, .q-comunicado-texto, .destinatarios-columna-header) { color:var(--q-ink) !important; }
body.qiwo-dark .q-cred-vistas .q-chip { background:var(--q-surface) !important; color:var(--q-ink) !important; border-color:var(--q-border) !important; }
body.qiwo-dark .q-cred-vistas .q-chip.is-active { background:var(--q-tint) !important; border-color:var(--q-action) !important; }
@container (max-width:900px) {
    .q-comunicados-table td[data-label="Vigencia"] { grid-column:1/-1; }
    .q-credenciales-table .q-actions-cell, .q-comunicados-table .q-actions-cell { width:100%; }
    .q-comunicados-table .q-comunicado-mensaje { -webkit-line-clamp:3; }
}
@media (max-width:767px) {
    .q-comunicados-page .destinatarios-columnas { grid-template-columns:minmax(0,1fr); }
    .q-comunicados-page .destinatarios-columna-pendiente { padding-top:16px; border-top:1px solid #D1D5DB; }
    .q-cred-vistas .q-chip { flex:1 1 auto; }
    .q-credenciales-page .q-filterbar-controls > .q-chips { width:auto; }
    .q-credenciales-page .q-cred-rafaga { margin-left:auto; }
    :is(.q-credenciales-page, .q-comunicados-page) .qiwo-modal-footer { flex-wrap:wrap; }
    .q-comunicados-page .qiwo-modal-footer > div { flex-wrap:wrap; width:100%; }
    .q-comunicados-page .qiwo-modal-footer > div > button { flex:1; }
    :is(.q-credenciales-page, .q-comunicados-page) .q-result-count { white-space:normal; }
}
/* FIN CODEX 2026-10-29: credenciales de alumnos y comunicados q-*. */

/* INICIO CODEX 2026-10-29: personal en varias sedes (ADR 0089). */
.q-personal-sedes-dialog { width:min(620px,96vw); max-height:90vh; max-height:90dvh; --q-ink:#0B2947; --q-border:#D1D5DB; color:var(--q-ink); background:#ECEDE7; }
.q-personal-sedes-dialog .qiwo-modal-body { overflow-y:auto; display:grid; gap:14px; }
.q-personal-sedes-dialog .qiwo-modal-header h2 { color:#0B2947; }
.q-personal-sedes-opciones { display:grid; gap:8px; }
.q-personal-sedes-opciones label { display:flex; align-items:center; gap:12px; padding:12px; border:1px solid #D1D5DB; border-radius:12px; background:#E0F2F1; color:#0B2947; }
.q-personal-sedes-opciones input { width:20px; height:20px; accent-color:#0F9375; flex-shrink:0; }
.q-personal-sedes-opciones small { display:block; margin-top:4px; }
.q-personal-sedes-dialog .q-input { color:#0B2947; background:#ECEDE7; }
.q-calendar-adicional { color:var(--q-ink); background:var(--q-tint); }
.q-calendar-otra-sede { color:var(--q-ink); background:var(--q-surface-secondary); }
.q-calendar-sin-obligacion { color:var(--q-muted); background:var(--q-surface-secondary); }
@media(max-width:767px) { .q-personal-sedes-dialog { width:100%; } .q-personal-sedes-dialog .qiwo-modal-footer { flex-wrap:wrap; } }
.q-personal-sedes-dialog #personal-sedes-motivo { color:#0B2947 !important; background:#ECEDE7 !important; }
body .q-personal-sedes-dialog .q-button:not(.q-button-primary) { color:#0B2947 !important; background:#ECEDE7 !important; border-color:#D1D5DB !important; }
body .q-personal-sedes-dialog .q-button-primary { color:#ECEDE7 !important; background:#0F9375 !important; }
/* FIN CODEX 2026-10-29: personal en varias sedes (ADR 0089). */

/* INICIO CODEX 2026-10-29: vistas móviles reutilizables (ListaVistas). */
.q-list-views { min-width:0; max-width:100%; }
.q-view-selector, .q-compact-toggle, .q-view-storage { display:none; }
@media (max-width:1023px) {
    .q-view-selector { display:flex; gap:4px; padding:4px; margin:0 0 12px; min-width:0; border:1px solid var(--q-border); border-radius:10px; background:var(--q-surface-secondary); color:var(--q-ink); }
    .q-view-choice { position:relative; flex:1; min-width:0; cursor:pointer; }
    .q-view-choice input { position:absolute; width:1px; height:1px; opacity:0; }
    .q-view-choice > span { display:flex; justify-content:center; align-items:center; gap:6px; min-height:44px; padding:0 6px; border-radius:7px; font-size:13px; font-weight:600; }
    .q-view-choice input:checked + span { background:var(--q-tint); box-shadow:inset 0 0 0 1px var(--q-focus); }
    .q-view-choice input:focus-visible + span { outline:2px solid var(--q-focus); outline-offset:1px; }
    .q-view-storage { display:block; color:var(--q-muted); font-size:12px; }
    .q-list-views :is(.q-row-action, .qiwo-row-actions-trigger, .qiwo-row-actions-menu-item) { min-height:44px; }
    /* Tarjetas conserva las celdas, los rótulos y las acciones existentes. */
    .q-list-views:not(.q-list-tabla) .q-table-wrap { padding:10px; }
    .q-list-views:not(.q-list-tabla) .q-table,
    .q-list-views:not(.q-list-tabla) .q-table tbody { display:block; width:100%; }
    .q-list-views:not(.q-list-tabla) .q-table thead { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); }
    .q-list-views:not(.q-list-tabla) .q-table tbody tr { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px 12px; margin:0 0 10px; padding:15px; border:1px solid var(--q-border); border-radius:10px; background:var(--q-surface); }
    .q-list-views:not(.q-list-tabla) .q-table tbody tr:last-child { margin-bottom:0; }
    .q-list-views:not(.q-list-tabla) .q-table tbody td { display:block; min-width:0; width:auto; height:auto; padding:0; border:0; background:transparent; }
    .q-list-views:not(.q-list-tabla) .q-table td[data-label]::before { content:attr(data-label); display:block; margin-bottom:5px; color:var(--q-muted); font-size:12px; font-weight:500; }
    .q-list-views:not(.q-list-tabla) .q-table :is(.q-person-cell, .q-actions-cell, .q-empty-cell, td[data-label=Alertas]) { grid-column:1/-1; }
    .q-list-views:not(.q-list-tabla) .q-table td:is(.q-person-cell, .q-actions-cell)[data-label]::before { display:none; }
    .q-list-views:not(.q-list-tabla) .q-table .q-actions-cell { width:100%; padding-top:10px; border-top:1px solid var(--q-border); }
    .q-list-views:not(.q-list-tabla) .q-table tr:has(.q-empty-cell) { display:block; padding:0; border:0; }
    .q-list-views.q-list-compacta .q-table-wrap { padding:0; }
    .q-list-compacta .q-table tbody tr:has(.q-compact-toggle) { padding:0 10px 12px; gap:12px; margin:0; border:0; border-bottom:1px solid var(--q-border); border-radius:0; }
    .q-list-compacta .q-table tbody tr:has(.q-compact-toggle[aria-expanded=false]) { padding-bottom:0; gap:0; }
    .q-list-compacta .q-table tr:has(.q-compact-toggle[aria-expanded=false]) > td:not(:first-child),
    .q-list-compacta .q-table tr:has(.q-compact-toggle[aria-expanded=false]) > td:first-child > :not(.q-compact-toggle) { display:none; }
    .q-list-compacta .q-compact-toggle { display:flex; align-items:center; gap:8px; width:100%; min-width:0; min-height:56px; padding:6px 0; border:0; background:transparent; color:var(--q-ink); font:inherit; text-align:left; cursor:pointer; }
    .q-compact-toggle .q-person-avatar { width:30px; height:30px; flex:0 0 30px; font-size:11px; }
    .q-compact-name { flex:1 1 0; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-weight:600; }
    .q-compact-secondary { flex:0 1 35%; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:12px; color:var(--q-muted); }
    .q-compact-dot { width:7px; height:7px; flex:0 0 7px; padding:0; border:0; border-radius:50%; background:var(--q-avatar-ink); }
    .q-compact-dot::before { display:none; }
    .q-compact-dot.q-status-attention { background:var(--q-ink); }
    .q-compact-dot.q-compact-late { background:#CA8A04; }
    body.qiwo-dark .q-compact-dot.q-compact-late { background:#FDE68A; }
    .q-compact-chevron { flex:0 0 16px; }
    .q-compact-toggle[aria-expanded=true] .q-compact-chevron { transform:rotate(90deg); }
    /* La tabla real no se duplica. Solo este contenedor se desplaza. */
    .q-list-tabla .q-table-wrap { display:block; max-width:100%; overflow:auto; padding:0; isolation:isolate; }
    .q-list-tabla .q-table { display:table; min-width:900px; width:100%; table-layout:fixed; }
    .q-list-tabla .q-table thead { display:table-header-group; position:static; width:auto; height:auto; clip-path:none; overflow:visible; white-space:normal; }
    .q-list-tabla .q-table tbody { display:table-row-group; width:auto; }
    .q-list-tabla .q-table :is(thead, tbody) tr { display:table-row; padding:0; margin:0; border:0; }
    .q-list-tabla .q-table :is(th, td) { display:table-cell !important; padding:10px 12px; width:auto; height:auto; border-radius:0; vertical-align:middle; }
    .q-list-tabla .q-table td { border-top:1px solid var(--q-border); background:var(--q-surface); }
    .q-list-tabla .q-table td::before { display:none !important; }
    .q-list-tabla .q-table :is(th, td):first-child { position:sticky; left:0; z-index:1; width:240px; background:var(--q-surface) !important; box-shadow:1px 0 0 var(--q-border); }
    .q-list-tabla .q-table th:first-child { background:var(--q-tint) !important; z-index:2; }
    .q-list-tabla .q-table .q-actions-cell { width:138px; text-align:right; }
    /* Lista del personal en celular, vista Tabla (Jordy, 08/11/2026): igual que en PC y se desliza a la derecha.
       Sin columna fija: en un S20 la columna del nombre fija se comia media pantalla. */
    [data-screen="personal-lista"].q-list-tabla .q-table { min-width:960px; table-layout:fixed; }
    [data-screen="personal-lista"].q-list-tabla .q-table :is(th, td):first-child { position:static; width:36%; box-shadow:none; }
    [data-screen="personal-lista"].q-list-tabla .q-table th:first-child { z-index:auto; }
    [data-screen="personal-lista"].q-list-tabla .q-table th:nth-child(2) { width:14%; }
    [data-screen="personal-lista"].q-list-tabla .q-table th:nth-child(3) { width:14%; }
    [data-screen="personal-lista"].q-list-tabla .q-table th:nth-child(4) { width:22%; }
    [data-screen="personal-lista"].q-list-tabla .q-table :is(th, td).q-actions-cell, [data-screen="personal-lista"].q-list-tabla .q-table th:last-child { width:138px; }
    [data-screen="personal-lista"].q-list-tabla .q-person-name, [data-screen="personal-lista"].q-list-tabla .q-person-sub { white-space:nowrap; }
}
/* Sedes del personal: la principal en negrita, las demas debajo con viñeta (07/11/2026). */
.q-sedes-vinetas { margin:0; padding:0 0 0 14px; list-style:disc; display:flex; flex-direction:column; gap:2px; }
.q-sedes-vinetas li { padding:0; line-height:1.35; }
.q-sedes-vinetas li::marker { color:var(--q-muted, #6B7280); }
.q-sedes-vinetas li.is-principal { font-weight:600; color:var(--q-ink); }
.q-table-personal .q-person-sep { margin:0 4px; }
/* En PC se restaura la tabla incluso si un container query la volvería tarjeta. */
@media (min-width:1024px) {
    .q-list-views .q-table-wrap { padding:0; }
    .q-list-views .q-table { display:table; }
    .q-list-views .q-table thead { display:table-header-group; position:static; width:auto; height:auto; clip-path:none; overflow:visible; }
    .q-list-views .q-table tbody { display:table-row-group; }
    .q-list-views .q-table tr { display:table-row; padding:0; margin:0; border:0; }
    .q-list-views .q-table :is(th, td) { display:table-cell; }
    .q-list-views .q-table td { height:68px; padding:6px 12px; border-top:1px solid var(--q-border); }
    .q-list-views .q-table td::before { display:none; }
    .q-list-views .q-table .q-actions-cell { width:138px; }
}
/* FIN CODEX 2026-10-29: vistas móviles reutilizables. */

/* Menús desplegables con ícono por opción (Jordy 29/10/2026: ícono SVG en todos los botones) */
.q-personal-exportar-menu .q-button{justify-content:flex-start}
.q-personal-exportar-menu .q-button svg,.q-personal-exportar > summary > svg:first-child{flex-shrink:0;width:16px;height:16px}

/* INICIO CODEX 2026-10-29: pulido personal */
.qiwo-btn-secondary { display:inline-flex; align-items:center; justify-content:center; gap:6px; }
.qiwo-btn-secondary > svg, .q-button > svg, .q-text-action > svg, .q-record-link > svg { flex-shrink:0; }
.cred-personal .q-credential-status::before { display:none; }
.cred-personal .q-credential-status .q-personal-cred-dot { flex:0 0 8px; width:8px; height:8px; }
.cred-personal .q-credential-status.is-present .q-personal-cred-dot { color:#0F9375; }
.cred-personal .q-credential-status.is-missing .q-personal-cred-dot { color:#DC2626; }
.q-personal-cred-compact { display:none; }
.q-calendar-cell:is(button) { padding:0; border:0; appearance:none; font:inherit; cursor:pointer; }
.q-calendar-cell:is(button):hover { outline:2px solid var(--q-focus); outline-offset:2px; }
.q-calendar-cell:is(button):focus-visible { outline:2px solid var(--q-focus); outline-offset:2px; }
.q-calendar-cell.q-calendar-marca, .q-calendar-cell.q-calendar-registro {
    background:#E0F2F1; color:#0F9375; box-shadow:inset 0 0 0 1px #0F9375;
}
.q-calendar-cell.q-calendar-tarde {
    background:#FEF3A0; color:#854D0E; box-shadow:inset 0 0 0 1px #CA8A04;
}
.q-calendar-bar, .q-calendar-weekend .q-calendar-bar { background:#0F9375; }
.qiwo-dark .q-calendar-cell.q-calendar-marca, .qiwo-dark .q-calendar-cell.q-calendar-registro {
    background:#0B2947; color:#0F9375; box-shadow:inset 0 0 0 1px #0F9375;
}
.qiwo-dark .q-calendar-cell.q-calendar-tarde {
    background:#FEF3A0; color:#854D0E; box-shadow:inset 0 0 0 1px #CA8A04;
}
@media (max-width:1023px) {
    .q-list-views.q-list-compacta[data-screen="credenciales-personal"] .q-table tr:has(.q-compact-toggle[aria-expanded=false]) > td:first-child > .q-personal-cred-compact,
    .q-list-views.q-list-compacta[data-screen="credenciales-personal"] .q-personal-cred-compact {
        display:flex; flex-wrap:wrap; gap:6px 12px; padding:0 12px 12px;
    }
    .q-personal-cred-compact .q-credential-status { max-width:100%; overflow-wrap:anywhere; }
    .q-page-head-actions .q-personal-exportar-menu { right:0; left:auto; max-width:calc(100vw - 32px); }
    [data-screen="personal-asistencia-mes"]:not(.q-list-tabla) .q-calendar-grid,
    [data-screen="personal-asistencia-mes"]:not(.q-list-tabla) .q-calendar-grid tbody { display:block; width:100%; min-width:0; }
    [data-screen="personal-asistencia-mes"]:not(.q-list-tabla) .q-calendar-grid caption { display:block; width:100%; box-sizing:border-box; }
    [data-screen="personal-asistencia-mes"]:not(.q-list-tabla) .q-calendar-grid thead { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); }
    [data-screen="personal-asistencia-mes"]:not(.q-list-tabla) .q-calendar-grid tbody tr {
        display:grid; grid-template-columns:repeat(auto-fit,minmax(46px,1fr)); gap:8px 4px; padding:12px; margin:0 0 12px;
        border:1px solid var(--q-border); border-radius:10px; background:var(--q-surface);
    }
    [data-screen="personal-asistencia-mes"]:not(.q-list-tabla) .q-calendar-grid tbody :is(th,td) { display:block; min-width:0; width:auto; max-width:none; padding:0; border:0; }
    [data-screen="personal-asistencia-mes"]:not(.q-list-tabla) .q-calendar-grid .q-calendar-person { grid-column:1/-1; position:static; box-shadow:none; }
    [data-screen="personal-asistencia-mes"]:not(.q-list-tabla) td[data-label]::before { content:attr(data-label); display:block; margin-bottom:4px; font-size:10px; color:var(--q-muted); }
    [data-screen="personal-asistencia-mes"]:not(.q-list-tabla) .q-calendar-grid td:is([data-label="Asistencias"],[data-label="Tardanzas"],[data-label="Faltas"]) { grid-column:span 2; padding-top:8px; margin-top:4px; border-top:1px solid var(--q-border); }
    [data-screen="personal-asistencia-mes"]:not(.q-list-tabla) .q-calendar-grid td[data-label="Asistencias"] { grid-column:1 / span 2; }
    [data-screen="personal-asistencia-mes"]:not(.q-list-tabla) .q-calendar-cell:is(button) { width:44px; height:44px; }
    [data-screen="personal-asistencia-mes"].q-list-compacta tr:has(.q-compact-toggle[aria-expanded=false]) > td,
    [data-screen="personal-asistencia-mes"].q-list-compacta .q-calendar-person > :not(.q-compact-toggle) { display:none; }
}
/* FIN */

/* INICIO CODEX 2026-10-29: horario asi queda el dia */
/* Franjas flex de AdminPoliticaAcceso: 32px, radio 8px y etiquetas 11px.
   Sin min-width por tramo: incluso un minuto conserva su proporción real. */
.q-settings-form > .q-horario-dia { grid-column:1/-1; min-width:0; }
.q-horario-dia .qiwo-section-title { margin:2px 0 10px; }
.q-horario-dia-barra { display:flex; height:32px; border-radius:8px; overflow:hidden; margin-bottom:6px; }
.q-horario-dia-franja { display:flex; align-items:center; justify-content:center; min-width:0; box-shadow:inset 0 0 0 1px currentColor; }
.q-horario-dia-franja > span { font-size:11px; font-weight:500; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; padding:0 4px; }
.q-horario-dia .is-puntual { background:#E0F2F1; color:#0B6B55; box-shadow:inset 0 0 0 1px #0F9375; }
.q-horario-dia .is-tarde { background:#FEF3A0; color:#854D0E; }
.q-horario-dia .is-registro { background:#D1D5DB; color:#0B2947; box-shadow:none; }
.q-horario-dia-horas { position:relative; display:flex; justify-content:space-between; padding-top:7px; font-size:11px; color:var(--q-ink); margin-bottom:10px; }
.q-horario-dia-marca { position:absolute; top:0; height:6px; width:1px; background:#0F9375; transform:translateX(-1px); }
.q-horario-dia-marca-fin { height:9px; background:#854D0E; }
.q-horario-dia-marca > span { display:none; }
.q-horario-dia-leyenda { display:flex; flex-wrap:wrap; gap:6px 16px; list-style:none; padding:0; margin:0 0 10px; font-size:12px; color:var(--q-ink); }
.q-horario-dia-leyenda li { display:flex; align-items:baseline; gap:6px; min-width:0; overflow-wrap:anywhere; }
.q-horario-dia-muestra { display:inline-block; flex:0 0 10px; width:10px; height:10px; border-radius:3px; }
.q-horario-dia .q-form-help { margin:8px 0; overflow-wrap:anywhere; }
.q-horario-vigencia-fecha { white-space:nowrap; }
body.qiwo-dark .q-horario-dia { --q-ink:#ECEDE7; --q-muted:#D1D5DB; background:#0B2947; color:var(--q-ink); padding:14px; border-radius:8px; }
body.qiwo-dark .q-horario-dia .is-puntual { background:#0B2947; color:#E0F2F1; }
body.qiwo-dark .q-horario-dia .is-tarde { background:#FEF3A0; color:#854D0E; }
body.qiwo-dark .q-horario-dia .is-registro { background:#D1D5DB; color:#0B2947; }
@media (min-width:601px) {
    .q-horario-dia-horas:has(.q-horario-dia-marca) { min-height:52px; }
    .q-horario-dia-marca > span { display:block; position:absolute; top:18px; white-space:nowrap; color:var(--q-ink); transform:translateX(calc(-1 * var(--q-horario-marca-ancla))); }
    .q-horario-dia-marca-fin > span { top:34px; }
}
@media (max-width:600px) {
    .q-horario-dia-franja > span { display:none; }
    .q-horario-dia-leyenda { display:grid; gap:6px; }
}
/* FIN CODEX 2026-10-29: horario asi queda el dia */

/* INICIO CODEX 2026-10-29: foto revisada y avatar */
.q-foto-personal { display:inline-flex; align-items:center; justify-content:center; flex:0 0 40px; width:40px; height:40px; border-radius:50%; overflow:hidden; background:#E0F2F1; color:#0B2947; font-size:14px; font-weight:700; vertical-align:middle; }
.q-foto-personal img { display:block; width:100%; height:100%; object-fit:cover; }
.q-compact-toggle .q-foto-personal { width:32px; height:32px; flex-basis:32px; font-size:12px; }
.admin-dialog-identity .q-foto-personal, .cp-identity .q-foto-personal { width:48px; height:48px; flex-basis:48px; }
.q-calendar-person > .q-foto-personal { margin:0 8px 4px 0; }
.q-foto-revisada { display:flex; gap:8px; align-items:center; color:var(--q-text, #0B2947); background:var(--q-surface, #ECEDE7); padding:10px; border-radius:8px; }
.q-foto-revision { display:grid; gap:10px; max-width:480px; padding:12px 0; }
.q-foto-revision .pers-actions { flex-wrap:wrap; }
.q-foto-contador-error { display:inline-flex; color:inherit; }
.qiwo-dark .q-foto-personal { background:#0B2947; color:#E0F2F1; }
body.qiwo-dark .admin-content .qiwo-dialog-overlay .pers-marca p.q-foto-revisada { color:#E0F2F1 !important; background:#0B2947; }
@media(max-width:600px) { .q-foto-revision .pers-actions { display:grid; grid-template-columns:1fr; } .q-foto-revision button { width:100%; justify-content:center; } .q-foto-revisada { align-items:flex-start; } }
/* FIN CODEX 2026-10-29: foto revisada y avatar */

/* Carga del diálogo Marcas del día (Claude ELA 29/10/2026): spinner en vez de texto suelto */
.pers-cargando{display:flex;align-items:center;justify-content:center;gap:10px;padding:22px 0;font-size:14px;color:#0B2947}
body.qiwo-dark .pers-cargando{color:#ECEDE7}
.pers-cargando .qiwo-spinner{margin:0}

/* Lista del personal en laptops (Claude ELA 29/10/2026): con el menu abierto la tabla tiene ~950 px para
   7 columnas; con table-layout fixed y overflow-wrap:anywhere partia "Profe/sor" y la credencial pisaba
   Alertas. Ahora cada columna tiene su minimo y, si no entra, la tabla se desliza dentro de su tarjeta. */
@media (min-width:768px) {
    .q-table-wrap:has(> .q-table-personal) { overflow-x:auto; }
    .q-table-personal { table-layout:auto; }
    .q-table-personal td { overflow-wrap:normal; word-break:normal; }
    .q-table-personal th:first-child, .q-table-personal th:nth-child(2), .q-table-personal th:nth-child(3) { width:auto; }
    /* 07/11/2026: 5 columnas. La persona se lleva el ancho (antes 149 px y el nombre en 4 lineas). */
    .q-table-personal td.q-person-cell { width:40%; min-width:300px; max-width:none; }
    .q-table-personal .q-person-name { white-space:normal; overflow-wrap:normal; }
    .q-table-personal .q-person-sub { display:flex; flex-wrap:wrap; align-items:center; column-gap:4px; }
    .q-table-personal .q-person-sep { color:var(--q-muted, #6B7280); margin:0; }
    .q-table-personal .q-person-body .q-alert-tag { margin-top:4px; margin-right:4px; }
    .q-table-personal td[data-label=Cargo] .q-tag { white-space:normal; }
    .q-table-personal td[data-label=Alertas] { white-space:nowrap; }
    .q-table-personal td[data-label=Sedes] { min-width:110px; }
    .q-table-personal td[data-label=Credencial] { max-width:160px; }
    .q-table-personal .q-credential { display:inline-flex; align-items:center; gap:6px; max-width:100%; overflow:hidden; }
    .q-table-personal .q-credential > span { overflow:hidden; text-overflow:ellipsis; }
    .q-table-personal td[data-label=Alertas] .q-cell-stack { flex-wrap:nowrap; }
}
.q-foto-personal { position:relative; }
.q-foto-personal img { position:absolute; inset:0; }
.q-foto-personal img.q-foto-pendiente { visibility:hidden; }
.q-notice-revisar { display:flex; flex-wrap:wrap; align-items:center; gap:6px 12px; }
.q-notice-revisar > svg { width:16px; height:16px; flex-shrink:0; }
.q-personal-exportar-menu .q-button { white-space:nowrap; }
.q-mode-resumen { display:flex; align-items:center; justify-content:space-between; gap:16px; flex-wrap:wrap; }
.q-mode-resumen h2 { margin:0 0 4px; }
.q-mode-resumen .q-form-help { margin:0; max-width:760px; }
.q-field-label { font-size:14px; font-weight:600; margin:0 0 8px; }
/* Interruptor "Mostrar fotos del personal" (Mi Institución, 29/10/2026) */
.q-config-fotos { margin-top:20px; }
.q-config-fotos-fila { display:flex; align-items:center; justify-content:space-between; gap:16px; flex-wrap:wrap; }
.q-config-fotos-fila h2 { margin:0 0 4px; }
.q-config-fotos-fila .q-form-help { margin:0; max-width:680px; }
.q-switch { display:inline-flex; align-items:center; gap:10px; border:1px solid #D1D5DB; border-radius:999px; padding:6px 14px 6px 6px; background:#ECEDE7; color:#0B2947; font:inherit; font-size:13px; font-weight:600; cursor:pointer; }
.q-switch-pista { position:relative; width:38px; height:22px; border-radius:999px; background:#D1D5DB; transition:background .15s; }
.q-switch-perilla { position:absolute; top:3px; left:3px; width:16px; height:16px; border-radius:50%; background:#fff; transition:transform .15s; }
.q-switch.is-on .q-switch-pista { background:#0F9375; }
.q-switch.is-on .q-switch-perilla { transform:translateX(16px); }
.q-switch:disabled { opacity:.6; cursor:wait; }

/* INICIO CODEX 2026-10-30: Lista del personal — marca y edición del perfil.
   Alcance exclusivo .q-personal-marca; no modifica tokens ni componentes compartidos. */
.q-personal-marca .q-table thead th { background:#ECEDE7 !important; color:#0B2947 !important; border-bottom:1px solid #D1D5DB; }
.q-personal-marca .q-chip { background:#fff; color:#0B2947; border:1px solid #D1D5DB; }
.q-personal-marca .q-chip.is-active { background:#0B2947 !important; color:#fff !important; border-color:#0B2947 !important; }
.q-personal-marca .q-chip.is-active span { background:transparent; color:inherit; }
.q-personal-marca .q-foto-personal { background:#0B2947; color:#fff; }
.q-personal-marca .q-tag { background:#ECEDE7; color:#0B2947; border:1px solid #D1D5DB; }
.q-personal-marca .q-alert-tag { background:#ECEDE7; color:#0B2947; border:1px solid #D1D5DB; border-radius:6px; }
.q-personal-marca .q-credential { background:transparent; color:#0B2947; }
.q-personal-marca .qiwo-row-actions-trigger { background:#fff; color:#0B2947; border-color:#D1D5DB; }
.q-personal-marca .pers-choice-selected { background:#fff !important; border:2px solid #0F9375 !important; box-shadow:none; }
.q-personal-marca .q-personal-editar-dialogo { max-width:640px; width:100%; }
.q-personal-marca .q-perfil-editar { padding-bottom:20px; margin-bottom:20px; border-bottom:1px solid #D1D5DB; color:#0B2947; }
.q-personal-marca .q-perfil-identidad { display:flex; align-items:center; gap:16px; margin-bottom:16px; }
.q-personal-marca .q-perfil-identidad h4 { font-size:16px; margin:0 0 6px; }
.q-personal-marca .q-perfil-identidad p { font-size:13px; margin:0; }
.q-personal-marca .q-perfil-avatar { width:72px; height:72px; border-radius:50%; background:#0B2947; color:#fff; display:grid; place-items:center; flex-shrink:0; overflow:hidden; position:relative; font-size:22px; font-weight:700; }
.q-personal-marca .q-perfil-avatar img { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
.q-personal-marca .q-perfil-acciones { display:flex; flex-wrap:wrap; gap:8px; }
.q-personal-marca .q-perfil-elegir { background:#0F9375 !important; border-color:#0F9375 !important; color:#fff !important; }
.q-personal-marca .q-perfil-subir { position:relative; overflow:hidden; cursor:pointer; }
.q-personal-marca .q-perfil-subir input { position:absolute; inset:0; width:100%; opacity:0; cursor:pointer; }
.q-personal-marca .q-perfil-subir:focus-within { outline:2px solid #0F9375; outline-offset:3px; }
.q-personal-marca .q-perfil-pendiente { font-size:13px; font-weight:600; margin:12px 0; }
.q-personal-marca .q-perfil-ayuda { display:flex; align-items:flex-start; gap:8px; font-size:12px; line-height:1.5; padding:12px; border-radius:8px; background:#E0F2F1; color:#0B2947; margin:16px 0 0; }
.q-personal-marca .q-perfil-ayuda svg { flex-shrink:0; width:16px; height:16px; }
.q-personal-marca .q-perfil-galeria-cab { display:flex; justify-content:space-between; align-items:center; gap:8px; margin:20px 0 12px; font-size:13px; }
.q-personal-marca .q-perfil-galeria { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:10px; margin-bottom:12px; max-height:340px; overflow-y:auto; padding:3px; }
.q-personal-marca .q-perfil-miniatura { border:2px solid #D1D5DB; border-radius:10px; padding:4px; background:#fff; color:#0B2947; overflow:hidden; cursor:pointer; display:flex; flex-direction:column; gap:6px; font:inherit; font-size:11px; text-align:left; }
.q-personal-marca .q-perfil-miniatura img { display:block; width:100%; aspect-ratio:3/4; object-fit:cover; border-radius:6px; background:#ECEDE7; }
.q-personal-marca .q-perfil-miniatura.is-selected { border-color:#0F9375; box-shadow:0 0 0 1px #0F9375; }
.q-personal-marca .q-perfil-miniatura:disabled { opacity:.55; cursor:default; }
.q-personal-marca .q-perfil-check { display:flex; align-items:center; gap:4px; font-weight:700; }
.q-personal-marca .q-perfil-check svg { width:14px; height:14px; }
/* Modo oscuro de Personal (07/11/2026): paleta en capas. Antes todo era #0B2947 con bordes #D1D5DB
   ("parece un cmd antiguo", Jordy). Fondo < tarjeta < control, bordes suaves, verde para lo activo. */
body.qiwo-dark .q-personal-marca {
    /* 08/11/2026: ya no son hex propios (salían de la marca); ahora apuntan a las capas globales. */
    --pd-fondo:var(--q-capa-fondo); --pd-tarjeta:var(--q-capa-tarjeta); --pd-control:var(--q-capa-control); --pd-hover:var(--q-capa-hover);
    --pd-borde:var(--q-capa-borde); --pd-texto:var(--q-capa-texto); --pd-suave:var(--q-capa-suave); --pd-cabecera:var(--q-capa-cabecera);
}
body.qiwo-dark .q-personal-marca .q-table thead th { background:var(--pd-cabecera) !important; color:var(--pd-texto) !important; border-color:var(--pd-borde); }
body.qiwo-dark .q-personal-marca .q-chip { background:var(--pd-control) !important; color:var(--pd-texto) !important; border-color:var(--pd-borde) !important; }
body.qiwo-dark .q-personal-marca .q-chip:not(.is-active):hover { background:var(--pd-hover) !important; }
body.qiwo-dark .q-personal-marca .q-filterbar .q-filterbar-summary .q-chip.is-active { background:#0F9375 !important; color:#FFFFFF !important; border-color:#0F9375 !important; }
body.qiwo-dark .q-personal-marca .q-foto-personal { background:var(--pd-control); color:var(--pd-texto); outline:none; }
body.qiwo-dark .q-personal-marca :is(.q-perfil-editar,.q-credential) { color:var(--pd-texto); }
body.qiwo-dark .q-personal-marca .q-person-sub { color:var(--pd-suave); }
body.qiwo-dark .q-personal-marca .pers-choice-selected { background:var(--pd-control) !important; color:var(--pd-texto) !important; }
body.qiwo-dark .q-personal-marca .q-perfil-miniatura { background:var(--pd-control); color:var(--pd-texto); border-color:var(--pd-borde); }
body.qiwo-dark .q-personal-marca .q-table .q-actions-cell .qiwo-row-actions-trigger { background:var(--pd-control); color:var(--pd-texto); border-color:var(--pd-borde); }
@media(max-width:600px) {
    .q-personal-marca .q-perfil-galeria { grid-template-columns:repeat(3,minmax(0,1fr)); max-height:300px; gap:8px; }
    .q-personal-marca .q-perfil-galeria-cab { align-items:flex-start; }
    .q-personal-marca .q-personal-editar-dialogo .qiwo-modal-footer { flex-wrap:wrap; gap:12px; }
    .q-personal-marca .q-personal-editar-dialogo .qiwo-modal-body > div[style*="grid-template-columns:1fr 1fr"] { grid-template-columns:1fr !important; }
}
.q-personal-marca .q-perfil-miniatura img.q-perfil-recorte-pendiente { opacity:0; }

.q-personal-marca .q-page-head-icon { background:#0B2947; color:#fff; }
.q-personal-marca .q-notice { background:#ECEDE7; color:#0B2947; }
.q-personal-marca .q-chip:not(.is-active):hover { background:#ECEDE7; }
.q-personal-marca .q-actions-cell .qiwo-row-actions-trigger:hover { background:#ECEDE7; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-personal-editar-dialogo,
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-personal-editar-dialogo :is(.qiwo-modal-header,.qiwo-modal-body,.qiwo-modal-footer) { background:#0B2947 !important; color:#ECEDE7 !important; border-color:#D1D5DB !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-personal-editar-dialogo :is(h3,h4,label,.q-perfil-identidad p,.q-perfil-galeria-cab,.q-perfil-pendiente,.pers-help) { color:#ECEDE7 !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-personal-editar-dialogo :is(.q-button,.qiwo-btn-secondary) { background:#0B2947 !important; color:#ECEDE7 !important; border-color:#D1D5DB !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-personal-editar-dialogo .q-perfil-elegir { background:#0F9375 !important; color:#fff !important; border-color:#0F9375 !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-personal-editar-dialogo .pers-choice-selected { border:2px solid #0F9375 !important; }
body.qiwo-dark .q-personal-marca .q-notice { background:var(--pd-tarjeta) !important; color:var(--pd-texto) !important; }
body.qiwo-dark .q-personal-marca .q-page-head-icon { background:var(--pd-control); color:var(--q-capa-acento); }
body.qiwo-dark .q-personal-marca .q-actions-cell .qiwo-row-actions-trigger:hover { background:var(--pd-hover) !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-personal-editar-dialogo .qiwo-label span { color:inherit !important; }

/* Superficies locales: evita heredar los matices de otros módulos del admin. */
/* Sin fondo propio (08/11/2026): pintaba un rectángulo encima del fondo del admin y dejaba un corte visible arriba y a la derecha. */
body.qiwo-dark .q-personal-marca { background:transparent; color:var(--pd-texto); }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca :is(.q-table-card,.q-table td,.q-filterbar,.qiwo-row-actions-menu-list) { background:var(--pd-tarjeta) !important; color:var(--pd-texto) !important; border-color:var(--pd-borde) !important; }
/* El buscador y el select eran "medio pintados": el contenedor de un color y el input de otro. Ahora es uno solo. */
body.qiwo-dark .admin-shell .admin-content .q-personal-marca :is(.q-search,.q-search input,.q-select) { background:var(--pd-control) !important; color:var(--pd-texto) !important; border-color:var(--pd-borde) !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-search input::placeholder { color:var(--pd-suave); }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-table tbody tr:hover td { background:var(--pd-control) !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-button:not(.q-button-primary):not(.q-perfil-elegir),
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-table .q-actions-cell .qiwo-row-actions-trigger { background:var(--pd-control) !important; color:var(--pd-texto) !important; border-color:var(--pd-borde) !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-button:not(.q-button-primary):not(.q-perfil-elegir):hover { background:var(--pd-hover) !important; }
body.qiwo-dark .q-personal-marca .q-filterbar { border:1px solid var(--pd-borde); }
body.qiwo-dark .q-personal-marca .q-perfil-avatar { border:1px solid var(--pd-borde); box-sizing:border-box; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-personal-editar-dialogo .q-perfil-miniatura.is-selected { border:2px solid #0F9375 !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-personal-editar-dialogo .qiwo-btn-primary { background:#ECEDE7 !important; color:#0B2947 !important; border:1px solid #ECEDE7 !important; }
/* FIN CODEX 2026-10-30: Lista del personal — marca y edición del perfil. */

/* INICIO CODEX 2026-10-30: personal-arreglos-visuales. */
/* Clase 1 y 2: la superficie editable siempre se distingue del diálogo. */
body :is(.qiwo-modal-card, .qiwo-dialog, [role="dialog"], [role="alertdialog"]) :is(input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]):not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="file"]):not([type="range"]), textarea, select):not(:disabled):not([readonly]) {
    background:#fff !important; color:#0B2947 !important; border:1px solid #D1D5DB !important; color-scheme:light;
}
body.qiwo-dark .q-personal-editar-dialogo :is(input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]):not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="file"]):not([type="range"]), textarea, select):not(:disabled):not([readonly]) {
    background:#ECEDE7 !important; color:#0B2947 !important;
}
body :is(.qiwo-modal-card, .qiwo-dialog, [role="dialog"], [role="alertdialog"]) :is(input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]):not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="file"]):not([type="range"]), textarea, select):not(:disabled):not([readonly]):focus {
    border-color:#0F9375 !important; outline:2px solid #0F9375 !important; outline-offset:2px; box-shadow:none !important;
}
body :is(.qiwo-modal-card, .qiwo-dialog, [role="dialog"], [role="alertdialog"]) :is(input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]):not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="file"]):not([type="range"]), textarea, select):not(:disabled):not([readonly])::placeholder { color:#0B2947 !important; opacity:.65; }
body :is(.qiwo-modal-card, .qiwo-dialog, [role="dialog"], [role="alertdialog"]) :is(input[type="checkbox"], input[type="radio"]) { accent-color:#0F9375; }
.q-personal-exportar-menu {
    left:0; right:auto; width:max-content; min-width:180px; max-width:min(360px, calc(100vw - 24px)); box-sizing:border-box;
}
.q-personal-exportar-menu[popover] {
    position:fixed; inset:auto; margin:0; overflow:auto;
}
.q-personal-exportar-menu[popover]:not(:popover-open) { display:none; }
.q-personal-exportar-menu .q-button { white-space:normal; text-align:left; overflow-wrap:anywhere; min-width:0; }
body .q-personal-marca .q-perfil-error { margin:16px 0 20px !important; }
/* La regla histórica del motivo usa un ID y !important. */
body .q-personal-sedes-dialog #personal-sedes-motivo:not(:disabled):not([readonly]) { background:#fff !important; }

/* FIN CODEX 2026-10-30: personal-arreglos-visuales. */

/* INICIO CODEX 2026-10-30: personal-menu-opciones. */
.q-personal-opciones-grupo { display:grid; min-width:0; }
.q-personal-opciones-separador { height:1px; background:#D1D5DB; margin:6px 4px; }
/* Conserva los verdes y rojos existentes frente al estilo general del admin oscuro. */
body.qiwo-dark .admin-shell .q-personal-opciones-grupo .qiwo-row-actions-menu-item svg { color:#5EEAD4; }
body.qiwo-dark .admin-shell .q-personal-opciones-grupo .qiwo-row-actions-menu-item--danger,
body.qiwo-dark .admin-shell .q-personal-opciones-grupo .qiwo-row-actions-menu-item--danger svg { color:#FCB3B3; }
@media (max-width:1023px), (any-pointer:coarse) {
    .q-personal-opciones-grupo .qiwo-row-actions-menu-item { min-height:44px; box-sizing:border-box; }
}
/* FIN CODEX 2026-10-30: personal-menu-opciones. */

/* INICIO CLAUDE ELA 2026-10-30: lista del personal y calendario. */
/* Lápiz de "registrado a mano" dentro del día del calendario (admin y Auxiliar). */
.qiwo-calendario-asistencia__celda { position: relative; }
.qiwo-calendario-asistencia__lapiz { position: absolute; top: 4px; right: 5px; opacity: .75; }
/* "Revisar" de datos incompletos: ámbar de aviso (el mismo de tardanza, ADR 0085). */
.q-text-action.q-text-action--aviso { color: #854D0E; }
.q-text-action.q-text-action--aviso svg { color: #CA8A04; }
body.qiwo-dark .q-text-action.q-text-action--aviso,
body.qiwo-dark .q-text-action.q-text-action--aviso svg { color: #FDE68A; }
/* Hora de entrada debajo del número del día. */
.qiwo-calendario-asistencia__celda:has(.qiwo-calendario-asistencia__hora) { flex-direction: column; gap: 1px; line-height: 1.1; }
.qiwo-calendario-asistencia__hora { font-size: 10px; font-weight: 600; opacity: .8; font-variant-numeric: tabular-nums; }
/* Orbe con el total de sedes donde marca, cuando son 2 o más. */
.q-sede-linea { display: inline-flex; align-items: center; gap: 6px; }
.q-sede-orbe {
    display: inline-flex; align-items: center; justify-content: center;
    min-width: 20px; height: 20px; padding: 0 5px; box-sizing: border-box;
    border-radius: 999px; background: #0F9375; color: #FFFFFF;
    font-size: 11px; font-weight: 700; line-height: 1;
}
/* "No usa" portal: se lee como ausencia, no como un portal más. */
.q-portal-no-usa {
    display: inline-flex; align-items: center; gap: 4px;
    padding: 2px 8px; border-radius: 999px;
    border: 1px dashed #F2A7A7; background: #FDF1F1; color: #B42318; font-size: 12px; white-space: nowrap;
}
body.qiwo-dark .q-portal-no-usa { border-color: rgba(252,165,165,.45); background: rgba(220,38,38,.12); color: #FCA5A5; }
/* Lista numerada de sedes cuando marca en 2 o más: 1 = principal (verde), las demás adicionales. */
.q-sedes-lista { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; }
.q-sedes-lista li { display: flex; align-items: center; gap: 6px; }
.q-sede-orbe.q-sede-orbe--adicional { background: #FFFFFF; color: #0F9375; box-shadow: inset 0 0 0 1.5px #0F9375; }
body.qiwo-dark .q-sede-orbe.q-sede-orbe--adicional { background: transparent; color: #FFFFFF; box-shadow: inset 0 0 0 1.5px #0F9375; }
/* Recuadro de la foto de perfil: foto original + recuadro arrastrable + vista previa redonda. */
.q-perfil-recuadro { display: flex; flex-wrap: wrap; gap: 16px; align-items: flex-start; margin: 8px 0 12px; }
.q-recuadro-marco { position: relative; flex: 1 1 320px; max-width: 520px; line-height: 0; border-radius: 10px; overflow: hidden; background: #0B2947; touch-action: none; user-select: none; }
.q-recuadro-foto { width: 100%; height: auto; display: block; cursor: crosshair; }
.q-recuadro-caja { position: absolute; box-sizing: border-box; border: 2px solid #FFFFFF; border-radius: 6px; box-shadow: 0 0 0 9999px rgba(11,41,71,.55), inset 0 0 0 1px #0F9375; cursor: move; touch-action: none; }
.q-recuadro-caja:focus-visible { outline: 3px solid #0F9375; outline-offset: 2px; }
.q-recuadro-lateral { display: grid; gap: 10px; justify-items: center; }
.q-recuadro-vista { width: 120px; height: 120px; border-radius: 50%; border: 3px solid #0F9375; background: #ECEDE7; }
.q-recuadro-tamano { display: grid; gap: 4px; font-size: 12px; color: #0B2947; width: 140px; }
.q-recuadro-tamano input { accent-color: #0F9375; width: 100%; }
body.qiwo-dark .q-recuadro-tamano { color: #E2E8F0; }
.q-perfil-miniatura img { aspect-ratio: 4 / 3; object-fit: cover; width: 100%; }
/* FIN CLAUDE ELA 2026-10-30. */

/* INICIO CLAUDE ELA 2026-10-30 b: credenciales por tipo, estado de la persona y explicación en el menú. */
.q-credenciales-lista { display: flex; flex-wrap: wrap; gap: 4px 10px; }
.q-credential.q-credential--ninguna { opacity: .7; }
.q-estado-persona { display: inline-flex; align-items: center; gap: 5px; font-weight: 600; }
.q-estado-persona::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: currentColor; flex: none; }
.q-estado-persona.is-activa { color: #0F9375; }
.q-estado-persona.is-baja { color: #B42318; }
.q-estado-persona.is-programada { color: #0B2947; }
.q-estado-persona.is-programada::before { background: transparent; box-shadow: inset 0 0 0 1.5px currentColor; }
body.qiwo-dark .q-estado-persona.is-activa { color: #5EC9A8; }
body.qiwo-dark .q-estado-persona.is-baja { color: #FCA5A5; }
body.qiwo-dark .q-estado-persona.is-programada { color: #E2E8F0; }
.q-menu-texto { display: grid; gap: 1px; text-align: left; }
.q-menu-texto small { font-size: 11px; font-weight: 400; opacity: .8; }
/* FIN CLAUDE ELA 2026-10-30 b. */

/* INICIO CODEX 2026-10-30: pendientes-visuales-chat151. */
/* Celeste reservado a ayudas; superficies crema, limitadas a admin. */
:where(.admin-shell) .login-logo-bg { background: #ECEDE7; color:#0B2947 !important; }
:where(.admin-shell) .login-register-icon { background: #ECEDE7; color: #0F9375; }
.admin-sucursal-badge { background: #ECEDE7; color: #0F9375; }
:where(.admin-shell) .badge-entrada { background: #ECEDE7; color: #0F9375; }
:where(.admin-shell) .qiwo-chip-active { background: #ECEDE7; color: #0F9375; }
:where(.admin-shell) .qiwo-avatar { background: #ECEDE7; color: #0F9375; }
:where(.admin-shell) .qiwo-action-btn:hover { background: #ECEDE7; color: #0F9375; }
:where(.admin-shell) .qiwo-selected-chip { background: #ECEDE7; color:#0B2947 !important; }
:where(.admin-shell) .alumno-selected-chip { background: #ECEDE7; color: #0B2947; }
:where(.admin-shell) .qiwo-row-actions-menu-item:hover,
:where(.admin-shell) .qiwo-row-actions-menu-item:focus-visible { background: #ECEDE7; color: #0B2947; }
:where(.admin-shell) .qiwo-row-actions-trigger:hover,
:where(.admin-shell) .qiwo-row-actions-trigger[aria-expanded="true"] { background: #ECEDE7; color: #0F9375; }
:where(.admin-shell) .hc-cambio[data-estado="OK"] { background: #ECEDE7; color:#0B2947 !important; }
:where(.admin-shell) .hc-tag--area { background: #ECEDE7; color: #0B6B55; }
:where(.admin-shell) .tut-cotutor { background:#ECEDE7; color:#0B2947; }
:where(.admin-shell) .pers-resumen-card { background:#ECEDE7; color:#0B2947; }
:where(.admin-shell) .prof-contadores { background:#ECEDE7; color:#0B2947; }
.admin-sidebar-hybrid .admin-nav-item:hover,
.admin-sidebar-hybrid .admin-nav-item.active { background: rgba(236,237,231,.09); color: #ECEDE7; }
.admin-sidebar-hybrid .admin-nav-item.active svg { color: #ECEDE7; }
.admin-sidebar-hybrid .admin-nav-group-toggle[aria-expanded="true"] { background: rgba(236,237,231,.06); }
.admin-sidebar-hybrid .nav-badge-role { background: #ECEDE7; color: #0B2947; }
.admin-sidebar-hybrid .admin-rol-badge { color: #ECEDE7; }
.admin-sidebar-hybrid button:focus-visible,
.admin-sidebar-hybrid a:focus-visible { outline: 2px solid #ECEDE7; }
body .admin-hybrid-page .qiwo-table thead th { background: #ECEDE7; color: #0B2947; }
body .admin-hybrid-page .qiwo-table tr.admin-row-selected td { background: #ECEDE7; color:#0B2947 !important; }
body .admin-hybrid-page .qiwo-chip-active,
body .admin-hybrid-page .estado-activa { background: #ECEDE7; color: #0B2947; }
body .admin-hybrid-page .admin-alert-success { background: #ECEDE7; color: #0B2947; }
body .admin-hybrid-page .cred-chip-active { background: #ECEDE7; color: #0B2947; }
body .admin-hybrid-page .qiwo-nivel-chip { background: #ECEDE7; color: #0B2947; }
body.qiwo-dark .admin-hybrid-page .admin-page-title { color: #ECEDE7; }
body.qiwo-dark .admin-hybrid-page .qiwo-chip-active { background: #ECEDE7; color:#0B2947 !important; }
body .admin-content .admin-hub-card-icon { color: #ECEDE7; }
body .admin-content .admin-hub-card:nth-child(even) .admin-hub-card-icon { background: #ECEDE7; color: #0B2947; }
.admin-shell { --admin-selected: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-main,
body.qiwo-dark .admin-shell .admin-topbar { color: #ECEDE7; }
body.qiwo-dark .admin-shell { --admin-ink: #ECEDE7; }
body .admin-content .qiwo-table thead th { background: #ECEDE7; color: #0B2947; }
.admin-sidebar-hybrid .admin-collapse-btn,
.admin-flyout-close { color: #ECEDE7; }
.admin-sidebar-hybrid .nav-badge-role { background: #ECEDE7; color: #0B2947; }
.admin-sidebar-hybrid .admin-nav-group-link:hover,
.admin-sidebar-hybrid .admin-nav-group-link.active,
.admin-sidebar-hybrid .admin-nav-group-link.is-grupo-actual { background: rgba(236,237,231,.12); }
.admin-sidebar-hybrid .admin-nav-group-link.is-grupo-actual { font-weight: 600; color: #FFFFFF; }
.admin-sidebar-hybrid .admin-logout-btn:hover { background: rgba(236,237,231,.15); color: #ECEDE7; }
@media (min-width: 768px) {
.admin-sidebar-hybrid.is-collapsed .admin-nav-group-heading > .admin-nav-group-link > .nav-badge-role.nav-badge-prueba { background: #ECEDE7; color:#0B2947 !important; }
}
@media (min-width: 768px) {
.admin-sidebar-hybrid.is-collapsed .admin-flyout-heading { color: #ECEDE7; }
}
.admin-shell .cta-sticky .qiwo-btn-primary:disabled { background: #ECEDE7; color:#0B2947 !important; }
.admin-shell .badge-ambar { background: #ECEDE7; color: #DC2626; }
.admin-shell .qiwo-nivel-chip { background: #ECEDE7; color: #0B2947; }
.admin-shell .badge-matricula-activa { background: #ECEDE7; color: #0F9375; }
.admin-shell .badge-matricula-inactiva { background: #ECEDE7; color: #DC2626; }
.admin-shell .admin-alert-success { background: #ECEDE7; color: #0F9375; }
.admin-shell .qiwo-modal-close:hover { background: #ECEDE7; color:#0B2947 !important; }
.admin-shell .qiwo-avatar.warm { background: #ECEDE7; color: #0B2947; }
body.qiwo-dark .admin-shell .qiwo-opcion--activa .qiwo-opcion-titulo { color: #ECEDE7; }
.admin-shell .qiwo-badge-warn { background: #ECEDE7; color: #DC2626; }
.admin-shell .qiwo-tu-cuenta { background: #ECEDE7; color: #0B2947; }
.admin-shell .qiwo-rol-chip.rol-director { background: #ECEDE7; color: #0B2947; }
.admin-shell .qiwo-rol-chip.rol-administrativo { background: #ECEDE7; color: #0B2947; }
.admin-shell .qiwo-rol-chip.rol-superadmin { background: #ECEDE7; color: #DC2626; }
.admin-shell .qiwo-rol-chip.rol-tutor { background: #ECEDE7; color: #0F9375; }
.admin-shell .qiwo-rol-chip.rol-auxiliar { background: #ECEDE7; color: #DC2626; }
.admin-shell .qiwo-btn-nuevo:disabled { background: #ECEDE7; color: #0B2947; }
.admin-shell .qiwo-btn-nuevo:disabled:hover { background: #ECEDE7; color:#0B2947 !important; }
body.qiwo-dark .admin-shell .admin-hamburger { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-sucursal-badge { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-page-sub { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-stat-label { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-hub-card-desc { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-section-label { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-activity-empty { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-table thead th { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-table-footer { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-table-loading,
body.qiwo-dark .admin-shell .qiwo-table-empty { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-search-box input::placeholder { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-search-box svg { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-search-box::placeholder { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-chip { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-chip.active { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-form-group input::placeholder,
body.qiwo-dark .admin-shell .qiwo-form-group select::placeholder,
body.qiwo-dark .admin-shell .qiwo-form-group textarea::placeholder { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-form-group label { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-optional { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-label { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-text-muted { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-avatar { color: #ECEDE7 !important; }
body.qiwo-dark .admin-shell .admin-alert-error { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-alert-success { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-link-btn { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-link-btn:hover { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-link-btn.qiwo-link-btn-peligro { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-link-btn.qiwo-link-btn-peligro:hover { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-modal-close { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-section-label { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-activity-wrapper thead th { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-activity-empty { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-modal-error { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-action-btn { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-action-btn:disabled:hover { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-badge.badge-matricula-activa { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-badge.badge-matricula-inactiva { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-badge.badge-solicitud-pendiente { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-badge.badge-solicitud-aprobada { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-badge.badge-solicitud-rechazada { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-login-label { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-login-input::placeholder { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-login-soporte { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-login-link-green { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-login-link:hover { color: #ECEDE7; }
body.qiwo-dark .admin-shell .admin-login-pass-toggle:hover { color: #ECEDE7; }
body.qiwo-dark .admin-shell .cred-chip { color: #ECEDE7; }
body.qiwo-dark .admin-shell .cred-chip:hover { color: #ECEDE7; }
body.qiwo-dark .admin-shell .credencial-valor { color: #ECEDE7; }
body.qiwo-dark .admin-shell .metodo-btn { color: #ECEDE7; }
body.qiwo-dark .admin-shell .metodo-btn:hover { color: #ECEDE7; }
body.qiwo-dark .admin-shell .alumno-selected-chip button { color: #ECEDE7; }
.admin-shell .cred-vista-tab-badge { background: #ECEDE7; color: #DC2626; }
body.qiwo-dark .admin-shell .cred-vista-tab { color: #ECEDE7; }
body.qiwo-dark .admin-shell .cred-vista-tab:hover { color: #ECEDE7; }
body.qiwo-dark .admin-shell .cred-vista-tab-badge { color: #ECEDE7; }
body.qiwo-dark .admin-shell .cred-historial-titulo { color: #ECEDE7; }
body.qiwo-dark .admin-shell .autocomplete-codigo { color: #ECEDE7; }
body.qiwo-dark .admin-shell .autocomplete-empty { color: #ECEDE7; }
body.qiwo-dark .admin-shell .identificar-label { color: #ECEDE7; }
.admin-shell .qiwo-alert-success { background: #ECEDE7; color: #0F9375; }
body.qiwo-dark .admin-shell .qiwo-alert-error { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-alert-success { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-modal-desc { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-label-optional { color: #ECEDE7; }
.admin-shell .qiwo-switch-slider { background: #ECEDE7; color:#0B2947 !important; }
body.qiwo-dark .admin-shell .qiwo-dia-btn { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-dia-btn:hover { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item svg { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--success,
body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--success svg { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--danger,
body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--danger svg { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--danger:hover,
body.qiwo-dark .admin-shell .qiwo-row-actions-menu-item--danger:focus-visible { color: #ECEDE7; }
body.qiwo-dark .admin-shell .destinatario-fecha,
body.qiwo-dark .admin-shell .destinatarios-vacio { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-chip-fiab-motivo { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-chip-filtro { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-apo-count { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-apo-mas { color: #ECEDE7; }
.admin-shell .qiwo-badge-ok { background: #ECEDE7; color: #0F9375; }
body.qiwo-dark .admin-shell .qiwo-badge-ok { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-search-box input::placeholder,
body.qiwo-dark .admin-shell .qiwo-search-box::placeholder,
body.qiwo-dark .admin-shell .qiwo-form-group input::placeholder,
body.qiwo-dark .admin-shell .qiwo-form-group select::placeholder,
body.qiwo-dark .admin-shell .qiwo-form-group textarea::placeholder { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-chip.active { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-autocomplete-codigo { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-selected-chip { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-portal-banner { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-password-toggle { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-password-toggle:hover { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-page-btn:hover:not(:disabled) { color: #ECEDE7; }
body.qiwo-dark .admin-shell .sel-inst-sub,
body.qiwo-dark .admin-shell .sel-inst-ruc,
body.qiwo-dark .admin-shell .sel-inst-cerrar { color: #ECEDE7; }
body.qiwo-dark .admin-shell .sel-inst-arrow { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-rol-chip.rol-director { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-rol-chip.rol-administrativo { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-rol-chip.rol-superadmin { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-rol-chip.rol-tutor { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-rol-chip.rol-auxiliar { color: #ECEDE7; }
body.qiwo-dark .admin-shell .qiwo-video-puerta-pie { color: #ECEDE7; }
.admin-shell .hc-cambio[data-estado="OBSERVACION"] { background: #ECEDE7; color:#0B2947 !important; }
.admin-shell .hc-tag--sql { background: #ECEDE7; color: #0B2947; }
body.qiwo-dark .admin-shell .hc-chip { color: #ECEDE7; }
body.qiwo-dark .admin-shell .hc-tag--area { color: #ECEDE7; }
body.qiwo-dark .admin-shell .hc-tag--sql { color: #ECEDE7; }
body.qiwo-dark .admin-shell .hc-btn--obs { color: #ECEDE7; }
body.qiwo-dark .admin-shell .hc-obs-guardada { color: #ECEDE7; }
body.qiwo-dark .admin-shell .up-kpi-lbl,
body.qiwo-dark .admin-shell .up-kpi-foot { color: #ECEDE7; }
body.qiwo-dark .admin-shell .up-kpi--lead .up-kpi-lbl,
body.qiwo-dark .admin-shell .up-kpi--lead .up-kpi-foot { color: #ECEDE7; }
body.qiwo-dark .admin-shell .up-card-h span { color: #ECEDE7; }
body.qiwo-dark .admin-shell .up-embudo-fila,
body.qiwo-dark .admin-shell .up-leyenda-item { color: #ECEDE7; }
body.qiwo-dark .admin-shell .up-chart text { fill: #ECEDE7; }
body.qiwo-dark .admin-shell .up-dim { color: #ECEDE7; }
body.qiwo-dark .admin-shell .up-btn-copiar { color: #ECEDE7; }
body.qiwo-dark .admin-shell .up-aviso { color: #ECEDE7; }
.admin-shell .sal-pill--ok { background: #ECEDE7; color: #0F9375; }
.admin-shell .sal-pill--aviso { background: #ECEDE7; color: #DC2626; }
.admin-shell .sal-pill--alerta { background: #ECEDE7; color: #DC2626; }
body.qiwo-dark .admin-shell .sal-sede-comp { color: #ECEDE7; }
body.qiwo-dark .admin-shell .sal-sede-pie,
body.qiwo-dark .admin-shell .sal-sede-datos dt,
body.qiwo-dark .admin-shell .sal-avisos dt { color: #ECEDE7; }
body.qiwo-dark .admin-shell .sal-avisos dd.sal-malo { color: #ECEDE7; }
body.qiwo-dark .admin-shell .sal-pill--aviso { color: #ECEDE7; }
body.qiwo-dark .admin-shell .sal-pill--alerta { color: #ECEDE7; }
body.qiwo-dark .admin-shell .sal-pill--ok { background: #ECEDE7; color:#0B2947 !important; }
body .admin-content .admin-badge,
body .admin-content .estado-badge,
body .admin-content .metodo-badge,
body .admin-content .qiwo-badge-ok,
body .admin-content .qiwo-badge-warn,
body .admin-content .badge-matricula-activa,
body .admin-content .badge-matricula-inactiva { background: #ECEDE7; color: #0B2947; }
body.qiwo-dark .admin-content .admin-badge,
body.qiwo-dark .admin-content .estado-badge,
body.qiwo-dark .admin-content .metodo-badge,
body.qiwo-dark .admin-content .qiwo-badge-ok,
body.qiwo-dark .admin-content .qiwo-badge-warn,
body.qiwo-dark .admin-content .badge-matricula-activa,
body.qiwo-dark .admin-content .badge-matricula-inactiva { background: #ECEDE7; color: #0B2947; }
body .admin-content .qiwo-chip.active,
body .admin-content .qiwo-chip-active,
body.qiwo-dark .admin-content .qiwo-chip.active,
body.qiwo-dark .admin-content .qiwo-chip-active { background: #ECEDE7; color: #0B2947 !important; }
body.qiwo-dark .admin-shell .admin-hamburger { color: #ECEDE7; }
body .admin-sidebar-hybrid .admin-logout-btn:hover { color: #ECEDE7; }
body .admin-content [style*="background:#E0F2F1"],
body .admin-content [style*="background: #E0F2F1"] { background: #ECEDE7 !important; color: #0B2947 !important; }
body .admin-content .up-kpi--lead .up-kpi-lbl,
body .admin-content .up-kpi--lead .up-kpi-foot { color: #ECEDE7; }
body .admin-content .sal-pill--ok { background: #ECEDE7; color: #0B2947; }
:where(.admin-shell) .sel-inst-arrow { color: #ECEDE7; }
body .admin-content .qiwo-avatar,
body.qiwo-dark .admin-content .qiwo-avatar { background: #ECEDE7 !important; color: #0B2947 !important; }
body .admin-content .pers-dia-activo,
body.qiwo-dark .admin-content .pers-dia-activo { background: #ECEDE7; color: #0B2947; }
.admin-login-admin .admin-login-badge { background: #ECEDE7; color: #0B2947; }
body.qiwo-dark .admin-login-admin .admin-login-card,
body.qiwo-dark .admin-login-admin .admin-login-input { color: #ECEDE7; }
body.qiwo-dark .admin-login-admin .admin-login-title,
body.qiwo-dark .admin-login-admin .admin-login-label,
body.qiwo-dark .admin-login-admin .admin-login-soporte,
body.qiwo-dark .admin-login-admin .admin-login-link,
body.qiwo-dark .admin-login-admin .admin-login-link-green,
body.qiwo-dark .admin-login-admin .admin-login-link:hover,
body.qiwo-dark .admin-login-admin .admin-login-pass-toggle,
body.qiwo-dark .admin-login-admin .admin-login-input::placeholder { color: #ECEDE7; }
body.qiwo-dark .admin-auth-selection .sel-inst-title,
body.qiwo-dark .admin-auth-selection .sel-inst-nombre,
body.qiwo-dark .admin-auth-selection .sel-inst-sub,
body.qiwo-dark .admin-auth-selection .sel-inst-ruc,
body.qiwo-dark .admin-auth-selection .sel-inst-cerrar,
body.qiwo-dark .admin-auth-selection .sel-inst-arrow { color: #ECEDE7; }
body.qiwo-dark .admin-auth-selection .sel-inst-icon { background: #ECEDE7; color: #0B2947; }
body.qiwo-dark .admin-auth-selection .sel-inst-card svg path[fill="#0B2947"] { fill: #ECEDE7; }
body.qiwo-dark .admin-legal .legal-card { color: #ECEDE7; }
body.qiwo-dark .admin-legal .legal-titulo,
body.qiwo-dark .admin-legal .legal-updated,
body.qiwo-dark .admin-legal .legal-card h2,
body.qiwo-dark .admin-legal .legal-card p,
body.qiwo-dark .admin-legal .legal-card li,
body.qiwo-dark .admin-legal .legal-card a { color: #ECEDE7 !important; }
body.qiwo-dark .admin-legal .legal-brand { color: #ECEDE7; }
body.qiwo-dark .admin-legal .legal-brand svg path { fill: #ECEDE7; }
body .admin-content .admin-alumnos-total { background: #ECEDE7; color: #0B2947; }
body.qiwo-dark .admin-content .admin-alumnos-total { background: #ECEDE7; color: #0B2947; }
.admin-login-admin .admin-login-logo-banner .login-product-sub,
body.qiwo-dark .admin-login-admin .admin-login-logo-banner .login-product-sub { color: #ECEDE7; }
body.qiwo-dark .admin-login-admin .login-legal-links a,
body.qiwo-dark .admin-login-admin .login-legal-links span { color: #ECEDE7; }
.admin-login-admin .login-install-card,
.admin-login-admin .login-instalada-card,
.admin-login-admin .login-sesion-viva { background: #ECEDE7; color: #0B2947; }
body.qiwo-dark .admin-legal .legal-brand span,
body.qiwo-dark .admin-legal .legal-card strong { color: #ECEDE7; }
body .admin-shell .comunicado-card.comunicado-urgente,
body.qiwo-dark .admin-shell .comunicado-card.comunicado-urgente { background: #ECEDE7; color:#0B2947 !important; }
.admin-shell .up-hab--dejo { background: #ECEDE7; color:#0B2947 !important; }
body.qiwo-dark .admin-shell .up-chart text { fill: #ECEDE7; }
.admin-shell .up-bar--suave { fill: #ECEDE7; }
body .admin-shell .sal-tinte--ok,
body .admin-shell .sal-tinte--aviso,
body.qiwo-dark .admin-shell .sal-tinte--ok,
body.qiwo-dark .admin-shell .sal-tinte--aviso { background: #ECEDE7; color: #0B2947; }
body.qiwo-dark .admin-login-admin + .qiwo-theme-fab { color: #ECEDE7; }
.admin-auth-selection .sel-inst-empty,
body.qiwo-dark .admin-auth-selection .sel-inst-empty { background: #ECEDE7; color: #0B2947; }
body.qiwo-dark .admin-content tr.admin-row-selected :is(.qiwo-person-sub, .qiwo-text-muted) { color: #ECEDE7; }
body .admin-content .cred-personas-tab.is-active { background:#ECEDE7; color:#0B2947; }
:where(.admin-shell) .cred-personal-state.is-active { background:#ECEDE7; color:#0B2947 !important; }
:where(.admin-shell) .cp-tabla thead th { background:#ECEDE7; color:#0B2947; }
:where(.admin-shell) .cp-fila.is-seleccionada td { background:#ECEDE7; color:#0B2947 !important; }
:where(.admin-shell) .cp-estado.is-activa { background:#ECEDE7; color:#0B2947 !important; }
body.qiwo-dark :where(.admin-shell) .cp-accion { color:#ECEDE7; }
:where(.admin-shell) .cp-prueba-resultado.is-ok { background:#ECEDE7; color:#0B2947 !important; }
body.qiwo-dark :where(.admin-shell) .cp-prueba-resultado.is-ok strong { color:#ECEDE7; }
:where(.admin-shell) .cp-nfc.is-escuchando { background:#ECEDE7; color:#0B2947 !important; }
:where(.admin-shell) .inicio-pendiente { background: #ECEDE7; color: #0B2947; }
.admin-contexto-sede { border: 1px solid rgba(236,237,231,.14); background: rgba(236,237,231,.06); }
.admin-contexto-sede:hover { background: rgba(236,237,231,.12); }
:where(.admin-shell) button.inicio-grado:hover,
:where(.admin-shell) button.inicio-grado.is-abierto { background: #ECEDE7; color:#0B2947 !important; }
.admin-atras:hover { background: #ECEDE7; color:#0B2947 !important; }
:where(.admin-shell) .tp-cal .tp-google,
:where(.admin-shell) .tp-c--google { background: #ECEDE7; color:#0B2947 !important; }
body.qiwo-dark :where(.admin-shell) .tp-cal .tp-google,
body.qiwo-dark :where(.admin-shell) .tp-c--google { color: #ECEDE7; }
body.qiwo-dark :where(.admin-shell) .tp-cal .tp-hoy { color: #ECEDE7; }
:where(.admin-shell) .pers-choice-selected { background:#ECEDE7; color:#0B2947 !important; }
:where(.admin-shell) .pers-cargo-docente { background:#ECEDE7; color:#0B2947 !important; }
:where(.admin-shell) .pers-toast { background:#ECEDE7; color:#0B2947; }
body.qiwo-dark :where(.admin-shell) .pers-choice-selected { border-color:#ECEDE7; }
body.qiwo-dark :where(.admin-shell) .dc-pregunta,
body.qiwo-dark :where(.admin-shell) .dc-detalle { color:#ECEDE7; }
body :where(.admin-shell) .qiwo-dialog-overlay > .qiwo-modal-card { --admin-selected: #ECEDE7; }
body :where(.admin-shell) .qiwo-dialog-overlay .qiwo-modal-close:hover { background: #ECEDE7; color: #0B2947; }
body :where(.admin-shell) .qiwo-dialog-overlay .pers-marca { background: #ECEDE7; color:#0B2947 !important; }
body.qiwo-dark .admin-shell .admin-content .qiwo-dialog-overlay :is(.admin-badge, .qiwo-chip-active, .qiwo-nivel-chip, .pers-dia-activo) { background: #ECEDE7 !important; color: #0B2947 !important; }
:where(.admin-shell) .cob-adm-estado--parcial { background: var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947) !important; }
:where(.admin-shell) .cob-adm-estado--pagado { background: var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947) !important; }
body.qiwo-dark :where(.admin-shell) .cob-adm-tarjeta .cob-adm-enlace { color: #ECEDE7; }
:where(.admin-shell) .cob-adm-nota { background: var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); }
:where(.admin-shell) .cob-adm-resumen-caja { background: var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); }
:where(.admin-shell) .cob-bandeja-estado--aprobado,
:where(.admin-shell) .cob-cobro-estado--aprobado { background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947) !important; }
body.qiwo-dark :where(.admin-shell) .cob-bandeja-estado--rechazado,
body.qiwo-dark :where(.admin-shell) .cob-cobro-estado--rechazado { border-color:#ECEDE7; }
:where(.admin-shell) .cob-bandeja-historial-punto,
:where(.admin-shell) .cob-cobro-historial-punto { box-shadow:0 0 0 3px #ECEDE7; }
:where(.admin-shell) .cob-bandeja-toast svg,
:where(.admin-shell) .cob-cobro-toast svg { color:#ECEDE7; }
:where(.admin-shell) .cob-bandeja-verifica svg { color:#ECEDE7; }
body.qiwo-dark :where(.admin-shell) .cob-bandeja-verifica { border-color:#ECEDE7; }
:where(.admin-shell) .cob-bandeja-origen { background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); }
:where(.admin-shell) .cob-bandeja-ficha { background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); }
:where(.admin-shell) .cob-bandeja-verificado { background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); }
:where(.admin-shell) .cob-cobro-resumen > div { background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); }
:where(.admin-shell) .cob-cobro-contador { background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); }
:where(.admin-shell) .cob-cobro-total { background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); }
body.qiwo-dark :where(.admin-shell) .cob-cobro-total { border:1px solid #ECEDE7; }
:where(.admin-shell) .cob-cobro-anular-ficha { background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); }
:where(.admin-shell) .cob-cta-estado-ok { background:#ECEDE7; color:#0B2947; }
:where(.admin-shell) .cob-cta-elegir-activa { background:#ECEDE7; color:#0B2947 !important; }
body.qiwo-dark .admin-shell .admin-content .cob-cta-estado-ok { color:#ECEDE7; }
:where(.admin-shell) .cob-recibo { background: #ECEDE7; color: #0B2947; }
:where(.admin-shell) .cob-catalogo-tarjeta:hover { background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947) !important; }
:where(.admin-shell) .cob-carrito-linea { background:var(--q-capa-hover, #ECEDE7); color:var(--q-capa-texto, #0B2947); }
:where(.admin-shell) .nav-badge-prueba { background:#ECEDE7; color:#0B2947; }
:where(.admin-shell) .mod-estado--prueba[aria-pressed="true"] { background:#ECEDE7; color:#0B2947 !important; }
body .admin-shell .admin-content .comunicado-fila-urgente > td { background: #ECEDE7; color: #0B2947; }
body .admin-shell .admin-content .admin-personal-page .pers-status-present { background:#ECEDE7 !important; color:#0B2947 !important; }
body .admin-shell .admin-content .pers-horario-page .pers-choice-selected { background:#ECEDE7; color:#0B2947; }
body.qiwo-dark .admin-shell .admin-content .pers-horario-page .pers-choice-selected { background:#ECEDE7; color:#0B2947; }
body .admin-shell .admin-content .pers-horario-page .qiwo-dialog-overlay .pers-choice-selected { background:#ECEDE7; color:#0B2947 !important; }
body .admin-personal-page .pers-marca { background:#ECEDE7; color:#0B2947; }
.admin-shell { --q-tint: #ECEDE7; }
body.qiwo-dark :where(.admin-shell) { --q-avatar-ink: #ECEDE7; }
:where(.admin-shell) .q-settings-dialog { --q-tint:#ECEDE7; }
:where(.admin-shell) .cob-recibo-acciones a[aria-current="true"] { background: #ECEDE7; color: #0B2947; }
.admin-personal-page .qiwo-dialog-overlay { --q-tint:#ECEDE7; }
body .admin-content .admin-module-card .admin-hub-card-icon,
body .admin-content .admin-hub-card:nth-child(even).admin-module-card .admin-hub-card-icon { background: #ECEDE7; color: #0B2947; }
:where(.admin-shell) .q-page-head-icon { background:#ECEDE7; color:#0B2947; }
:where(.admin-shell) .q-pa-equipo-pendiente { background:#ECEDE7; color:#0B2947 !important; }
:where(.admin-shell) .q-pa-metrica { background:#ECEDE7; color:#0B2947 !important; }
:where(.admin-shell) .q-pa-eventos li { background:#ECEDE7; color:#0B2947; }
:where(.admin-shell) .q-personal-baja-consecuencias { background:#ECEDE7; color:#0B2947; }
:where(.admin-shell) .q-personal-historial li { background:#ECEDE7; color:#0B2947; }
:where(.admin-shell) :is(.q-credenciales-page, .q-comunicados-page) .qiwo-modal-card { --q-tint:#ECEDE7; }
body .admin-shell .admin-content :is(.q-credenciales-page, .q-comunicados-page) .qiwo-modal-card .q-person-avatar { background:#ECEDE7 !important; color:#0B2947 !important; }
:where(.admin-shell) .q-credenciales-page .qiwo-modal-card .identificar-result { background:#ECEDE7 !important; color:#0B2947 !important; }
:where(.admin-shell) .q-personal-sedes-opciones label { background:#ECEDE7; color:#0B2947; }
:where(.admin-shell) .q-calendar-cell.q-calendar-marca,
:where(.admin-shell) .q-calendar-cell.q-calendar-registro { background:#ECEDE7; color:#0F9375; }
:where(.admin-shell) .q-horario-dia .is-puntual { background:#ECEDE7; color:#0B6B55; }
body.qiwo-dark :where(.admin-shell) .q-horario-dia .is-puntual { color:#ECEDE7; }
:where(.admin-shell) .q-foto-personal { background:#ECEDE7; color:#0B2947; }
body.qiwo-dark :where(.admin-shell) .q-foto-personal { color:#ECEDE7; }
body.qiwo-dark .admin-content .qiwo-dialog-overlay .pers-marca p.q-foto-revisada { color:#ECEDE7 !important; }

/* La variable clara del contenedor no debe tapar la variante oscura heredada. */
body.qiwo-dark .admin-shell { --q-tint:color-mix(in srgb, #0B2947 75%, #0F9375); }
/* La cabecera es optativa; únicamente la Lista del personal la adopta. */
body .admin-shell .q-table.q-tabla-cabecera-marina thead th,
body.qiwo-dark .admin-shell .q-table.q-tabla-cabecera-marina thead th {
 background:#0B2947 !important; color:#FFFFFF !important; border-bottom:2px solid #0F9375;
}
body.qiwo-dark .admin-shell .q-personal-marca .q-table.q-tabla-cabecera-marina thead th { background:var(--pd-cabecera) !important; }
body.qiwo-dark .q-tabla-cabecera-marina thead { outline:none; }
.q-portal-bloqueado { display:inline-flex; align-items:center; gap:6px; width:fit-content; padding:3px 9px; border-radius:999px; background:#FEF3A0; color:#854D0E; font-size:12px; font-weight:600; }
.q-portal-bloqueado::before { content:""; width:7px; height:7px; border-radius:50%; background:#CA8A04; flex:none; }
body.qiwo-dark .q-portal-bloqueado { background:rgba(202,138,4,.20); color:#FDE68A; }
body.qiwo-dark .q-portal-bloqueado::before { background:#FDE68A; }
/* FIN CODEX 2026-10-30: pendientes-visuales-chat151. */

/* Revisar rostros desde Credenciales (30/10/2026): enlace legible en ambos temas. */
.rr-person-review { margin:0; }
.cp-modal .rr-person-link, body.qiwo-dark .cp-modal .rr-person-link {
    display:inline-flex; align-items:center; box-sizing:border-box; min-height:44px;
    padding:8px 12px; border:1px solid #D1D5DB; border-radius:8px;
    background:#ECEDE7; color:#0B2947; line-height:1.5;
}
.cp-modal .rr-person-link:focus-visible { outline:2px solid #0F9375; outline-offset:3px; }

/* INICIO CODEX 2026-10-30: menu-opciones-agrupado. */
.q-opciones-grupo { display:grid; min-width:0; }
.q-opciones-grupo:not(:has(.qiwo-row-actions-menu-item)) { display:none; }
.q-opciones-separador { height:1px; background:#D1D5DB; margin:6px 4px; }
.q-opciones-grupo:not(:has(.qiwo-row-actions-menu-item)) + .q-opciones-separador,
.q-opciones-separador:not(:has(~ .q-opciones-grupo .qiwo-row-actions-menu-item)) { display:none; }
.q-opciones-texto { display:grid; gap:2px; text-align:left; white-space:normal; }
.q-opciones-texto small { font-size:11px; line-height:1.4; font-weight:400; }
body .admin-shell .q-opciones-grupo .qiwo-row-actions-menu-item svg { color:#0F9375; }
body .q-opciones-grupo .qiwo-row-actions-menu-item--danger,
body .admin-shell .q-opciones-grupo .qiwo-row-actions-menu-item--danger,
body .q-opciones-grupo .qiwo-row-actions-menu-item--danger svg,
body .admin-shell .q-opciones-grupo .qiwo-row-actions-menu-item--danger svg { color:#DC2626; }
body.qiwo-dark .admin-shell .q-opciones-grupo .qiwo-row-actions-menu-item svg { color:#5EEAD4; }
body.qiwo-dark .q-opciones-grupo .qiwo-row-actions-menu-item--danger,
body.qiwo-dark .admin-shell .q-opciones-grupo .qiwo-row-actions-menu-item--danger,
body.qiwo-dark .q-opciones-grupo .qiwo-row-actions-menu-item--danger svg,
body.qiwo-dark .admin-shell .q-opciones-grupo .qiwo-row-actions-menu-item--danger svg { color:#FCB3B3; }
@media (max-width:1023px), (any-pointer:coarse) {
    .q-opciones-grupo .qiwo-row-actions-menu-item { min-height:44px; box-sizing:border-box; }
}
@media (min-width:768px) {
    .q-opciones-grupo:has(> .admin-tabla-solo-movil:only-child),
    .q-opciones-grupo:has(> .admin-tabla-solo-movil:only-child) + .q-opciones-separador { display:none; }
}
/* FIN CODEX 2026-10-30: menu-opciones-agrupado. */

/* Logo por sede: diálogo clase 1, mismos formatos y proporción del logo institucional. */
.q-logo-sede .q-logo-sede-nombre { margin:0 0 16px; font-weight:600; color:var(--q-text,#0B2947); }
.q-logo-sede-preview { display:flex; align-items:center; justify-content:center; width:144px; height:144px; margin:0 auto 16px; padding:12px; box-sizing:border-box; background:#fff; border:1px solid #D1D5DB; border-radius:16px; color:#0B2947; text-align:center; }
.q-logo-sede-preview img { display:block; width:100%; height:100%; object-fit:contain; }
.q-logo-sede .q-logo-sede-estado { text-align:center; font-weight:700; color:var(--q-accent,#0F9375); }
.q-logo-sede .q-logo-sede-ayuda { margin:8px 0 16px; font-size:13px; line-height:1.5; color:var(--q-text,#0B2947); }
.q-logo-sede input[type=file] { display:block; width:100%; box-sizing:border-box; min-height:44px; padding:10px; background:#fff !important; border:1px solid #D1D5DB !important; color:#0B2947; border-radius:8px; }
.q-logo-sede input[type=file]:focus-visible { outline:2px solid #0F9375; outline-offset:2px; }
body.qiwo-dark .admin-shell .admin-content .qiwo-dialog-overlay > .qiwo-modal-card.q-logo-sede { background:#0B2947; color:#ECEDE7; }
body.qiwo-dark .admin-shell .admin-content .qiwo-dialog-overlay .q-logo-sede :is(.qiwo-modal-header,.qiwo-modal-body,.qiwo-modal-footer) { background:#0B2947; color:#ECEDE7; }
body.qiwo-dark .admin-shell .admin-content .q-logo-sede .qiwo-modal-header h3,
body.qiwo-dark .admin-shell .admin-content .q-logo-sede :is(.qiwo-label,.q-logo-sede-estado) { color:#ECEDE7; }
body.qiwo-dark .admin-shell .admin-content .q-logo-sede input[type=file] { background:#ECEDE7 !important; color:#0B2947; }
body.qiwo-dark .q-logo-sede :is(.q-logo-sede-nombre,.q-logo-sede-ayuda) { color:#ECEDE7; }
body.qiwo-dark .q-logo-sede :is(h3,.qiwo-label,.qiwo-modal-close) { color:#ECEDE7; }
@media(max-width:600px) { .q-logo-sede .qiwo-modal-footer { flex-wrap:wrap; } .q-logo-sede .qiwo-modal-footer button { flex:1; min-height:44px; } }
/* Fin logo por sede. */

/* Revisar rostros: los avisos son indicaciones, van en el celeste de hints (30/10/2026, Jordy). */
.q-notice.rr-hint { background: #E0F2F1; border-color: #E0F2F1; color: #0B2947; }
body.qiwo-dark .q-notice.rr-hint { background: rgba(224,242,241,.14); border-color: rgba(224,242,241,.25); color: #E0F2F1; }
/* Sedes: logo de cada sede a la izquierda de la fila; tocarlo lo cambia (30/10/2026). */
.sede-logo-btn { width:44px; height:44px; flex-shrink:0; padding:3px; border:1px solid #D1D5DB; border-radius:10px; background:#FFFFFF; cursor:pointer; display:flex; align-items:center; justify-content:center; }
.sede-logo-btn img { width:100%; height:100%; object-fit:contain; border-radius:7px; }
.sede-logo-btn:hover, .sede-logo-btn:focus-visible { border-color:#0F9375; outline:none; box-shadow:0 0 0 2px rgba(15,147,117,.25); }
/* Revisar rostros: recuadro sobre la cara que se pregunta (30/10/2026). */
.rr-photo { position: relative; }
.rr-cara { position: absolute; border: 3px solid #0F9375; border-radius: 10px; box-shadow: 0 0 0 2px rgba(255,255,255,.85); pointer-events: none; }
.rr-varias { margin-top: 6px; padding: 8px 10px; border-radius: 8px; background: #E0F2F1; color: #0B2947; font-size: 12px; }
body.qiwo-dark .rr-varias { background: rgba(224,242,241,.14); color: #E0F2F1; }
.rr-motor { margin: 0 0 10px; font-size: 12px; color: #0B2947; opacity: .75; }
body.qiwo-dark .rr-motor { color: #ECEDE7; }
.kiosco-personal-btn:disabled { opacity:.65; cursor:default; }
/* Revisar rostros: las otras caras, punteadas y tocables para elegir la correcta (30/10/2026). */
.rr-cara--otra { border: 2px dashed rgba(255,255,255,.9); box-shadow: 0 0 0 1px rgba(11,41,71,.5); background: transparent; pointer-events: auto; cursor: pointer; padding: 0; }
.rr-cara--otra:hover, .rr-cara--otra:focus-visible { border-color: #0F9375; outline: none; }
/* Relojes del personal: inventario, credenciales y fotos. */
.q-relojes { margin: 24px 0; }
.q-relojes h2 { font-size: 20px; margin: 0 0 6px; }
.q-relojes-grid { display: grid; grid-template-columns: repeat(auto-fit,minmax(min(100%,400px),1fr)); gap: 16px; }
.q-reloj-card { border: 1px solid #D1D5DB; border-radius: 16px; padding: 20px; background: var(--q-surface, #ECEDE7); overflow-wrap: anywhere; }
.q-reloj-card-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.q-reloj-card-head h3 { margin: 0; font-size: 17px; flex: 1; }
.q-reloj-card p, .q-reloj-persona p { margin: 8px 0; }
/* Estado del reloj como la tablet (Jordy, 03/11): verde en línea, rojo sin señal, ámbar con algo que revisar. */
.q-reloj-sin-senal { background: #FDECEC !important; color: #9B1C1C !important; border-radius: 12px; padding: 4px 10px; }
.q-reloj-revisar { background: #FEF3A0 !important; color: #854D0E !important; border-radius: 12px; padding: 4px 10px; }
.q-reloj-sin-senal .q-form-help,.q-reloj-sin-senal .q-pa-nota { color: inherit; }
.q-reloj-buscar { display:flex; align-items:end; gap:12px; flex-wrap:wrap; margin-bottom:12px; }
.q-reloj-buscar label { flex: 1; min-width: 180px; display:grid;gap:8px; }
.q-reloj-dialogo { width:min(900px,calc(100vw - 32px)); max-width:900px; max-height:90vh; max-height:90dvh; display:flex;flex-direction:column; }
.q-reloj-dialogo .qiwo-modal-body { overflow:auto; min-height:0; }
.q-reloj-persona,.q-reloj-historial { padding:16px 0; border-bottom:1px solid #D1D5DB; overflow-wrap:anywhere; }
.q-pa-reloj-estado { display:flex; flex-wrap:wrap; align-items:center; gap:8px; padding:14px; border-radius:12px; }
.q-reloj-en-linea { background:#0F9375; color:#fff; }
.q-pa-reloj-estado .q-credential-status { display:inline-flex; align-items:center; gap:6px; background:transparent; color:inherit; padding:0; }
.q-reloj-chip { display:inline-flex; align-items:center; padding:4px 8px; border-radius:8px; border:1px solid currentColor; font-size:12px; overflow-wrap:anywhere; }
.q-reloj-pagina { max-width:1280px; margin:0 auto; color:#0B2947; }
.q-reloj-migas { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:24px; font-size:13px; }
.q-reloj-migas a { color:inherit; text-decoration:underline; text-underline-offset:3px; }
.q-reloj-cabecera,.q-reloj-seccion-titulo,.q-reloj-persona-fila { display:flex; align-items:center; justify-content:space-between; gap:24px; flex-wrap:wrap; }
.q-reloj-cabecera { margin:16px 0 24px; }
.q-reloj-cabecera h1 { font-size:clamp(26px,3vw,38px); line-height:1.2; margin:4px 0 12px; letter-spacing:-.025em; }
.q-reloj-cabecera p,.q-reloj-seccion-titulo p { margin:6px 0; }
.q-reloj-sobretitulo { color:#0F9375; font-weight:700; font-size:13px; }
.q-reloj-cabecera-acciones,.q-reloj-actualizacion { display:flex; gap:12px; flex-wrap:wrap; align-items:center; }
.q-reloj-actualizacion { margin:20px 0; font-size:13px; }
.q-reloj-actualizacion label { display:flex; gap:8px; align-items:center; }
.q-reloj-actualizacion .qiwo-input { width:auto; }
.q-reloj-contadores { display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:12px; margin:24px 0; }
.q-reloj-contadores>div { display:flex; flex-direction:column; gap:6px; background:#fff; border:1px solid #D1D5DB; border-radius:16px; padding:20px; }
.q-reloj-contadores strong { font-size:28px; font-weight:700; color:#0F9375; }
.q-reloj-contadores span { font-size:13px; font-weight:600; }.q-reloj-contadores small { font-size:12px; }
.q-reloj-pestanas { display:flex; gap:6px; flex-wrap:wrap; margin:28px 0 16px; }
.q-reloj-pestanas button { border:1px solid #D1D5DB; border-radius:10px; padding:12px 18px; background:#fff; color:#0B2947; font:inherit; cursor:pointer; }
.q-reloj-pestanas button[aria-selected=true] { background:#0B2947; color:#fff; border-color:#0B2947; }
.q-reloj-pestanas button:focus-visible,.q-reloj-pagina .q-button:focus-visible { outline:2px solid #0F9375; outline-offset:3px; }
.q-reloj-seccion { background:#fff; border:1px solid #D1D5DB; border-radius:18px; padding:28px; overflow-wrap:anywhere; }
.q-reloj-seccion h2 { font-size:22px; margin:0 0 10px; }.q-reloj-seccion h3 { font-size:16px; margin:0 0 8px; }
.q-reloj-persona-fila .pers-actions { margin:0; }.q-reloj-seccion .q-reloj-persona:last-child { border-bottom:0; padding-bottom:0; }
.q-reloj-seccion .q-reloj-identidad p { margin:6px 0; font-size:13px; }.q-reloj-vacio { padding:36px 0; text-align:center; }
.q-reloj-boton-primario { background:#0F9375 !important; color:#fff !important; border-color:#0F9375 !important; }
.q-reloj-config-grid { display:grid; grid-template-columns:1fr 1fr; gap:16px; margin:24px 0; }
.q-reloj-config-grid>section { padding:20px; background:#ECEDE7; border-radius:14px; }
.q-reloj-config-grid p { line-height:1.6; font-size:14px; }.q-reloj-config-grid select { background:#fff; border:1px solid #D1D5DB; width:100%; margin:10px 0; }
.q-reloj-marca { padding:20px 0; border-bottom:1px solid #D1D5DB; }.q-reloj-marca p { font-size:13px; }.q-reloj-marca-foto { display:block; width:320px; max-width:100%; height:auto; border-radius:12px; margin:16px 0; }
body.qiwo-dark .q-reloj-pagina { color:#ECEDE7; }
body.qiwo-dark .q-reloj-seccion,body.qiwo-dark .q-reloj-contadores>div,body.qiwo-dark .q-reloj-pestanas button { background:#0B2947; color:#ECEDE7; }
body.qiwo-dark .q-reloj-pestanas button[aria-selected=true] { background:#0F9375; border-color:#0F9375; color:#fff; }
body.qiwo-dark .q-reloj-config-grid>section { background:rgba(236,237,231,.08); }
body.qiwo-dark .q-reloj-config-grid select { background:#0B2947; color:#ECEDE7; }
@media(max-width:900px){.q-reloj-contadores{grid-template-columns:repeat(3,minmax(0,1fr));}.q-reloj-config-grid{grid-template-columns:1fr;}}
@media(max-width:600px){.q-reloj-seccion{padding:18px;}.q-reloj-contadores{grid-template-columns:1fr 1fr;gap:8px;}.q-reloj-contadores>div{padding:14px;}.q-reloj-contadores strong{font-size:24px;}.q-reloj-contadores>div:last-child{grid-column:span 2;}.q-reloj-persona-fila{gap:12px;}.q-reloj-pestanas{gap:8px;}.q-reloj-pestanas button{padding:10px 12px;font-size:13px;}.q-reloj-cabecera-acciones{width:100%;}.q-reloj-cabecera-acciones button{flex:1;}.q-reloj-seccion-titulo .q-search{width:100%;}.q-reloj-pagina .q-button{white-space:normal;}.q-reloj-pagina .q-search input{min-width:0;}}
.q-pa-reloj-estado.q-reloj-sin-senal,.q-pa-reloj-estado.q-reloj-revisar { padding:14px; }
.q-reloj-identidad { display:flex; align-items:center; gap:12px; }
.q-reloj-identidad img { object-fit:cover; border-radius:8px; }
.q-reloj-preview { display:block; max-width:100%; object-fit:cover; margin:12px 0; border-radius:12px; }
.q-reloj-credencial .q-field-label,.q-reloj-foto .q-field-label,.q-reloj-dialogo .q-field-label { display:grid; gap:8px; margin:12px 0; }
.q-reloj-credencial input,.q-reloj-credencial textarea,.q-reloj-credencial select,.q-reloj-dialogo input,.q-reloj-dialogo textarea,.q-reloj-dialogo select { background:#fff; border:1px solid #D1D5DB; width:100%;box-sizing:border-box; }
.q-reloj-credencial :is(input,textarea,select):focus,.q-reloj-dialogo :is(input,textarea,select):focus { outline:2px solid #0F9375;outline-offset:1px; }
body.qiwo-dark .q-reloj-card { background:#0B2947; }
body.qiwo-dark .q-reloj-sin-senal { background:#5B1414 !important;color:#FECACA !important; }
body.qiwo-dark .q-reloj-revisar { background:#854D0E !important;color:#FDE68A !important; }
body.qiwo-dark .q-reloj-credencial :is(input,textarea,select),body.qiwo-dark .q-reloj-dialogo :is(input,textarea,select) { background:#0B2947;color:#ECEDE7; }
@media(max-width:600px) { .q-reloj-card { padding:16px; }.q-reloj-dialogo { width:calc(100vw - 16px); }.q-reloj-card .pers-actions { display:grid;grid-template-columns:1fr 1fr; }.q-reloj-card .q-button { white-space:normal;text-align:center;justify-content:center; }.q-reloj-identidad { align-items:start; }.q-reloj-identidad p { font-size:13px; } }

/* Una sola identidad facial; elección de imagen en diálogo clase 1. */
.q-reloj-foto-estado { display:flex; gap:12px; align-items:center; margin:12px 0; }
.q-reloj-foto-estado img { object-fit:cover; border-radius:8px; }
.q-reloj-foto-overlay { z-index:1300; }
.q-reloj-foto-dialogo { width:min(640px,calc(100vw - 24px)); max-height:90vh; max-height:90dvh; display:flex; flex-direction:column; }
.q-reloj-foto-dialogo .qiwo-modal-body { overflow:auto; min-height:0; }
.q-reloj-fotos-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(90px,1fr)); gap:10px; }
.q-reloj-foto-opcion { display:flex; flex-direction:column; align-items:center; gap:6px; padding:8px; background:#fff; color:#0B2947; border:2px solid #D1D5DB; border-radius:10px; cursor:pointer; }
.q-reloj-foto-opcion.is-active,.q-reloj-foto-opcion:focus-visible { border-color:#0F9375; outline:2px solid #0F9375; outline-offset:2px; }
.q-reloj-foto-opcion img { object-fit:cover; border-radius:6px; }
.q-reloj-foto-vista { margin:16px auto; text-align:center; }
.q-reloj-foto-vista img { display:block; margin:auto; }
.qiwo-dark .q-reloj-foto-opcion { background:#0B2947; color:#ECEDE7; }

/* Reloj v2: tabla y tarjetas móviles, recorte manual y visor de consulta. */
.q-reloj-pagina { width:100%; max-width:none; margin:0; min-width:0; }
.q-reloj-pagina .q-reloj-contadores { grid-template-columns:repeat(4,minmax(0,1fr)); }
.q-reloj-pagina .q-pa-reloj-estado { display:flex; flex-wrap:wrap; align-items:center; gap:10px; background:#ECEDE7; color:#0B2947; border-radius:14px; padding:14px 16px; }
.q-reloj-pagina .q-reloj-chip { flex-shrink:0; max-width:100%; white-space:normal; overflow:visible; text-overflow:clip; line-height:1.5; }
.q-reloj-pagina .q-pa-reloj-estado.q-reloj-sin-senal { background:#ECEDE7 !important; color:#0B2947 !important; }
.q-reloj-pagina .q-pa-reloj-estado.q-reloj-en-linea { background:rgba(15,147,117,.1); color:#0B2947; }
.q-reloj-filtros,.q-reloj-fuentes { display:flex; flex-wrap:wrap; gap:8px; margin:22px 0 16px; }
.q-reloj-filtros button,.q-reloj-fuentes button { font:inherit; font-size:13px; background:#fff; color:#0B2947; border:1px solid #D1D5DB; border-radius:24px; padding:9px 14px; cursor:pointer; }
.q-reloj-filtros button span { margin-left:6px; font-variant-numeric:tabular-nums; }
.q-reloj-filtros button[aria-pressed=true],.q-reloj-fuentes button[aria-selected=true] { background:#0B2947; border-color:#0B2947; color:#fff; }
.q-reloj-tabla { width:100%; margin-top:16px; }
.q-reloj-tabla th { white-space:nowrap; background:#ECEDE7; }
.q-reloj-tabla td { vertical-align:middle; padding-top:18px; padding-bottom:18px; }
.q-reloj-tabla td small,.q-reloj-identidad small { display:block; font-size:12px; margin-top:5px; }
.q-reloj-tabla .q-reloj-persona { border-bottom:0; }
.q-reloj-identidad { align-items:center; min-width:0; }
.q-reloj-avatar { width:44px; height:44px; flex:0 0 44px; display:grid; place-items:center; border-radius:50%; border:0; padding:0; background:#ECEDE7; color:#0B2947; font-weight:700; overflow:hidden; }
button.q-reloj-avatar { cursor:pointer; }
.q-reloj-avatar img { width:100%; height:100%; object-fit:cover; border-radius:50%; }
.q-reloj-credenciales { display:flex; gap:10px; align-items:center; }
.q-reloj-cred-icono { width:34px; height:34px; display:grid; place-items:center; border:1px solid currentColor; border-radius:10px; }
.q-reloj-cred-icono svg { width:22px; height:22px; }
.q-reloj-cred-icono.confirmada { color:#0F9375; background:rgba(15,147,117,.08); }
.q-reloj-cred-icono.propia { color:#0B2947; background:rgba(11,41,71,.06); }
.q-reloj-cred-icono.ausente { color:#D1D5DB; }
.q-reloj-cred-icono.revisar,.q-reloj-resultado.revisar { color:#854D0E; background:#FEF3A0; }
.q-reloj-revision-texto { color:#854D0E; }
.q-reloj-leyenda { display:flex; gap:12px 22px; flex-wrap:wrap; font-size:12px; margin-top:24px; padding-top:18px; border-top:1px solid #D1D5DB; }
.q-reloj-leyenda span { display:flex; gap:7px; align-items:center; }
.q-reloj-leyenda i { display:inline-block; width:9px; height:9px; border-radius:50%; }
.q-reloj-leyenda .confirmada { background:#0F9375; }.q-reloj-leyenda .propia { background:#0B2947; }.q-reloj-leyenda .revisar { background:#CA8A04; }.q-reloj-leyenda .ausente { background:#D1D5DB; }
.q-reloj-eventos { padding:20px; background:#ECEDE7; border-radius:14px; }
.q-reloj-eventos label { display:flex; align-items:center; gap:8px; }
.q-reloj-linea-tiempo { padding:0; margin:16px 0 0; list-style:none; }
.q-reloj-linea-tiempo li { display:flex; gap:12px; align-items:center; flex-wrap:wrap; padding:14px 0; border-bottom:1px solid #D1D5DB; }
.q-reloj-linea-tiempo li:last-child { border-bottom:0; }
.q-reloj-linea-tiempo time { font-size:13px; font-variant-numeric:tabular-nums; }
.q-reloj-resultado { display:inline-block; border-radius:20px; padding:5px 10px; background:#ECEDE7; color:#0B2947; font-size:12px; white-space:nowrap; }
.q-reloj-foto-mini { border:1px solid #D1D5DB; background:#fff; color:#0B2947; display:inline-flex; align-items:center; gap:7px; border-radius:9px; padding:5px 8px; font:inherit; font-size:12px; cursor:pointer; }
.q-reloj-foto-mini img { width:40px; height:48px; object-fit:cover; border-radius:5px; }
.q-reloj-intentos-titulo { margin-top:32px !important; }
.q-reloj-intento { display:flex; align-items:center; flex-wrap:wrap; gap:16px; padding:14px 0; border-bottom:1px solid #D1D5DB; }
.q-reloj-visor-overlay { z-index:1500; }
.q-reloj-visor { width:min(900px,calc(100vw - 24px)); max-width:900px; max-height:92vh; max-height:92dvh; display:flex; flex-direction:column; }
.q-reloj-visor .qiwo-modal-body { overflow:auto; }
.q-reloj-visor img { display:block; width:auto; min-width:min(320px,100%); max-width:100%; max-height:72vh; max-height:72dvh; margin:auto; object-fit:contain; }
.q-reloj-galeria { display:grid; grid-template-columns:repeat(auto-fill,minmax(110px,1fr)); gap:10px; }
.q-reloj-galeria button { display:grid; gap:5px; padding:8px; font:inherit; font-size:12px; background:#fff; color:#0B2947; border:1px solid #D1D5DB; border-radius:10px; cursor:pointer; }
.q-reloj-galeria img { width:100%; height:116px; object-fit:cover; border-radius:6px; }
.q-reloj-recorte { display:flex; flex-wrap:wrap; gap:18px; margin:16px 0; align-items:start; }
.q-reloj-recorte .q-recuadro-marco { flex:1 1 300px; max-width:520px; }
.q-reloj-recorte-vista { width:120px; height:160px; border-radius:10px; }
.q-reloj-ovalo { display:block; position:absolute; top:22%; left:25%; width:50%; height:48%; border:1px dashed #fff; border-radius:50%; pointer-events:none; }
.q-reloj-camara { width:100%; max-height:320px; background:#0B2947; border-radius:12px; }
.q-reloj-foto-lista { display:flex; gap:18px; align-items:center; margin-top:16px; }
.q-reloj-foto-lista img { border-radius:12px; object-fit:contain; }
.q-reloj-fuentes button:focus-visible,.q-reloj-filtros button:focus-visible,.q-reloj-avatar:focus-visible,.q-reloj-foto-mini:focus-visible { outline:2px solid #0F9375; outline-offset:3px; }
body.qiwo-dark .q-reloj-pagina .q-pa-reloj-estado,body.qiwo-dark .q-reloj-pagina .q-pa-reloj-estado.q-reloj-sin-senal { background:rgba(236,237,231,.08) !important; color:#ECEDE7 !important; }
body.qiwo-dark .q-reloj-filtros button,body.qiwo-dark .q-reloj-fuentes button,body.qiwo-dark .q-reloj-foto-mini,body.qiwo-dark .q-reloj-galeria button { background:#0B2947; color:#ECEDE7; }
body.qiwo-dark .q-reloj-filtros button[aria-pressed=true],body.qiwo-dark .q-reloj-fuentes button[aria-selected=true] { background:#0F9375; border-color:#0F9375; }
body.qiwo-dark .q-reloj-cred-icono.propia { color:#ECEDE7; background:rgba(236,237,231,.08); }
body.qiwo-dark .q-reloj-leyenda .propia { background:#ECEDE7; }
body.qiwo-dark .q-reloj-revision-texto { color:#FDE68A; }
body.qiwo-dark .q-reloj-eventos { background:rgba(236,237,231,.08); }
body.qiwo-dark .q-reloj-tabla th { background:rgba(236,237,231,.08); }
body.qiwo-dark .q-reloj-dialogo :is(input,textarea,select) { background:rgba(236,237,231,.12); border:1px solid #D1D5DB; color:#ECEDE7; }
@media(max-width:700px) {
    .q-reloj-pagina .q-reloj-contadores { grid-template-columns:1fr 1fr; }
    .q-reloj-pagina .q-reloj-contadores>div:last-child { grid-column:auto; }
    .q-reloj-tabla,.q-reloj-tabla tbody { display:block; width:100%; }
    .q-reloj-tabla thead { display:none; }
    .q-reloj-pagina .q-reloj-tabla tbody tr { display:block; margin-bottom:14px; padding:14px; border:1px solid #D1D5DB !important; border-radius:14px; }
    .q-reloj-pagina .q-reloj-tabla tbody td { display:flex; justify-content:space-between; align-items:center; gap:12px; padding:9px 0; border:0; min-height:36px; height:auto; }
    .q-reloj-tabla td::before { content:attr(data-label); font-size:12px; flex-shrink:0; }
    .q-reloj-pagina .q-reloj-tabla tbody td[data-label=Persona] { display:block; padding-bottom:16px; }
    .q-reloj-tabla td[data-label=Persona]::before,.q-reloj-tabla .q-reloj-eventos-fila td::before { display:none; }
    .q-reloj-tabla td[data-label=Persona]>small { margin-top:6px; }
    .q-reloj-pagina .q-reloj-tabla tbody .q-reloj-eventos-fila { padding:0; border:0 !important; }
    .q-reloj-pagina .q-reloj-tabla tbody .q-reloj-eventos-fila td { display:block; height:auto; }
    .q-reloj-eventos { padding:14px; }
    .q-reloj-eventos .q-reloj-seccion-titulo { gap:10px; }
    .q-reloj-seccion { padding:16px; }
    .q-reloj-pagina .q-search { min-width:0; max-width:100%; }
    .q-reloj-dialogo .qiwo-modal-header h3 { font-size:17px; }
    .q-reloj-fuentes { gap:6px; }.q-reloj-fuentes button { padding:9px 10px; font-size:12px; }
    .q-reloj-recorte .q-recuadro-lateral { display:flex; align-items:center; width:100%; justify-content:space-around; }
    .q-reloj-recorte-vista { width:75px; height:100px; }
}
body.qiwo-dark .cred-personal .cp-metodo { background:#0B2947; color:#ECEDE7; }
body.qiwo-dark .cred-personal .cp-metodo h4 { color:#ECEDE7; }

/* Reloj: ajustes del equipo a distancia (06/11/2026). */
.q-reloj-ajustes-cabecera { display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; margin-top:24px; }
.q-reloj-ajustes-cabecera h3 { margin:0; }
.q-reloj-ajustes-grupo { margin-top:16px; border:1px solid var(--q-border); border-radius:12px; background:var(--q-surface); overflow:hidden; }
.q-reloj-ajustes-grupo h4 { margin:0; padding:10px 16px; font-size:13px; font-weight:700; color:var(--q-ink); background:var(--q-surface-secondary, #ECEDE7); }
.q-reloj-ajustes-grupo > p { margin:0; padding:12px 16px; font-size:13px; color:var(--q-muted); line-height:1.5; }
.q-reloj-ajuste { display:grid; grid-template-columns:minmax(0,2fr) minmax(0,1fr) minmax(180px,auto); gap:12px; align-items:center; padding:12px 16px; border-top:1px solid var(--q-border); }
.q-reloj-ajuste-texto strong { display:block; font-size:14px; color:var(--q-ink); }
.q-reloj-ajuste-texto span { display:block; margin-top:2px; font-size:12px; line-height:1.45; color:var(--q-muted); }
.q-reloj-ajuste-actual { display:block; font-size:14px; font-weight:600; color:var(--q-ink); }
.q-reloj-ajuste-pendiente { display:block; margin-top:2px; font-size:12px; color:#854D0E; }
.q-reloj-ajuste-control { display:flex; gap:8px; align-items:center; justify-content:flex-end; }
.q-reloj-ajuste-control .qiwo-input { width:auto; min-width:90px; max-width:200px; background:#FFFFFF; }
@media (max-width:760px) { .q-reloj-ajuste { grid-template-columns:1fr; } .q-reloj-ajuste-control { justify-content:flex-start; } }
/* Reloj: diálogo de tarjeta, huella y rostro por persona (06/11/2026). */
.q-reloj-credenciales-boton { background:none; border:1px solid transparent; border-radius:12px; padding:4px; cursor:pointer; font:inherit; color:inherit; }
.q-reloj-credenciales-boton:hover,.q-reloj-credenciales-boton:focus-visible { border-color:#D1D5DB; background:rgba(15,147,117,.06); outline:none; }
.q-reloj-credenciales-boton:focus-visible { box-shadow:0 0 0 2px #0F9375; }
.q-reloj-cred-dialogo { max-width:760px; }
.q-reloj-cred-seccion { padding:16px 0; border-top:1px solid #D1D5DB; }
.q-reloj-cred-seccion:first-of-type { border-top:0; }
.q-reloj-cred-cabeza { display:flex; gap:14px; align-items:center; }
.q-reloj-cred-cabeza h4 { margin:0; font-size:15px; color:#0B2947; }
.q-reloj-cred-cabeza p { margin:2px 0 0; }
.q-reloj-cred-valor { font-weight:600; color:#0B2947; }
.q-reloj-cred-acciones { display:flex; flex-wrap:wrap; gap:8px; align-items:end; margin-top:12px; }
.q-reloj-cred-acciones a.q-button { text-decoration:none; }
.q-reloj-cred-dedo { display:grid; gap:4px; font-size:13px; color:#0B2947; }
.q-reloj-cred-dedo select { min-width:170px; }
.q-reloj-cred-espera,.q-reloj-cred-listo { display:flex; gap:8px; align-items:center; margin:12px 0 0; padding:10px 12px; border-radius:10px; }
.q-reloj-cred-espera { background:#E0F2F1; color:#0B2947; }
.q-reloj-cred-espera svg { animation:q-reloj-cred-pulso 1.4s ease-in-out infinite; }
.q-reloj-cred-listo { background:rgba(15,147,117,.12); color:#0B2947; }
.q-reloj-cred-foto { width:72px; height:96px; border-radius:10px; object-fit:cover; border:1px solid #D1D5DB; flex:none; }
.q-reloj-cred-foto-vacia { display:grid; place-items:center; color:#D1D5DB; background:#ECEDE7; }
@keyframes q-reloj-cred-pulso { 0%,100% { opacity:1; } 50% { opacity:.35; } }
@media (prefers-reduced-motion:reduce) { .q-reloj-cred-espera svg { animation:none; } }
body.qiwo-dark .q-reloj-cred-cabeza h4,body.qiwo-dark .q-reloj-cred-valor,body.qiwo-dark .q-reloj-cred-dedo { color:#ECEDE7; }
body.qiwo-dark .q-reloj-cred-seccion { border-top-color:rgba(209,213,219,.3); }
body.qiwo-dark .q-reloj-cred-espera { background:rgba(224,242,241,.14); color:#ECEDE7; }
body.qiwo-dark .q-reloj-cred-listo { background:rgba(15,147,117,.22); color:#ECEDE7; }
body.qiwo-dark .q-reloj-cred-foto-vacia { background:rgba(236,237,231,.08); color:rgba(236,237,231,.4); }
@media (max-width:600px) { .q-reloj-cred-acciones .q-button { flex:1 1 100%; justify-content:center; } .q-reloj-cred-dedo { flex:1 1 100%; } .q-reloj-cred-dedo select { width:100%; } }
/* Reloj: los 10 dedos (06/11/2026). */
.q-reloj-manos { display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-top:12px; }
.q-reloj-mano { display:grid; gap:6px; }
.q-reloj-mano-nombre { font-size:12px; color:#0B2947; opacity:.75; }
.q-reloj-dedos { display:flex; gap:6px; flex-wrap:wrap; }
.q-reloj-dedo { display:inline-flex; align-items:center; gap:4px; padding:6px 10px; border:1px solid #D1D5DB; border-radius:999px; background:#fff; color:#0B2947; font:inherit; font-size:13px; cursor:pointer; }
.q-reloj-dedo.registrado { background:rgba(15,147,117,.12); border-color:#0F9375; color:#0B2947; }
.q-reloj-dedo.registrado svg { color:#0F9375; }
.q-reloj-dedo.elegido { box-shadow:0 0 0 2px #0B2947; }
.q-reloj-dedo:focus-visible { outline:2px solid #0F9375; outline-offset:2px; }
.q-reloj-dedo:disabled { cursor:default; opacity:.6; }
body.qiwo-dark .q-reloj-mano-nombre { color:#ECEDE7; }
body.qiwo-dark .q-reloj-dedo { background:rgba(236,237,231,.08); color:#ECEDE7; border-color:rgba(209,213,219,.4); }
body.qiwo-dark .q-reloj-dedo.registrado { background:rgba(15,147,117,.25); border-color:#0F9375; }
body.qiwo-dark .q-reloj-dedo.elegido { box-shadow:0 0 0 2px #ECEDE7; }
@media (max-width:600px) { .q-reloj-manos { grid-template-columns:1fr; } }

/* Reporte diario por correo (Configuración de marcación, 07/11/2026). Campos blancos: es un formulario a la vista. */
.q-reporte-correo-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:12px; margin-top:14px; align-items:end; }
.q-reporte-correo .q-input { background:#fff; color:#0B2947; }
.q-reporte-correo-pdf { align-self:center; }
.q-reporte-correo-pie { display:flex; flex-wrap:wrap; align-items:flex-end; justify-content:space-between; gap:12px; margin-top:14px; }
.q-reporte-correo-acciones { display:flex; flex-wrap:wrap; align-items:flex-end; gap:8px; }
.q-reporte-correo-fecha { min-width:150px; }
.q-reporte-correo-ok { color:var(--q-success, #0F9375); }
.q-reporte-correo-envios { list-style:none; margin:14px 0 0; padding:12px 0 0; border-top:1px solid var(--q-border); display:grid; gap:8px; font-size:13px; color:var(--q-muted); }
.q-reporte-correo-envios li { display:flex; flex-wrap:wrap; align-items:center; gap:8px; }
.q-reporte-correo-envios small { flex-basis:100%; }

/* Reloj: memoria y limpieza (07/11/2026). */
.q-reloj-memoria { margin:24px 0; padding:20px; background:#ECEDE7; border-radius:14px; color:#0B2947; }
.q-reloj-memoria h4 { margin:14px 0 8px; font-size:14px; }
.q-reloj-memoria-cifras { display:grid; grid-template-columns:repeat(auto-fit,minmax(130px,1fr)); gap:8px; }
.q-reloj-memoria-cifras > div { background:#fff; border-radius:10px; padding:10px 12px; display:grid; gap:2px; }
.q-reloj-memoria-cifras span { font-size:12px; color:#52667D; }
.q-reloj-memoria-cifras strong { font-size:20px; }
.q-reloj-memoria-dias { display:flex; flex-wrap:wrap; align-items:flex-end; gap:10px; margin-top:16px; }
.q-reloj-memoria-dias .q-field { min-width:200px; flex:1 1 200px; color:#0B2947; }
.q-reloj-memoria .q-input { background:#fff; }
.q-reloj-memoria-cifras strong small { font-size:12px; font-weight:400; color:#52667D; }
/* Reporte por correo: configuración completa (07/11/2026). */
.q-reporte-correo-bloque { margin-top:16px; padding-top:14px; border-top:1px solid var(--q-border); }
.q-reporte-correo-bloque h3 { margin:0 0 8px; font-size:14px; font-weight:600; color:var(--q-ink); }
.q-reporte-correo-correos { display:grid; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:8px; margin-bottom:8px; }
.q-reporte-correo-correo { display:flex; gap:6px; align-items:center; }
.q-reporte-correo-correo .q-input { flex:1; min-width:0; }
.q-reporte-correo-dias { display:flex; flex-wrap:wrap; gap:6px; }
.q-reporte-correo-checks { display:flex; flex-wrap:wrap; gap:8px 20px; }
.q-reporte-correo .q-select { background:#fff; color:#0B2947; }

/* Personal — diálogos en modo oscuro (08/11/2026). Antes unos quedaban crema (regla global de
   diálogos), otros marino plano con campos crema: "medio pintados" (Jordy). Ahora todos usan la
   paleta en capas de la lista: diálogo = tarjeta, bloques internos = control, campos hundidos
   (más oscuros que el diálogo, borde visible) y lo activo en verde. Solo afecta a Personal. */
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay > .qiwo-modal-card,
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay :is(.qiwo-modal-header,.qiwo-modal-body,.qiwo-modal-footer) {
    background:var(--pd-tarjeta) !important; color:var(--pd-texto) !important; border-color:var(--pd-borde) !important;
}
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay > .qiwo-modal-card { border:1px solid var(--pd-borde) !important; box-shadow:0 24px 64px rgba(0,0,0,.55) !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay :is(h2,h3,h4,strong,label,.qiwo-label,.qiwo-label span,.q-perfil-identidad p,.q-perfil-galeria-cab,.q-perfil-pendiente,p) { color:var(--pd-texto) !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay :is(.pers-help,.qiwo-text-muted,.qiwo-form-hint,.qiwo-label-optional,.q-personal-sedes-opciones small,.q-personal-sedes-opciones span) { color:var(--pd-suave) !important; }
/* Bloques internos: historial, consecuencias de la baja, opciones de sedes, cargos, aviso de ayuda. */
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay :is(.q-personal-historial li,.q-personal-baja-consecuencias,.q-personal-sedes-opciones label,.pers-choice,.q-perfil-ayuda) {
    background:var(--pd-control) !important; color:var(--pd-texto) !important; border:1px solid var(--pd-borde) !important;
}
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay .pers-choice:hover { background:var(--pd-hover) !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay .pers-choice.pers-choice-selected.pers-choice-selected { background:var(--pd-hover) !important; border:2px solid #0F9375 !important; box-shadow:0 0 0 1px #0F9375 inset; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay .q-perfil-ayuda svg { color:var(--q-capa-acento); }
/* Botones: secundarios en capa de control, X discreta, el principal siempre verde. */
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay :is(.q-button:not(.q-button-primary):not(.q-perfil-elegir),.qiwo-btn-secondary) { background:var(--pd-control) !important; color:var(--pd-texto) !important; border:1px solid var(--pd-borde) !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay :is(.q-button:not(.q-button-primary):not(.q-perfil-elegir),.qiwo-btn-secondary):hover:not(:disabled) { background:var(--pd-hover) !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay .qiwo-modal-close { background:transparent !important; color:var(--pd-texto) !important; border:1px solid var(--pd-borde) !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay .qiwo-modal-close:hover:not(:disabled) { background:var(--pd-hover) !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay :is(.q-button-primary,.qiwo-btn-primary,.q-perfil-elegir) { background:#0F9375 !important; color:#FFFFFF !important; border:1px solid #0F9375 !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay :is(.admin-alert-error,.qiwo-modal-error) { background:rgba(220,38,38,.14) !important; color:#FECACA !important; border:1px solid rgba(220,38,38,.45) !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay input[type="checkbox"] { accent-color:#0F9375; color-scheme:dark; }
/* Campos: hundidos, más oscuros que el diálogo y con borde visible; foco verde. Mismo peso de selector
   que la regla general de campos en diálogos, con más contexto para ganarle solo aquí. */
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay :is(input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]):not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="file"]):not([type="range"]), textarea, select):not(:disabled):not([readonly]) {
    background:var(--q-capa-campo) !important; color:var(--pd-texto) !important; border:1px solid var(--q-capa-campo-borde) !important; color-scheme:dark;
}
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay :is(input, textarea)::placeholder { color:var(--pd-suave) !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .qiwo-dialog-overlay :is(input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]):not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="file"]):not([type="range"]), textarea, select):not(:disabled):not([readonly]):focus {
    border-color:#0F9375 !important; outline:2px solid #0F9375 !important; outline-offset:1px;
}
/* Hay campos fijados por ID en modo claro (el motivo de Sedes); su versión oscura también va por ID. */
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-personal-sedes-dialog #personal-sedes-motivo:not(:disabled):not([readonly]) {
    background:var(--q-capa-campo) !important; color:var(--pd-texto) !important; border:1px solid var(--q-capa-campo-borde) !important; color-scheme:dark;
}
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-personal-sedes-dialog #personal-sedes-motivo:not(:disabled):not([readonly]):focus { border-color:#0F9375 !important; outline:2px solid #0F9375 !important; }
/* Los textarea de los diálogos de Personal (detalle de la baja, motivo del traslado) quedaban aplastados
   a 42px por la altura fija de .q-input: se respeta rows y solo se agranda hacia abajo. */
.q-personal-marca .qiwo-dialog-overlay textarea.q-input { height:auto !important; min-height:88px !important; resize:vertical !important; }
/* Personal: "Opciones" sin borde (08/11/2026). Con 19 filas, 19 botones con borde eran lo más pesado de
   la tabla; ahora es texto con flecha y aparece la superficie solo al pasar el mouse o abrir el menú. */
body .admin-shell .admin-content .q-personal-marca .q-table .q-actions-cell .qiwo-row-actions-trigger { background:transparent !important; border-color:transparent !important; color:var(--q-capa-texto) !important; }
body .admin-shell .admin-content .q-personal-marca .q-table .q-actions-cell .qiwo-row-actions-trigger:is(:hover,[aria-expanded=true]) { background:var(--q-capa-hover) !important; border-color:var(--q-capa-borde) !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-table .q-actions-cell .qiwo-row-actions-trigger { background:transparent !important; border-color:transparent !important; color:var(--q-capa-texto) !important; }
body.qiwo-dark .admin-shell .admin-content .q-personal-marca .q-table .q-actions-cell .qiwo-row-actions-trigger:is(:hover,[aria-expanded=true]) { background:var(--q-capa-hover) !important; border-color:var(--q-capa-borde) !important; }
body .admin-shell .admin-content .q-personal-marca .q-table .q-actions-cell .qiwo-row-actions-menu { background:transparent !important; }

/* ═══════════ Estándar de módulo .q-marca (08/11/2026, ADR 0094). Lista del personal es el molde.
   Una pantalla migrada envuelve su contenido en .q-marca y usa las capas --q-capa-*; no escribe hex nuevos.
   Lo viejo de la pantalla se borra al migrarla. Primer módulo: Caja. ═══════════ */
.q-marca {
    --q-surface:var(--q-capa-tarjeta); --q-ink:var(--q-capa-texto); --q-border:var(--q-capa-borde); --q-muted:var(--q-capa-suave); --q-tint:var(--q-capa-hover);
    --qm-on:#0B2947; --qm-on-t:#FFFFFF; --qm-icono:#0B2947; --qm-icono-t:#FFFFFF; --qm-cab-t:#FFFFFF; --qm-elegido:color-mix(in srgb, #0F9375 12%, #FFFFFF);
    color:var(--q-capa-texto);
}
body.qiwo-dark .q-marca { --qm-on:#ECEDE7; --qm-on-t:#0B2947; --qm-icono:var(--q-capa-control); --qm-icono-t:#ECEDE7; --qm-cab-t:#ECEDE7; --qm-elegido:color-mix(in srgb, #0F9375 28%, #0B2947); }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .q-page-head-icon { background:var(--qm-icono); color:var(--qm-icono-t); }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca :is(h2, h3) { color:var(--q-capa-texto); }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca :is(.qiwo-table-card, .pers-resumen-card) { background:var(--q-capa-tarjeta) !important; color:var(--q-capa-texto) !important; border:1px solid var(--q-capa-borde) !important; border-radius:12px; box-shadow:none; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-label { color:var(--q-capa-texto) !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-input, body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-search-box { background:var(--q-capa-campo) !important; color:var(--q-capa-texto) !important; border:1px solid var(--q-capa-campo-borde) !important; border-radius:8px; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca :is(input.qiwo-input, select.qiwo-input) { min-height:42px; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-search-box input { background:transparent !important; color:var(--q-capa-texto) !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-input::placeholder, body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-search-box input::placeholder { color:var(--q-capa-suave); }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-btn-primary { background:#0F9375 !important; border-color:#0F9375 !important; color:#FFFFFF !important; border-radius:9px; font-weight:600; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-btn-primary:hover:not(:disabled) { background:color-mix(in srgb, #0F9375 86%, #0B2947) !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-btn-secondary { background:var(--q-capa-tarjeta) !important; border:1px solid var(--q-capa-borde) !important; color:var(--q-capa-texto) !important; border-radius:9px; font-weight:600; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-btn-secondary:hover:not(:disabled) { background:var(--q-capa-hover) !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-chip { min-height:36px; border:1px solid var(--q-capa-borde) !important; border-radius:20px; background:var(--q-capa-campo) !important; color:var(--q-capa-texto) !important; font-weight:500; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-chip-active { background:var(--qm-on) !important; border-color:var(--qm-on) !important; color:var(--qm-on-t) !important; font-weight:700; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-table thead th { background:var(--q-capa-cabecera) !important; color:var(--qm-cab-t) !important; border-bottom:2px solid #0F9375 !important; font-size:12px; font-weight:500; letter-spacing:normal; text-transform:none; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-table tbody td { background:var(--q-capa-tarjeta) !important; color:var(--q-capa-texto) !important; border-color:var(--q-capa-borde) !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-table tbody tr:hover td { background:var(--q-capa-hover) !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-row-actions-trigger { background:transparent !important; border-color:transparent !important; color:var(--q-capa-texto) !important; box-shadow:none; font-weight:700; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-row-actions-trigger:is(:hover, [aria-expanded=true]) { background:var(--q-capa-hover) !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca :is(.qiwo-empty-state-title, .qiwo-empty-state-desc, .qiwo-table-empty) { color:var(--q-capa-suave) !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-dialog-overlay .qiwo-modal-card, body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-dialog-overlay :is(.qiwo-modal-header, .qiwo-modal-body, .qiwo-modal-footer) { background:var(--q-capa-tarjeta) !important; color:var(--q-capa-texto) !important; border-color:var(--q-capa-borde) !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-dialog-overlay :is(h2, h3, label, p, dt, dd, strong, small) { color:var(--q-capa-texto) !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-dialog-overlay .qiwo-input { background:var(--q-capa-campo) !important; color:var(--q-capa-texto) !important; border-color:var(--q-capa-campo-borde) !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-dialog-overlay .qiwo-btn-secondary, body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-dialog-overlay .qiwo-modal-close { background:var(--q-capa-control) !important; color:var(--q-capa-texto) !important; border-color:var(--q-capa-borde) !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .qiwo-dialog-overlay .qiwo-btn-danger { background:var(--qm-on) !important; color:var(--qm-on-t) !important; border-color:var(--qm-on) !important; }
/* Caja: cobro. */
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-modo { display:flex; gap:7px; width:auto; padding:0; border:0; background:transparent; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-modo-indicador { display:none; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-modo button { min-height:36px; padding:7px 16px; border:1px solid var(--q-capa-borde); border-radius:20px; background:var(--q-capa-campo); color:var(--q-capa-texto); font-size:13px; font-weight:500; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-modo button[aria-pressed="true"] { background:var(--qm-on) !important; border-color:var(--qm-on) !important; color:var(--qm-on-t) !important; font-weight:700; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-cobro-resumen { gap:0; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-cobro-resumen > div { background:transparent !important; color:var(--q-capa-texto) !important; border-radius:0; border-inline-start:1px solid var(--q-capa-borde); padding:4px 16px; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-cobro-resumen > div:first-child { border-inline-start:0; padding-inline-start:0; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-cobro-resumen dt { color:var(--q-capa-suave); font-size:12px; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-cobro-resumen dd { font-size:18px; font-weight:600; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-cobro-cargo--elegido { background:var(--qm-elegido) !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-efectivo { background:transparent; padding:0; color:var(--q-capa-texto); }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-efectivo-vuelto { color:var(--q-capa-texto); font-size:15px; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-efectivo .cob-cobro-monto-campo { width:100%; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-cobro-total { background:transparent !important; border:0 !important; padding:0 0 4px; color:var(--q-capa-texto) !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-cobro-total strong { font-size:26px; color:var(--q-capa-texto); }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-cobro-mas { border-top:1px solid var(--q-capa-borde); padding-top:10px; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-cobro-mas > summary { display:flex; align-items:center; justify-content:space-between; gap:8px; min-height:36px; color:var(--q-capa-texto); font-weight:600; font-size:13px; cursor:pointer; list-style:none; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-cobro-mas > summary::-webkit-details-marker { display:none; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-cobro-mas > summary svg { transition:transform 160ms ease-out; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-cobro-mas[open] > summary svg { transform:rotate(180deg); }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-cobro-mas-cuerpo { display:grid; gap:12px; padding-top:10px; }
/* Caja: cierre. */
.cob-cierre-barra { display:flex; flex-wrap:wrap; align-items:end; gap:12px; margin:0 0 14px; padding:14px; min-width:0; border:1px solid var(--q-capa-borde); border-radius:12px; background:var(--q-capa-tarjeta); }
.cob-cierre-campo { display:grid; gap:6px; flex:1 1 180px; min-width:0; }
.cob-cierre-titulo { margin:18px 0 10px; font-size:18px; font-weight:600; color:var(--q-capa-texto); }
.cob-cierre-meta { margin:0 0 14px; color:var(--q-capa-suave); font-size:13px; }
.cob-cierre-meta a { color:var(--q-capa-texto); }
.cob-cierre-nota { margin:0 0 12px; padding:10px 14px; border-radius:10px; background:var(--q-capa-hover); color:var(--q-capa-texto); font-size:13px; }
.cob-cierre-arqueo { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(0,1.5fr) auto; align-items:end; gap:12px; min-width:0; margin:0 0 14px; padding:14px; border:1px solid var(--q-capa-borde); border-radius:12px; background:var(--q-capa-tarjeta); }
.cob-cierre-diferencia { display:flex; align-items:center; min-height:42px; padding:0 12px; border-radius:8px; background:var(--q-capa-hover); color:var(--q-capa-texto); font-weight:600; font-size:13px; }
.cob-cierre-arqueo .admin-alert-error { grid-column:1/-1; margin:0; }
.cob-cierre-seccion-cabeza { margin:0; padding:12px 14px; font-size:15px; font-weight:600; color:var(--q-capa-texto); }
.cob-cierre-acciones { display:flex; flex-wrap:wrap; gap:6px; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-cierre-pagos { margin:0 0 14px; padding:0; overflow:hidden; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-cierre-pagos table { min-width:720px; }
.cob-cierre-pagos td:is(:nth-child(1), :nth-child(3), :nth-child(4), :nth-child(5)) { white-space:nowrap; }
@media (max-width:767px) { .cob-cierre-arqueo { grid-template-columns:minmax(0,1fr); } .cob-cierre-campo { flex-basis:100%; } .cob-cierre-barra .qiwo-btn-secondary { width:100%; } }
/* Caja: voucher, contadores y tabla de conceptos. */
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-bandeja-cargo { background:var(--q-capa-control) !important; color:var(--q-capa-texto) !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-bandeja-cargo :is(strong, small, span, div) { color:inherit !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-adm-contador { background:var(--q-capa-hover); color:var(--q-capa-texto); }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-adm-tabla-conceptos { table-layout:auto; min-width:0; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-adm-tabla-conceptos :is(th, td) { overflow-wrap:normal; word-break:normal; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-adm-tabla-conceptos td:first-child, body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-adm-tabla-conceptos td:first-child * { white-space:nowrap; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-adm-tabla-conceptos th.admin-col-principal { min-width:150px; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-adm-codigo { background:var(--q-capa-hover) !important; color:var(--q-capa-texto) !important; font-size:11px; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .q-marca .cob-adm-tabla-conceptos :is(th, td) { padding-left:8px; padding-right:8px; }

/* ═══════════ Caja táctil (08/11/2026, ADR 0095): pantalla completa, botones grandes, solo modo claro.
   Pensada para pantalla táctil y personas mayores. Solo los colores de marca. ═══════════ */
body .ct-pantalla { position:fixed; inset:0; z-index:1500; display:flex; flex-direction:column; height:100vh; height:100dvh; overflow:hidden; background:#ECEDE7; color:#0B2947; font-size:20px; line-height:1.35; color-scheme:light; }
body .ct-pantalla * { box-sizing:border-box; }
body .ct-pantalla .ct-ico { width:1.2em; height:1.2em; flex:none; }
body .ct-pantalla .ct-cabecera { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:12px; padding:10px 20px; background:#0B2947; color:#FFFFFF; }
body .ct-pantalla .ct-cabecera-titulo { display:flex; align-items:center; gap:14px; min-width:0; }
body .ct-pantalla .ct-cabecera h1 { margin:0; font-size:26px; font-weight:800; color:#FFFFFF; }
body .ct-pantalla .ct-cabecera p { margin:0; font-size:15px; color:#D1D5DB; }
body .ct-pantalla .ct-logo .ct-ico { width:38px; height:38px; color:#FFFFFF; }
body .ct-pantalla .ct-prueba { padding:6px 12px; border-radius:20px; background:#E0F2F1; color:#0B2947; font-size:14px; font-weight:700; }
body .ct-pantalla .ct-cabecera-acciones { display:flex; flex-wrap:wrap; gap:10px; }
body .ct-pantalla .ct-boton { display:inline-flex; align-items:center; justify-content:center; gap:10px; min-height:56px; padding:0 22px; border:2px solid transparent; border-radius:14px; font:inherit; font-size:19px; font-weight:700; text-decoration:none; cursor:pointer; }
body .ct-pantalla .ct-boton-claro { background:#FFFFFF; color:#0B2947; border-color:#D1D5DB; }
body .ct-pantalla .ct-cabecera .ct-boton-claro { background:transparent; color:#FFFFFF; border-color:color-mix(in srgb, #FFFFFF 45%, transparent); }
body .ct-pantalla .ct-boton-verde { background:#0F9375; color:#FFFFFF; border-color:#0F9375; }
body .ct-pantalla .ct-boton-alto { width:100%; min-height:76px; font-size:23px; }
body .ct-pantalla .ct-boton:disabled { opacity:.45; cursor:not-allowed; }
body .ct-pantalla :is(.ct-boton, .ct-tarjeta, .ct-teclado button, .ct-cantidad button):focus-visible { outline:4px solid #0F9375; outline-offset:2px; }
body .ct-pantalla .ct-pasos { display:flex; gap:8px; margin:0; padding:10px 20px; list-style:none; background:#FFFFFF; border-bottom:1px solid #D1D5DB; }
body .ct-pantalla .ct-pasos li { flex:1; display:flex; align-items:center; gap:10px; font-size:17px; font-weight:600; color:color-mix(in srgb, #0B2947 60%, #D1D5DB); }
body .ct-pantalla .ct-pasos li > span { display:grid; place-items:center; width:36px; height:36px; border:2px solid #D1D5DB; border-radius:50%; font-weight:800; flex:none; }
body .ct-pantalla .ct-pasos li.is-actual { color:#0B2947; }
body .ct-pantalla .ct-pasos li.is-actual > span { background:#0B2947; border-color:#0B2947; color:#FFFFFF; }
body .ct-pantalla .ct-pasos li.is-hecho > span { background:#0F9375; border-color:#0F9375; color:#FFFFFF; }
body .ct-pantalla .ct-pasos li > span .ct-ico { width:20px; height:20px; }
body .ct-pantalla .ct-cuerpo { flex:1; min-height:0; display:grid; grid-template-columns:minmax(0,1fr) 380px; }
body .ct-pantalla .ct-panel { min-height:0; overflow:auto; padding:18px 22px 28px; }
body .ct-pantalla .ct-titulo { margin:0 0 6px; font-size:30px; font-weight:800; color:#0B2947; }
body .ct-pantalla .ct-subtitulo { margin:18px 0 10px; font-size:21px; font-weight:800; color:#0B2947; }
body .ct-pantalla .ct-ayuda { margin:0 0 14px; font-size:19px; color:color-mix(in srgb, #0B2947 78%, #D1D5DB); }
body .ct-pantalla .ct-grande { font-size:24px; font-weight:600; }
body .ct-pantalla .ct-elegir-modo { display:flex; flex-wrap:wrap; gap:10px; margin:0 0 16px; }
body .ct-pantalla .ct-rejilla { display:grid; grid-template-columns:repeat(auto-fill, minmax(200px, 1fr)); gap:12px; }
body .ct-pantalla .ct-tarjeta { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:6px; min-height:110px; padding:14px; border:2px solid #D1D5DB; border-radius:16px; background:#FFFFFF; color:#0B2947; font:inherit; text-align:center; cursor:pointer; transition:transform 120ms ease-out, border-color 120ms ease-out; }
body .ct-pantalla .ct-tarjeta:active { transform:scale(.97); }
body .ct-pantalla .ct-tarjeta strong { font-size:20px; font-weight:800; }
body .ct-pantalla .ct-tarjeta small { font-size:16px; color:color-mix(in srgb, #0B2947 75%, #D1D5DB); }
body .ct-pantalla .ct-tarjeta b { font-size:24px; font-weight:800; }
body .ct-pantalla .ct-tarjeta.is-marcada { border-color:#0F9375; background:color-mix(in srgb, #0F9375 12%, #FFFFFF); }
body .ct-pantalla .ct-check .ct-ico { width:36px; height:36px; color:#D1D5DB; }
body .ct-pantalla .is-marcada .ct-check .ct-ico { color:#0F9375; }
body .ct-pantalla .ct-lista { display:grid; grid-template-columns:repeat(auto-fill, minmax(280px, 1fr)); gap:12px; }
body .ct-pantalla .ct-alumno { flex-direction:row; justify-content:flex-start; min-height:86px; text-align:left; }
body .ct-pantalla .ct-alumno-texto { display:flex; flex-direction:column; gap:2px; min-width:0; }
body .ct-pantalla .ct-avatar { display:grid; place-items:center; width:54px; height:54px; border-radius:50%; background:#0B2947; color:#FFFFFF; font-size:19px; font-weight:800; flex:none; }
body .ct-pantalla .ct-dni { display:grid; grid-template-columns:minmax(0, 380px) minmax(0, 1fr); gap:22px; align-items:start; }
body .ct-pantalla .ct-visor { display:flex; align-items:center; justify-content:center; min-height:66px; margin:0 0 12px; border:2px solid #0B2947; border-radius:14px; background:#FFFFFF; font-size:34px; font-weight:800; letter-spacing:.08em; }
body .ct-pantalla .ct-teclado { display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:10px; }
body .ct-pantalla .ct-teclado button { display:grid; place-items:center; min-height:72px; border:2px solid #D1D5DB; border-radius:14px; background:#FFFFFF; color:#0B2947; font:inherit; font-size:30px; font-weight:800; cursor:pointer; }
body .ct-pantalla .ct-teclado button:active { transform:scale(.97); }
body .ct-pantalla .ct-teclado .ct-tecla-suave { background:#ECEDE7; font-size:17px; }
body .ct-pantalla .ct-teclado .ct-tecla-suave .ct-ico { width:32px; height:32px; }
body .ct-pantalla .ct-columna { display:flex; flex-direction:column; gap:12px; }
body .ct-pantalla .ct-pie { margin-top:18px; }
body .ct-pantalla .ct-centro { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:14px; min-height:260px; text-align:center; }
body .ct-pantalla .ct-centro > .ct-ico { width:72px; height:72px; color:#0F9375; }
body .ct-pantalla .ct-girando { width:48px; height:48px; border:5px solid #D1D5DB; border-top-color:#0F9375; border-radius:50%; animation:ct-gira .9s linear infinite; }
@keyframes ct-gira { to { transform:rotate(360deg); } }
@media (prefers-reduced-motion:reduce) { body .ct-pantalla .ct-girando { animation-duration:3s; } body .ct-pantalla .ct-tarjeta { transition:none; } }
body .ct-pantalla .ct-error { display:flex; align-items:center; gap:12px; margin:0 0 14px; padding:14px 18px; border-radius:14px; background:#0B2947; color:#FFFFFF; font-size:19px; text-align:left; }
body .ct-pantalla .ct-error .ct-ico { width:28px; height:28px; }
body .ct-pantalla .ct-rejilla-medios { grid-template-columns:repeat(auto-fill, minmax(220px, 1fr)); }
body .ct-pantalla .ct-medio { min-height:150px; }
body .ct-pantalla .ct-medio-icono .ct-ico { width:60px; height:60px; color:#0B2947; }
body .ct-pantalla .ct-billetes { grid-template-columns:repeat(auto-fill, minmax(170px, 1fr)); }
body .ct-pantalla .ct-billete-dibujo { display:grid; place-items:center; width:100%; max-width:150px; height:64px; border:2px dashed #0F9375; border-radius:10px; background:color-mix(in srgb, #0F9375 16%, #FFFFFF); color:#0B2947; font-size:26px; font-weight:800; }
body .ct-pantalla .ct-vuelto { display:grid; grid-template-columns:1fr 1fr auto; gap:12px; margin-top:16px; }
body .ct-pantalla .ct-vuelto > div { display:flex; flex-direction:column; justify-content:center; padding:12px 18px; border:2px solid #D1D5DB; border-radius:14px; background:#FFFFFF; }
body .ct-pantalla .ct-vuelto > div span { font-size:17px; }
body .ct-pantalla .ct-vuelto > div b { font-size:34px; font-weight:800; }
body .ct-pantalla .ct-vuelto > div.is-ok { border-color:#0F9375; background:color-mix(in srgb, #0F9375 12%, #FFFFFF); }
body .ct-pantalla .ct-producto img { width:96px; height:96px; object-fit:cover; border-radius:12px; }
body .ct-pantalla .ct-producto-icono svg { width:56px; height:56px; color:#0B2947; }
body .ct-pantalla .ct-talla { font-size:32px !important; }
body .ct-pantalla .ct-boleta { display:flex; flex-direction:column; gap:12px; min-height:0; overflow:auto; padding:18px; border-left:1px solid #D1D5DB; background:#FFFFFF; }
body .ct-pantalla .ct-boleta-alumno { display:flex; align-items:center; gap:12px; }
body .ct-pantalla .ct-boleta-alumno strong { display:block; font-size:19px; }
body .ct-pantalla .ct-boleta-alumno small { font-size:15px; color:color-mix(in srgb, #0B2947 75%, #D1D5DB); }
body .ct-pantalla .ct-boleta-lineas { flex:1; min-height:0; overflow:auto; display:flex; flex-direction:column; margin:0; padding:0; list-style:none; }
body .ct-pantalla .ct-boleta-lineas li { display:grid; grid-template-columns:minmax(0,1fr) auto; align-items:center; gap:8px; padding:9px 0; border-bottom:1px solid #ECEDE7; font-size:17px; }
body .ct-pantalla .ct-boleta-lineas li:has(.ct-cantidad) { grid-template-columns:minmax(0,1fr) auto auto; }
body .ct-pantalla .ct-boleta-vacia { color:color-mix(in srgb, #0B2947 70%, #D1D5DB); border:0 !important; }
body .ct-pantalla .ct-cantidad { display:flex; align-items:center; gap:8px; }
body .ct-pantalla .ct-cantidad button { width:46px; height:46px; border:2px solid #D1D5DB; border-radius:12px; background:#FFFFFF; color:#0B2947; font:inherit; font-size:24px; font-weight:800; cursor:pointer; }
body .ct-pantalla .ct-boleta-medio { display:flex; align-items:center; gap:8px; margin:0; font-size:18px; font-weight:700; }
body .ct-pantalla .ct-boleta-total { display:flex; align-items:baseline; justify-content:space-between; padding-top:10px; border-top:2px solid #0B2947; }
body .ct-pantalla .ct-boleta-total b { font-size:38px; font-weight:800; }
body .ct-pantalla .ct-listo-icono .ct-ico { width:96px; height:96px; color:#0F9375; }
body .ct-pantalla .ct-recibo { width:min(100%, 560px); font-size:16px; text-align:left; }
@media (max-width:1100px) { body .ct-pantalla .ct-cuerpo { grid-template-columns:minmax(0,1fr) 320px; } body .ct-pantalla .ct-boleta-total b { font-size:32px; } }
@media (max-width:820px) {
    body .ct-pantalla { font-size:18px; }
    body .ct-pantalla .ct-cabecera { padding:8px 12px; gap:8px; }
    body .ct-pantalla .ct-cabecera h1 { font-size:22px; }
    body .ct-pantalla .ct-cabecera p, body .ct-pantalla .ct-logo { display:none; }
    body .ct-pantalla .ct-prueba { font-size:12px; padding:4px 10px; }
    body .ct-pantalla .ct-cabecera .ct-boton { min-height:44px; padding:0 12px; font-size:15px; }
    body .ct-pantalla .ct-pasos { padding:8px 12px; }
    body .ct-pantalla .ct-pasos li { justify-content:center; font-size:0; gap:0; }
    body .ct-pantalla .ct-cuerpo { display:flex; flex-direction:column; }
    body .ct-pantalla .ct-panel { flex:1; padding:12px 14px 20px; }
    body .ct-pantalla .ct-titulo { font-size:24px; }
    body .ct-pantalla .ct-rejilla, body .ct-pantalla .ct-rejilla-medios, body .ct-pantalla .ct-billetes { grid-template-columns:repeat(2, minmax(0,1fr)); gap:10px; }
    body .ct-pantalla .ct-tarjeta { min-height:96px; padding:10px; }
    body .ct-pantalla .ct-medio { min-height:120px; }
    body .ct-pantalla .ct-lista, body .ct-pantalla .ct-dni { grid-template-columns:minmax(0,1fr); }
    body .ct-pantalla .ct-vuelto { grid-template-columns:1fr 1fr; }
    body .ct-pantalla .ct-vuelto > button { grid-column:1 / -1; }
    body .ct-pantalla .ct-vuelto > div b { font-size:28px; }
    body .ct-pantalla .ct-boleta { flex:none; max-height:46dvh; gap:8px; padding:10px 14px 12px; border-left:0; border-top:2px solid #D1D5DB; }
    body .ct-pantalla .ct-boleta-lineas { max-height:18dvh; }
    body .ct-pantalla .ct-boleta-alumno .ct-avatar { width:40px; height:40px; font-size:16px; }
    body .ct-pantalla .ct-boleta-total b { font-size:28px; }
    body .ct-pantalla .ct-boton-alto { min-height:64px; font-size:20px; }
}
/* Caja táctil: siempre clara, aunque el panel esté en modo oscuro (le gana a las reglas oscuras globales). */
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .ct-pantalla :is(.ct-teclado button, .ct-cantidad button, .ct-tarjeta, .ct-boton-claro) { background:#FFFFFF !important; color:#0B2947 !important; border-color:#D1D5DB !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .ct-pantalla .ct-teclado .ct-tecla-suave { background:#ECEDE7 !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .ct-pantalla .ct-tarjeta.is-marcada { background:color-mix(in srgb, #0F9375 12%, #FFFFFF) !important; border-color:#0F9375 !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .ct-pantalla .ct-boton-verde { background:#0F9375 !important; color:#FFFFFF !important; border-color:#0F9375 !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .ct-pantalla .ct-recibo .cob-recibo-ticket .qiwo-btn-primary { min-height:72px; padding:0 28px; background:#0B2947 !important; color:#FFFFFF !important; border-color:#0B2947 !important; font-size:21px; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .ct-pantalla .ct-recibo .cob-recibo-papel button[aria-pressed="true"] { background:#0B2947 !important; color:#FFFFFF !important; border-color:#0B2947 !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .ct-pantalla .ct-recibo .cob-recibo { background:#FFFFFF !important; color:#0B2947 !important; border:1px solid #D1D5DB !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .ct-pantalla .ct-recibo :is(a, button) { min-height:52px; background:#FFFFFF !important; color:#0B2947 !important; border:2px solid #D1D5DB !important; border-radius:12px; font-size:17px; font-weight:700; opacity:1 !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .ct-pantalla .ct-recibo :is(p, span, strong, small, h2, h3) { color:#0B2947 !important; }

/* Ticket de Caja: imprime con la impresora que tenga el equipo */
.cob-recibo-ticket { display:flex; flex-wrap:wrap; align-items:center; gap:12px; }
.cob-recibo-ticket .qiwo-btn-primary { display:inline-flex; align-items:center; gap:8px; }
.cob-recibo-papel { display:inline-flex; align-items:center; gap:6px; font-size:13px; }
.cob-recibo-papel button { min-height:36px; padding:0 12px; border:1px solid #D1D5DB; border-radius:8px; background:#FFFFFF; color:#0B2947; font:inherit; cursor:pointer; }
.cob-recibo-papel button[aria-pressed="true"] { background:#0B2947; border-color:#0B2947; color:#FFFFFF; }

/* Las reglas globales de botones pintan de blanco estos controles en Caja; aqui manda su estado */
body:is(.qiwo-dark, :not(.qiwo-dark)) .cob-recibo-ticket .qiwo-btn-primary { background:#0F9375 !important; border-color:#0F9375 !important; color:#FFFFFF !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .cob-recibo-papel button { background:#FFFFFF !important; border-color:#D1D5DB !important; color:#0B2947 !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .cob-recibo-papel button[aria-pressed="true"] { background:#0B2947 !important; border-color:#0B2947 !important; color:#FFFFFF !important; }

/* Lista del personal: foto en grande al tocar el avatar (dialogo clase 2) */
.q-foto-boton { display:inline-flex; flex:0 0 40px; padding:0; border:0; border-radius:50%; background:none; cursor:zoom-in; }
.q-foto-boton:hover .q-foto-personal, .q-foto-boton:focus-visible .q-foto-personal { box-shadow:0 0 0 2px #0F9375; }
body .qiwo-dialog-overlay > .qiwo-modal-card.q-ficha-rapida { position:relative; display:grid; grid-template-columns:minmax(0,240px) minmax(0,1fr); max-width:640px; width:100%; overflow:hidden; }
.q-ficha-cerrar { position:absolute; top:10px; right:10px; z-index:1; }
.q-ficha-foto { display:flex; align-items:center; justify-content:center; padding:20px; background:#0B2947; }
.q-ficha-foto .q-foto-personal { flex:none; width:200px; height:260px; border-radius:12px; font-size:56px; }
.q-ficha-datos { min-width:0; padding:20px; color:#0B2947; }
.q-ficha-datos h3 { margin:0; padding-right:40px; font-size:19px; overflow-wrap:anywhere; }
.q-ficha-cargo { margin:2px 0 14px; font-size:14px; }
.q-ficha-datos dl { display:grid; grid-template-columns:96px minmax(0,1fr); gap:8px 10px; margin:0; font-size:14px; }
.q-ficha-datos dt { font-weight:600; }
.q-ficha-datos dd { margin:0; overflow-wrap:anywhere; }
.q-ficha-credenciales { display:flex; flex-wrap:wrap; gap:6px; }
.q-ficha-credenciales span { padding:2px 10px; border-radius:999px; background:#0F9375; color:#FFFFFF; font-size:12px; }
.q-ficha-credenciales .q-ficha-sin { background:#D1D5DB; color:#0B2947; }
.q-ficha-acciones { margin-top:16px; }
body.qiwo-dark .q-ficha-datos, body.qiwo-dark .q-ficha-datos h3 { color:#ECEDE7; }
@media (max-width:600px) {
  body .qiwo-dialog-overlay > .qiwo-modal-card.q-ficha-rapida { grid-template-columns:minmax(0,1fr); }
  .q-ficha-foto .q-foto-personal { width:150px; height:190px; }
}

/* Caja táctil, diseño amable (08/11/2026). El color vive en las ilustraciones; botones y fondos siguen en marca. */
body .ct-pantalla { background:color-mix(in srgb, #ECEDE7 55%, #FFFFFF); }
body .ct-pantalla ::selection { background:#0F9375; color:#FFFFFF; }
body .ct-pantalla .ct-dibujo { display:block; width:64px; height:64px; flex:none; }
body .ct-pantalla .ct-cabecera { padding:12px 24px; background:#FFFFFF; color:#0B2947; box-shadow:0 2px 10px rgb(11 41 71 / .06); position:relative; z-index:1; }
body .ct-pantalla .ct-cabecera h1 { font-size:25px; font-weight:700; color:#0B2947; }
body .ct-pantalla .ct-cabecera p { font-size:15px; color:#0B2947; }
body .ct-pantalla .ct-logo .ct-dibujo { width:50px; height:50px; }
body .ct-pantalla .ct-logo img { display:block; width:auto; max-width:64px; height:54px; object-fit:contain; }
body .ct-pantalla .ct-boton { border-width:1px; font-weight:600; }
body .ct-pantalla .ct-pasos { gap:6px; padding:12px 24px 0; background:transparent; border:0; }
body .ct-pantalla .ct-pasos li { position:relative; flex-direction:row; padding-bottom:12px; font-size:16px; color:#0B2947; }
body .ct-pantalla .ct-pasos li::after { content:""; position:absolute; left:0; right:0; bottom:0; height:7px; border-radius:4px; background:#D1D5DB; }
body .ct-pantalla .ct-pasos li.is-actual::after, body .ct-pantalla .ct-pasos li.is-hecho::after { background:#0F9375; }
body .ct-pantalla .ct-pasos li > span { width:30px; height:30px; border-width:1px; font-size:15px; background:#FFFFFF; }
body .ct-pantalla .ct-pasos li.is-actual { font-weight:700; }
body .ct-pantalla .ct-panel { padding:16px 24px 28px; }
body .ct-pantalla .ct-titulo { font-size:31px; font-weight:700; letter-spacing:-.01em; }
body .ct-pantalla .ct-ayuda { color:#0B2947; }
body .ct-pantalla .ct-encabezado { display:flex; flex-wrap:wrap; align-items:flex-start; justify-content:space-between; gap:12px; margin-bottom:6px; }
body .ct-pantalla .ct-tarjeta { border-width:1px; border-radius:18px; box-shadow:0 3px 12px rgb(11 41 71 / .07); transition:transform .12s cubic-bezier(.16,1,.3,1), background-color .15s, box-shadow .15s; }
body .ct-pantalla .ct-tarjeta strong { font-weight:700; }
body .ct-pantalla .ct-tarjeta small { color:#0B2947; }
body .ct-pantalla .ct-tarjeta b { font-weight:700; }
body .ct-pantalla .ct-niveles { display:grid; grid-template-columns:repeat(auto-fit, minmax(170px, 1fr)); gap:14px; margin-bottom:14px; }
body .ct-pantalla .ct-nivel { min-height:136px; padding:12px; }
body .ct-pantalla .ct-nivel .ct-dibujo { width:70px; height:70px; }
body .ct-pantalla .ct-nivel strong { font-size:21px; }
body .ct-pantalla .ct-grados { display:grid; grid-template-columns:repeat(auto-fill, minmax(124px, 1fr)); gap:12px; }
body .ct-pantalla .ct-grado { min-height:92px; padding:8px; gap:2px; }
body .ct-pantalla .ct-grado strong { font-size:27px; }
body .ct-pantalla .ct-alumno { min-height:92px; gap:14px; }
body .ct-pantalla .ct-alumno:nth-child(odd) .ct-avatar { background:#0F9375; }
body .ct-pantalla .ct-cargos { grid-template-columns:repeat(auto-fill, minmax(290px, 1fr)); }
body .ct-pantalla .ct-cargo { flex-direction:row; justify-content:flex-start; gap:14px; min-height:112px; text-align:left; }
body .ct-pantalla .ct-mes { flex:none; width:66px; border-radius:12px; overflow:hidden; background:#ECEDE7; text-align:center; }
body .ct-pantalla .ct-mes b { display:block; padding:3px 0; background:#0B2947; color:#FFFFFF; font-size:14px; font-weight:700; letter-spacing:.04em; }
body .ct-pantalla .ct-mes i { display:block; padding:4px 0 6px; font-style:normal; font-size:28px; font-weight:700; line-height:1.2; }
body .ct-pantalla .ct-cargo-texto { flex:1; min-width:0; display:flex; flex-direction:column; align-items:flex-start; gap:2px; }
body .ct-pantalla .ct-cargo-texto strong { font-size:18px; line-height:1.2; }
body .ct-pantalla .ct-cargo-texto b { font-size:23px; }
body .ct-pantalla .ct-cargo-texto small { font-size:15px; }
body .ct-pantalla .ct-cargo-texto small.ct-vencido { padding:2px 10px; border-radius:999px; background:#FEF3A0; color:#854D0E; font-weight:600; }
body .ct-pantalla .ct-rejilla-medios { grid-template-columns:repeat(3, minmax(0, 1fr)); gap:14px; }
body .ct-pantalla .ct-medio { min-height:170px; }
body .ct-pantalla .ct-medio-icono .ct-dibujo { width:92px; height:92px; }
body .ct-pantalla .ct-medio strong { font-size:22px; }
body .ct-pantalla .ct-billete-dibujo { border:0; color:#FFFFFF; box-shadow:inset 0 0 0 3px rgb(255 255 255 / .35); }
body .ct-pantalla .ct-b10 { background:#00936B; }
body .ct-pantalla .ct-b20 { background:#B5651D; }
body .ct-pantalla .ct-b50 { background:#C2452D; }
body .ct-pantalla .ct-b100 { background:#2878D0; }
body .ct-pantalla .ct-b200 { background:#9A4F96; }
body .ct-pantalla .ct-boleta { padding:16px 20px 20px; border:0; background:transparent; }
body .ct-pantalla .ct-boleta-papel { position:relative; flex:1; min-height:0; display:flex; flex-direction:column; gap:12px; padding:18px 18px 16px; margin-bottom:12px; border-radius:18px 18px 0 0; background:#FFFFFF; box-shadow:0 3px 12px rgb(11 41 71 / .07); }
body .ct-pantalla .ct-boleta-papel::after { content:""; position:absolute; left:0; right:0; bottom:-11px; height:12px; background:linear-gradient(-45deg, transparent 8px, #FFFFFF 0) 0 0 / 16px 16px repeat-x, linear-gradient(45deg, transparent 8px, #FFFFFF 0) 0 0 / 16px 16px repeat-x; }
body .ct-pantalla .ct-boleta-total { border-top:2px dashed #D1D5DB; }
body .ct-pantalla .ct-boleta-total b { font-weight:700; }
body .ct-pantalla .ct-boleta-medio .ct-ico { width:24px; height:24px; }
body .ct-pantalla .ct-listo-icono .ct-dibujo { width:120px; height:120px; }
body .ct-pantalla .ct-aparece .ct-dibujo { animation:ct-aparece .55s cubic-bezier(.16,1,.3,1) both; }
@keyframes ct-aparece { from { transform:scale(.6); opacity:.4; } to { transform:none; opacity:1; } }
@media (prefers-reduced-motion:reduce) { body .ct-pantalla .ct-aparece .ct-dibujo { animation:none; } }
body .ct-pantalla .ct-cuerpo:not(:has(.ct-boleta)) { grid-template-columns:minmax(0,1fr); }
body .ct-pantalla .ct-cargo-texto small.ct-vencido { padding:2px 8px; font-size:14px; white-space:nowrap; }
body .ct-pantalla .ct-cargo { gap:10px; padding:12px; }
body .ct-pantalla .ct-listo { gap:8px; min-height:0; }
body .ct-pantalla .ct-listo .ct-dibujo { width:84px; height:84px; }
body .ct-pantalla .ct-listo .ct-titulo { margin:0; }
body .ct-pantalla .ct-listo .ct-grande { margin:0; }
body .ct-pantalla .ct-listo .ct-recibo { width:min(100%, 720px); }
body .ct-pantalla .ct-listo .ct-recibo .cob-recibo { margin:6px 0; padding:14px 18px; }
body .ct-pantalla .ct-listo > .ct-boton-alto { width:min(100%, 720px); }
@media (max-width:1100px) { body .ct-pantalla .ct-rejilla-medios { grid-template-columns:repeat(2, minmax(0, 1fr)); } }
@media (max-width:820px) {
    body .ct-pantalla .ct-cabecera { padding:8px 12px; }
    body .ct-pantalla .ct-cabecera h1 { font-size:20px; }
    body .ct-pantalla .ct-pasos { padding:8px 12px 0; }
    body .ct-pantalla .ct-pasos li { padding-bottom:9px; }
    body .ct-pantalla .ct-panel { padding:12px 14px 20px; }
    body .ct-pantalla .ct-titulo { font-size:25px; }
    body .ct-pantalla .ct-encabezado .ct-boton { width:100%; }
    body .ct-pantalla .ct-niveles { grid-template-columns:repeat(3, minmax(0, 1fr)); gap:8px; }
    body .ct-pantalla .ct-nivel { min-height:112px; padding:8px 4px; }
    body .ct-pantalla .ct-nivel .ct-dibujo { width:50px; height:50px; }
    body .ct-pantalla .ct-nivel strong { font-size:16px; }
    body .ct-pantalla .ct-nivel small { font-size:13px; }
    body .ct-pantalla .ct-grados { grid-template-columns:repeat(3, minmax(0, 1fr)); gap:8px; }
    body .ct-pantalla .ct-cargos { grid-template-columns:minmax(0, 1fr); }
    body .ct-pantalla .ct-medio { min-height:128px; }
    body .ct-pantalla .ct-medio-icono .ct-dibujo { width:64px; height:64px; }
    body .ct-pantalla .ct-boleta { padding:8px 14px 12px; background:#FFFFFF; border-top:1px solid #D1D5DB; }
    body .ct-pantalla .ct-boleta-papel { gap:8px; padding:0; margin:0; border-radius:0; box-shadow:none; }
    body .ct-pantalla .ct-boleta-papel::after { display:none; }
}

/* Caja: buscador, selector de papel con dibujo y visor propio del PDF (08/11/2026) */
body .ct-pantalla { -webkit-user-select:none; user-select:none; }
body .ct-pantalla .ct-busca-acciones { display:flex; flex-wrap:wrap; gap:10px; }
body .ct-pantalla .ct-busqueda { display:block; width:100%; max-width:760px; min-height:68px; margin:0 0 14px; padding:0 20px; border:1px solid #D1D5DB; border-radius:16px; background:#FFFFFF; color:#0B2947; font:inherit; font-size:24px; -webkit-user-select:text; user-select:text; }
body .ct-pantalla .ct-busqueda:focus { outline:3px solid #0F9375; outline-offset:1px; border-color:#0F9375; }
.admin-hub-card-icon .ct-dibujo { display:block; width:36px; height:36px; }
.cob-recibo-papeles { display:flex; flex-wrap:wrap; gap:8px; }
.cob-recibo-papeles button { display:flex; align-items:center; gap:8px; min-height:68px; padding:6px 12px 6px 6px; border:1px solid #D1D5DB; border-radius:12px; background:#FFFFFF; color:#0B2947; font:inherit; text-align:left; cursor:pointer; }
.cob-recibo-papeles svg { width:40px; height:56px; flex:none; }
.cob-recibo-papeles b { display:block; font-size:15px; }
.cob-recibo-papeles small { display:block; font-size:12px; }
.cob-recibo-papeles button[aria-checked="true"] { background:#E7F5F1; border-color:#0F9375; box-shadow:inset 0 0 0 1px #0F9375; }
.cob-recibo-papeles button:focus-visible { outline:3px solid #0F9375; outline-offset:2px; }
.cob-recibo-destino { margin:0; font-size:13px; font-weight:600; overflow-wrap:anywhere; }
.cob-recibo-estado { padding:8px 12px; border-radius:8px; background:#FEF3A0; color:#854D0E !important; font-weight:600; }
.cob-visor-hoja { display:flex; flex-direction:column; align-items:center; gap:12px; min-height:240px; max-height:62vh; max-height:62dvh; overflow:auto; padding:16px; border-radius:8px; background:#D1D5DB; }
.cob-visor-hoja canvas { display:block; max-width:100%; background:#FFFFFF; box-shadow:0 4px 14px rgb(11 41 71 / .22); }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .ct-pantalla .ct-recibo .cob-recibo-papeles button { min-height:68px; background:#FFFFFF !important; color:#0B2947 !important; border:1px solid #D1D5DB !important; border-radius:12px; font-size:inherit; font-weight:400; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .ct-pantalla .ct-recibo .cob-recibo-papeles button[aria-checked="true"] { background:#E7F5F1 !important; border-color:#0F9375 !important; }
body:is(.qiwo-dark, :not(.qiwo-dark)) .admin-shell .admin-content .ct-pantalla .ct-recibo .cob-recibo-estado { color:#854D0E !important; }
@media (min-width:1600px) {
    body .ct-pantalla { font-size:22px; }
    body .ct-pantalla .ct-titulo { font-size:38px; }
    body .ct-pantalla .ct-niveles { gap:18px; margin-bottom:18px; }
    body .ct-pantalla .ct-nivel { min-height:210px; }
    body .ct-pantalla .ct-nivel .ct-dibujo { width:104px; height:104px; }
    body .ct-pantalla .ct-nivel strong { font-size:28px; }
    body .ct-pantalla .ct-grados { grid-template-columns:repeat(auto-fill, minmax(190px, 1fr)); gap:16px; }
    body .ct-pantalla .ct-grado { min-height:136px; }
    body .ct-pantalla .ct-grado strong { font-size:40px; }
    body .ct-pantalla .ct-cuerpo { grid-template-columns:minmax(0,1fr) 440px; }
    body .ct-pantalla .ct-cuerpo:not(:has(.ct-boleta)) { grid-template-columns:minmax(0,1fr); }
    body .ct-pantalla .ct-cargos { grid-template-columns:repeat(auto-fill, minmax(380px, 1fr)); }
    body .ct-pantalla .ct-medio { min-height:260px; }
    body .ct-pantalla .ct-medio-icono .ct-dibujo { width:136px; height:136px; }
    body .ct-pantalla .ct-medio strong { font-size:28px; }
}

/* Personal que no cuenta en el reporte (09/11/2026): lista corta debajo de la asistencia del día. */
.q-fuera-lista { list-style:none; margin:12px 0 0; padding:0; display:flex; flex-direction:column; gap:10px; }
.q-fuera-lista > li { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:10px; padding:10px 12px; border:1px solid var(--q-border); border-radius:12px; }
.q-fuera-lista .q-control-row { gap:8px; align-items:center; }

/* Inicio de Qiwo Caja (09/11/2026): lo del día (cobros, vouchers, deudas, cierre) antes de los módulos. */
.caja-inicio-listas { display:grid; grid-template-columns:repeat(auto-fit, minmax(300px, 1fr)); gap:16px; margin-bottom:8px; }
.caja-inicio-listas .q-panel { margin-top:0; }
.caja-inicio-listas h2 { margin:0 0 10px; font-size:16px; font-weight:700; color:var(--q-ink); }
.caja-inicio-lista { list-style:none; margin:0; padding:0; }
.caja-inicio-lista > li { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:10px 0; border-top:1px solid var(--q-border); }
.caja-inicio-lista > li:first-child { border-top:0; }
.caja-inicio-lista > li > span:first-child { display:flex; flex-direction:column; min-width:0; }
.caja-inicio-lista strong { font-size:14px; color:var(--q-ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.caja-inicio-lista small { font-size:12px; color:var(--q-muted); }
.caja-inicio-monto { font-weight:700; font-variant-numeric:tabular-nums; white-space:nowrap; color:var(--q-ink); }
.caja-inicio-monto.is-deuda { color:#B42318; }
body.qiwo-dark .caja-inicio-monto.is-deuda { color:#F97066; }
.caja-inicio-subtitulo { margin:22px 0 12px; font-size:18px; font-weight:700; color:var(--q-ink); }

/* Panel SkyMars · Paquete del colegio (09/11/2026). */
.mod-paquete { padding:16px 18px; margin-bottom:16px; }
.mod-paquete-titulo { margin:0 0 4px; font-size:16px; font-weight:700; }
.mod-paquete .mod-estados { margin-top:10px; }
.mod-paquete-confirmar { margin-top:14px; padding-top:14px; border-top:1px solid var(--q-border); display:flex; flex-direction:column; gap:10px; }
.mod-paquete-confirmar p { margin:0; font-size:13px; color:var(--q-muted); }
.caja-inicio-kpis .q-kpi > strong { white-space:nowrap; }
@media (max-width: 600px) { .caja-inicio-kpis .q-kpi { padding:14px 16px; } .caja-inicio-kpis .q-kpi-lead > strong, .caja-inicio-kpis .q-kpi > strong { font-size:22px; } }

/* Entrada de Education: accesos comunes a los seis portales. */
.q-entrada { min-height:100vh; min-height:100dvh; padding:48px 24px; background:#ECEDE7; color:#0B2947; }
.q-entrada-cabecera { max-width:920px; margin:0 auto 32px; padding:28px; border-radius:24px; background:#0B2947; color:#FFFFFF; text-align:center; }
.q-entrada-cabecera img { width:150px; max-width:60%; }
.q-entrada-cabecera h1 { margin:24px 0 12px; font-size:clamp(28px,4vw,40px); }
.q-entrada-cabecera p { margin:8px 0; }
.q-entrada-portales { max-width:920px; margin:auto; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; }
.q-entrada-portal { display:flex; gap:18px; align-items:center; padding:24px; border:1px solid #D1D5DB; border-radius:18px; color:#0B2947; background:#FFFFFF; text-decoration:none; transition:box-shadow .15s,border-color .15s; }
.q-entrada-portal>.q-icono-nav { width:32px; height:32px; flex-shrink:0; color:#0F9375; }
.q-entrada-portal>span { flex:1; display:grid; gap:8px; }
.q-entrada-portal strong { font-size:18px; }
.q-entrada-portal span span { font-size:14px; }
.q-entrada-portal:hover,.q-entrada-portal:focus-visible { border-color:#0F9375; box-shadow:0 4px 18px #0B29471A; outline:2px solid #0F9375; outline-offset:2px; }
.qiwo-dark .q-entrada { background:#0B2947; color:#FFFFFF; }
.qiwo-dark .q-entrada-portal { background:#0B2947; color:#FFFFFF; border-color:#D1D5DB; }
@media(max-width:640px) { .q-entrada { padding:28px 16px; } .q-entrada-portales { grid-template-columns:1fr; } .q-entrada-portal { padding:20px; } }
