/** ==========================================================================
 * Ficha de curso — tipo de contenido «master», plantilla single-master.php
 *
 * El plugin meta-boxes Master pinta la ficha en UN bloque:
 *
 *   #Content.Curso
 *     .Curso-cabecera        lamina del color del area: titulo, sede,
 *                            certificaciones, indice de secciones y botones
 *     .Curso-cuerpo          las secciones (.Curso-seccion), una tras otra
 *     .Curso-relacionados    tarjetas de otros estudios
 *   .Curso-resumen           barra resumen, pegajosa al pie de la ventana
 *
 * Antes eran seis bloques #Content —cada parte por duplicado, una maqueta de
 * escritorio y otra de movil— y unas 150 reglas de style.css los mostraban y
 * escondian por breakpoint. Ahora el HTML lleva cada cosa una vez y esta hoja
 * la recoloca: en movil la cabecera se apila y el indice desaparece; las
 * secciones van una debajo de otra a cualquier ancho, sin desplegables
 * (Eduardo, 06/09/2026: fuera el acordeon de movil y las pestañas).
 *
 * Lo que sigue en style.css y esta hoja aprovecha: el estilo de los titulos
 * (.contenido_seo), las viñetas de las listas (.seciones_cursos ul), las
 * tarjetas de profesorado y relacionados (.profe, .relacionado, .meta_*) y el
 * boton compartido (css/cei-componentes.css).
 *
 * Los tamaños que no vienen de Figma (los 40px del bloque de botones, los
 * anchos del carrusel) se conservan tal cual: son maqueta heredada, no sistema.
 * ========================================================================== */

/* --------------------------------------------------------------------------
 * EL BLOQUE Y SU TIPOGRAFIA
 * -------------------------------------------------------------------------- */

#Content.Curso {
  /*
   * El carril del texto es el margen de pagina: la misma vertical en la que
   * arrancan el logotipo y el menu de la barra de navegacion. Todo lo que hay
   * en la ficha —el borde de la lamina de la cabecera, las secciones del
   * cuerpo, los relacionados— se alinea con esa linea; dentro de la lamina el
   * texto va con el relleno de la propia lamina, como en cualquier tarjeta.
   */
  --Curso-carril: var(--Global-Margen-Pagina);

  /*
   * El sitio que se lleva la barra resumen al pie de la ventana: su alto (dos
   * lineas de texto mas su relleno) y el margen del flotante. La cabecera se
   * hace mas baja justo eso, para que a pagina arriba la barra no caiga sobre
   * la lamina y quede algo de aire entre las dos (Eduardo, 07/09/2026).
   */
  --Curso-resumen-hueco: calc(76px + var(--Global-Flotante-margen));

  padding: 0; /* Betheme pone 30px de relleno superior a todo #Content */
}

/*
 * Cuerpo de texto de toda la ficha: Global-p, para TODO lo que actua como
 * parrafo. No solo <p>: los <li> de las listas (que style.css bajaba a 16px con
 * interlineado 1.5 y peso 500), el texto suelto que el editor deja sin envolver
 * dentro de .contenido_cursos (heredaba 16px de Betheme) y la linea «Abierto
 * plazo de matriculaciones». Medido antes del cambio: cuatro tamaños y tres
 * interlineados distintos para texto corrido en la misma pagina.
 */
#Content.Curso p,
#Content.Curso .Curso-cuerpo li,
#Content.Curso .contenido_cursos {
  font-family: var(--Font-Family-Primary);
  font-size: var(--Font-Size-19);
  font-weight: var(--Font-Weight-400);
  line-height: normal;
  letter-spacing: var(--Font-Letter-spacing-0);
}

#Content.Curso .Curso-cuerpo ul,
#Content.Curso .Curso-cuerpo ol {
  font-family: var(--Font-Family-Primary);
  font-size: var(--Font-Size-19);
  line-height: normal;
  letter-spacing: var(--Font-Letter-spacing-0);
}

/*
 * Los subtitulos escritos dentro de «Contenido del curso» (Eduardo,
 * 28/09/2026). Desde hoy el campo se publica entero (meta-boxes,
 * cei_master_contenido_html) y cuatro fichas —los cursos de UX/UI— traen <h3>
 * entre los parrafos. style.css los pinta como un titulo de seccion
 * (h3.contenido_seo, a Size-29, lo mismo que el h2 de la seccion). Dentro de
 * la seccion son un escalon por debajo: Size-20, y el hueco de un parrafo por
 * delante lo pone el margen del parrafo anterior.
 */
#Content.Curso .contenido_cursos h3 {
  margin: 0 0 calc(var(--Global-Espacio-TituloContenido) / 2);
  font-size: var(--Font-Size-20);
  font-weight: var(--Font-Weight-500);
  line-height: 1.3;
  letter-spacing: var(--Font-Letter-spacing-0);
}

/* Los nombres de las tarjetas de profesorado y relacionados: Global-h3, como
   el resto de titulos de tarjeta. style.css los dejaba en 25px por una regla
   sobre .mont, la clase de la fuente antigua. */
#Content.Curso div.meta_profe h4,
#Content.Curso div.meta_relacionados h4 {
  font-family: var(--Font-Family-Primary);
  font-size: var(--Font-Size-29);
  font-weight: var(--Font-Weight-400);
  line-height: var(--Font-Line-height-110);
  letter-spacing: var(--Font-Letter-spacing-2);
}

/* --------------------------------------------------------------------------
 * CABECERA
 *
 * Lamina del color del area, dentro del margen de pagina y con las esquinas
 * del resto de superficies grandes. Dos columnas del 40 por cien: a la
 * izquierda el titulo con las certificaciones al pie; a la derecha el indice y
 * los botones, tambien al pie. Las dos columnas se estiran a la altura de la
 * lamina y es eso lo que lleva sus pies a la misma linea.
 *
 * SIN ALTO MINIMO (Eduardo, 16/09/2026). Tuvo 90vh y luego 80: la lamina se
 * estiraba a la pantalla y, como la columna de la izquierda —titulo y
 * certificaciones— es mucho mas corta que la de la derecha —indice y botones—,
 * dentro quedaba un agujero. Medido en el Global Master a 900 de alto: 624px de
 * lamina para 531 de contenido, y el hueco crecia con la pantalla (en un
 * 1080p, 80vh son 864).
 *
 * Ahora la altura la da el contenido, en escritorio igual que en tableta. Sigue
 * quedando holgura en la columna izquierda, pero ya no la inventa el CSS: es
 * que el indice y los botones ocupan mas que el titulo. Esa se la lleva el
 * margen automatico de las certificaciones, que las deja al pie.
 *
 * Y va despegada de la barra por el espacio titulo-contenido.
 * -------------------------------------------------------------------------- */

.Curso-cabecera {
  display: grid;
  grid-template-columns: 40% 40%;
  justify-content: space-between;
  align-items: stretch;
  box-sizing: border-box;
  width: calc(100% - var(--Global-Margen-Pagina) * 2);
  margin: var(--Global-Espacio-TituloContenido) auto 0;
  /*
   * EL MISMO AIRE POR LOS CUATRO LADOS (Eduardo, 16/09/2026).
   *
   * Arriba llevaba `--Global-Espacio-Superior`, que no es un valor fijo sino
   * una rampa —48px en escritorio, 32 en tableta, 24 en el teléfono—, mientras
   * los costados y el pie iban al margen de página. O sea que el título se
   * separaba del borde MÁS DEL DOBLE que el resto del contenido, y encima una
   * cantidad distinta en cada ancho. Ahora es el margen de página en los cuatro
   * lados: un valor, el mismo en todas las pantallas.
   */
  padding: var(--Global-Margen-Pagina);
  background-color: var(--Curso-Color-Area, var(--Global-Color-Grey));
  border-radius: var(--Global-Radio-Panel);
  overflow: hidden;
}

.Curso-cabecera-principal {
  display: flex;
  flex-direction: column;
}

/*
 * Las certificaciones, al pie de la columna.
 *
 * Estuvieron un rato pegadas al título (Eduardo, 16/09/2026) para cerrar el
 * hueco que quedaba encima. No era el sitio: el hueco no desaparecía, se
 * mudaba debajo —medido, 222px— y además se perdía la línea que compartían con
 * los botones de la derecha. Lo que sobraba de verdad era el `min-height` de la
 * lámina, y eso es lo que se quitó.
 */
.Curso-cabecera-info {
  margin-top: auto;
}

.Curso-cabecera-lateral {
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
}

/*
 * El titulo se sirve al tamano y peso del h2: es la misma excepcion registrada
 * en cei-tokens.css que .Global-h1 (Figma da Size-95 y en la web se ve enorme
 * dentro de una columna). Interlineado 100% y tracking -2%, los del estilo.
 */
#Content.Curso h1.sang {
  font-family: var(--Font-Family-Primary);
  font-size: var(--Font-Size-h1-temporal);
  font-weight: var(--Font-Weight-h2-temporal);
  line-height: var(--Font-Line-height-100);
  letter-spacing: var(--Font-Letter-spacing-2);
  margin: 0 0 var(--Global-Espacio-TituloContenido);
}

/* La sede bajo el titulo («Madrid», «Online»): estilo Global-h3. */
.ubicacion_h1 {
  font-family: var(--Font-Family-Primary);
  font-size: var(--Font-Size-29);
  font-weight: var(--Font-Weight-400);
  line-height: var(--Font-Line-height-110);
  letter-spacing: var(--Font-Letter-spacing-2);
}

/*
 * Las certificaciones son letra de apoyo: Global-p--small (Size-14 con su
 * tracking). style.css ya lo decia con `#Content .certificaciones-wrapper p`,
 * pero la regla general de parrafo de esta hoja (#Content.Curso p, misma
 * especificidad y posterior) la pisaba y salian a 19px; aqui se repite con la
 * clase de la ficha para que gane.
 */
#Content.Curso .certificaciones-wrapper p,
#Content.Curso .certificaciones-wrapper a {
  font-size: var(--Font-Size-14);
  line-height: normal;
  letter-spacing: var(--Font-Letter-spacing-2);
}

#Content.Curso .certificaciones-wrapper p {
  margin: 0 0 var(--Global-Espacio-TituloContenido);
}

/*
 * EL ULTIMO ES EL <li>, NO EL <p> (Eduardo, 15/09/2026). Desde que la lista es
 * <ul><li><p>, cada parrafo es hijo unico de su <li> y por tanto :last-child
 * siempre: con la regla anterior se quedaban los tres sin separacion.
 */
#Content.Curso .certificaciones-wrapper > li:last-child p {
  margin-bottom: 0;
}

/*
 * Y la lista, sin lo que el tema le pone a cualquier <ul> —punto, sangria y
 * margenes—: aqui son lineas de texto, no una lista con vinetas.
 */
#Content.Curso ul.certificaciones-wrapper {
  margin: 0;
  padding: 0;
  list-style: none;
}

#Content.Curso .certificaciones-wrapper > li {
  margin: 0;
  padding: 0;
  list-style: none;
}

#Content.Curso .certificaciones-wrapper > li::before,
#Content.Curso .certificaciones-wrapper > li::marker {
  content: none;
}

/*
 * El logo de la marca delante de cada certificacion (Eduardo, 06/09/2026): los
 * mismos SVG que las pastillas del menu, en negro con el mismo filtro que alli
 * y a la altura de la letra. style.css pone a todo <img> width: 100% y
 * display: block; aqui vuelve a ser una imagen en linea.
 */
#Content.Curso .Certificacion-logo {
  display: inline-block;
  width: auto;
  height: 1em;
  margin-right: 0.5em;
  vertical-align: -0.125em;
  object-fit: contain;
  filter: brightness(0);
}

/* Indice de secciones: una linea por entrada, con su filete. */
#Content.Curso .Curso-indice p {
  margin: 0 0 8px;
  padding-bottom: 8px;
  border-bottom: 1px solid var(--Global-Color-Black);
}

#Content.Curso .Curso-indice a {
  color: var(--Global-Color-Black);
  text-decoration: none;
}

/*
 * El bloque de botones. Los botones en si son el boton compartido de
 * css/cei-componentes.css; aqui solo va el apilado.
 */
.botones_curso {
  margin-top: 40px;
}

.botones_curso a[href] {
  margin-bottom: 10px;
}

.botones_curso a[href]:last-child {
  margin-bottom: 0;
}

/* El icono de descarga del programa (Tabler), en linea con el texto; sin el
   relleno que el reset svg de style.css pone a todo <svg>. */
#Content.Curso .Curso-boton-icono {
  display: inline-flex;
  flex: 0 0 auto;
}

#Content.Curso .Curso-boton-icono svg {
  display: block;
  width: 20px;
  height: 20px;
  fill: none;
}

#Content.Curso .Curso-boton-icono svg * {
  fill: none;
}

