/* dcr.ar/edubots — Inteligencia Artificial & Aprendizaje Activo
   Un solo archivo, sin dependencias externas: la CSP del sitio es estricta y
   Cloudflare cachea los estáticos 4 h (por eso el ?v= en el <link>). */

:root {
  --fondo:      #FAF8F4;
  --papel:      #FFFFFF;
  --tinta:      #191B20;
  --tinta-2:    #5B6170;
  --tinta-3:    #8A909E;
  --linea:      #E5E0D6;
  --linea-2:    #F0ECE4;
  --acento:     #0E6E62;
  --acento-2:   #E7F2F0;
  --calido:     #C0602B;
  --calido-2:   #FBEEE4;
  --acero:      #2F5A86;
  --acero-2:    #E6EDF5;
  --ciruela:    #6B4A86;
  --ciruela-2:  #F0EAF6;
  --gris:       #61656F;
  --gris-2:     #EEEFF1;
  /* Sólo para advertencias: el aviso de entrada. El resto del sitio no usa
     rojo, así que cuando aparece se lee como lo que es. */
  --rojo:       #B3261E;
  --rojo-2:     #FDEDEB;
  --sombra:     0 1px 2px rgba(25,27,32,.05), 0 8px 24px -12px rgba(25,27,32,.14);
  --sombra-alta:0 2px 4px rgba(25,27,32,.06), 0 20px 48px -20px rgba(25,27,32,.24);
  --radio:      14px;
  --serif:      Georgia, "Iowan Old Style", "Palatino Linotype", "Times New Roman", serif;
  --sans:       system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --ancho:      1140px;
}

/* El tema claro es el predeterminado y no se sigue la preferencia del sistema:
   el sitio se usa proyectado y compartido en el aula, y muchos celulares vienen
   con el modo oscuro puesto de fábrica, así que la mitad del curso abría una
   pantalla distinta de la del proyector. El oscuro sale sólo si se pide con el
   botón del menú, y entonces queda guardado en localStorage. */
:root[data-tema="oscuro"] {
  --fondo:   #101216;  --papel:  #191C22;  --tinta:  #ECE9E2;
  --tinta-2: #A2A8B4;  --tinta-3:#767C89;  --linea:  #2A2E38;
  --linea-2: #21252D;
  --acento:  #4FC0AE;  --acento-2:#153732;
  --calido:  #E0894F;  --calido-2:#3A2417;
  --acero:   #7FAEDC;  --acero-2: #17263A;
  --ciruela: #BB9BDC;  --ciruela-2:#251C33;
  --gris:    #9CA2AE;  --gris-2:  #22262E;
  --rojo:    #F08379;  --rojo-2:  #3A1B18;
  --sombra:      0 1px 2px rgba(0,0,0,.4), 0 8px 24px -12px rgba(0,0,0,.6);
  --sombra-alta: 0 2px 4px rgba(0,0,0,.4), 0 20px 48px -20px rgba(0,0,0,.7);
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0; background: var(--fondo); color: var(--tinta);
  font: 400 17px/1.65 var(--sans);
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
}
img { max-width: 100%; height: auto; display: block; }
a { color: var(--acento); text-decoration-thickness: 1px; text-underline-offset: 2px; }
a:hover { text-decoration-thickness: 2px; }
:focus-visible { outline: 2px solid var(--acento); outline-offset: 3px; border-radius: 4px; }

.contenedor { max-width: var(--ancho); margin: 0 auto; padding: 0 24px; }
.angosto { max-width: 760px; }

/* ── Encabezado ─────────────────────────────────────────────────────────────
   Escritorio: la marca a la izquierda y las secciones a la derecha.
   Celular: las secciones se pliegan detrás del botón «Menú» y bajan como un
   panel, con el título completo de cada grupo en vez del rótulo corto.

   El plegado depende de la clase `js` que pone el <script> del <head>: si no
   hay JS el botón no abriría nada, así que se esconde el botón y la barra de
   secciones se queda a la vista envolviendo en dos filas. */
