/* =====================================================================
   AULA VIRTUAL · ESCUELA RENACER — Sistema visual
   Alineado con assets/escuela.css del sitio público (sep 2026).
   =====================================================================

   POR QUÉ SE REHIZO. La primera versión del rediseño se veía «de
   plantilla»: radios de 14 y 20px, sombras azules de catálogo, degradados
   en el héroe, un segundo acento ámbar decorativo y todos los titulares en
   grotesca. Nada de eso está en la casa. El sitio público —que se hizo
   después— fijó el lenguaje de verdad, y el aula tiene que hablarlo: es la
   misma escuela, un clic más adentro.

   QUÉ SE HEREDA DEL SITIO, tal cual y sin discutir:
     · La escala de azul medianoche y las superficies. Si allá cambia,
       acá cambia.
     · Los radios DISCRETOS (7 y 10px). «Una tarjeta es una superficie,
       no un globo.»
     · La sombra de 1px. La elevación grande se reserva para lo que de
       verdad se levanta.
     · --mut #666c78, que es el gris accesible del sitio (4,88:1 sobre el
       fondo). El anterior, #6b7482, no llegaba a AA.
     · La serif Fraunces en los títulos de despliegue, con sus ejes
       declarados a mano.
     · Cuerpo 17px con interlínea 1,65. El aula se lee a distancia de
       brazo y casi siempre en el teléfono, igual que el sitio.

   QUÉ ES PROPIO DEL AULA, y por qué:
     · La barra tiene identidad de alumno (nombre, avatar, salir) y una
       barra inferior fija en el teléfono. El sitio público no las tiene
       porque no hay sesión.
     · Hay componentes que el sitio no necesita: progreso, asistencia,
       índice de clases, reproductor. Se dibujan con los MISMOS tokens.

   ⚠️ CONTRATO CON EL PHP. Las pantallas usan tokens en estilos en línea
   (var(--brand), var(--sh-card), var(--r), …). Todos los nombres que
   existían siguen existiendo acá, aunque su VALOR se haya recalibrado.
   Borrar un nombre rompe una pantalla en silencio.

   Orden del archivo:
     1 Tokens · 2 Base y accesibilidad · 3 Tipografía · 4 Armazón
     5 Componentes · 6 Tarjeta de curso · 7 Visor de clase
     8 Formularios y acceso · 9 Panel · 10 Utilidades y responsivo
   ===================================================================== */

/* ---------------------------- 1 · TOKENS ---------------------------- */
:root{
  /* ── Color. Copiado de escuela.css. Una sola escala de azul medianoche
     derivada del azul institucional #003399. ──────────────────────── */
  --renacer:#003399; --renacer-dark:#002266; --renacer-hover:#173a80;
  --acc:#0e2a63; --acc-ink:#ffffff; --acc-sf:#eef1f8; --acc-bd:#c6cee0;
  --acc-nav:#7fa6ff;
  --nav:#071129;               /* chrome oscuro: barra, héroe, pie */
  --nav-ink:rgba(255,255,255,.66); --nav-on:#ffffff;
  --nav-ln:rgba(255,255,255,.10); --nav-hov:rgba(255,255,255,.07);

  /* Alias del aula sobre esa escala. Existen porque el PHP los nombra;
     apuntan a la paleta del sitio para que no haya dos azules.
       --brand      el acento de interfaz (enlaces, botón lleno, activo)
       --brand-900  el medianoche del chrome (barra, héroe, pie)
     ⚠️ --brand era #003399 saturado y pintaba la barra entera. Ese azul
     es la MARCA, no el chrome: en el sitio la barra es medianoche y el
     institucional queda para la Escritura y las marcas. Se corrigió. */
  --brand:var(--acc); --brand-700:var(--renacer-hover); --brand-900:var(--nav);
  --brand-sf:var(--acc-sf); --brand-bd:var(--acc-bd); --brand-ink:#ffffff;

  /* Superficies y tinta */
  --bg:#f5f6f8; --sf:#ffffff; --sf2:#fafafb; --sf3:#f2f3f6;
  --ln:#e4e7ec; --ln2:#edeff3;
  --ink:#14161b; --ink2:#3d424d;
  /* Gris de apoyo accesible: 4,88:1 sobre --bg, 5,27:1 sobre --sf. */
  --mut:#666c78;

  /* Estados. Semánticos, nunca decorativos: si algo lleva estos colores,
     algo está pasando. Un curso «Iniciado» no es verde porque sí. */
  --ok:#067a55;   --ok-sf:#e9f7f1;   --ok-bd:#b7e2d1;
  --warn:#b45309; --warn-sf:#fdf5e7; --warn-bd:#f0d9a8;
  --danger:#c11b45; --dan-sf:#fdeef1; --dan-bd:#f4c2ce;
  --info:#0e2a63; --info-sf:#eef1f8; --info-bd:#c6cee0;

  /* La Escritura y las marcas: el azul institucional literal. Igual que
     en el sitio, se reserva y no se usa para decorar. */
  --escritura:#003399; --escritura-sf:#e7ecfb; --escritura-bd:#aec3ee;

  /* ⚠️ --amber se conserva SÓLO por contrato (lo nombra algún estilo en
     línea) y apunta al acento: el ámbar era un SEGUNDO acento decorativo
     y el sistema tiene uno solo. Si algo necesita llamar la atención sin
     ser estado, se resuelve con forma, no con un color nuevo. */
  --amber:var(--acc); --amber-sf:var(--acc-sf); --amber-bd:var(--acc-bd);

  /* Marca de video. Única excepción, con el mismo criterio con que
     Ekklesia se permite el verde de WhatsApp: se reconoce sin leerlo. */
  --yt:#ff0000; --yt-hover:#cc0000; --yt-sf:rgba(255,0,0,.08);

  /* ── Tipografía ──
     Fraunces entra en DOS lugares y en ninguno más: títulos de despliegue
     y Escritura. Si aparece en un tercero deja de ser voz y es adorno.
     Los ejes SOFT y WONK van en 0: se usa su estructura, no su chiste. */
  --serif:'Fraunces',Georgia,'Times New Roman',serif;
  --sans:'Schibsted Grotesk','Inter',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;
  --mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace;

  /* Escala tipográfica del sitio. `clamp` y no media queries: son cuatro
     tamaños que crecen con la ventana y repetirlos se desincroniza. */
  --t-display:clamp(1.9rem, 1.3rem + 2.6vw, 3rem);
  --t-h2:clamp(1.35rem, 1.15rem + .9vw, 1.75rem);
  --t-h3:1.125rem;
  --t-body:1.0625rem;   /* 17px */
  --t-sm:.9375rem;      /* 15px */
  --t-xs:.8125rem;      /* 13px */

  /* Radios y sombras: los del sitio. Discretos a propósito. */
  --r-sm:7px; --r:10px; --r-lg:10px; --r-full:999px;
  --sh:0 1px 2px rgba(16,24,40,.06);
  --sh-card:var(--sh);
  /* Sombra TEÑIDA con el acento, para lo que se eleva de verdad: el botón
     lleno y la tarjeta en hover. El negro puro es lo que la hace ver
     barata. --sh-lift y --sh-brand quedan como alias por contrato. */
  --sh-acc:0 1px 2px rgba(14,42,99,.10), 0 6px 16px -6px rgba(14,42,99,.28);
  --sh-lift:var(--sh-acc); --sh-brand:var(--sh-acc);
  --sh-lg:0 12px 34px -10px rgba(16,24,40,.28);

  /* Movimiento */
  --ease:cubic-bezier(.22,1,.36,1);
  --t-fast:120ms; --t:220ms;

  /* Armazón. --wrap y --pad son los --medida y --sangria del sitio, para
     que el contenido del aula caiga en la misma columna que el público. */
  --wrap:1180px; --lectura:68ch;
  --pad:clamp(1.15rem, 4vw, 2.5rem);
  --gap:1.25rem;
  --top-h:74px;        /* igual que la barra del sitio */
  /* Tamaño del sello del héroe. Se mide contra la VENTANA y no contra el
     alto del héroe: si se ata al alto, al crecer el contenido el sello
     crece con él y queda desproporcionado (pasó en el sitio). */
  --sello:clamp(150px, 20vw, 280px);
  --nav-bot-h:60px;    /* barra inferior fija, sólo teléfono */
  --ico:44px;
}

/* -------------------- 2 · BASE Y ACCESIBILIDAD ---------------------- */
*,*::before,*::after{ box-sizing:border-box; }

html{ scroll-behavior:smooth; -webkit-text-size-adjust:100%; }
/* La barra es fija: sin esto, todo salto a un ancla deja el título
   tapado. Se descuenta una vez acá y no en cada destino. */
html{ scroll-padding-top:calc(var(--top-h) + 1.5rem); }

/* ⚠️ PIE ANCLADO ABAJO.
   Sin esto, en una pantalla con poco contenido —«Mis cursos» con tres
   tarjetas, un estado vacío, un formulario corto— el pie quedaba flotando
   a media página con un vacío blanco debajo. Se veía como un error de
   carga. La columna flexible empuja el pie al fondo cuando sobra alto, y
   se comporta normal cuando el contenido es largo. */
body{
  margin:0; background:var(--bg); color:var(--ink2);
  font-family:var(--sans); font-size:var(--t-body); line-height:1.65;
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
  min-height:100dvh; display:flex; flex-direction:column;
}
/* El contenido se estira para ocupar el alto sobrante. */
body > main{ flex:1 0 auto; }
body > footer{ flex:none; margin-top:auto; }
/* La pantalla de acceso ocupa el alto completo y no lleva pie. */
body.is-auth{ display:block; }

img{ max-width:100%; height:auto; display:block; }

a{ color:var(--acc); text-decoration:none; }
a:hover{ text-decoration:underline; text-underline-offset:3px; }

/* Foco visible SIEMPRE: quien navega con teclado tiene que saber dónde
   está parado. Sobre el chrome oscuro el azul no se ve, así que ahí el
   foco es claro. */
:focus-visible{ outline:2px solid var(--acc); outline-offset:2px; border-radius:3px; }
.av-top :focus-visible, .hero :focus-visible,
.auth-aside :focus-visible, footer :focus-visible,
.av-botnav :focus-visible{ outline-color:var(--acc-nav); }

/* Salto al contenido: primer elemento tabulable de cada página, visible
   sólo al enfocarlo. Es lo que le falta a casi todo sitio con menú. */
.av-saltar{
  position:absolute; left:-9999px; top:0; z-index:100;
  background:var(--sf); color:var(--acc); padding:.7rem 1.1rem;
  border:1px solid var(--acc); border-radius:0 0 var(--r-sm) 0;
  font-weight:600; }
.av-saltar:focus{ left:0; }

/* Área táctil mínima cómoda en lo que se toca con el pulgar. */
.btn, .av-nav a, .av-botnav a, .av-logout{ touch-action:manipulation; }

/* --------------------------- 3 · TIPOGRAFÍA ------------------------- */
/* ⚠️ QUIÉN MANDA ACÁ, Y POR QUÉ CAMBIÓ.
   La primera versión ponía TODOS los títulos en Fraunces, copiando al
   sitio público. Fue un calco mal entendido: el sitio es una pieza de
   presentación —se lee una vez, de corrido— y ahí la serif es la voz.
   El aula es una APLICACIÓN: se usa todos los días, con muchos títulos
   cortos y utilitarios («Mis datos», «Inscripciones», «Contenido del
   curso»). Puestos en serif de despliegue, con tracking negativo, se ven
   apretados y pesados: exactamente lo que se sentía como «descuadrado».

   Entonces:
     · La GROTESCA es la tipografía de la aplicación, títulos incluidos.
     · La SERIF se reserva para los dos momentos con voz: el titular del
       héroe y el panel de marca del acceso. Ahí sí es presentación.
   Es la misma disciplina del sitio —«la serif entra en dos lugares y en
   ninguno más»—, aplicada a lo que este producto sí es. */

h1,h2,h3,h4{ color:var(--ink); margin:0; font-family:var(--sans);
             font-weight:600; letter-spacing:-.018em; line-height:1.25; }

/* Título de pantalla. Tamaño de aplicación, no de portada: contenido a
   una medida en la que un título de dos palabras no ocupa media pantalla. */
h1{ font-size:clamp(1.5rem, 1.3rem + .7vw, 1.9rem); line-height:1.2;
    letter-spacing:-.022em; }
h2{ font-size:clamp(1.15rem, 1.05rem + .45vw, 1.35rem); letter-spacing:-.016em; }
h3{ font-size:var(--t-h3); letter-spacing:-.008em; }
h4{ font-size:var(--t-sm); letter-spacing:-.004em; }

/* La serif, sólo donde hay voz. `opsz` a mano: sin declararlo el navegador
   usa el valor por defecto del eje y el titular sale con el grosor de
   remate de un párrafo. SOFT y WONK en 0: se usa su estructura, no su
   chiste. */
.display,
.hero h1, .hero h2,
.auth-aside-mid h2{
  font-family:var(--serif); font-weight:600;
  letter-spacing:-.024em; line-height:1.08;
  font-variation-settings:'opsz' 96, 'SOFT' 0, 'WONK' 0; }

/* Rótulo de sección: gris tranquilo con un filete corto que lo ancla sin
   gritar. Es el `.ee-rotulo` del sitio. */
.kicker{
  display:flex; align-items:center; gap:.55rem;
  font-family:var(--sans); font-style:normal;
  font-size:var(--t-xs); font-weight:500; color:var(--mut);
  margin:0 0 .4rem; letter-spacing:.005em; }
.kicker::before{
  content:""; width:20px; height:1px; background:var(--acc-bd); flex:none; }
/* Con un chip adentro el filete sobra: el chip ya es el ancla. */
.kicker:has(.chip)::before{ display:none; }
.kicker:has(.chip){ margin-bottom:.7rem; }
/* Sobre chrome oscuro se aclara. */
.hero .kicker, .auth-aside .kicker{ color:rgba(255,255,255,.72); }
.hero .kicker::before, .auth-aside .kicker::before{ background:var(--acc-nav); }

.micro{ font-size:var(--t-xs); color:var(--mut); line-height:1.5; }
.lead{ font-size:var(--t-body); color:var(--ink2); max-width:var(--lectura); }
.mono{ font-family:var(--mono); font-variant-numeric:tabular-nums;
       font-feature-settings:'tnum' 1; letter-spacing:-.01em; }
.muted{ color:var(--mut); }
/* ⚠️ LA MEDIDA DE LECTURA VALE TAMBIÉN DENTRO DE UNA TARJETA.
   `.card p{max-width:none}` estaba puesto para que un párrafo suelto no
   quedara angosto dentro de una caja ancha, y el efecto fue el contrario:
   el texto del objetivo del Ministerio corría a 110 caracteres por línea,
   que es donde el ojo empieza a perder el renglón siguiente. Sólo pierden
   la medida los sitios donde el ancho lo manda el contenedor: una celda,
   un estado vacío, un aviso de una línea. */
p{ max-width:var(--lectura); }
td p, .empty p, .note p, .note span{ max-width:none; }
.hero p{ max-width:58ch; }
.content-html{ max-width:var(--lectura); }
.content-html p{ max-width:none; }

/* --------------------------- 4 · ARMAZÓN ---------------------------- */
/* La barra: el mismo medianoche del sitio y del menú de Ekklesia. */
.av-top{
  position:sticky; top:0; z-index:40; height:var(--top-h);
  background:var(--nav); border-bottom:1px solid var(--nav-ln);
  display:flex; align-items:center; gap:1.25rem;
  padding:0 var(--pad);
}
.av-top a{ color:var(--nav-on); }
.av-top-brand{ display:flex; align-items:center; gap:.85rem;
               color:var(--nav-on); text-decoration:none; min-width:0; }
.av-top-brand:hover{ text-decoration:none; }
/* El logo va sobre el medianoche sin caja blanca: la placa blanca de la
   versión anterior lo convertía en una pegatina. */
.av-top-brand img{ height:38px; width:auto; border-radius:0;
                   background:none; padding:0; flex:none; }
.av-top-brand span{ font-weight:600; font-size:.95rem; letter-spacing:-.01em;
                    white-space:nowrap; }
.av-top-sp{ flex:1; }

.av-nav{ display:flex; align-items:center; gap:.15rem; }
.av-nav a{
  color:var(--nav-ink); font-size:.9rem; font-weight:500;
  padding:.5rem .75rem; border-radius:var(--r-sm); white-space:nowrap;
  transition:color var(--t-fast) var(--ease), background var(--t-fast) var(--ease); }
.av-nav a:hover{ color:var(--nav-on); background:var(--nav-hov); text-decoration:none; }
/* El activo: tinta plena Y filete de acento. Sólo con el color el cambio
   es demasiado sutil sobre este azul. */
.av-nav a.on, .av-nav a[aria-current="page"]{
  color:var(--nav-on); background:var(--nav-hov);
  box-shadow:inset 0 -2px 0 var(--acc-nav); }

/* Identidad del alumno */
.av-user{ display:flex; align-items:center; gap:.7rem; }
.av-user-av{
  width:38px; height:38px; border-radius:var(--r-full); flex:none;
  background:rgba(255,255,255,.12); color:#fff;
  border:1px solid var(--nav-ln);
  display:flex; align-items:center; justify-content:center;
  font-weight:600; font-size:.8rem; letter-spacing:.02em; }
.av-user-nm{ font-size:.875rem; font-weight:500; line-height:1.2; color:var(--nav-on); }
.av-user-rl{ font-size:.72rem; color:var(--nav-ink); line-height:1.2; }
.av-logout{
  display:inline-flex; align-items:center; gap:.4rem;
  padding:.42rem .85rem; color:var(--nav-on);
  border:1px solid var(--nav-ln); border-radius:var(--r-full);
  font-size:.82rem; font-weight:500;
  transition:background var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease); }
.av-logout:hover{ background:var(--nav-hov); border-color:var(--acc-nav); text-decoration:none; }

/* Contenido */
/* ⚠️ TRES MEDIDAS Y NINGUNA MÁS.
   Había doce anchos distintos escritos a mano —720, 760, 800, 820, 860,
   880, 900 px— uno por pantalla, decididos a ojo. Por eso dos pantallas
   hermanas nunca empezaban en la misma columna y el sitio se sentía
   descuadrado al navegar. Ahora la medida es una decisión de tipo de
   contenido, no de pantalla:
     estrecho  formularios y lectura seguida
     (normal)  listados y contenido general
     wide      tablas anchas y el panel */
.av-main{ width:100%; max-width:var(--wrap); margin-inline:auto;
          padding:clamp(1.6rem, 3.5vw, 2.5rem) var(--pad); }
.av-main.estrecho{ max-width:48rem; }   /* 768px */
.av-main.medio{ max-width:60rem; }      /* 960px */
.av-main.wide{ max-width:82.5rem; }     /* 1320px */

/* Barra inferior fija — sólo teléfono. */
.av-botnav{
  display:none; position:fixed; left:0; right:0; bottom:0; z-index:45;
  height:var(--nav-bot-h);
  background:var(--sf); border-top:1px solid var(--ln);
  padding-bottom:env(safe-area-inset-bottom,0); }
.av-botnav a{
  flex:1; display:flex; flex-direction:column; align-items:center;
  justify-content:center; gap:.15rem;
  color:var(--mut); font-size:.6875rem; font-weight:500; }
.av-botnav a.on{ color:var(--acc); }
.av-botnav a.on svg{ opacity:1; }
.av-botnav a:hover{ text-decoration:none; }
.av-botnav svg{ width:21px; height:21px; opacity:.8; }

/* Pie: mismo medianoche del sitio. */
footer{ background:var(--nav); color:rgba(255,255,255,.68);
        font-size:var(--t-sm); margin-top:var(--e5); }