/*
 * «Matricúlate», en negro (Eduardo, 07/09/2026): en la cabecera y en la barra
 * resumen; el de visado sigue en contorno. Al pasar el raton se invierte.
 * El color lleva !important porque style.css pinta de negro, tambien con
 * !important, los enlaces de la cabecera (.info-cabecera) y el hover de
 * .botones_curso de esta hoja pone el texto en blanco.
 */
#Content.Curso .Curso-cta a.matriculate:not(.matriculate--visado),
#Content.Curso .Curso-resumen-boton {
  border-color: var(--Global-Color-Black);
  background-color: var(--Global-Color-Black);
  color: var(--Global-Color-White) !important;
}

#Content.Curso .Curso-cta a.matriculate:not(.matriculate--visado):hover,
#Content.Curso .Curso-resumen-boton:hover {
  background-color: transparent;
  color: var(--Global-Color-Black) !important;
}

/*
 * Con visado, «Matricúlate» y «Matricúlate con visado» van en dos columnas
 * (Eduardo, 07/09/2026) y el programa debajo, a todo el ancho. El hueco entre
 * botones es el mismo que llevan apilados (10px).
 */
.Curso-cta--visado {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}

.Curso-cta--visado a[href] {
  margin-bottom: 0;
}

.Curso-cta--visado a[href]:not(.matriculate) {
  grid-column: 1 / -1;
}

/* Selector de sede: Madrid · Sevilla · Valencia · Online, dos por fila, debajo
   de las certificaciones (Eduardo, 06/09/2026: antes iba encima). */
.botones_seo_localizaciones {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  flex-wrap: wrap;
  margin-top: var(--Global-Espacio-TituloContenido);
}

.botones_seo_localizaciones > a[href] {
  position: relative; /* para el check de la sede actual */
  width: calc(50% - 5px);
  margin-bottom: 10px;
}

/*
 * La sede de la ficha lleva su nombre como clase y se distingue por un check a
 * la derecha, centrado en la altura real del boton. Ya no sale rellena
 * (Eduardo, 07/09/2026: el relleno negro es de las llamadas a la accion), asi
 * que el check —el SVG blanco de siempre— se pinta en negro con un filtro y
 * vuelve a blanco cuando el boton se rellena al pasar el raton.
 */
.botones_seo_localizaciones > a[href].Madrid::after,
.botones_seo_localizaciones > a[href].Sevilla::after,
.botones_seo_localizaciones > a[href].Valencia::after,
.botones_seo_localizaciones > a[href].Online::after {
  content: '';
  position: absolute;
  right: 25px;
  top: 50%;
  width: 27px;
  height: 27px;
  transform: translateY(-50%);
  background: url(../../../../uploads/check-blanco.svg) center / contain no-repeat;
  filter: brightness(0);
}

.botones_seo_localizaciones > a[href].Madrid:hover::after,
.botones_seo_localizaciones > a[href].Sevilla:hover::after,
.botones_seo_localizaciones > a[href].Valencia:hover::after,
.botones_seo_localizaciones > a[href].Online:hover::after {
  filter: none;
}

/* --------------------------------------------------------------------------
 * BARRA RESUMEN (Figma 370-4623)
 *
 *   <div class="Curso-resumen">                 lamina negra, pegajosa bajo la barra
 *     <ul class="Curso-resumen-datos">           cinco datos con icono, etiqueta y valor
 *     <a class="Curso-resumen-boton">            Matriculate, en blanco
 *
 * Es el ultimo elemento de la ficha y se queda pegada al pie de la ventana
 * mientras dura la ficha (Eduardo, 07/09/2026; antes iba bajo la barra de
 * navegacion). Sustituye a la barra fija de movil «Solicita mas informacion»,
 * que ya no se pinta. Del color del area, solido (Eduardo, 07/09/2026: probo
 * el vidrio de la barra de navegacion y lo descarto). Todo en la letra pequeña
 * del sistema; los datos se separan con un filete; en movil la fila se
 * desplaza de lado.
 * -------------------------------------------------------------------------- */
/*
 * CUANTO SE LEVANTA LA BARRA DEL PIE DE LA VENTANA (Eduardo, 09/09/2026)
 *
 * En el escritorio, el margen del flotante y ya. En un telefono no: la barra
 * del navegador —la que enseña «cei.es»— se dibuja encima de los ultimos
 * pixeles de la ventana, y la barra resumen quedaba medio tapada por ella.
 * `env(safe-area-inset-bottom)` no ayuda: solo cuenta la franja del gesto del
 * sistema, no el navegador. Asi que en movil se levanta a mano.
 *
 * La variable se declara en el <body> y no en #Content porque la usa tambien la
 * burbuja de WhatsApp, que cuelga del body y no veria una variable de dentro.
 */
body:has(#Content.Curso) {
  --Curso-resumen-alzada: 0px;

  /*
   * Lo que mide la barra de alto. Se declara aqui, en el <body>, y no dentro de
   * #Content, porque quien lo necesita son los flotantes de los plugins —la
   * burbuja de WhatsApp y el boton de cookies—, que cuelgan del body y no verian
   * una variable de dentro.
   */
  --Curso-resumen-alto: 76px;

  /* Y el suelo de los flotantes: la barra, sus dos margenes y lo que se alza. */
  --Curso-flotantes-suelo: calc(
    var(--Curso-resumen-alto, 76px) + var(--Global-Flotante-margen, 20px) * 2
      + var(--Curso-resumen-alzada, 0px) + env(safe-area-inset-bottom, 0px)
  );
}

#Content.Curso .Curso-resumen {
  position: sticky;
  bottom: calc(
    var(--Global-Flotante-margen) + var(--Curso-resumen-alzada, 0px) + env(safe-area-inset-bottom, 0px)
  );
  z-index: 90; /* por encima del contenido; la barra de navegacion va a 9999 */
  display: flex;
  align-items: center;
  gap: var(--Global-Espacio-TituloContenido);
  width: calc(100% - var(--Curso-carril) * 2);
  margin: var(--Global-Espacio-Grupo) auto var(--Global-Flotante-margen);
  padding: calc(var(--Global-Espacio-TituloContenido) / 2) var(--Global-Espacio-TituloContenido);
  border-radius: var(--Global-Radio-Panel);
  background-color: var(--Curso-Color-Area, var(--Global-Color-Grey));
  color: var(--Global-Color-Black);
  /*
   * LA LETRA, AQUI Y NO EN CADA PIEZA (Eduardo, 16/09/2026).
   *
   * Era el unico texto de la ficha que no iba en Inter: las reglas de la
   * etiqueta y del valor fijan tamaño, peso y tracking, pero ninguna decia la
   * familia, asi que heredaban del <body> la pila de Betheme —Tahoma primero, y
   * en un Mac con Office esta instalada, o sea que se veia de verdad—. Va en el
   * contenedor para que lo que se añada mañana a la barra nazca ya bien.
   */
  font-family: var(--Font-Family-Primary);
}

#Content.Curso .Curso-resumen-datos {
  display: flex;
  flex: 1 1 auto;
  min-width: 0;
  margin: 0;
  padding: 0;
  list-style: none;
}

#Content.Curso .Curso-resumen-dato {
  display: flex;
  flex: 1 1 0;
  align-items: center;
  gap: calc(var(--Global-Espacio-TituloContenido) / 2);
  min-width: 0;
  margin: 0;
  padding: 0 var(--Global-Espacio-TituloContenido);
  border-left: 1px solid var(--Global-Color-Black);
  list-style: none;
}

#Content.Curso .Curso-resumen-dato:first-child {
  padding-left: 0;
  border-left: 0;
}

#Content.Curso .Curso-resumen-dato::before {
  content: none;
}

#Content.Curso .Curso-resumen-icono {
  display: flex;
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border: 1px solid var(--Global-Color-Black);
  border-radius: var(--Global-Radio-Imagen);
}

/*
 * style.css pone a todo <svg> width: 100% y fill: currentColor. Lo segundo
 * rellenaba de negro los trazos de los iconos (son de linea: solo stroke) y
 * salian como manchas. Aqui el icono mide lo suyo y no se rellena nada.
 */
#Content.Curso .Curso-resumen-icono svg {
  display: block;
  width: 20px;
  height: 20px;
  fill: none;
}

#Content.Curso .Curso-resumen-icono svg * {
  fill: none;
}

#Content.Curso .Curso-resumen-texto {
  display: flex;
  flex-direction: column;
  min-width: 0;
}

/*
 * Etiqueta y valor en la letra pequeña del sistema (Global-p--small), la
 * etiqueta tal cual se escribe —sin mayusculas— y el valor en negrita
 * (Eduardo, 07/09/2026). La negrita la da el <b> del marcado, que style.css
 * pone en semibold con !important, como el resto de los destacados de la
 * ficha; la etiqueta necesita el regular explicito porque el tema declara el
 * body entero en peso medio.
 */
#Content.Curso .Curso-resumen-etiqueta,
#Content.Curso .Curso-resumen-valor {
  color: inherit;
  font-size: var(--Font-Size-14);
  letter-spacing: var(--Font-Letter-spacing-2);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

#Content.Curso .Curso-resumen-etiqueta {
  font-weight: var(--Font-Weight-400);
}

/*
 * EL VALOR, ENTERO (Eduardo, 28/09/2026).
 *
 * Iba en una sola línea con puntos suspensivos y en tableta la barra cortaba
 * justo lo que viene a decir: a 800px, «360 horas · 6-…» y «13 de octubre…»
 * (medido en el Máster en Marketing Digital e IA). La duración puede llevar
 * tres partes —«360 horas · 6-7 meses · 3h/día»—, así que en otras fichas
 * pasaba también en portátil. Ahora el valor salta a una segunda línea antes
 * que cortarse. La barra solo crece cuando hace falta (de 72 a 84px) y los
 * flotantes siguen por encima: se colocan con 76 más dos márgenes de 20
 * (116px del pie) y la barra, con dos líneas, llega a 104.
 */
#Content.Curso .Curso-resumen-valor {
  white-space: normal;
  overflow: visible;
  text-overflow: clip;
  line-height: 1.25;
}

/* En tableta, sin iconos: son decorativos —como en el teléfono, donde ya se
   quitan— y sus 40px más el hueco dejaban cada dato en 76px de texto. */
@media (min-width: 768px) and (max-width: 1023.98px) {
  #Content.Curso .Curso-resumen-icono {
    display: none;
  }
}

/* El boton es la pastilla compartida (Global-boton), como los de la cabecera. */
#Content.Curso .Curso-resumen-boton {
  display: inline-flex;
  flex: 0 0 auto;
}

/*
 * La barra no se ve al cargar: entra cuando la lamina de la cabecera esta a
 * punto de desaparecer por arriba (Eduardo, 07/09/2026). Sin JavaScript: la
 * cabecera declara una linea de tiempo de vista con nombre y la barra la usa
 * para su animacion; `timeline-scope` en el contenedor es lo que permite que
 * una hermana la vea.
 *
 * Todo dentro de @supports, y esto no es adorno: en un navegador sin lineas de
 * tiempo con nombre (Firefox, Safari) `animation-timeline: --nombre` no resuelve
 * a nada, la animacion se queda en su fotograma inicial y la barra no
 * apareceria NUNCA. Con la guarda, ahi la barra se ve desde el principio, que
 * es la degradacion correcta para un boton de matricula.
 *
 * El tramo: `exit` va de «el pie de la cabecera toca el pie de la ventana» a
 * «el pie de la cabecera toca el techo de la ventana». Del 75% al 95% de ese
 * recorrido es justo el final, cuando de la lamina ya casi no queda nada.
 */
/*
 * EL BOTON DE LA BARRA, SEGUN EL ANCHO (Eduardo, 08/09/2026)
 *
 * «Matricúlate» se ve a cualquier ancho. Del 08/09 al 28/09 el telefono lo
 * cambiaba por «Solicita más información», con la idea de que la matricula no
 * se decide desde el movil. El 28/09 volvio «Matricúlate» (Eduardo, con el
 * equipo de marketing): al lado de «Preguntar por WhatsApp», pedir informacion
 * era pedir lo mismo por otro canal. El boton de informacion ya no se imprime
 * (render.php, cei_master_resumen_html).
 */
/* El de WhatsApp es solo del telefono: en escritorio esta la burbuja. */
#Content.Curso .Curso-resumen-boton--whatsapp {
  display: none;
}

@supports (timeline-scope: --cei) and (animation-range: exit 75% exit 95%) {
  @keyframes ceiResumenEntra {
    from {
      visibility: hidden;
      opacity: 0;
      transform: translateY(calc(100% + var(--Global-Flotante-margen)));
    }

    to {
      visibility: visible;
      opacity: 1;
      transform: translateY(0);
    }
  }

  #Content.Curso {
    timeline-scope: --Curso-cabecera;
  }

  #Content.Curso .Curso-cabecera {
    view-timeline-name: --Curso-cabecera;
  }

  #Content.Curso .Curso-resumen {
    animation: ceiResumenEntra 1s linear both;
    animation-timeline: --Curso-cabecera;
    animation-range: exit 75% exit 95%;
  }
}