.cabecera {
  position: sticky; top: 0; z-index: 40;
  background: var(--fondo);
  background: color-mix(in srgb, var(--fondo) 88%, transparent);
  -webkit-backdrop-filter: saturate(180%) blur(12px);
  backdrop-filter: saturate(180%) blur(12px);
  border-bottom: 1px solid var(--linea);
}
.cabecera-fila { display: flex; align-items: center; gap: 20px; min-height: 64px; }
.marca { display: flex; align-items: center; gap: 11px; font-weight: 600; color: var(--tinta); text-decoration: none; letter-spacing: -.01em; }
.marca:hover { text-decoration: none; }
.marca-icono {
  width: 32px; height: 32px; border-radius: 9px; flex: none;
  background: linear-gradient(140deg, var(--acento), color-mix(in srgb, var(--acento) 55%, var(--acero)));
  display: grid; place-items: center; color: #fff; font-size: 15px; font-weight: 700;
}
.marca-texto { font-size: 15.5px; }
.marca-texto span { display: block; font-size: 11.5px; font-weight: 500; color: var(--tinta-3); letter-spacing: .02em; }

.nav { margin-left: auto; display: flex; align-items: center; gap: 4px; }
.nav a {
  display: flex; align-items: center;
  color: var(--tinta-2); text-decoration: none; font-size: 14.5px; font-weight: 500;
  padding: 9px 12px; border-radius: 8px;
}
.nav a.activo { color: var(--acento); background: var(--acento-2); }
@media (hover: hover) {
  .nav a:hover { background: var(--linea-2); color: var(--tinta); }
}
/* El rótulo largo es del menú del celular: los títulos completos de los grupos
   no entran en la fila de escritorio. «Inicio» sí se queda en las dos, aunque la
   marca lleve al mismo lado: en una página de actividad es el enlace que se
   busca primero. */
.nav-largo, .nav-titulo, .menu-boton { display: none; }

.tema-boton {
  border: 1px solid var(--linea); background: var(--papel); color: var(--tinta-2);
  min-width: 36px; height: 36px; border-radius: 9px; cursor: pointer; font-size: 15px;
  display: flex; align-items: center; justify-content: center; gap: 8px;
  margin-left: 6px; padding: 0; font-family: inherit;
}
@media (hover: hover) {
  .tema-boton:hover { color: var(--tinta); border-color: var(--tinta-3); }
}
/* En escritorio el botón es sólo el ícono, pero el rótulo se conserva para
   quien navega con lector de pantalla. */
.tema-texto {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip-path: inset(50%); white-space: nowrap;
}

/* ── Portada ────────────────────────────────────────────────────────────── */
.portada { padding: 64px 0 8px; }
.portada-grilla { display: grid; grid-template-columns: 1.05fr .95fr; gap: 56px; align-items: center; }
.portada h1 {
  font: 400 clamp(34px, 5vw, 52px)/1.1 var(--serif);
  margin: 0 0 22px; letter-spacing: -.02em;
}
.portada h1 em { font-style: italic; color: var(--acento); }
.portada p { color: var(--tinta-2); font-size: 17.5px; margin: 0 0 16px; }
/* El antetítulo va con el selector largo a propósito: `.portada p` tiene más
   especificidad que una clase sola y le pisaba el color y el tamaño. */
.portada p.portada-antetitulo {
  margin: 0 0 10px; font: 650 12.5px/1.3 var(--sans);
  letter-spacing: .09em; text-transform: uppercase; color: var(--acento);
}
.portada-figura { border-radius: 20px; overflow: hidden; box-shadow: var(--sombra-alta); }
.portada-figura img { width: 100%; aspect-ratio: 4/3; object-fit: cover; }
@media (max-width: 900px) {
  .portada { padding: 36px 0 4px; }
  .portada-grilla { grid-template-columns: 1fr; gap: 32px; }
  .portada-figura { order: -1; }
}

.cinta { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 26px; }
.cinta-dato {
  border: 1px solid var(--linea); background: var(--papel); border-radius: 999px;
  padding: 7px 15px; font-size: 13.5px; color: var(--tinta-2);
}
.cinta-dato strong { color: var(--tinta); font-weight: 650; }

/* ── Secciones y tarjetas ───────────────────────────────────────────────── */
.seccion { padding: 56px 0 8px; }
.seccion-cabeza { display: flex; align-items: baseline; gap: 16px; margin-bottom: 26px; flex-wrap: wrap; }
.seccion-cabeza h2 { font: 400 30px/1.2 var(--serif); margin: 0; letter-spacing: -.02em; }
.seccion-cabeza p { margin: 0; color: var(--tinta-2); font-size: 15.5px; flex: 1 1 300px; }

.grilla { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 22px; }