footer a{ color:rgba(255,255,255,.82); }
footer a:hover{ color:#fff; }


/* ---------------- 4b · RITMO, CABECERA Y COLUMNAS ------------------- */
/* ⚠️ ESTE BLOQUE EXISTE PARA MATAR LOS ESTILOS EN LÍNEA.
   La versión anterior resolvía cada pantalla a mano: `style="margin-top:
   26px"`, `min-width:min(100%,420px)`, `width:320px`. Eran 1.400 reglas
   sueltas, y por eso dos pantallas hermanas nunca tenían el mismo aire ni
   las mismas columnas: cada una había sido ajustada a ojo. Acá el ritmo y
   la grilla se declaran UNA vez. */

/* Escala de espaciado. Cuatro pasos, no diecisiete valores inventados. */
:root{
  --e1:.5rem; --e2:.9rem; --e3:1.4rem; --e4:2.1rem; --e5:3rem;
}

/* Ritmo vertical del contenido: los bloques directos de <main> se separan
   solos y siempre igual. Nadie tiene que acordarse de un margen. */
.av-main > * + *{ margin-top:var(--e4); }
.av-main > .av-cursonav + *{ margin-top:var(--e3); }

/* ── Cabecera de pantalla ──
   Rótulo + título + (opcional) dato a la derecha. El problema que
   resuelve: con `.sec-hd` en `align-items:baseline`, el dato de la derecha
   se alineaba con el RÓTULO —la primera línea del bloque izquierdo— y
   quedaba flotando arriba, lejos del título. Ahora el dato se alinea con
   la base del TÍTULO, que es con lo que se lee en pareja. */
.pg-cab{
  display:grid; grid-template-columns:minmax(0,1fr) auto;
  align-items:baseline; column-gap:var(--e4); row-gap:.45rem;
  margin-bottom:var(--e3); }
.pg-cab-tx{ grid-column:1; min-width:0; }
.pg-cab h1{ margin:0; }
/* La acción se alinea con la BASE DEL TÍTULO (por eso `baseline` en la
   grilla y no `flex-end`): con flex-end quedaba pegada al fondo del bloque
   izquierdo —es decir, junto a la bajada— y se leía como si perteneciera
   al párrafo en vez de al título. */
.pg-cab-ac{ grid-column:2; justify-self:end; align-self:baseline;
            display:flex; align-items:center; gap:var(--e1); flex-wrap:wrap; }
/* La bajada ocupa su propia fila, a todo el ancho y con medida de lectura. */
.pg-cab .sub{ grid-column:1 / -1; color:var(--mut); font-size:var(--t-sm);
              margin:0; max-width:var(--lectura); }
@media (max-width: 640px){
  .pg-cab{ grid-template-columns:minmax(0,1fr); }
  .pg-cab-ac{ grid-column:1; justify-self:start; }
}

/* `.sec-hd` se conserva (lo usan las secciones internas) pero alineado
   igual que la cabecera: por la base, no por la primera línea. */
.sec-hd{ display:flex; align-items:flex-end; justify-content:space-between;
         gap:.75rem var(--e3); margin:0 0 var(--e2); flex-wrap:wrap; }
.sec-hd h2{ margin:0; }
.sec-hd .micro{ flex:none; padding-bottom:.1rem; }

/* ── Columnas ──
   Grilla de verdad en vez de flex con anchos mágicos. `.av-cols` es
   contenido + panel lateral; el panel tiene un ancho ideal y cede antes
   que el contenido. Bajo 900px se apila sin media queries sueltas. */
.av-cols{ display:grid; gap:var(--e4); align-items:start;
          grid-template-columns:minmax(0,1fr) minmax(0, 21rem); }
.av-cols.iguales{ grid-template-columns:repeat(auto-fit, minmax(min(100%, 22rem), 1fr)); }
@media (max-width: 980px){ .av-cols{ grid-template-columns:minmax(0,1fr); } }

/* Pila con ritmo propio, para el interior de una tarjeta o un panel. */
.pila > * + *{ margin-top:var(--e2); }
.pila-sm > * + *{ margin-top:var(--e1); }

/* Miga de pan. Una clase en vez de repetir el mismo estilo en línea en
   ocho pantallas (y con la flecha ya girada, que era el otro pegote). */
.av-volver{ display:inline-flex; align-items:center; gap:.4rem;
            font-size:var(--t-xs); color:var(--mut); font-weight:500; }
.av-volver:hover{ color:var(--acc); text-decoration:none; }
.av-volver svg{ transform:rotate(180deg); flex:none; }

/* Barra de acciones */
.acciones{ display:flex; flex-wrap:wrap; gap:.6rem; align-items:center; }

/* ------------------------- 5 · COMPONENTES -------------------------- */
.card{
  background:var(--sf); border:1px solid var(--ln); border-radius:var(--r);
  box-shadow:var(--sh); }
.card-pad{ padding:clamp(1.1rem, 2.5vw, 1.5rem); }

/* ── El héroe ──
   Campo medianoche con el SELLO DE LA ESCUELA de marca de agua, calcado
   del banner del sitio público. El degradado diagonal de la versión
   anterior y su sombra azul eran lo que más lo hacía ver «de plantilla».

   Va en tres capas, y el orden importa:
     fondo   → el medianoche y un halo frío del azul institucional
     ::before→ el sello, a la derecha y centrado
     ::after → un velo que se cierra sobre el sello para que el texto que
               pasa por encima no pierda contraste
   Es el mismo gesto que `.ee-heroe` en escuela.css. */
.hero{
  position:relative; overflow:hidden;
  background:
    radial-gradient(120% 140% at 88% 50%,
      color-mix(in srgb, var(--renacer) 42%, transparent) 0%,
      color-mix(in srgb, var(--renacer) 10%, transparent) 40%,
      transparent 64%),
    var(--nav);
  color:#fff;
  border-radius:var(--r); padding:clamp(1.5rem, 3.2vw, 2.25rem);
  border:1px solid var(--nav-ln); }

/* Capa 1 · el sello. `inset` + `margin-block:auto` para centrarlo en
   vertical y NO `translateY`, que es lo que rompe si algún día se le pone
   una transición. Va ENTERO y dentro del borde: recortarlo contra el
   canto deja un arco que ya no es el sello de nadie. */
.hero-emblem{
  /* Sangra por el borde derecho para no quedar justo debajo del badge de
     progreso, que vive en esa misma esquina. El sitio hace lo mismo en su
     punto de quiebre (`inset:0 -28% 0 auto`). */
  position:absolute; inset:0 -4% 0 auto; margin-block:auto;
  height:var(--sello); aspect-ratio:1; width:auto; object-fit:contain;
  /* .72, el MISMO valor del sello del sitio. No se ve «al 72%» porque el
     velo de la capa siguiente va encima: el sello sube y el fondo detrás
     del texto se oscurece a la vez, así que el contraste no baja. Si se
     mueve este número, hay que volver a mirar el velo. */
  opacity:.72; z-index:0; pointer-events:none; user-select:none; }

/* Capa 2 · el velo. Se cierra desde la izquierda —donde está el titular—
   y se abre hacia la derecha, donde el sello puede respirar. Sin esto, el
   texto sobre el emblema pierde legibilidad. */
.hero::after{
  content:""; position:absolute; inset:0; z-index:1; pointer-events:none;
  background:linear-gradient(90deg,
    var(--nav) 0%,
    color-mix(in srgb, var(--nav) 94%, transparent) 40%,
    color-mix(in srgb, var(--nav) 74%, transparent) 72%,
    color-mix(in srgb, var(--nav) 62%, transparent) 100%); }

/* El contenido, por encima de las dos capas. */
.hero > *:not(.hero-emblem){ position:relative; z-index:2; }
.hero h1{ color:#fff; font-size:clamp(1.5rem, 1.1rem + 1.7vw, 2.15rem); }
/* Distribución del héroe: el texto a la izquierda con su medida, y el
   dato de progreso a la derecha como pieza propia. Antes el porcentaje
   flotaba suelto encima del sello y no se leía como nada. */
.hero-fila{ display:flex; align-items:flex-start; justify-content:space-between;
            gap:var(--e3) var(--e4); flex-wrap:wrap; }
.hero-tx{ min-width:0; max-width:56ch; flex:1 1 22rem; }
/* ⚠️ Fondo con CUERPO, no un velo del 10%.
   Este bloque cae justo encima del sello, que es la zona más clara del
   héroe: con un fondo translúcido al 10% el porcentaje parecía texto
   suelto flotando sobre el emblema. Se le da un fondo derivado del propio
   medianoche —así nunca desentona— con opacidad suficiente para que el
   sello quede DETRÁS y el dato se lea como una pieza. */
.hero-dato{
  flex:none; text-align:center; border-radius:var(--r);
  background:color-mix(in srgb, var(--nav) 78%, transparent);
  border:1px solid rgba(255,255,255,.18);
  padding:.9rem 1.35rem; min-width:7.5rem;
  backdrop-filter:blur(3px); }
.hero-dato .n{ font-family:var(--mono); font-size:1.75rem; font-weight:600;
               line-height:1; color:#fff; letter-spacing:-.02em; }
.hero-dato .t{ font-size:var(--t-xs); color:rgba(255,255,255,.78);
               margin-top:.3rem; white-space:nowrap; }
.hero h2{ color:#fff; }
.hero p{ color:rgba(255,255,255,.84); margin:.55em 0 0; max-width:60ch; }
/* ⚠️ `:not(.btn)`. Sin esto, esta regla —clase + elemento, más específica
   que `.btn-onbrand`— pintaba de blanco el texto del botón claro y el
   «Continuar el curso» quedaba invisible sobre su propio fondo. */
.hero a:not(.btn){ color:#fff; }

/* ── Botones ──
   UN botón lleno por pantalla. El resto se distingue por tinte y borde:
   veinte botones azules compiten entre sí y no destaca ninguno. */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:.5rem;
  font-family:var(--sans); font-size:var(--t-sm); font-weight:600;
  min-height:42px; padding:.6rem 1.15rem; border-radius:var(--r-sm);
  border:1px solid transparent; cursor:pointer; text-decoration:none;
  white-space:nowrap;
  transition:background var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease),
             color var(--t-fast) var(--ease); }
.btn:hover{ text-decoration:none; }
.btn-primary{ background:var(--acc); color:var(--acc-ink); box-shadow:var(--sh-acc); }
.btn-primary:hover{ background:var(--renacer-hover); color:#fff; }
.btn-ghost{ background:var(--sf); border-color:var(--acc-bd); color:var(--acc); }
.btn-ghost:hover{ background:var(--acc-sf); border-color:var(--acc); }
/* Sobre el chrome oscuro el botón de contorno se invierte. */
.hero .btn-ghost, footer .btn-ghost, .auth-aside .btn-ghost{
  background:transparent; border-color:rgba(255,255,255,.28); color:#fff; }
.hero .btn-ghost:hover, footer .btn-ghost:hover{
  background:rgba(255,255,255,.09); border-color:rgba(255,255,255,.5); }
/* El botón claro sobre el héroe: es la acción principal de esa tarjeta. */
.btn-onbrand{ background:#fff; color:var(--acc); }
.btn-onbrand:hover{ background:var(--acc-sf); color:var(--acc); }
.btn-sm{ min-height:34px; padding:.4rem .8rem; font-size:var(--t-xs); }
.btn-block{ width:100%; }
.btn[disabled], .btn.is-disabled{ opacity:.5; cursor:not-allowed; box-shadow:none; }

/* ── Chip de estado ──
   El color aparece sólo cuando comunica. El chip neutro es gris. */
.chip{
  display:inline-flex; align-items:center; gap:.4rem;
  padding:.2rem .6rem; border-radius:var(--r-full);
  font-size:var(--t-xs); font-weight:600; line-height:1.5;
  background:var(--sf3); color:var(--ink2);
  border:1px solid transparent; white-space:nowrap; }
.chip .dot{ width:6px; height:6px; border-radius:50%; background:currentColor; flex:none; }
.chip.ok{ background:var(--ok-sf); color:var(--ok); border-color:var(--ok-bd); }
.chip.warn{ background:var(--warn-sf); color:var(--warn); border-color:var(--warn-bd); }
.chip.danger{ background:var(--dan-sf); color:var(--danger); border-color:var(--dan-bd); }
.chip.info, .chip.brand{ background:var(--acc-sf); color:var(--acc); border-color:var(--acc-bd); }
.chip.done{ background:var(--sf3); color:var(--mut); }
.chip.bad{ background:#fdecec; color:#b42318; border-color:#f6c9c4; }

/* ── Barra de progreso ──
   En el acento, no en ámbar: el sistema tiene un acento. */
.prog{ height:6px; border-radius:var(--r-full); background:var(--sf3); overflow:hidden; }
.prog > i{ display:block; height:100%; border-radius:inherit;
           background:var(--acc); transition:width var(--t) var(--ease); }
.prog.brand > i{ background:var(--acc); }
/* Sobre el héroe la pista se aclara para que la barra se lea. */
.hero .prog{ background:rgba(255,255,255,.20); }
.hero .prog > i{ background:var(--acc-nav); }

/* Avatar de iniciales */
.av{ width:38px; height:38px; border-radius:var(--r-full); flex:none;
     display:flex; align-items:center; justify-content:center;
     font-weight:600; font-size:.8rem; letter-spacing:.01em;
     background:var(--acc-sf); color:var(--acc);
     border:1px solid var(--acc-bd); }
.av-sm{ width:30px; height:30px; font-size:.7rem; }
.av-lg{ width:3.25rem; height:3.25rem; font-size:1.05rem; }

/* Ficha de identidad de «Mis Datos». */
.ficha-yo{ display:flex; align-items:center; justify-content:space-between;
           gap:var(--e3); flex-wrap:wrap; }
.ficha-yo-id{ display:flex; align-items:center; gap:.9rem; }
.ficha-yo-nm{ font-weight:650; color:var(--ink); font-size:1.0625rem;
              line-height:1.3; }

/* Estado vacío */
.empty{ text-align:center; padding:clamp(2rem, 5vw, 3.5rem) 1.25rem; }
.empty svg, .empty img{ width:64px; height:64px; margin:0 auto 1rem;
                        color:var(--acc-bd); opacity:1; }
.empty h3{ font-size:var(--t-h3); margin-bottom:.4rem; color:var(--ink); }
.empty p{ color:var(--mut); max-width:44ch; margin:0 auto; font-size:var(--t-sm); }

/* Rejilla */
.grid{ display:grid; gap:var(--gap);
       grid-template-columns:repeat(auto-fill, minmax(min(100%, 20rem), 1fr)); }
/* Todas las tarjetas de una fila miden lo mismo: es lo que hace que una
   grilla se vea ordenada y no como piezas sueltas. */
.grid > *{ height:100%; }

/* ── Grillas de conteo fijo ──
   `auto-fill` reparte según quepa, y con seis elementos en un ancho que
   admite cinco deja uno HUÉRFANO en la segunda fila: se ve como un error
   de maquetación. Cuando el número de elementos se conoce, la grilla se
   declara y el reparto queda parejo. */
.grid-3{ display:grid; gap:var(--gap); grid-template-columns:repeat(3, minmax(0,1fr)); }
.grid-4{ display:grid; gap:var(--gap); grid-template-columns:repeat(4, minmax(0,1fr)); }
.grid-5{ display:grid; gap:var(--gap); grid-template-columns:repeat(5, minmax(0,1fr)); }
.grid-3 > *, .grid-4 > *, .grid-5 > *{ height:100%; }
@media (max-width: 1100px){ .grid-5{ grid-template-columns:repeat(3, minmax(0,1fr)); } }
@media (max-width: 900px){
  .grid-3, .grid-4, .grid-5{ grid-template-columns:repeat(2, minmax(0,1fr)); }
}
@media (max-width: 560px){
  .grid-3, .grid-4, .grid-5{ grid-template-columns:minmax(0,1fr); }
}

/* Ficha de cifra del panel: la cifra manda, el rótulo acompaña. */
.kpi{ display:flex; flex-direction:column; }
.kpi-top{ display:flex; align-items:flex-start; justify-content:space-between; gap:.5rem; }
.kpi-n{ font-family:var(--mono); font-size:1.85rem; font-weight:600;
        color:var(--ink); line-height:1.1; letter-spacing:-.03em; margin-top:.35rem; }
.kpi-nota{ margin-top:auto; padding-top:.25rem; }

/* Aviso / nota */
.note{ display:flex; gap:.7rem; padding:.85rem 1rem; border-radius:var(--r);
       background:var(--acc-sf); border:1px solid var(--acc-bd);
       color:var(--ink2); font-size:var(--t-sm); }
.note.warn{ background:var(--warn-sf); border-color:var(--warn-bd); }
.note .ic{ flex:none; color:var(--acc); display:inline-flex; }
.note.warn .ic{ color:var(--warn); }
.note.ok{ background:var(--ok-sf); border-color:var(--ok-bd); }
.note.ok .ic{ color:var(--ok); }
.note p{ max-width:none; margin:0; }

/* Aro de icono, para los accesos en tarjeta. */
.kpi-ico{ width:var(--ico); height:var(--ico); border-radius:var(--r-sm);
          background:var(--acc-sf); color:var(--acc);
          border:1px solid var(--acc-bd);
          display:flex; align-items:center; justify-content:center; flex:none; }


/* ------------------ 5b · MENÚ DEL CURSO Y TABLAS -------------------- */
/* La barra de siete pestañas de adentro de un curso (ver
   includes/aula_curso_nav.php). Es la navegación que el aula original
   tenía y que hay que conservar: desde cualquier pantalla del curso se
   llega a cualquier otra en un clic. */
/* El contenedor lleva un degradado a la derecha que avisa «hay más»
   cuando la barra se desborda: antes la última pestaña se cortaba en seco
   contra el borde y parecía un defecto, no un scroll. */
.av-cursonav-caja{ position:relative; }
.av-cursonav-caja::after{
  content:""; position:absolute; right:0; top:0; bottom:1px; width:2.5rem;
  pointer-events:none;
  background:linear-gradient(90deg, transparent, var(--bg) 70%); }
/* ⚠️ Sin media query por ventana. El desborde de esta barra depende del
   ANCHO DEL CONTENEDOR (que cambia con .estrecho/.medio/.wide), no del de
   la ventana: en una pantalla de 1440px con contenedor estrecho la barra
   igual se desborda. El degradado se queda siempre; sobre el fondo de la
   página, cuando no hay desborde, es invisible. */

.av-cursonav{
  display:flex; gap:.15rem; margin:0;
  border-bottom:1px solid var(--ln);
  /* En el teléfono se desplaza en horizontal en vez de apretujarse o
     partirse en tres filas. El original se partía. */
  overflow-x:auto; scrollbar-width:thin;
  -webkit-overflow-scrolling:touch; }
.av-cursonav::-webkit-scrollbar{ height:3px; }
.av-cursonav::-webkit-scrollbar-thumb{ background:var(--ln); border-radius:99px; }
.av-cursonav a{
  display:inline-flex; align-items:center; gap:.45rem; white-space:nowrap;
  padding:.65rem .85rem; font-size:var(--t-sm); font-weight:500;
  color:var(--mut); border-bottom:2px solid transparent;
  margin-bottom:-1px;
  transition:color var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease); }
.av-cursonav a svg{ flex:none; opacity:.8; }
.av-cursonav a:hover{ color:var(--ink); text-decoration:none;
                      border-bottom-color:var(--acc-bd); }
/* La activa: tinta plena y filete de acento. El menú original no marcaba
   dónde estabas; en cualquier pantalla se veía igual. */
.av-cursonav a.on{ color:var(--acc); font-weight:600;
                   border-bottom-color:var(--acc); }
.av-cursonav a.on svg{ opacity:1; }

/* ── Tabla de datos ──
   La portada del aula original era una tabla con TODOS los datos del
   curso a la vista, y eso era una virtud: el alumno veía de una las
   fechas, el equipo y el libro sin entrar a nada. Se conserva la tabla y
   se arregla lo que estaba mal —tipografía, aire, alineación— y lo que
   faltaba: en el teléfono se convierte en fichas apiladas en vez de
   comprimirse a ocho columnas ilegibles. */
/* ⚠️ `table-layout:auto` era el problema: el navegador repartía el ancho
   según el CONTENIDO, así que la columna «Equipo asignado» —la que más
   texto tiene— se llevaba el espacio y el nombre del curso se partía en
   dos líneas. Se fija el reparto: el nombre manda, los datos cortos
   ocupan lo justo. */
.av-tabla{ width:100%; border-collapse:collapse; font-size:var(--t-sm);
           table-layout:fixed; }
/* Alineación por la primera línea de texto, no por el alto de la celda:
   con `top` a secas, un chip y una fecha en la misma fila arrancaban a
   distinta altura y la fila se veía torcida. */
.av-tabla td{ vertical-align:top; }
.av-tabla td > *:first-child{ margin-top:0; }
.av-tabla th{
  background:var(--sf2); color:var(--mut); font-weight:600;
  font-size:var(--t-xs); text-align:left; padding:.7rem .9rem;
  border-bottom:1px solid var(--ln); white-space:nowrap; }
.av-tabla td{ padding:.9rem .8rem; border-top:1px solid var(--ln2); }
.av-tabla tbody tr:hover{ background:var(--sf2); }
.av-tabla .nom{ color:var(--ink); font-weight:600; font-size:var(--t-body);
                line-height:1.35; }
.av-tabla .fechas{ white-space:nowrap; font-family:var(--mono);
                   font-size:var(--t-xs); color:var(--ink2); }
/* ⚠️ UNA LÍNEA POR PERSONA, y recorta si no cabe.
   Sin esto, «Profesor(a) Marcelo Ziem Cortés» se partía en dos o tres
   líneas y la fila crecía con él: dos cursos con distinto número de
   integrantes daban filas de alturas muy distintas y la tabla se veía
   como un peine. Ahora la diferencia entre filas es de una línea por
   persona, que es información, no ruido de maquetación. */
.av-tabla .equipo{ font-size:var(--t-xs); line-height:1.45; }
.av-tabla .equipo b{ display:block; color:var(--ink); font-weight:600;
                     font-size:var(--t-sm); margin-bottom:.2rem;
                     white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.av-tabla .equipo > div{ white-space:nowrap; overflow:hidden;
                         text-overflow:ellipsis; }
/* El cargo va antes del nombre, en gris: se lee la jerarquía sin leer
   toda la línea. */
.av-tabla .equipo .muted{ font-weight:500; }
.av-tabla-caja{ overflow-x:auto; -webkit-overflow-scrolling:touch; }

/* Reparto de la tabla de cursos de la portada. Suma 100%. El nombre se
   lleva el tercio que necesita para no partirse; el equipo, que es el que
   más texto trae, queda acotado y recorta con elegancia. */
.av-tabla.t-cursos col.c-nom{ width:26%; }
.av-tabla.t-cursos col.c-est{ width:10%; }
.av-tabla.t-cursos col.c-fec{ width:12%; }
.av-tabla.t-cursos col.c-ins{ width:10%; }
.av-tabla.t-cursos col.c-equ{ width:21%; }
.av-tabla.t-cursos col.c-mod{ width:8%; }
.av-tabla.t-cursos col.c-lib{ width:8%; }
.av-tabla.t-cursos col.c-opc{ width:11%; }
/* «Mis Cursos» es la misma tabla sin la columna del libro: siete
   columnas en vez de ocho. */
.av-tabla.t-miscursos col.c-nom{ width:29%; }
.av-tabla.t-miscursos col.c-est{ width:11%; }
.av-tabla.t-miscursos col.c-fec{ width:13%; }
.av-tabla.t-miscursos col.c-ins{ width:11%; }
.av-tabla.t-miscursos col.c-equ{ width:22%; }
.av-tabla.t-miscursos col.c-mod{ width:9%; }
.av-tabla.t-miscursos col.c-opc{ width:11%; }
@media (max-width: 860px){ .av-tabla colgroup{ display:none; } }

/* El progreso vive PEGADO al nombre, no colgando con un ancho arbitrario:
   ocupa el ancho de su columna y respeta el ritmo de la celda. */
/* Acotada: cruzando toda la columna se leía como un separador y no como
   un dato. A 11rem sigue siendo comparable entre filas. */
.av-tabla .prog{ margin-top:.55rem; max-width:11rem; }
.av-tabla .prog + .micro{ margin-top:.3rem; }

/* En el teléfono la tabla se vuelve fichas. Cada celda muestra su rótulo
   con `data-rot`, así no hace falta duplicar el marcado. */
@media (max-width: 860px){
  .av-tabla, .av-tabla thead, .av-tabla tbody,
  .av-tabla tr, .av-tabla th, .av-tabla td{ display:block; }
  .av-tabla thead{ position:absolute; left:-9999px; }
  .av-tabla tr{
    background:var(--sf); border:1px solid var(--ln); border-radius:var(--r);
    box-shadow:var(--sh); margin-bottom:var(--gap); padding:.35rem .25rem; }
  .av-tabla tr:hover{ background:var(--sf); }
  /* ⚠️ El rótulo va ARRIBA del valor, no al lado.
     Con `display:flex` la celda ponía en fila TODOS sus hijos, y la celda
     del equipo —que trae el nombre del equipo y una línea por persona—
     se desplegaba en horizontal y cada línea salía recortada:
     «A  Prof…  Colabor…». Apilando, cada dato se lee entero. */
  .av-tabla td{ border:0; padding:.45rem .9rem; display:block; }
  .av-tabla td::before{
    content:attr(data-rot); display:block; margin-bottom:.1rem;
    color:var(--mut); font-size:var(--t-xs); font-weight:600; }
  .av-tabla td:empty{ display:none; }
  /* En la ficha hay ancho de sobra: el equipo no necesita recortarse. */
  .av-tabla .equipo b, .av-tabla .equipo > div{
    white-space:normal; overflow:visible; text-overflow:clip; }
  .av-tabla .prog{ max-width:none; }
  /* El nombre del curso encabeza la ficha: sin rótulo y a todo el ancho. */
  .av-tabla td.td-nom{ display:block; padding-top:.8rem; }
  .av-tabla td.td-nom::before{ display:none; }
  /* La acción, abajo y a todo el ancho. */
  .av-tabla td.td-accion{ display:block; padding-bottom:.85rem; }
  .av-tabla td.td-accion::before{ display:none; }
  .av-tabla-caja{ overflow-x:visible; }
}

/* --------------------- 6 · TARJETA DE CURSO ------------------------- */
.course{ display:flex; flex-direction:column; overflow:hidden;
         transition:border-color var(--t-fast) var(--ease),
                    box-shadow var(--t) var(--ease), transform var(--t) var(--ease); }
.course:hover{ border-color:var(--acc-bd); box-shadow:var(--sh-acc);
               transform:translateY(-3px); }
.course-top{ padding:1.1rem 1.2rem 0; display:flex; align-items:flex-start;
             justify-content:space-between; gap:.6rem; }
.course-body{ padding:.75rem 1.2rem 1.2rem; display:flex; flex-direction:column;
              gap:.85rem; flex:1; }
.course h3{ font-size:1.05rem; line-height:1.3; color:var(--ink); }
.course-meta{ display:flex; flex-wrap:wrap; gap:.3rem .9rem;
              font-size:var(--t-xs); color:var(--mut); }
.course-meta span{ display:inline-flex; align-items:center; gap:.35rem; }
.course-meta svg{ flex:none; opacity:.85; }
.course-meta b{ color:var(--ink2); font-weight:600; }
.course-team{ display:flex; align-items:center; gap:.6rem;
              padding-top:.85rem; border-top:1px solid var(--ln2); }
.course-team .nm{ font-size:var(--t-xs); line-height:1.35; min-width:0; }
.course-team .nm b{ color:var(--ink); font-weight:600; display:block;
                    font-size:var(--t-sm); }
.course-foot{ margin-top:auto; padding-top:.15rem; }

/* ---------------------- 7 · VISOR DE CLASE -------------------------- */
.player{ position:relative; aspect-ratio:16/9; border-radius:var(--r);
         overflow:hidden; background:#000; border:1px solid var(--ln); }
.player iframe{ position:absolute; inset:0; width:100%; height:100%; border:0; }

.ytmin{ position:relative; display:block; aspect-ratio:16/9;
        border-radius:var(--r); overflow:hidden; background:#000;
        border:1px solid var(--ln); }
.ytmin img{ width:100%; height:100%; object-fit:cover; opacity:.85;
            transition:opacity var(--t-fast); }
.ytmin:hover img{ opacity:.68; }
.ytmin .play{ position:absolute; inset:0; margin:auto; width:62px; height:44px;
              background:var(--yt); border-radius:10px;
              display:flex; align-items:center; justify-content:center; }
.ytmin .play::after{ content:''; border-style:solid; border-width:9px 0 9px 15px;
                     border-color:transparent transparent transparent #fff;
                     margin-left:3px; }

/* Índice de clases */
.classlist{ display:flex; flex-direction:column; }
/* `min-height` para que todas las filas midan lo mismo lleven o no un
   chip al final: sin esto la lista se veía como un peine. */
.classrow{ display:flex; align-items:center; gap:.8rem;
           min-height:3.4rem; padding:.55rem .5rem;
           border-bottom:1px solid var(--ln2);
           color:inherit; border-radius:var(--r-sm);
           transition:background var(--t-fast) var(--ease); }
.classrow > .chip{ flex:none; }
.classrow:last-child{ border-bottom:0; }
a.classrow:hover{ background:var(--sf3); text-decoration:none; }
.classrow-n{ width:30px; height:30px; border-radius:var(--r-full); flex:none;
             display:flex; align-items:center; justify-content:center;
             font-size:var(--t-xs); font-weight:600;
             font-family:var(--mono);
             background:var(--sf3); color:var(--mut); }
.classrow.done .classrow-n{ background:var(--ok-sf); color:var(--ok); }
.classrow.now .classrow-n{ background:var(--acc); color:#fff; }
.classrow-tx{ flex:1 1 auto; min-width:0; }
.classrow > svg:last-child{ flex:none; color:var(--mut); }
.classrow-tx b{ display:block; font-size:var(--t-sm); color:var(--ink);
                font-weight:600; white-space:nowrap; overflow:hidden;
                text-overflow:ellipsis; }
.classrow-tx .micro{ margin-top:.05rem; }

/* Contenido de clase: normaliza el HTML que llega del CKEditor. */
/* ⚠️ `overflow-wrap:anywhere` — ESTO NO ES COSMÉTICO.
   Acá adentro va HTML que ESCRIBEN LOS PROFESORES, y lo que escriben son,
   entre otras cosas, enlaces pegados en crudo: Dropbox, Zoom, WhatsApp.
   Una URL no tiene espacios, así que para el navegador es UNA palabra de
   500px, y una palabra que no cabe no se corta: sobresale. En el teléfono
   eso no desbordaba sólo la tarjeta, desbordaba la PÁGINA —169px medidos
   a 390px de ancho— y toda la pantalla se podía arrastrar de lado.
   `anywhere` la deja partir donde sea, que para una dirección es lo
   correcto: nadie lee una URL, se pincha. */
.content-html{ font-size:var(--t-body); color:var(--ink2); line-height:1.7;
               max-width:var(--lectura);
               overflow-wrap:anywhere; }
.content-html > *:first-child{ margin-top:0; }
.content-html h1,.content-html h2{ font-family:var(--serif); }
.content-html h1,.content-html h2,.content-html h3{ margin:1.5em 0 .5em; color:var(--ink); }
.content-html h2{ font-size:1.35rem; }
.content-html h3{ font-size:1.1rem; }
.content-html p{ margin:0 0 1em; }
.content-html img{ border-radius:var(--r-sm); margin:1.2em 0; }
.content-html ul,.content-html ol{ margin:0 0 1em; padding-left:1.35em; }
.content-html li{ margin:.35em 0; }
.content-html a{ text-decoration:underline; text-underline-offset:2px; }
/* Una tabla dentro del contenido se desplaza sola si no cabe, en vez de
   ensanchar la pantalla. Mismo criterio que la URL de arriba. */
.content-html table{ width:100%; border-collapse:collapse; margin:1.2em 0;
                     font-size:var(--t-sm); display:block; overflow-x:auto; }
.content-html th, .content-html td{ border:1px solid var(--ln);
                                     padding:.5rem .7rem; text-align:left; }
.content-html th{ background:var(--sf2); }
/* La cita en serif: es la Escritura, y se distingue por tipografía. */
.content-html blockquote{
  margin:1.4em 0; padding:.2em 0 .2em 1.15em;
  border-left:2px solid var(--escritura-bd);
  font-family:var(--serif); font-style:italic; font-size:1.2rem;
  line-height:1.45; color:var(--escritura);
  font-variation-settings:'opsz' 24, 'SOFT' 0, 'WONK' 0; }
.content-html blockquote p{ margin:0; }

/* ------------------ 8 · FORMULARIOS Y ACCESO ------------------------ */
.field{ margin-bottom:1rem; }
.field label{ display:block; font-size:var(--t-sm); font-weight:600;
              color:var(--ink2); margin-bottom:.35rem; }
.input,
input[type=text].input, input[type=email].input,
input[type=password].input, input[type=search].input,
input[type=date].input, input[type=time].input, input[type=number].input{
  width:100%; min-height:44px; padding:.6rem .8rem;
  font-family:var(--sans); font-size:var(--t-body); color:var(--ink);
  background:var(--sf); border:1px solid var(--ln); border-radius:var(--r-sm);
  transition:border-color var(--t-fast), box-shadow var(--t-fast); }
textarea.input{ min-height:auto; line-height:1.6; }
select.input{ appearance:none;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23666c78' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right .7rem center;
  padding-right:2.1rem; }
.input:focus{ outline:none; border-color:var(--acc);
              box-shadow:0 0 0 3px color-mix(in srgb, var(--acc) 15%, transparent); }
.input::placeholder{ color:var(--mut); opacity:.75; }
.input:disabled{ background:var(--sf2); color:var(--mut); }

.input-ic{ position:relative; }
/* ⚠️ Se repiten los selectores de atributo del bloque de arriba, y no es
   redundancia: `input[type=text].input` tiene MÁS especificidad que
   `.input-ic .input`, así que su `padding` en taquigrafía volvía a pisar
   este `padding-left` y el ícono quedaba encima del texto. Se vio en el
   acceso: «(icono)correo@ejemplo.cl». */
.input-ic .input,
.input-ic input[type=text].input, .input-ic input[type=email].input,
.input-ic input[type=password].input, .input-ic input[type=search].input{
  padding-left:2.6rem; }
.input-ic > svg{ position:absolute; left:.85rem; top:50%; transform:translateY(-50%);
                 width:18px; height:18px; color:var(--mut); pointer-events:none; }

/* Pantalla de acceso: dos panes en escritorio, uno en teléfono. */
.auth{ min-height:100dvh; display:grid; grid-template-columns:1.05fr .95fr; }
.auth-aside{
  position:relative; overflow:hidden; color:#fff;
  padding:clamp(2rem, 5vw, 3.5rem);
  background:var(--nav);
  display:flex; flex-direction:column; justify-content:space-between; }
.auth-aside::before{
  content:""; position:absolute; inset:0; pointer-events:none;
  background:radial-gradient(75% 110% at 78% 8%, rgba(127,166,255,.16), transparent 62%); }
.auth-aside > *{ position:relative; }
.auth-aside .emblem{ position:absolute; right:-80px; bottom:-80px;
                     width:clamp(260px, 40vw, 400px); opacity:.09; z-index:0; }
.auth-aside-logo{ display:flex; align-items:center; gap:.85rem; }
.auth-aside-logo img{ height:46px; width:auto; background:none;
                      border-radius:0; padding:0; }
.auth-aside-mid{ max-width:34ch; }
.auth-aside-mid h2{ color:#fff; font-size:clamp(1.75rem, 1.2rem + 2vw, 2.6rem);
                    line-height:1.08; }
.auth-aside-mid p{ color:rgba(255,255,255,.82); margin-top:.75rem; }
.auth-aside-foot{ font-size:var(--t-xs); color:rgba(255,255,255,.62); }

.auth-form{ display:flex; align-items:center; justify-content:center;
            padding:clamp(2rem, 5vw, 3rem) var(--pad); background:var(--bg); }
.auth-form-in{ width:100%; max-width:380px; }
.auth-form-in h1{ font-size:clamp(1.6rem, 1.3rem + 1.2vw, 2.1rem); }
.auth-form-in .sub{ color:var(--mut); margin:.4rem 0 1.6rem; font-size:var(--t-sm); }

.auth-alert{ display:flex; gap:.6rem; align-items:flex-start;
             padding:.75rem .9rem; border-radius:var(--r-sm);
             font-size:var(--t-sm); margin-bottom:1.1rem; }
.auth-alert svg{ flex:none; margin-top:.15rem; }
.auth-alert.err{ background:var(--dan-sf); border:1px solid var(--dan-bd); color:var(--danger); }
.auth-alert.ok{ background:var(--ok-sf); border:1px solid var(--ok-bd); color:var(--ok); }
.auth-alert.info{ background:var(--acc-sf); border:1px solid var(--acc-bd); color:var(--acc); }

/* Ayudas del ingreso (oct 2026): la indicación bajo la etiqueta, el
   estado en vivo del RUN / de la clave nueva y el ojo de la contraseña. */
.field-ayuda{ font-size:var(--t-xs); color:var(--mut); margin:-.15rem 0 .45rem; }
.field-pie{ text-align:right; margin-top:.45rem; font-size:var(--t-sm); }
.run-estado{ min-height:1.2em; margin-top:.35rem; font-size:var(--t-xs);
             line-height:1.45; color:var(--mut); }
.run-estado:empty{ margin-top:0; min-height:0; }
.run-estado.ok{ color:var(--ok); }
.run-estado.warn{ color:var(--warn); }

.con-ojo .input,
.con-ojo input[type=password].input, .con-ojo input[type=text].input{ padding-right:3rem; }
.ojo{ position:absolute; right:.3rem; top:50%; transform:translateY(-50%);
      width:40px; height:40px; display:inline-flex; align-items:center; justify-content:center;
      background:none; border:0; border-radius:var(--r-sm); color:var(--mut); cursor:pointer; }
.ojo:hover{ color:var(--acc); background:var(--acc-sf); }
.ojo:focus-visible{ outline:2px solid var(--acc); outline-offset:1px; }
.ojo span{ display:inline-flex; }
.ojo .i-ocultar, .ojo[aria-pressed=true] .i-ver{ display:none; }
.ojo[aria-pressed=true] .i-ocultar{ display:inline-flex; }

/* «¿Cómo ingreso?»: un botón bajo el formulario que abre la ayuda en una
   ventana modal. Desplegada en la página alargaba el ingreso a varias
   pantallas de alto. */
.ayuda-boton{ display:flex; align-items:center; gap:.6rem; width:100%; min-height:50px;
  margin-top:1.6rem; padding:.75rem 1rem; text-align:left; cursor:pointer;
  font-family:var(--sans); font-size:var(--t-sm); font-weight:600; color:var(--ink);
  background:var(--sf); border:1px solid var(--ln); border-radius:var(--r);
  transition:border-color var(--t-fast), background var(--t-fast); }
.ayuda-boton:hover{ border-color:var(--acc-bd); background:var(--acc-sf); }
.ayuda-boton:focus-visible{ outline:2px solid var(--acc); outline-offset:2px; }
.ayuda-boton > svg{ color:var(--acc); flex:none; }
.ayuda-boton .muted{ font-weight:400; }
.ayuda-boton .ir{ margin-left:auto; display:inline-flex; color:var(--mut); }
/* Tras un intento fallido: que se note dónde está la ayuda. */
.ayuda-boton.destacar{ border-color:var(--acc);
  box-shadow:0 0 0 3px color-mix(in srgb, var(--acc) 14%, transparent); }
/* El enlace «Ver cómo escribirlos» dentro del aviso de error. */
.auth-alert-enlace{ display:inline; padding:0; margin-left:.2rem; background:none; border:0;
  font:inherit; font-weight:600; color:inherit; text-decoration:underline;
  text-underline-offset:2px; cursor:pointer; }

/* La ventana. El <dialog> no lleva relleno: todo va en .ayuda-modal-in, y
   así un clic sobre el <dialog> mismo sólo puede ser el fondo (cierra). */
.ayuda-modal{ padding:0; border:0; margin:auto; width:min(1080px, calc(100vw - 2rem));
  max-height:min(88dvh, 860px); border-radius:14px; background:var(--sf); color:var(--ink);
  box-shadow:var(--sh-lg); overflow:hidden; }
.ayuda-modal::backdrop{ background:rgba(7,17,41,.55); }
.ayuda-modal-in{ display:flex; flex-direction:column; max-height:inherit; }
.ayuda-modal[open]{ display:block; animation:ayuda-entra var(--t) var(--ease); }
@keyframes ayuda-entra{ from{ opacity:0; transform:translateY(10px); } to{ opacity:1; transform:none; } }
body:has(.ayuda-modal[open]){ overflow:hidden; }   /* que no se mueva el ingreso detrás */
.ayuda-modal-cab{ display:flex; align-items:flex-start; gap:1rem; flex:none;
  padding:1.1rem 1.25rem .95rem; border-bottom:1px solid var(--ln2); }
.ayuda-modal-cab h2{ font-size:clamp(1.2rem, 1.05rem + .6vw, 1.45rem); margin-top:.2rem; }
.ayuda-bajada{ margin:.3rem 0 0; font-size:var(--t-sm); color:var(--mut); max-width:60ch; }
.ayuda-cerrar{ margin-left:auto; flex:none; width:40px; height:40px; display:inline-flex;
  align-items:center; justify-content:center; background:none; border:0; cursor:pointer;
  border-radius:var(--r-sm); color:var(--mut); }
.ayuda-cerrar:hover{ background:var(--sf3); color:var(--ink); }
.ayuda-cerrar:focus-visible{ outline:2px solid var(--acc); outline-offset:1px; }
/* El pie: las salidas («Olvidé mi contraseña», «Escríbenos», el video)
   siempre a la vista, y «Entendido» para volver. */
.ayuda-modal-pie{ flex:none; display:flex; align-items:center; justify-content:space-between;
  flex-wrap:wrap; gap:.6rem 1rem; padding:.85rem 1.25rem; border-top:1px solid var(--ln2);
  background:var(--sf2); }

.ayuda-cuerpo{ flex:1 1 auto; min-height:0; overflow:auto; overscroll-behavior:contain;
  padding:1rem 1.25rem 1.25rem; font-size:var(--t-sm); color:var(--ink2); }
/* :where() deja estos párrafos con la especificidad mínima, para que el
   espaciado entre bloques (`> * + *`) de abajo sea el que mande. */
.ayuda-cuerpo :where(p){ margin:0; font-size:inherit; }
.ayuda-cuerpo :where(p.micro){ font-size:var(--t-xs); }
.ayuda-cuerpo > * + *, .ayuda-cols > div > * + *{ margin-top:.8rem; }
.ayuda-cuerpo h3{ font-size:1rem; color:var(--ink); }
/* Tres bloques —los pasos; el ejemplo y lo que NO funciona; el aviso de
   la contraseña y «¿No puedes entrar?»— en tres columnas en escritorio:
   es lo que hace que la ayuda quepa entera en una pantalla de laptop
   (768 px de alto) sin desplazarse. En dos columnas el bloque de la
   izquierda medía 555 px y sólo había 377. */
.ayuda-cols{ display:grid; align-items:start; gap:1.25rem 1.5rem;
  grid-template-columns:repeat(3, minmax(0,1fr));
  grid-template-areas:"pasos ejemplo mas"; }
.ayuda-col-pasos{ grid-area:pasos; }
.ayuda-col-ejemplo{ grid-area:ejemplo; }
.ayuda-col-mas{ grid-area:mas; }
@media (max-width: 1000px){
  .ayuda-cols{ grid-template-columns:repeat(2, minmax(0,1fr));
               grid-template-areas:"pasos ejemplo" "mas ejemplo"; }
}
.ayuda-noentra{ background:var(--sf2); border:1px solid var(--ln); border-radius:var(--r-sm);
                padding:.75rem .9rem; }
.ayuda-noentra h3 + p{ margin-top:.3rem; }

/* Teléfono: hoja que sube desde abajo, una columna. */
@media (max-width: 640px){
  .ayuda-cols{ grid-template-columns:minmax(0,1fr); gap:1rem;
               grid-template-areas:"pasos" "ejemplo" "mas"; }
  .ayuda-modal-pie{ padding:.75rem 1rem calc(.75rem + env(safe-area-inset-bottom)); }
  .ayuda-modal{ width:100%; max-width:100%; max-height:92dvh; margin:auto 0 0;
                border-radius:16px 16px 0 0; }
  /* En el teléfono las salidas van como enlaces compactos en una fila y
     sólo «Entendido» es botón grande: cuatro botones apilados se comían
     un cuarto de la pantalla. */
  .ayuda-modal-pie > .btn{ width:100%; justify-content:center; }
  .ayuda-modal-pie .ayuda-acciones{ width:100%; justify-content:center; gap:.15rem .9rem; }
  .ayuda-modal-pie .ayuda-acciones .btn{ min-height:36px; padding:.3rem .2rem; border:0;
    background:none; box-shadow:none; }
  @keyframes ayuda-entra{ from{ transform:translateY(24px); opacity:.6; } to{ transform:none; opacity:1; } }
}
@media (prefers-reduced-motion: reduce){ .ayuda-modal[open]{ animation:none; } }

/* Sin JavaScript (o sin <dialog>, iOS < 15.4) no hay modal: la ayuda va
   en la página, bajo el formulario. Sin JS siempre visible; sin <dialog>,
   la abre y cierra el mismo botón. */
.no-js .ayuda-boton{ display:none; }
.no-js .ayuda-modal, .sin-dialog .ayuda-modal[open]{ display:block; position:static; width:auto;
  max-height:none; margin-top:1.6rem; box-shadow:none; border:1px solid var(--ln); }
.no-js .ayuda-modal-pie > .btn, .no-js .ayuda-cerrar{ display:none; }
.sin-dialog .ayuda-modal:not([open]){ display:none; }
.ayuda-cuerpo code, .auth-form-in code{ font-family:var(--mono); font-size:.92em; color:var(--ink);
  background:var(--sf3); border:1px solid var(--ln); border-radius:5px; padding:.05rem .35rem;
  white-space:nowrap; }
.ayuda-pasos{ list-style:none; padding:0; counter-reset:paso; display:grid; gap:.6rem; }
.ayuda-pasos li{ counter-increment:paso; position:relative; padding-left:2.3rem; }
.ayuda-pasos li::before{ content:counter(paso); position:absolute; left:0; top:.05rem;
  width:1.65rem; height:1.65rem; border-radius:50%; background:var(--acc); color:#fff;
  font-weight:600; font-size:var(--t-xs); display:flex; align-items:center; justify-content:center; }
.ayuda-pasos b{ display:block; color:var(--ink); }
.ayuda-pasos span{ color:var(--mut); }
.ayuda-aviso{ background:var(--acc-sf); border:1px solid var(--acc-bd); border-radius:var(--r-sm);
              padding:.6rem .75rem; color:var(--acc); }
.ayuda-aviso svg{ vertical-align:-3px; }
.ayuda-ejemplo{ background:var(--sf2); border:1px dashed var(--acc-bd); border-radius:var(--r-sm);
                padding:.75rem .85rem; }
.ayuda-ejemplo > * + *{ margin-top:.5rem; }
.ayuda-reglas{ list-style:none; padding:0; display:flex; flex-wrap:wrap; gap:.4rem; }
.ayuda-reglas li{ font-size:var(--t-xs); font-weight:600; color:var(--ok);
  background:var(--ok-sf); border:1px solid var(--ok-bd); border-radius:var(--r-full);
  padding:.15rem .6rem; }
.ayuda-rot{ font-size:var(--t-xs); font-weight:600; text-transform:uppercase;
            letter-spacing:.06em; color:var(--mut); margin-top:1.1rem !important; }
.ayuda-no{ list-style:none; padding:0; display:grid; gap:.35rem; margin-top:.4rem !important; }
.ayuda-no li{ display:flex; align-items:baseline; gap:.6rem; flex-wrap:wrap; }
.ayuda-no code{ text-decoration:line-through; text-decoration-color:var(--danger);
                background:var(--dan-sf); border-color:var(--dan-bd); }
.ayuda-no em{ font-style:normal; color:var(--danger); font-size:var(--t-xs); }
.ayuda-acciones{ display:flex; flex-wrap:wrap; gap:.5rem; }
.ayuda-acciones .btn{ display:inline-flex; align-items:center; gap:.4rem; }

/* Pantallas de clave (recuperar, restablecer, cambiar): una sola columna
   centrada, con el mismo fondo y la misma tarjeta que el ingreso. */
.clave-wrap{ min-height:100dvh; display:flex; align-items:center; justify-content:center;
             padding:clamp(1.5rem, 5vw, 3rem) var(--pad); background:var(--bg); }
.clave-wrap .auth-form-in{ max-width:420px; }
.clave-marca{ display:flex; align-items:center; gap:.75rem; margin-bottom:1.5rem; }
.clave-marca img{ height:52px; width:52px; }
.clave-marca b{ display:block; color:var(--ink); }
.clave-marca span{ font-size:var(--t-xs); color:var(--mut); }
.clave-volver{ display:inline-flex; align-items:center; gap:.35rem; margin-top:1.4rem;
               font-size:var(--t-sm); }
.clave-volver svg{ transform:rotate(180deg); }
.hp{ position:absolute !important; left:-9999px; width:1px; height:1px; overflow:hidden; }

/* «¿Olvidaste tu contraseña?» en ventana sobre el ingreso: reutiliza la
   ventana de la ayuda, angosta como la pantalla propia (una columna). */
.recuperar-modal{ width:min(460px, calc(100vw - 2rem)); }
.recuperar-modal .ayuda-modal-cab{ align-items:center; }
.recuperar-modal .clave-marca{ margin:0; }
.recuperar-modal .clave-marca img{ height:40px; width:40px; }
.recuperar-cuerpo{ padding:1.15rem 1.35rem 1.4rem; font-size:var(--t-base, 1rem); color:var(--ink); }
.recuperar-cuerpo h2{ font-size:clamp(1.35rem, 1.2rem + .6vw, 1.6rem); }
.recuperar-cuerpo .sub{ color:var(--mut); margin:.4rem 0 1.3rem; font-size:var(--t-sm); }
.recuperar-cuerpo .ayuda-pasos{ font-size:var(--t-sm); }
.recuperar-cuerpo .note{ font-size:var(--t-sm); }
.recuperar-cuerpo :where(p){ margin:0; }
.recuperar-cuerpo > * + *{ margin-top:0; }
button.clave-volver{ background:none; border:0; padding:0; cursor:pointer; font-family:inherit; color:var(--acc); }
.recuperar-cuerpo button[aria-busy=true]{ opacity:.7; cursor:progress; }
@media (max-width: 640px){ .recuperar-modal{ width:100%; } }

/* «Elige tu contraseña» (cambio obligatorio) en ventana sobre el ingreso:
   la misma ventana de «¿Olvidaste tu contraseña?». Sin JavaScript o sin
   <dialog>, la ventana abierta se fija igual al centro sobre un velo. */
.clave-kicker{ margin:0 0 .35rem; font-size:var(--t-xs); font-weight:700; letter-spacing:.08em;
  text-transform:uppercase; color:var(--acc); }
.clave-modal .ayuda-modal-cab{ padding-block:.8rem; }
.clave-modal .recuperar-cuerpo{ padding-block:1rem 1.15rem; }
.clave-modal .sub{ margin:.35rem 0 1rem; }
.clave-modal .field{ margin-bottom:.7rem; }
.clave-modal.clave-modal .input-ic .input{ height:48px; }
.clave-modal .run-estado:empty{ display:none; }
.clave-modal .clave-nota{ margin:.2rem 0 .9rem; padding:.6rem .75rem; font-size:var(--t-xs); }
.clave-modal .av-entrada-btn{ margin-top:0; height:50px; }
.clave-modal .clave-volver{ margin-top:.85rem; }
.no-js .clave-modal[open], .sin-dialog .clave-modal[open]{ position:fixed; inset:0; z-index:60; margin:auto;
  width:min(460px, calc(100vw - 2rem)); height:max-content; max-height:92dvh; overflow:auto;
  border:0; box-shadow:0 0 0 100vmax rgba(7,17,41,.55), var(--sh-lg); }

/* ----------------------------- 9 · PANEL ---------------------------- */
/* El acceso del panel: mismo lenguaje, campo medianoche a pantalla
   completa para que se note que es la intranet y no el aula. */
.adm-wrap{ min-height:100dvh; display:flex; align-items:center;
           justify-content:center; padding:1.5rem; }
.adm-card{ width:100%; max-width:400px; }
.adm-brand{ text-align:center; margin-bottom:1.6rem; color:#fff; }
.adm-brand img{ height:56px; width:auto; margin:0 auto .9rem; }
.adm-brand h1{ color:#fff; font-size:1.5rem; }
.adm-brand .kicker{ justify-content:center; color:rgba(255,255,255,.7); }
.adm-brand .kicker::before{ background:var(--acc-nav); }

/* Tablas del panel. Se estilan por elemento —el PHP las escribe con
   estilos en línea— pero esto pone la base para que se vean parejas. */
.card table{ width:100%; border-collapse:collapse; font-size:var(--t-sm); }
.card thead th{ background:var(--sf2); color:var(--mut); font-weight:600;
                text-align:left; font-size:var(--t-xs);
                border-bottom:1px solid var(--ln); }
.card tbody tr{ border-top:1px solid var(--ln2); }
.card tbody tr:hover{ background:var(--sf2); }

/* ------------------ 10 · UTILIDADES Y RESPONSIVO -------------------- */
.row{ display:flex; gap:var(--gap); }
.col{ display:flex; flex-direction:column; gap:var(--gap); }
.between{ display:flex; align-items:center; justify-content:space-between; gap:.75rem; }
.wrap-gap{ display:flex; flex-wrap:wrap; gap:.6rem; }
.stack > * + *{ margin-top:var(--gap); }
.only-mobile{ display:none; }

/* Cualquier tabla ancha se desplaza dentro de su caja, nunca la página. */
.card > div[style*="overflow-x"]{ -webkit-overflow-scrolling:touch; }

@media (max-width: 900px){
  .auth{ grid-template-columns:1fr; }
  .auth-aside{ display:none; }
}

@media (max-width: 780px){
  /* Deja sitio a la barra inferior fija. */
  body{ padding-bottom:var(--nav-bot-h); }
  .av-nav{ display:none; }
  .av-botnav{ display:flex; }
  .hide-mobile{ display:none !important; }
  .only-mobile{ display:flex; }
  .av-user-nm, .av-user-rl{ display:none; }
  .grid{ grid-template-columns:1fr; }
  /* En el teléfono el titular ocupa todo el ancho y pasa POR ENCIMA del
     sello: el velo lateral ya no alcanza, así que baja la opacidad.
     Es el mismo .2 que usa el sitio en su punto de quiebre. */
  .hero-emblem{ opacity:.2; inset:0 -18% 0 auto; }
  .row{ flex-wrap:wrap; }
  /* En el teléfono el pie no necesita el margen grande de escritorio. */
  footer{ margin-top:1.5rem; }
}

/* Respeta a quien pide menos movimiento. */
@media (prefers-reduced-motion: reduce){
  html{ scroll-behavior:auto; }
  *{ animation-duration:.01ms !important; animation-iteration-count:1 !important;
     transition-duration:.01ms !important; }
  .course:hover{ transform:none; }
}

/* Impresión: que un certificado o una lista salgan legibles. */
/* =====================================================================
   PORTADA DEL ALUMNO (principal.php)

   «Inicio» y «Mis cursos» eran la misma tabla con dos títulos. La tabla
   completa se quedó en «Mis cursos» y la portada pasó a contestar las
   tres preguntas con las que el alumno abre el aula: dónde iba, qué
   sigue, y si se perdió algún aviso. Estas son las piezas de eso.
   ===================================================================== */

/* ── Dónde ibas ──
   La tarjeta grande. Texto a la izquierda, acción a la derecha, y en el
   teléfono una sobre otra con el botón a todo el ancho: en pantalla
   angosta un botón de «entrar» que no ocupa la línea entera se falla al
   tocarlo. */
.av-continuar{
  display:flex; flex-wrap:wrap; gap:clamp(1rem, 3vw, 1.75rem);
  align-items:center; justify-content:space-between;
  border-left:3px solid var(--brand); }
.av-continuar-tx{ flex:1 1 20rem; min-width:0; }
.av-continuar-tx h2{ margin:.15rem 0 0; font-size:1.22rem; letter-spacing:-.015em; }
.av-continuar-ac{ flex:0 1 15rem; }
@media (max-width:640px){
  .av-continuar-ac{ flex:1 1 100%; }
}

/* ── Qué sigue ──
   Misma figura que los bloques de aviso que ya usa el aula: aro con
   icono, texto al medio, acción al final. */
.av-proxima{
  display:flex; flex-wrap:wrap; gap:.9rem; align-items:center; }

/* ── Bloque con cabecera y enlace a la lista completa ── */
.av-bloque-cab{
  display:flex; align-items:baseline; justify-content:space-between;
  gap:.75rem; margin:0 0 .75rem; }
.av-bloque-cab h2{ margin:0; font-size:1.06rem; letter-spacing:-.01em; }
.av-bloque + .av-bloque, .av-bloque{ margin-top:var(--gap); }

/* Un aviso en la portada es un resumen, no la noticia: título, dos
   líneas y la fecha. La noticia entera está en su pantalla. */
.av-aviso{ padding:.9rem 1.05rem; }
.av-aviso p{ max-width:none; }

/* =====================================================================
   NOTICIAS Y ANUNCIOS
   ===================================================================== */

/* Cabecera del aviso: la etiqueta del curso y la fecha. En pantalla ancha
   van en la misma línea, la fecha al final; cuando el nombre del curso no
   cabe, la fecha baja sola en vez de empujar al chip a recortarse. */
.av-noti-cab{
  display:flex; flex-wrap:wrap; align-items:baseline;
  justify-content:space-between; gap:.35rem .75rem; margin-bottom:.55rem; }
/* El chip envuelve en dos líneas si hace falta: un nombre de curso a
   medias no identifica el curso, que es para lo único que está. */
.av-noti-curso{ white-space:normal; text-align:left; line-height:1.3; }
.av-noti-fecha{ flex:none; white-space:nowrap; }
.av-noti-tit{ margin:0 0 .5rem; font-size:1.14rem; letter-spacing:-.015em; }

/* =====================================================================
   MIS DATOS

   Era una columna de ocho campos seguidos, todos iguales, más un recuadro
   angosto de contraseña al costado. Ahora son cuatro fichas —identidad,
   contacto, cobertura y contraseña— que se leen por lo que agrupan.
   ===================================================================== */

/* Dos columnas en escritorio, una en teléfono. `minmax(0, …)` en las dos
   pistas: sin el piso de cero, un <select> largo —los nombres de los
   líderes de cobertura lo son— estira su columna y se lleva la página. */
.md-cols{
  display:grid; gap:var(--gap);
  grid-template-columns:minmax(0, 1.35fr) minmax(0, 1fr);
  align-items:start; }
@media (max-width:900px){
  .md-cols{ grid-template-columns:minmax(0, 1fr); }
}

/* El formulario largo es una columna de fichas, no una ficha con todo. */
.md-form{ display:flex; flex-direction:column; gap:var(--gap); }
.md-h2{ margin:0; font-size:1.02rem; letter-spacing:-.01em; }
.md-sub{ margin:.2rem 0 1rem; }

/* El botón guarda las tres fichas de su formulario, así que va suelto
   debajo de ellas y no dentro de ninguna. */
.md-guardar{ align-self:flex-start; }
@media (max-width:640px){
  .md-guardar{ align-self:stretch; }
}

.md-clave{ align-self:start; }

@media print{
  .av-top, .av-botnav, footer, .btn{ display:none !important; }
  body{ background:#fff; color:#000; font-size:11pt; }
  .card{ border:1px solid #ccc; box-shadow:none; break-inside:avoid; }
}

/* =====================================================================
   12 · ARMAZÓN DEL AULA ORIGINAL (oct 2026)

   El dueño pidió que el aula quede con la MISMA disposición del original
   —mismos menús, mismas secciones, en el mismo lugar— y que sólo mejoren
   el diseño y el comportamiento en el teléfono, para que nadie se pierda
   con el cambio. El original tiene dos armazones y acá están los dos:

   · FUERA DEL CURSO (al ingresar, «Cursos inscritos»): sin barra de menú.
     El logo y el título van en el contenido; abajo, el pie con
     «Cerrar Sesión».
   · DENTRO DEL CURSO (todas las demás): barra azul arriba con las siete
     secciones del curso, banda azul con el emblema y el título de la
     sección, el contenido, el pie con Dirección y Contacto, y una barra
     fija abajo con Mis datos · Mis Cursos · asistencia · Cerrar Sesión.

   Lo que cambia es cómo se ve: tipografía y colores del sistema, la
   pestaña activa marcada, y en el teléfono el menú del curso se pliega
   en un botón y la barra de abajo se vuelve íconos.
   ===================================================================== */

/* --- La barra del curso (arriba) ------------------------------------ */
.av-cmenu{ position:sticky; top:0; z-index:40; background:var(--renacer); color:#fff;
  box-shadow:0 1px 0 rgba(255,255,255,.08), 0 2px 10px rgba(0,20,70,.18); }
.av-cmenu-in{ max-width:1440px; margin-inline:auto; padding-inline:clamp(.5rem, 2vw, 1.5rem);
  display:flex; align-items:stretch; }
.av-cmenu-btn{ display:none; }
.av-cmenu-lista{ list-style:none; margin:0; padding:0; display:flex; width:100%; }
/* Como el original: las siete secciones reparten el ancho de la barra. */
.av-cmenu-lista li{ flex:1 1 auto; }
.av-cmenu-lista a{ justify-content:center; text-align:center; }
.av-cmenu-lista li + li{ border-left:1px solid rgba(255,255,255,.22); }
.av-cmenu-lista a{ display:flex; align-items:center; min-height:46px; padding:.35rem .7rem;
  color:rgba(255,255,255,.88); font-size:.875rem; font-weight:600; letter-spacing:.005em;
  white-space:nowrap; position:relative; }
.av-cmenu-lista a:hover{ color:#fff; text-decoration:none; background:rgba(255,255,255,.08); }
.av-cmenu-lista a[aria-current="page"]{ color:#fff; }
.av-cmenu-lista a[aria-current="page"]::after{ content:""; position:absolute; left:1rem; right:1rem;
  bottom:0; height:3px; border-radius:3px 3px 0 0; background:#fff; }
.av-cmenu :focus-visible{ outline-color:#fff; }

/* Teléfono, tableta y escritorio angosto (hasta 1180px, donde el logotipo
   y las siete secciones ya no caben en una fila): el menú del curso es un
   botón que muestra la sección actual y despliega las siete. Sin
   JavaScript se ven todas. */
@media (max-width: 1180px){
  .av-cmenu-in{ flex-direction:column; padding-inline:0; }
  .av-cmenu-lista{ display:flex; }
  .js .av-cmenu-btn{ display:flex; align-items:center; gap:.6rem; width:100%; min-height:50px;
    padding:.5rem var(--pad); background:none; border:0; color:#fff; cursor:pointer;
    font-family:var(--sans); font-size:.95rem; font-weight:600; text-align:left; }
  .av-cmenu-btn .rot{ font-weight:400; color:rgba(255,255,255,.75); }
  .av-cmenu-btn .ir{ margin-left:auto; display:inline-flex; transition:transform var(--t-fast); }
  .av-cmenu.abierto .av-cmenu-btn .ir{ transform:rotate(180deg); }
  .av-cmenu-lista{ flex-direction:column; flex-wrap:nowrap; padding:0 0 .4rem;
    border-top:1px solid rgba(255,255,255,.14); }
  .js .av-cmenu:not(.abierto) .av-cmenu-lista{ display:none; }
  .av-cmenu-lista li + li{ border-left:0; }
  .av-cmenu-lista a{ min-height:48px; padding:.5rem var(--pad); font-size:.95rem; justify-content:flex-start; text-align:left; }
  .av-cmenu-lista a[aria-current="page"]{ background:rgba(255,255,255,.12); }
  .av-cmenu-lista a[aria-current="page"]::after{ left:0; right:auto; top:0; bottom:0;
    width:4px; height:auto; border-radius:0 3px 3px 0; }
}

/* --- La banda (emblema + título + bajada) --------------------------- */
.av-banda{ position:relative; overflow:hidden; color:#fff;
  background:linear-gradient(90deg, rgba(0,34,102,.72), rgba(0,34,102,.38) 60%, rgba(0,34,102,.55)),
             url(/banner/main.jpg) center/cover no-repeat, var(--renacer); }
.av-banda-in{ max-width:var(--wrap); margin-inline:auto; padding:clamp(1.6rem, 4vw, 2.6rem) var(--pad); }
.av-banda h1{ color:#fff; font-size:clamp(1.45rem, 1.1rem + 1.4vw, 2.15rem); line-height:1.15; margin:0; }
.av-banda-tx{ margin-top:.55rem; max-width:72ch; color:rgba(255,255,255,.9);
  font-size:clamp(.95rem, .9rem + .2vw, 1.03rem); line-height:1.6; }
.av-banda-tx b, .av-banda-tx strong{ color:#fff; }

/* --- Volver arriba (el «toplink» del original) ---------------------- */
.av-arriba{ position:fixed; right:max(14px, env(safe-area-inset-right)); bottom:calc(var(--barra-h, 0px) + 14px);
  z-index:44; width:44px; height:44px; border-radius:50%; display:inline-flex; align-items:center;
  justify-content:center; background:var(--sf); color:var(--renacer); border:1px solid var(--ln);
  box-shadow:var(--sh-lg); opacity:0; pointer-events:none; transform:translateY(8px);
  transition:opacity var(--t), transform var(--t); }
body:not(.con-barra) .av-arriba{ bottom:max(14px, env(safe-area-inset-bottom)); }
.av-arriba.ver{ opacity:1; pointer-events:auto; transform:none; }
.av-arriba:hover{ color:#fff; background:var(--renacer); text-decoration:none; }

@media print{
  .av-cmenu, .av-barra, .av-pie, .av-arriba{ display:none !important; }
  .av-banda{ background:none; color:#000; }
  .av-banda h1, .av-banda-tx{ color:#000; }
}

/* --- Bloques de las pantallas del curso (armazón original) ---------- */
.av-pagina{ flex:1 0 auto; width:100%; }
.av-sec{ max-width:var(--wrap); margin-inline:auto; padding:clamp(1.75rem, 4vw, 3rem) var(--pad); }
.av-sec + .av-sec{ padding-top:0; }
.av-sec-tit{ display:flex; align-items:flex-start; justify-content:space-between; gap:1.5rem; }
.av-sec-tit h2{ font-size:clamp(1.3rem, 1.1rem + .8vw, 1.7rem); color:var(--ink); margin:0; }
.av-sec-tit p{ margin:.5rem 0 0; max-width:75ch; }
/* Oct 2026: el ícono del módulo (antes, el sello de la escuela repetido). */
.av-sec-tit .av-sec-ic{ flex:none; width:76px; height:76px; border-radius:22px; display:inline-flex; align-items:center;
  justify-content:center; background:var(--acc-sf); color:var(--acc); border:1px solid var(--acc-bd); }
@media (max-width:640px){ .av-sec-tit .av-sec-ic{ display:none; } }
.av-tit-curso{ font-size:clamp(1.3rem, 1.1rem + .9vw, 1.75rem); color:var(--renacer); margin:0 0 .8rem; }

/* Columnas: contenido + lateral (índice, visor, recursos) o mitades. */
.av-dos{ display:grid; gap:clamp(1.25rem, 3vw, 2.5rem); align-items:start;
  grid-template-columns:minmax(0, 1fr) minmax(260px, .52fr); }
.av-dos.mitad{ grid-template-columns:minmax(0, 1fr) minmax(0, 1fr); align-items:center; }
.av-dos.uno{ grid-template-columns:minmax(0, 1fr); }
@media (max-width: 900px){ .av-dos, .av-dos.mitad{ grid-template-columns:minmax(0, 1fr); } }
.av-lat{ background:var(--sf); border:1px solid var(--ln); border-radius:var(--r); padding:1.1rem 1.15rem; }
.av-lat > * + *{ margin-top:1.1rem; }
.av-lat h3{ font-size:1rem; color:var(--ink); margin:0 0 .6rem; }

/* Prosa que viene de la base (bienvenida, descripción, contenido). */
.av-prosa{ color:var(--ink2); }
.av-prosa > * + *{ margin-top:.85em; }
.av-prosa p{ margin:0; max-width:none; }
/* Justificado como el original, pero sólo donde la línea es larga: en el
   teléfono el justificado abre huecos entre palabras. */
/* Oct 2026: sin justificar ni cortar palabras con guion («finaliza-do»): a la izquierda se lee mejor. */
.av-prosa p, .content-html p, .av-faq-it p, .av-faq-it div{ text-align:left !important; hyphens:manual !important; }
.av-prosa img{ border-radius:var(--r-sm); }
.av-video{ width:100%; border-radius:var(--r); background:#000; box-shadow:var(--sh-lg); }
.av-embed{ position:relative; aspect-ratio:16/9; width:100%; border-radius:var(--r); overflow:hidden;
  background:#000; margin-block:1rem; }
.av-embed iframe{ position:absolute; inset:0; width:100%; height:100%; border:0; }

/* La franja «Recursos del Curso». */
.av-franja{ color:#fff; background:linear-gradient(90deg, rgba(0,34,102,.78), rgba(0,34,102,.5)),
  url(/banner/main.jpg) center/cover no-repeat, var(--renacer); }
.av-franja-in{ max-width:var(--wrap); margin-inline:auto; padding:clamp(1.6rem, 4vw, 2.6rem) var(--pad); }
.av-franja h2{ color:#fff; font-size:clamp(1.25rem, 1.1rem + .7vw, 1.6rem); margin:0; }
.av-franja p{ margin:.55rem 0 0; max-width:80ch; color:rgba(255,255,255,.9); }

/* Ilustración + texto + botones. */
.av-material{ max-width:var(--wrap); margin-inline:auto; padding:clamp(1.75rem, 4vw, 3rem) var(--pad);
  display:grid; grid-template-columns:minmax(140px, 260px) minmax(0, 1fr); gap:clamp(1.25rem, 4vw, 3rem);
  align-items:center; }
.av-material img{ width:100%; height:auto; }
.av-material h2{ font-size:1.25rem; color:var(--ink); margin:0 0 .4rem; }
.av-material p{ margin:0; max-width:70ch; }
.av-material-bts{ display:flex; flex-wrap:wrap; gap:.75rem; margin-top:1.1rem; }
.av-material-btn{ min-height:54px; padding-inline:1.6rem; font-size:1rem; }
@media (max-width: 640px){
  .av-material{ grid-template-columns:minmax(0,1fr); text-align:left; }
  .av-material img{ width:150px; }
  .av-material-btn{ flex:1 1 100%; justify-content:center; }
}

/* La ficha de datos con ícono (equipo, documentación, fechas…). */
.av-ficha{ margin:0; display:grid; gap:.95rem; }
.av-ficha-it{ display:grid; grid-template-columns:38px minmax(0,1fr); gap:.7rem; align-items:start; }
.av-ficha-ic{ width:38px; height:38px; border-radius:10px; display:inline-flex; align-items:center;
  justify-content:center; background:var(--acc-sf); color:var(--renacer); }
.av-ficha dt{ font-size:.74rem; font-weight:700; letter-spacing:.07em; text-transform:uppercase; color:var(--ink); }
.av-ficha dd{ margin:.1rem 0 0; font-size:var(--t-sm); line-height:1.5; overflow-wrap:anywhere; }
.av-ficha-linea{ display:block; }
/* Cuatro datos en fila (fechas, modalidad, cupos), dos en tableta, uno en teléfono. */
.av-ficha.fila{ grid-template-columns:repeat(4, minmax(0,1fr)); gap:1rem 1.25rem;
  background:var(--sf); border:1px solid var(--ln); border-radius:var(--r); padding:1.1rem 1.15rem; }
@media (max-width: 900px){ .av-ficha.fila{ grid-template-columns:repeat(2, minmax(0,1fr)); } }
@media (max-width: 480px){ .av-ficha.fila{ grid-template-columns:minmax(0,1fr); } }

/* Lista de temáticas (índice y lateral del visor). */
.av-tematicas{ list-style:none; margin:0; padding:0; display:grid; gap:.1rem; }
.av-tematicas a{ display:block; padding:.5rem .6rem; border-radius:var(--r-sm); color:var(--ink2);
  font-size:var(--t-sm); line-height:1.4; }
.av-tematicas a:hover{ background:var(--acc-sf); color:var(--renacer); text-decoration:none; }
.av-tematicas a[aria-current="page"]{ background:var(--acc-sf); color:var(--renacer); font-weight:600;
  box-shadow:inset 3px 0 0 var(--renacer); }

/* El fondo de página del original: el emblema de la escuela, muy tenue. */
body.av-original{ background:var(--bg); }   /* oct 2026: sin el sello de agua de fondo (un solo sello, arriba) */

/* Índice: la ilustración del original junto a la descripción general. */
.av-desc-curso{ display:grid; grid-template-columns:auto minmax(0,1fr); gap:1.25rem; align-items:start; }
.av-desc-curso > img{ width:110px; height:auto; }
.av-requisitos{ margin:1rem 0 0; padding:.75rem .9rem; border-left:3px solid var(--renacer);
  background:var(--acc-sf); border-radius:0 var(--r-sm) var(--r-sm) 0; font-size:var(--t-sm); max-width:none; }
@media (max-width: 560px){
  .av-desc-curso{ grid-template-columns:minmax(0,1fr); }
  .av-desc-curso > img{ width:70px; }
}

/* Visor: la hoja de contenido, paginada como el original. */
.av-hoja{ background:var(--sf); border:1px solid var(--ln); border-radius:var(--r);
  padding:clamp(1.1rem, 3.5vw, 2.6rem); }
.av-hoja-vacia{ color:var(--renacer); font-weight:600; margin:0; }
.js [data-paginas] .av-pagina-cont{ display:none; }
.js [data-paginas] .av-pagina-cont.ver{ display:block; }
.av-pagina-cont + .av-pagina-cont{ margin-top:2rem; }
.js [data-paginas] .av-pagina-cont + .av-pagina-cont{ margin-top:0; }
.av-pagnav{ display:grid; grid-template-columns:1fr auto 1fr; align-items:center; gap:1rem;
  margin-top:1.75rem; padding-top:1rem; border-top:1px solid var(--ln2); font-size:var(--t-sm); }
.av-pagnav span:last-child{ text-align:right; }
.av-pagnav a{ display:inline-flex; align-items:center; min-height:40px; padding:.3rem .8rem;
  border-radius:var(--r-sm); border:1px solid var(--acc-bd); font-weight:600; }
.av-pagnav a:hover{ background:var(--acc-sf); text-decoration:none; }
.av-pagnav-n{ color:var(--mut); font-family:var(--mono); font-size:.82rem; }

/* Pie del visor: «Video de la Clase» y «Recursos del Curso». */
.av-aun-no{ color:var(--renacer); font-weight:600; }

/* Visualización de Grabación. */
.av-grab-tx{ font-size:var(--t-sm); margin:0; max-width:none; }
.av-volver-link{ font-size:var(--t-sm); font-weight:600; }

/* Lista de Asistencia. */
.av-msg{ margin:0 0 1rem; }
/* La lista de asistencia, una ficha por módulo. */
.av-mod-cab{ display:flex; align-items:baseline; justify-content:space-between; gap:.5rem 1rem; flex-wrap:wrap;
  margin:1.6rem 0 .6rem; }
.av-mod-cab:first-of-type{ margin-top:.4rem; }
.av-mod-cab h3{ margin:0; font-size:1.05rem; color:var(--acc); letter-spacing:-.01em; }
.av-mod-cuenta{ font-size:var(--t-xs); color:var(--mut); }
.av-tabla-caja + .av-tabla-caja{ margin-top:1rem; }

/* La hora, bajo la fecha y en gris. Lo que aún no hay, un «—» gris. */
.av-hora{ color:var(--mut); }
.av-nada{ color:#a6acb8; }
.av-resumen{ margin-top:var(--gap); padding:1.1rem 1.2rem; }
.av-resumen h3{ font-size:1rem; margin:0 0 .8rem; color:var(--ink); }
.av-nota-fila{ display:flex; justify-content:space-between; align-items:center; gap:1rem; flex-wrap:wrap;
  margin-top:1rem; font-size:var(--t-sm); }
.av-nota-fila p{ margin:0; max-width:none; }

/* Estados vacíos con el texto del original (mayúsculas + invitación). */
.av-vacio-orig p{ margin:0; text-align:center; color:var(--ink2); max-width:none; }
.av-vacio-orig b{ color:var(--renacer); letter-spacing:.02em; }

/* Noticias y Anuncios. */
.av-noticias-orig{ display:grid; gap:var(--gap); }
.av-noticia-orig{ display:grid; grid-template-columns:64px minmax(0,1fr); gap:1.1rem; padding:1.2rem 1.3rem; }
.av-noticia-orig > img{ width:56px; height:auto; }
.av-noticia-orig h3{ font-size:1.15rem; color:var(--ink); margin:0 0 .5rem; }
.av-noticia-orig .micro{ margin:.9rem 0 0; max-width:none; }
@media (max-width:560px){ .av-noticia-orig{ grid-template-columns:minmax(0,1fr); } .av-noticia-orig > img{ width:44px; } }

/* Preguntas Frecuentes. */
.av-faq{ display:grid; gap:var(--gap); max-width:980px; margin-inline:auto; }
.av-faq-it{ display:grid; grid-template-columns:56px minmax(0,1fr); gap:1.1rem; padding:1.2rem 1.3rem; }
.av-faq-ic{ width:52px; height:52px; }
.av-faq-it h3{ font-size:1.1rem; color:var(--renacer); margin:0 0 .45rem; }
@media (max-width:560px){ .av-faq-it{ grid-template-columns:40px minmax(0,1fr); gap:.8rem; } .av-faq-ic{ width:40px; height:40px; border-radius:12px; } .av-faq-ic svg{ width:22px; height:22px; } }

/* Recursos Complementarios. */
.av-tabla.t-recursos col.c-qr{ width:104px; }
.av-tabla.t-recursos col.c-tit{ width:22%; }
.av-tabla.t-recursos col.c-desc{ width:30%; }
.av-tabla.t-recursos col.c-tipo{ width:12%; }
.av-tabla.t-recursos col.c-pub{ width:18%; }
.av-tabla.t-recursos col.c-opc{ width:18%; }
.av-tabla .td-qr img{ width:86px; height:86px; image-rendering:pixelated; border:1px solid var(--ln);
  border-radius:var(--r-sm); padding:3px; background:#fff; }
@media (max-width: 860px){ .av-tabla .td-qr{ display:none !important; } }

/* Mis Datos (disposición del original). */
.md-orig{ display:grid; grid-template-columns:minmax(0, .9fr) minmax(0, 1.25fr); gap:var(--gap); align-items:start; }
.md-izq{ display:grid; gap:var(--gap); }
.md-qr{ display:flex; flex-direction:column; align-items:center; gap:.6rem; text-align:center; }
.md-qr img{ width:170px; height:170px; image-rendering:pixelated; border:1px solid var(--ln); border-radius:var(--r-sm); padding:4px; }
.md-qr a{ font-size:var(--t-xs); font-weight:600; }
/* Oct 2026: los rótulos ARRIBA de cada campo (al lado, alineados a la
   derecha, costaba leer cuál era cuál) y, en el escritorio, «Datos
   Personales» en dos columnas. Cada formulario lleva su título a la
   izquierda con una línea bajo él. */
.md-form-orig{ padding:1.4rem 1.5rem 1.5rem; }
.md-form-orig h2{ font-size:1.1rem; color:var(--acc); margin:0 0 1.1rem; padding-bottom:.7rem; text-align:left;
  border-bottom:1px solid var(--ln2); }
.md-campo{ display:grid; grid-template-columns:minmax(0,1fr); gap:.3rem; margin-bottom:.85rem; }
.md-campo label{ text-align:left; font-size:var(--t-sm); font-weight:600; color:var(--ink2); }
.md-campo .input[readonly]{ background:var(--sf2); color:var(--mut); }
.md-nota-campo{ margin:-.45rem 0 .85rem; }
.md-form-orig .run-estado{ margin:-.5rem 0 .7rem; }
.md-form-orig .run-estado:empty{ margin:0; }
.md-form-orig > .btn{ display:flex; margin:.6rem 0 0; min-height:48px; padding-inline:1.6rem; }
@media (min-width: 901px){
  .md-der{ display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); column-gap:1.1rem; align-content:start; }
  .md-der > :not(.md-campo){ grid-column:1 / -1; }
}
.md-msg{ margin:1.25rem 0 0; }
@media (max-width: 900px){ .md-orig{ grid-template-columns:minmax(0,1fr); } }
@media (max-width: 560px){
  .md-form-orig{ padding:1.15rem 1.1rem 1.25rem; }
  .md-form-orig > .btn{ width:100%; justify-content:center; }
}

/* Ingreso (disposición del original): logo + bienvenida, formulario con el
   botón al lado de los campos, el mensaje debajo y el pie de contacto. */
.av-ingreso{ display:flex; align-items:center; }
.av-ingreso-in{ width:100%; max-width:720px; margin-inline:auto; padding:clamp(1.75rem, 5vw, 3.5rem) var(--pad); }
.av-ingreso-cab h1{ font-size:clamp(1.5rem, 1.2rem + 1.2vw, 2.05rem); }
.av-ingreso-form{ display:grid; grid-template-columns:minmax(0,1fr) 170px; gap:1rem 1.25rem;
  align-items:stretch; padding:clamp(1.1rem, 3vw, 1.6rem); }
.av-ingreso-campos .field:last-child{ margin-bottom:0; }
.av-ingreso-btn{ height:auto; min-height:56px; font-size:1.05rem; justify-content:center; align-self:center;
  padding-block:1.4rem; }
.av-ingreso-msg{ margin:1rem 0 0; }
.av-ingreso .ayuda-boton{ margin-top:1rem; }
/* Sello propio del aula (oct 2026): la web, Inscripciones y el aula
   comparten logo y colores; el ingreso se distingue por una banda azul
   detrás de la cabecera, el título «Aula Virtual» y el sello. El
   formulario queda montado sobre el borde de la banda. */
.av-ingreso{ align-items:flex-start; position:relative; isolation:isolate; overflow:hidden; }
/* La banda cuelga de la cabecera: crece con su texto en cualquier ancho y
   siempre termina 2.5rem dentro de la tarjeta. */
.av-ingreso-cab{ position:relative; }
.av-ingreso-cab::before{ content:""; position:absolute; z-index:-1; left:50%; width:100vw;
  transform:translateX(-50%); top:-12rem; bottom:calc(-1 * (clamp(1.25rem, 3vw, 2rem) + 2.5rem));
  background:
    radial-gradient(60% 120% at 85% 0%, rgba(127,166,255,.28), transparent 60%),
    linear-gradient(160deg, var(--renacer-dark) 0%, var(--renacer) 70%, #1747b3 100%); }
.av-ingreso-cab{ color:#fff; }
.av-ingreso-cab h1{ color:#fff; line-height:1.05; letter-spacing:-.01em;
  font-size:clamp(1.9rem, 1.4rem + 2vw, 2.7rem); }
.av-ingreso-cab h1 span{ display:block; margin-top:.35rem; font-size:.42em; font-weight:500;
  letter-spacing:.02em; color:rgba(255,255,255,.78); }
.av-ingreso-cab p{ color:rgba(255,255,255,.86); font-size:var(--t-sm); }
.av-ingreso-cab p b{ color:#fff; }
.av-ingreso-logo img{ filter:drop-shadow(0 6px 18px rgba(0,0,0,.25)); }
.av-sello{ display:inline-flex; align-items:center; gap:.4rem; margin-bottom:.7rem;
  padding:.28rem .7rem .28rem .55rem; border-radius:var(--r-full);
  font-size:.72rem; font-weight:700; letter-spacing:.12em; text-transform:uppercase;
  color:var(--renacer-dark); background:#fff; box-shadow:0 2px 10px rgba(0,0,0,.18); }
.av-sello svg{ color:var(--renacer); }
.av-ingreso-form{ box-shadow:var(--sh-lg); border-top:4px solid var(--acc-nav); }
@media (max-width: 560px){ .av-ingreso-cab h1{ font-size:2rem; } }
@media (max-width: 600px){
  .av-ingreso-form{ grid-template-columns:minmax(0,1fr); }
  .av-ingreso-btn{ padding-block:.9rem; width:100%; }
  .av-ingreso-cab{ text-align:left; }
}
.av-sec-tit{ margin-bottom:clamp(1.25rem, 3vw, 1.75rem); }

/* =====================================================================
   13 · EL TEMA DE LA WEB DE LA ESCUELA (oct 2026)

   Pedido: aplicar los colores de escuelasrenacer.cl, incorporar los logos
   de la escuela donde se pueda y con la misma tonalidad, SIN cambiar la
   estructura de ninguna pantalla. Todo lo de esta sección es piel: se
   puede quitar entera y el aula vuelve a verse como antes, con los mismos
   menús y los mismos datos.

   Lo que se toma de la web (web_escuela/assets/escuela.css):
   · LETRA. Roboto en titulares (700) y en el texto, como irenacer.cl;
     Fraunces sólo para la Escritura; cifras en Roboto tabular.
   · CHROME MEDIANOCHE. La barra del curso, la banda, las franjas, el pie
     y la barra de abajo van en --nav (#071129) con el halo de --renacer
     arriba a la derecha: es el héroe y la barra de la web.
   · ACENTO. Botones, títulos de curso y enlaces en --acc (#0e2a63); lo
     activo sobre el medianoche en --acc-nav (#7fa6ff).
   · EL SELLO. En una sola tinta: blanco sobre el medianoche, marino
     (--acc) sobre los fondos claros (assets/img/emblema-escuela-azul.png
     se regeneró en ese marino; el de dos azules quedó como
     emblema-escuela-azul-dostonos.png), y como marca de agua en las
     bandas, igual que en los banners de la web.
   ===================================================================== */

:root{
  --titulo:'Roboto',system-ui,-apple-system,'Segoe UI',sans-serif;
  --sans:'Roboto',system-ui,-apple-system,'Segoe UI',sans-serif;
  --mono:'Roboto',system-ui,-apple-system,'Segoe UI',sans-serif;
  --codigo:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace;
  /* Escritura: Fraunces, como la web. */
  --serif:'Fraunces',Georgia,'Times New Roman',serif;
  /* El fondo del héroe de la web: halo azul arriba a la derecha sobre el
     medianoche. */
  --halo:radial-gradient(circle at 84% -20%,
           color-mix(in srgb, var(--renacer) 48%, transparent) 0%,
           color-mix(in srgb, var(--renacer) 12%, transparent) 38%,
           transparent 62%);
}

/* --- Letra ----------------------------------------------------------- */
h1,h2,h3,h4{ font-family:var(--titulo); }
h1,h2{ font-weight:700; letter-spacing:-.015em; }
h3{ font-weight:600; }
.fechas, .av-barra-asis b, .av-pagnav-n,
.av-ficha dd, .av-tabla td{ font-variant-numeric:tabular-nums; }
.fechas{ font-size:var(--t-xs); }
#usu, #run, .md-campo #r{ font-family:var(--codigo); letter-spacing:.01em; }

/* --- La barra del curso: la barra de la web -------------------------- */
/* Como la barra de la web de la escuela (oct 2026): a la izquierda el
   logotipo de la IGLESIA a tamaño legible; las siete secciones juntas a
   continuación, alineadas con el contenido, y la actual como una pastilla
   suave. Sin separadores entre ítems. */
.av-cmenu{ background:var(--nav); border-bottom:1px solid var(--nav-ln);
  box-shadow:0 2px 14px rgba(7,17,41,.28); }
.av-cmenu-in{ max-width:var(--wrap); padding-inline:var(--pad); align-items:center; min-height:58px; }
.av-cmenu-marca{ display:flex; align-items:center; flex:none; margin-right:18px; }
.av-cmenu-marca img{ height:38px; width:auto; }
.av-cmenu-lista{ align-items:center; gap:2px; }
.av-cmenu-lista li{ flex:0 0 auto; }
.av-cmenu-lista li + li{ border-left:0; }
.av-cmenu-lista a{ min-height:34px; padding:0 .6rem; border-radius:8px; justify-content:flex-start;
  color:rgba(255,255,255,.72); font-size:.8125rem; font-weight:500; letter-spacing:0; }
.av-cmenu-lista a:hover{ color:#fff; background:rgba(255,255,255,.06); }
.av-cmenu-lista a[aria-current="page"]{ color:#fff; font-weight:500; background:rgba(127,166,255,.14); }
.av-cmenu-lista a[aria-current="page"]::after{ display:none; }
.av-cmenu :focus-visible{ outline-color:var(--acc-nav); }
@media (max-width: 1180px){
  /* Plegado: el logotipo a la izquierda y, a la derecha, «Menú del curso»
     con la sección actual debajo y el ícono ☰ (como el botón de la web).
     La lista se despliega abajo, a todo el ancho. */
  .av-cmenu-in{ flex-direction:row; flex-wrap:wrap; align-items:center; padding-inline:0; min-height:0; }
  .av-cmenu-marca{ margin:0; padding:.6rem .5rem .6rem var(--pad); }
  .av-cmenu-marca img{ height:32px; }
  .js .av-cmenu-btn{ flex:1 1 0; width:auto; min-width:0; justify-content:flex-end; gap:.75rem;
    padding:.5rem var(--pad) .5rem .5rem; text-align:right; }
  .av-cmenu-btn-tx{ min-width:0; font-size:.9rem; line-height:1.2; }
  .av-cmenu-btn .rot{ display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
    font-size:.75rem; color:rgba(255,255,255,.62); }
  .av-cmenu-btn .rot .pt{ display:none; }
  .av-cmenu-btn > svg{ flex:none; }
  .av-cmenu-lista{ flex-basis:100%; gap:0; align-items:stretch; border-top-color:var(--nav-ln); }
  .av-cmenu-lista a{ min-height:48px; padding:.5rem var(--pad); border-radius:0; font-size:.95rem; color:var(--nav-ink); }
  .av-cmenu-lista a[aria-current="page"]{ background:var(--nav-hov); box-shadow:inset 4px 0 0 var(--acc-nav); }
}

/* --- La banda y las franjas: el héroe de la web, con su sello -------- */
.av-banda{ position:relative; overflow:hidden; isolation:isolate;
  background:var(--halo), var(--nav); }   /* + «polvo de estrellas» (sección 15) */
.av-banda h1{ letter-spacing:-.02em; }
.av-banda-tx{ color:rgba(255,255,255,.8); }

.av-arriba{ color:var(--acc); }
.av-arriba:hover{ background:var(--acc); }

/* --- El contenido: títulos, fichas y tablas en el marino de la web --- */
.av-tit-curso, .av-material h2, .av-dudas h2,
.av-faq-it h3, .md-form-orig h2, .av-hoja-vacia, .av-aun-no{ color:var(--acc); }
.av-sec-tit h2{ color:var(--ink); }
.av-lat{ border-top:3px solid var(--acc); box-shadow:var(--sh); }
.av-lat h3{ color:var(--acc); }
.av-ficha-ic{ background:var(--acc-sf); color:var(--acc); }
.av-ficha dt{ color:var(--acc); }
.av-tematicas a:hover, .av-tematicas a[aria-current="page"]{ color:var(--acc); }
.av-tematicas a[aria-current="page"]{ box-shadow:inset 3px 0 0 var(--acc); }
.av-tabla th{ background:var(--acc-sf) !important; color:var(--acc); }
.av-requisitos{ border-left-color:var(--acc); }
.av-vacio-orig b{ color:var(--acc); }
.av-pagnav a{ color:var(--acc); }
.btn-primary{ background:var(--acc); }
.btn-primary:hover{ background:var(--renacer-hover); }
/* La Escritura dentro de las clases, en Fraunces como en la web. */
.content-html blockquote{ font-family:var(--serif); }

/* =====================================================================
   14 · EL INGRESO — OPCIÓN B (ESCRITORIO) Y A (TELÉFONO) DEL LIENZO (oct 2026)

   Escritorio: pantalla dividida. A la izquierda, «Trazar derecho»: el
   sello quieto con dos anillos de luz, una línea recta que se traza,
   2 Timoteo 2:15 y al pie el logotipo de la iglesia, sobre el medianoche
   de la web con su halo (sin la red de los banners, 6-oct-2026). A la
   derecha, sin logo y sin partículas (6-oct-2026): rótulo, «Aula
   Virtual», la bienvenida, el formulario, el mensaje, la ayuda y el
   contacto. Teléfono: «Trazar derecho» en versión de teléfono (al final).
   ===================================================================== */
@keyframes av-anillo{ 0%{ transform:scale(.85); opacity:.55; } 100%{ transform:scale(1.45); opacity:0; } }
@keyframes av-halo{ 0%,100%{ transform:translate(0,0); } 50%{ transform:translate(60px,-40px); } }
@keyframes av-sube{ from{ opacity:0; transform:translateY(16px); } to{ opacity:1; transform:none; } }
@keyframes av-pop{ 0%{ transform:scale(.3); opacity:0; } 70%{ transform:scale(1.18); } 100%{ transform:scale(1); opacity:1; } }

body.av-entrada{ background:var(--bg); }
.av-entrada-grid{ position:relative; isolation:isolate; min-height:100dvh; display:grid; grid-template-columns:minmax(380px, 44%) minmax(0, 1fr); }

/* Los logos y la Palabra: «Trazar derecho». */
@keyframes av-aparece{ from{ opacity:0; } to{ opacity:1; } }
@keyframes av-traza{ from{ transform:scaleX(0); } to{ transform:scaleX(1); } }
@keyframes av-luz{ 0%{ left:0; opacity:0; } 10%{ opacity:1; } 100%{ left:100%; opacity:1; } }
@keyframes av-luz-fin{ to{ opacity:0; transform:scale(.4); } }
@keyframes av-destello{ 0%{ left:0; opacity:0; } 8%{ opacity:1; } 30%,100%{ left:calc(100% - 70px); opacity:0; } }
.av-entrada-marca{ position:relative; overflow:hidden; isolation:isolate; background:var(--nav);
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  padding:3rem 2rem calc(42px + 5rem); }
/* Sin la red de los banners ni partículas: el dueño las quitó del ingreso
   el 6-oct-2026. Queda el medianoche con el halo. */
.av-entrada-halo{ position:absolute; z-index:-1; left:-220px; bottom:-280px; width:780px; height:780px; border-radius:50%;
  background:radial-gradient(circle, rgba(0,51,153,.6) 0%, rgba(0,51,153,.14) 45%, transparent 68%);
  animation:av-halo 20s ease-in-out infinite; }
.av-entrada-col{ display:flex; flex-direction:column; align-items:center; text-align:center; }
/* El sello no se mueve: sólo aparece; lo que late son sus dos anillos. */
.av-entrada-sello{ position:relative; display:block; width:clamp(170px, min(17vw, 30vh), 230px); aspect-ratio:1;
  animation:av-aparece 1s ease-out both; }
.av-entrada-sello img{ width:100%; height:100%; filter:drop-shadow(0 18px 40px rgba(0,0,0,.45)); }
.av-entrada-sello .anillo{ position:absolute; inset:0; border-radius:50%; border:1.5px solid rgba(127,166,255,.5);
  animation:av-anillo 4s ease-out infinite; pointer-events:none; }
.av-entrada-sello .anillo.b{ animation-delay:2s; }
.av-entrada-sello:focus-visible{ outline:2px solid var(--acc-nav); outline-offset:8px; border-radius:50%; }
/* La línea recta: se traza de izquierda a derecha con un punto de luz en
   la punta, y cada tanto la recorre un destello. */
.av-entrada-traza{ position:relative; display:block; width:min(300px, 80%); height:9px; margin:clamp(1.75rem, 5vh, 2.75rem) 0 clamp(1.25rem, 3.5vh, 1.9rem); }
.av-entrada-traza i{ position:absolute; display:block; }
.av-entrada-traza .linea{ left:0; right:0; top:4px; height:1px; transform-origin:left center;
  background:linear-gradient(90deg, rgba(127,166,255,0), rgba(127,166,255,.75) 18%, rgba(127,166,255,.75) 82%, rgba(127,166,255,0));
  animation:av-traza 1.4s cubic-bezier(.65,0,.35,1) .6s both; }
.av-entrada-traza .luz{ left:0; top:1px; width:7px; height:7px; margin-left:-3px; border-radius:50%; background:#fff;
  box-shadow:0 0 12px 4px rgba(127,166,255,.85);
  animation:av-luz 1.4s cubic-bezier(.65,0,.35,1) .6s both, av-luz-fin .8s ease-out 2s forwards; }
.av-entrada-traza .destello{ left:0; top:3px; width:70px; height:3px; border-radius:2px; opacity:0;
  background:linear-gradient(90deg, transparent, rgba(255,255,255,.85), transparent);
  animation:av-destello 7s ease-in-out 3s infinite; }
.av-entrada-palabra{ max-width:23.5rem; margin:0; animation:av-sube 1s cubic-bezier(.22,1,.36,1) 1.9s both; }
.av-entrada-palabra blockquote{ margin:0; font-family:var(--serif); font-style:italic; font-size:clamp(1rem, .7rem + .55vw, 1.16rem);
  line-height:1.5; color:rgba(255,255,255,.8); font-variation-settings:'opsz' 20, 'SOFT' 0, 'WONK' 0; }
.av-entrada-palabra figcaption{ margin-top:.75rem; font-size:.7rem; font-weight:700; letter-spacing:.14em;
  text-transform:uppercase; color:var(--acc-nav); }
/* El logotipo de la iglesia, al pie del panel. */
.av-entrada-iglesia{ position:absolute; left:0; right:0; bottom:2.5rem; width:max-content; margin:0 auto;
  animation:av-aparece 1s ease-out .3s both; }
.av-entrada-iglesia img{ height:42px; width:auto; opacity:.88; }
.av-entrada-iglesia a:hover img{ opacity:1; }

/* El panel del formulario. */
.av-entrada-panel{ display:flex; flex-direction:column; padding:clamp(1.5rem, 3vw, 2.5rem) clamp(1.25rem, 4vw, 3.5rem) 1.25rem; }
.av-entrada-in{ flex:1; width:100%; max-width:440px; margin:auto; padding-block:1rem;
  animation:av-sube .8s cubic-bezier(.22,1,.36,1) .1s both; }
.av-entrada-cab{ display:flex; flex-direction:column; gap:.55rem; margin-bottom:1.5rem; }
.av-entrada-rotulo{ display:flex; align-items:center; gap:.6rem; margin:0; font-size:var(--t-sm); font-weight:500; color:var(--mut); }
.av-entrada-rotulo::before{ content:""; width:24px; height:1px; background:var(--acc-bd); flex:none; }
.av-entrada-cab h1{ font-size:clamp(2.3rem, 1.8rem + 2vw, 3rem); line-height:1; letter-spacing:-.02em; color:var(--ink); }
.av-entrada-cab h1 span{ color:var(--acc); }
.av-entrada-bienv{ margin:.35rem 0 0; font-size:var(--t-sm); line-height:1.6; max-width:none; }
.av-entrada-bienv b{ color:var(--ink); }

.av-entrada-form .field{ margin-bottom:1.05rem; }
.av-entrada-form label{ font-size:var(--t-sm); font-weight:600; color:var(--ink); }
.av-entrada .input-ic .input,
.av-entrada .input-ic input[type=text].input,
.av-entrada .input-ic input[type=password].input{ height:54px; border-width:1.5px; border-radius:12px; font-size:1.05rem;
  border-color:#dfe3ea; transition:border-color var(--t-fast), box-shadow var(--t-fast); }
.av-entrada .input-ic .input:focus{ border-color:var(--acc); box-shadow:0 0 0 4px rgba(14,42,99,.13); }
/* El visto verde cuando el RUN está bien escrito (lo marca js/aula_ingreso.js). */
.av-entrada .field:has(.run-estado.ok) .input-ic::after{ content:""; position:absolute; right:14px; top:50%;
  width:24px; height:24px; margin-top:-12px; border-radius:50%; animation:av-pop .4s cubic-bezier(.34,1.56,.64,1) both;
  background:#067a55 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.8' stroke-linecap='round'%3E%3Cpath d='M5 12l4 4 10-10'/%3E%3C/svg%3E") center / 14px no-repeat; }
.av-entrada-btn{ display:flex; width:100%; height:56px; justify-content:center; margin-top:.4rem; font-size:1.05rem;
  border-radius:12px; transition:transform var(--t-fast), background var(--t-fast), box-shadow var(--t-fast); }
.av-entrada-btn:hover{ transform:translateY(-2px); box-shadow:0 18px 30px -14px rgba(14,42,99,.7); }
.av-entrada-btn svg{ transition:transform var(--t-fast); }
.av-entrada-btn:hover svg{ transform:translateX(4px); }
.av-entrada-msg{ margin:1rem 0 0; }
/* «¿Cómo ingreso?» como pastilla centrada. */
.av-entrada .ayuda-boton{ width:max-content; max-width:100%; margin:1.1rem auto 0; min-height:46px; border-radius:var(--r-full);
  padding-inline:1.1rem; }
.av-entrada .ayuda-boton .ir{ display:none; }

/* 2 Timoteo 2:15 al pie del formulario: sólo en el teléfono (ver abajo);
   en el escritorio está bajo el sello. */
.av-entrada-cita{ display:none; margin:0; padding-left:.9rem; border-left:1px solid var(--escritura-bd); text-align:left; }
.av-entrada-cita blockquote{ margin:0; font-family:var(--serif); font-style:italic; line-height:1.5;
  font-variation-settings:'opsz' 18, 'SOFT' 0, 'WONK' 0; }
.av-entrada-cita figcaption{ margin-top:.4rem; font-weight:700; letter-spacing:.08em; text-transform:uppercase; }

.av-entrada-pie{ display:flex; align-items:center; gap:1rem 1.5rem; flex-wrap:wrap; width:100%; max-width:640px;
  margin:1.5rem auto 0; padding-top:1.1rem; border-top:1px solid var(--ln); font-size:var(--t-xs); color:var(--mut); }
.av-entrada-pie p{ margin:0; line-height:1.6; max-width:none; }
.av-entrada-pie a{ color:var(--acc); font-weight:500; }
.av-entrada-redes{ margin-left:auto; display:flex; gap:.45rem; }
.av-entrada-redes a{ display:inline-flex; width:40px; height:40px; border-radius:50%; align-items:center; justify-content:center;
  color:var(--acc); background:var(--sf); border:1px solid var(--ln);
  transition:background var(--t-fast), color var(--t-fast), transform var(--t-fast); }
.av-entrada-redes a:hover{ background:var(--acc); color:#fff; transform:translateY(-2px); text-decoration:none; }
.sr{ position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }

/* Teléfono y tableta angosta: «Trazar derecho» en versión de teléfono. Sin
   el panel de los logos: la cabecera es la franja medianoche de la web (con
   el halo, sin la red de los banners), con el sello quieto y centrado,
   la línea que se traza, el rótulo y «Aula Virtual» —la bienvenida queda
   sólo en el escritorio, para que el principio sea simple—; el formulario
   es una tarjeta blanca que monta sobre el borde de la franja; la parte
   clara va sin partículas; la Palabra va al pie con su línea corta, y
   el contacto en el pie medianoche con el logotipo de la iglesia. */
.av-entrada-cab-marca, .av-entrada-pie-marca{ display:none; }
@media (max-width: 900px){
  body.av-entrada{ padding-bottom:0; }   /* el ingreso no tiene la barra inferior del aula */
  .av-entrada-grid{ display:block; overflow-x:clip; }
  .av-entrada-marca{ display:none; }
  .av-entrada-panel{ min-height:100dvh; padding:0 1.25rem; }
  .av-entrada-in{ padding:0; animation:none; }

  /* La franja: de borde a borde aunque el contenido mida 440 px. */
  .av-entrada-cab{ position:relative; isolation:isolate; overflow:hidden; align-items:center; gap:.6rem; text-align:center;
    margin:0 calc(50% - 50vw); padding:1.9rem calc(50vw - 50%) 5rem;
    background:
      radial-gradient(circle, rgba(0,51,153,.65) 0%, rgba(0,51,153,.15) 45%, transparent 68%) right -220px top -220px / 520px 520px no-repeat,
      var(--nav); }   /* sin la red de los banners (6-oct-2026) */
  .av-entrada-cab-marca{ display:flex; flex-direction:column; align-items:center; }
  .av-entrada-cab-marca .sello{ position:relative; width:96px; height:96px; animation:av-aparece 1s ease-out both; }
  .av-entrada-cab-marca img{ width:96px; height:96px; filter:drop-shadow(0 10px 22px rgba(0,0,0,.45)); }
  .av-entrada-cab-marca .anillo{ position:absolute; inset:0; border-radius:50%; border:1.5px solid rgba(127,166,255,.5);
    animation:av-anillo 4s ease-out infinite; }
  .av-entrada-cab-marca .anillo.b{ animation-delay:2s; }
  .av-entrada-cab-marca .av-entrada-traza{ width:180px; margin:1.35rem 0 .7rem; }
  /* El texto sube al entrar; el sello no se mueve. */
  .av-entrada-cab > :not(.av-entrada-cab-marca){ animation:av-sube .8s cubic-bezier(.22,1,.36,1) .25s both; }
  .av-entrada-rotulo{ color:rgba(255,255,255,.72); }
  .av-entrada-rotulo::before, .av-entrada-rotulo::after{ content:""; width:18px; height:1px; background:var(--acc-nav); flex:none; }
  .av-entrada-cab h1, .av-entrada-cab h1 span{ color:#fff; }
  .av-entrada-cab h1{ font-size:2.3rem; }
  .av-entrada-bienv{ display:none; }

  /* La tarjeta del formulario. */
  .av-entrada-form{ position:relative; margin-top:-3.5rem; padding:1.4rem 1.15rem 1.25rem; background:#fff;
    border-radius:18px; border-top:4px solid var(--acc); box-shadow:0 26px 50px -28px rgba(7,17,41,.6);
    animation:av-sube .8s cubic-bezier(.22,1,.36,1) .4s both; }
  .av-entrada .ayuda-boton{ width:100%; margin-top:1rem; min-height:54px; border-radius:12px; }
  .av-entrada .ayuda-boton .ir{ display:inline-flex; }

  /* La Palabra al pie, centrada, con una línea corta que también se traza. */
  .av-entrada-cita{ display:flex; flex-direction:column; align-items:center; width:100%; max-width:440px;
    margin:2.1rem auto 0; padding:0 .9rem; border:0; text-align:center; }
  .av-entrada-cita .av-entrada-traza{ width:120px; margin:0 0 1rem; }
  .av-entrada-traza.clara .linea{ animation-delay:1.4s;
    background:linear-gradient(90deg, rgba(14,42,99,0), rgba(14,42,99,.35) 20%, rgba(14,42,99,.35) 80%, rgba(14,42,99,0)); }
  .av-entrada-traza.clara .luz{ background:var(--acc-nav); box-shadow:0 0 10px 3px rgba(127,166,255,.6);
    animation-delay:1.4s, 2.8s; }
  .av-entrada-cita blockquote{ font-size:.92rem; color:#5a6a91; animation:av-aparece 1s ease-out 2.2s both; }
  .av-entrada-cita figcaption{ margin-top:.5rem; font-size:.66rem; letter-spacing:.14em; color:#546aa3;
    animation:av-aparece 1s ease-out 2.4s both; }

  /* El pie medianoche, centrado, con el logotipo de la iglesia. */
  .av-entrada-pie{ width:auto; max-width:none; flex-direction:column; justify-content:center; gap:1rem; text-align:center;
    margin:2rem -1.25rem 0; padding:1.6rem max(1.25rem, calc(50vw - 220px)) 1.85rem;
    border-top:0; background:var(--nav); color:rgba(255,255,255,.68); }
  .av-entrada-pie a{ color:#fff; }
  .av-entrada-pie-marca{ display:block; }
  .av-entrada-pie-marca img{ width:auto; height:40px; opacity:.92; }
  .av-entrada-redes{ margin-left:0; }
  .av-entrada-redes a{ color:#fff; background:rgba(255,255,255,.08); border-color:rgba(255,255,255,.16); }
  .av-entrada-redes a:hover{ background:#fff; color:var(--acc); }
}
@media (prefers-reduced-motion: reduce){
  .av-entrada *, .av-entrada *::before, .av-entrada *::after{ animation:none !important; transition:none !important; }
}

/* =====================================================================
   15 · CURSOS INSCRITOS Y MIS CURSOS — HÍBRIDA «A + B» DEL LIENZO (oct 2026)

   La portada del alumno (principal.php) recibe con la franja medianoche
   del ingreso: el sello blanco, «Cursos inscritos», una línea que se
   traza y el saludo del original. Los cursos (aquí y en «Mis Cursos»)
   son fichas que montan sobre el borde de la franja: nombre y estado,
   fechas, equipo completo, modalidad y libro, y «[+]Entrar» grande; en el
   teléfono, «[+]Entrar» queda justo bajo el nombre. La Nota va destacada
   y «¿Dudas o consultas?» es un centro de contacto con fichas grandes.
   ===================================================================== */

/* La portada sin el sello de agua de fondo: lo reemplaza la franja. */
body.av-original.av-ins{ background:var(--bg); }

/* La franja: el medianoche con su halo y el «polvo de estrellas». */
.av-franja-ins{ position:relative; overflow:hidden; isolation:isolate; color:rgba(255,255,255,.82);
  background:
    radial-gradient(circle, rgba(0,51,153,.6) 0%, rgba(0,51,153,.14) 45%, transparent 68%) right -220px top -220px / 620px 620px no-repeat,
    var(--nav); }
.av-franja-ins-in{ max-width:min(1400px, 100%); margin-inline:auto;   /* alineada con la tabla de cursos */
 
  padding:clamp(2rem, 4vw, 2.75rem) var(--pad) clamp(6rem, 9vw, 7.4rem); }
.av-franja-ins .av-msg{ margin:0 0 1.5rem; }
.av-franja-ins-cab{ display:flex; align-items:center; gap:clamp(1.25rem, 3vw, 2.1rem);
  animation:av-sube .8s cubic-bezier(.22,1,.36,1) both; }
.av-franja-ins-cab > a{ flex:none; }
.av-franja-ins-cab img{ width:clamp(84px, 9vw, 118px); height:auto; filter:drop-shadow(0 12px 26px rgba(0,0,0,.45)); }
.av-franja-ins h1{ margin:0; color:#fff; font-size:clamp(1.9rem, 1.4rem + 1.6vw, 2.4rem); line-height:1.06; letter-spacing:-.02em; }
.av-trazo{ display:block; width:120px; height:2px; margin:.8rem 0 0; transform-origin:left;
  background:linear-gradient(90deg, var(--acc-nav), rgba(127,166,255,0));
  animation:av-traza 1.1s cubic-bezier(.65,0,.35,1) .4s both; }
.av-franja-ins p{ margin:.8rem 0 0; max-width:66ch; font-size:var(--t-sm); line-height:1.65; }
.av-franja-ins p b{ color:#fff; }
.av-sec.av-ins-cursos{ position:relative; padding-top:0; margin-top:clamp(-5rem, -7vw, -3.25rem); }
/* Los cursos piden más ancho que el texto: menos líneas partidas. */
.av-sec:has(> .av-cursos-caja){ max-width:min(1400px, 100%); }

/* =====================================================================
   16 · EL ARMAZÓN DEL CURSO — ARMAZÓN 2 DEL LIENZO + LA WEB (oct 2026)
   Arriba, el logotipo de la iglesia en la barra (§13); en la banda, el
   sello de la escuela de marca de agua a la derecha, como el héroe de la
   web. La barra de abajo es una franja plana y fija, como la del original
   pero sin logos: quién eres a la izquierda; Mis datos, Mis Cursos, la
   asistencia y Cerrar Sesión a la derecha. El pie reserva su alto para
   que nunca tape el contenido.
   ===================================================================== */
/* El sello de la ESCUELA como marca de agua a la derecha, igual que el
   héroe de la web (.ee-heroe::before): entero, centrado en alto, disuelto
   en sus bordes con una máscara (la banda es más baja que el sello y así
   no queda ningún canto cortado) y respirando muy despacio. Sutil: es
   textura, no un logo que compita con el título. */
.av-banda::before{ content:""; position:absolute; z-index:-1; pointer-events:none;
  top:50%; right:clamp(.5rem, 3vw, 2.5rem); height:clamp(220px, 24vw, 330px); aspect-ratio:1;
  translate:0 -50%;
  background:url("/assets/img/emblema-escuela-blanco.png") center/contain no-repeat;
  opacity:.13;
  -webkit-mask-image:radial-gradient(closest-side, #000 72%, rgba(0,0,0,.5) 88%, transparent 100%);
          mask-image:radial-gradient(closest-side, #000 72%, rgba(0,0,0,.5) 88%, transparent 100%);
  animation:av-respira 22s ease-in-out infinite; }
.av-banda-in{ position:relative; }
@keyframes av-respira{ 0%,100%{ transform:rotate(-4deg) scale(1); } 50%{ transform:rotate(4deg) scale(1.025); } }
@media (max-width: 640px){
  .av-banda::before{ right:-22%; height:230px; opacity:.1; }
}
@media (prefers-reduced-motion: reduce){ .av-banda::before{ animation:none; } }
@media print{ .av-banda::before{ display:none; } }

:root{ --barra-h:63px; }
body.con-barra{ padding-bottom:0; }
.con-barra .av-pie-in{ padding-bottom:calc(1.6rem + var(--barra-h) + env(safe-area-inset-bottom)); }
.av-barra{ position:fixed; z-index:45; left:0; right:0; bottom:0; color:rgba(255,255,255,.75);
  background:#0b1630; border-top:1px solid rgba(255,255,255,.1);
  padding-bottom:env(safe-area-inset-bottom); font-size:.8125rem; }
.av-barra-in{ max-width:var(--wrap); margin-inline:auto; padding:12px var(--pad);
  display:flex; align-items:center; gap:14px; }
.av-barra a{ color:#fff; }
.av-barra-quien{ display:flex; align-items:center; gap:10px; min-width:0; }
.av-barra-ava{ flex:none; width:36px; height:36px; border-radius:50%; display:inline-flex; align-items:center;
  justify-content:center; background:#173a80; color:#fff; font-weight:700; font-size:.8125rem; }
.av-barra-quien-tx{ min-width:0; line-height:1.35; }
.av-barra-quien-tx b{ display:block; color:#fff; font-size:.8125rem; font-weight:700; white-space:nowrap;
  overflow:hidden; text-overflow:ellipsis; }
.av-barra-quien-tx .cargo{ font-weight:400; color:rgba(255,255,255,.6); }
.av-barra-quien-tx small{ display:block; color:rgba(255,255,255,.55); font-size:.72rem; white-space:nowrap; }
.av-barra-esp{ flex:1; }
.av-barra-ir{ display:inline-flex; align-items:center; gap:8px; height:38px; padding:0 14px; flex:none;
  border-radius:10px; border:1px solid rgba(255,255,255,.16); font-weight:600; white-space:nowrap;
  transition:background var(--t-fast), border-color var(--t-fast); }
.av-barra-ir:hover{ background:rgba(255,255,255,.08); text-decoration:none; }
.av-barra-ir[aria-current="page"]{ background:rgba(127,166,255,.16); border-color:rgba(127,166,255,.4); }
.av-barra-asis{ display:inline-flex; align-items:center; gap:10px; height:38px; padding:0 14px; flex:none;
  border-radius:10px; background:rgba(255,255,255,.05); white-space:nowrap; }
.av-barra-asis b{ color:#fff; font-weight:700; }
.av-barra-total{ color:#9dbbff; font-weight:700; }
.av-barra-salir{ padding:0 16px; background:#0e2a63; border-color:rgba(127,166,255,.35); }
.av-barra-salir:hover{ background:#173a80; }
/* Escritorio angosto: el nombre se guarda (queda al pasar sobre la inicial). */
@media (max-width: 1180px){ .av-barra-quien-tx{ display:none; } }
/* Teléfono y tableta: cuatro íconos con rótulo, a todo el ancho. */
@media (max-width: 960px){
  :root{ --barra-h:64px; }
  .av-barra-in{ display:grid; grid-template-columns:repeat(4, minmax(0,1fr)); gap:0; padding:0; }
  .av-barra-quien, .av-barra-esp, .av-barra-asis .det{ display:none; }
  .av-barra-ir, .av-barra-asis{ flex-direction:column; justify-content:center; gap:4px; height:auto; min-height:64px;
    padding:10px 4px 12px; border:0; border-radius:0; background:none; font-size:.72rem; font-weight:600;
    text-align:center; color:rgba(255,255,255,.8); }
  .av-barra-ir svg, .av-barra-asis svg{ width:22px; height:22px; }
  .av-barra-ir[aria-current="page"]{ background:rgba(127,166,255,.12); }
  .av-barra-asis, .av-barra-asis .av-barra-total{ color:#9dbbff; }
  .av-barra-salir, .av-barra-salir:hover{ background:none; }
}
@media print{ .av-barra{ display:none !important; } }

/* «B2 · agrupar» (oct 2026, lienzo de la sesión, sección 5): con el
   temporizador la franja quedó saturada —siete piezas, cinco con borde y el
   nombre cortado—. Tres zonas: quién eres · cómo vas · acciones, y dos
   cajas en vez de cinco. La asistencia es un anillo con el % (el original
   tenía uno), «Mis datos | Mis Cursos» van en un solo grupo y el
   temporizador va dentro de «Cerrar Sesión» (css/intranet/sesion.css). */
.av-barra-anillo, .av-barra-asis-tx, .av-barra-sep{ display:none; }
@media (min-width: 960.02px){
  .av-barra-asis{ gap:10px; height:auto; padding:0; background:none; }
  .av-barra-asis > svg, .av-barra-asis .av-barra-total{ display:none; }
  .av-barra-anillo{ position:relative; display:inline-grid; place-items:center; flex:none; width:40px; height:40px;
    border-radius:50%; background:conic-gradient(#7fa6ff calc(var(--pct, 0) * 1%), rgba(255,255,255,.14) 0); }
  .av-barra-anillo::before{ content:""; position:absolute; inset:4px; border-radius:50%; background:#0b1630; }
  .av-barra-anillo b{ position:relative; color:#fff; font-size:.6875rem; font-weight:700; }
  .av-barra-asis-tx{ display:flex; flex-direction:column; line-height:1.3; font-size:.75rem; white-space:nowrap; }
  .av-barra-asis-tx small{ color:rgba(255,255,255,.55); font-size:.6875rem; }
  .av-barra-sep{ display:block; width:1px; height:30px; flex:none; background:rgba(255,255,255,.12); }
  .av-barra-grupo{ display:inline-flex; align-items:center; height:38px; flex:none; overflow:hidden;
    border-radius:10px; border:1px solid rgba(255,255,255,.16); }
  .av-barra-grupo .av-barra-ir{ height:100%; border:0; border-radius:0; }
  .av-barra-grupo .av-barra-ir + .av-barra-ir{ border-left:1px solid rgba(255,255,255,.14); }
}
/* Teléfono: los cuatro íconos de siempre y en el orden del original. */
@media (max-width: 960px){
  .av-barra-grupo{ display:contents; }
  .av-barra-grupo .av-barra-ir{ order:1; }
  .av-barra-asis{ order:2; }
  .av-barra-salir{ order:3; }
}

/* Las ilustraciones viejas (imágenes) pasan a íconos de línea en un
   cuadro suave, como el resto del aula. */
.av-ilus{ flex:none; display:inline-flex; align-items:center; justify-content:center; width:104px; height:104px;
  border-radius:28px; background:var(--acc-sf); color:var(--acc); border:1px solid var(--acc-bd); }
.av-ilus.yt{ background:#fdecec; color:#c4302b; border-color:#f6c9c4; }
.av-ilus.chico{ width:56px; height:56px; border-radius:16px; }
.av-material > .av-ilus{ width:150px; height:150px; border-radius:36px; justify-self:center; }
@media (max-width: 640px){ .av-ilus{ width:72px; height:72px; border-radius:20px; }
  .av-ilus svg{ width:36px; height:36px; } .av-material > .av-ilus{ width:96px; height:96px; justify-self:start; } }

.av-ficha dd .al{ color:#9aa0ab; }
/* Paginación del visor: «Anterior»/«Siguiente» siempre en su lugar; en la
   primera y la última página, apagados. */
.av-pagnav-off{ display:inline-flex; color:#b4bac6; font-weight:600; cursor:default; }

/* Las temáticas, agrupadas por módulo, en una caja que se desplaza. */
.av-tematicas-caja{ max-height:min(62vh, 620px); overflow:auto; overscroll-behavior:contain; margin-right:-.4rem; padding-right:.4rem; }
.av-tem-mod{ position:sticky; top:0; z-index:1; margin:0; padding:.55rem .6rem .35rem; background:var(--sf);
  font-size:.72rem; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--acc); }
.av-tem-mod:not(:first-child){ margin-top:.5rem; border-top:1px solid var(--ln2); }

/* Títulos con su sello, como la web de la escuela: un cuadrito azul con
   el ícono en blanco y el texto en degradado (av_titulo()). */
.av-sello-ic{ display:inline-grid; place-items:center; flex:none; width:clamp(34px, 3vw, 40px); aspect-ratio:1;
  border-radius:11px; color:#fff; background:linear-gradient(140deg, #1c3f94 0%, #0e2a63 55%, #071a44 100%);
  box-shadow:0 10px 20px -12px rgba(7,26,68,.9), inset 0 1px 0 rgba(255,255,255,.18); }
.av-sello-ic svg{ width:52%; height:52%; stroke-width:1.9; }
:is(h2, h3):has(> .av-sello-ic){ display:flex; align-items:center; gap:.7rem; }
:is(h2, h3) > .tx{ background:linear-gradient(90deg, #0e2a63 0%, #1d4bb8 70%, #2a5bd7 100%);
  -webkit-background-clip:text; background-clip:text; color:transparent; -webkit-text-fill-color:transparent;
  padding-bottom:.06em; }
h3:has(> .av-sello-ic) .av-sello-ic{ width:30px; border-radius:9px; }
@media (max-width: 600px){ :is(h2, h3):has(> .av-sello-ic){ align-items:flex-start; } :is(h2, h3) > .av-sello-ic{ margin-top:.05em; } }

/* Las franjas intermedias («Recursos del Curso», el «¿Dudas o consultas?»
   de la Ayuda), CLARAS: con la banda y el pie medianoche, una tercera
   franja azul recargaba la pantalla. */
.av-franja{ position:relative; color:var(--ink2); border-block:1px solid var(--ln2);
  background:radial-gradient(70% 140% at 100% 0%, rgba(29,79,184,.07), transparent 60%), linear-gradient(180deg, #f6f8fd, #eef3fc) !important; }
.av-franja h2{ color:var(--acc); margin:0; }
.av-franja p{ margin:.7rem 0 0; color:var(--ink2); max-width:80ch; }
.av-franja .av-estrellas{ display:none; }

/* «Polvo de estrellas» (franja 2 del lienzo) en TODAS las franjas azules:
   la de la portada, la banda de las pantallas del curso y las franjas de
   en medio. Las motas (av_estrellas() en aula_ui.php) suben lentas desde
   el borde de abajo; en el teléfono van la mitad. */
@keyframes av-estrella{ to{ transform:translate(26px, -620px); } }
@keyframes av-estrella-b{ to{ transform:translate(-26px, -620px); } }
.av-estrellas{ position:absolute; inset:0; z-index:-1; overflow:hidden; pointer-events:none; }
.av-estrellas i{ position:absolute; bottom:-8px; border-radius:50%; box-shadow:0 0 6px rgba(188,208,255,.8);
  animation:av-estrella linear infinite; }
.av-estrellas i.b{ animation-name:av-estrella-b; }
@media (max-width: 640px){ .av-estrellas i:nth-child(n+27){ display:none; } }
@media print{ .av-estrellas{ display:none; } }

/* Aviso flotante (p. ej. «tu contraseña quedó cambiada»): arriba al
   centro, sobre todo, y se va solo a los 7 s. Con el mouse o el foco
   encima se queda; la X (js/aula.js) lo cierra antes. */
@keyframes av-aviso-entra{ from{ opacity:0; transform:translate(-50%, -14px); } to{ opacity:1; transform:translate(-50%, 0); } }
@keyframes av-aviso-sale{ to{ opacity:0; transform:translate(-50%, -14px); visibility:hidden; } }
@keyframes av-aviso-sale-quieto{ to{ opacity:0; visibility:hidden; } }
.av-aviso-flota{ position:fixed; z-index:70; top:max(1rem, env(safe-area-inset-top)); left:50%; transform:translateX(-50%);
  width:max-content; max-width:min(560px, calc(100vw - 2rem)); display:flex; align-items:flex-start; gap:.75rem;
  padding:.85rem .7rem .85rem 1rem; border-radius:14px; background:var(--sf); color:var(--ink2);
  border:1px solid #cfeadd; border-left:4px solid #0b9a6a; box-shadow:0 22px 50px -18px rgba(7,17,41,.55);
  font-size:var(--t-sm); line-height:1.5;
  animation:av-aviso-entra .45s cubic-bezier(.22,1,.36,1) both, av-aviso-sale .45s ease-in var(--av-aviso-dura, 7s) forwards; }
.av-aviso-flota:hover, .av-aviso-flota:focus-within{ animation-play-state:paused; }
/* Los que arma js/aula_aviso.js (copiar, el interruptor del QR, la
   asistencia por QR): rojo si algo falló, azul si sólo informa. Van como
   popover para quedar ENCIMA de una <dialog> abierta (la ventana del QR):
   se anulan los márgenes y el marco que el navegador le pone al popover. */
.av-aviso-flota.err{ border-color:#f3c4c0; border-left-color:#b42318; }
.av-aviso-flota.err .av-aviso-ic{ background:#fdecea; color:#b42318; }
.av-aviso-flota.info{ border-color:#cdd9f2; border-left-color:var(--acc); }
.av-aviso-flota.info .av-aviso-ic{ background:var(--acc-sf); color:var(--acc); }
.av-aviso-flota[popover]{ inset:auto; top:max(1rem, env(safe-area-inset-top)); left:50%; margin:0; overflow:visible; }
.av-aviso-tx{ padding-top:.15rem; }
.av-aviso-flota.se-va{ animation:av-aviso-sale .3s ease-in forwards; }
.av-aviso-flota b{ color:var(--ink); }
.av-aviso-ic{ flex:none; width:28px; height:28px; border-radius:50%; display:inline-flex; align-items:center;
  justify-content:center; background:#e6f5ee; color:#067a55; }
.av-aviso-cerrar{ flex:none; width:32px; height:32px; margin:-.2rem 0 0; border:0; border-radius:8px; background:none;
  color:var(--mut); cursor:pointer; display:inline-flex; align-items:center; justify-content:center; }
.av-aviso-cerrar:hover{ background:var(--sf3); color:var(--ink); }
.no-js .av-aviso-cerrar{ display:none; }

/* La tabla de los cursos: una sola, con filas compactas como franjas. La
   línea de color de cada fila (a la izquierda) dice su estado. */
.av-cursos-caja{ background:var(--sf); border:1px solid var(--ln); border-radius:16px; overflow:hidden;
  box-shadow:0 22px 44px -30px rgba(7,17,41,.6); animation:av-sube .7s cubic-bezier(.22,1,.36,1) both; }
.av-cursos-tabla{ width:100%; border-collapse:collapse; table-layout:fixed; font-size:.875rem; }
.av-cursos-tabla th{ text-align:left; padding:.8rem 1rem; font-size:.75rem; font-weight:600; letter-spacing:.01em;
  color:var(--mut); background:#f6f8fc; border-bottom:1px solid #e8ecf3; }
.av-cursos-tabla th:first-child{ padding-left:1.4rem; }
.av-cursos-tabla td{ padding:1.05rem 1rem; vertical-align:top; line-height:1.45; color:var(--ink2);
  transition:background var(--t-fast); }
/* Cada curso, un grupo: separador, fondo alterno y resaltado al pasar. */
.av-cursos-tabla .cu-grupo + .cu-grupo{ border-top:1px solid #dfe5ef; }
.av-cursos-tabla .cu-grupo:nth-of-type(even) td{ background:#f7f9fc; }
.av-cursos-tabla .cu-grupo:hover td{ background:#eff4fd; }
/* Anchos (con y sin «Link Libro»). */
.av-cursos-tabla th:nth-child(1){ width:20%; } .av-cursos-tabla th:nth-child(2){ width:12%; }
.av-cursos-tabla th:nth-child(3), .av-cursos-tabla th:nth-child(4){ width:11%; }
.av-cursos-tabla th:nth-child(5){ width:23%; } .av-cursos-tabla th:nth-child(6){ width:9%; }
.av-cursos-tabla.con-libro th:nth-child(1){ width:17%; } .av-cursos-tabla.con-libro th:nth-child(2){ width:11%; }
.av-cursos-tabla.con-libro th:nth-child(3), .av-cursos-tabla.con-libro th:nth-child(4){ width:10%; }
.av-cursos-tabla.con-libro th:nth-child(5){ width:22%; } .av-cursos-tabla.con-libro th:nth-child(6){ width:8%; }
.av-cursos-tabla.con-libro th:nth-child(7){ width:12%; }
.av-cursos-tabla th:last-child{ width:128px; }
/* La línea de estado. */
.cu-fila, .cu-sub{ --cu:#cdd3dd; }
.cu-ok{ --cu:#0b9a6a; } .cu-prox{ --cu:#3b6fd8; } .cu-off{ --cu:#d97706; }
.av-cursos-tabla td:first-child{ box-shadow:inset 5px 0 0 var(--cu); padding-left:1.4rem; }
.cu-nom{ font-weight:700; color:var(--ink); font-size:.98rem; line-height:1.3; }
.cu-est .chip{ font-size:.72rem; white-space:normal; border-radius:10px; align-items:flex-start; }
.cu-est .chip::before{ flex:none; margin-top:.3rem; }
.av-cursos-tabla .nw{ white-space:nowrap; }
.av-cursos-tabla .al{ color:#9aa0ab; font-size:.92em; }
.cu-fc, .cu-fi{ font-variant-numeric:tabular-nums; }
.cu-equ b{ display:block; color:var(--ink); font-weight:600; }
.cu-equ .miembro{ display:block; font-size:.78rem; }
.cu-libro{ display:inline-flex; align-items:flex-start; gap:.35rem; color:var(--acc); font-size:.78rem; font-weight:500;
  line-height:1.35; overflow-wrap:anywhere; }
.cu-libro svg{ flex:none; margin-top:.1rem; }
/* Nombres de archivo largos: dos líneas como máximo (el completo, al pasar). */
.cu-libro span{ display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.cu-acc{ vertical-align:middle !important; }
.cu-acc form{ margin:0; }
.cu-entrar{ width:100%; min-height:40px; padding:0 .6rem; justify-content:center; font-size:.9rem; border-radius:10px; }
/* «[+]Entrar» de un curso que aún no se abre: visible, pero apagado. */
.cu-entrar:disabled, .cu-entrar:disabled:hover{ background:#e7ebf2; color:#8a93a6; border-color:transparent;
  box-shadow:none; cursor:not-allowed; opacity:1; transform:none; }
/* La descripción del curso que aún no se abre, bajo su fila. */
.cu-sub td{ padding-top:0; padding-bottom:1rem; }
.cu-espera{ display:flex; gap:.45rem; align-items:flex-start; margin:0; max-width:none; padding:0;
  background:none; color:var(--mut); font-size:.8rem; line-height:1.45; }   /* sin fondo propio: no recarga */
.cu-espera svg{ flex:none; color:#3b6fd8; margin-top:.1rem; }

/* El libro del curso en una ventana: los datos del curso a la izquierda
   y el libro a la derecha; sin visor (teléfono, o un libro que no se
   puede mostrar), los datos y los botones. */
.libro-modal{ width:min(1180px, calc(100vw - 2rem)); }
.libro-modal.con-visor{ height:min(90dvh, 900px); }
.libro-modal.con-visor .ayuda-modal-in{ height:100%; }
.libro-modal .ayuda-modal-cab{ align-items:center; }
.libro-ic{ flex:none; width:44px; height:44px; border-radius:12px; display:inline-flex; align-items:center;
  justify-content:center; background:#eef2fa; color:var(--acc); }
.libro-cab-tx{ min-width:0; }
.libro-cab-tx .clave-kicker{ margin:0 0 .1rem; }
.libro-archivo{ margin:0; font-weight:600; color:var(--ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.libro-cuerpo{ flex:1 1 auto; min-height:0; display:grid; grid-template-columns:300px minmax(0,1fr); }
.libro-modal:not(.con-visor) .libro-cuerpo{ grid-template-columns:minmax(0,1fr) minmax(0,1fr); }
.libro-info{ overflow:auto; padding:1.15rem 1.25rem; border-right:1px solid var(--ln2); background:var(--sf2); }
.libro-curso{ margin:0 0 1rem; font-size:1.15rem; line-height:1.25; color:var(--acc); }
.libro-datos{ display:grid; gap:.8rem; margin:0; }
.libro-datos dt{ font-size:.72rem; font-weight:600; color:var(--mut); margin-bottom:.15rem; }
.libro-datos dd{ margin:0; font-size:var(--t-sm); line-height:1.45; color:var(--ink2); }
.libro-datos .nw{ white-space:nowrap; } .libro-datos .al{ color:#9aa0ab; }
.libro-equipo b{ display:block; color:var(--ink); }
.libro-equipo .miembro{ display:block; font-size:.82rem; }
.libro-visor{ min-height:0; background:#525659; }
.libro-visor iframe{ display:block; width:100%; height:100%; border:0; }
.libro-sin-visor{ display:flex; flex-direction:column; align-items:center; justify-content:center; gap:.8rem;
  padding:1.5rem; text-align:center; color:var(--mut); }
.libro-sin-visor[hidden], .libro-visor[hidden]{ display:none; }
.libro-sin-ic{ width:64px; height:64px; border-radius:18px; display:inline-flex; align-items:center; justify-content:center;
  background:#eef2fa; color:var(--acc); }
.libro-sin-visor p{ margin:0; max-width:28ch; font-size:var(--t-sm); }
.libro-modal .ayuda-modal-pie{ justify-content:flex-end; }
.libro-modal [data-libro-descargar][hidden]{ display:none; }
@media (max-width: 640px){ .libro-modal{ width:100%; } }   /* la hoja que sube desde abajo */
@media (max-width: 860px){
  .libro-cuerpo, .libro-modal:not(.con-visor) .libro-cuerpo{ grid-template-columns:minmax(0,1fr); }
  .libro-info{ border-right:0; border-bottom:1px solid var(--ln2); }
  .libro-sin-visor{ padding:1.1rem; }
  .libro-modal .ayuda-modal-pie{ flex-direction:column; align-items:stretch; }
  .libro-modal .ayuda-modal-pie .btn{ justify-content:center; min-height:48px; }
}

/* La Nota, destacada. */
.av-nota-simple{ display:flex; gap:.65rem; align-items:flex-start; margin:1.15rem 0 0; max-width:none;
  padding:.8rem 1rem; border-radius:12px; background:#eef3ff; color:var(--ink2); font-size:var(--t-sm); line-height:1.55; }
.av-nota-simple svg{ flex:none; color:#3b6fd8; margin-top:.12rem; }
.av-nota-simple b{ color:var(--acc); }

/* «¿Dudas o consultas?» / «Buscanos»: centro de contacto. */
.av-dudas{ max-width:var(--wrap); margin-inline:auto; padding:clamp(2rem, 5vw, 3.25rem) var(--pad) clamp(2.25rem, 5vw, 3.75rem);
  display:grid; grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr); gap:clamp(1.5rem, 4vw, 3.5rem); align-items:center; }
.av-dudas h2{ margin:0 0 .75rem; font-size:clamp(1.6rem, 1.2rem + 1.3vw, 2.2rem); line-height:1.08; letter-spacing:-.02em; color:var(--acc); }
.av-dudas p{ margin:0; max-width:46ch; line-height:1.65; }
.av-dudas p a{ color:var(--acc); }
.av-dudas-canales{ display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:.85rem; }
.av-canal{ display:flex; flex-direction:column; align-items:flex-start; gap:.85rem; padding:1.05rem; border-radius:18px;
  background:var(--sf); border:1px solid var(--ln); color:var(--ink);
  transition:transform var(--t-fast), box-shadow var(--t-fast), border-color var(--t-fast); }
.av-canal:hover{ transform:translateY(-3px); border-color:#c9d4ea; box-shadow:0 20px 34px -26px rgba(7,17,41,.6); text-decoration:none; color:var(--ink); }
.av-canal:focus-visible{ outline:2px solid var(--acc); outline-offset:3px; }
.av-canal-ic{ width:46px; height:46px; border-radius:14px; display:inline-flex; align-items:center; justify-content:center;
  background:#eef2fa; color:var(--acc); flex:none; }
.av-canal-txt{ display:flex; flex-direction:column; gap:.1rem; min-width:0; }
.av-canal-n{ font-weight:700; font-size:.97rem; }
.av-canal-d{ font-size:.8rem; color:var(--mut); overflow-wrap:anywhere; }
.av-canal.mayor{ grid-column:1 / -1; flex-direction:row; align-items:center; gap:1.1rem; padding:1.3rem 1.45rem; border:0; color:#fff;
  background:radial-gradient(80% 160% at 90% 0%, rgba(29,79,184,.9), rgba(29,79,184,0) 60%), linear-gradient(135deg, var(--acc), #0a1d47);
  box-shadow:0 26px 50px -34px rgba(7,17,41,.85); }
.av-canal.mayor:hover{ color:#fff; }
.av-canal.mayor .av-canal-ic{ width:58px; height:58px; border-radius:18px; background:rgba(255,255,255,.12); color:#fff; }
.av-canal.mayor .av-canal-n{ font-size:.85rem; font-weight:600; color:rgba(255,255,255,.72); }
.av-canal.mayor .av-canal-d{ font-size:clamp(1.05rem, .9rem + .6vw, 1.35rem); font-weight:700; color:#fff; letter-spacing:-.01em;
  overflow-wrap:normal; }   /* corta sólo tras la «@» (<wbr>) */
.av-canal-ir{ margin-left:auto; width:44px; height:44px; border-radius:50%; background:#fff; color:var(--acc); flex:none;
  display:inline-flex; align-items:center; justify-content:center; transition:transform var(--t-fast); }
.av-canal.mayor:hover .av-canal-ir{ transform:translateX(4px); }

/* Preguntas Frecuentes de la web, bajo el texto: tarjeta clara. */
.av-canal.av-dudas-faq{ flex-direction:row; align-items:center; gap:.95rem; margin-top:1.35rem; max-width:30rem;
  padding:.95rem 1rem; background:#eef3ff; border-color:#d6e1fb; }
.av-dudas-faq .av-canal-ic{ background:#fff; }
.av-dudas-faq .av-canal-n{ color:var(--acc); }
.av-dudas-faq .av-canal-d{ color:var(--ink2); }
.av-dudas-faq .av-canal-ir{ width:38px; height:38px; background:var(--acc); color:#fff; }
.av-dudas-faq:hover .av-canal-ir{ transform:translateX(4px); }

/* El pie: «tres bloques» del lienzo, más la web de la escuela. Logos |
   dirección | teléfono y correo | web | (fuera del curso) Cerrar Sesión,
   cada dato con su ícono, sobre el medianoche con el polvo de estrellas. */
.av-pie{ position:relative; overflow:hidden; isolation:isolate; margin-top:auto; color:rgba(255,255,255,.7);
  font-size:.86rem; line-height:1.6; border-top:1px solid var(--nav-ln);
  background:radial-gradient(circle, rgba(0,51,153,.55) 0%, rgba(0,51,153,.12) 45%, transparent 68%) left -260px top -300px / 640px 640px no-repeat,
             var(--nav); }
.av-pie-in{ max-width:var(--wrap); margin-inline:auto; padding:1.75rem var(--pad) 1.6rem;
  display:flex; align-items:center; flex-wrap:wrap; gap:1.25rem clamp(1.1rem, 2.2vw, 1.75rem); }
.av-pie a{ color:#fff; }
.av-pie a:hover{ color:#fff; text-decoration:underline; }
.av-pie-logos{ display:flex; align-items:center; gap:1rem; padding-right:clamp(1.1rem, 2.2vw, 1.75rem);
  border-right:1px solid rgba(255,255,255,.12); }
.av-pie-logos a:hover{ text-decoration:none; opacity:.85; }
.av-pie-sello img{ width:52px; height:52px; display:block; }
.av-pie-logo img{ height:30px; width:auto; display:block; opacity:.92; }
.av-pie-col{ display:flex; flex-direction:column; gap:.35rem; }
.av-pie-dato{ display:flex; gap:.6rem; align-items:flex-start; margin:0; max-width:none; }
.av-pie-dato svg{ flex:none; margin-top:.2rem; color:var(--acc-nav); }
.av-pie-salir{ margin-left:auto; display:inline-flex; align-items:center; gap:.55rem; min-height:46px; padding:0 1.35rem;
  border-radius:12px; border:1px solid rgba(255,255,255,.3); font-weight:600; white-space:nowrap;
  transition:background var(--t-fast), color var(--t-fast); }
.av-pie a.av-pie-salir:hover{ background:#fff; color:var(--acc); text-decoration:none; }
@media (max-width: 860px){
  .av-pie-in{ flex-direction:column; align-items:stretch; gap:1.1rem; padding:1.75rem 1.4rem 1.9rem; }
  .av-pie-logos{ justify-content:center; padding:0 0 1.2rem; border-right:0; border-bottom:1px solid rgba(255,255,255,.12); }
  .av-pie-dato{ font-size:.92rem; }
  .av-pie-salir{ margin:.35rem 0 0; justify-content:center; min-height:50px; }
}

@media (max-width: 860px){
  .av-dudas{ grid-template-columns:minmax(0,1fr); }
}
/* Tableta angosta y teléfono: la tabla sigue siendo una, pero cada curso
   es un bloque compacto: nombre y estado, «[+]Entrar», y los datos en dos
   columnas con su rótulo. */
@media (max-width: 860px){
  .av-cursos-tabla, .av-cursos-tabla tbody{ display:block; }
  .av-cursos-tabla .cu-grupo:nth-of-type(even) td, .av-cursos-tabla .cu-grupo:hover td{ background:none; }
  .av-cursos-tabla .cu-grupo:nth-of-type(even){ background:#f7f9fc; }
  .av-cursos-tabla thead{ display:none; }
  .av-cursos-tabla .cu-fila{ display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr);
    grid-template-areas:"nom nom" "est est" "acc acc" "fc fi" "equ equ" "mod lib";
    column-gap:.9rem; padding:.85rem 1rem .9rem 1.2rem; box-shadow:inset 4px 0 0 var(--cu); }
  .av-cursos-tabla:not(.con-libro) .cu-fila{ grid-template-areas:"nom nom" "est est" "acc acc" "fc fi" "equ equ" "mod mod"; }
  .av-cursos-tabla .cu-fila td{ display:block; padding:0; border:0 !important; box-shadow:none; }
  .cu-nom{ grid-area:nom; font-size:1rem; } .cu-est{ grid-area:est; margin-top:.4rem; }
  .cu-acc{ grid-area:acc; margin-top:.7rem; } .cu-fc{ grid-area:fc; } .cu-fi{ grid-area:fi; }
  .cu-equ{ grid-area:equ; } .cu-mod{ grid-area:mod; } .cu-lib{ grid-area:lib; }
  .cu-fc, .cu-fi, .cu-equ, .cu-mod, .cu-lib{ margin-top:.7rem; font-size:.84rem; }
  .av-cursos-tabla td[data-rot]::before{ content:attr(data-rot); display:block; margin-bottom:.1rem;
    font-size:.7rem; font-weight:600; color:var(--mut); }
  .cu-entrar{ min-height:46px; font-size:.95rem; }
  .av-cursos-tabla .cu-sub{ display:block; padding:0 1rem .9rem 1.2rem; box-shadow:inset 4px 0 0 var(--cu); }
  .av-cursos-tabla .cu-sub td{ display:block; padding:0; box-shadow:none; }
}
/* Teléfono: la ficha apilada, con «[+]Entrar» (o la espera) bajo el nombre. */
@media (max-width: 640px){
  .av-franja-ins-in{ padding:2.35rem 1.5rem 6rem; }
  .av-franja-ins-cab{ flex-direction:column; align-items:flex-start; gap:1.35rem; }
  .av-franja-ins-cab img{ width:76px; }
  .av-franja-ins p{ font-size:.95rem; line-height:1.7; margin-top:1.1rem; }
  .av-trazo{ width:90px; margin-top:.9rem; }
  .av-sec.av-ins-cursos{ margin-top:-3.25rem; padding-inline:1rem; }
  .av-dudas-canales{ gap:.6rem; }
  .av-canal{ align-items:center; text-align:center; gap:.6rem; padding:.9rem .5rem; }
  .av-canal .av-canal-txt{ align-items:center; }
  .av-canal .av-canal-d{ display:none; }
  .av-canal.mayor, .av-canal.av-dudas-faq{ text-align:left; padding:1rem; gap:.9rem; }
  .av-canal.mayor .av-canal-txt, .av-dudas-faq .av-canal-txt{ align-items:flex-start; }
  .av-dudas-faq .av-canal-d{ display:block; }
  .av-canal.mayor .av-canal-ic{ width:48px; height:48px; border-radius:15px; }
  .av-canal.mayor .av-canal-d{ display:block; font-size:1rem; }
  .av-canal-ir{ width:38px; height:38px; }
}
/* Fuera de un curso no hay barra fija abajo: sin su reserva (dejaba un
   espacio en blanco bajo el pie en el teléfono). */
@media (max-width: 780px){
  body.av-original:not(.con-barra){ padding-bottom:0; }
}
@media (prefers-reduced-motion: reduce){
  .av-franja-ins, .av-franja-ins *, .av-cursos-caja, .av-trazo{ animation:none !important; }
  /* El aviso igual se va (sin moverse): sólo se desvanece. */
  .av-aviso-flota{ animation:av-aviso-sale-quieto .3s linear 7s forwards !important; }
  .av-estrellas{ display:none; }
}

/* =====================================================================
   17 · LAS CITAS BÍBLICAS DE LA CLASE (js/aula_citas.js)
   La misma ventana de la Declaración de Fe de la web de la escuela
   (.ee-pasaje en web_escuela/assets/escuela.css): referencia arriba, el
   pasaje en la serif de la Escritura con el número volado, flechas entre
   las citas de la página, versión y BibleGateway al pie, y el crédito de
   la RVR1960 (condición de uso, no adorno). Mismos comentarios ⚠️ allá.
   ===================================================================== */
/* Discretas a propósito: en un párrafo con ocho citas, ocho enlaces
   subrayados a fondo hacen ilegible el texto. */
a.av-ref{
  color:var(--escritura); text-decoration:underline dotted var(--escritura-bd);
  text-underline-offset:3px; text-decoration-thickness:1.5px; }
a.av-ref:hover{ text-decoration:underline solid var(--escritura); }

/* ⚠️ Sin `position:relative`: el diálogo modal es `fixed` y eso ya ancla
   el sello de abajo. Pisarlo lo devolvía al flujo (la vista saltaba). */
.av-pasaje{
  width:min(560px, calc(100vw - 2rem)); max-height:min(80vh, 720px);
  padding:clamp(1.4rem, 4vw, 2.2rem);
  border:1px solid var(--ln); border-radius:var(--r);
  background:var(--sf); color:var(--ink2); box-shadow:var(--sh-lg);
  overflow:auto; }
/* El emblema de la iglesia, entero DENTRO del recuadro, al 7 %. */
.av-pasaje::before{
  content:""; position:absolute; z-index:0; pointer-events:none;
  right:1.5%; bottom:2.5%; width:min(240px, 56%); aspect-ratio:1;
  background:url("../assets/img/emblema-renacer.png") center/contain no-repeat;
  opacity:.07; }
.av-pasaje > *{ position:relative; z-index:1; }
.av-pasaje::backdrop{
  background:rgba(7,17,41,.62);
  -webkit-backdrop-filter:blur(3px); backdrop-filter:blur(3px); }
.av-pasaje[open]{ animation:av-pasaje-entra 220ms var(--ease); }
.av-pasaje[open]::backdrop{ animation:av-velo-entra 220ms var(--ease); }
@keyframes av-pasaje-entra{ from{ opacity:0; transform:translateY(10px) scale(.985); } to{ opacity:1; transform:none; } }
@keyframes av-velo-entra{ from{ opacity:0; } to{ opacity:1; } }

/* ⚠️ Absoluto, no flotado: flotado, el párrafo de la referencia pintaba
   encima de la X y se comía los clics. */
.av-pasaje .cerrar-form{ position:absolute; top:.8rem; right:.8rem; z-index:3; margin:0; }
.av-pasaje .cerrar{
  display:flex; align-items:center; justify-content:center;
  width:34px; height:34px; border-radius:var(--r-sm);
  background:none; border:1px solid transparent; color:var(--mut); cursor:pointer;
  transition:background var(--t-fast) var(--ease), color var(--t-fast) var(--ease); }
.av-pasaje .cerrar:hover{ background:var(--sf3); color:var(--ink); }
.av-pasaje .cerrar svg{ width:16px; height:16px; }

/* Arriba, en chico, dónde está la cita (la clase). */
.av-pasaje .contexto{
  margin:0 0 .3rem; padding-right:2.75rem;
  font-family:var(--mono); font-size:var(--t-xs); letter-spacing:.03em; color:var(--mut); }
.av-pasaje .contexto[hidden]{ display:none; }
.av-pasaje .ref{
  margin:0 0 1.1rem; padding-right:2.75rem; font-size:var(--t-sm);
  font-weight:700; letter-spacing:.03em; color:var(--escritura); }

/* La Palabra se lee en serif, sin cursiva, con el número volado. */
.av-pasaje .cuerpo p{
  font-family:var(--serif); font-size:1.14rem; line-height:1.62;
  color:var(--ink); margin:0 0 .75rem; text-align:left; hyphens:manual;
  font-variation-settings:'opsz' 20, 'SOFT' 0, 'WONK' 0; }
.av-pasaje .cuerpo p:last-child{ margin-bottom:0; }
.av-pasaje .cuerpo .v{
  font-family:var(--mono); font-size:.66em; font-weight:500;
  color:var(--escritura); vertical-align:.35em; margin-right:.4em;
  font-variant-numeric:tabular-nums; }
.av-pasaje .cuerpo .cargando,
.av-pasaje .cuerpo .error{ font-family:var(--sans); font-size:var(--t-sm); line-height:1.5; color:var(--mut); }
.av-pasaje .cuerpo .error{ color:var(--ink2); }
/* Cuando la clase cita otra versión («Juan 3:16 (NVI)»): una línea
   chica que lo dice, para que el alumno no crea que el texto cambió. */
.av-pasaje .nota{
  margin:1rem 0 0; padding:.55rem .75rem; border-radius:var(--r-sm);
  background:var(--escritura-sf); color:var(--ink2);
  font-size:var(--t-xs); line-height:1.45; }
.av-pasaje .nota[hidden]{ display:none; }

/* Las flechas recorren SÓLO las citas de esa página; en los extremos se
   apagan en vez de dar la vuelta. */
.av-pasaje .nav{
  display:flex; align-items:center; justify-content:space-between; gap:1rem;
  margin:1.4rem 0 0; }
.av-pasaje .nav[hidden]{ display:none; }
.av-pasaje .flecha{
  display:grid; place-items:center; width:40px; height:40px; flex:none; padding:0;
  border-radius:50%; border:1px solid var(--escritura-bd); background:var(--sf);
  color:var(--escritura); cursor:pointer;
  transition:background-color var(--t-fast) var(--ease), color var(--t-fast) var(--ease),
             transform var(--t-fast) var(--ease), opacity var(--t-fast) var(--ease); }
.av-pasaje .flecha svg{ width:18px; height:18px; }
.av-pasaje .flecha.ant svg{ transform:rotate(180deg); }
.av-pasaje .flecha:hover:not(:disabled){ background:var(--escritura); color:#fff; }
.av-pasaje .flecha.sig:hover:not(:disabled){ transform:translateX(2px); }
.av-pasaje .flecha.ant:hover:not(:disabled){ transform:translateX(-2px); }
.av-pasaje .flecha:disabled{ opacity:.35; cursor:default; }
.av-pasaje .pos{ font-family:var(--mono); font-size:var(--t-xs); color:var(--mut);
                 font-variant-numeric:tabular-nums; }
.av-pasaje .cuerpo.desde-der{ animation:av-pasaje-der 260ms var(--ease); }
.av-pasaje .cuerpo.desde-izq{ animation:av-pasaje-izq 260ms var(--ease); }
@keyframes av-pasaje-der{ from{ opacity:0; transform:translateX(18px); } to{ opacity:1; transform:none; } }
@keyframes av-pasaje-izq{ from{ opacity:0; transform:translateX(-18px); } to{ opacity:1; transform:none; } }

.av-pasaje .pie{
  display:flex; flex-wrap:wrap; gap:.4rem 1rem; justify-content:space-between;
  align-items:baseline; margin:1.5rem 0 0; padding-top:1rem;
  border-top:1px solid var(--ln); font-size:var(--t-xs); }
.av-pasaje .version{ color:var(--mut); }
.av-pasaje .pie a{ color:var(--escritura); font-weight:600; }
/* El crédito de la RVR1960: chico y sutil; está porque lo pide la
   política de uso de la versión, no para competir con el pasaje. */
.av-pasaje .credito{
  margin:.85rem 0 0; font-size:10px; line-height:1.5; color:var(--mut); opacity:.8;
  text-align:justify; text-align-last:left; }

@media (max-width: 640px){
  /* En el teléfono, una hoja que sube desde abajo: el pulgar llega a las
     flechas y a la X sin estirarse. */
  .av-pasaje{
    width:100%; max-width:100%; max-height:86vh; margin:auto 0 0;
    border-radius:16px 16px 0 0; border-bottom:0;
    padding:1.35rem 1.2rem calc(1.2rem + env(safe-area-inset-bottom)); }
  .av-pasaje .cuerpo p{ font-size:1.08rem; }
}
@media (prefers-reduced-motion: reduce){
  .av-pasaje[open], .av-pasaje[open]::backdrop,
  .av-pasaje .cuerpo.desde-der, .av-pasaje .cuerpo.desde-izq{ animation:none; }
}

/* =====================================================================
   18 · VISUALIZACIÓN DE GRABACIÓN — «V1 · CINE + LISTA» DEL LIENZO (oct 2026)
   El video es lo principal: grande, con las grabaciones del curso al lado
   (tan altas como la columna del video, con su propio scroll) y, bajo él,
   lo que se hace con él. Abajo, el texto del original y la ficha.
   ===================================================================== */
.av-vg-migas{ display:inline-flex; align-items:center; gap:.3rem; margin-bottom:.8rem;
  font-size:var(--t-sm); font-weight:600; color:var(--acc); }
.av-vg-tit{ margin:0; color:var(--acc); font-size:clamp(1.2rem, 1.02rem + .8vw, 1.55rem); line-height:1.25; }
.av-vg-metas{ display:flex; flex-wrap:wrap; align-items:center; gap:.5rem; margin-top:.85rem; }
.av-vg-meta{ display:inline-flex; align-items:center; gap:.45rem; min-height:32px; padding:.2rem .8rem;
  border-radius:var(--r-full); background:var(--sf); border:1px solid var(--ln); font-size:.8125rem;
  font-weight:500; color:var(--ink2); }
.av-vg-meta svg{ flex:none; color:var(--acc); }
.av-vg-grid{ display:grid; grid-template-columns:minmax(0,1fr) 340px; gap:1.25rem; margin-top:1.1rem; }
.av-vg-princ .av-embed{ margin:0; border-radius:14px; box-shadow:0 18px 40px -22px rgba(7,17,41,.7); }
.av-vg-sin{ aspect-ratio:16/9; display:grid; place-items:center; margin:0; }
.av-vg-acc{ display:flex; flex-wrap:wrap; align-items:center; gap:.5rem; margin-top:.9rem; }
.av-vg-acc .btn{ padding:.5rem .9rem; }
.btn.av-vg-yt{ color:#c4120a; }
.av-vg-nav{ display:inline-flex; gap:.4rem; margin-left:auto; }
.av-vg-nav .btn{ min-height:36px; padding:.3rem .7rem; font-size:var(--t-xs); }
.av-vg-nav [aria-disabled="true"]{ opacity:.4; pointer-events:none; }
.av-vg-aviso{ display:flex; gap:.75rem; align-items:center; margin:.9rem 0 0; padding:.8rem 1rem; border-radius:12px;
  background:#fff7ed; border:1px solid #fde4c4; color:#7c4a03; font-size:var(--t-sm); line-height:1.5; }
.av-vg-aviso svg{ flex:none; color:#c2410c; }
.av-vg-aviso b{ color:#7c2d12; }

.av-vg-lado{ position:relative; min-height:320px; }
.av-vg-lista{ position:absolute; inset:0; display:flex; flex-direction:column; overflow:hidden; padding:0; }
.av-vg-lista-cab{ display:flex; align-items:baseline; justify-content:space-between; gap:.5rem;
  padding:.85rem 1rem .7rem; border-bottom:1px solid var(--ln); }
.av-vg-lista-cab h3{ margin:0; font-size:.95rem; color:var(--acc); }
.av-vg-lista-cab span{ font-size:.75rem; color:var(--mut); white-space:nowrap; }
.av-vg-lista-cuerpo{ flex:1; min-height:0; overflow:auto; overscroll-behavior:contain; padding:.2rem .5rem .6rem; }
.av-vg-mod{ margin:.75rem .5rem .25rem; font-size:.6875rem; font-weight:700; letter-spacing:.08em;
  text-transform:uppercase; color:var(--mut); }
.av-vg-li{ display:flex; gap:.65rem; align-items:center; padding:.45rem .5rem; border-radius:10px; color:var(--ink2); }
.av-vg-li:hover{ background:var(--sf2); text-decoration:none; }
.av-vg-li[aria-current="page"]{ background:var(--acc-sf); box-shadow:inset 3px 0 0 var(--acc); }
.av-vg-mini{ position:relative; flex:none; width:88px; aspect-ratio:16/9; border-radius:8px; overflow:hidden;
  background:linear-gradient(135deg, #1d4fb8, #0a2363); }
.av-vg-mini img{ display:block; width:100%; height:100%; object-fit:cover; }
.av-vg-mini .pl{ position:absolute; left:50%; top:50%; width:26px; height:18px; margin:-9px 0 0 -13px; border-radius:5px;
  display:grid; place-items:center; background:rgba(255,0,0,.9); color:#fff; }
.av-vg-li .tx{ min-width:0; font-size:.78rem; line-height:1.35; }
.av-vg-li .tx b{ display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
  font-weight:600; color:var(--ink); }
.av-vg-li .tx small{ display:flex; align-items:center; gap:.3rem; margin-top:.15rem; font-size:.72rem; color:var(--mut); }
.av-vg-li[aria-current="page"] .tx small{ color:var(--acc); font-weight:700; }
.av-vg-li .por{ color:#b42318; font-weight:600; }

.av-vg-dos{ display:grid; grid-template-columns:minmax(0,1.15fr) minmax(0,1fr); gap:1.25rem; margin-top:1.5rem; align-items:start; }
.av-vg-dos h3{ margin:0 0 .6rem; color:var(--acc); font-size:1rem; }
.av-vg-lnk{ display:inline-flex; align-items:center; gap:.4rem; max-width:100%; min-height:30px; padding:.15rem .75rem;
  border-radius:var(--r-full); background:var(--acc-sf); color:var(--acc); font-size:.8rem; font-weight:600; }
.av-vg-lnk span{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.av-vg-lnk svg{ flex:none; }
.av-vg-lnk:hover{ text-decoration:none; filter:brightness(.96); }
.av-vg-lnk.yt{ background:#fdecec; color:#b42318; }
@media (max-width: 960px){
  .av-vg-grid, .av-vg-dos{ grid-template-columns:minmax(0,1fr); }
  .av-vg-lado{ position:static; min-height:0; }
  .av-vg-lista{ position:static; max-height:380px; }
}
@media (max-width: 640px){
  .av-vg-acc{ display:grid; grid-template-columns:1fr 1fr; }
  .av-vg-acc > .btn-primary{ grid-column:1 / -1; }
  .av-vg-nav{ grid-column:1 / -1; display:grid; grid-template-columns:1fr 1fr; margin:0; }
  .av-vg-nav .btn{ min-height:42px; }
}

/* =====================================================================
   19 · CONEXIONES Y GRABACIONES — «C1 · SALA RECURRENTE + GRABACIONES
   POR MÓDULO» DEL LIENZO (oct 2026)
   Reuniones y grabaciones separadas; la sala que se repite en varias
   clases se muestra UNA vez; el QR sólo en su ventana (y no en el
   teléfono); las grabaciones por módulo, plegables, con tu asistencia.
   ===================================================================== */
.av-cx2-sub{ margin:2rem 0 .9rem; font-size:1.1rem; color:var(--acc); }
.av-cx2-sub .av-sello-ic{ width:32px; height:32px; border-radius:9px; }
.av-cx2-sub .av-sello-ic svg{ width:17px; height:17px; }
.av-cx2-subfila{ display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:.6rem 1rem; margin:2rem 0 .9rem; }
.av-cx2-subfila .av-cx2-sub{ margin:0; }

.av-cx2-sala{ display:grid; grid-template-columns:auto minmax(0,1fr); gap:1.25rem; align-items:start;
  padding:1.25rem 1.4rem; border-left:4px solid var(--acc); }
.av-cx2-sala + .av-cx2-sala{ margin-top:.9rem; }
.av-cx2-sala-ic{ width:56px; height:56px; border-radius:16px; display:grid; place-items:center; background:var(--acc-sf); color:#1d4fb8; }
.av-cx2-k{ display:flex; align-items:center; gap:.4rem; margin:0; font-size:.72rem; font-weight:700; letter-spacing:.07em;
  text-transform:uppercase; color:#1d4fb8; }
.av-cx2-id{ margin:.2rem 0 .25rem; font-size:clamp(1.15rem, 1rem + .6vw, 1.4rem); font-weight:700; color:var(--ink);
  letter-spacing:-.01em; font-variant-numeric:tabular-nums; }
.av-cx2-us{ margin:0; font-size:var(--t-sm); color:var(--ink2); max-width:none; }
.av-cx2-mods{ display:flex; flex-wrap:wrap; gap:.35rem; margin:.6rem 0 0; }
.av-cx2-mods .chip{ background:var(--sf3); color:var(--ink2); }
.av-cx2-bts{ display:flex; flex-wrap:wrap; gap:.5rem; margin-top:.9rem; }
.av-cx2-bts .btn, .av-qr-bts .btn, .av-cx2-fila-acc .btn{ padding:.5rem .9rem; }
.av-cx2-prox{ display:flex; flex-wrap:wrap; align-items:center; gap:.5rem .8rem; margin-top:.9rem; padding:.65rem .8rem .65rem .9rem;
  border-radius:12px; background:var(--acc); color:#fff; font-size:var(--t-sm); line-height:1.4; }
.av-cx2-prox > svg{ flex:none; color:#bcd0ff; }
.av-cx2-prox > span{ flex:1; min-width:12rem; }
.av-cx2-prox small{ display:block; font-size:.72rem; color:#bcd0ff; }
.av-cx2-prox b{ color:#fff; }
.av-cx2-prox .btn{ min-height:36px; padding:.3rem .9rem; background:#fff; color:var(--acc); }
.av-cx2-prox .btn:hover{ background:var(--acc-sf); }

.av-cx2-rot{ margin:1.2rem 0 .5rem; font-size:var(--t-xs); font-weight:700; color:var(--ink2); }
.av-cx2-filas{ display:flex; flex-direction:column; gap:.5rem; }
.av-cx2-fila{ display:flex; align-items:center; gap:.8rem; padding:.7rem .9rem; border-radius:12px; background:var(--sf);
  border:1px solid var(--ln); }
.av-cx2-fila.sin{ border-style:dashed; }
.av-cx2-fila-ic{ flex:none; width:34px; height:34px; border-radius:10px; display:grid; place-items:center; background:var(--sf3); color:var(--ink2); }
.av-cx2-fila-tx{ min-width:0; flex:1; font-size:var(--t-sm); line-height:1.35; }
.av-cx2-fila-tx b{ display:block; font-weight:600; color:var(--ink); }
.av-cx2-fila-tx small{ display:block; font-size:var(--t-xs); color:var(--mut); }
.av-cx2-fila-acc{ display:flex; flex-wrap:wrap; justify-content:flex-end; gap:.4rem; }

.av-cx2-filtros{ display:flex; gap:.35rem; }
.av-cx2-fil{ display:inline-flex; align-items:center; gap:.4rem; min-height:34px; padding:.2rem .85rem; border-radius:var(--r-full);
  border:1px solid var(--ln); background:var(--sf); color:var(--ink2); font:600 .8rem var(--sans); cursor:pointer; }
.av-cx2-fil span{ font-size:.72rem; opacity:.75; }
.av-cx2-fil[aria-pressed="true"]{ background:var(--acc); border-color:var(--acc); color:#fff; }
.av-cx2-grab{ display:flex; flex-direction:column; gap:.6rem; }
.av-cx2-mod{ padding:0; overflow:hidden; }
.av-cx2-mod > summary{ display:flex; flex-wrap:wrap; align-items:center; gap:.4rem .8rem; padding:.9rem 1.1rem; cursor:pointer;
  list-style:none; }
.av-cx2-mod > summary::-webkit-details-marker{ display:none; }
.av-cx2-mod > summary b{ color:var(--acc); font-size:.98rem; }
.av-cx2-mod > summary .cu{ font-size:var(--t-xs); color:var(--mut); }
.av-cx2-mod > summary .fl{ margin-left:auto; display:inline-flex; color:var(--mut); transition:transform var(--t-fast); }
.av-cx2-mod[open] > summary{ border-bottom:1px solid var(--ln); }
.av-cx2-mod[open] > summary .fl{ transform:rotate(90deg); }
.av-cx2-mod > summary:hover b{ text-decoration:underline; }
.av-cx2-tabla{ width:100%; border-collapse:collapse; font-size:var(--t-sm); table-layout:fixed; }
/* Mismo ancho de columnas en todos los módulos: se leen como una sola tabla. */
.av-cx2-tabla th:nth-child(2){ width:120px; }
.av-cx2-tabla th:nth-child(3){ width:240px; }
.av-cx2-tabla th:nth-child(4){ width:150px; }
.av-cx2-tabla th{ padding:.55rem 1.1rem; text-align:left; font-size:.68rem; font-weight:700; letter-spacing:.06em;
  text-transform:uppercase; color:var(--mut); background:var(--sf2); }
.av-cx2-tabla td{ padding:.7rem 1.1rem; border-top:1px solid var(--ln2); vertical-align:middle; }
.av-cx2-tabla td.n b{ font-weight:600; color:var(--ink); }
.av-cx2-tabla td.f{ white-space:nowrap; color:var(--ink2); font-variant-numeric:tabular-nums; }
.av-cx2-tabla td.g{ white-space:nowrap; }
.av-cx2-ver{ display:inline-flex; align-items:center; gap:.4rem; min-height:34px; padding:.25rem .8rem; border-radius:9px;
  background:var(--acc); color:#fff; font-size:.8125rem; font-weight:600; }
.av-cx2-ver:hover{ background:var(--renacer-hover); color:#fff; text-decoration:none; }
.av-cx2-yt{ display:inline-flex; align-items:center; gap:.3rem; margin-left:.6rem; color:#b42318; font-size:.8rem; font-weight:600; }
.av-cx2-pend{ color:var(--warn); font-size:.8125rem; font-weight:600; }
/* Filtro «Por recuperar»: sólo esas filas y los módulos que las tienen. */
.av-cx2-grab.solo-recuperar .av-cx2-mod:not(.con-recuperar),
.av-cx2-grab.solo-recuperar tbody tr:not(.por-recuperar){ display:none; }

/* La ventana del QR. */
.av-qr-modal{ width:min(400px, calc(100vw - 2rem)); }
.av-qr-modal .ayuda-modal-in{ position:relative; padding:1.6rem 1.6rem 1.4rem; text-align:center; }
.av-qr-cerrar{ position:absolute; top:.8rem; right:.8rem; }
.av-qr-k{ display:inline-flex; align-items:center; gap:.4rem; margin:0; font-size:.72rem; font-weight:700; letter-spacing:.07em;
  text-transform:uppercase; color:#1d4fb8; }
.av-qr-t{ margin:.35rem 0 .25rem; font-size:1.2rem; font-weight:700; color:var(--ink); }
.av-qr-d{ margin:0 auto; max-width:30ch; font-size:var(--t-sm); color:var(--ink2); }
.av-qr-img{ display:block; width:220px; height:220px; margin:1rem auto; padding:8px; border:1px solid var(--ln);
  border-radius:14px; background:#fff; image-rendering:pixelated; }
.av-qr-bts{ display:flex; justify-content:center; flex-wrap:wrap; gap:.5rem; }

@media (max-width: 760px){
  .av-cx2-sala{ grid-template-columns:minmax(0,1fr); gap:.6rem; padding:1rem 1.1rem; }
  .av-cx2-sala-ic{ display:none; }
  .av-cx2-bts{ display:grid; grid-template-columns:1fr 1fr; }
  .av-cx2-bts > .btn-primary{ grid-column:1 / -1; }
  .av-cx2-fila{ flex-wrap:wrap; }
  .av-cx2-fila-acc{ width:100%; justify-content:flex-start; padding-left:calc(34px + .8rem); }
  /* La tabla de grabaciones, en filas apiladas. */
  .av-cx2-tabla{ table-layout:auto; }
  .av-cx2-tabla thead{ display:none; }
  .av-cx2-tabla tr{ display:grid; grid-template-columns:1fr auto; gap:.35rem .6rem; padding:.75rem 1rem; border-top:1px solid var(--ln2); }
  .av-cx2-tabla td{ padding:0; border:0; }
  .av-cx2-tabla td.n{ grid-column:1 / -1; }
  .av-cx2-tabla td.f{ grid-column:1 / -1; font-size:var(--t-xs); color:var(--mut); }
  .av-cx2-tabla td.a{ text-align:right; }
}
/* En el teléfono no hay QR: ahí se toca «Unirse». */
@media (max-width: 640px){ .av-cx2-qrbtn{ display:none !important; } }

/* =====================================================================
   20 · VISOR DE CLASE CON ALTURA FIJA (oct 2026)
   En el escritorio, el contenido y el lateral («Contenido del Curso» y la
   ficha de la clase) tienen la MISMA altura, la que cabe en la pantalla
   bajo la barra del menú y sobre la barra de abajo; lo que no cabe se
   desplaza dentro de cada recuadro. «Anterior / Siguiente» queda fijo al
   pie de la hoja. En el teléfono, el flujo normal.
   ===================================================================== */
.av-sec > .av-tit-curso{ margin-bottom:1rem; }
@media (min-width: 901px){
  .av-vc{ --vc-h:clamp(460px, calc(100dvh - var(--barra-h) - 150px), 900px); --hoja-pad:clamp(1.1rem, 3vw, 2.4rem);
    align-items:stretch; height:var(--vc-h); }
  .av-vc > *{ min-height:0; }
  .av-vc .av-hoja{ height:100%; overflow:auto; overscroll-behavior:contain; scrollbar-gutter:stable;
    padding:var(--hoja-pad) var(--hoja-pad) 0; }
  .av-vc .av-hoja > .av-hoja-vacia,
  .av-vc .av-pagina-cont:not(:has(.av-pagnav)){ padding-bottom:var(--hoja-pad); }
  .js .av-vc .av-pagnav{ position:sticky; bottom:0; z-index:1; margin:1.5rem calc(-1 * var(--hoja-pad)) 0;
    padding:.75rem var(--hoja-pad) .85rem; background:var(--sf); box-shadow:0 -10px 18px -14px rgba(16,24,40,.25); }
  .av-vc .av-lat{ display:flex; flex-direction:column; height:100%; overflow:auto; overscroll-behavior:contain; }
  .av-vc .av-lat > div:first-child{ flex:1 1 auto; min-height:240px; display:flex; flex-direction:column; }
  .av-vc .av-tematicas-caja{ flex:1; min-height:0; max-height:none; }
  .av-vc .av-lat > .av-ficha{ flex:none; }
}
/* «Contenido del Curso» (indice.php) con el mismo armazón de altura fija:
   la descripción arriba y sus datos anclados al pie del recuadro (si el
   texto es corto, quedan abajo; si es largo, quedan a la vista). */
.av-ix-datos{ margin-top:1.5rem; }
.av-ix-datos .av-ficha.fila{ border:0; border-top:1px solid var(--ln); border-radius:0; padding:1rem 0 0; background:none; }
@media (min-width: 901px){
  .av-vc .av-ix-hoja{ display:flex; flex-direction:column; }
  .av-vc .av-ix-hoja > .av-desc-curso{ flex:none; }
  .av-vc .av-ix-datos{ position:sticky; bottom:0; z-index:1; margin:auto calc(-1 * var(--hoja-pad)) 0; padding:0 var(--hoja-pad) 1.2rem;
    background:var(--sf); box-shadow:0 -10px 18px -14px rgba(16,24,40,.25); }
  .av-vc .av-ix-datos .av-ficha dd{ white-space:nowrap; }
  .av-vc .av-ix-datos .av-ficha dd br{ display:none; }
  .av-vc .av-ix-datos .av-ficha.fila{ grid-template-columns:repeat(2, minmax(0,1fr)); padding-top:1.1rem; }
}

/* =====================================================================
   21 · VISOR DE CLASE: «RECURSOS DEL CURSO» CON SUS DOS ACCESOS (R1 del
   lienzo, oct 2026). La franja lleva dentro dos tarjetas enteras
   clicables: el video (con la miniatura real de la grabación) y el
   material del curso. Sin video, la primera queda apagada.
   ===================================================================== */
.av-vr-grid{ display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:1.1rem; margin-top:1.4rem; }
.av-vr-card{ display:grid; grid-template-columns:220px minmax(0,1fr); gap:1.1rem; align-items:center; padding:.85rem;
  border-radius:16px; background:var(--sf); border:1px solid var(--ln); box-shadow:0 1px 2px rgba(16,24,40,.04);
  color:var(--ink2); transition:box-shadow var(--t-fast), transform var(--t-fast), border-color var(--t-fast); }
a.av-vr-card:hover{ text-decoration:none; border-color:var(--acc-bd); box-shadow:var(--sh-lg); transform:translateY(-2px); }
a.av-vr-card:hover .av-vr-cta svg{ transform:translateX(3px); }
.av-vr-media{ position:relative; display:block; aspect-ratio:16/9; border-radius:12px; overflow:hidden;
  background:radial-gradient(circle at 70% 30%, #2a5bd0 0%, #123a8f 50%, #0a2363 100%); }
.av-vr-media img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
.av-vr-media .pl{ position:absolute; left:50%; top:50%; width:52px; height:36px; margin:-18px 0 0 -26px; border-radius:10px;
  display:grid; place-items:center; background:#ff0000; color:#fff; box-shadow:0 6px 16px -6px rgba(0,0,0,.5); }
.av-vr-media .et{ position:absolute; left:10px; bottom:10px; display:inline-flex; align-items:center; gap:5px; height:24px;
  padding:0 9px; border-radius:var(--r-full); background:rgba(0,0,0,.62); color:#fff; font-size:.72rem; font-weight:600; }
.av-vr-media.docs{ display:grid; place-items:center; background:radial-gradient(circle at 70% 30%, #1d4fb8 0%, #0e2a63 60%, #0a1d47 100%); }
.av-vr-media.docs::after{ content:""; position:absolute; right:-28px; bottom:-28px; width:130px; height:130px;
  background:url("../assets/img/emblema-escuela-blanco.png") center/contain no-repeat; opacity:.12; }
.av-vr-pila{ position:relative; z-index:1; width:122px; height:80px; }
/* En abanico: cada hoja muestra su ícono en la franja que la siguiente
   deja a la vista (arriba a la izquierda). */
.av-vr-pila span{ position:absolute; top:5px; width:56px; height:72px; border-radius:8px; background:#fff;
  display:grid; place-items:start; padding:8px 0 0 7px; box-shadow:0 8px 18px -8px rgba(0,0,0,.5); }
.av-vr-pila span svg{ width:18px; height:18px; }
.av-vr-pila span:nth-child(1){ left:0; transform:rotate(-10deg); color:#c4120a; }
.av-vr-pila span:nth-child(2){ left:33px; top:0; transform:rotate(-2deg); color:#1d4fb8; z-index:1; }
.av-vr-pila span:nth-child(3){ left:66px; transform:rotate(8deg); color:#067a55; z-index:2; place-items:center; padding:0; }
.av-vr-pila span:nth-child(3) svg{ width:22px; height:22px; }
.av-vr-k{ display:inline-flex; align-items:center; gap:.35rem; font-size:.68rem; font-weight:700; letter-spacing:.08em;
  text-transform:uppercase; color:#1d4fb8; }
.av-vr-k.yt{ color:#c4120a; }
.av-vr-tx h3{ margin:.2rem 0 0; font-size:1.05rem; color:var(--ink); }
.av-franja .av-vr-tx p{ margin:.35rem 0 0; font-size:var(--t-sm); line-height:1.55; color:var(--ink2); max-width:none; }
.av-vr-cta{ display:inline-flex; align-items:center; gap:.45rem; margin-top:.75rem; font-size:var(--t-sm); font-weight:700; color:var(--acc); }
.av-vr-cta.yt{ color:#c4120a; }
.av-vr-cta svg{ transition:transform var(--t-fast); }
.av-vr-card.apagada .av-vr-media{ filter:grayscale(.7); opacity:.6; }
.av-vr-card.apagada .av-aun-no{ display:block; margin:.75rem 0 0; }
@media (max-width: 1100px){ .av-vr-card{ grid-template-columns:minmax(0,1fr); align-items:start; } }
@media (max-width: 760px){ .av-vr-grid{ grid-template-columns:minmax(0,1fr); } }

/* =====================================================================
   22 · LA INTRANET (admin/) — «P2 · PANEL LATERAL» CON LAS FICHAS DE
   «P3» DEL LIENZO DE LA INTRANET (oct 2026)
   El armazón lo abren includes/admin_top.php y lo cierra admin_pie.php.
   · Escritorio: el menú a la izquierda, medianoche con sus estrellas, fijo
     a la altura de la ventana; abajo quién ingresó, «Mis Datos» y el botón
     «Salir» del sistema de Inscripciones (rojo suave, rojo al pasar).
   · Bajo 960px: barra de arriba con ☰ y el menú como cajón.
   · El Principal: la banda del aula, cuatro cifras, los cursos en fichas
     (2 columnas con el menú al lado, 3 en pantallas anchas, 1 en el
     teléfono) y la «Oferta Académica» con la tarjeta a la web.
   ===================================================================== */
.ad-app{ flex:1 0 auto; display:flex; align-items:stretch; min-height:100dvh; }
.ad-cuerpo{ flex:1; min-width:0; display:flex; flex-direction:column; }
.ad-cuerpo > main{ flex:1 0 auto; }
.ad-top, .ad-velo, .ad-cerrar{ display:none; }

/* --- El menú lateral -------------------------------------------------- */
.ad-lado{ position:sticky; top:0; align-self:flex-start; flex:none; width:256px; height:100dvh;
  overflow-x:hidden; overflow-y:auto; overscroll-behavior:contain; isolation:isolate;
  display:flex; flex-direction:column; gap:6px; padding:18px 14px 16px;
  background:var(--nav); border-right:1px solid var(--nav-ln); color:var(--nav-ink); }
.ad-lado-cab{ display:flex; align-items:center; justify-content:space-between; gap:8px;
  padding:4px 8px 16px; margin-bottom:6px; border-bottom:1px solid var(--nav-ln); }
.ad-marca img{ display:block; height:40px; width:auto; }
.ad-nav{ display:flex; flex-direction:column; gap:2px; }
.ad-nav a{ display:flex; align-items:center; gap:12px; min-height:44px; padding:0 12px; border-radius:9px;
  color:rgba(255,255,255,.76); font-size:.875rem; font-weight:500; text-decoration:none;
  transition:background var(--t-fast), color var(--t-fast); }
.ad-nav a svg{ flex:none; color:rgba(255,255,255,.55); }
.ad-nav a:hover{ color:#fff; background:var(--nav-hov); text-decoration:none; }
.ad-nav a.on{ color:#fff; background:rgba(127,166,255,.16); box-shadow:inset 3px 0 0 var(--acc-nav); }
.ad-nav a.on svg{ color:#9dbbff; }
.ad-lado :focus-visible, .ad-top :focus-visible{ outline:2px solid var(--acc-nav); outline-offset:2px; }
.ad-ses{ margin-top:auto; display:flex; flex-direction:column; gap:10px; padding:16px 6px 0;
  border-top:1px solid var(--nav-ln); }
.ad-quien{ display:flex; gap:10px; align-items:flex-start; }
.ad-ava{ flex:none; width:38px; height:38px; border-radius:50%; display:inline-flex; align-items:center;
  justify-content:center; background:#173a80; color:#fff; font-weight:700; font-size:.8125rem; }
.ad-quien-tx{ min-width:0; line-height:1.3; }
.ad-quien-tx b{ display:block; color:#fff; font-size:.84rem; font-weight:700; overflow-wrap:anywhere; }
.ad-quien-tx small{ display:block; margin-top:3px; color:rgba(255,255,255,.62); font-size:.75rem; line-height:1.45; }
.ad-misdatos{ display:flex; align-items:center; gap:10px; min-height:42px; padding:0 12px; border-radius:9px;
  border:1px solid rgba(255,255,255,.16); color:#fff; font-size:.84rem; font-weight:600; text-decoration:none; }
.ad-misdatos:hover{ background:rgba(255,255,255,.08); color:#fff; text-decoration:none; }
/* El «Salir» de Inscripciones Renacer (_sidebar.php): rojo suave que se
   enciende al pasar, separado por una línea al pie del menú. */
.ad-salir-pie{ padding-top:12px; border-top:1px solid var(--nav-ln); }
.ad-salir{ display:flex; align-items:center; justify-content:center; gap:8px; min-height:42px; padding:0 16px;
  border-radius:8px; background:rgba(239,68,68,.15); color:rgba(254,202,202,.92);
  font-size:.75rem; font-weight:700; letter-spacing:.06em; text-transform:uppercase; text-decoration:none;
  transition:background var(--t-fast), color var(--t-fast); }
.ad-salir:hover{ background:#dc2626; color:#fff; text-decoration:none; }

/* --- Teléfono y tableta: barra de arriba + cajón ---------------------- */
@media (max-width: 959.98px){
  .ad-app{ display:block; min-height:0; }
  .ad-top{ position:sticky; top:0; z-index:40; display:flex; align-items:center; gap:6px;
    padding:6px 8px; padding-top:max(6px, env(safe-area-inset-top));
    background:var(--nav); border-bottom:1px solid var(--nav-ln); box-shadow:0 2px 14px rgba(7,17,41,.28); }
  .ad-top-btn{ flex:none; display:inline-flex; align-items:center; justify-content:center; width:44px; height:44px;
    border:0; border-radius:10px; background:none; color:#fff; cursor:pointer; }
  .ad-top-btn:hover{ background:rgba(255,255,255,.08); }
  .ad-top-btn .ad-ava{ width:34px; height:34px; }
  .ad-top-marca img{ display:block; height:30px; width:auto; }
  .ad-top-actual{ flex:1; min-width:0; text-align:right; color:rgba(255,255,255,.68); font-size:.8125rem;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  /* align-self vuelve a «auto»: con el flex-start del escritorio, un fixed
     se encoge a su contenido en vez de llegar abajo. */
  .ad-lado{ position:fixed; z-index:60; top:0; bottom:0; left:0; align-self:auto; height:100dvh; width:min(300px, 86vw);
    padding-top:max(14px, env(safe-area-inset-top)); transform:translateX(-100%); visibility:hidden;
    box-shadow:12px 0 40px rgba(0,0,0,.35);
    transition:transform .28s var(--ease), visibility 0s linear .28s; }
  .ad-abierto .ad-lado{ transform:none; visibility:visible; transition:transform .28s var(--ease); }
  .ad-cerrar{ display:inline-flex; align-items:center; justify-content:center; width:44px; height:44px;
    border:0; border-radius:10px; background:none; color:#fff; cursor:pointer; }
  .ad-marca img{ height:32px; }
  .ad-velo{ display:block; position:fixed; inset:0; z-index:55; background:rgba(7,17,41,.55); }
  .ad-velo[hidden]{ display:none; }
  html.ad-sin-scroll{ overflow:hidden; }
}
@media (prefers-reduced-motion: reduce){ .ad-lado{ transition:none !important; } }
@media print{ .ad-lado, .ad-top, .ad-velo{ display:none !important; } }

/* --- La banda del aula, alineada con el contenido del panel ----------- */
.ad-cuerpo .av-banda-in{ max-width:none; margin:0; padding-inline:clamp(1rem, 4vw, 3rem); }

/* --- El contenido ------------------------------------------------------ */
.ad-main{ width:100%; max-width:90rem; padding:clamp(1.4rem, 3vw, 2.25rem) clamp(1rem, 3vw, 3rem) 2.5rem; }

/* Las cifras de cabecera (pedido del usuario): cuatro tarjetas, 2×2 bajo
   1100px. La de inscripciones pendientes se tiñe cuando hay alguna. */
.ad-kpis{ display:grid; grid-template-columns:repeat(4, minmax(0,1fr)); gap:14px; margin-bottom:2.25rem; }
.ad-kpi{ display:flex; flex-direction:column; gap:4px; padding:16px 18px; border-radius:12px;
  background:var(--sf); border:1px solid var(--ln); box-shadow:var(--sh); color:var(--ink2); text-decoration:none;
  transition:border-color var(--t-fast), box-shadow var(--t-fast); }
a.ad-kpi:hover{ border-color:var(--acc-bd); box-shadow:var(--sh-acc); text-decoration:none; color:var(--ink2); }
.ad-kpi-top{ display:flex; align-items:center; justify-content:space-between; gap:10px;
  color:var(--mut); font-size:.8125rem; font-weight:600; line-height:1.3; }
.ad-kpi-ic{ flex:none; display:inline-flex; align-items:center; justify-content:center; width:36px; height:36px;
  border-radius:10px; background:var(--acc-sf); color:var(--acc); }
.ad-kpi-n{ color:var(--ink); font-size:2rem; font-weight:700; letter-spacing:-.02em; line-height:1.1;
  font-variant-numeric:tabular-nums; }
.ad-kpi-nota{ color:var(--mut); font-size:.75rem; line-height:1.4; }
/* La fila de cifras de cada módulo (admin_kpis): 2, 3 o 4 tarjetas. */
.ad-kpis.k2{ grid-template-columns:repeat(2, minmax(0,1fr)); }
.ad-kpis.k3{ grid-template-columns:repeat(3, minmax(0,1fr)); }
.ad-kpi-n.tx{ font-size:1.35rem; line-height:1.25; padding-top:.2rem; }
.ad-kpi.alerta{ border-color:var(--warn-bd); }
.ad-kpi.alerta .ad-kpi-ic{ background:var(--warn-sf); color:var(--warn); }
.ad-kpi.alerta .ad-kpi-nota{ color:var(--warn); font-weight:600; }

/* Cabecera de la lista: título con su sello, # N, texto y «Opciones». */
.ad-cab{ display:flex; align-items:flex-end; gap:2rem; margin-bottom:1.4rem; }
.ad-cab > div{ flex:1; min-width:0; }
.ad-cab h2{ margin:0; font-size:var(--t-h2); }
.ad-cab h2 .tx{ min-width:0; }
.ad-cuenta{ flex:none; display:inline-flex; align-items:center; height:26px; padding:0 10px; border-radius:999px;
  background:var(--acc-sf); color:var(--acc); font-size:.8125rem; font-weight:700; -webkit-text-fill-color:currentColor; }
.ad-cab p{ margin:.65rem 0 0; font-size:var(--t-sm); line-height:1.7; max-width:62rem; }
.ad-cab p b{ color:var(--ink); }
.ad-opciones{ flex:0 0 18rem; min-width:0; }
.ad-opciones fieldset{ margin:0; padding:0; border:0; min-width:0; }
.ad-opciones legend{ padding:0; margin-bottom:8px; font-size:.75rem; font-weight:700; letter-spacing:.08em;
  text-transform:uppercase; color:var(--acc); }
.ad-opc-anio{ display:flex; align-items:center; gap:.6rem; margin-bottom:8px; }
.ad-opc-anio > span{ flex:none; font-size:.8125rem; font-weight:600; color:var(--ink2); }
.ad-opc-anio .input{ flex:1; }
.ad-seg{ display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); padding:4px; border-radius:10px;
  background:#e9ecf2; border:1px solid #dde2ea; }
.ad-seg label{ position:relative; display:flex; align-items:center; justify-content:center; min-height:42px;
  padding:0 8px; border-radius:7px; font-size:.8125rem; font-weight:600; color:var(--ink2);
  text-align:center; line-height:1.2; cursor:pointer; }
.ad-seg input{ position:absolute; opacity:0; width:1px; height:1px; }
.ad-seg label:has(input:checked){ background:var(--sf); color:var(--acc); box-shadow:0 1px 2px rgba(16,24,40,.1), 0 0 0 1px var(--acc-bd); }
.ad-seg label:has(input:focus-visible){ outline:2px solid var(--acc); outline-offset:2px; }
.ad-seg-ir{ margin-top:8px; }
.js .ad-seg-ir{ display:none; }

/* Las fichas de los cursos (P3): línea de color del estado arriba. */
.ad-fichas{ display:grid; grid-template-columns:repeat(auto-fill, minmax(min(23rem, 100%), 1fr)); gap:18px; }
.ad-ficha{ position:relative; display:flex; flex-direction:column; padding:20px 20px 18px; border-radius:12px;
  background:var(--sf); border:1px solid var(--ln); box-shadow:var(--sh); overflow:hidden; }
.ad-ficha::before{ content:""; position:absolute; top:0; left:0; right:0; height:4px; background:var(--linea, var(--acc)); }
.ad-ficha-top{ display:flex; align-items:flex-start; justify-content:space-between; gap:10px; }
.ad-ficha-ic{ flex:none; display:inline-grid; place-items:center; width:44px; height:44px; border-radius:12px;
  background:var(--acc-sf); color:var(--acc); border:1px solid var(--acc-bd); }
.ad-ficha .chip{ text-align:left; line-height:1.25; }
.ad-ficha h3{ margin:14px 0 6px; color:var(--acc); font-size:1.0625rem; line-height:1.3; }
.ad-fecha{ display:flex; align-items:center; gap:7px; color:var(--ink); font-size:.84rem; font-weight:500; }
.ad-fecha svg{ flex:none; color:var(--acc); }
.ad-ficha-desc{ flex:1; margin:10px 0 16px; color:var(--mut); font-size:.8125rem; line-height:1.55; }
.ad-ficha .btn{ width:100%; min-height:44px; }
.ad-accesos{ display:grid; grid-template-columns:repeat(4, minmax(0,1fr)); gap:6px; margin-top:8px; }
.ad-accesos a{ display:flex; flex-direction:column; align-items:center; gap:5px; min-height:66px; padding:9px 4px 8px;
  border-radius:9px; background:#f1f4fa; border:1px solid #e1e7f2; color:var(--acc);
  font-size:.75rem; font-weight:500; line-height:1.2; text-align:center; text-decoration:none;
  transition:background var(--t-fast), border-color var(--t-fast); }
.ad-accesos a:hover{ background:#e6ecf8; border-color:var(--acc-bd); text-decoration:none; }
.ad-vacio{ padding:1.5rem; border-radius:12px; background:var(--sf); border:1px solid var(--ln); color:var(--ink2); }
.ad-vacio b{ color:var(--acc); }

/* «Oferta Académica»: el texto y la tarjeta a la malla de la web
   (la misma tarjeta clara de «Preguntas frecuentes» del aula). */
.ad-oferta{ display:grid; grid-template-columns:minmax(0,1fr) minmax(0,26rem); gap:2rem; align-items:center;
  margin-top:2.25rem; padding:clamp(1.25rem, 3vw, 1.75rem); border-radius:12px;
  background:var(--sf); border:1px solid var(--ln); box-shadow:var(--sh); }
.ad-oferta h2{ margin:0; font-size:var(--t-h2); }
.ad-oferta p{ margin:.65rem 0 0; font-size:var(--t-sm); line-height:1.7; }
.ad-oferta p b{ color:var(--ink); }
.ad-oferta .av-canal.av-dudas-faq{ margin-top:0; max-width:none; }

/* --- El pie, claro, dentro de la columna ----------------------------- */
/* Es un <footer>, y el footer global del aula es medianoche (§4): éste no. */
.ad-pie{ display:flex; flex-wrap:wrap; align-items:center; gap:14px 24px; margin:0 clamp(1rem, 4vw, 3rem);
  padding:22px 0 26px; border-top:1px solid var(--ln); color:var(--mut); background:none; font-size:.8125rem; line-height:1.6; }
.ad-pie-sello{ flex:none; width:46px; height:46px; }
.ad-pie-dato{ display:flex; gap:8px; align-items:flex-start; }
.ad-pie-dato svg{ flex:none; margin-top:3px; color:var(--acc); }
.ad-pie-esp{ flex:1; }
.ad-pie-enl{ display:flex; flex-wrap:wrap; gap:6px 16px; }
.ad-pie a{ color:var(--acc); font-weight:500; }
.ad-pie a:hover{ color:var(--renacer-hover); }
.ad-pie :focus-visible{ outline-color:var(--acc); }

@media (max-width: 1100px){
  .ad-kpis, .ad-kpis.k3{ grid-template-columns:repeat(2, minmax(0,1fr)); }
  .ad-cab{ flex-direction:column; align-items:stretch; gap:1rem; }
  .ad-opciones{ flex:none; }
}
@media (max-width: 900px){ .ad-oferta{ grid-template-columns:minmax(0,1fr); gap:1.25rem; } }
@media (max-width: 640px){
  .ad-kpis{ gap:10px; margin-bottom:1.75rem; }
  .ad-kpi{ padding:12px 13px; }
  .ad-kpi-top{ align-items:flex-start; font-size:.75rem; }
  .ad-kpi-ic{ width:30px; height:30px; border-radius:9px; }
  .ad-kpi-ic svg{ width:16px; height:16px; }
  .ad-kpi-n{ font-size:1.6rem; }
  .ad-kpi-nota{ font-size:.7rem; }
  .ad-cab h2 .ad-cuenta{ margin-top:.35rem; }
  .ad-ficha{ padding:18px 16px 16px; }
  .ad-accesos a{ min-height:70px; padding:9px 2px 8px; font-size:.6875rem; }
  .ad-pie{ flex-direction:column; align-items:flex-start; }
  .ad-pie-esp{ display:none; }
}

/* =====================================================================
   23 · KIT DE PANTALLAS DE LA INTRANET (oct 2026)
   Lo que repite cada módulo de admin/ (guía: docs/rediseno/INTRANET-GUIA.md):
   secciones con su barra de herramientas, tablas en tarjeta (en el
   teléfono, cada fila se vuelve una ficha con sus rótulos), botones de
   fila, formularios en tarjeta, fichas de datos y tarjetas de acceso.
   Las herramientas de las tablas (buscar, ordenar, paginar, copiar,
   Excel, CSV, imprimir) las pone js/admin_tabla.js, en lugar de las
   DataTables del legacy.
   ===================================================================== */
.ad-sec + .ad-sec{ margin-top:2.25rem; }
.ad-sec-cab{ display:flex; flex-wrap:wrap; align-items:flex-end; justify-content:space-between;
  gap:1rem 1.5rem; margin-bottom:1rem; }
.ad-sec-cab > div:first-child{ flex:1 1 30rem; min-width:0; }
.ad-sec-cab h2{ margin:0; font-size:var(--t-h2); }
.ad-sec-cab h2 .tx{ min-width:0; }
.ad-sec-cab p{ margin:.5rem 0 0; font-size:var(--t-sm); line-height:1.65; max-width:62rem; }
.ad-herr{ display:flex; flex-wrap:wrap; align-items:flex-end; gap:.6rem; }
.ad-filtro{ display:flex; flex-direction:column; gap:.3rem; min-width:9rem; margin:0; }
.ad-filtro > span, .ad-filtro > label{ font-size:.7rem; font-weight:700; letter-spacing:.07em; text-transform:uppercase; color:var(--acc); }
.ad-filtro{ max-width:100%; }
.ad-filtro .input{ min-width:10rem; max-width:100%; }
.ad-app select.input{ max-width:100%; }
.ad-nota{ margin:.75rem 0 0; font-size:.8125rem; color:var(--mut); line-height:1.55; max-width:62rem; }
.ad-nota b{ color:var(--ink2); }
.ad-aviso{ margin:0 0 1.25rem; }
.ad-volver{ display:inline-flex; align-items:center; gap:.4rem; margin-bottom:1rem; font-size:.84rem; font-weight:600; color:var(--acc); }
.ad-volver svg{ transform:rotate(180deg); }
.ad-volver:hover{ text-decoration:none; color:var(--renacer-hover); }

/* --- Tabla en tarjeta ------------------------------------------------- */
.ad-tabla-caja{ background:var(--sf); border:1px solid var(--ln); border-radius:12px; box-shadow:var(--sh); overflow-x:auto; }
.ad-tabla{ width:100%; border-collapse:collapse; font-size:.875rem; }
.ad-tabla th{ background:var(--acc-sf); color:var(--acc); text-align:left; font-size:.72rem; font-weight:700;
  letter-spacing:.06em; text-transform:uppercase; padding:.75rem .7rem; border-bottom:1px solid var(--acc-bd); vertical-align:bottom; }
.ad-tabla th[data-orden]{ cursor:pointer; user-select:none; }
.ad-tabla th[data-orden]::after{ content:"↕"; margin-left:.35rem; opacity:.35; font-size:.85em; }
.ad-tabla th[aria-sort="ascending"]::after{ content:"↑"; opacity:.9; }
.ad-tabla th[aria-sort="descending"]::after{ content:"↓"; opacity:.9; }
.ad-tabla td{ padding:.8rem .7rem; border-top:1px solid var(--ln2); vertical-align:top; color:var(--ink2); overflow-wrap:break-word; }
.ad-tabla tbody tr:first-child td{ border-top:0; }
.ad-tabla tbody tr:nth-child(even) td{ background:var(--sf2); }
.ad-tabla tbody tr:hover td{ background:#f3f6fc; }
.ad-tabla .num{ font-variant-numeric:tabular-nums; white-space:nowrap; }
.ad-tabla .nom{ min-width:8rem; color:var(--ink); font-weight:600; }
.ad-tabla .mut, .ad-mut{ color:var(--mut); font-size:.8125rem; }
/* La descripción puede traer URLs largas: sólo ella corta donde sea. */
.ad-tabla .desc{ min-width:12rem; max-width:30rem; font-size:.8125rem; line-height:1.5; overflow-wrap:anywhere; }
.ad-tabla .nowrap{ white-space:nowrap; }
.ad-tabla a{ font-weight:500; }
.ad-tabla-vacia{ padding:1.5rem 1.25rem; color:var(--ink2); }
.ad-tabla-vacia b{ color:var(--acc); }
.ad-tabla-herr{ display:flex; flex-wrap:wrap; align-items:center; gap:.5rem; padding:.7rem .9rem; border-bottom:1px solid var(--ln2); background:var(--sf); }
.ad-tabla-herr .input{ flex:1 1 14rem; max-width:24rem; min-height:38px; padding-block:.35rem; font-size:.875rem; }
.ad-tabla-herr .esp{ flex:1; }
.ad-tabla-pie{ display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:.5rem;
  padding:.65rem .9rem; border-top:1px solid var(--ln2); font-size:.8125rem; color:var(--mut); }
.ad-pag{ display:flex; gap:.35rem; }

/* Botones de fila y de barra */
.ad-acc{ display:flex; flex-wrap:wrap; gap:.35rem; }
.ad-tabla td.ad-acc-celda{ width:1%; }
.ad-tabla td.ad-acc-celda .ad-fila-form, .ad-tabla td.ad-acc-celda .ad-fila-form .ad-bt{ width:100%; }
/* En la tabla, los botones de la fila van apilados en una columna angosta,
   como en el legacy: así entran todas las columnas sin desplazar a lo ancho. */
.ad-tabla td.ad-acc-celda .ad-acc{ flex-direction:column; align-items:stretch; width:auto; min-width:7.75rem; }
.ad-fila-form{ display:inline-flex; margin:0; }
.ad-bt{ display:inline-flex; align-items:center; justify-content:center; gap:.35rem; min-height:34px; padding:0 .7rem;
  border-radius:8px; border:1px solid var(--acc-bd); background:var(--sf); color:var(--acc);
  font:600 .78rem/1.1 var(--sans); text-decoration:none; cursor:pointer; white-space:nowrap;
  transition:background var(--t-fast), border-color var(--t-fast), color var(--t-fast); }
.ad-bt:hover{ background:var(--acc-sf); border-color:var(--acc); text-decoration:none; color:var(--acc); }
.ad-bt.prim{ background:var(--acc); border-color:var(--acc); color:#fff; }
.ad-bt.prim:hover{ background:var(--renacer-hover); color:#fff; }
.ad-bt.peligro{ color:#b42318; border-color:#f3c4bf; }
.ad-bt.peligro:hover{ background:#fdecec; border-color:#b42318; color:#b42318; }
.ad-bt:focus-visible{ outline:2px solid var(--acc); outline-offset:2px; }
.btn-peligro{ background:var(--sf); border-color:#f3c4bf; color:#b42318; }
.btn-peligro:hover{ background:#fdecec; border-color:#b42318; color:#b42318; }

/* --- Formulario en tarjeta -------------------------------------------- */
.ad-form{ background:var(--sf); border:1px solid var(--ln); border-radius:12px; box-shadow:var(--sh);
  padding:clamp(1.1rem, 3vw, 1.75rem); }
.ad-form + .ad-form{ margin-top:1.5rem; }
.ad-form > h2, .ad-form > h3{ margin:0 0 1.1rem; font-size:1.125rem; }
.ad-campos{ display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:0 1.25rem; }
.ad-campos.tres{ grid-template-columns:repeat(3, minmax(0,1fr)); }
.ad-campos .ancho{ grid-column:1 / -1; }
.ad-form .field label, .ad-etq{ font-size:.8125rem; }
.ad-etq{ display:block; margin-bottom:.4rem; font-weight:600; color:var(--ink); }
.ad-form .field-ayuda{ margin:.35rem 0 0; font-size:.75rem; color:var(--mut); }
.ad-radios{ display:flex; flex-wrap:wrap; gap:.5rem; }
.ad-radios label{ display:inline-flex; align-items:center; gap:.45rem; min-height:40px; padding:0 .8rem; border-radius:9px;
  border:1px solid var(--ln); background:var(--sf); font-size:.84rem; font-weight:500; color:var(--ink2); cursor:pointer; }
.ad-radios label:has(input:checked){ border-color:var(--acc-bd); background:var(--acc-sf); color:var(--acc); font-weight:600; }
.ad-radios input{ accent-color:var(--acc); margin:0; }
.ad-form-pie{ display:flex; flex-wrap:wrap; align-items:center; gap:.6rem; margin-top:1.1rem; padding-top:1.1rem; border-top:1px solid var(--ln2); }
.ad-form .ck-editor__editable{ min-height:14rem; }

/* --- Ficha de datos (clave → valor) ----------------------------------- */
.ad-datos{ display:grid; grid-template-columns:repeat(auto-fill, minmax(min(10.5rem, 100%), 1fr)); gap:.75rem; margin:0; }
.ad-dato{ padding:.8rem .9rem; border-radius:10px; background:var(--sf2); border:1px solid var(--ln2); }
.ad-dato dt{ margin:0 0 .2rem; font-size:.7rem; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--acc); }
.ad-dato dd{ margin:0; color:var(--ink); font-weight:500; overflow-wrap:anywhere; }

/* --- Tarjetas de acceso (p. ej. las tres de Inscripciones) ------------ */
.ad-tarjetas{ display:grid; grid-template-columns:repeat(auto-fit, minmax(min(16rem, 100%), 1fr)); gap:1rem; }
.ad-tarjeta{ display:flex; flex-direction:column; gap:.55rem; padding:1.25rem; border-radius:12px;
  background:var(--sf); border:1px solid var(--ln); box-shadow:var(--sh); }
.ad-tarjeta-ic{ display:inline-grid; place-items:center; width:44px; height:44px; border-radius:12px;
  background:var(--acc-sf); color:var(--acc); border:1px solid var(--acc-bd); }
.ad-tarjeta h3{ margin:.25rem 0 0; color:var(--acc); font-size:1.0625rem; }
.ad-tarjeta p{ margin:0; font-size:.84rem; line-height:1.55; color:var(--ink2); }
.ad-tarjeta .btn{ margin-top:auto; align-self:flex-start; }

/* --- Teléfono: cada fila de tabla, una ficha con sus rótulos ---------- */
@media (max-width: 760px){
  .ad-campos, .ad-campos.tres{ grid-template-columns:minmax(0,1fr); }
  .ad-tabla thead{ display:none; }
  .ad-tabla, .ad-tabla tbody, .ad-tabla tr, .ad-tabla td{ display:block; width:100%; }
  .ad-tabla tr{ padding:.8rem .9rem; border-top:1px solid var(--ln); }
  .ad-tabla tbody tr:first-child{ border-top:0; }
  .ad-tabla tbody tr:nth-child(even) td, .ad-tabla tbody tr:hover td{ background:none; }
  .ad-tabla tbody tr:nth-child(even){ background:var(--sf2); }
  .ad-tabla td{ border:0; padding:.22rem 0; display:grid; grid-template-columns:minmax(6.5rem, 36%) minmax(0,1fr); gap:.6rem; }
  .ad-tabla td::before{ content:attr(data-th); font-size:.68rem; font-weight:700; letter-spacing:.05em;
    text-transform:uppercase; color:var(--mut); padding-top:.2rem; }
  .ad-tabla td.sin-rotulo{ display:block; }
  .ad-tabla td.sin-rotulo::before{ display:none; }
  .ad-tabla td.ad-acc-celda{ display:block; width:100%; padding-top:.6rem; }
  .ad-tabla td.ad-acc-celda::before{ display:none; }
  .ad-tabla td.ad-acc-celda .ad-acc{ flex-direction:row; flex-wrap:wrap; justify-content:flex-start; width:auto; }
  .ad-tabla td.ad-acc-celda .ad-fila-form, .ad-tabla td.ad-acc-celda .ad-fila-form .ad-bt{ width:auto; }
  .ad-tabla .desc{ min-width:0; max-width:none; }
  .ad-tabla-herr .input{ max-width:none; }
  .ad-bt{ min-height:40px; }
}
@media print{
  .ad-tabla-herr, .ad-tabla-pie, .ad-acc-celda, .ad-herr, .ad-pie{ display:none !important; }
}

/* --- Pantallas de enlace directo (sin menú): franja con logo y título -- */
.ad-suelta{ display:block; }
.ad-suelta-top{ position:relative; display:flex; align-items:center; gap:14px; flex-wrap:wrap;
  padding:10px clamp(1rem, 3vw, 3rem); background:var(--nav); border-bottom:1px solid var(--nav-ln);
  box-shadow:0 2px 14px rgba(7,17,41,.28); }
.ad-suelta-top img{ display:block; height:32px; width:auto; }
.ad-suelta-tit{ flex:1; min-width:0; color:rgba(255,255,255,.75); font-size:.875rem; font-weight:500;
  padding-left:14px; border-left:1px solid var(--nav-ln); }
.ad-suelta-salir{ min-height:38px; }
@media print{ .ad-suelta-top{ display:none !important; } }

/* =====================================================================
   24 · LOS SELECTORES (COMBOBOX) DE LA INTRANET (oct 2026)
   Pedido del usuario: un selector «más profesional, acorde al diseño».
   Borde fino gris azulado, la flecha en marino dentro de su propia zona a
   la derecha —un fondo apenas tintado separado por una línea—, el texto en
   peso medio y el mismo foco de los demás campos. Sólo dentro de la
   intranet (.ad-app): los selectores del aula del alumno no cambian.
   En el teléfono la letra sube a 16px: con menos, iOS hace zoom al tocar.
   ===================================================================== */
.ad-app select.input{
  -webkit-appearance:none; appearance:none;
  min-height:42px; padding:.5rem 3.1rem .5rem .9rem;
  border:1px solid #d3d9e6; border-radius:10px;
  background-color:var(--sf);
  background-image:
    url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%230e2a63' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"),
    linear-gradient(#dfe4ee, #dfe4ee),
    linear-gradient(180deg, #f7f9fd, #eef2f9);
  background-repeat:no-repeat;
  background-position:right .85rem center, right 2.45rem center, right top;
  background-size:14px 14px, 1px 58%, 2.45rem 100%;
  box-shadow:0 1px 2px rgba(16,24,40,.05);
  font:500 .9375rem/1.35 var(--sans); color:var(--ink);
  text-overflow:ellipsis; white-space:nowrap; cursor:pointer;
  transition:border-color var(--t-fast), box-shadow var(--t-fast); }
.ad-app select.input:hover{ border-color:var(--acc-bd); }
.ad-app select.input:focus{ outline:none; border-color:var(--acc);
  box-shadow:0 0 0 3px rgba(14,42,99,.14), 0 1px 2px rgba(16,24,40,.05); }
.ad-app select.input:disabled{ cursor:not-allowed; color:var(--mut); background-color:var(--sf2); opacity:.85; }
.ad-app select.input option{ font-weight:400; color:var(--ink); }
.ad-app select.input[multiple]{ padding-right:.9rem; background-image:none; white-space:normal; }
@media (max-width: 760px){ .ad-app select.input{ font-size:1rem; } }

/* =====================================================================
   25 · FORMULARIOS Y TABLAS DE LA INTRANET, COMPACTOS Y UNIFICADOS
   (oct 2026). Pedido del usuario: «a todos los elementos de formulario
   (incluidos los combobox) dales un diseño más profesional, unifica los
   tamaños de fuentes» y «hay tablas muy anchas y muy altas donde cada
   fila ocupa mucho espacio». Escala única dentro de la intranet:
     · texto de la página 15px · controles 14px · tablas 13px
     · rótulos 13px · rótulos de filtro y encabezados de tabla 11px
     · controles de 40px de alto (botones de fila 30px); en el teléfono
       los controles suben a 16px (con menos, iOS hace zoom al tocar).
   Sólo dentro de .ad-app: el aula del alumno no cambia.
   ===================================================================== */
.ad-app{ --ad-fs:.875rem; --ad-fs-sm:.8125rem; --ad-ctl-h:40px; --ad-ctl-bd:#d3d9e6; --ad-ctl-r:9px; }

/* --- Campos ----------------------------------------------------------- */
.ad-app .field{ margin-bottom:1rem; }
.ad-app .field > label, .ad-app .ad-etq{ display:block; margin-bottom:.35rem; font-size:var(--ad-fs-sm); font-weight:600;
  color:var(--ink); line-height:1.35; }
.ad-app .ad-filtro > label, .ad-app .ad-filtro > span, .ad-app .ad-opciones legend{ font-size:.6875rem; letter-spacing:.07em; }
.ad-app .input,
.ad-app input[type=text].input, .ad-app input[type=email].input, .ad-app input[type=password].input,
.ad-app input[type=search].input, .ad-app input[type=date].input, .ad-app input[type=time].input,
.ad-app input[type=number].input, .ad-app input[type=url].input, .ad-app input[type=tel].input{
  min-height:var(--ad-ctl-h); padding:.5rem .8rem; border:1px solid var(--ad-ctl-bd); border-radius:var(--ad-ctl-r);
  background-color:var(--sf); box-shadow:0 1px 2px rgba(16,24,40,.05);
  font:400 var(--ad-fs)/1.4 var(--sans); color:var(--ink);
  transition:border-color var(--t-fast), box-shadow var(--t-fast); }
.ad-app textarea.input{ min-height:7.5rem; padding:.6rem .8rem; line-height:1.55; resize:vertical; }
.ad-app .input::placeholder{ color:#9aa1ad; opacity:1; }
.ad-app .input:hover:not(:disabled):not([readonly]){ border-color:var(--acc-bd); }
.ad-app .input:focus{ outline:none; border-color:var(--acc); box-shadow:0 0 0 3px rgba(14,42,99,.14), 0 1px 2px rgba(16,24,40,.05); }
.ad-app .input:disabled, .ad-app .input[readonly]{ background-color:#f5f7fa; color:var(--mut); box-shadow:none; cursor:not-allowed; }
.ad-app .input[readonly]{ cursor:default; }
.ad-app input[type=date].input, .ad-app input[type=time].input{ font-variant-numeric:tabular-nums; }
.ad-app .input-ic > svg{ color:#8a93a3; }
.ad-app .field-ayuda, .ad-app .ad-form .field-ayuda{ margin:.35rem 0 0; font-size:.75rem; line-height:1.45; color:var(--mut); }
.ad-app .run-estado{ margin-top:.35rem; font-size:var(--ad-fs-sm); line-height:1.45; }   /* el contador de la clave (aula_ingreso.js) */
.ad-app select.input{ min-height:var(--ad-ctl-h); font-size:var(--ad-fs); border-color:var(--ad-ctl-bd); border-radius:var(--ad-ctl-r); }
.ad-app input[type=checkbox], .ad-app input[type=radio]{ accent-color:var(--acc); width:16px; height:16px; }

/* --- Opciones SI/NO, activada/desactivada…: selector segmentado ------- */
.ad-app .ad-radios{ display:inline-flex; flex-wrap:wrap; gap:2px; padding:3px; border-radius:10px;
  background:#eef1f6; border:1px solid #dde2ec; }
.ad-app .ad-radios label{ position:relative; display:inline-flex; align-items:center; justify-content:center;
  min-height:32px; padding:0 .95rem; border:0; border-radius:7px; background:transparent;
  font-size:var(--ad-fs-sm); font-weight:500; color:var(--ink2); cursor:pointer; white-space:nowrap; }
.ad-app .ad-radios label:hover{ color:var(--acc); }
.ad-app .ad-radios label:has(input:checked){ background:var(--sf); color:var(--acc); font-weight:600;
  box-shadow:0 1px 2px rgba(16,24,40,.12), 0 0 0 1px #c6cee0; }
.ad-app .ad-radios label:has(input:focus-visible){ outline:2px solid var(--acc); outline-offset:1px; }
.ad-app .ad-radios label:has(input:disabled){ cursor:not-allowed; opacity:.7; }
.ad-app .ad-radios input{ position:absolute; opacity:0; width:1px; height:1px; margin:0; }

/* --- Botones ---------------------------------------------------------- */
.ad-app .btn{ min-height:var(--ad-ctl-h); padding:.5rem 1rem; border-radius:var(--ad-ctl-r); font-size:var(--ad-fs); }
.ad-app .btn-sm{ min-height:32px; padding:.35rem .75rem; font-size:var(--ad-fs-sm); }
.ad-app .ad-bt{ min-height:30px; padding:0 .6rem; border-radius:7px; font-size:.75rem; }
.ad-app .ad-form-pie{ gap:.5rem; }

/* --- Texto de la página ---------------------------------------------- */
.ad-app .ad-main p, .ad-app .ad-sec-cab p, .ad-app .ad-cab p{ font-size:.9375rem; }
.ad-app .ad-nota{ font-size:var(--ad-fs-sm); }
.ad-app .ad-dato dd{ font-size:var(--ad-fs); }

/* --- Tablas compactas ------------------------------------------------- */
.ad-app .ad-tabla{ font-size:var(--ad-fs-sm); }
.ad-app .ad-tabla th{ padding:.55rem .5rem; font-size:.6875rem; letter-spacing:.05em; }
.ad-app .ad-tabla td{ padding:.5rem .5rem; line-height:1.45; }
.ad-app .ad-tabla .nom{ min-width:7rem; }
.ad-app .ad-tabla .desc{ min-width:11rem; font-size:.78rem; }
.ad-app .ad-tabla .chip{ padding:2px 8px; font-size:.72rem; }
/* Lo largo de una celda (descripciones, equipos de varias personas) se
   muestra en 2 líneas con «ver más» (js/admin_tabla.js): así una fila no
   ocupa media pantalla. */
.ad-clamp{ display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2; overflow:hidden; }
.ad-clamp.abierto{ display:block; -webkit-line-clamp:unset; overflow:visible; }
/* «ver más» va sobre el final de la segunda línea, con un degradado del
   color de la fila: no agrega una línea. Abierto, queda debajo. */
.ad-clamp-caja{ position:relative; max-width:20rem; }   /* su ancho natural no se come las otras columnas */
.ad-tabla td{ --fila:var(--sf); }
.ad-tabla tbody tr:nth-child(even) td{ --fila:var(--sf2); }
.ad-tabla tbody tr:hover td{ --fila:#f3f6fc; }
.ad-vermas{ position:absolute; right:0; bottom:0; display:inline-flex; align-items:flex-end; padding:0 0 0 1.6rem; border:0;
  background:linear-gradient(90deg, transparent, var(--fila, var(--sf)) 1.4rem); color:var(--acc);
  font:600 .7rem/1.45 var(--sans); cursor:pointer; }
.ad-vermas:hover{ text-decoration:underline; }
.ad-clamp.abierto + .ad-vermas{ position:static; margin-top:.1rem; padding:0; background:none; }
.ad-app .ad-tabla .ad-hora{ display:block; font-size:.72rem; color:var(--mut); }
/* Correos y enlaces largos: se cortan donde haga falta (la clase la pone
   el script a las celdas con @ o http). */
.ad-app .ad-tabla td.ad-corta{ overflow-wrap:anywhere; }
.ad-app .ad-tabla td.ad-nw, .ad-app .ad-tabla .ad-nw-in{ white-space:nowrap; }
.ad-app .ad-tabla td.ad-media{ min-width:7.5rem; }

/* La columna de acciones: en una fila, la acción principal y, si hay más
   de dos, el resto en un menú «⋯» (js/admin_tabla.js). Sin
   JavaScript, los botones quedan en fila y se envuelven. */
.ad-app .ad-tabla td.ad-acc-celda .ad-acc{ flex-direction:row; flex-wrap:wrap; align-items:center; justify-content:flex-end;
  width:auto; min-width:0; gap:.3rem; }
.ad-app .ad-tabla td.ad-acc-celda .ad-fila-form, .ad-app .ad-tabla td.ad-acc-celda .ad-fila-form .ad-bt{ width:auto; }
.ad-app .ad-tabla td.ad-acc-celda .ad-bt{ white-space:nowrap; }   /* «[Desactivar Clase]» en una línea */
.ad-app .ad-tabla td.ad-acc-celda .ad-acc.con-menu{ flex-wrap:nowrap; }
.ad-app .ad-bt.ad-acc-mas{ width:30px; min-width:30px; padding:0; justify-content:center; }
.ad-app .ad-bt.ad-acc-mas[aria-expanded="true"]{ background:var(--acc-sf); border-color:var(--acc-bd); color:var(--acc); }
.ad-menu{ position:fixed; z-index:80; min-width:12rem; max-width:18rem; max-height:min(70vh, 26rem); overflow:auto;
  display:flex; flex-direction:column; padding:.35rem; border-radius:10px; background:var(--sf);
  border:1px solid var(--ln); box-shadow:0 18px 40px -12px rgba(7,17,41,.35), 0 2px 6px rgba(16,24,40,.08); }
.ad-menu[hidden]{ display:none; }
.ad-menu .ad-fila-form{ display:block; width:100%; }
.ad-menu .ad-bt, .ad-menu > a{ display:flex; width:100%; justify-content:flex-start; gap:.5rem; min-height:34px; padding:0 .65rem;
  border:0; border-radius:7px; background:none; color:var(--ink); font-size:.8125rem; font-weight:500;   /* cuelga del body: sin las variables de .ad-app */
  text-align:left; white-space:normal; }
.ad-menu .ad-bt:hover, .ad-menu > a:hover, .ad-menu .ad-bt:focus-visible{ background:var(--acc-sf); color:var(--acc); }
.ad-menu .ad-bt.peligro{ color:#b42318; }
.ad-menu .ad-bt.peligro:hover{ background:#fdecec; color:#b42318; }
.ad-menu .ad-bt.prim{ background:none; color:var(--acc); font-weight:600; }
.ad-menu .ad-bt svg{ flex:none; }

/* Tablas que no caben (js/admin_tabla.js, anchura()): planilla con
   desplazamiento propio, filas de una línea y columnas fijas. */
@media (min-width: 761px){
  .ad-tabla-scroll{ overflow-x:auto; }
  .ad-app .ad-tabla.ad-ancha td.ad-media, .ad-app .ad-tabla.ad-ancha td.ad-corta{ white-space:nowrap; overflow-wrap:normal; min-width:0; }
  .ad-tabla.ad-ancha td{ background-color:var(--fila); }
  .ad-app .ad-tabla.ad-ancha td.ad-acc-celda .ad-acc{ flex-wrap:nowrap; }
  .ad-tabla.ad-ancha tr > :first-child{ position:sticky; left:var(--fija1, 0); z-index:2; }
  .ad-tabla.ad-ancha.fijas-2 tr > :nth-child(2), .ad-tabla.ad-ancha.fijas-3 tr > :nth-child(2){ position:sticky; left:var(--fija2); z-index:2; }
  .ad-tabla.ad-ancha.fijas-3 tr > :nth-child(3){ position:sticky; left:var(--fija3); z-index:2; }
  .ad-tabla.ad-ancha.fijas-1 tr > :nth-child(1), .ad-tabla.ad-ancha.fijas-2 tr > :nth-child(2),
  .ad-tabla.ad-ancha.fijas-3 tr > :nth-child(3){ box-shadow:inset -1px 0 0 var(--ln), 8px 0 10px -8px rgba(7,17,41,.28); }
}

@media (max-width: 760px){
  .ad-app .input, .ad-app select.input,
  .ad-app input[type=text].input, .ad-app input[type=email].input, .ad-app input[type=password].input,
  .ad-app input[type=search].input, .ad-app input[type=date].input, .ad-app input[type=time].input,
  .ad-app input[type=number].input{ font-size:1rem; min-height:44px; }
  .ad-app .btn{ min-height:44px; }
  .ad-app .ad-bt{ min-height:38px; }
  .ad-app .ad-bt.ad-acc-mas{ width:38px; min-width:38px; }
  .ad-app .ad-radios label{ min-height:38px; }
  .ad-app .ad-tabla td{ padding:.18rem 0; }
  .ad-app .ad-tabla td.ad-acc-celda .ad-acc{ justify-content:flex-start; }
  .ad-app .ad-tabla .ad-hora{ display:inline; margin-left:.25rem; font-size:inherit; }
  .ad-tabla td > .chip, .ad-tabla td > .ad-bt{ justify-self:start; }
  .ad-tabla td{ align-items:start; }   /* un selector no se estira al alto de un rótulo largo */
  .ad-tabla tbody tr:hover td{ --fila:var(--sf); }
  .ad-tabla tbody tr:nth-child(even):hover td{ --fila:var(--sf2); }
}

/* =====================================================================
   26 · VENTANA MODAL DE LA INTRANET (oct 2026) — js/admin_modal.js.
   La ficha del usuario («cuando se abra el link del usuario, que se abra
   en ventana modal»): una caja blanca sobre el fondo oscurecido, con su
   título, «Abrir en otra pestaña» y la ×; en el teléfono ocupa la
   pantalla. La ficha va en un iframe con ?modal=1 (.ad-en-modal).
   ===================================================================== */
.ad-modal{ width:min(980px, calc(100vw - 2rem)); height:min(860px, calc(100dvh - 3rem)); max-width:none; max-height:none;
  margin:auto; padding:0; border:0; border-radius:16px; background:var(--sf); color:var(--ink);
  box-shadow:0 30px 70px -20px rgba(7,17,41,.55), 0 2px 8px rgba(7,17,41,.12); overflow:hidden; }
.ad-modal::backdrop{ background:rgba(7,17,41,.55); backdrop-filter:blur(3px); }
.ad-modal[open]{ animation:ad-modal-in var(--t) cubic-bezier(.2,.8,.2,1); }
@keyframes ad-modal-in{ from{ opacity:0; transform:translateY(12px) scale(.985); } to{ opacity:1; transform:none; } }
@media (prefers-reduced-motion: reduce){ .ad-modal[open]{ animation:none; } }
.ad-modal-caja{ display:flex; flex-direction:column; height:100%; }
.ad-modal-cab{ display:flex; align-items:center; gap:.75rem; padding:.85rem 1rem .85rem 1.35rem; border-bottom:1px solid var(--ln); }
.ad-modal-cab h2{ flex:1; margin:0; font:700 1.0625rem/1.3 var(--sans); color:var(--acc); }
.ad-modal-ext{ display:inline-flex; align-items:center; gap:.35rem; font:600 .8125rem var(--sans); color:var(--acc);
  text-decoration:none; padding:.4rem .6rem; border-radius:8px; }
.ad-modal-ext:hover{ background:var(--acc-sf); }
.ad-modal-cerrar{ display:inline-grid; place-items:center; width:38px; height:38px; border:0; border-radius:10px;
  background:transparent; color:var(--ink2); cursor:pointer; }
.ad-modal-cerrar:hover{ background:var(--sf3); color:var(--ink); }
.ad-modal-cerrar:focus-visible, .ad-modal-ext:focus-visible{ outline:2px solid var(--acc); outline-offset:2px; }
.ad-modal-cuerpo{ position:relative; flex:1; min-height:0; background:var(--bg); }
.ad-modal-cuerpo iframe{ display:block; width:100%; height:100%; border:0; }
.ad-modal-cargando{ position:absolute; inset:0; display:none; place-items:center; font:500 .875rem var(--sans); color:var(--mut); }
.ad-modal.cargando .ad-modal-cargando{ display:grid; }
.ad-modal.cargando iframe{ visibility:hidden; }
html.ad-modal-abierta{ overflow:hidden; }   /* la página de atrás no se desplaza */
@media (max-width: 760px){
  .ad-modal{ width:100vw; height:100dvh; border-radius:0; }
  .ad-modal-ext span{ display:none; }
}
/* La ficha dentro de la modal: sin franja ni pie, con menos margen. */
.ad-en-modal .ad-main{ padding-top:1.25rem; padding-bottom:1.5rem; }

/* =====================================================================
   27 · DIÁLOGOS: CONFIRMAR, AVISAR Y COPIAR (oct 2026) — js/admin_dialogo.js.
   Reemplazan a alert()/confirm() con el formato de Ekklesia: un velo que
   bloquea y una caja centrada con su ícono en un círculo de color (pregunta
   ámbar, peligro rojo, información azul, error rojo, listo verde), el
   título, el texto y los botones. Cuelgan del body: sin variables de
   .ad-app, medidas fijas.
   ===================================================================== */
.ad-dlg-velo{ position:fixed; inset:0; z-index:1000; display:grid; place-items:center; padding:1rem;
  background:rgba(7,17,41,.55); backdrop-filter:blur(3px); animation:ad-dlg-velo var(--t) ease; }
@keyframes ad-dlg-velo{ from{ opacity:0; } to{ opacity:1; } }
.ad-dlg{ width:min(26rem, 100%); padding:1.75rem 1.5rem 1.25rem; border-radius:16px; background:var(--sf);
  text-align:center; box-shadow:0 30px 70px -20px rgba(7,17,41,.55), 0 2px 8px rgba(7,17,41,.12);
  animation:ad-modal-in var(--t) cubic-bezier(.2,.8,.2,1); }
@media (prefers-reduced-motion: reduce){ .ad-dlg-velo, .ad-dlg{ animation:none; } }
.ad-dlg-ic{ display:grid; place-items:center; width:60px; height:60px; margin:0 auto 1rem; border-radius:50%; }
.ad-dlg.w  .ad-dlg-ic{ background:#fff4e0; color:#b45309; }
.ad-dlg.d  .ad-dlg-ic{ background:#fdecec; color:#b42318; }
.ad-dlg.i  .ad-dlg-ic{ background:var(--acc-sf); color:var(--acc); }
.ad-dlg.e  .ad-dlg-ic{ background:#fdecec; color:#b42318; }
.ad-dlg.ok .ad-dlg-ic{ background:#e7f6ee; color:#047857; }
.ad-dlg h2{ margin:0; font:700 1.0625rem/1.4 var(--sans); color:var(--ink); overflow-wrap:anywhere; }
.ad-dlg p{ margin:.5rem 0 0; font:400 .875rem/1.55 var(--sans); color:var(--ink2); overflow-wrap:anywhere; }
.ad-dlg-copia{ display:block; width:100%; height:8rem; margin-top:1rem; padding:.6rem .7rem; border:1px solid #d3d9e6;
  border-radius:9px; font:400 .75rem/1.45 ui-monospace, SFMono-Regular, Menlo, monospace; color:var(--ink); resize:vertical; }
.ad-dlg-pie{ display:flex; justify-content:center; gap:.6rem; margin-top:1.5rem; }
.ad-dlg-pie .btn{ min-width:8.5rem; min-height:40px; padding:.5rem 1rem; border-radius:9px; font-size:.875rem; }
html.ad-dlg-abierto{ overflow:hidden; }
@media (max-width: 480px){
  .ad-dlg-pie{ flex-direction:column-reverse; }   /* el de aceptar arriba, a mano del pulgar */
  .ad-dlg-pie .btn{ width:100%; min-height:44px; }
}
.ad-dlg .btn-peligro{ background:#b42318; border-color:#b42318; color:#fff; }   /* sólido: es la decisión */
.ad-dlg .btn-peligro:hover{ background:#912018; border-color:#912018; color:#fff; }

/* §26 (cont.) · La ventana del CÓDIGO QR de un enlace ([data-qr-abrir],
   js/admin_modal.js), como en Conexiones del aula: el QR sólo se pide al
   abrirla. En el teléfono sube desde abajo. */
.ad-modal.ad-modal-qr{ width:min(400px, calc(100vw - 2rem)); height:fit-content; max-height:calc(100dvh - 2rem); }
.ad-qr-cuerpo{ display:flex; flex-direction:column; align-items:center; padding:1.1rem 1.4rem 1.4rem; text-align:center; }
.ad-qr-t{ margin:0; font-size:.9375rem; font-weight:700; color:var(--ink); overflow-wrap:anywhere; }
.ad-qr-d{ margin:.3rem 0 0; font-size:.8125rem; color:var(--ink2); }
.ad-qr-img{ display:block; width:240px; height:240px; margin:1rem auto .75rem; padding:8px; border:1px solid var(--ln);
  border-radius:12px; background:#fff; image-rendering:pixelated; }
.ad-qr-url{ margin:0; max-width:100%; font-size:.72rem; color:var(--mut); overflow-wrap:anywhere; }
/* Los botones: grilla pareja de dos columnas, todos del mismo alto (oct
   2026). Abrir | Copiar enlace; Copiar | Enviar por WhatsApp (verde
   tenue, para reconocerlos); «Descargar QR (PNG)» a lo ancho. */
.ad-modal.ad-modal-qr{ width:min(440px, calc(100vw - 2rem)); }
.ad-qr-bts{ display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:.5rem; width:100%; margin-top:1rem; }
.ad-qr-bts .btn{ width:100%; min-height:44px; padding:.5rem .7rem; justify-content:center; gap:.45rem;
  font-size:.8125rem; line-height:1.2; text-align:center; white-space:normal; }
.ad-qr-bts .btn svg{ flex:none; }
.ad-qr-bts [hidden]{ display:none; }
.ad-qr-bts .ad-qr-wa{ color:#0b7a4b; border-color:#bfe3cf; background:#f4fbf7; }
.ad-qr-bts .ad-qr-wa:hover{ color:#075c38; border-color:#8fd0ad; background:#e6f6ed; }
.ad-qr-bts .ad-qr-baja{ grid-column:1 / -1; }
.ad-qr-wa-nota{ margin:.55rem 0 0; font-size:.75rem; color:var(--mut); }
/* La ventana de una GRABACIÓN (Links Videos Recuperación, js/admin_modal.js):
   el video a 16:9 arriba, la clase y los mismos botones parejos del QR. */
.ad-modal.ad-modal-video{ width:min(720px, calc(100vw - 2rem)); height:fit-content; max-height:calc(100dvh - 2rem); }
.ad-vid-cuerpo{ padding:1rem 1.25rem 1.25rem; text-align:center; overflow:auto; }
.ad-vid-tit{ min-width:0; }
.ad-vid-lideres{ margin:.15rem 0 0; font-size:.78rem; color:var(--ink2); overflow-wrap:anywhere; }
.ad-vid-lideres[hidden]{ display:none; }
.ad-vid-marco{ position:relative; aspect-ratio:16 / 9; overflow:hidden; border-radius:12px; background:#000; }
.ad-vid-marco iframe{ position:absolute; inset:0; width:100%; height:100%; border:0; }
.ad-vid-clase{ margin:.9rem 0 0; font-size:1rem; font-weight:700; color:var(--ink); overflow-wrap:anywhere; }
.ad-vid-meta{ margin:.25rem 0 0; font-size:.8125rem; color:var(--ink2); }
@media (max-width: 760px){
  .ad-modal.ad-modal-video{ width:100vw; max-height:100dvh; border-radius:16px 16px 0 0; margin:auto auto 0; }
  .ad-vid-cuerpo{ padding:.75rem .9rem 1rem; }
}
.ad-qr-wa-nota[hidden]{ display:none; }
@media (max-width: 760px){
  .ad-modal.ad-modal-qr{ width:100vw; height:fit-content; max-height:100dvh; border-radius:16px 16px 0 0; margin:auto auto 0; }
}

/* =====================================================================
   28 · LA MARCA EKKLESIA (oct 2026) — lienzo «Marca Ekklesia en Renacer».
   El aula, la intranet e Inscripciones son parte de Ekklesia, la
   plataforma de la Iglesia Renacer. Renacer sigue siendo la marca de cada
   sistema y Ekklesia firma, discreta (arquitectura «respaldada»):
   · L2 · el logotipo de la iglesia hace pareja con ϵKKLESIA en el ingreso
     (la columna azul en el escritorio; el pie medianoche en el teléfono).
     El sello de la escuela nunca lleva la marca al lado.
   · M1 · «parte de ϵKKLESIA» bajo «Salir» en el menú de la intranet.
   · P1 · la línea de firma bajo el pie del aula y bajo el de la intranet.
   av_ekklesia() y av_firma_ekklesia() están en includes/aula_ui.php. La
   letra es JetBrains Mono, como en Ekklesia (aula_head.php ya la carga).
   ===================================================================== */
.av-ek{ --ek-e:currentColor; display:inline-flex; align-items:center; font:500 .75rem/1 var(--codigo);
  letter-spacing:.2em; text-transform:uppercase; white-space:nowrap; }
.av-ek svg{ flex:none; width:1.85em; height:1.85em; margin-right:-.3em; stroke:var(--ek-e); }
.av-ek-firma{ display:inline-flex; align-items:center; justify-content:center; flex-wrap:wrap; gap:.3rem .55rem; }
.av-ek-sep{ flex:none; display:block; width:1px; height:28px; background:rgba(255,255,255,.22); }

/* L2 · ingreso, escritorio: la pareja al pie de la columna azul. */
.av-entrada-iglesia{ display:flex; align-items:center; gap:22px; }
.av-entrada-iglesia .av-ek-sep{ height:34px; }
.av-entrada-iglesia .av-ek{ --ek-e:var(--acc-nav); font-size:.875rem; color:rgba(255,255,255,.88); }
/* L2 · ingreso, teléfono: la misma pareja en el pie medianoche. */
@media (max-width: 900px){
  .av-entrada-pie-marca{ display:flex; align-items:center; justify-content:center; gap:16px; }
  .av-entrada-pie-marca img{ height:34px; }
  .av-entrada-pie-marca .av-ek{ --ek-e:var(--acc-nav); font-size:.75rem; color:rgba(255,255,255,.88); }
}

/* P1 · el pie del aula: una línea más, bajo la fila del pie. Con la barra
   fija del curso, la holgura que la deja ver pasa de la fila a la firma. */
.av-pie-firma{ border-top:1px solid rgba(255,255,255,.08); }
.av-pie-firma p{ display:flex; justify-content:flex-end; max-width:var(--wrap); margin:0 auto;
  padding:.75rem var(--pad) .9rem; font-size:.75rem; line-height:1.4; color:rgba(255,255,255,.45); }
.av-pie-firma .av-ek{ --ek-e:var(--acc-nav); font-size:.6875rem; color:rgba(255,255,255,.78); }
.con-barra .av-pie-in{ padding-bottom:1.6rem; }
.con-barra .av-pie-firma p{ padding-bottom:calc(.9rem + var(--barra-h) + env(safe-area-inset-bottom)); }
@media (max-width: 860px){
  .av-pie-firma p{ justify-content:center; padding:.9rem 1.4rem 1rem; }
  .av-pie-firma .av-ek-bajada{ display:none; }   /* en el teléfono, sólo «parte de ϵKKLESIA» */
}

/* M1 · menú de la intranet: el colofón, bajo «Salir». */
.ad-firma{ display:flex; justify-content:center; margin:0; font-size:.6875rem; color:rgba(255,255,255,.4); }
.ad-firma .av-ek{ --ek-e:var(--acc-nav); font-size:.65625rem; color:rgba(255,255,255,.66); }

/* P1 · el pie claro de la intranet: la firma en su propia línea. */
.ad-pie-firma{ flex-basis:100%; max-width:none; display:flex; justify-content:flex-end; margin:0; padding-top:12px;
  border-top:1px dashed var(--ln); font-size:.75rem; color:#9ca1ab; }
.ad-pie-firma .av-ek{ --ek-e:var(--acc); font-size:.6875rem; color:var(--acc); }
@media (max-width: 700px){ .ad-pie-firma{ justify-content:center; } }

/* Lista Asistencia: el «Resumen General» arriba, antes de las fichas por
   módulo, con la nota del porcentaje de aprobación al pie. */
.av-resumen.arriba{ margin:0 0 var(--gap); }
.av-resumen-nota{ margin:.9rem 0 0; padding-top:.75rem; border-top:1px solid var(--ln2); font-size:var(--t-xs); color:var(--mut); max-width:none; }
.av-resumen-nota b{ color:var(--ink2); }

/* =====================================================================
   22 · LISTA DE ASISTENCIA — «LA2 · LÍNEA DE TIEMPO» DEL LIENZO (oct 2026; la tabla LA1, en la etiqueta git «asistencia-la1»)
   Cada clase dice su estado de un vistazo, sutil: filete, fondo muy tenue
   e ícono en verde (Presente, Presente Campus, Recuperada), rojo
   (Ausente) o ámbar (Sin registro en una clase ya activada, que cuenta
   como ausencia); «Próxima» y «Deshabilitada», sin color. El nombre en
   peso medio con su línea de datos debajo; los dos botones del original
   siempre visibles, sólo el que se puede usar habilitado.
   ===================================================================== */
:root{ --la-ok:#067a55; --la-ok-sf:#e9f6ef; --la-ok-bd:#bfe3cf; --la-bad:#b42318; --la-bad-sf:#fdeeec; --la-bad-bd:#f6c9c4;
  --la-warn:#b45309; --la-warn-sf:#fff5e6; --la-warn-bd:#f2b155; --la-fut:#1d4fb8; --la-fut-sf:#eef3fc; }

/* El resumen: anillo + totales + resultado. */
.la-res-g{ display:grid; grid-template-columns:auto repeat(4, minmax(0,1fr)); gap:.85rem; align-items:center; }
.la-anillo{ position:relative; width:96px; height:96px; border-radius:50%; display:grid; place-items:center;
  background:conic-gradient(var(--la-ok) calc(var(--p, 0) * 1%), var(--la-bad-sf) 0); }
.la-anillo:not(.bien):not(.mal){ background:var(--sf3); }
.la-anillo::before{ content:""; position:absolute; inset:9px; border-radius:50%; background:var(--sf); }
.la-anillo b{ position:relative; font-size:1.5rem; line-height:1; color:var(--ink); text-align:center; font-variant-numeric:tabular-nums; }
.la-anillo b small{ display:block; margin-top:.25rem; font-size:.64rem; font-weight:600; color:var(--mut); }
.la-kpi{ padding:.75rem .9rem; border-radius:12px; background:var(--sf2); border:1px solid var(--ln2); }
.la-kpi small{ display:flex; align-items:center; gap:.35rem; font-size:.72rem; font-weight:600; color:var(--mut); line-height:1.3; }
.la-kpi small svg{ flex:none; }
.la-kpi.ok small{ color:var(--la-ok); }
.la-kpi.bad small{ color:var(--la-bad); }
.la-kpi > b{ display:block; margin-top:.25rem; font-size:1.4rem; color:var(--ink); font-variant-numeric:tabular-nums; }
.la-kpi.veredicto > b{ font-size:1.08rem; }
.la-kpi.veredicto span{ display:block; margin-top:.2rem; font-size:.72rem; color:var(--mut); }
.la-kpi.veredicto.mal{ background:var(--la-bad-sf); border-color:var(--la-bad-bd); }
.la-kpi.veredicto.mal > b{ color:var(--la-bad); }
.la-kpi.veredicto.bien{ background:var(--la-ok-sf); border-color:var(--la-ok-bd); }
.la-kpi.veredicto.bien > b{ color:var(--la-ok); }

/* La cabecera de cada módulo: un segmento de color por clase. */
.la-mod-cab{ align-items:center; }
.la-sum{ margin-left:auto; display:flex; align-items:center; gap:.75rem; font-size:var(--t-xs); color:var(--mut); }
.la-sum b{ color:var(--ink); }
.la-segs{ display:flex; gap:3px; }
.la-segs i{ display:block; width:18px; height:7px; border-radius:4px; background:#e5e8ef; }
.la-segs i.ok{ background:var(--la-ok); }
.la-segs i.bad{ background:var(--la-bad); }
.la-segs i.warn{ background:var(--la-warn-bd); }

/* La línea de tiempo (LA2): la fecha grande, un nodo por clase sobre
   una línea vertical, el nombre con sus datos, el estado y los botones. */
.la-tl{ list-style:none; margin:0; padding:.3rem 0; overflow:hidden; }
.la-fila{ display:grid; grid-template-columns:58px 34px minmax(0,1fr) 150px auto; gap:.9rem; align-items:center;
  padding:.75rem 1.1rem; }
.la-fila + .la-fila{ border-top:1px solid var(--ln2); }
.la-fila.la-ok{ background:#fbfefc; }
.la-fila.la-bad{ background:#fffafa; }
.la-fecha{ text-align:right; line-height:1.1; }
.la-fecha b{ display:block; font-size:1.3rem; font-weight:700; color:var(--ink); font-variant-numeric:tabular-nums; }
.la-fecha small{ font-size:.64rem; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--mut); white-space:nowrap; }
.la-nodo{ position:relative; align-self:stretch; display:grid; place-items:center; }
.la-nodo::before{ content:""; position:absolute; left:50%; top:-.8rem; bottom:-.8rem; width:2px; margin-left:-1px; background:#e3e7ef; }
.la-fila:first-child .la-nodo::before{ top:50%; }
.la-fila:last-child .la-nodo::before{ bottom:50%; }
.la-fila:only-child .la-nodo::before{ display:none; }
.la-nodo > span{ position:relative; width:30px; height:30px; border-radius:50%; display:grid; place-items:center;
  background:var(--sf); border:2px solid #d5dbe6; color:#a1a7b3; }
.la-nodo > span.ok{ background:var(--la-ok); border-color:var(--la-ok); color:#fff; }
.la-nodo > span.bad{ border-color:var(--la-bad); color:var(--la-bad); }
.la-nodo > span.warn{ border-color:var(--la-warn-bd); color:var(--la-warn); }
.la-nodo > span.fut{ border-style:dashed; border-color:#9db6e8; color:var(--la-fut); }
.la-tx{ min-width:0; }
.la-tx b{ display:block; font-size:.92rem; font-weight:600; color:var(--ink); line-height:1.35; }
.la-tx small{ display:flex; flex-wrap:wrap; align-items:center; gap:.15rem .75rem; margin-top:.2rem; font-size:.75rem; color:var(--mut); }
.la-fila.la-fut .la-tx b{ color:var(--ink2); font-weight:500; }
.la-fila.la-off .la-fecha, .la-fila.la-off .la-nodo, .la-fila.la-off .la-tx, .la-fila.la-off .la-est{ opacity:.6; }
.la-vid{ display:inline-flex; align-items:center; gap:.3rem; color:#c4120a; font-weight:600; }
.la-vid:hover{ text-decoration:underline; }
/* En el escritorio el día va en la columna de la fecha: en la línea de
   datos sólo el horario. */
.la-fec-c{ font-variant-numeric:tabular-nums; }
.la-st{ display:inline-flex; align-items:center; gap:.35rem; height:26px; padding:0 .65rem; border-radius:var(--r-full);
  font-size:.75rem; font-weight:700; white-space:nowrap; }
.la-st svg{ flex:none; }
.la-st.ok{ background:var(--la-ok-sf); color:var(--la-ok); }
.la-st.bad{ background:var(--la-bad-sf); color:var(--la-bad); }
.la-st.warn{ background:var(--la-warn-sf); color:var(--la-warn); cursor:help; }
.la-st.fut{ background:var(--la-fut-sf); color:var(--la-fut); }
.la-st.off{ background:var(--sf3); color:var(--mut); }
.la-ops{ display:flex; justify-content:flex-end; gap:.4rem; }
.la-ops form{ margin:0; }
.la-ops .av-asis-env{ display:inline-flex; }
.la-bt{ display:inline-flex; align-items:center; gap:.35rem; height:32px; padding:0 .7rem; border-radius:9px;
  border:1px solid var(--acc-bd); background:var(--sf); color:var(--acc); font:600 .78rem var(--sans); white-space:nowrap; cursor:pointer; }
.la-bt.on{ background:var(--acc); border-color:var(--acc); color:#fff; }
.la-bt.on:hover{ background:var(--renacer-hover); }
.la-bt:disabled{ opacity:.42; cursor:help; }

/* Teléfono: el nodo a la izquierda, a todo lo alto; el nombre con la
   fecha en su línea de datos; el estado; los dos botones a lo ancho. */
@media (max-width: 860px){
  .la-res-g{ grid-template-columns:repeat(3, minmax(0,1fr)); grid-template-areas:"an ve ve"; gap:.55rem; }
  .la-anillo{ grid-area:an; justify-self:center; width:84px; height:84px; }
  .la-kpi.veredicto{ grid-area:ve; }
  .la-kpi{ padding:.55rem .6rem; }
  .la-kpi > b{ font-size:1.15rem; }
  .la-kpi small{ font-size:.7rem; }
  .la-pre{ display:none; }
  .la-sum{ flex-direction:column; align-items:flex-end; gap:.3rem; }
  .la-segs i{ width:12px; }
  .la-fila{ grid-template-columns:32px minmax(0,1fr); gap:.5rem .7rem; padding:.85rem .9rem .85rem .7rem; align-items:start; }
  .la-fecha{ display:none; }
  .la-nodo{ grid-column:1; grid-row:1 / span 3; place-items:start center; padding-top:.1rem; }
  .la-nodo::before{ top:-.9rem; bottom:-.9rem; }
  .la-fila:first-child .la-nodo::before{ top:1rem; }
  .la-fila:last-child .la-nodo::before{ bottom:auto; height:1rem; }
  .la-tx, .la-est, .la-ops{ grid-column:2; }
  .la-ops{ justify-content:stretch; }
  .la-ops form{ flex:1; }
  .la-ops .av-asis-env{ display:flex; }
  .la-bt{ width:100%; justify-content:center; height:40px; }
}
@media (min-width: 861px){
  /* El día ya está en la columna de la fecha. */
  .la-fec-c .la-dia{ display:none; }
}

/* =====================================================================
   23 · NOTICIAS (NO2), AYUDA (AY2) Y RECURSOS (RE3) DEL LIENZO (oct 2026)
   ===================================================================== */
/* Tonos por tipo de enlace o recurso. */
.av-nt-lk.az, .av-re-it.az{ --tc:#1d4fb8; --ts:#e8efff; }
.av-nt-lk.rj, .av-re-it.rj{ --tc:#c4120a; --ts:#fdecec; }
.av-nt-lk.vd, .av-re-it.vd{ --tc:#067a55; --ts:#e6f5ee; }
.av-nt-lk.am, .av-re-it.am{ --tc:#b45309; --ts:#fff4e0; }

/* --- Noticias: la más reciente destacada + anteriores --------------- */
.av-nt-dest{ display:grid; grid-template-columns:minmax(0,1.45fr) minmax(0,1fr); padding:0; overflow:hidden; }
.av-nt-dest.sin-lado{ grid-template-columns:minmax(0,1fr); }
.av-nt-cuerpo{ padding:clamp(1.2rem, 2.6vw, 1.7rem); }
.av-nt-k{ display:flex; align-items:center; gap:.45rem; margin:0; font-size:.72rem; font-weight:700; letter-spacing:.07em;
  text-transform:uppercase; color:#1d4fb8; }
.av-nt-dest h3{ margin:.45rem 0 .6rem; font-size:clamp(1.2rem, 1.05rem + .6vw, 1.45rem); color:var(--ink); letter-spacing:-.01em; line-height:1.25; }
.av-nt-prosa p{ margin:0 0 .5rem; }
.av-nt-prosa p:empty{ display:none; }
a.av-nt-url{ display:inline-flex; align-items:center; padding:.05rem .55rem; border-radius:var(--r-full); background:var(--acc-sf);
  color:var(--acc); font-size:.85em; font-weight:600; text-decoration:none; }
a.av-nt-url:hover{ background:var(--acc); color:#fff; }
.av-nt-por{ display:flex; align-items:center; gap:.55rem; margin:1rem 0 0; padding-top:.85rem; border-top:1px solid var(--ln2);
  font-size:var(--t-xs); color:var(--mut); max-width:none; }
.av-nt-por b{ color:var(--ink2); }
.av-nt-ava{ flex:none; width:30px; height:30px; border-radius:50%; display:inline-grid; place-items:center; background:#173a80;
  color:#fff; font-size:.7rem; font-weight:700; }
.av-nt-lado{ display:flex; flex-direction:column; gap:.55rem; padding:clamp(1.1rem, 2.4vw, 1.5rem); background:var(--sf2); border-left:1px solid var(--ln); }
.av-nt-lado > p{ margin:0 0 .15rem; font-size:.72rem; font-weight:700; letter-spacing:.07em; text-transform:uppercase; color:var(--mut); }
.av-nt-lk{ display:flex; align-items:center; gap:.65rem; padding:.6rem .75rem; border-radius:12px; border:1px solid var(--ln);
  background:var(--sf); color:var(--ink); font-size:.85rem; font-weight:600; line-height:1.3; text-decoration:none; }
.av-nt-lk:hover{ border-color:var(--tc); box-shadow:0 6px 16px -10px rgba(16,24,40,.35); text-decoration:none; }
.av-nt-lk .ti{ flex:none; width:32px; height:32px; border-radius:9px; display:grid; place-items:center; background:var(--ts); color:var(--tc); }
.av-nt-lk .tx{ min-width:0; }
.av-nt-lk small{ display:block; font-size:.72rem; font-weight:500; color:var(--mut); }
.av-nt-lista{ margin-top:1rem; padding:0; overflow:hidden; }
.av-nt-ant{ margin:0; padding:.75rem 1.15rem; font-size:.72rem; font-weight:700; letter-spacing:.07em; text-transform:uppercase;
  color:var(--mut); border-bottom:1px solid var(--ln2); }
.av-nt-it + .av-nt-it{ border-top:1px solid var(--ln2); }
.av-nt-it > summary{ display:flex; align-items:center; gap:.85rem; padding:.85rem 1.15rem; cursor:pointer; list-style:none; }
.av-nt-it > summary::-webkit-details-marker{ display:none; }
.av-nt-ic{ flex:none; width:40px; height:40px; border-radius:11px; display:grid; place-items:center; background:var(--acc-sf); color:var(--acc); }
.av-nt-it .tx{ min-width:0; flex:1; }
.av-nt-it .tx b{ display:block; font-size:.95rem; font-weight:600; color:var(--ink); }
.av-nt-it .tx small{ font-size:.75rem; color:var(--mut); }
.av-nt-it .fl{ display:inline-flex; color:var(--mut); transition:transform var(--t-fast); }
.av-nt-it[open] .fl{ transform:rotate(90deg); }
.av-nt-it[open] > summary{ background:var(--sf2); }
.av-nt-det{ padding:.4rem 1.15rem 1.1rem calc(1.15rem + 40px + .85rem); background:var(--sf2); }
.av-nt-lks{ display:flex; flex-wrap:wrap; gap:.5rem; margin-top:.4rem; }
.av-nt-lks .av-nt-lk{ flex:0 1 auto; }

/* --- Ayuda: índice | respuesta ------------------------------------- */
.av-fq{ display:grid; grid-template-columns:330px minmax(0,1fr); padding:0; overflow:hidden; }
.av-fq-idx{ background:var(--sf2); border-right:1px solid var(--ln); padding:.6rem; }
.av-fq-idx ol{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:.2rem; }
.av-fq-idx a{ display:flex; align-items:flex-start; gap:.65rem; padding:.7rem .75rem; border-radius:11px; color:var(--ink2);
  font-size:.9rem; font-weight:500; line-height:1.35; text-decoration:none; }
.av-fq-idx a:hover{ background:var(--sf); }
.av-fq-idx .n{ flex:none; width:26px; height:26px; border-radius:8px; display:grid; place-items:center; background:var(--sf);
  border:1px solid var(--ln); font-size:.75rem; font-weight:700; color:var(--acc); }
.av-fq-idx a[aria-current="true"]{ background:var(--sf); color:var(--acc); font-weight:600; box-shadow:0 1px 3px rgba(16,24,40,.1); }
.av-fq-idx a[aria-current="true"] .n{ background:var(--acc); border-color:var(--acc); color:#fff; }
.av-fq-resp{ padding:clamp(1.2rem, 2.8vw, 1.9rem); }
.av-fq-p + .av-fq-p{ margin-top:2rem; padding-top:2rem; border-top:1px solid var(--ln2); }
.av-fq.una .av-fq-p{ display:none; margin:0; padding:0; border:0; }
.av-fq.una .av-fq-p.ver{ display:block; }
.av-fq-p:focus{ outline:none; }
.av-fq-k{ display:flex; align-items:center; gap:.45rem; margin:0; font-size:.72rem; font-weight:700; letter-spacing:.07em;
  text-transform:uppercase; color:#1d4fb8; }
.av-fq-p h3{ margin:.5rem 0 .7rem; font-size:clamp(1.15rem, 1rem + .6vw, 1.35rem); color:var(--ink); line-height:1.3; }
.av-fq-mas{ margin:1.1rem 0 0; font-size:var(--t-sm); color:var(--mut); max-width:none; }
.av-fq-mas a{ font-weight:600; }
.av-fq-nav{ display:flex; justify-content:space-between; gap:.5rem; margin-top:1.3rem; padding-top:1rem; border-top:1px solid var(--ln2); }
.av-fq-nav [aria-disabled="true"]{ opacity:.4; pointer-events:none; }
.av-fq-ct-sec{ padding-top:0; }
.av-fq-ct{ display:grid; grid-template-columns:minmax(0,1fr) auto; gap:1.25rem; align-items:center; padding:clamp(1.1rem, 2.4vw, 1.5rem); }
.av-fq-ct h2{ margin:0; font-size:1.05rem; color:var(--acc); }
.av-fq-ct p{ margin:.4rem 0 0; font-size:var(--t-sm); color:var(--ink2); max-width:60ch; }
.av-fq-ct-bts{ display:flex; flex-wrap:wrap; align-items:center; gap:.5rem; }
.av-fq-red{ width:42px; height:42px; border-radius:11px; display:grid; place-items:center; border:1px solid var(--ln); background:var(--sf); }
.av-fq-red.yt{ color:#c4120a; } .av-fq-red.fb{ color:#1d4fb8; } .av-fq-red.ig{ color:#b45309; }
.av-fq-red:hover{ border-color:currentColor; text-decoration:none; }

/* --- Recursos: destacados + el resto ------------------------------- */
.av-re-dest{ display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:.9rem; }
.av-re-dl{ display:grid; grid-template-columns:auto minmax(0,1fr) auto; gap:1rem; align-items:center; padding:1.1rem 1.25rem;
  border-radius:16px; color:#fff; background:linear-gradient(135deg, #1d4fb8, #0e2a63); text-decoration:none;
  box-shadow:0 14px 30px -20px rgba(7,17,41,.8); transition:transform var(--t-fast); }
.av-re-dl.v{ background:linear-gradient(135deg, #d0281f, #8f0f09); }
.av-re-dl:hover{ color:#fff; text-decoration:none; transform:translateY(-2px); }
.av-re-dl .tile{ width:52px; height:52px; border-radius:14px; display:grid; place-items:center; background:rgba(255,255,255,.14); }
.av-re-dl .tx{ min-width:0; }
.av-re-dl small{ display:block; font-size:.68rem; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:rgba(255,255,255,.72); }
.av-re-dl b{ display:block; font-size:1rem; line-height:1.3; }
.av-re-dl .tx > span{ display:block; margin-top:.1rem; font-size:.78rem; color:rgba(255,255,255,.8); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.av-re-cab{ display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:.6rem 1rem; margin:1.6rem 0 .8rem; }
.av-re-cab h3{ margin:0; font-size:1.05rem; color:var(--acc); }
.av-re-filtros{ display:flex; flex-wrap:wrap; gap:.35rem; }
.av-re-filtros .av-cx2-fil svg{ flex:none; }
.av-re-lista{ display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:.7rem; }
.av-re-it{ display:flex; align-items:stretch; border-radius:14px; background:var(--sf); border:1px solid var(--ln);
  box-shadow:0 1px 2px rgba(16,24,40,.04); }
.av-re-it[hidden]{ display:none; }
.av-re-ir{ flex:1; min-width:0; display:grid; grid-template-columns:44px minmax(0,1fr) auto; gap:.85rem; align-items:center;
  padding:.8rem .9rem; color:var(--ink2); text-decoration:none; }
a.av-re-ir:hover{ text-decoration:none; }
.av-re-it:hover{ border-color:var(--tc); }
.av-re-ir .tile{ width:44px; height:44px; border-radius:12px; display:grid; place-items:center; background:var(--ts); color:var(--tc); }
.av-re-ir .tx{ min-width:0; }
.av-re-ir b{ display:block; font-size:.92rem; font-weight:600; color:var(--ink); line-height:1.35; }
.av-re-ir small{ display:block; margin-top:.1rem; font-size:.74rem; color:var(--mut); }
.av-re-ir em{ display:block; margin-top:.2rem; font-style:normal; font-size:.8rem; color:var(--ink2);
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.av-re-ir .fl{ color:var(--acc); display:inline-flex; }
.av-re-qr{ flex:none; width:46px; display:grid; place-items:center; border:0; border-left:1px solid var(--ln2); background:none;
  color:var(--ink2); cursor:pointer; border-radius:0 14px 14px 0; }
.av-re-qr:hover{ background:var(--sf2); color:var(--acc); }
.av-re-it.off{ opacity:.6; }
.av-re-curso{ margin-top:1.4rem; }

@media (max-width: 860px){
  .av-nt-dest{ grid-template-columns:minmax(0,1fr); }
  .av-nt-lado{ border-left:0; border-top:1px solid var(--ln); }
  .av-nt-det{ padding-left:1.15rem; }
  .av-fq{ grid-template-columns:minmax(0,1fr); }
  .av-fq-idx{ border-right:0; border-bottom:1px solid var(--ln); }
  .av-fq-ct{ grid-template-columns:minmax(0,1fr); }
  .av-re-dest, .av-re-lista{ grid-template-columns:minmax(0,1fr); }
}

/* =====================================================================
   §31 · Asistencia por QR (infoasistencia_qr.php, oct 2026)
   La página a la que llega el alumno al escanear el QR de la sala: en el
   teléfono y de una mano. Franja medianoche con la escuela y la clase
   (como la portada) y una tarjeta blanca con el QR (formato de Ekklesia,
   js/aula_qr.js), el RUN con su ayuda (js/aula_run.js) y «Estoy
   Presente». La pregunta y el resultado van en ventanas «a lo
   SweetAlert» (js/aula_asistencia_qr.js).
   ===================================================================== */
body.aq-pagina{ min-height:100dvh; margin:0; color:var(--ink); background:var(--nav);
  background-image:radial-gradient(120% 55% at 50% -12%, rgba(127,166,255,.24), transparent 62%); }
.aq{ position:relative; max-width:460px; margin:0 auto;
  padding:max(.75rem, env(safe-area-inset-top)) .875rem max(1rem, env(safe-area-inset-bottom)); }
/* El sello de la escuela, tenue, como marca de agua (igual que la franja). */
.aq::before{ content:""; position:fixed; right:-70px; bottom:-70px; width:330px; height:330px; z-index:0;
  background:url("../assets/img/emblema-escuela-blanco.png") center/contain no-repeat; opacity:.05; pointer-events:none; }
.aq > *{ position:relative; z-index:1; }
/* Compacta (pedido del dueño: «los títulos ocupan mucha altura»): el sello
   a la izquierda y los títulos a su lado, con poco aire entre líneas. */
.aq-cab{ display:grid; grid-template-columns:auto minmax(0, 1fr); align-items:center; gap:.9rem;
  padding:.1rem .15rem .85rem; text-align:left; color:#fff; }
.aq-sello{ display:block; width:58px; height:58px; }   /* «se ve un poco chico»: 44 → 58 px (68 en el PC) */
.aq-kicker{ margin:0; font-size:.66rem; font-weight:600; letter-spacing:.18em; text-transform:uppercase; color:var(--acc-nav); }
.aq-curso{ margin:.3rem 0 0; font-size:1.05rem; line-height:1.3; font-weight:700; color:#fff; overflow-wrap:anywhere; }
.aq-curso b, .aq-curso strong{ font-weight:inherit; }
.aq-clase{ margin:.25rem 0 0; font-size:.875rem; line-height:1.45; color:#dbe5ff; }
.aq-clase b, .aq-clase strong{ color:#fff; }
/* El curso y la clase vienen de la base con su <p>: sin el margen del navegador. */
.aq-curso p, .aq-clase p{ margin:0; }
.aq-fecha{ margin:.4rem 0 0; font-family:var(--mono); font-size:.72rem; color:rgba(219,229,255,.72); }

.aq-tarjeta{ padding:.9rem .9rem .85rem; border-radius:16px; background:var(--sf);
  box-shadow:0 30px 60px -30px rgba(0,0,0,.65); animation:av-sube .6s cubic-bezier(.22,1,.36,1) both; }
.aq-form{ display:flex; flex-direction:column; gap:.5rem; margin:0; }
.aq-qr-marco{ align-self:center; margin-bottom:.1rem; padding:6px; border:1px solid var(--ln); border-radius:12px; background:#fff; }
.aq-qr{ display:block; width:min(184px, 50vw); height:auto; aspect-ratio:1; image-rendering:pixelated; }
/* El rótulo «RUN/DNI», sólo para lectores de pantalla (el campo lo dice). */
/* La ventana horaria (V2): abierta (verde), todavía no (azul), ya pasó (gris). */
.aq-ventana{ display:flex; align-items:center; justify-content:center; gap:.4rem; margin:0; padding:.5rem .75rem;
  border-radius:10px; font-size:.875rem; font-weight:600; line-height:1.35; text-align:center; }
.aq-ventana svg{ flex:none; }
.aq-ventana.abierta{ background:var(--ok-sf); color:var(--ok); }
.aq-ventana.antes{ background:var(--acc-sf); color:var(--acc); }
.aq-ventana.cerrada{ background:var(--sf2); color:var(--ink2); }
.aq-label{ position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap; }
.aq-input{ box-sizing:border-box; width:100%; height:52px; padding:0 1rem; border:1.5px solid var(--ln2); border-radius:12px;
  background:#fff; color:var(--acc); font:inherit; font-size:1.375rem; font-weight:500; letter-spacing:.04em; text-align:center;
  transition:border-color var(--t-fast), box-shadow var(--t-fast); }
.aq-input::placeholder{ color:#9aa3b5; font-size:1.05rem; font-weight:400; letter-spacing:0; }
.aq-input:focus{ outline:none; border-color:var(--acc); box-shadow:0 0 0 4px var(--acc-sf); }
.aq-input:disabled{ background:var(--sf2); color:var(--mut); cursor:not-allowed; }
/* La ayuda del RUN: neutra; verde si está bien; ámbar si algo no calza.
   El borde del campo acompaña (con :has, donde el navegador lo tenga). */
.aq-ayuda.run-estado{ display:block; margin:0; padding:.45rem .7rem; border-radius:10px; background:var(--sf2);
  color:var(--ink2); font-size:.8125rem; line-height:1.4; text-align:center; }
.aq-ayuda.run-estado.ok{ background:var(--ok-sf); color:var(--ok); font-weight:600; }
.aq-ayuda.run-estado.ok::before{ content:"✓  "; }
.aq-ayuda.run-estado.warn{ background:var(--warn-sf); color:#8a4a06; }
.aq-form:has(.aq-ayuda.ok) .aq-input{ border-color:var(--ok); }
.aq-form:has(.aq-ayuda.warn) .aq-input{ border-color:#d97706; }
.aq-btn{ height:52px; margin-top:.1rem; border:0; border-radius:14px; background:var(--acc); color:#fff; cursor:pointer;
  font:inherit; font-size:1.125rem; font-weight:700; box-shadow:0 14px 26px -16px rgba(14,42,99,.95);
  transition:background var(--t-fast), transform var(--t-fast); }
.aq-btn:hover{ background:#0a2153; }
.aq-btn:active{ transform:translateY(1px); }
.aq-btn:focus-visible{ outline:3px solid var(--acc-nav); outline-offset:2px; }
/* El resultado que vuelve del servidor (texto del original). */
.aq-res{ padding:.85rem 1rem; border-radius:12px; font-size:.95rem; line-height:1.45; text-align:center; }
.aq-res.ok{ border:1px solid var(--ok-bd); background:var(--ok-sf); color:#064e36; }
.aq-res.err{ border:1px solid var(--dan-bd); background:var(--dan-sf); color:#7a1a12; }
.aq-res span{ color:inherit; font-size:inherit; }
/* Deshabilitada o llave inválida. */
.aq-estado{ display:flex; flex-direction:column; align-items:center; gap:.55rem; padding:1rem .5rem .6rem; text-align:center; color:var(--ink2); }
.aq-estado p{ margin:0; font-size:1.05rem; line-height:1.45; }
.aq-ic{ display:grid; place-items:center; width:58px; height:58px; border-radius:50%; }
.aq-estado.off .aq-ic{ background:var(--sf2); color:var(--mut); }
.aq-estado.err .aq-ic{ background:var(--dan-sf); color:var(--danger); }
.aq-links{ display:flex; justify-content:space-around; margin-top:.15rem; font-size:.875rem; }
.aq-links a{ padding:.5rem .75rem; border-radius:8px; color:var(--ink2); text-decoration:none; }
.aq-links a:hover{ background:var(--sf2); color:var(--acc); }
.aq-pie{ margin:.75rem 0 0; text-align:center; font-size:.75rem; color:rgba(219,229,255,.58); }

/* La pantalla de la SALA (asistencia_qr.php, oct 2026): se proyecta. El
   QR grande y, al lado, la ventana horaria, la cuenta «# N» de
   asistencias registradas y «Control Asistencia». En el teléfono, en
   columna. */
body.aq-sala .aq{ max-width:980px; }
.aq-sala{ display:flex; flex-direction:column; align-items:center; gap:1rem; }
.aq-sala-qr{ display:block; margin:0; transition:transform var(--t-fast); }
.aq-sala-qr:hover{ transform:scale(1.01); }
.aq-sala .aq-qr{ width:min(76vw, 360px); }
.aq-sala-lado{ display:flex; flex-direction:column; align-items:stretch; gap:.75rem; width:100%; max-width:360px; }
.aq-cuenta{ display:flex; flex-direction:column; align-items:center; margin:0; padding:.7rem .75rem; border-radius:12px; background:var(--sf2); }
.aq-cuenta-n{ font-family:var(--mono); font-size:2.4rem; font-weight:600; line-height:1.1; color:var(--acc); }
.aq-cuenta-tx{ margin-top:.15rem; font-size:.8125rem; color:var(--ink2); }
.aq-sala-btn{ display:flex; align-items:center; justify-content:center; text-decoration:none; }
@media (min-width: 900px){
  .aq-sala{ flex-direction:row; align-items:center; justify-content:center; gap:2.25rem; }
  .aq-sala .aq-qr{ width:min(60vh, 460px); }
  .aq-sala-lado{ width:290px; }
  body.aq-sala .aq-tarjeta{ padding:1.5rem 2rem; }
  .aq-cuenta{ padding:1rem .75rem; }
  .aq-cuenta-n{ font-size:3.25rem; }
  .aq-sala .aq-ventana{ font-size:.95rem; }
}

/* Las ventanas «a lo SweetAlert»: ícono grande en un círculo, el texto y
   los botones parejos. */
.aq-dlg{ box-sizing:border-box; width:min(360px, calc(100vw - 2rem)); padding:1.6rem 1.25rem 1.15rem; border:0; border-radius:20px;
  background:var(--sf); color:var(--ink); text-align:center; box-shadow:0 40px 80px -30px rgba(7,17,41,.75); }
.aq-dlg[open]{ animation:aq-dlg-entra .32s cubic-bezier(.22,1,.36,1); }
.aq-dlg::backdrop{ background:rgba(7,17,41,.62); backdrop-filter:blur(2px); }
@keyframes aq-dlg-entra{ from{ opacity:0; transform:scale(.92); } to{ opacity:1; transform:none; } }
.aq-dlg form{ margin:0; }
.aq-dlg-ic{ display:grid; place-items:center; width:68px; height:68px; margin:0 auto .8rem; border-radius:50%; }
.aq-dlg-ic.pregunta{ background:var(--acc-sf); color:var(--acc); }
.aq-dlg-ic.ok{ background:var(--ok-sf); color:var(--ok); }
.aq-dlg-ic.err{ background:var(--dan-sf); color:var(--danger); }
.aq-dlg h2{ margin:0; font-size:1.1rem; line-height:1.35; font-weight:700; }
.aq-dlg-msg{ font-weight:500 !important; }
.aq-dlg-msg span{ color:inherit; font-size:inherit; }
.aq-dlg-run{ margin:.65rem 0 0; font-family:var(--mono); font-size:1.5rem; font-weight:500; letter-spacing:.04em; color:var(--acc); }
.aq-dlg-tx{ margin:.35rem 0 0; font-size:.875rem; line-height:1.4; color:var(--ink2); }
.aq-dlg-bts{ display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:.55rem; margin-top:1.25rem; }
.aq-dlg-bts.uno{ grid-template-columns:minmax(0, 1fr); }
.aq-dlg-bts button{ height:48px; border-radius:12px; cursor:pointer; font:inherit; font-size:.95rem; font-weight:700; }
.aq-dlg .si{ border:0; background:var(--acc); color:#fff; }
.aq-dlg .si:hover{ background:#0a2153; }
.aq-dlg .no{ border:1px solid var(--ln2); background:#fff; color:var(--ink2); }
.aq-dlg .no:hover{ background:var(--sf2); }
.aq-dlg button:focus-visible{ outline:3px solid var(--acc-nav); outline-offset:2px; }
@media (min-width: 768px){
  /* En el PC, al medio de la pantalla (pedido del dueño: «se ve muy
     arriba»). En el teléfono sigue arriba: el campo y el botón a mano. */
  .aq{ box-sizing:border-box; min-height:100dvh; display:flex; flex-direction:column; justify-content:center;
    padding-top:1.5rem; padding-bottom:1.5rem; }
  .aq-qr{ width:240px; }
  .aq-sello{ width:68px; height:68px; }
}
@media (prefers-reduced-motion: reduce){
  .aq-tarjeta, .aq-dlg[open]{ animation:none; }
}

/* =====================================================================
   §32 · El aula del EQUIPO (principal_admin.php de la raíz, oct 2026)
   La portada con la que el original recibía a los perfiles 2, 3 y 4 que
   entran por el aula: «Cursos Disponibles», el «Listado General de
   Cursos» (montado sobre la franja, como la tabla de Cursos inscritos) y
   «Mis Cursos Inscritos». El subtítulo del listado va dentro de la franja.
   En «Equipos Asignados al Curso» cada equipo es un bloque y cada
   integrante enlaza a su ficha.
   ===================================================================== */
.av-franja-ins .av-franja-ins-sub{ margin:clamp(1.4rem, 3vw, 2rem) 0 0; color:#fff;
  font-size:clamp(1.15rem, 1rem + .6vw, 1.4rem); letter-spacing:-.01em; }
.av-cursos-tabla .cu-equ .equipo{ display:block; }
.av-cursos-tabla .cu-equ .equipo + .equipo{ margin-top:.55rem; }
.av-cursos-tabla .cu-equ .miembro a{ color:inherit; text-decoration:underline; text-decoration-color:rgba(0,51,153,.35); text-underline-offset:2px; }
.av-cursos-tabla .cu-equ .miembro a:hover{ color:var(--acc); text-decoration-color:currentColor; }
.av-sec.av-eq-mios{ padding-top:clamp(1.5rem, 4vw, 2.5rem); }

/* =====================================================================
   §33 · El ingreso de la INTRANET se distingue del aula (6-oct-2026)
   Pedido del dueño: «que se diferencie un poco del aula virtual» y «al azul
   de la izquierda dale un tono más oscuro como a Ekklesia». Primero eligió
   T3 (#040a19); al verlo en producción, «quedó muy oscuro»: T1, el
   medianoche de Ekklesia (#071129) sin el halo azul del aula, con un halo
   frío tenue arriba y un resplandor de marca abajo, como el ingreso de
   Ekklesia (docs/rediseno/opciones-login-intranet/). El botón «Ingresar»
   llevó un tiempo el color del panel, pero «se ve oscuro, vuélvelo al color
   más claro»: queda con el del aula (--acc). En el teléfono, la franja de
   la cabecera y el pie. El versículo es 2 Timoteo 2:2 (aula_intranet_textos).
   ===================================================================== */
body.av-entrada-intranet{ --intra:#071129; }
.av-entrada-intranet .av-entrada-halo{ display:none; }
.av-entrada-intranet .av-entrada-marca{ background:
    radial-gradient(70vmax circle at 0% 0%, rgba(127,166,255,.13), transparent 60%),
    radial-gradient(60vmax circle at 100% 110%, rgba(0,51,153,.20), transparent 65%),
    var(--intra); }
@media (max-width: 900px){
  .av-entrada-intranet .av-entrada-cab{ background:radial-gradient(circle at 0% 0%, rgba(127,166,255,.13), transparent 60%), var(--intra); }
  .av-entrada-intranet .av-entrada-pie{ background:var(--intra); }
}