/*
 * LOS DOS FLOTANTES, POR ENCIMA DE LA BARRA (Eduardo, 09/09/2026)
 *
 * En las esquinas de abajo viven dos botones de plugins: la burbuja de WhatsApp
 * a la derecha (`cei-whatsapp-chat`) y el de volver a las cookies a la
 * izquierda (CookieYes). Los dos se anclan al pie de la ventana, que es
 * exactamente donde esta la barra resumen, asi que en las fichas suben por
 * encima de ella. Pasa igual en el escritorio, no solo en el movil.
 *
 * La regla anterior apuntaba a `.qlwapp__container .qlwapp__button`, de QLWAPP,
 * que ya no esta instalado. Y al reescribirla para el plugin nuevo se colo un
 * fallo peor: usaba `var(--Curso-resumen-hueco)` SIN alternativa, y esa variable
 * se declara dentro de #Content, donde la burbuja no llega. Un var() que no
 * resuelve y no trae alternativa invalida la declaracion entera, asi que
 * `bottom` volvia a `auto` y la burbuja se iba a su posicion estatica: 21.000px
 * por debajo del pie. Desaparecida. De ahi que aqui TODAS las variables lleven
 * su valor de reserva.
 */
body:has(#Content.Curso) .ceiwa.ceiwa--bottom-right,
body:has(#Content.Curso) .cky-btn-revisit-wrapper.cky-revisit-bottom-left {
  /* El !important es por el de cookies: CookieYes clava su
     `.cky-revisit-bottom-left { bottom: 20px !important }` y a un !important
     solo se le gana con otro. La burbuja de WhatsApp no lo necesitaria. */
  bottom: var(--Curso-flotantes-suelo, 116px) !important;
}

/* --------------------------------------------------------------------------
 * CUERPO
 * -------------------------------------------------------------------------- */

.Curso-cuerpo {
  padding: var(--Global-Espacio-Grupo) var(--Curso-carril) 0;
}

/* El ritmo: entre secciones, el espacio de grupo; del titulo a su contenido,
   el de titulo-contenido. Los mismos dos valores que la home y las areas. */
#Content.Curso .Curso-seccion {
  margin-bottom: var(--Global-Espacio-Grupo);
}

#Content.Curso .Curso-seccion-titulo {
  margin-bottom: var(--Global-Espacio-TituloContenido);
}

#Content.Curso .Curso-seccion-titulo a {
  color: inherit;
  text-decoration: none;
}

/*
 * La linea sobre el titulo de los bloques de diploma y de certificaciones
 * (Eduardo, 14/09/2026): «Posibilidad pagando la tasa de...». Va en gris para
 * que se lea antes que el titulo sin competir con el.
 *
 * Los valores de Global-h4 se repiten aqui aunque el marcado ya lleve la clase:
 * la regla general de parrafo de esta hoja (#Content.Curso p) tiene mas
 * especificidad que una clase suelta y va despues, asi que la dejaria en 19px.
 * Es el mismo caso que las certificaciones de la cabecera.
 */
/*
 * El antetítulo, al tamaño más pequeño del sistema (Eduardo, 16/09/2026).
 *
 * Iba a Size-20 —el mismo cuerpo que un párrafo— y competía con el título que
 * tiene justo debajo: eran dos líneas de peso parecido para una sola idea.
 * A Size-14 y en gris hace lo que tiene que hacer, que es situar y no anunciar.
 * El gris ya lo tenía; lo que cambia es el tamaño.
 */
#Content.Curso .Curso-seccion-ante {
  font-size: var(--Font-Size-14);
  font-weight: var(--Font-Weight-400);
  line-height: normal;
  letter-spacing: var(--Font-Letter-spacing-2);
  color: var(--Global-Color-Grey-Secondary);
  margin: 0 0 4px;
}

/* Una seccion que es un bloque del sistema (la lamina de Fundae): sin titulo
   propio de seccion, el bloque trae el suyo. La frase en italica es
   Global-p--italic, el unico estilo con peso 500; la regla general de parrafo
   de arriba (#Content.Curso p) la dejaria en 400 y sin tracking. */
#Content.Curso .Curso-seccion--bloque > .Fundae,
#Content.Curso .Curso-seccion--bloque > .Precio,
#Content.Curso .Curso-seccion--bloque > .Empleo,
#Content.Curso .Curso-seccion--bloque > .multimedia-cursos {
  margin: 0;
}

/*
 * Dos secciones lado a lado (certificaciones y diploma, Eduardo, 07/09/2026):
 * cada columna con su titulo y su cuerpo; en movil, una debajo de otra.
 */
/* Cuantas columnas lo dice el marcado (--columnas, en render.php): dos casi
   siempre, tres cuando la ficha ofrece UDIMA y Sabal. */
#Content.Curso .Curso-seccion--columnas {
  display: grid;
  grid-template-columns: repeat(var(--columnas, 2), minmax(0, 1fr));
  gap: var(--Global-Espacio-Grupo);
}

/* Tres columnas solo caben en pantalla ancha; por debajo, dos. */
@media (max-width: 1199.98px) {
  #Content.Curso .Curso-seccion--columnas {
    grid-template-columns: repeat(min(var(--columnas, 2), 2), minmax(0, 1fr));
  }
}

/*
 * EN TABLETA, CERTIFICACIONES A TODO EL ANCHO (Eduardo, 16/09/2026)
 *
 * Con tres columnas —las seis fichas que ofrecen UDIMA y Sabal— la rejilla de
 * dos dejaba certificaciones y UDIMA arriba y Sabal SOLO abajo, a media
 * anchura y con medio renglon de blanco al lado. Medido a 1000px: 431+431 en
 * la primera fila y 431 suelto en la segunda.
 *
 * Asi que certificaciones se queda la fila entera y los dos diplomas se
 * emparejan debajo, que es donde la comparacion tiene sentido: son la misma
 * cosa contada por dos universidades.
 *
 * Solo cuando hay TRES columnas. Con dos (certificaciones + una universidad) no
 * hay nada que emparejar y estirar la primera dejaria a la otra sola y a medias,
 * que es justo lo que venimos a quitar. De eso se encarga el :has().
 */
@media (min-width: 768px) and (max-width: 1199.98px) {
  #Content.Curso .Curso-seccion--columnas:has(> .Curso-columna:nth-child(3)) > .Curso-columna:first-child {
    grid-column: 1 / -1;
  }
}

/*
 * El bloque de empleo dentro de la ficha: las reglas generales de esta hoja y
 * de style.css (parrafos con margen, enlaces en bloque, viñetas en todo <ul>
 * de .seciones_cursos) no valen para sus piezas.
 */
#Content.Curso .Empleo p {
  margin: 0;
}

/* El dato en italica es letra pequeña; la regla general de parrafo lo subia a Size-19. */
#Content.Curso .Empleo-dato {
  font-size: var(--Font-Size-14);
  letter-spacing: var(--Font-Letter-spacing-2);
}

#Content.Curso .Empleo-boton {
  display: inline-flex;
}

#Content.Curso .Empleo-empresasLista,
#Content.Curso .Empleo-empresasLista > li {
  margin: 0;
  padding: 0;
  list-style: none;
}

#Content.Curso .Empleo-empresasLista > li::before {
  content: none;
}

#Content.Curso .Empleo-empresasLista {
  padding-right: calc(var(--Global-Espacio-TituloContenido) / 2);
}

/*
 * Dentro de la lamina negra del precio los enlaces son blancos. style.css
 * pinta de negro con !important todos los enlaces de una seccion, asi que
 * aqui hace falta el mismo peso: texto blanco, y en el hover de los botones
 * invertidos, negro sobre el relleno blanco.
 */
#Content.Curso .Precio a {
  color: var(--Global-Color-White) !important;
}

#Content.Curso .Precio .Global-boton--invertido:hover {
  color: var(--Global-Color-Black) !important;
}

/* Mas especifico que el blanco del hover general de .seciones_cursos a.Global-boton (1,4,1),
   que si no dejaba el texto blanco sobre el fondo blanco del hover. */
#Content.Curso .seciones_cursos .Precio a.Global-boton--destacado:hover {
  color: var(--Global-Destacado) !important;
}

#Content.Curso .Precio .Global-boton {
  display: inline-flex;
}

#Content.Curso .Fundae-claim {
  font-weight: var(--Font-Weight-500);
  letter-spacing: var(--Font-Letter-spacing-2);
}

/* `.seciones_cursos a { display: inline }` en style.css alcanzaria al boton del bloque. */
#Content.Curso .Fundae-boton {
  display: inline-flex;
}

/* El h4 «Financiacion» bajo el precio, al token de 20 (antes 2rem = 22px). */
h4.financiacion_curso {
  font-family: var(--Font-Family-Primary);
  font-size: var(--Font-Size-20);
  font-weight: var(--Font-Weight-400);
  line-height: normal;
  letter-spacing: var(--Font-Letter-spacing-2);
  margin: var(--Global-Espacio-TituloContenido) 0;
}

/*
 * Los botones del cuerpo (.boton_cursos) van varios en la misma linea en
 * «Dudas al orientar tu futuro». El boton compartido es display:flex, que los
 * apilaria; inline-flex los deja en fila y conserva la pastilla, y centra el
 * texto (a bloque, como los dejaba `#precio .boton_cursos` en style.css, el
 * texto se iba a la izquierda de la pastilla).
 */
#Content.Curso .boton_cursos {
  display: inline-flex;
  justify-content: center;
  text-align: center;
}

/*
 * Al pasar el raton, texto blanco sobre el negro del boton. El boton
 * compartido ya lo dice, pero style.css pinta de negro con !important todos
 * los enlaces de una seccion (`.seciones_cursos a { color: var(--Global-Color-Black) !important }`)
 * y eso se lleva tambien al hover: negro sobre negro, texto invisible. Contra
 * un !important solo vale otro; esta es la unica excepcion de la hoja.
 *
 * LAS VARIANTES QUEDAN FUERA (Eduardo, 08/09/2026). Su hover NO se rellena de
 * negro: el invertido se rellena de blanco y el destacado del color destacado,
 * asi que el texto blanco los dejaba ilegibles —«Ver todos los descuentos» se
 * veia como una pastilla blanca vacia—. Excluidas de esta regla, el negro con
 * !important de style.css les viene bien al invertido; el destacado tiene su
 * propia regla justo debajo.
 */
#Content.Curso .seciones_cursos a.boton_cursos:hover,
#Content.Curso .seciones_cursos a.Global-boton:not(.Global-boton--invertido):not(.Global-boton--destacado):hover,
#Content.Curso .botones_curso a[href]:hover,
#Content.Curso .botones_seo_localizaciones > a[href]:hover {
  color: var(--Global-Color-White) !important;
}

/*
 * «Ver la titulación en la web de UDIMA»: un enlace de texto y no un segundo
 * boton (Eduardo, 14/09/2026); dos pastillas seguidas competian entre si. Va
 * debajo del boton, en su propia linea, subrayado y con la misma flecha externa
 * que el CTA del menu: el glifo ↓ girado -135° para que apunte ↗ (variante
 * textual &#xFE0E; y familia forzada, que si no el sistema lo sustituye por el
 * emoji). El display:inline-block gana a `.seciones_cursos a { display: inline }`
 * de style.css y mantiene la flecha pegada al texto.
 */
#Content.Curso .Curso-enlaceExterno-linea {
  margin: var(--Global-Espacio-TituloContenido) 0 0;
}

#Content.Curso .seciones_cursos a.Curso-enlaceExterno {
  display: inline-block;
  text-decoration: underline;
  text-underline-offset: 3px;
}

#Content.Curso .Curso-enlaceExterno-flecha {
  display: inline-block;
  margin-left: 4px;
  rotate: -135deg;
  scale: 0.9;
  font-family: var(--Font-Family-Primary);
  font-weight: var(--Font-Weight-400);
}

/*
 * Datos basicos y preguntas frecuentes: la rejilla a hueso, sin lamina ni
 * borde (Eduardo, 06/09/2026), tres columnas en escritorio y tableta y una en
 * movil, con los datos siempre alineados desde la izquierda, haya los que haya.
 * Cada celda lleva un circulo delante del titulo, como en el diseño: es un
 * ::before del titulo, de media letra suya de diametro y centrado en su primera
 * linea (1lh), y la celda se sangra lo que ocupa el circulo mas medio espacio
 * titulo-contenido, para que el texto quede alineado con el titulo.
 */
#Content.Curso .borde_caja {
  border: 0;
  border-radius: 0;
  padding: 0;
}