.tarjeta {
  background: var(--papel); border: 1px solid var(--linea); border-radius: var(--radio);
  overflow: hidden; box-shadow: var(--sombra); text-decoration: none; color: inherit;
  display: flex; flex-direction: column;
  transition: transform .16s ease, box-shadow .16s ease, border-color .16s ease;
}
.tarjeta:hover {
  transform: translateY(-3px); box-shadow: var(--sombra-alta);
  border-color: var(--tono, var(--acento));
  border-color: color-mix(in srgb, var(--tono, var(--acento)) 45%, var(--linea));
  text-decoration: none;
}
.tarjeta-img { aspect-ratio: 16/9; overflow: hidden; background: var(--linea-2); }
.tarjeta-img img { width: 100%; height: 100%; object-fit: cover; transition: transform .4s ease; }
.tarjeta:hover .tarjeta-img img { transform: scale(1.04); }
.tarjeta-cuerpo { padding: 17px 19px 19px; display: flex; flex-direction: column; gap: 8px; flex: 1; }
.tarjeta h3 { margin: 0; font: 600 17.5px/1.32 var(--sans); letter-spacing: -.01em; }
.tarjeta p { margin: 0; font-size: 14.5px; color: var(--tinta-2); line-height: 1.55; }
.tarjeta-pie { margin-top: auto; padding-top: 10px; font-size: 13.5px; font-weight: 600; color: var(--tono, var(--acento)); }

.etiqueta {
  display: inline-block; font-size: 11.5px; font-weight: 650; letter-spacing: .05em;
  text-transform: uppercase; padding: 4px 9px; border-radius: 6px;
  background: var(--tono-suave, var(--acento-2)); color: var(--tono, var(--acento));
}
.g-escenarios { --tono: var(--acento); --tono-suave: var(--acento-2); }
.g-escritor   { --tono: var(--calido); --tono-suave: var(--calido-2); }
.g-tec        { --tono: var(--acero);  --tono-suave: var(--acero-2); }
.g-filosofos  { --tono: var(--ciruela); --tono-suave: var(--ciruela-2); }
.g-archivo    { --tono: var(--gris);   --tono-suave: var(--gris-2); }

/* ── Página de actividad ────────────────────────────────────────────────── */
.migas { font-size: 13.5px; color: var(--tinta-3); padding: 22px 0 0; }
.migas a { color: var(--tinta-2); text-decoration: none; }
.migas a:hover { color: var(--acento); text-decoration: underline; }

.actividad { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.08fr); gap: 44px; padding: 20px 0 64px; align-items: start; }
@media (max-width: 1000px) { .actividad { grid-template-columns: 1fr; gap: 30px; } }

.consigna h1 { font: 400 clamp(28px, 3.6vw, 38px)/1.15 var(--serif); margin: 12px 0 18px; letter-spacing: -.02em; }
.consigna-figura { border-radius: var(--radio); overflow: hidden; box-shadow: var(--sombra); margin-bottom: 22px; }
.consigna-figura img { width: 100%; aspect-ratio: 21/9; object-fit: cover; }
.prosa p { margin: 0 0 15px; color: var(--tinta-2); }
.prosa strong { color: var(--tinta); font-weight: 650; }
.prosa ul, .prosa ol { margin: 0 0 16px; padding-left: 22px; color: var(--tinta-2); }
.prosa li { margin-bottom: 6px; }
.prosa h2 { font: 400 25px/1.25 var(--serif); margin: 30px 0 12px; color: var(--tinta); }
.prosa h3 { font: 650 18px/1.35 var(--sans); margin: 24px 0 10px; color: var(--tinta); }
.prosa table { width: 100%; border-collapse: collapse; margin: 0 0 18px; font-size: 15px; }
.prosa th, .prosa td { border: 1px solid var(--linea); padding: 8px 11px; text-align: left; vertical-align: top; }
.prosa th { background: var(--linea-2); font-weight: 650; width: 38%; }
.prosa-scroll { overflow-x: auto; }

/* El prompt vigente, dentro de las guías del docente: se lee como lo que es,
   un documento técnico, distinto del resto de la prosa. */
.prosa pre {
  background: var(--linea-2); border: 1px solid var(--linea); border-radius: var(--radio);
  padding: 16px 18px; margin: 0 0 18px; overflow-x: auto;
}
.prosa pre code {
  display: block; font: 400 13px/1.65 ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
  color: var(--tinta-2); white-space: pre-wrap; word-break: break-word; background: none; padding: 0;
}
.prosa code {
  font: 400 .88em ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
  background: var(--linea-2); padding: .15em .45em; border-radius: 5px; color: var(--tinta);
}