#Content.Curso .info_caja > div {
  --Celda-circulo: calc(var(--Font-Size-29) / 2);
  --Celda-hueco: calc(var(--Global-Espacio-TituloContenido) / 2);
  padding-left: calc(var(--Celda-circulo) + var(--Celda-hueco));
}

#Content.Curso .info_caja h4.titulo_datos {
  position: relative;
}

#Content.Curso .info_caja h4.titulo_datos::before {
  content: '';
  position: absolute;
  left: calc(-1 * (var(--Celda-circulo) + var(--Celda-hueco)));
  top: 0.3em; /* por si el navegador no entiende lh */
  top: calc((1lh - var(--Celda-circulo)) / 2);
  width: var(--Celda-circulo);
  height: var(--Celda-circulo);
  border: 1px solid var(--Global-Color-Black);
  border-radius: 50%;
}

div.info_caja {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--Global-Espacio-TituloContenido) var(--Global-Espacio-Grupo);
}

/*
 * Las preguntas frecuentes van en esta misma rejilla, con la pregunta como
 * titulo de celda. style.css baja a minusculas todo h4.titulo_datos (los datos
 * vienen en mayusculas del editor); una pregunta no: «Madrid» y «Adobe» tienen
 * que seguir como estan.
 */
#Content.Curso h4.Faq-pregunta,
#Content.Curso h4.Faq-pregunta::first-letter {
  text-transform: none;
}

/* La frase de la ficha bajo el precio, en la letra pequena del sistema. */
#Content.Curso .Dato-precio-claim {
  font-size: var(--Font-Size-14);
  line-height: normal;
  letter-spacing: var(--Font-Letter-spacing-2);
}

/* Los enlaces dentro de una celda («más abajo», «Abierto plazo de matriculaciones»), subrayados. */
#Content.Curso .info_caja .Dato a {
  text-decoration: underline;
}

/*
 * MULTIMEDIA: SOLO EL CARRUSEL, Y A TODO EL ANCHO DE SU COLUMNA
 * (Eduardo, 16/09/2026).
 *
 * El bloque era video + carrusel, repartidos 44/56 dentro de una sección a todo
 * el ancho. Ahora el vídeo no está y la galería vive en la columna estrecha, al
 * lado del contenido del curso: ese `width: calc(56% - 30px)` heredado la
 * dejaba en 266 px de los 528 de la columna, con la mitad del hueco vacío —que
 * es justo lo que se veía—.
 *
 * `.video_cursos` ya no lo pinta nadie; su regla se queda por si alguna página
 * guardada en la base de datos todavía trae ese marcado.
 */
.slider_cursos.slider_cursos {
  width: 100%;
}

#Content.Curso .multimedia-cursos {
  /* El relleno de 45px de arriba era para separarlo del bloque anterior cuando
     era una sección suya; dentro de una columna ya lo pone la sección. */
  padding-top: 0;
}

.video_cursos {
  width: calc(44% - 30px);
}

.video_cursos a,
.video_cursos picture,
.video_cursos img {
  display: block;
  width: 100%;
}

.video_cursos img {
  height: auto;
  border-radius: var(--Global-Radio-Panel);
}

.slider_cursos {
  position: relative;
  width: calc(56% - 30px);
  overflow: hidden;
  border-radius: var(--Global-Radio-Panel);
}

/* El «3 / 19» bajo el carrusel. Swiper le pone la clase en tiempo de ejecucion. */
.swiper-pagination-fraction {
  font-family: var(--Font-Family-Primary);
  font-size: var(--Font-Size-20);
  font-weight: var(--Font-Weight-400);
  margin-top: var(--Global-Espacio-TituloContenido);
}

/*
 * Profesorado: rejilla de verdad. Las tarjetas .profe traen de style.css un
 * ancho calculado y margenes derechos por posicion, de cuando la rejilla era
 * flex; aqui se anulan y las columnas las da la rejilla. El id en el selector
 * es para pasar por delante de esas reglas, que llevan #profesorado.
 */
#Content.Curso div.profe_grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--Global-Espacio-Grupo) 40px;
  justify-content: start;
}

#Content.Curso div.profe {
  width: auto;
  margin: 0;
}

/* --------------------------------------------------------------------------
 * ESTUDIOS RELACIONADOS
 *
 * La rejilla va sobre una lamina del color del area, la misma variable que
 * pinta la cabecera y la barra fija; una tarjeta por columna, cuatro en
 * escritorio.
 * -------------------------------------------------------------------------- */

.Curso-relacionados {
  padding: 0 var(--Curso-carril);
  margin-bottom: var(--Global-Espacio-Grupo);
}

#Content.Curso .relacionados_grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--Global-Espacio-TituloContenido);
  align-items: stretch;
  padding: var(--Global-Espacio-TituloContenido);
  background-color: var(--Curso-Color-Area, var(--Global-Color-Grey));
  border-radius: var(--Global-Radio-Panel);
}

#Content.Curso div.relacionado {
  display: flex;
  width: auto;
  margin: 0;
}

#Content.Curso .relacionado > a {
  display: flex;
  flex-direction: column;
  width: 100%;
}

#Content.Curso .mini_relacionados img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: var(--Global-Radio-Imagen);
}

.cursos_relacionados *::after {
  margin: 0;
  padding: 0;
  height: 0;
}

/* --------------------------------------------------------------------------
 * BARRA FIJA DE MOVIL («Solicita mas informacion»)
 *
 * Solo por debajo de 1025. El color es el del area, por la misma variable que
 * la cabecera y los relacionados.
 * -------------------------------------------------------------------------- */


/* --------------------------------------------------------------------------
 * RESPONSIVE
 *
 * Dos cortes propios de esta maqueta: 1025, donde la cabecera se apila, y 720,
 * donde la rejilla de datos basicos (y la de preguntas frecuentes) pasa a una
 * columna. Las rejillas de tarjetas conservan los cortes que ya tenian
 * (1160 / 905 / 520).
 * -------------------------------------------------------------------------- */

@media only screen and (max-width: 1160px) {
  #Content.Curso div.profe_grid,
  #Content.Curso .relacionados_grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

@media only screen and (max-width: 1025px) {
  /*
   * La cabecera, apilada. Las columnas dejan de existir (display: contents) y
   * sus piezas pasan a ser hijas directas de la lamina: el titulo arriba y,
   * pegados al pie por el margen automatico de las certificaciones,
   * certificaciones, selector de sede y botones. El indice no cabe: en movil
   * ya lo hace el desplegable de las secciones. La altura la da el contenido
   * (en telefono, mas abajo, la pantalla entera).
   */
  .Curso-cabecera {
    display: flex;
    flex-direction: column;
    min-height: 0; /* en tableta, lo que mida el contenido */
    padding: var(--Global-Flotante-margen); /* los cuatro lados iguales, como en escritorio */
  }

  .Curso-cabecera-principal,
  .Curso-cabecera-lateral,
  .Curso-cabecera-info {
    display: contents;
  }

  /* Con #Content.Curso delante para ganarle al reset de la lista de arriba
     (#Content.Curso ul.certificaciones-wrapper { margin: 0 }), que si no se
     lleva por delante este margin-top:auto y el bloque deja de bajar al pie de
     la cabecera en movil (Eduardo, 15/09/2026). */
  #Content.Curso .Curso-cabecera .certificaciones-wrapper {
    order: 3;
    margin-top: auto;
  }

  .Curso-cabecera .botones_seo_localizaciones {
    order: 4;
    margin-top: var(--Global-Espacio-TituloContenido);
    margin-bottom: 0;
  }

  .Curso-cabecera .botones_curso {
    order: 5;
    margin-top: var(--Global-Espacio-TituloContenido);
  }

  .Curso-indice {
    display: none;
  }

  .botones_curso a[href] {
    margin-bottom: 10px;
  }

  .botones_seo_localizaciones > a[href] {
    width: calc(25% - 5px);
    margin-bottom: 0;
  }

  .Curso-cuerpo {
    padding-top: var(--Global-Espacio-Superior);
  }

  /* El rival lleva !important en style.css (`#Content.blanco_completo p` en este
     mismo corte); dentro de la caja el hueco ya lo da la rejilla. */
  #Content.Curso div.info_caja > div > p {
    margin-bottom: 0 !important;
  }

  .video_cursos {
    width: calc(44% - 10px);
  }

  .slider_cursos {
    width: calc(56% - 10px);
  }
}

@media only screen and (max-width: 767.98px) {
  /* En el telefono la barra lleva «Matricúlate» y, debajo, «Preguntar por
     WhatsApp» (Eduardo, 28/09/2026). Hasta entonces escondia «Matricúlate» y
     enseñaba «Solicita más información»: ver «EL BOTON DE LA BARRA». */

  /*
   * Solo en telefono la cabecera ocupa la pantalla entera menos la barra de
   * navegacion, su propio margen superior y el hueco de la barra resumen, con
   * el titulo arriba y los botones pegados al pie. En tableta la altura la da
   * el contenido: con la pantalla entera quedaban 600px vacios entre el titulo
   * y las certificaciones.
   */
  .Curso-cabecera {
    min-height: calc(100vh - var(--Global-Alto-Cabecera) - var(--Global-Espacio-TituloContenido) - var(--Curso-resumen-hueco) - var(--Global-Flotante-margen));
  }

  @supports (height: 100dvh) {
    .Curso-cabecera {
      min-height: calc(100dvh - var(--Global-Alto-Cabecera) - var(--Global-Espacio-TituloContenido) - var(--Curso-resumen-hueco) - var(--Global-Flotante-margen));
    }
  }
}

@media only screen and (max-width: 905px) {
  /* Video y carrusel, uno bajo otro. */
  .video_cursos,
  .slider_cursos {
    width: 100%;
    padding: 0 !important;
  }

  .video_cursos {
    margin-bottom: var(--Global-Espacio-TituloContenido);
  }

  #Content.Curso div.profe_grid,
  #Content.Curso .relacionados_grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media only screen and (max-width: 800px) {
  .botones_seo_localizaciones > a[href] {
    width: calc(50% - 5px);
    margin-bottom: 10px;
  }
}

@media only screen and (max-width: 720px) {
  /* En movil, los datos (y las preguntas frecuentes) uno debajo de otro
     (Eduardo, 06/09/2026); en tableta siguen a tres columnas. */
  div.info_caja,
  #Content.Curso .Curso-seccion--columnas {
    grid-template-columns: minmax(0, 1fr);
  }

  /*
   * LA BARRA RESUMEN EN EL TELEFONO (Eduardo, 09/09/2026)
   *
   * Antes los tres datos iban en una fila que se desplazaba de lado y el boton
   * detras. En un movil de verdad eso significaba que del boton solo se veia el
   * principio —lo tapaba la burbuja de WhatsApp— y que para llegar a el habia
   * que arrastrar la fila. Ninguna de las dos cosas se descubre sola.
   *
   * Ahora la barra se queda con lo unico que se mira de un vistazo, el precio,
   * y el boton se centra en lo que queda. La duracion y el proximo inicio no se
   * pierden: estan enteras en la rejilla de datos basicos, unos centimetros mas
   * arriba en la misma pagina.
   */
  /*
   * La alzada, declarada en los dos sitios a proposito: en el <body> la ve la
   * burbuja de WhatsApp, que cuelga de ahi, y en #Content la ve la barra aunque
   * el navegador no entienda `:has()` —antes de iOS 15.4 descarta la regla
   * entera— y en ese caso al menos la barra sube.
   */
  /*
   * La alzada vuelve a cero (Eduardo, 14/09/2026): eran 56px para no taparle la
   * burbuja de WhatsApp, y la burbuja ya no esta en el telefono —su boton vive
   * ahora dentro de la barra—. Asi la barra baja hasta su margen de siempre.
   */
  body:has(#Content.Curso),
  #Content.Curso {
    --Curso-resumen-alzada: 0px;
  }

  /* Una sola fila de botones (01/10/2026: el de WhatsApp pasa a ser un circulo
     al lado de «Matricúlate»): la barra vuelve a medir lo de un boton con su
     relleno, y los flotantes que queden (el orbe de CEI AI) cuentan con ello.
     Medido en la vista previa a 375px: 70,5. */
  body:has(#Content.Curso) {
    --Curso-resumen-alto: 72px;
  }

  /*
   * La burbuja de WhatsApp, fuera del telefono: lo que hacia —escribir al
   * asesor— lo hace ahora el boton de la barra, que se ve siempre y no tapa el
   * contenido. El orbe de CEI AI se queda: es otra cosa.
   *
   * Se esconde la burbuja y no el widget entero a proposito: hoy el boton abre
   * WhatsApp directamente (data-action="open") y el widget no tiene panel, pero
   * si algun dia se enciende el panel en los ajustes del plugin, vive dentro de
   * .ceiwa y con el contenedor oculto no habria forma de verlo.
   */
  body:has(#Content.Curso) .ceiwa:not(.ceiwa--ai) .ceiwa__toggle {
    display: none;
  }

  /*
   * Y el selector de sede tampoco se ve en el telefono: son cuatro pastillas
   * que llevan a la misma formacion en otra ciudad, una decision que no se toma
   * aqui. Sigue en su sitio en escritorio y en tableta.
   */
  #Content.Curso #campus_sedes {
    display: none;
  }

  /*
   * Dos filas, no dos columnas. En una pantalla de 390 el boton mide 220 y el
   * precio 90: puestos en fila, centrar el boton dejaba al precio en «3.30…».
   * Apilados caben los dos enteros, el boton ocupa el ancho de la barra —asi
   * queda centrado por simetria y es mas facil de acertar con el pulgar— y el
   * precio se lee entero encima.
   */
  #Content.Curso .Curso-resumen {
    display: grid;
    /* «Matricúlate» a todo lo ancho y, a su derecha, el circulo de WhatsApp
       (Eduardo, 01/10/2026; antes iban apilados en dos filas). */
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: calc(var(--Global-Espacio-TituloContenido) / 2);
    padding: calc(var(--Global-Espacio-TituloContenido) / 2) var(--Global-Espacio-TituloContenido);
  }

  /*
   * Ningun dato en la barra (Eduardo, 14/09/2026). Antes se quedaba el precio;
   * ahora la barra es solo para actuar —matricularse o preguntar por WhatsApp;
   * hasta el 28/09, pedir informacion— y el precio se lee en la rejilla de
   * datos basicos y en el bloque de precio, los dos en esta misma pagina.
   */
  #Content.Curso .Curso-resumen-datos {
    display: none;
  }

  #Content.Curso .Curso-resumen-datos {
    min-width: 0;
  }

  #Content.Curso .Curso-resumen-dato {
    padding: 0;
    border-left: 0;
  }

  /* «Precio 3.300 €» en una linea y no en dos: la barra se ahorra 20px de alto,
     que en un movil se notan. */
  #Content.Curso .Curso-resumen-texto {
    flex-direction: row;
    align-items: baseline;
    gap: calc(var(--Global-Espacio-TituloContenido) / 3);
  }

  /* El icono, fuera: es decorativo —lleva aria-hidden— y sus 40px son justo lo
     que le falta al boton para caber centrado en una pantalla de 390. */
  #Content.Curso .Curso-resumen-icono {
    display: none;
  }

  #Content.Curso .Curso-resumen-boton {
    justify-content: center;
    padding: 12px 16px;
  }

  /*
   * WhatsApp, al lado de «Matricúlate»: un circulo de 44px (el minimo tactil,
   * --Global-Flotante) en su verde con el icono de Tabler en blanco (Eduardo,
   * 01/10/2026; hasta entonces era un segundo boton con texto, debajo). El
   * texto «Preguntar por WhatsApp» sigue en el boton como aria-label; si el
   * tema no trae el SVG, el boton se pinta con el texto, como antes.
   */
  #Content.Curso .Curso-resumen-boton--whatsapp {
    display: inline-flex;
    border-color: var(--Curso-WhatsApp);
    background-color: var(--Curso-WhatsApp);
    color: var(--Global-Color-White);
    font: inherit;
    cursor: pointer;
  }

  #Content.Curso .Curso-resumen-boton--icono {
    width: var(--Global-Flotante);
    height: var(--Global-Flotante);
    padding: 0;
    border-radius: 50%;
  }

  #Content.Curso .Curso-resumen-botonIcono,
  #Content.Curso .Curso-resumen-botonIcono svg {
    display: block;
    width: var(--Curso-WhatsApp-Icono);
    height: var(--Curso-WhatsApp-Icono);
    fill: none; /* style.css rellena todos los svg; este es de trazo */
    color: inherit;
  }
}

@media only screen and (max-width: 540px) {
  /* Swiper escribe el ancho de cada slide en linea; sin !important no hay manera. */
  .swiper_master .swiper-slide {
    width: 100% !important;
  }
}

@media only screen and (max-width: 520px) {
  #Content.Curso div.profe_grid,
  #Content.Curso .relacionados_grid {
    grid-template-columns: minmax(0, 1fr);
  }
}

@media only screen and (max-width: 420px) {
  .botones_seo_localizaciones > a[href].Madrid::after,
  .botones_seo_localizaciones > a[href].Sevilla::after,
  .botones_seo_localizaciones > a[href].Valencia::after,
  .botones_seo_localizaciones > a[href].Online::after {
    right: 15px;
    width: 20px;
    height: 20px;
  }
}

/* --------------------------------------------------------------------------
 * APARICION AL DESPLAZARSE, ELEMENTO A ELEMENTO
 *
 * Cada titular y cada columna asoman por su cuenta segun suben, no la seccion
 * entera de golpe: en una ficha larga es lo que hace que se note que se avanza.
 * Sin JavaScript, con la linea de tiempo de vista.
 *
 * LAS TARJETAS DEL CARRUSEL DE CURSOS SE QUEDAN FUERA a proposito, y no es un
 * olvido: viven dentro de un contenedor con overflow oculto, que para el
 * navegador ES un contenedor de scroll, asi que una `view()` sobre la tarjeta
 * se mide contra esa caja y no contra la ventana —nacerian con la animacion
 * terminada—. De esas se encarga el observador de js/mi_js.js, que mide contra
 * la ventana. Es el mismo motivo por el que los carruseles de la home y las
 * areas van por JavaScript.
 *
 * Guardas, como en el resto: @supports, menos movimiento y relleno `both`, para
 * que lo que ya se ve al cargar nazca en su fotograma final.
 * -------------------------------------------------------------------------- */
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    @keyframes cursoEntra {
      from {
        opacity: 0;
        transform: translateY(24px);
      }

      to {
        opacity: 1;
        transform: none;
      }
    }

    #Content.Curso .Curso-seccion-titulo,
    #Content.Curso .Curso-seccion-cuerpo > :not(.Rejilla),
    #Content.Curso .Curso-seccion-cuerpo .Rejilla-celda {
      animation: cursoEntra 0.9s ease-out both;
      animation-timeline: view();
      animation-range: entry 0% cover 30%;
    }
  }
}


/* Fechas y duración ------------------------------------------------------
   Tres o cuatro líneas de dato, no una enumeración: iban en un ul.lista-curso
   y las flechas las hacían parecer ventajas del curso (Eduardo, 11/09/2026).
   El rótulo en negrita es lo único que hay que distinguir de un vistazo. */
.Curso-fechas p {
	margin: 0 0 .9em;
}

.Curso-fechas p:last-child {
	margin-bottom: 0;
}

/* Visados ----------------------------------------------------------------
   La celda con las sedes donde vale el visado y, debajo, los dos botones
   (Eduardo, 12/09/2026). Son los mismos botones de la cabecera —.botones_curso,
   .matriculate--visado—, pero apilados y pegados a la lista: el margen de 40px
   de .botones_curso es para la cabecera, no para dentro de una celda. Y sin el
   subrayado que .info_caja pone a los enlaces de las celdas, que aquí son
   botones y no enlaces. */
/*
 * Aqui habia dos reglas para .Curso-cta--celda, los botones que llevaba esta
 * celda. Se fueron con ellos el 14/09/2026: el de matricula ya esta en la
 * cabecera y cada linea de sede lleva ahora a la matricula configurada. Si
 * vuelve a hacer falta un boton dentro de una celda, se escriben de nuevo.
 */

/* La frase que cierra una celda, separada de su lista: el enlace a alumnos
   internacionales en la de visado, y los «más abajo» que llevan a la seccion
   que lo explica en las de modalidad y titulacion (Eduardo, 14/09/2026). El
   subrayado del enlace ya lo pone .info_caja a todo lo que enlaza en una
   celda. */
#Content.Curso .Dato-nota {
  margin: var(--Global-Espacio-TituloContenido) 0 0;
}

/* Y la misma nota vale dentro de una seccion —la de requisitos de acceso la
   usa para enlazar su pagina—, pero alli el subrayado hay que pedirlo: en la
   rejilla lo pone `.info_caja a` y en una seccion no lo pone nadie, asi que el
   enlace salia en negro y sin subrayar, igual que el texto de al lado. */
#Content.Curso .Dato-nota a {
  text-decoration: underline;
}

/*
 * Las dos lineas de sedes tambien son enlaces —llevan a la matricula con esa
 * sede y ese diploma ya elegidos—, pero son texto y no botones: subrayado y
 * nada mas (Eduardo, 14/09/2026). Se desactiva aqui cualquier herencia de
 * pastilla porque justo debajo, en la misma celda, hay dos botones de verdad y
 * lo ultimo que conviene es que parezcan cuatro.
 */
#Content.Curso .info_caja .Dato--visado ul a {
  display: inline;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: none;
  color: inherit;
  font: inherit;
  letter-spacing: inherit;
  text-decoration: underline;
}

/* ==========================================================================
 * MODALIDADES Y CERTIFICACIONES (Eduardo, 16/09/2026)
 *
 * Los dos bloques comparten forma: una rejilla de tarjetas con borde, el mismo
 * radio, el mismo aire y la misma escala tipografica. Antes cada uno iba por su
 * lado —uno con palomitas y puntos, el otro con pastillas— y encima los dos
 * heredaban la flecha que el tema pone a toda <li> dentro de una seccion.
 *
 * FUERA LA FLECHA DEL TEMA EN MODALIDADES. `.seciones_cursos ul > li:before`
 * mete una flecha girada delante de cada renglon. En las modalidades sobra: no
 * son una enumeracion de ventajas, son fichas de datos.
 *
 * EN CERTIFICACIONES SI (Eduardo, 16/09/2026). Al quitarles la pastilla vuelven
 * a ser una lista como las demas de la ficha, asi que llevan la misma flecha y
 * la misma sangria que cualquier otra: la regla del tema ya lo hace todo y aqui
 * solo hay que dejarla pasar.
 * ========================================================================== */

.Modalidades > li::before {
  content: none !important;
}

.Modalidades,
.Certificaciones {
  margin: 0 0 var(--Global-Espacio-TituloContenido);
  padding: 0;
}

.Modalidades {
  list-style: none;
}

.Modalidades {
  display: grid;
  gap: calc(var(--Global-Espacio-TituloContenido) / 2);
}

/* --------------------------------------------------------------------------
 * Modalidades: una tarjeta por modalidad
 *
 * La que ofrece esta formacion lleva borde de tinta y el rotulo «Esta
 * formación» arriba. La que no, se queda con el filete y el texto apagado: se
 * sigue leyendo —saber que algo NO esta es informacion— pero no compite.
 * -------------------------------------------------------------------------- */

.Modalidades {
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
}

.Modalidades-item {
  position: relative;
  display: grid;
  align-content: start;
  gap: 6px;
  padding: var(--Global-Espacio-TituloContenido);
  border: 1px solid var(--Global-Filete);
  border-radius: var(--Global-Radio-Tarjeta);
}

.Modalidades-item--si {
  border-color: var(--Global-Color-Black);
}

.Modalidades-marca {
  align-self: start;
  margin-bottom: 2px;
  padding: 4px 12px;
  border-radius: var(--Global-Radio-Pastilla);
  background-color: var(--Global-Color-Black);
  color: var(--Global-Color-White);
  font-family: var(--Font-Family-Primary);
  font-size: var(--Font-Size-14);
  line-height: 1.2;
  text-transform: uppercase;
  letter-spacing: var(--Font-Letter-spacing-0);
  justify-self: start;
}

.Modalidades-nombre {
  font-family: var(--Font-Family-Primary);
  font-size: var(--Font-Size-20);
  font-weight: var(--Font-Weight-h2-temporal);
  line-height: var(--Font-Line-height-110);
  letter-spacing: var(--Font-Letter-spacing-2);
  color: var(--Global-Color-Black);
}

.Modalidades-detalle {
  font-family: var(--Font-Family-Primary);
  font-size: var(--Font-Size-14);
  line-height: normal;
  color: var(--Global-Color-Grey-Secondary);
}

.Modalidades-item--no .Modalidades-nombre {
  font-weight: var(--Font-Weight-400);
  color: var(--Global-Color-Grey-Secondary);
}

.Modalidades-nota {
  margin: 0;
  font-family: var(--Font-Family-Primary);
  font-size: var(--Font-Size-14);
  color: var(--Global-Color-Grey-Secondary);
}

/* --------------------------------------------------------------------------
 * Certificaciones: el logo y su nombre, sin flecha y sin pastilla
 * -------------------------------------------------------------------------- */