.apoyo { display: flex; flex-wrap: wrap; gap: 10px; margin: 24px 0 0; }
.apoyo a {
  display: inline-flex; align-items: center; gap: 8px; text-decoration: none;
  border: 1px solid var(--linea); background: var(--papel); border-radius: 10px;
  padding: 10px 15px; font-size: 14.5px; font-weight: 550; color: var(--tinta);
  box-shadow: var(--sombra);
}
.apoyo a:hover { border-color: var(--acento); color: var(--acento); text-decoration: none; }

/* ── Chat ───────────────────────────────────────────────────────────────── */
.chat {
  position: sticky; top: 88px;
  background: var(--papel); border: 1px solid var(--linea); border-radius: 18px;
  box-shadow: var(--sombra-alta); overflow: hidden;
  display: flex; flex-direction: column; height: min(76vh, 720px);
}
/* En pantallas angostas el chat va debajo de la consigna y deja de ser sticky.
   El alto se mide en dvh: `vh` en el celular cuenta la barra del navegador que
   después se esconde, así que el cuadro de escribir quedaba fuera de pantalla. */
@media (max-width: 1000px) {
  .chat { position: static; height: 70vh; height: min(74dvh, 620px); min-height: 400px; }
}

/* Recordatorio arriba del chat: el rojo es el mismo del aviso de entrada, que
   es el único lugar del sitio donde se usa. Va DENTRO de la caja del chat y
   antes del encabezado, así que hereda las esquinas redondeadas y no se pierde
   cuando en el celular el chat cae debajo de la consigna. */
.chat-badge {
  flex: none; margin: 0; display: flex; align-items: flex-start; gap: 8px;
  padding: 9px 15px; font-size: 12.5px; line-height: 1.45;
  background: var(--rojo-2); color: var(--rojo);
  border-bottom: 1px solid var(--rojo);
  border-bottom-color: color-mix(in srgb, var(--rojo) 28%, transparent);
}
.chat-badge-icono { flex: none; font-size: 13px; line-height: 1.35; }
.chat-badge a { color: inherit; font-weight: 650; white-space: nowrap; }

.chat-cabeza {
  display: flex; align-items: center; gap: 12px; padding: 13px 16px;
  border-bottom: 1px solid var(--linea); background: var(--linea-2); flex: none;
}
.chat-avatar {
  width: 34px; height: 34px; border-radius: 10px; flex: none; display: grid; place-items: center;
  background: var(--tono, var(--acento)); color: #fff; font-weight: 700; font-size: 14px;
}
.chat-titulo { font-weight: 650; font-size: 15px; line-height: 1.25; }
.chat-sub { font-size: 12.5px; color: var(--tinta-3); }
.chat-acciones { margin-left: auto; display: flex; gap: 6px; }
.chat-acciones button {
  border: 1px solid var(--linea); background: var(--papel); color: var(--tinta-2);
  border-radius: 8px; padding: 6px 11px; font-size: 13px; font-weight: 550; cursor: pointer;
  font-family: inherit;
}
.chat-acciones button:hover:not(:disabled) { color: var(--tinta); border-color: var(--tinta-3); }
.chat-acciones button:disabled { opacity: .45; cursor: not-allowed; }

.chat-hilo { flex: 1; overflow-y: auto; overscroll-behavior: contain; padding: 20px 16px; display: flex; flex-direction: column; gap: 14px; }
.chat-hilo::-webkit-scrollbar { width: 10px; }
.chat-hilo::-webkit-scrollbar-thumb { background: var(--linea); border-radius: 6px; border: 3px solid var(--papel); }