/*
 * UNA LISTA, NI TARJETAS NI PASTILLAS (Eduardo, 16/09/2026).
 *
 * Empezaron en una rejilla de `minmax(240px, 1fr)` —y 112 de las 176 fichas con
 * certificación tienen UNA SOLA, que se estiraba a todo el ancho con el logo
 * perdido en la esquina—; siguieron en pastillas, que al menos medían lo que su
 * texto. Pero el borde gris y el relleno de botón prometían un clic que no
 * existe: no se pulsan, solo se leen.
 *
 * Así que lista y ya: la flecha del sistema, la sangría de 26px y el mismo
 * tamaño de letra que cualquier otro renglón de la ficha, con el logo de la
 * compañía delante del nombre. Lo único propio es ese logo.
 */
.Certificaciones-item {
  display: flex;
  align-items: center;
  gap: 12px;
}

.Certificaciones-logo {
  flex: none;
  width: auto;
  height: 22px;
}

/* Sin `font-size`: hereda el del renglón, como el resto de las listas. */
.Certificaciones-nombre {
  font-family: var(--Font-Family-Primary);
  color: var(--Global-Color-Black);
}

/*
 * Aquí vivía .Certificaciones-cierre, el párrafo que iba DEBAJO de la lista
 * (Eduardo, 16/09/2026). Se fundió con el de entrada y ahora hay uno solo,
 * encima, sin clase que necesite reglas: es un <p> como los demás.
 */

@media (max-width: 767.98px) {
  .Modalidades {
    grid-template-columns: minmax(0, 1fr);
  }
  /* La lista de certificaciones no necesita regla: ya es de una columna. */
}

/* ==========================================================================
 * LOS LOGOS DE UNIVERSIDAD EN LOS BLOQUES DE DIPLOMA
 *
 * Las reglas de .Certificaciones que habia aqui se fueron arriba, junto a las
 * de modalidades: los dos bloques comparten forma y conviene que compartan
 * sitio en la hoja (Eduardo, 16/09/2026).
 * ========================================================================== */

/* --------------------------------------------------------------------------
 * El logo, junto al TÍTULO del bloque
 *
 * Estaba flotando dentro del cuerpo, entre los párrafos, y ahí competía con el
 * texto en vez de identificar el bloque. Ahora vive en el encabezado, que lo
 * envuelve render.php cuando la sección trae `logo`: el título a la izquierda y
 * el sello a la derecha (Eduardo, 16/09/2026).
 * -------------------------------------------------------------------------- */

.Curso-seccion-encabezado {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--Global-Espacio-TituloContenido);
  margin-bottom: var(--Global-Espacio-TituloContenido);
}

.Curso-seccion-encabezadoTexto {
  min-width: 0; /* que el título se parta en vez de empujar al logo */
}

/* El encabezado ya pone el margen; los títulos de dentro no lo repiten. */
.Curso-seccion-encabezado .Curso-seccion-ante,
.Curso-seccion-encabezado .Curso-seccion-titulo {
  margin-bottom: 0;
}

.Diploma-logo {
  display: block;
  width: auto;
  height: 96px;
}

@media (max-width: 767.98px) {
  /* En móvil, el sello debajo del título: al lado dejaría el título en una
     columna de dos palabras. */
  .Curso-seccion-encabezado {
    flex-direction: column;
    align-items: flex-start;
    gap: calc(var(--Global-Espacio-TituloContenido) / 2);
  }

  .Diploma-logo {
    height: 72px;
  }
}

/* ==========================================================================
 * EL MÓDULO DE CADA UNIVERSIDAD, CON SU COLOR DE MARCA (Eduardo, 16/09/2026)
 *
 * UDIMA y Sabal no son áreas de CEI: son marcas de terceros que firman un
 * diploma. Se les da su color —el suyo, no el nuestro— y con eso el bloque se
 * distingue de la columna de certificaciones que tiene al lado sin necesidad
 * de ningún rótulo.
 *
 * BORDE, NO FONDO. El fondo a todo color obliga a invertir el sello a blanco y
 * a repintar texto y enlaces, y deja un rectángulo oscuro en mitad de una
 * página que es blanca de arriba abajo. Un borde del color dice lo mismo y no
 * cambia nada más: el sello se queda como es y el texto sigue en negro sobre
 * blanco, con su contraste de siempre.
 *
 * Los ids son los de la columna (render.php se los pone) y son además las
 * anclas a las que baja la cabecera de la ficha.
 * ========================================================================== */

#Content.Curso #diploma,
#Content.Curso #diploma-sabal {
  padding: var(--Global-Espacio-TituloContenido);
  border: 1px solid var(--Marca-universidad);
  border-radius: var(--Global-Radio-Panel);
}

#Content.Curso #diploma {
  --Marca-universidad: var(--Udima-Primary);
}

#Content.Curso #diploma-sabal {
  --Marca-universidad: var(--Sabal-Primary);
}

/* El título y el enlace propio, del color de la universidad; el resto del
   texto no se toca, que sobre blanco ya se lee. */
#Content.Curso #diploma .Curso-seccion-titulo,
#Content.Curso #diploma-sabal .Curso-seccion-titulo {
  color: var(--Marca-universidad);
}

/*
 * El enlace a udima.es, en verde UDIMA. Lleva !important porque style.css pinta
 * de negro TODOS los enlaces de una seccion de curso con `.seciones_cursos a`
 * y tambien !important, y contra un !important no hay especificidad que valga.
 * Verde UDIMA sobre blanco da 9,94:1, asi que se lee de sobra.
 */
#Content.Curso #diploma a.Curso-enlaceExterno {
  color: var(--Marca-universidad) !important;
}


/* --------------------------------------------------------------------------
 * DOS COLUMNAS DESIGUALES — .Curso-seccion--2a1 (Eduardo, 16/09/2026)
 *
 * El contenido del curso y la galería de vídeo y fotos, lado a lado: el temario
 * manda y se lleva dos partes, la galería acompaña con una. Las secciones en
 * columnas del sistema son iguales entre sí; esta es la excepción, y por eso
 * va con su propia clase.
 * -------------------------------------------------------------------------- */
#Content.Curso .Curso-seccion--2a1 {
  grid-template-columns: 2fr 1fr;
}

@media (max-width: 1199.98px) {
  /* Con el temario a dos tercios de una pantalla de 1000 la galería se queda en
     una tira de 300px: mejor una debajo de otra. */
  #Content.Curso .Curso-seccion--2a1 {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* --------------------------------------------------------------------------
 * EL SELLO DE LA UNIVERSIDAD, AL PIE DEL BLOQUE (Eduardo, 16/09/2026)
 *
 * Estaba junto al título, en el encabezado. Abajo funciona mejor: se lee
 * primero lo que se ofrece y el emblema de quien lo firma cierra el bloque.
 *
 * `margin-top: auto` lo pega al fondo de su columna, así que cuando UDIMA y
 * Sabal van una al lado de la otra los dos sellos quedan a la misma altura
 * aunque sus textos midan distinto. Para eso la columna tiene que ser flex.
 * -------------------------------------------------------------------------- */
#Content.Curso #diploma,
#Content.Curso #diploma-sabal {
  display: flex;
  flex-direction: column;
}

#Content.Curso .Diploma-pie {
  /* El `auto` de arriba empuja hasta el fondo lo que quede libre de columna;
     el relleno es la separación mínima cuando no queda nada libre. */
  margin: auto 0 0;
  padding-top: var(--Global-Espacio-Grupo);
}

/* ==========================================================================
 * LA FICHA SE VA MONTANDO AL DESPLAZAR (Eduardo, 16/09/2026)
 *
 * Cada bloque del sistema —precio, empleo, Fundae— y cada columna —
 * certificaciones, UDIMA, Sabal— entra subiendo un poco y apareciendo, con la
 * animación atada al scroll y sin JavaScript.
 *
 * DOS COSAS QUE HUBO QUE COMPROBAR ANTES DE ESCRIBIR ESTO:
 *
 * 1. `animation-delay` NO SIRVE PARA ESCALONAR. Con una línea de tiempo de
 *    scroll el retardo en segundos se ignora: medido, tres columnas con 0, 0,3
 *    y 0,6s daban las tres exactamente la misma opacidad (0,461). Lo que sí
 *    escalona es darle a cada columna un `animation-range` distinto, y el
 *    escalonado se nota si lo que cambia es el FINAL y no el principio: con los
 *    tres acabando en `cover 35/50/65%` la diferencia entre la primera y la
 *    tercera llega a 0,36 de opacidad; moviendo solo el inicio se quedaba en
 *    0,05, que no se ve.
 *
 * 2. UN `transform` ROMPE EL `position: sticky` DE DENTRO. La foto de empleo es
 *    sticky en la ficha, y un ancestro transformado pasa a ser su bloque
 *    contenedor: medido, mientras la animación corre la foto se desplaza con el
 *    scroll en vez de quedarse quieta. Se recupera sola al acabar —el último
 *    fotograma es `transform: none`—, pero el salto se ve. Por eso el bloque de
 *    empleo entra SOLO con opacidad, sin mover nada.
 *
 * Y las tres guardas de siempre: `@supports` para que sin soporte no se quede
 * todo invisible, `prefers-reduced-motion` y rangos relativos a la ventana.
 * ========================================================================== */