.msj { max-width: 86%; font-size: 15.5px; line-height: 1.6; }
.msj-ia { align-self: flex-start; }
.msj-yo { align-self: flex-end; }
.msj-burbuja { padding: 11px 15px; border-radius: 15px; white-space: pre-wrap; word-wrap: break-word; }
.msj-ia .msj-burbuja { background: var(--linea-2); border: 1px solid var(--linea); border-bottom-left-radius: 5px; }
.msj-yo .msj-burbuja { background: var(--tono, var(--acento)); color: #fff; border-bottom-right-radius: 5px; }
.msj-yo .msj-burbuja strong { color: #fff; }
.msj-burbuja strong { font-weight: 680; color: var(--tinta); }
.msj-burbuja em { font-style: italic; }
.msj-quien { font-size: 11.5px; font-weight: 650; letter-spacing: .04em; text-transform: uppercase; color: var(--tinta-3); margin: 0 0 5px 4px; }
.msj-yo .msj-quien { text-align: right; margin: 0 4px 5px 0; }

.escribiendo { display: flex; gap: 4px; padding: 14px 16px; }
.escribiendo i { width: 7px; height: 7px; border-radius: 50%; background: var(--tinta-3); animation: latido 1.3s infinite; }
.escribiendo i:nth-child(2) { animation-delay: .18s; }
.escribiendo i:nth-child(3) { animation-delay: .36s; }
@keyframes latido { 0%,60%,100% { opacity:.25; transform: translateY(0);} 30% { opacity:1; transform: translateY(-4px);} }
@media (prefers-reduced-motion: reduce) {
  .escribiendo i { animation: none; opacity: .5; }
  .tarjeta, .tarjeta-img img { transition: none; }
}

.chat-aviso {
  margin: 0 16px 12px; padding: 10px 13px; border-radius: 10px; font-size: 13.5px;
  background: var(--calido-2); color: var(--calido);
  border: 1px solid var(--calido);
  border-color: color-mix(in srgb, var(--calido) 30%, transparent);
}

.chat-pie { flex: none; border-top: 1px solid var(--linea); padding: 12px 14px; background: var(--papel); }
.chat-forma { display: flex; gap: 10px; align-items: flex-end; }
.chat-forma textarea {
  flex: 1; resize: none; border: 1px solid var(--linea); background: var(--fondo); color: var(--tinta);
  border-radius: 12px; padding: 11px 14px; font: inherit; font-size: 15.5px; line-height: 1.5;
  max-height: 140px; min-height: 46px; font-family: inherit;
}
.chat-forma textarea:focus { outline: none; border-color: var(--acento); box-shadow: 0 0 0 3px var(--acento-2); }
.chat-enviar {
  border: none; background: var(--tono, var(--acento)); color: #fff; border-radius: 12px;
  padding: 0 20px; height: 46px; font: 600 15px var(--sans); cursor: pointer; flex: none;
}
.chat-enviar:hover:not(:disabled) { filter: brightness(1.08); }
.chat-enviar:disabled { opacity: .4; cursor: not-allowed; }
.chat-medida { display: flex; justify-content: space-between; font-size: 12px; color: var(--tinta-3); padding: 7px 4px 0; }
.chat-privacidad { margin: 6px 0 0; font-size: 12.5px; color: var(--tinta-3); text-align: center; }

/* ── Artículos (guías y ejemplos) ───────────────────────────────────────── */
.articulo { padding: 8px 0 64px; }
.articulo h1 { font: 400 clamp(28px, 3.6vw, 40px)/1.15 var(--serif); margin: 14px 0 24px; letter-spacing: -.02em; }
.articulo-figura { border-radius: var(--radio); overflow: hidden; box-shadow: var(--sombra); margin-bottom: 28px; }
.articulo-figura img { width: 100%; aspect-ratio: 21/9; object-fit: cover; }

/* ── Pie ────────────────────────────────────────────────────────────────── */
.pie { border-top: 1px solid var(--linea); margin-top: 64px; padding: 34px 0 46px; color: var(--tinta-3); font-size: 14px; }
.pie-fila { display: flex; gap: 20px; flex-wrap: wrap; align-items: center; }
.pie a { color: var(--tinta-2); }
.pie-nota { margin-top: 12px; max-width: 620px; line-height: 1.6; }
/* La procedencia de la propuesta: más chica que la nota de arriba, que es la
   advertencia que sí tiene que leerse. */
.pie-fundamento { margin-top: 10px; max-width: 620px; font-size: 12.5px; line-height: 1.55; color: var(--tinta-3); }
.pie-fundamento a { color: var(--tinta-2); }

.aviso-caja {
  border: 1px solid var(--calido);
  border-color: color-mix(in srgb, var(--calido) 35%, transparent);
  background: var(--calido-2);
  color: var(--tinta); border-radius: var(--radio); padding: 16px 18px; margin: 20px 0; font-size: 15px;
}
.aviso-caja strong { color: var(--calido); }

/* ── Consigna de la actividad ───────────────────────────────────────────────
   Todas siguen la misma forma: de qué se trata, los pasos, un ejemplo y el
   entregable. El ejemplo va en <blockquote> y se dibuja como un fragmento de
   chat, para que se lea distinto del texto que lo rodea. */

.prosa > p:first-child {
  font-size: 18.5px; line-height: 1.55; color: var(--tinta);
  border-left: 3px solid var(--tono, var(--acento));
  padding-left: 16px; margin-bottom: 26px;
}
.prosa > p:first-child strong { color: var(--tono, var(--acento)); }

.prosa h3 {
  font: 650 12.5px/1.3 var(--sans); letter-spacing: .07em; text-transform: uppercase;
  color: var(--tinta-3); margin: 28px 0 12px;
}

.prosa ol { counter-reset: paso; list-style: none; padding-left: 0; margin: 0 0 4px; }
.prosa ol > li {
  counter-increment: paso; position: relative;
  padding-left: 38px; margin-bottom: 13px; color: var(--tinta-2);
}
.prosa ol > li::before {
  content: counter(paso); position: absolute; left: 0; top: 1px;
  width: 25px; height: 25px; border-radius: 50%;
  background: var(--tono-suave, var(--acento-2)); color: var(--tono, var(--acento));
  font: 650 13px/25px var(--sans); text-align: center;
}
.prosa ol > li strong { color: var(--tinta); display: inline; }

.prosa blockquote {
  margin: 0; padding: 15px 17px; border-radius: 12px;
  background: var(--linea-2); border: 1px solid var(--linea);
  font-size: 15px;
}
.prosa blockquote p { margin: 0 0 9px; color: var(--tinta-2); line-height: 1.5; }
.prosa blockquote p:last-child { margin-bottom: 0; }
.prosa blockquote strong { color: var(--tono, var(--acento)); font-weight: 650; }

/* El aviso final (cuidados, advertencias). Sin :has() queda en cursiva, que ya
   lo separa del resto; con :has() se dibuja la caja. */
.prosa > p > em:only-child { color: var(--tinta); }
.prosa > p:has(> em:only-child) {
  background: var(--calido-2); color: var(--tinta);
  border: 1px solid var(--calido);
  border-color: color-mix(in srgb, var(--calido) 30%, transparent);
  border-radius: 10px; padding: 12px 15px; font-size: 14.5px; margin-top: 22px;
}
.prosa > p:has(> em:only-child) > em { font-style: normal; }


/* ── Salto a la conversación ────────────────────────────────────────────────
   Sólo donde el chat cayó abajo de la consigna (celular y tableta): sin esto
   hay que barrer toda la consigna a dedo para llegar a escribir. */
.salto-chat { display: none; }
@media (max-width: 1000px) {
  .salto-chat {
    display: inline-flex; align-items: center; gap: 8px; margin: 0 0 20px;
    background: var(--tono-suave, var(--acento-2)); color: var(--tono, var(--acento));
    border: 1px solid; border-color: color-mix(in srgb, var(--tono, var(--acento)) 35%, transparent);
    border-radius: 999px; padding: 11px 18px;
    font-size: 15px; font-weight: 600; text-decoration: none;
  }
}

/* ── Secciones del pie ──────────────────────────────────────────────────── */
.pie-nav { display: flex; flex-wrap: wrap; gap: 6px 18px; margin-top: 14px; }
.pie-nav a { color: var(--tinta-2); text-decoration: none; font-size: 14px; }
.pie-nav a:hover { color: var(--acento); text-decoration: underline; }

/* ── Anclas y saltos ────────────────────────────────────────────────────────
   El encabezado es sticky: sin margen de salto, «Escenarios» dejaba el título
   de la sección tapado debajo de la barra y parecía que el menú no había hecho
   nada. */
html { scroll-behavior: smooth; }
.seccion, #chat, .portada { scroll-margin-top: 82px; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }

/* ── Pantallas táctiles ─────────────────────────────────────────────────────
   El hover del mouse en una pantalla táctil se queda pegado después de tocar:
   la tarjeta se levantaba y se quedaba levantada hasta tocar otra cosa. */
@media (hover: none) {
  .tarjeta:hover { transform: none; box-shadow: var(--sombra); border-color: var(--linea); }
  .tarjeta:hover .tarjeta-img img { transform: none; }
}

/* ── Celular ────────────────────────────────────────────────────────────── */
@media (max-width: 760px) {
  .contenedor { padding: 0 18px; }
  body { font-size: 16.5px; }

  /* Encabezado: el botón «Menú» y el panel desplegable. */
  .cabecera-fila { gap: 12px; min-height: 60px; }
  .marca-texto span { display: none; }
  .marca { min-width: 0; }
  .marca-texto { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

  html.js .menu-boton {
    display: inline-flex; align-items: center; gap: 9px; margin-left: auto; flex: none;
    border: 1px solid var(--linea); background: var(--papel); color: var(--tinta);
    border-radius: 10px; padding: 0 14px; height: 40px;
    font: 600 14.5px var(--sans); cursor: pointer;
  }
  .menu-rayas { position: relative; display: block; width: 17px; height: 2px; border-radius: 2px; background: currentColor; }
  .menu-rayas::before, .menu-rayas::after {
    content: ''; position: absolute; left: 0; width: 17px; height: 2px; border-radius: 2px; background: currentColor;
    transition: transform .15s ease, top .15s ease;
  }
  .menu-rayas::before { top: -6px; }
  .menu-rayas::after  { top: 6px; }
  .cabecera[data-menu="abierto"] .menu-rayas { background: transparent; }
  .cabecera[data-menu="abierto"] .menu-rayas::before { top: 0; transform: rotate(45deg); }
  .cabecera[data-menu="abierto"] .menu-rayas::after  { top: 0; transform: rotate(-45deg); }

  /* Sin JS no hay botón que valga: la barra se queda a la vista y envuelve. */
  .nav { flex-wrap: wrap; row-gap: 4px; }

  html.js .nav {
    display: none;
    position: absolute; top: 100%; left: 0; right: 0;
    flex-direction: column; align-items: stretch; gap: 2px; margin: 0;
    padding: 10px 18px 18px;
    background: var(--papel); border-bottom: 1px solid var(--linea);
    box-shadow: var(--sombra-alta);
    max-height: calc(100vh - 60px); max-height: calc(100dvh - 60px); overflow-y: auto;
  }
  html.js .cabecera[data-menu="abierto"] .nav { display: flex; }
  html.js .nav-titulo {
    display: block; margin: 2px 4px 8px;
    font: 650 11.5px/1 var(--sans); letter-spacing: .08em; text-transform: uppercase; color: var(--tinta-3);
  }
  html.js .nav-inicio { display: flex; }
  html.js .nav-largo { display: inline; }
  html.js .nav-corto { display: none; }
  html.js .nav a { padding: 13px 12px; font-size: 16px; border-radius: 10px; }

  html.js .tema-boton {
    width: 100%; height: 48px; justify-content: flex-start; gap: 12px;
    margin: 10px 0 0; padding: 0 13px; border-radius: 10px;
    font: 550 15.5px var(--sans); color: var(--tinta);
  }
  html.js .tema-texto { position: static; width: auto; height: auto; margin: 0; clip-path: none; }

  /* Portada: la foto entra como banda y no como media pantalla. */
  .portada { padding: 22px 0 0; }
  .portada-grilla { gap: 24px; }
  .portada-figura { border-radius: 16px; }
  .portada-figura img { aspect-ratio: 16/9; }
  .portada p { font-size: 16.5px; }
  .cinta { margin-top: 20px; }

  .seccion { padding: 38px 0 4px; }
  .seccion-cabeza { gap: 8px; margin-bottom: 16px; }
  .seccion-cabeza h2 { font-size: 26px; }
  .seccion-cabeza p { font-size: 15px; }

  .migas { padding: 16px 0 0; }
  .actividad { padding: 14px 0 44px; }
  .consigna h1 { margin: 10px 0 16px; }
  .consigna-figura { margin-bottom: 18px; }
  .consigna-figura img { aspect-ratio: 16/9; }
  .prosa > p:first-child { font-size: 17px; padding-left: 14px; margin-bottom: 22px; }
  .apoyo a { flex: 1 1 100%; justify-content: center; padding: 13px 15px; }

  /* Chat: el cuadro de escribir con 16px o iOS hace zoom solo al enfocarlo y
     deja la página corrida a la derecha. */
  .chat { border-radius: 16px; }
  /* El nombre del escenario es largo y envolvía en tres renglones, empujando
     «Copiar» y «Reiniciar» contra el borde. */
  .chat-cabeza { padding: 11px 12px; gap: 10px; }
  .chat-cabeza > div { min-width: 0; }
  .chat-sub { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .chat-hilo { padding: 16px 12px; gap: 12px; }
  .chat-pie { padding: 11px 12px; }
  .chat-acciones { gap: 5px; }
  .chat-acciones button { padding: 8px 11px; min-height: 36px; }
  .chat-forma textarea { font-size: 16px; min-height: 46px; }
  .msj { max-width: 92%; font-size: 16px; }
  .chat-medida { font-size: 12.5px; gap: 12px; }

  .articulo { padding: 4px 0 44px; }
  .pie { margin-top: 44px; padding: 28px 0 38px; }
}

/* ── Celular angosto ────────────────────────────────────────────────────────
   Con veinte escenarios, la tarjeta a lo ancho obliga a barrer la pantalla
   varias veces por sección. En fila —miniatura al costado, título y resumen al
   lado— entran tres o cuatro de una y se sigue viendo la imagen. */
@media (max-width: 620px) {
  .contenedor { padding: 0 16px; }
  .grilla { grid-template-columns: 1fr; gap: 12px; }
  .tarjeta { flex-direction: row; align-items: stretch; }
  /* La miniatura toma el alto de la tarjeta, que lo fija el texto: sin el
     absolute, `height:100%` no tiene contra qué medirse y la imagen se
     estira o desaparece según el navegador. */
  .tarjeta-img { width: 108px; flex: none; aspect-ratio: auto; position: relative; }
  .tarjeta-img img { position: absolute; inset: 0; height: 100%; }
  .tarjeta-cuerpo { padding: 12px 14px; gap: 5px; justify-content: center; }
  .tarjeta h3 { font-size: 16px; }
  .tarjeta p {
    font-size: 14px; line-height: 1.45;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  }
  .tarjeta-pie { display: none; }
  .cinta-dato { padding: 6px 13px; font-size: 13px; }
}


/* ── Aviso de entrada ───────────────────────────────────────────────────────
   Cortina roja que sale una vez por navegador (la marca la guarda sitio.js en
   localStorage). Nace `hidden` desde el PHP: sin JS no hay nada que taparlo,
   así que tampoco aparece. El z-index queda por encima del encabezado
   pegajoso, que está en 40. */
.aviso-entrada {
  position: fixed; inset: 0; z-index: 100;
  /* Flex + `margin: auto` en la caja, y no `place-items: center`: si el aviso
     no entra en pantalla (celular apaisado), centrar recorta el borde de
     arriba y el título queda inalcanzable; así crece hacia abajo y se
     desliza. */
  display: flex; align-items: center; justify-content: center; padding: 24px;
  background: rgba(25, 27, 32, .55);
  -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px);
  overflow-y: auto;
}
.aviso-entrada[hidden] { display: none; }

.aviso-entrada-caja {
  background: var(--papel); color: var(--tinta);
  border: 1px solid var(--rojo);
  border-top: 5px solid var(--rojo);
  border-radius: var(--radio); box-shadow: var(--sombra-alta);
  max-width: 520px; width: 100%; margin: auto; padding: 26px 28px 24px;
  animation: aviso-entra .18s ease-out;
}
@keyframes aviso-entra { from { opacity: 0; transform: translateY(8px); } }
@media (prefers-reduced-motion: reduce) { .aviso-entrada-caja { animation: none; } }

.aviso-entrada-marca {
  margin: 0 0 8px;
  font: 650 12px/1.3 var(--sans); letter-spacing: .09em; text-transform: uppercase;
  color: var(--rojo);
}
.aviso-entrada h2 {
  margin: 0 0 14px; color: var(--rojo);
  font: 400 clamp(21px, 3vw, 26px)/1.25 var(--serif); letter-spacing: -.01em;
}
.aviso-entrada p { margin: 0 0 12px; color: var(--tinta-2); font-size: 15.5px; line-height: 1.6; }
.aviso-entrada p:last-of-type { margin-bottom: 0; }
.aviso-entrada strong { color: var(--tinta); font-weight: 650; }

.aviso-entrada-boton {
  margin-top: 22px; width: 100%;
  border: none; border-radius: 12px; background: var(--rojo); color: #fff;
  padding: 0 24px; min-height: 48px; font: 650 16px var(--sans); cursor: pointer;
}
.aviso-entrada-boton:hover { filter: brightness(1.08); }
:root[data-tema="oscuro"] .aviso-entrada-boton { color: #23100E; }

/* El fondo de la caja en un celular chico: el texto ya es el que manda. */
@media (max-width: 620px) {
  .aviso-entrada { padding: 16px; }
  .aviso-entrada-caja { padding: 22px 20px 20px; }
  .aviso-entrada p { font-size: 15px; }
}