@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    @keyframes ceiFichaEntra {
      from {
        opacity: 0;
        transform: translateY(60px) scale(0.96);
      }
      to {
        opacity: 1;
        transform: none;
      }
    }

    /* Sin mover: para lo que lleve un sticky dentro. */
    @keyframes ceiFichaAparece {
      from {
        opacity: 0;
      }
      to {
        opacity: 1;
      }
    }

    #Content.Curso .Curso-seccion--bloque,
    #Content.Curso .Curso-columna {
      animation: ceiFichaEntra linear both;
      animation-timeline: view();
      animation-range: entry 0% cover 30%;
    }

    /*
     * El escalonado de las columnas: cada una termina de entrar un poco después
     * que la anterior. No es un retardo —eso no existe aquí—, es un recorrido
     * más largo.
     */
    #Content.Curso .Curso-seccion--columnas > .Curso-columna:nth-child(1) {
      animation-range: entry 0% cover 22%;
    }

    #Content.Curso .Curso-seccion--columnas > .Curso-columna:nth-child(2) {
      animation-range: entry 0% cover 30%;
    }

    #Content.Curso .Curso-seccion--columnas > .Curso-columna:nth-child(3) {
      animation-range: entry 0% cover 38%;
    }

    /*
     * LO QUE LLEVE ALGO PEGADO DENTRO, SOLO OPACIDAD.
     *
     * Un `transform` convierte al ancestro en bloque contenedor y el
     * `position: sticky` de dentro deja de pegarse a la ventana.
     *
     * CSS NO SABE PREGUNTAR «¿tienes dentro algo sticky?»: no hay selector que
     * mire el estilo calculado de un descendiente. Así que esto es una LISTA A
     * MANO, y hay que añadirle cualquier pieza pegada que se cree más adelante.
     * Hoy solo existe una, la foto del bloque de empleo.
     */
    /*
     * LAS TARJETAS DE PROFESORADO, ESCALONADAS.
     *
     * Mismo truco que las columnas: no hay retardo que valga en una línea de
     * tiempo de scroll, así que cada una acaba un poco más tarde que la
     * anterior. La rejilla es de cuatro, así que el ciclo es de cuatro y se
     * repite fila a fila —`nth-child(4n+1)` y siguientes—, que si no la
     * vigésima tardaría veinte veces más que la primera.
     */
    #Content.Curso .profe {
      animation: ceiFichaEntra linear both;
      animation-timeline: view();
      animation-range: entry 0% cover 25%;
    }

    #Content.Curso .profe:nth-child(4n + 2) {
      animation-range: entry 0% cover 30%;
    }

    #Content.Curso .profe:nth-child(4n + 3) {
      animation-range: entry 0% cover 35%;
    }

    #Content.Curso .profe:nth-child(4n + 4) {
      animation-range: entry 0% cover 40%;
    }

    /*
     * LAS LISTAS DEL CONTENIDO, ENTRANDO POR LA IZQUIERDA.
     *
     * Solo dentro de `.contenido_cursos`, que es el texto editable de la ficha:
     * fuera de ahí hay listas que son maquetación —el índice, las modalidades,
     * las certificaciones— y verlas deslizarse sería ruido.
     *
     * El recorrido es corto (24px) y acaba pronto: una línea de texto que llega
     * desde muy lejos se lee peor, no mejor.
     *
     * OJO AL DESBORDE: se mueve hacia la DERECHA desde -24px, así que nunca
     * sale por el lado izquierdo de la pantalla; si fuera al revés haría falta
     * recortar el contenedor.
     */
    @keyframes ceiDesdeLaIzquierda {
      from {
        opacity: 0;
        transform: translateX(-24px);
      }
      to {
        opacity: 1;
        transform: none;
      }
    }

    #Content.Curso .contenido_cursos ul > li {
      animation: ceiDesdeLaIzquierda linear both;
      animation-timeline: view();
      animation-range: entry 0% cover 25%;
    }

    #Content.Curso .Curso-seccion--bloque:has(.Empleo-figura),
    #Content.Curso .Curso-seccion--bloque:has([data-pegado]),
    #Content.Curso .Curso-columna:has(.Empleo-figura),
    #Content.Curso .Curso-columna:has([data-pegado]) {
      animation-name: ceiFichaAparece;
    }

    /* ----------------------------------------------------------------------
     * LAS CELDAS, UNA DETRÁS DE OTRA (Eduardo, 16/09/2026)
     *
     * Cuatro secciones entraban de una pieza y ahora entra cada celda por su
     * cuenta: la lista de «Gratis con tus estudios», la rejilla de datos
     * básicos, la de preguntas frecuentes y las filas de la lámina de precio.
     * Es lo que hace que se lean como una rejilla y no como un bloque.
     *
     * EL CONTENEDOR CEDE EL TURNO, y esto no es opcional: si entrara él Y
     * ademas sus celdas se verían dos entradas superpuestas —el bloque
     * apareciendo mientras sus piezas suben por dentro—, que es justo el
     * aspecto de algo que va mal. De eso se encarga el bloque de después.
     *
     * El viaje es mas corto que el de un bloque —24px y sin escala— porque una
     * celda pequeña que recorre 60px llama mas la atención que lo que dice.
     * ------------------------------------------------------------------- */
    @keyframes ceiCeldaEntra {
      from {
        opacity: 0;
        transform: translateY(24px);
      }
      to {
        opacity: 1;
        transform: none;
      }
    }

    #Content.Curso :is(#gratis li, .Dato, .Faq > div, .Precio-fila) {
      animation: ceiCeldaEntra linear both;
      animation-timeline: view();
      animation-range: entry 0% cover 25%;
    }

    /*
     * El escalonado, en ciclos de cuatro, como el del profesorado: en una
     * rejilla de varias columnas las celdas de una misma fila empiezan a la vez
     * —tienen la misma altura en pantalla— y sin esto entrarían en bloque. Con
     * los cuatro finales distintos la fila se dibuja en diagonal.
     */
    #Content.Curso :is(#gratis li, .Dato, .Faq > div, .Precio-fila):nth-child(4n + 1) {
      animation-range: entry 0% cover 25%;
    }

    #Content.Curso :is(#gratis li, .Dato, .Faq > div, .Precio-fila):nth-child(4n + 2) {
      animation-range: entry 0% cover 30%;
    }

    #Content.Curso :is(#gratis li, .Dato, .Faq > div, .Precio-fila):nth-child(4n + 3) {
      animation-range: entry 0% cover 35%;
    }

    #Content.Curso :is(#gratis li, .Dato, .Faq > div, .Precio-fila):nth-child(4n + 4) {
      animation-range: entry 0% cover 40%;
    }

    /* Los cuatro contenedores que ceden el turno a sus celdas. */
    #Content.Curso #gratis .Curso-seccion-cuerpo > ul,
    #Content.Curso #caja .Curso-seccion-cuerpo > .borde_caja,
    #Content.Curso #dia .Curso-seccion-cuerpo > .borde_caja,
    #Content.Curso #precio {
      animation: none;
    }

    /* ----------------------------------------------------------------------
     * LA PRIMERA SECCIÓN NO ENTRA: YA ESTÁ (Eduardo, 16/09/2026)
     *
     * El contenido del curso y la galería que lo acompaña son lo primero que
     * hay debajo de la cabecera, casi siempre a la vista antes de tocar la
     * rueda. Animar lo que ya se está mirando no es una entrada: es un
     * parpadeo, porque el CSS llega después del primer pintado y la pieza baja
     * a atenuada para volver a subir. Es el mismo motivo por el que el mosaico
     * de la home se quedó fuera de su revelado.
     *
     * Con dos identificadores en el selector le gana a todas las reglas de
     * arriba —columnas, títulos, cuerpos y las listas del temario— sin
     * necesidad de un !important.
     * ------------------------------------------------------------------- */
    #Content.Curso #contenido,
    #Content.Curso #contenido * {
      animation: none;
    }
  }
}

/* --------------------------------------------------------------------------
 * TECNOLOGIAS Y HERRAMIENTAS (Eduardo, 01/10/2026)
 *
 * La seccion #herramientas de la ficha (meta-boxes, includes/herramientas.php):
 * una fila de logotipos con su nombre, que pasan de linea cuando no caben. Sin
 * titulos de grupo, sin cajas ni bordes, sin hover y sin el sello de la
 * certificacion. Cada logotipo va en su color de marca (--Herramientas-marca,
 * meta cei_color del termino) y en linea, en currentColor.
 *
 * TODO VALOR NUEVO ES UNA CUSTOM PROPERTY (cei-tokens.css, bloque «Herramientas
 * e IA Powered») Y LOS TEXTOS LLEVAN SU CLASE Global-* EN EL MARCADO (Eduardo,
 * 01/10/2026): aqui no hay tamaños de letra ni colores escritos a mano.
 *
 * style.css rellena TODOS los svg con fill:currentColor (linea 14): los de trazo
 * de Tabler, que llegan con fill="none", salian como manchas negras; aqui se les
 * devuelve el fill none.
 *
 * De momento la ven solo las cuentas de administracion (la seccion no se pinta
 * para el resto), y por eso lleva el aviso de abajo.
 * -------------------------------------------------------------------------- */

/*
 * Un apartado por grupo padre de la taxonomia (Eduardo, 02/10/2026): el nombre
 * del grupo, con Global-h4 en el marcado, y su rejilla debajo. Los valores de
 * Global-h4 se repiten con tokens porque las reglas de titular de esta hoja
 * pesan mas que la clase suelta (mismo caso que .Curso-seccion-ante).
 */
#Content.Curso .Herramientas {
  display: flex;
  flex-direction: column;
  gap: var(--Herramientas-Grupo-Hueco);
}
/* Cada grupo es un panel del sistema (Eduardo, 02/10/2026: «algún estilo en base a
   los componentes»): la misma lamina que la cabecera, la barra y los relacionados
   —fondo gris o del area, radio de panel, relleno de titulo-contenido—. */
#Content.Curso .Herramientas-grupo {
  padding: var(--Global-Espacio-TituloContenido);
  border-radius: var(--Global-Radio-Panel);
  background-color: var(--Curso-Color-Area, var(--Global-Color-Grey));
}
#Content.Curso .Herramientas-grupo-titulo {
  margin: 0 0 var(--Herramientas-Grupo-Titulo);
  color: var(--Global-Color-Black);
  font-size: var(--Font-Size-20);
  font-weight: var(--Font-Weight-400);
  line-height: normal;
  letter-spacing: var(--Font-Letter-spacing-2);
}

/* Una rejilla (Eduardo, 02/10/2026), no una fila que pasa de linea: columnas de
   al menos --Herramientas-Columna, las que quepan, y los logotipos alineados. */
#Content.Curso ul.Herramientas-lista {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(var(--Herramientas-Columna), 1fr));
  gap: var(--Herramientas-Hueco);
}

/* Sin la flecha que style.css pone a las listas de las secciones (.seciones_cursos ul li). */
#Content.Curso .Herramientas-lista > li {
  margin: 0;
  padding: 0;
}
#Content.Curso .Herramientas-lista > li::before,
#Content.Curso .Herramientas-lista > li::marker {
  content: none;
}

/* El nombre lleva Global-p en el marcado; aqui solo la composicion. */
#Content.Curso .Herramientas-chip {
  display: inline-flex;
  align-items: center;
  gap: var(--Herramientas-Separacion);
  color: var(--Global-Color-Black);
}

#Content.Curso .Herramientas-icono,
#Content.Curso .Herramientas-icono svg {
  display: block;
  width: var(--Herramientas-Logo);
  height: var(--Herramientas-Logo);
  flex: none;
}

#Content.Curso .Herramientas-icono svg {
  color: var(--Herramientas-marca, currentColor);
}
#Content.Curso .Herramientas-icono svg[fill="none"] {
  fill: none;
}

/*
 * El aviso lleva Global-p--small en el marcado, pero la regla general de parrafo
 * de esta hoja (#Content.Curso p) pesa mas que la clase y lo dejaba en 19px
 * (medido en la web el 01/10/2026). Se repiten aqui los valores de la clase,
 * con sus tokens, como hace esta hoja con Global-h4.
 */
#Content.Curso .Herramientas-aviso {
  margin: 0;
  color: var(--Global-Color-Grey-Secondary);
  font-size: var(--Font-Size-14);
  font-weight: var(--Font-Weight-400);
  line-height: normal;
  letter-spacing: var(--Font-Letter-spacing-2);
}

@media (max-width: 767.98px) {
  #Content.Curso .Herramientas {
    gap: var(--Herramientas-Grupo-Hueco-Movil);
  }
  #Content.Curso ul.Herramientas-lista {
    grid-template-columns: repeat(auto-fill, minmax(var(--Herramientas-Columna-Movil), 1fr));
    gap: var(--Herramientas-Hueco-Movil);
  }
  #Content.Curso .Herramientas-icono,
  #Content.Curso .Herramientas-icono svg {
    width: var(--Herramientas-Logo-Movil);
    height: var(--Herramientas-Logo-Movil);
  }
}

/* --------------------------------------------------------------------------
 * IA POWERED (Eduardo, 01/10/2026)
 *
 * La lamina #ia-powered, solo en las fichas con alguna herramienta de IA: el
 * titulo (Global-h3) y el texto (el propio de la ficha o el general) y debajo
 * la marquesina de logotipos en lentes de vidrio, sobre el espacio de la IA
 * (--Area-IA-Primary → --Area-IA-Secondary), como los bloques de Fundae y de
 * empleo tienen el suyo. Es un bloque del sistema: la seccion no pinta titulo
 * fuera.
 * -------------------------------------------------------------------------- */

#Content.Curso .IaPowered {
  position: relative; /* el cristal, cuando este activo, se asoma por la esquina */
  padding: var(--IaPowered-Relleno);
  border-radius: var(--Global-Radio-Panel);
  /*
   * EL ESPACIO DE LA IA (Eduardo, 01/10/2026: «que sea mas espacio, color
   * negro»; antes, un atardecer, por una referencia de una pompa de cristal
   * iridiscente sobre un cielo con estrellas). Del negro (--Area-IA-Primary) al
   * indigo oscuro (--Area-IA-Secondary), con una nebulosa tenue violeta arriba a
   * la derecha, otra verdosa abajo a la izquierda y un polvo de estrellas: un
   * SVG de 400px con 34 puntos que se repite. Texto en blanco.
   */
  color: var(--Global-Color-White);
  background:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='400' viewBox='0 0 400 400'%3E%3Ccircle cx='169' cy='81' r='1.4' fill='%23fff' fill-opacity='0.35'/%3E%3Ccircle cx='41' cy='278' r='0.7' fill='%23fff' fill-opacity='0.7'/%3E%3Ccircle cx='302' cy='33' r='0.9' fill='%23fff' fill-opacity='0.35'/%3E%3Ccircle cx='48' cy='226' r='1.4' fill='%23fff' fill-opacity='0.35'/%3E%3Ccircle cx='127' cy='50' r='1.4' fill='%23fff' fill-opacity='0.35'/%3E%3Ccircle cx='293' cy='67' r='0.9' fill='%23fff' fill-opacity='0.35'/%3E%3Ccircle cx='299' cy='303' r='1.4' fill='%23fff' fill-opacity='0.35'/%3E%3Ccircle cx='117' cy='27' r='0.9' fill='%23fff' fill-opacity='0.7'/%3E%3Ccircle cx='218' cy='77' r='0.7' fill='%23fff' fill-opacity='0.7'/%3E%3Ccircle cx='290' cy='353' r='0.9' fill='%23fff' fill-opacity='0.35'/%3E%3Ccircle cx='301' cy='296' r='0.9' fill='%23fff' fill-opacity='0.7'/%3E%3Ccircle cx='53' cy='284' r='0.7' fill='%23fff' fill-opacity='0.35'/%3E%3Ccircle cx='320' cy='109' r='1.4' fill='%23fff' fill-opacity='0.9'/%3E%3Ccircle cx='164' cy='242' r='1.4' fill='%23fff' fill-opacity='0.7'/%3E%3Ccircle cx='157' cy='131' r='0.9' fill='%23fff' fill-opacity='0.5'/%3E%3Ccircle cx='45' cy='298' r='1.1' fill='%23fff' fill-opacity='0.9'/%3E%3Ccircle cx='179' cy='377' r='1.4' fill='%23fff' fill-opacity='0.7'/%3E%3Ccircle cx='315' cy='41' r='0.7' fill='%23fff' fill-opacity='0.9'/%3E%3Ccircle cx='88' cy='391' r='1.1' fill='%23fff' fill-opacity='0.5'/%3E%3Ccircle cx='254' cy='219' r='0.7' fill='%23fff' fill-opacity='0.35'/%3E%3Ccircle cx='395' cy='289' r='1.1' fill='%23fff' fill-opacity='0.7'/%3E%3Ccircle cx='359' cy='183' r='1.4' fill='%23fff' fill-opacity='0.9'/%3E%3Ccircle cx='39' cy='51' r='1.1' fill='%23fff' fill-opacity='0.9'/%3E%3Ccircle cx='360' cy='344' r='0.7' fill='%23fff' fill-opacity='0.35'/%3E%3Ccircle cx='378' cy='363' r='1.1' fill='%23fff' fill-opacity='0.9'/%3E%3Ccircle cx='149' cy='370' r='1.4' fill='%23fff' fill-opacity='0.7'/%3E%3Ccircle cx='15' cy='240' r='1.1' fill='%23fff' fill-opacity='0.5'/%3E%3Ccircle cx='316' cy='63' r='1.4' fill='%23fff' fill-opacity='0.35'/%3E%3Ccircle cx='115' cy='151' r='0.9' fill='%23fff' fill-opacity='0.5'/%3E%3Ccircle cx='207' cy='204' r='1.4' fill='%23fff' fill-opacity='0.35'/%3E%3Ccircle cx='89' cy='233' r='1.4' fill='%23fff' fill-opacity='0.7'/%3E%3Ccircle cx='74' cy='224' r='1.1' fill='%23fff' fill-opacity='0.9'/%3E%3Ccircle cx='187' cy='353' r='1.4' fill='%23fff' fill-opacity='0.5'/%3E%3Ccircle cx='81' cy='46' r='0.9' fill='%23fff' fill-opacity='0.5'/%3E%3C/svg%3E") repeat,
    radial-gradient(55% 60% at 90% 10%, var(--IaPowered-Nebulosa-1), transparent 70%),
    radial-gradient(60% 50% at 5% 95%, var(--IaPowered-Nebulosa-2), transparent 70%),
    linear-gradient(180deg, var(--Area-IA-Primary) 0%, var(--IaPowered-Medio) 60%, var(--Area-IA-Secondary) 100%);
}

/* El titulo del bloque, dentro de la lamina como en los bloques del sistema
   (lleva Global-h3 en el marcado). */
#Content.Curso .IaPowered-titulo {
  margin: 0 0 var(--Global-Espacio-TituloContenido);
  color: var(--Global-Color-White);
}
/* El texto, en blanco: la regla de parrafos de esta hoja lo pondria en negro. */
#Content.Curso .IaPowered-texto,
#Content.Curso .IaPowered-texto p,
#Content.Curso .IaPowered-texto li {
  color: var(--Global-Color-White);
}
#Content.Curso .IaPowered-texto > p:last-child {
  margin-bottom: 0;
}

/*
 * EL CRISTAL 3D (Eduardo, 01/10/2026), superpuesto en la esquina superior
 * derecha de la lamina y asomando por fuera. DESACTIVADO DE MOMENTO (el plugin
 * no pinta el hueco: filtro cei_master_ia_powered_cristal); estas reglas quedan
 * para cuando se encienda. El texto deja sitio a la derecha para no quedar debajo.
 */
#Content.Curso .IaPowered-cristal {
  position: absolute;
  top: calc(var(--IaPowered-Cristal) * -0.22);
  right: calc(var(--IaPowered-Cristal) * -0.18);
  width: var(--IaPowered-Cristal);
  height: var(--IaPowered-Cristal);
  pointer-events: none; /* el parallax lo escucha la lamina entera */
}
#Content.Curso .IaPowered-cristal canvas {
  display: block;
  position: relative;
  width: 100%;
  height: 100%;
}
/* El halo de la pompa: una luz difusa detras. */
#Content.Curso .IaPowered-cristal::before {
  content: "";
  position: absolute;
  inset: 12%;
  border-radius: 50%;
  background: radial-gradient(circle, var(--IaPowered-Brillo), var(--IaPowered-Velo) 55%, transparent 72%);
  filter: var(--IaPowered-Halo-Desenfoque);
}
#Content.Curso .IaPowered--cristal .IaPowered-texto,
#Content.Curso .IaPowered--cristal .IaPowered-titulo {
  padding-right: calc(var(--IaPowered-Cristal) * 0.75);
}
/* Sin WebGL (o si el modulo no carga), el cargador marca la lamina y el hueco se
   retira: el texto recupera el ancho. */
#Content.Curso .IaPowered--sin-cristal .IaPowered-cristal {
  display: none;
}
#Content.Curso .IaPowered--sin-cristal .IaPowered-texto,
#Content.Curso .IaPowered--sin-cristal .IaPowered-titulo {
  padding-right: 0;
}

/*
 * LA MARQUESINA DE LOGOTIPOS (Eduardo, 01/10/2026): «solo los logos en circulos
 * y en modo carrusel como en la home v2». La misma mecanica que la fila de
 * empresas de css/bloques/empleo.css: dos copias de la lista, la pista se
 * desplaza la mitad de su ancho en bucle, se para al pasar el raton y no se
 * mueve si el usuario pidio menos movimiento (entonces se desplaza a mano). La
 * fila sangra hasta los bordes de la lamina y se desvanece antes de llegar a
 * ellos: ningun circulo asoma cortado.
 */
#Content.Curso .IaPowered-logos {
  margin: var(--IaPowered-Separacion) calc(var(--IaPowered-Relleno) * -1) 0;
  padding: 0 var(--IaPowered-Relleno);
  overflow-x: auto;
  scrollbar-width: none;
  -webkit-mask-image: linear-gradient(90deg, transparent, var(--Global-Color-Black) 14%, var(--Global-Color-Black) 86%, transparent);
  mask-image: linear-gradient(90deg, transparent, var(--Global-Color-Black) 14%, var(--Global-Color-Black) 86%, transparent);
}
#Content.Curso .IaPowered-logos::-webkit-scrollbar {
  display: none;
}

#Content.Curso .IaPowered-pista {
  display: flex;
  width: max-content;
}

#Content.Curso .IaPowered .IaPowered-lista {
  display: flex;
  gap: var(--IaPowered-Hueco);
  margin: 0;
  padding: 0 calc(var(--IaPowered-Hueco) / 2) 0 0;
  list-style: none;
}

/*
 * LIQUID GLASS, EL DE LA WEB (Eduardo, 01/10/2026: «las burbujas no usan el mismo
 * sistema que el resto de elementos con liquid glass, no se notan»). Cada
 * logotipo va en una lente con la receta de los paneles de la barra de
 * navegacion y del aviso de cookies, pero sin el velo blanco (Eduardo,
 * 02/10/2026): el fondo desenfocado y saturado (--Global-Vidrio-Blur), la
 * sombra de los paneles con su filo de luz, y en los
 * motores Blink —la clase cei-has-liquidGlass que pone el JS de la cabecera en
 * el body— la refraccion del filtro #CeiLiquidGlass, que la cabecera imprime en
 * todas las paginas. La lente mide 200px y el logotipo 80 (tokens IaPowered-*):
 * «mas grandes aun manteniendo el logo».
 */
#Content.Curso .IaPowered-circulo {
  position: relative;
  display: flex;
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  width: var(--IaPowered-Circulo);
  height: var(--IaPowered-Circulo);
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 50%;
  /* Sin color de fondo (Eduardo, 02/10/2026): la lente es solo lo que hace el
     backdrop-filter con el espacio de detras, y el logotipo encima a plena
     opacidad. */
  background: transparent;
  -webkit-backdrop-filter: var(--Global-Vidrio-Blur);
  backdrop-filter: var(--Global-Vidrio-Blur);
  box-shadow: var(--IaPowered-Lente-Sombra);
  list-style: none;
}
body.cei-has-liquidGlass #Content.Curso .IaPowered-circulo {
  backdrop-filter: var(--Global-Vidrio-Blur) url(#CeiLiquidGlass);
}
#Content.Curso .IaPowered-circulo::before,
#Content.Curso .IaPowered-circulo::marker {
  content: none;
}

/*
 * Sobre el espacio los logotipos van en blanco y a plena opacidad (Eduardo,
 * 02/10/2026): varios son negros (GitHub Copilot, Claude Code) y se perderian.
 */
#Content.Curso .IaPowered-logo,
#Content.Curso .IaPowered-logo svg {
  position: relative;
  display: block;
  width: var(--IaPowered-Logo);
  height: var(--IaPowered-Logo);
}
#Content.Curso .IaPowered-logo svg {
  color: var(--Global-Color-White);
  opacity: 1;
}
#Content.Curso .IaPowered-logo svg[fill="none"] {
  fill: none;
}

@media (prefers-reduced-motion: no-preference) {
  @keyframes ceiIaMarquesina {
    to {
      transform: translateX(-50%);
    }
  }
  #Content.Curso .IaPowered-logos {
    overflow-x: hidden;
  }
  #Content.Curso .IaPowered-pista {
    animation: ceiIaMarquesina var(--IaPowered-Marquesina) linear infinite;
  }
  #Content.Curso .IaPowered-logos:hover .IaPowered-pista {
    animation-play-state: paused;
  }
}

@media (max-width: 767.98px) {
  #Content.Curso .IaPowered {
    padding: var(--IaPowered-Relleno-Movil);
  }
  #Content.Curso .IaPowered-logos {
    margin: var(--IaPowered-Separacion) calc(var(--IaPowered-Relleno) * -0.67) 0;
    padding: 0 calc(var(--IaPowered-Relleno) * 0.67);
  }
  #Content.Curso .IaPowered-circulo {
    width: var(--IaPowered-Circulo-Movil);
    height: var(--IaPowered-Circulo-Movil);
  }
  #Content.Curso .IaPowered-logo,
  #Content.Curso .IaPowered-logo svg {
    width: var(--IaPowered-Logo-Movil);
    height: var(--IaPowered-Logo-Movil);
  }
  #Content.Curso .IaPowered-cristal {
    width: var(--IaPowered-Cristal-Movil);
    height: var(--IaPowered-Cristal-Movil);
    top: calc(var(--IaPowered-Cristal-Movil) * -0.25);
    right: calc(var(--IaPowered-Cristal-Movil) * -0.2);
  }
  #Content.Curso .IaPowered--cristal .IaPowered-texto,
  #Content.Curso .IaPowered--cristal .IaPowered-titulo {
    padding-right: calc(var(--IaPowered-Cristal-Movil) * 0.6);
  }
}

/*
 * HERRAMIENTAS E «IA POWERED» EN DOS COLUMNAS (Eduardo, 01/10/2026): el mismo
 * mecanismo de columnas de certificaciones y diplomas (secciones.php); aqui solo
 * se alinean por arriba, para que la lamina no se estire con la lista.
 */
#Content.Curso .Curso-seccion--herramientas {
  align-items: start;
}

/* --------------------------------------------------------------------------
 * INSIGNIA «IA POWERED» DE LA CABECERA (Eduardo, 01/10/2026)
 *
 * Bajo el titulo de la ficha, solo en las que trabajan herramientas de IA. Es
 * la etiqueta del sistema (manual de marca: pastilla de 4 × 12, Size-14 —la
 * clase Global-p--small va en el marcado—, radio 999, Destacado con texto
 * blanco). Desde el 02/10/2026 es una pastilla por herramienta de IA, «IA Powered
 * with [logo] ChatGPT» (Eduardo), hasta dos, y baja a la seccion #ia-powered.
 * Sin hover.
 * -------------------------------------------------------------------------- */

#Content.Curso .Curso-iaBadges {
  display: flex;
  flex-wrap: wrap;
  gap: var(--Herramientas-Insignia-Hueco);
  margin: calc(var(--Global-Espacio-TituloContenido) / 2) 0 0;
}

#Content.Curso .Curso-iaBadge {
  display: inline-flex;
  align-items: center;
  align-self: flex-start; /* la columna de la cabecera estira a sus hijos; la pastilla mide lo que su texto */
  width: fit-content;
  gap: calc(var(--Global-Espacio-TituloContenido) / 4);
  margin: 0;
  padding: calc(var(--Global-Espacio-TituloContenido) / 6) calc(var(--Global-Espacio-TituloContenido) / 2);
  border-radius: var(--Global-Radio-Pastilla);
  background: var(--Global-Destacado);
  color: var(--Global-Color-White);
  text-decoration: none; /* la letra, la de Global-p--small del marcado, sin retoques */
}

#Content.Curso .Curso-iaBadge-icono,
#Content.Curso .Curso-iaBadge-icono svg {
  display: block;
  width: var(--Herramientas-Insignia-Icono);
  height: var(--Herramientas-Insignia-Icono);
  color: inherit;
}
/* El de OpenAI es de trazo (fill none); los de Simple Icons, glifos que se rellenan. */
#Content.Curso .Curso-iaBadge-icono svg[fill="none"] {
  fill: none;
}
