/* display:flex + flex-direction:column en body y flex:1 en ".body-inner"
   (footer sticky): el pie de página vive fuera de ".body-inner", como
   hermano suyo directo dentro de <body> (ver html_pie_pagina(), llamado
   después de cerrar ese div). En páginas con poco contenido (secundarias
   con pocos resultados, por ejemplo) sin esto el pie quedaba justo debajo
   del contenido, a media pantalla, en vez de anclado abajo del todo. */
body{
    /* Negro fijo (no var(--body-bg-color), que es el color configurado de la
       web): el contenido queda limitado a 2400px (.bloque_datos, .body-inner)
       y este es el fondo que se ve a los lados en pantallas más anchas. */
    background-color: #000000 !important;
    color: var(--body-text-color) !important;
    font-family: var(--font-family-base) !important;
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}

/* Forzado explícito en <p> (no basta con la herencia desde body): plugins.css
   define "body{color:#3c4043}" sin !important, así que en teoría lo de
   arriba ya gana, pero el color de la web no llegaba a los párrafos. */
p{
    color: var(--body-text-color) !important;
}

/* Color hover genérico de enlaces (Otras configuraciones > Personalización
   > "Color hover"): la plantilla trae "a:hover{color:#1d44d6}" fijo (ver
   style.css), sin relación con los colores configurados de la web. No
   afecta a botones/insignias con su propio hover (.boton1, .boton2,
   .btn-resultados-clasificacion...), que al llevar selector de clase ganan
   por especificidad. */
a:hover{
    color: var(--body-hover-color) !important;
}

/* La plantilla fija "section{background-color:#fff}" (ver style.css), lo que
   tapa el background configurado de la web en las páginas secundarias
   (resultados, ...): su contenido vive dentro de un <section> normal, sin
   fondo propio como sí tienen los bloques de la portada. */
.pagina-resultados-contenido{
    background-color: transparent !important;
}

/* Corrige un problema de orden en plugins.css: ahí ".col-12{flex:0 0 auto;
   width:100%}" aparece DESPUÉS de ".col-md{flex:1 0 0%}" dentro de su
   @media, así que con igual especificidad gana ".col-12" y una columna
   "col-12 col-md" se queda a ancho completo incluso en escritorio. Como
   este fichero se carga después de plugins.css, esta regla reafirma el
   comportamiento correcto de Bootstrap (auto-reparto a partir de 768px). */
@media (min-width: 768px) {
    .col-md {
        flex: 1 0 0%;
    }
}

body .body-inner {
    /* El <body> ahora es negro fijo (letterboxing fuera de los 2400px); sin
       un fondo propio aquí, cualquier hueco "transparente" dentro del
       contenido (p.ej. ".pagina-resultados-contenido", pensada para dejar
       ver el color configurado de la web) dejaba ver ese negro en su lugar. */
    background-color: var(--body-bg-color);
    max-width: 2400px;
    margin: auto;
    flex: 1 0 auto;
    width: 100%;
}

/* Todas las secciones (get_base_seccion(), clase siempre presente: "bloque_N"
   en páginas normales, "bloque_pie_N" en las del pie) limitadas a 2400px de
   ancho, centradas. Cubre tanto las que viven dentro de ".body-inner" (ya
   limitado a 2400px, así que aquí es redundante pero inofensivo) como las
   del pie de página (html_pie_pagina()), que se pintan fuera de
   ".body-inner" como hermanas directas de <body> (necesario para el footer
   sticky) y por tanto no heredaban ese límite: sin esto su fondo se estiraba
   hasta el borde de la ventana en pantallas muy anchas aunque su contenido
   interior (".container", 1340px) sí quedara centrado. */
.bloque_datos {
    max-width: 2400px;
    width: 100%;
    margin-left: auto;
    margin-right: auto;
}

/* El header vive fuera de .body-inner (suele ir fixed/full-width), así que
   sin esto se estira a todo el ancho de pantalla mientras el resto del
   contenido queda centrado con el mismo max-width de arriba. */
#header .header-inner {
    max-width: 2400px;
    margin-left: auto;
    margin-right: auto;
}

/* Capa superior del "container" de un bloque (independiente de la capa de
   la sección, que usa .bg-overlay). Sin mix-blend-mode a propósito: dentro
   del container esa mezcla no se pintaba de forma fiable. */
.container-overlay {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    width: 100%;
    height: 100%;
    z-index: 0;
}

/* Capa superior de la SECCIÓN de un bloque (capa_superior sobre imagen_fondo
   en get_base_seccion). Misma idea que .container-overlay: .bg-overlay lleva
   mix-blend-mode:multiply vía ".bloque_datos .bg-overlay", pensado para un
   tinte artístico, pero eso impide que la capa cubra del todo la imagen aunque
   se ponga opacidad 100% (multiply nunca oculta, solo oscurece). Con una clase
   propia sin blend-mode la opacidad se comporta como una tapadera normal. */
.section-overlay {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    width: 100%;
    height: 100%;
    z-index: 0;
}

#overlay-trans {
    background: rgba(0, 0, 0, 0) linear-gradient(to bottom, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0) 100%) repeat scroll 0 0;
    z-index: 1;
    opacity:0.5;
}

.container {
    max-width: var(--container-width);
}

#fondo_color{
    position: relative;
    z-index: 1;
}

#topbar img{
    height: auto;
}

.w-30{
    width: 30% !important;
}

.w-40{
    width: 40% !important;
}

/* Evita que cualquier elemento que se salga del ancho de la sección
   (sombras, formas decorativas, columnas con márgenes negativos, etc.)
   provoque scroll horizontal en la página. */
.bloque_datos{
    overflow-x: hidden;
}

#portada-section .container .portada{
    margin-top: 30px;
    border-radius: 50px;
}

#portada-section .margen{
    margin: 0px 25px;
}

#portada-section .margen .portada{
    border-radius: 60px 0 0 0;
}

/* La capa de opacidad (.bg-overlay, ver html_capa_portada()) por defecto
   ocupa el 100% del alto/ancho de su contenedor (ver .bg-overlay en
   style.css). Con "Margen lateral" la limitamos a un recuadro más pequeño,
   igual que ya se hace con .overlay-left .bg-overlay para "capa_posicion",
   pero con sus propias proporciones. top:0 y bottom:0 ya vienen heredados
   de .bg-overlay; al fijar aquí una altura, el trío top+height+bottom queda
   sobrerrestringido y bottom se ignora, así que la capa queda anclada arriba
   con un hueco debajo en vez de estirarse hasta abajo. */
#portada-section .margen .bg-overlay {
    height: 100%;
    border-radius: 0 0 706px 0;
    max-width: 650px;
}

@media screen and (max-width: 768px) {
    #portada-section .margen{
        margin: 0px 15px;
    }

    #portada-section .margen .portada{
        border-radius: 30px 0 0 0;
    }

    /* En móvil la capa necesita su propio tamaño (no el heredado de
       escritorio, pensado para una portada mucho más ancha): más baja y
       ocupando casi todo el ancho, en vez de un recuadro estrecho y muy
       alto. */
    #portada-section .margen .bg-overlay {
        height: 72%;
        max-width: 90%;
        border-radius: 0 0 280px 0;
    }

    /* El tema no trae un reset global de imágenes responsivas (solo lo
       aplica quien use la clase ".img-fluid" de Bootstrap explícitamente),
       así que cualquier <img> con un ancho intrínseco mayor que la pantalla
       se salía de su contenedor en móvil. */
    img {
        max-width: 100%;
        height: auto;
    }

    /* Primer container de cada sección (ver get_base_seccion() en
       funciones_html.php): en móvil, px-3 (mismo valor que la utilidad de
       Bootstrap). Scope a ".bloque_datos > .container" (hijo directo) para
       no afectar a containers anidados más adentro del contenido del
       bloque, ni a otros .container del sitio (header, portada, topbar...). */
    .bloque_datos > .container {
        padding-left: 1rem;
        padding-right: 1rem;
    }
}

.inspiro-slider.dots-creative .flickity-page-dots .is-selected, .carousel.dots-creative .flickity-page-dots .is-selected, .flickity-button:hover, .inspiro-slider.dots-creative .flickity-page-dots .dot:after, .carousel.dots-creative .flickity-page-dots .dot:after{
    background-color: var(--body-items-color) !important;
}

#header.sombra{
    box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
}

.top-menu i{
    opacity: 50%;
}

#mainMenu > .container > nav > ul > li > a {
    padding: 10px 8px;
    font-weight: var(--menu-font-weight);
    letter-spacing: var(--menu-letter-spacing);
    text-transform: none;
}

/* Mismos selectores que abajo pero SIN ".container" en la cadena (a
   propósito): con ".container" esta regla quedaba más específica que la de
   html_header() (font-size: menu_size !important), que va después en el
   documento pero con una especificidad ligeramente menor — y por
   especificidad, no por orden, esta ganaba siempre pase lo que pase,
   dejando fijo el tamaño "de fábrica" de la tipografía (--menu-font-size)
   en vez del "Tamaño fuente" configurado en el admin. Igualando la
   especificidad, vuelve a decidir el orden y gana la de html_header(); esta
   se queda solo de red de seguridad por si esa variable no llegara a
   definirse. */
#mainMenu nav > ul > li > a, #header .item-menu a > i, #mainMenu nav > ul > li .dropdown-menu > li > a, #mainMenu button, #mainMenu nav > ul > li:hover > a, #header .header-extras nav > ul > li a {
    font-size: var(--menu-font-size) !important;
}

/* Submenú de opciones (#mainMenu nav > ul > li .dropdown-menu): su "top:auto"
   de fábrica (style.css) posiciona el desplegable donde caería en el flujo
   normal justo después del <a> de la opción, y ese <a> lleva un min-height
   igual a la altura configurada del menú (@media min-width:1025px, ver
   html_header()); con una altura de menú grande, el punto de esa caída
   queda muy por debajo del propio <a>, no pegado a su borde inferior. Fijar
   top:100% lo ancla de forma determinista al borde inferior de la opción de
   menú (su <li>, que ya es position:relative en style.css), sea cual sea la
   altura configurada. */
#mainMenu nav > ul > li .dropdown-menu {
    top: 100% !important;
}

/* El logo, header-extras, mainMenu-trigger y el <nav> del menú están en
   float. Sin "clearfix" su contenedor no crece para contenerlos y, si las
   opciones del menú pasan a dos líneas por falta de espacio, la segunda
   línea se sale del fondo de la barra y queda sobre la portada. Con esto el
   fondo crece con el contenido. */
#header .header-inner > .container::after,
#mainMenu > .container::after {
    content: "";
    display: table;
    clear: both;
}
#mainMenu > .container > nav > ul > li > a {
    display: flex;
    align-items: center;
}
/* El logotipo puede sobresalir bastante por debajo de su altura configurada
   (ver #logo img más abajo); si el menú no cabe en una línea, el propio
   #mainMenu debe pintarse por encima para que el texto no quede tapado. */
#mainMenu {
    position: relative;
    z-index: 2;
}

/* Los "campos extra" del menú (idiomas, RRSS...) van dentro de
   .header-extras, que se centraba con line-height en vez de con flexbox
   como el resto de la barra, así que no quedaban alineados con las
   opciones del menú. Igualamos el criterio de centrado. */
.header-extras {
    display: flex;
    align-items: center;
}
.header-extras > ul {
    align-items: center;
}
.header-extras nav {
    display: flex;
    align-items: center;
    height: 100%;
}
.header-extras nav > ul {
    display: flex;
    align-items: center;
    height: 100%;
}
.header-extras nav > ul > li {
    display: flex;
    align-items: center;
}
.header-extras .social-icons {
    display: flex;
    align-items: center;
}

.bloque_fotos .swiper {
    width: 100%;
    height: 100%;
}

.bloque_fotos .swiper-slide {
    text-align: center;
    font-size: 18px;
    background: #444;
    display: flex;
    justify-content: center;
    align-items: center;
}

.bloque_fotos img {
    display: block;
    width: 100%;
    object-fit: cover;
}

.portfolio-item .portfolio-description i {
    background-color: #fff;
    color: #484848;
    border-radius: 50%;
    color: #444;
    font-size: 18px;
    height: 40px;
    line-height: 40px !important;
    width: 40px;
    transition: all 250ms ease-in-out 0s;
    border: 1px solid #ededed;
}

.play-icon {
  position: absolute; /* Posiciona el icono de forma absoluta dentro de su padre */
  top: 50%; /* Mueve el icono a la mitad vertical */
  left: 50%; /* Mueve el icono a la mitad horizontal */
  transform: translate(-50%, -50%); /* Centra el icono perfectamente */
  width: 50px; /* Ajusta el tamaño del icono */
  height: 50px; /* Ajusta el tamaño del icono */
  background-color: rgba(0, 0, 0, 0.5); /* Fondo semi-transparente para el círculo del icono */
  border-radius: 50%; /* Hace que el fondo sea un círculo */
  display: flex;
  justify-content: center;
  align-items: center;
  cursor: pointer; /* Indica que es interactivo */
  z-index: 11;
}

/* O si usas un <i> con un icono de librería como FontAwesome */
.play-icon::before {
  content: "\f04b"; /* Código del icono de Play de FontAwesome */
  font-family: "Font Awesome 5 Free"; /* O la familia de tu librería */
  font-weight: 900; /* Peso del icono */
  color: white; /* Color del icono */
  font-size: 24px; /* Tamaño del icono */
}

button.btn.btn-outline:hover, button.btn.btn-outline:focus, button.btn.btn-outline:active, button.btn.btn-outline.active,
.btn:not(.close):not(.mfp-close).btn-outline:hover,
.btn:not(.close):not(.mfp-close).btn-outline:focus,
.btn:not(.close):not(.mfp-close).btn-outline:active,
.btn:not(.close):not(.mfp-close).btn-outline.active,
a.btn:not([href]):not([tabindex]).btn-outline:hover,
a.btn:not([href]):not([tabindex]).btn-outline:focus,
a.btn:not([href]):not([tabindex]).btn-outline:active,
a.btn:not([href]):not([tabindex]).btn-outline.active {
  background-color: transparent;
}

button.btn, .btn:not(.close):not(.mfp-close), a.btn:not([href]):not([tabindex]){
    font-weight: 500;
    letter-spacing: 0.3px;
}

.lista_idioma li span{
    line-height: 32px;
}

.header-extras nav > ul, #topbar nav > ul {
    list-style: none;
    padding: 0;
    margin: 0;
}

.header-extras nav > ul > li, #topbar nav > ul > li {
    float: left;
    border: 0;
    transition: all 0.3s ease;
    margin-left: 10px;
    position: relative;
}

.lista_idioma span {
    /* position: absolute;
    top: -9px;
    font-size: 9px;
    opacity: 1;
    right: -9px; */
    font-size: 15px;
}

.capa_superior{
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    width: 100%;
    height: 100%;
    content: " ";
    z-index: 0;
}

#topbar a {
    color: #3c4043 !important;
}

#topbar.dark a {
    color: #fff !important;
}

#topbar .lista_idioma ul > li a {
    color: #3c4043 !important;
}

#topbar .lista_idioma ul > li a:hover{
    opacity: 0.8;
}

#topbar a:hover {
    opacity: 0.8;
}

.social-icons.social-icons-colored-hover li a:hover {
    background-color: transparent !important;
}

.overlay-left .bg-overlay {
    border-radius: 0 0 706px 0;
    max-width: 650px;
}

#portada-section[data-fullwidth=true] .container {
    max-width: 100%;
    padding: 0 30px;
}

.bloque_marquesina{
    padding-top:0px;
    padding-bottom:0px;
}

.particles canvas {
    z-index: 9;
}

.marquee-container {
   width: 100%;
   padding: 15px 0;
 }

 .marquee-content {
    display: flex;
    white-space: nowrap;
    will-change: transform;
    animation: marquee 20s linear infinite;
    font-size: 30px;

    font-weight: 400;
    color: #D1D700;       
 }

 .marquee-item {
   flex: 0 0 auto;
   padding: 0 20px;
   font-size: 1.2rem;
 }

 @keyframes marquee {
   0% {
     transform: translateX(100%);
   }

   100% {
     transform: translateX(-100%);
   }
 }

 /* Optional: Pause animation on hover */
 .marquee-container:hover .marquee-content {
   animation-play-state: paused;
 }

 .portada *{
    color: var(--portada-text-color);
 }

.inspiro-slider .flickity-page-dots {
    z-index: 99;
}

/* Sombreado opcional de la imagen del bloque de texto (checkbox "Sombreado"
   en el admin). Antes iba ligado a la clase "rounded" de Bootstrap y se
   aplicaba siempre; ahora es una clase propia, independiente del admin. */
.imagen-sombra{
    box-shadow: 40px 80px 120px -40px rgba(0, 0, 0, 0.16);
}

/* Vídeo de YouTube/Vimeo asociado a una imagen (bloque de texto o galería):
   el popup de tipo "inline" de magnific-popup no trae, a diferencia del
   tipo "iframe", un ancho máximo por defecto, así que el vídeo salía a todo
   el ancho de la pantalla en vez de en un recuadro tipo modal.
   "position:relative" además de "max-width": con "closeBtnInside:true" (ver
   js/functions.js) el botón de cerrar (.mfp-close, position:absolute) se
   inyecta DENTRO de este mismo div; sin position:relative aquí, ese
   position:absolute se resuelve contra ".mfp-content" (que ocupa casi todo
   el ancho de la pantalla) en vez de contra el recuadro de 900px del
   vídeo, y la X aparecía pegada al borde derecho de la pantalla en vez de
   la esquina del vídeo. */
.video-embed-popup{
    max-width: 900px;
    margin: 40px auto;
    position: relative;
}

.portada_texto *{
    line-height: normal;
    text-align: center;
    /* margin: 0;
    padding: 0;     */
}

.portada p{
    margin: 0;
}

.portada .shape-divider {
    z-index: 100 !important;
}

#particles-dots {
    z-index: 1;
}

.portada.portada2{
    max-height: 200px;
    min-height: 200px;
}




/* ============================================================== 
// JAVASCRIPT 
// ==============================================================  */

.permanent-marker {
    font-family: "Permanent Marker", cursive;
    font-weight: 400;
    font-style: normal;
}

.notable {
    font-family: "Notable", sans-serif;
    font-weight: 400;
    font-style: normal;
}
.germania {
    font-family: "Germania One", system-ui;
    font-weight: 400;
    font-style: normal;
}
.rubik {
    font-family: "Rubik Glitch", system-ui;
    font-weight: 400;
    font-style: normal;
}
.bungee{
    font-family: "Bungee Inline", sans-serif;
    font-weight: 400;
    font-style: normal;
}

.inter {
    font-family: "Inter", sans-serif;
    font-optical-sizing: auto;
    font-weight: 400;
    font-style: normal;
}
.oswald{
    font-family: "Oswald", sans-serif;
    font-optical-sizing: auto;
    font-weight: 400;
    font-style: normal;
}

.arvo{
    font-family: "Arvo", serif;
    font-weight: 400;
    font-style: normal;
}

.arvo-italic {
    font-family: "Arvo", serif;
    font-weight: 400;
    font-style: italic;
}
.maven {
    font-family: "Maven Pro", sans-serif;
    font-optical-sizing: auto;
    font-weight: 400;
    font-style: normal;
}

/* La altura del logotipo se configura en el admin (el ancho es siempre
   automático, proporcional a la imagen). Esa altura puede ser mayor que la
   altura configurada del menú: el contenedor #logo tiene overflow visible y
   centra la imagen verticalmente con flexbox (en vez de con position:
   absolute, para que la imagen siga aportando su ancho real al contenedor,
   que ya no tiene un ancho fijo en px), así que si el logo es más alto
   sobresale por igual arriba y abajo en vez de empujar el contenido
   siguiente. */
#header .header-inner #logo, #header #header-wrap #logo {
    display: flex;
    align-items: center;
    overflow: visible;
    width: auto;
}
/* La imagen es "inline" por defecto, así que dentro del span .logo-default
   (que hereda font-size: 40px de style.css) el navegador reserva una caja de
   línea del alto de ese texto y la alinea sobre su línea base, dejando un
   hueco fantasma (el descendente de la fuente) debajo. Eso hacía que
   .logo-default fuera más alto que la propia imagen y que ésta quedara
   pegada abajo en vez de centrada. Con display:block la imagen deja de
   participar en ese cálculo de línea y .logo-default se ajusta exactamente
   a su altura. */
#header .header-inner #logo img, #header #header-wrap #logo img {
    display: block;
    width: auto;
    max-width: none;
}

.bloque_datos .bg-overlay{
    mix-blend-mode: multiply;
}

.js-background-video, .js-background-video #yt-player {
    top: -100%;
    height: 300%;
}

.bg-overlay-izquierda {
    border-radius: 0 0 706px 0;
    max-width: 650px;
}

.custom_boton{
    font-weight: 500;
}

.header-extras  ul{
    column-gap : 6px;
}

/* El borde real (una versión aclarada del color de texto configurado, fija
   y ajena al hover) lo fuerza html_header() con !important; aquí solo
   queda un valor de respaldo por si esa variable no estuviera definida.
   Sin sombreado ni ningún otro efecto propio en :hover: el cambio a
   hover_color en el texto/icono ya lo cubre la regla compartida con el
   resto de opciones del menú ("#header .header-extras nav > ul > li
   a:hover", en html_header()), que alcanza a .boton-idioma por ser
   descendiente de esa lista. */
.boton-idioma{
    padding: 7px;
    border: solid 1px rgba(0, 0, 0, .15);
    border-radius: 50px;
}

/* El botón de idioma con banderas (lista_idioma) reutiliza el componente
   ".p-dropdown" del tema, que por defecto también se abre al pasar el ratón
   (":hover"), además de al hacer clic (functions.js ya alterna la clase
   "dropdown-active" en el clic). Aquí anulamos esa apertura por hover: solo
   con ":not(.dropdown-active)" para no interferir si además está abierto
   por clic (con el ratón encima, cosa muy habitual justo después de
   pulsar). Clic para abrir Y cerrar, nunca hover. */
.lista_idioma:hover:not(.dropdown-active) .p-dropdown-content{
    opacity: 0 !important;
    visibility: hidden !important;
}

.fondo_fijo{
    background-attachment: fixed;
    background-position: center;
    background-repeat: no-repeat;
    background-size: cover;    
}

.titulo-seccion{
    font-size: 18px;
    font-weight: 600;
    margin-bottom: 0;
    text-align: center;
}

/* Tipo "Círculo": círculo fijo de 56x56 sin overflow:hidden ni ancho
   flexible; el texto (nowrap) empieza dentro del círculo y, al no caber,
   continúa visualmente fuera de él hacia la derecha, sin recortarse. */
.titulo-seccion-circulo {
    display: inline-flex;
    align-items: center;
    flex-shrink: 0;
    white-space: nowrap;
    width: 56px;
    height: 56px;
    padding: 0 0 0 18px;
    border: 1px solid #dee2e6;
    border-radius: 50%;
    margin: 0;
}

/* Tipo "Línea coloreada": barra corta bajo el título, con el color de items
   de Personalización. Por defecto centrada; los modificadores -izquierda/
   -derecha la anclan al mismo lado que la alineación del título. */
.titulo-seccion-linea {
    position: relative;
    padding-bottom: 12px;
    margin: 0;
}
.titulo-seccion-linea::after {
    content: "";
    position: absolute;
    left: 50%;
    bottom: 0;
    transform: translateX(-50%);
    width: 60px;
    height: 4px;
    border-radius: 2px;
    background-color: var(--titulo-linea-color, currentColor);
}
.titulo-seccion-linea-izquierda::after {
    left: 0;
    transform: none;
}
.titulo-seccion-linea-derecha::after {
    left: auto;
    right: 0;
    transform: none;
}

section td, section th{
    padding-right: calc(1.5rem * 0.5);
    padding-left: calc(1.5rem * 0.5);
}

.noticia .card-text {
    color: #FFF;
    background-color: rgba(17, 17, 17, 0.5);
    position: absolute;
    padding: 25px;
    z-index: 10;
    height: 100%;
    display: flex;
    flex-wrap: wrap;
    align-content: flex-end;
    -moz-transition: all 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
    -o-transition: all 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
    -webkit-transition: all 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
    transition: all 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
    top: 0;
}

.noticia .card-title {
    margin: 8px 0;
    font-weight: 400;
    font-size: 1.375em;
    color:#FFF;
}

.noticia .post-date {
    font-size: 0.875em;
    color:#FFF;
    opacity: 0.6;
}



/* ============================================================== 
// FOOTER 
// ==============================================================  */
footer{
    background-color: var(--footer-bg-color) !important;
    font-size: 16px;
}

footer, footer strong{
    color: var(--footer-text-color) !important;
}

footer .nav-link{
    color: var(--footer-link-color) !important;
    font-size: 16px;
}

footer .nav-link:hover, footer svg:hover{
    color: var(--footer-link-hover-color) !important;
}

footer strong{
    font-weight: 700;
}

footer svg{
    color: var(--footer-rrss-color) !important;
}

/* Selector de idioma (topbar y menú principal / header-extras): anclar el
   desplegable siempre justo debajo del botón. Dentro de contenedores flex
   (como el "header-extras" del menú, un <ul class="d-flex">) el cálculo de
   posición "automática" (top:auto) de .p-dropdown-content no es fiable y el
   desplegable puede aparecer mucho más abajo de lo esperado. Fijar top:100%
   lo ancla de forma determinista al borde inferior del botón, y el
   margin-top añade una separación visible respecto a ese botón. */
.p-dropdown .p-dropdown-content,
.p-dropdown ul.p-dropdown-content {
    top: 100% !important;
    margin-top: 16px !important;
    /* El desplegable trae de fábrica un borde gris fijo (#e4e6ef, ver
       style.css) ajeno a los colores configurados del sitio; lo sustituimos
       por el color de acento configurado (el mismo que usan otros detalles
       del sitio, como .separador) para que no desentone. */
    border-color: var(--body-items-color);
}

/* Topbar: el tema aplica un borde inferior por defecto que queda visible
   incluso con fondo de color propio; lo quitamos siempre. */
#topbar {
    border-bottom: 0;
}


/* Centrado vertical del contenido del topbar con flexbox en vez de
   line-height. Con line-height = altura configurada, cualquier elemento
   anidado (como el desplegable de idioma) heredaba esa altura como su
   propia caja de línea, y "top: 100%" se calculaba sobre esa caja inflada
   en vez de sobre el botón visible, dejando el desplegable muy por debajo.
   Con flexbox el topbar mantiene su altura fija y el contenido —incluida
   una imagen más alta que el topbar— se centra sin inflar las cajas de
   los elementos hijos. */
#topbar {
    /* !important necesario: las clases Bootstrap "d-xl-block"/"d-lg-block"
       que ya lleva #topbar para su visibilidad responsive imponen
       "display: block !important", que si no ganaría a esta regla. */
    display: flex !important;
    align-items: center;
    overflow: visible;
}
#topbar > .container:not(.d-none) {
    width: 100%;
}

/* Efecto hover automático a partir del color de texto configurado: no se
   pide un color de hover aparte, simplemente se atenúa el original. */
#topbar a:hover,
#topbar .top-menu > li > a:hover,
#topbar nav > ul > li a:hover,
#topbar .social-icons li a:hover {
    opacity: .65;
    transition: opacity .15s ease;
}

/* El icono de X es un <svg> (los demás iconos de redes son <i> de la fuente
   de iconos). El tema solo anima el "salto" en hover sobre <i>, así que X se
   quedaba quieto mientras el resto saltaba; le aplicamos la misma animación
   para que se comporte igual que los demás. */
#topbar .social-icons li:hover svg {
    animation: toTopFromBottom 0.3s forwards;
}

/* Topbar — bloque "Fecha + redes sociales": fecha arriba, iconos redondeados
   debajo, sin la animación de "salto" del icono al pasar el ratón. Día y mes
   van con el mismo formato marcado (como antes), solo con un pequeño espacio
   entre ambos para que no queden pegados. */
#topbar .topbar-fecha-rrss {
    line-height: 1.1;
    gap: 4px !important;
}
#topbar .topbar-fecha-rrss-fecha .dia {
    font-weight: 800;
}
#topbar .topbar-fecha-rrss-fecha .mes {
    font-weight: 800;
    margin-left: .12em;
}
#topbar .topbar-fecha-rrss-fecha .anio {
    font-weight: 500;
}
#topbar .topbar-fecha-rrss .social-icons {
    height: auto;
}
#topbar .topbar-fecha-rrss .social-icons ul {
    display: flex;
    justify-content: center;
}
#topbar .topbar-fecha-rrss .social-icons li {
    float: none;
}
/* Medidas exactas del ejemplo real (rocknrollmadridrun.com, widget Social
   Icons de Elementor): círculo de 35px de ancho, medido directamente en la
   web (no por cálculo), y 12px de separación entre botones. */
#topbar .topbar-fecha-rrss .social-icons li a {
    border-radius: 50%;
    height: 35px;
    width: 35px;
    line-height: 35px;
    font-size: 17px;
    margin: 0 12px 0 0;
    color: #fff !important;
}
#topbar .topbar-fecha-rrss .social-icons li:last-child a {
    margin-right: 0;
}
#topbar .topbar-fecha-rrss .social-icons li:hover i,
#topbar .topbar-fecha-rrss .social-icons li:hover svg {
    animation: none !important;
}
/* ".top-menu i { opacity: 50% }" (más arriba en este fichero) apaga por
   defecto cualquier icono dentro de un bloque .top-menu (pensada para los
   iconos de email/teléfono). Como este bloque también lleva la clase
   "top-menu", se lo aplicaba a los iconos de RRSS también. */
#topbar .topbar-fecha-rrss .social-icons i,
#topbar .topbar-fecha-rrss .social-icons svg {
    opacity: 1 !important;
}
/* Colores de marca actuales: X ya no es azul, es negro; Instagram se muestra
   en negro para que el conjunto luzca uniforme salvo Facebook. */
#topbar .topbar-fecha-rrss .social-icons .social-facebook a {
    background-color: #1877F2 !important;
}
#topbar .topbar-fecha-rrss .social-icons .social-twitter a {
    background-color: #000 !important;
}
#topbar .topbar-fecha-rrss .social-icons .social-instagram a {
    background: #000 !important;
}

/* Imagen de la barra superior: posición absoluta pegada arriba del todo
   (#topbar tiene position:relative por defecto en el tema), para que si es
   más alta que el topbar sobresalga solo por abajo en vez de centrarse. */
#topbar .topbar-imagen {
    position: absolute;
    top: 0;
}

/* ==============================================================
// BLOQUE TESTIMONIOS (blog-slider)
// ============================================================== */

.blog-slider {
    width: 95%;
    position: relative;
    max-width: 800px;
    margin: auto;
    background: #fff;
    box-shadow: 0px 14px 80px rgba(34, 35, 58, 0.2);
    padding: 25px;
    border-radius: 25px;
    height: 400px;
    transition: all 0.3s;
    /* Swiper añade la clase "swiper" a este mismo elemento y trae
       overflow:hidden (swiper-bundle.css), lo que recorta la foto que
       debe sobresalir por la izquierda (.blog-slider__img). Lo forzamos
       a visible para que se vea igual que en la referencia. */
    overflow: visible !important;
}
@media screen and (max-width: 992px) {
    .blog-slider {
        max-width: 680px;
        height: 400px;
    }
}
@media screen and (max-width: 768px) {
    .blog-slider {
        min-height: 400px;
        width: 100%;
        height: auto;
        margin: 80px auto 0px;
    }
}
@media screen and (max-width: 575px) {
    .blog-slider {
        min-height: 0;
        width: 100%;
        height: auto;
        margin: 80px auto 0px;
    }
}
@media screen and (max-height: 500px) and (min-width: 992px) {
    .blog-slider {
        height: 350px;
    }
}

/* Selector compuesto (.blog-slider__item.swiper-slide) a propósito: swiper
   -bundle.min.css define ".swiper-slide{display:block}" y se carga DESPUÉS
   de este fichero, así que con la misma especificidad (una sola clase)
   ganaba esa regla y anulaba el display:flex, apilando foto y texto. */
.blog-slider__item.swiper-slide {
    display: flex;
    align-items: center;
}
@media screen and (max-width: 768px) {
    .blog-slider__item.swiper-slide {
        flex-direction: column;
    }
}

.blog-slider__img {
    width: 300px;
    flex-shrink: 0;
    height: 300px;
    box-shadow: 4px 13px 30px 1px rgba(var(--body-items-color-rgb), 0.2);
    border-radius: 20px;
    transform: translateX(-80px);
    z-index: 1;
    overflow: hidden;
    background: #f5f5f5;
}
.blog-slider__img img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    border-radius: 20px;
}
@media screen and (max-width: 768px) {
    /* El "peek" de la foto sobre la tarjeta es intencional (mismo efecto
       que en escritorio, ahí hacia la izquierda con translateX), pero
       menos agresivo que antes (era -60%) y ya no se compensa con OTRO
       transform negativo en .blog-slider__content (ver más abajo): entre
       los dos se comían el hueco y la foto quedaba pegada al nombre. */
    .blog-slider__img {
        transform: translateY(-30%);
        width: 220px;
        height: 220px;
    }
}
@media screen and (max-width: 576px) {
    .blog-slider__img {
        width: 180px;
        height: 180px;
    }
}

.blog-slider__content {
    padding-right: 50px;
    margin-left: -2rem;
}
@media screen and (max-width: 768px) {
    /* Ya no lleva transform propio (antes translateY(-80px), que sumado al
       de la foto de arriba dejaba título y foto casi pegados). El único
       desplazamiento hacia arriba lo pone la foto; aquí solo el padding
       para separar el texto del borde de la tarjeta. */
    .blog-slider__content {
        text-align: left;
        padding: 1rem;
        margin-left: 0rem;
    }
    .blog-slider__content p {
        font-size: 1.05rem !important;
    }
}
@media screen and (max-width: 576px) {
    .blog-slider__content {
        padding: 1rem 0.5rem;
    }
    .blog-slider__content p {
        font-size: 1rem !important;
    }
}

.blog-slider__title {
    font-size: 24px;
    font-weight: 700;
    color: #0d0925;
    margin-bottom: 20px;
}
@media screen and (max-width: 576px) {
    .blog-slider__title {
        font-size: 18px;
        margin-bottom: 15px;
        margin-top: 1rem;
    }
}

.blog-slider__text {
    color: #4e4a67;
    margin-bottom: 10px;
    line-height: 1.5em;
}
.blog-slider__text a.nav-link {
    padding: 0;
    color: inherit;
}

.blog-slider__pagination {
    position: absolute !important;
    z-index: 21;
    right: 20px !important;
    width: 11px !important;
    text-align: center;
    left: auto !important;
    top: 50% !important;
    bottom: auto !important;
    transform: translateY(-50%);
}
@media screen and (max-width: 768px) {
    /* En escritorio va position:absolute con un top:50% relativo a la
       altura fija de .blog-slider (400px). En móvil esa altura es "auto"
       (se ajusta al texto, que puede tener cualquier longitud), así que un
       "top" en píxeles fijos no tiene ningún punto de referencia fiable —
       se acababa superponiendo al nombre/texto según lo largo que fuera el
       testimonio. En flujo normal (position:static), la paginación queda
       siempre justo debajo de todo el contenido, sea cual sea su alto. */
    .blog-slider__pagination {
        position: static !important;
        transform: none;
        margin-top: 20px;
        margin-bottom: 10px;
        width: 100% !important;
        display: flex;
        justify-content: center;
        align-items: center;
    }
}
.blog-slider__pagination.swiper-pagination-bullets .swiper-pagination-bullet {
    margin: 8px 0;
}
@media screen and (max-width: 768px) {
    .blog-slider__pagination.swiper-pagination-bullets .swiper-pagination-bullet {
        margin: 0 5px;
    }
}
.blog-slider__pagination .swiper-pagination-bullet {
    width: 11px;
    height: 11px;
    display: block;
    border-radius: 10px;
    background: #062744;
    opacity: 0.2;
    transition: all 0.3s;
}
.blog-slider__pagination .swiper-pagination-bullet-active {
    opacity: 1;
    background: var(--body-items-color);
    height: 30px;
    box-shadow: 0px 0px 20px rgba(var(--body-items-color-rgb), 0.3);
}
@media screen and (max-width: 768px) {
    .blog-slider__pagination .swiper-pagination-bullet-active {
        height: 11px;
        width: 30px;
    }
}

/* Efectos hover de "Varias columnas" / "Cards". */

/* Capa superpuesta para oscurecer/aclarar: por encima de cualquier fondo
   (color o imagen), en vez de un background-color que una imagen taparía. */
.columna-hover-capa {
    position: absolute;
    inset: 0;
    z-index: 0;
    opacity: 0;
    transition: opacity 0.3s ease;
    pointer-events: none;
}
.columna-hover-capa-oscurecer {
    background-color: rgba(46, 60, 95, 0.5);
}
.columna-hover-capa-aclarar {
    background-color: rgba(255, 255, 255, 0.35);
}
.columna-hover-oscurecer:hover .columna-hover-capa-oscurecer,
.columna-hover-aclarar:hover .columna-hover-capa-aclarar {
    opacity: 1;
}

/* La capa superior propia de la tarjeta (.section-overlay) se ve por
   defecto; mientras dura el hover de "Oscurecer" la sustituye la capa fija
   de arriba, y al salir el ratón vuelve a verse la capa superior propia. */
.columna-hover-oscurecer .section-overlay {
    transition: opacity 0.3s ease;
}
.columna-hover-oscurecer:hover .section-overlay {
    opacity: 0 !important;
}

.columna-hover-ampliar {
    overflow: hidden;
}
.columna-hover-ampliar .columna-bg {
    transition: transform 0.4s ease;
}
.columna-hover-ampliar:hover .columna-bg {
    transform: scale(1.08);
}
.columna-hover-elevar {
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.columna-hover-elevar:hover {
    transform: translateY(-8px);
    box-shadow: 0 16px 30px rgba(0, 0, 0, 0.2);
}
.columna-hover-grises .columna-bg {
    transition: filter 0.4s ease;
    filter: grayscale(100%);
}
.columna-hover-grises:hover .columna-bg {
    filter: grayscale(0%);
}

/* "Sombreado": atributo permanente del bloque tipo Cards, no un hover — un
   leve sombreado alrededor de cada tarjeta con el color de items. */
.columna-sombreado {
    box-shadow: 0 8px 20px rgba(0, 0, 0, 0.25);
}

/* ----------------------------------------------------------------
   Menú: ajustes específicos para móvil (mismo breakpoint que el resto del
   menú responsive del tema, ver style.css).
   - El icono del menú (mainMenu-trigger-group) no ocupa más del 70% del
     ancho. Es lo único que hay en esa fila de la cabecera, cerrada o
     abierta: no cambia de sitio al abrir el panel.
   - .header-extras (idiomas, RRSS...) no se muestra en móvil: esos mismos
     campos se reubican DENTRO del panel del menú móvil, no en la cabecera
     (ver más abajo). El idioma NO va en la cabecera/mainMenu-trigger-group
     a propósito: esa fila comparte ancho con el logo y, con varios idiomas
     en texto (IDIOMA_TX), no le cabía y saltaba de línea invadiendo visualmente
     la cabecera. Dentro del panel tiene todo su ancho (hasta 420px) sin
     competir con nada.
   - El container del header lleva el padding horizontal de un "px-2".
   - La altura del menú es la configurada (#header ya la fuerza sin media
     query, ver html_header()); aquí solo centramos verticalmente todos los
     elementos de esa fila.
   - El logo respeta su altura configurada (logo_height, ver css_dinamico.php)
     igual que en escritorio: #logo usa flex + overflow:visible para poder
     sobresalir por igual arriba y abajo de la fila del menú en vez de
     recortarse con el max-height:80px que impone style.css (tema base) en
     este mismo breakpoint.
   - El logo se sitúa en la posición configurada (igual que en escritorio) y
     el icono va al lado contrario (izquierda si el logo está a la derecha;
     derecha en cualquier otro caso).
----------------------------------------------------------------- */

/* Menú extra y RRSS (dentro de "#mainMenu > .container > nav") e idioma
   (dentro de "#mainMenu > .container > .mainMenu-panel-top"), todos
   reubicados DENTRO del panel del menú móvil y nunca en la cabecera/
   mainMenu-trigger-group: ocultos por defecto (escritorio); la media query
   de abajo los muestra solo con el panel abierto. Van antes de la media
   query para que esas reglas más específicas los puedan
   mostrar sin pelear por especificidad. */
.mainMenu-extra-movil,
.mainMenu-rrss-movil,
.mainMenu-idioma-movil,
.mainMenu-panel-top {
    display: none;
}

@media (max-width: 1024px) {
    #header .header-inner > .container::after,
    #mainMenu > .container::after {
        content: none;
    }

    #header .header-inner,
    #header .header-inner > .container {
        display: flex;
        align-items: center;
        flex-wrap: wrap;
    }

    #header .header-inner > .container {
        position: relative;
        padding-left: 1rem !important;
        padding-right: 1rem !important;
    }

    #header #logo {
        position: static !important;
        float: none !important;
        width: auto !important;
        margin: 0 !important;
        padding: 0 !important;
        text-align: left !important;
        left: auto !important;
        right: auto !important;
        display: flex !important;
        align-items: center;
        overflow: visible;
    }
    #header #logo > a img {
        max-height: none;
        padding-bottom: 0 !important;
    }

    .header-extras {
        display: none !important;
    }

    #mainMenu-trigger-group {
        /* position:relative (no "static") + z-index para que el icono se
           mantenga siempre por encima del panel: es hermano de #mainMenu
           dentro de #header, así que su z-index compite directamente con
           el de #mainMenu (ver más abajo), no con el de #header como
           ancestro común. */
        position: relative !important;
        z-index: 10070 !important;
        float: none !important;
        height: auto !important;
        max-width: 70%;
        display: flex;
        align-items: center;
        gap: 24px;
    }

    #mainMenu-trigger {
        /* En escritorio #mainMenu-trigger lleva "height: 80px" (ver
           style.css), pensado para cuando era él mismo el hijo directo del
           flex de la cabecera. Ahora que vive dentro de #mainMenu-trigger-group
           hay que neutralizarlo aquí igual que antes, o el icono (42px)
           queda arriba del todo de esa caja de 80px en vez de centrado. */
        height: auto !important;
        flex-shrink: 0;
    }

    /* Con el panel abierto, el icono de la cabecera se oculta (sigue
       ocupando su sitio, para que el logo no salte, pero no se ve ni se
       puede pulsar): el cierre pasa a ser cosa exclusiva de .mainMenu-close,
       dentro del propio panel. Si no, se veían dos X a la vez (esta,
       convertida en X por "toggle-active" en style.css, y la del panel).
       pointer-events:none también en el CONTENEDOR (no solo en el <a> de
       dentro): #mainMenu-trigger-group tiene z-index:10070 (por encima del
       panel, z-index:10050) y, aunque su contenido esté invisible, el propio
       div seguía "robando" el clic en esa zona (comprobado con
       elementFromPoint) en vez de dejarlo pasar al botón de cerrar de
       debajo. */
    body.mainMenu-open #mainMenu-trigger-group {
        pointer-events: none;
    }
    body.mainMenu-open #mainMenu-trigger {
        visibility: hidden;
        pointer-events: none;
    }

    /* Idioma: DENTRO de .mainMenu-panel-top (ver funciones_html.php y más
       arriba en este mismo fichero), a la izquierda del botón de cerrar,
       ambos dentro de #mainMenu. No tiene relación con la cabecera/icono
       de apertura, que no cambia de sitio al abrir. Solo tiene sentido con
       el panel abierto (ver también "display:none" por defecto, arriba
       del todo de este fichero). */
    body.mainMenu-open .mainMenu-idioma-movil {
        display: flex !important;
        align-items: center;
        gap: 14px;
    }
    /* El <nav><ul> que envuelve el botón de idioma es marcado reutilizado
       del selector de escritorio (pensado para vivir dentro de
       ".header-extras", con su propio contexto de flex/float ya resuelto
       ahí). Metido tal cual aquí dentro, esa cadena nav>ul>li>.p-dropdown
       (con "float:left" de fábrica en .p-dropdown, ver style.css) generaba
       una descoordinación real entre el layout calculado y lo pintado en
       pantalla (comprobado con getBoundingClientRect + muestreo de
       píxeles: el botón "existía" con posición y color correctos pero no
       llegaba a pintarse). display:contents en nav/ul/li los saca de la
       ecuación por completo — dejan de generar caja propia y su contenido
       (el <li> con el botón, o varios <li> en el caso de Idioma-Texto)
       pasa a comportarse como hijo directo de este flex container, sin
       ninguna capa intermedia con float de por medio. */
    .mainMenu-idioma-movil nav,
    .mainMenu-idioma-movil nav > ul {
        display: contents !important;
    }
    .mainMenu-idioma-movil nav > ul > li {
        list-style: none;
        float: none !important;
    }
    /* .p-dropdown (el botón con desplegable, variantes IDIOMA/IDIOMA_BANDERAS)
       es hijo del <li> — no un flex item directo de .mainMenu-idioma-movil
       — así que su "float:left" de fábrica (style.css) no queda neutralizado
       solo por el flex de más arriba; hay que anularlo aquí explícitamente. */
    .mainMenu-idioma-movil .p-dropdown {
        float: none !important;
    }

    #mainMenu {
        order: 3;
        flex: 0 0 100%;
    }

    /* Logo a la izquierda (por defecto) o centro: el icono va a la derecha. */
    #header:not(.header-logo-right) #logo {
        order: 1;
    }
    #header:not(.header-logo-right) #mainMenu-trigger-group {
        order: 2;
        margin-left: auto;
    }

    /* Logo a la derecha: el icono va a la izquierda. */
    #header.header-logo-right #mainMenu-trigger-group {
        order: 1;
        margin-left: auto;
    }
    #header.header-logo-right #logo {
        order: 2;
        margin-left: auto;
    }

    /* Logo centrado: se centra de forma independiente al icono, que sigue a
       la derecha (caso "resto de casos" anterior). */
    #header.header-logo-center #logo {
        position: absolute;
        left: 50%;
        transform: translateX(-50%);
    }

    /* ------------------------------------------------------------
       Panel deslizante del menú (sustituye al acordeón que despliega el
       tema por defecto debajo de la cabecera; ver js/custom.js, que
       sustituye el manejador de click del icono para abrir/cerrar este
       panel en vez de animar el "min-height" original).
       - Se abre desde el mismo lado en el que está el icono que lo abre
         (en #header), pero una vez abierto es autosuficiente: su propia
         cabecera interna (.mainMenu-panel-top, con el idioma y el botón de
         cerrar .mainMenu-close) y el <nav> con las opciones no dependen en
         nada de #header/el logo (antes sí, vía una altura medida por JS).
       - Ocupa casi toda la pantalla (ancho 88vw, con un máximo en pantallas
         grandes) y toda la altura.
       - #mainMenu > .container es una columna flex: .mainMenu-panel-top
         (alto fijo a su contenido) arriba y <nav> (el resto: opciones +
         extra + RRSS) ocupando el resto con su propio scroll, que nunca
         puede "subir" por detrás de la cabecera del panel.
       ------------------------------------------------------------ */
    body.mainMenu-open {
        /* position:fixed (no solo overflow:hidden) para bloquear también el
           scroll táctil de fondo en iOS/Android; ver js/custom.js, que fija
           "top" a la posición de scroll actual y la restaura al cerrar. */
        position: fixed !important;
        left: 0;
        right: 0;
        width: 100%;
        overflow: hidden;
    }

    body.mainMenu-open #header {
        position: fixed !important;
        top: 0 !important;
        left: 0 !important;
        right: 0 !important;
        z-index: 10060 !important;
    }

    #mainMenu {
        /* El fondo (mismo color que el menú) se fija en funciones_html.php,
           ya que depende de la configuración de cada web. */
        position: fixed !important;
        top: 0 !important;
        bottom: 0 !important;
        height: 100vh !important;
        max-height: none !important;
        width: 88vw !important;
        max-width: 420px !important;
        z-index: 10050 !important;
        overflow: hidden !important;
        transition: transform .35s ease !important;
        box-shadow: 0 0 25px rgba(0, 0, 0, .25);
    }

    /* "#header .container { position: relative }" (style.css) también
       alcanza a este .container, por ser #mainMenu descendiente de #header:
       eso lo convertía en el ancestro posicionado de nav (más abajo). Lo
       convertimos en columna flex propia: .mainMenu-panel-top (idioma + X,
       altura fija a su contenido) arriba y nav (el resto, con scroll
       propio) ocupando el resto — así el panel es autosuficiente, sin
       depender de la altura de #header/el logo para nada (antes se leía
       por JS, ver actualizarAlturaCabeceraMenuMovil en custom.js). */
    #mainMenu > .container {
        position: static !important;
        display: flex;
        flex-direction: column;
        height: 100%;
        overflow: hidden;
    }

    .mainMenu-panel-top {
        flex: 0 0 auto;
        display: flex;
        align-items: center;
        gap: 16px;
        padding: 20px 28px;
    }

    .mainMenu-close {
        margin-left: auto;
        padding: 8px;
        flex-shrink: 0;
        display: flex;
        align-items: center;
    }
    /* .lines-button trae "height:100%" de fábrica (style.css), pensado
       para heredar la altura de #mainMenu-trigger; aquí, sin ese
       contenedor, se le da una altura fija propia para que las líneas se
       vean con un tamaño razonable. */
    .mainMenu-close .lines-button {
        height: 24px;
    }

    #mainMenu > .container > nav {
        /* ">" en vez de espacio: el idioma trae su propio <nav> anidado
           (por su marcado, reutilizado del selector de idioma de
           escritorio); un selector descendiente "#mainMenu nav" también le
           pegaría a ESE nav interior. Ya no necesita position:absolute ni
           un "top" calculado: como hermano flex de .mainMenu-panel-top
           dentro de la columna de arriba, ocupa automáticamente todo el
           espacio restante y su overflow-y:auto le da scroll propio, sin
           que ese scroll pueda "subir" por detrás de la X ni del idioma. */
        flex: 1 1 auto;
        min-height: 0;
        margin: 0;
        padding: 0 28px 40px !important;
        overflow-y: auto !important;
        overflow-x: hidden !important;
        display: flex !important;
        flex-direction: column;
        /* El tema solo revela el <nav> (opacity/transform) cuando #mainMenu
           lleva la clase "menu-animate", añadida por la animación de
           acordeón original (js/functions.js). Nuestro panel ya no la usa
           (ver js/custom.js), así que se fuerza aquí directamente. */
        opacity: 1 !important;
        transform: none !important;
    }

    /* Lado por el que se despliega: el mismo en el que está el icono.
       Las reglas de apertura repiten el mismo selector "#header ... #mainMenu"
       (en vez de solo "body.mainMenu-open #mainMenu") para igualar su
       especificidad (dos ID) y poder ganarles siempre, tanto cerrado como
       abierto, independientemente del orden en la hoja. */
    #header:not(.header-logo-right) #mainMenu {
        right: 0 !important;
        left: auto !important;
        transform: translateX(100%) !important;
    }
    #header.header-logo-right #mainMenu {
        left: 0 !important;
        right: auto !important;
        transform: translateX(-100%) !important;
    }

    body.mainMenu-open #header:not(.header-logo-right) #mainMenu {
        transform: translateX(0) !important;
    }
    body.mainMenu-open #header.header-logo-right #mainMenu {
        transform: translateX(0) !important;
    }

    /* Menú extra y RRSS: solo tienen sentido dentro del panel abierto. */
    body.mainMenu-open .mainMenu-extra-movil {
        display: flex;
    }
    body.mainMenu-open .mainMenu-rrss-movil {
        display: block;
    }

    /* Fondo oscuro detrás del panel (no cierra al pulsarlo, es solo para dar
       contraste/foco; cerrar sigue siendo cosa del icono-X). Un pseudo-
       elemento de body evita tener que añadir un div nuevo solo para esto. */
    body.mainMenu-open::before {
        content: "";
        position: fixed;
        inset: 0;
        background: rgba(0, 0, 0, .45);
        z-index: 10040;
    }

    /* ------------------------------------------------------------
       Aspecto del contenido del panel: separación clara entre el bloque de
       opciones normales del menú, el menú extra (botones) y las RRSS, con
       líneas divisorias sutiles en vez de que todo quede pegado.
       ------------------------------------------------------------ */
    #mainMenu > .container > nav > ul > li {
        border-bottom: 1px solid rgba(0, 0, 0, .06);
    }
    #mainMenu > .container > nav > ul > li:last-child {
        border-bottom: none;
    }
    #mainMenu > .container > nav > ul > li > a {
        font-weight: 500;
    }

    .mainMenu-extra-movil {
        flex-direction: column;
        gap: 14px;
        margin-top: 20px !important;
        padding-top: 24px !important;
        border-top: 1px solid rgba(0, 0, 0, .08);
    }
    .mainMenu-extra-movil > li {
        margin-bottom: 0 !important;
    }
    .mainMenu-extra-movil .custom_boton {
        width: 100%;
    }

    .mainMenu-rrss-movil {
        padding-top: 24px;
        border-top: 1px solid rgba(0, 0, 0, .08);
    }
    .mainMenu-rrss-movil .rrss-movil-titulo {
        display: block;
        font-size: 12px;
        font-weight: 600;
        letter-spacing: .04em;
        text-transform: uppercase;
        color: #9a9a9a;
        margin-bottom: 12px;
    }
    .mainMenu-rrss-movil .social-icons ul {
        display: flex;
        gap: 18px;
        list-style: none;
        margin: 0;
        padding: 0;
    }
}
.mainMenu-rrss-movil {
    margin-top: auto;
}

/* ----------------------------------------------------------------
   Icono del menú móvil (#mainMenu-trigger): variantes seleccionables desde
   el admin (campo menu_icono_movil). El HTML/JS de base (tema) siempre es
   el mismo <a class="lines-button x [icono-XXX]"><span class="lines">, con
   el span .lines + sus pseudo-elementos ::before/::after formando las 3
   rayas, y la clase toggle-active (añadida por functions.js al hacer clic)
   transformándolas en una X — eso no se toca, solo se re-skinea su aspecto
   en reposo.
   - "clasico": sin clase extra, usa el aspecto por defecto del tema.
   - El resto de variantes usan ":not(.toggle-active)" para que sus reglas
     dejen de aplicarse en cuanto se añade esa clase; así la animación a "X"
     (definida en style.css como ".x.toggle-active .lines[::before/::after]")
     no compite en especificidad con estas reglas (que al ir con #id la
     ganarían siempre) y el morfismo a X queda intacto en las 4 variantes.
   - Todas las variantes comparten el mismo tamaño de botón (42x42, ver
     regla base justo abajo), tengan borde/fondo o no: así el icono queda
     siempre en la misma posición al cambiar de variante, en vez de que las
     que sí fijaban width/height (círculo, cuadrado, relleno) ocupen un
     hueco distinto al de las que no lo hacían.
----------------------------------------------------------------- */

/* Base común a las 8 variantes: mismo tamaño de botón siempre. */
#mainMenu-trigger a.lines-button {
    width: 42px;
    height: 42px;
    box-sizing: border-box;
}

/* El tema base desplaza .lines "top: -4px" (ver style.css): un ajuste
   pensado para el botón pequeño/ajustado al contenido de origen, que con
   las 3 rayas (o antes/después) queda descentrado dentro de nuestro botón
   fijo de 42px. Como ::before/::after se posicionan respecto a la caja de
   .lines, basta con recentrar .lines (top: 0) para que las 3 rayas/puntos
   se centren en bloque, sin tocar su separación relativa entre sí. */
#mainMenu-trigger a .lines {
    top: 0;
}

/* Círculo: mismas rayas de siempre, dentro de un botón circular. Solo en
   reposo: al abrir el panel (toggle-active) se quita el borde y se ve solo
   la X en color. */
#mainMenu-trigger a.icono-circulo:not(.toggle-active) {
    border-radius: 50%;
    border: 1.5px solid currentColor;
}

/* Rayas decrecientes: ancho decreciente de arriba a abajo (before = raya
   inferior, .lines = raya central, after = raya superior; ver style.css). */
#mainMenu-trigger a.icono-decreciente:not(.toggle-active) .lines {
    width: 18px;
}
#mainMenu-trigger a.icono-decreciente:not(.toggle-active) .lines::before {
    width: 12px;
}
#mainMenu-trigger a.icono-decreciente:not(.toggle-active) .lines::after {
    width: 24px;
}

/* Grueso redondeado: rayas más gruesas y muy redondeadas; se separan un
   poco más (8px en vez de 6px) para mantener el mismo hueco visual entre
   ellas al doblar su grosor. */
#mainMenu-trigger a.icono-grueso:not(.toggle-active) .lines,
#mainMenu-trigger a.icono-grueso:not(.toggle-active) .lines::before,
#mainMenu-trigger a.icono-grueso:not(.toggle-active) .lines::after {
    height: 4px;
    border-radius: 4px;
}
#mainMenu-trigger a.icono-grueso:not(.toggle-active) .lines {
    top: 0;
}
#mainMenu-trigger a.icono-grueso:not(.toggle-active) .lines::before {
    top: 8px;
}
#mainMenu-trigger a.icono-grueso:not(.toggle-active) .lines::after {
    top: -8px;
}

/* Rayas crecientes: lo contrario de "decreciente", ancho creciente de
   arriba a abajo (before = raya inferior, .lines = raya central, after =
   raya superior; ver comentario de "decreciente" más arriba). */
#mainMenu-trigger a.icono-creciente:not(.toggle-active) .lines {
    width: 18px;
}
#mainMenu-trigger a.icono-creciente:not(.toggle-active) .lines::before {
    width: 24px;
}
#mainMenu-trigger a.icono-creciente:not(.toggle-active) .lines::after {
    width: 12px;
}

/* Cuadrado: mismo tratamiento que "círculo" pero con esquinas redondeadas
   en vez de circulares. Solo en reposo: al abrir el panel (toggle-active)
   se quita el borde y se ve solo la X en color. */
#mainMenu-trigger a.icono-cuadrado:not(.toggle-active) {
    border-radius: 10px;
    border: 1.5px solid currentColor;
}

/* Puntos: las 3 rayas se convierten en 3 puntos apilados (mismo reajuste
   de separación vertical que "grueso" al cambiar su grosor). */
#mainMenu-trigger a.icono-puntos:not(.toggle-active) .lines,
#mainMenu-trigger a.icono-puntos:not(.toggle-active) .lines::before,
#mainMenu-trigger a.icono-puntos:not(.toggle-active) .lines::after {
    width: 5px;
    height: 5px;
    border-radius: 50%;
}
#mainMenu-trigger a.icono-puntos:not(.toggle-active) .lines {
    top: 0;
}
#mainMenu-trigger a.icono-puntos:not(.toggle-active) .lines::before {
    top: 8px;
}
#mainMenu-trigger a.icono-puntos:not(.toggle-active) .lines::after {
    top: -8px;
}

/* Relleno: círculo con fondo sólido (color del menú) y rayas en blanco
   para mantener el contraste sobre ese fondo. Solo en reposo: al abrir el
   panel (toggle-active) se quita el círculo y se ve solo la X en color,
   directamente sobre el fondo blanco del panel. */
#mainMenu-trigger a.icono-relleno:not(.toggle-active) {
    border-radius: 50%;
    background-color: currentColor;
}
#mainMenu-trigger a.icono-relleno:not(.toggle-active) .lines,
#mainMenu-trigger a.icono-relleno:not(.toggle-active) .lines::before,
#mainMenu-trigger a.icono-relleno:not(.toggle-active) .lines::after {
    background-color: #fff;
}

/* resultados.php: mismo estilo que la página de referencia
   (circuitos/vihalf/resultados.php) pero con el color de items configurable
   de la web en vez de los colores fijos del tema (--bs-primary/secondary). */

/* Este tema no incluye el CSS del componente ".accordion" de Bootstrap (solo
   el JS de collapse, vía plugins.js): sin estas reglas, ".accordion-button"
   se ve como un <button> nativo sin estilo (ancho ajustado al contenido, sin
   flex ni padding) en vez de una barra completa con flecha. */
/* Sin ".accordion-item": cada ejercicio va sin borde ni tarjeta alrededor
   (como en la referencia), el espaciado entre ejercicios lo da el "gap" de
   ".resultados-listado" en vez de un margin-bottom por ejercicio (que
   dejaría más hueco tras el último que antes del primero). */
.resultados-listado {
    display: flex;
    flex-direction: column;
    gap: 1.5rem;
    /* Además del padding simétrico del <section> (p-t-40/p-b-40, 40px cada
       uno): con esto el margen antes del primer ejercicio queda en 48px y el
       de después del último en 64px, como en la página de referencia. */
    margin-top: 8px;
    margin-bottom: 24px;
}
.accordion-header {
    margin: 0;
}
.accordion-button {
    display: flex;
    align-items: center;
    width: 100%;
    /* Tamaño de letra en px (no rem): el rem de esta web equivale a 14px, no
       a los 16px "de fábrica" de la página de referencia — con rem el texto
       saldría más pequeño que en ella pese a ser "el mismo" valor. Padding a
       0 como en la referencia: el aire alrededor de la insignia lo pone su
       propio padding/margin (ver ".resultados-year-mark" más abajo), no el
       botón. */
    padding: 0;
    font-size: 16px;
    text-align: left;
    /* Un tono apenas distinto del fondo configurado de la web: lo justo para
       diferenciar la barra de cada ejercicio del fondo de la página, sin que
       destaque como un elemento propio. */
    background-color: color-mix(in srgb, var(--body-bg-color) 94%, #000) !important;
    border: 0;
    cursor: pointer;
    transition: background-color .2s ease;
}
/* Sin flecha: la página de referencia no la tiene (no carga el CSS del
   componente ".accordion" de Bootstrap, así que su ".accordion-button::after"
   no pinta nada); la de aquí era una adición propia, no algo que copiar. */
.accordion-body {
    padding: 1.25rem;
}

/* Año destacado dentro del <mark> del acordeón: el más reciente usa el color
   de items principal, el resto el secundario. rgba+variable "-rgb" para
   reproducir el mismo look "--bs-bg-opacity:.75" (fondo semitransparente)
   que usaba el <mark class="bg-primary"> de la referencia. */
/* El color (fondo/texto) lo pone la clase "boton1"/"boton2" que se añade
   junto a esta en el HTML (mismos colores que "Botón tipo 1"/"Botón tipo 2"
   de Otras configuraciones, ver css_boton() en css_dinamico.php); aquí solo
   el aspecto de insignia. */
.resultados-year-mark,
.resultados-year-mark-secundario {
    display: inline-block;
    /* 8px fijos en vez de las clases "p-2 mx-2 m-2" del HTML (0.5rem cada
       una): esta web tiene el rem a 14px en vez de los 16px "de fábrica" de
       la referencia, así que 0.5rem no da los mismos 8px que allí. Con
       !important porque esas clases también llevan !important. */
    padding: 1px 8px !important;
    margin: 8px !important;
}
/* Sin esquinas redondeadas en la insignia del año, aunque "Botón tipo
   1"/"Botón tipo 2" (clases "boton1"/"boton2", ver css_boton() en
   css_dinamico.php) tengan configurado su propio radio — su regla de
   border-radius lleva !important, así que hace falta iguales o más clases
   en el selector para ganarle. */
.resultados-year-mark.boton1,
.resultados-year-mark-secundario.boton2 {
    border-radius: 0 !important;
}
.resultados-year-mark h5,
.resultados-year-mark-secundario h5 {
    font-size: 20px;
    margin: 0 0 8px;
    /* El tema fija "h5{color:#1e2022}" (propio del elemento, no heredado):
       sin esto anulaba el blanco/oscuro de "boton1"/"boton2" puesto en el
       <mark> padre, porque un color declarado en el propio h5 gana siempre
       a la herencia, tenga o no !important el del padre. */
    color: inherit;
}

/* Nombre del ranking (cabecera de la tabla de podio): en la referencia usa
   ".text-primary" (color fijo del tema); aquí el color de items. */
.resultados-ranking-nombre {
    color: var(--body-items-color);
}

/* ".table" de Bootstrap fija su propio "color" (gris fijo del tema, ver
   plugins.css) en vez de heredar el de "body" — sin esto, el texto de las
   tablas de podio (posición, nombre, club, tiempo) no seguía el color de
   texto configurado para la web. */
.resultados-listado .table {
    color: var(--body-text-color) !important;
    /* 24px como en la referencia: aquí ".mb-4" (1.5rem) se queda en 21px por
       el rem a 14px de esta web en vez de los 16px de allí. */
    margin-bottom: 24px !important;
}
/* Padding de celda a 8px (como en la referencia: allí ".table" usa 0.5rem
   sobre una base de 16px; aquí ".table" trae 1rem de fábrica, que además
   sobre una base de 14px da 14px, no los 8px de la referencia). Grosor de la
   línea normal igual que en la referencia (1px); el color, en vez del gris
   fijo del tema, en función del color de texto configurado para la web. */
.resultados-listado .table > :not(caption) > * > * {
    padding: 8px !important;
    border-bottom-width: 1px !important;
    border-bottom-color: color-mix(in srgb, var(--body-text-color) 20%, transparent) !important;
}
/* Línea divisoria entre cabecera y cuerpo (clase "table-group-divider" del
   HTML): en la referencia es más gruesa (2px) y más marcada que las líneas
   normales entre filas; este tema no trae CSS propio para esa clase, así
   que sin esto no se veía ninguna línea ahí. */
.resultados-listado .table tbody.table-group-divider {
    border-top: 2px solid var(--body-text-color) !important;
}

/* Botón de clasificación (enlace/archivo pdf): mismo patrón que
   ".btn-outline-secondary" en la referencia (fondo transparente, borde de
   color, el texto solo cambia de color en hover) pero con los colores de la
   web en vez del secondary fijo del tema, y el mismo radio que "Botón tipo
   1" (--boton1-radius, ver css_boton() en css_dinamico.php). !important
   porque "all.min.css" (bundle de Bootstrap) se carga DESPUÉS de este
   fichero y redefine ".btn" con la misma especificidad — la propia página
   de referencia necesita el mismo !important para el mismo problema. */
.btn-resultados-clasificacion {
    background-color: transparent !important;
    color: var(--body-text-color) !important;
    border-color: var(--body-hover-color) !important;
    border-radius: var(--boton1-radius) !important;
    text-transform: none !important;
    font-size: var(--body-font-size) !important;
}
.btn-resultados-clasificacion:hover,
.btn-resultados-clasificacion:focus {
    background-color: transparent !important;
    color: var(--body-hover-color) !important;
    border-color: var(--body-hover-color) !important;
}

/* multimedia.php: card de la rejilla (imagen + capa oscurecida + texto en
   blanco + icono de vídeo/álbum), mismo patrón que la página de referencia
   (circuitos/vihalf/multimedia.php, clase ".gallery-item") pero con el
   color de items/hover configurables de la web en vez de los fijos del
   tema. La foto en sí ya queda oscurecida por su opacidad reducida sobre el
   fondo negro del propio ".gallery-item" (no hace falta una capa aparte). */
.gallery-item {
    position: relative;
    height: 220px;
    background: #000;
    cursor: pointer;
    display: flex;
    overflow: hidden;
    padding: 0;
    border-radius: .5rem;
}
.gallery-item img {
    position: relative;
    display: block;
    width: 105%;
    height: 100%;
    object-fit: cover;
    opacity: .5;
    transition: all 350ms ease-in-out;
}
.gallery-item:hover img {
    opacity: .3;
    transform: translate3d(10px, 0, 0) scale(1.15);
}
.gallery-item .gallery-item-caption {
    position: absolute;
    inset: 0;
    padding: 20px;
    color: #fff;
    text-align: left;
}
.gallery-item .gallery-item-caption > a {
    position: absolute;
    inset: 0;
}
.gallery-item h2 {
    position: relative;
    top: 1.75rem;
    margin: 0;
    z-index: 1;
    pointer-events: none;
    font-weight: 600;
    font-size: 1.4rem;
    color: #fff !important;
    overflow: hidden;
    text-shadow: -2px 1px 7px rgba(0, 0, 0, .8);
    padding: 12px 0;
    transition: all 350ms ease-in-out;
}
.gallery-item h2::after {
    content: "";
    position: absolute;
    bottom: 0;
    left: 0;
    width: 15%;
    height: 1px;
    background: var(--body-items-color);
    transition: transform .3s;
    transform: translate3d(-100%, 0, 0);
}
.gallery-item:hover h2 {
    top: .25rem;
}
.gallery-item:hover h2::after {
    transform: translate3d(0, 0, 0);
}
.gallery-item p {
    position: relative;
    margin: 0;
    z-index: 1;
    pointer-events: none;
    letter-spacing: 1px;
    font-size: 13px;
    color: #fff !important;
    padding: 12px 0;
    opacity: 0;
    transition: opacity .35s, transform .35s;
    transform: translate3d(10%, 0, 0);
}
.gallery-item:hover p {
    opacity: 1;
    transform: translate3d(0, 0, 0);
}
.gallery-item-icon {
    position: absolute;
    bottom: .35rem;
    right: .35rem;
    padding: .75rem;
    background: #fff;
    color: var(--body-items-color);
    font-size: 1.1rem;
    line-height: 1;
    transition: all 150ms ease-in;
}
.gallery-item:hover .gallery-item-icon {
    color: var(--body-hover-color);
    bottom: 1rem;
    right: 1rem;
}
.gallery-item.video .gallery-item-icon {
    background: var(--body-items-color);
    color: #fff;
    border-radius: 50%;
    box-shadow: 1px 0 20px 0 rgba(0, 0, 0, .75);
}
.gallery-item.video:hover .gallery-item-icon {
    background: var(--body-hover-color);
}

.noticia-detalle-imagen {
    width: 100%;
    max-height: 480px;
    object-fit: cover;
    border-radius: 4px;
    margin-bottom: 1.5rem;
}
.noticia-detalle .post-date {
    display: block;
    margin-bottom: .5rem;
}
.noticia-detalle h1 {
    margin-bottom: 1rem;
}
.noticia-detalle-resumen {
    font-size: 1.15rem;
    font-weight: 600;
    margin-bottom: 1.5rem;
}
.noticia-detalle-cuerpo {
    font-size: var(--body-font-size);
    line-height: 1.7;
}
.noticia-detalle-cuerpo img {
    max-width: 100%;
    height: auto;
}

/* Listado de noticias (noticias.php): buscador, toggle de vista, cards de
   igual tamaño y vista en lista horizontal. */
.noticias-buscador {
    position: relative;
    max-width: 380px;
    width: 100%;
}
.noticias-buscador .noticias-buscador-icono {
    position: absolute;
    left: 1.1rem;
    top: 50%;
    transform: translateY(-50%);
    color: rgba(0, 0, 0, .35);
    font-size: 1rem;
    pointer-events: none;
}
.noticias-buscador input.form-control {
    width: 100%;
    height: 48px;
    padding: .5rem 2.75rem .5rem 2.75rem;
    border-radius: 999px;
    border: 1px solid rgba(0, 0, 0, .12);
    background-color: #fff;
    box-shadow: 0 1px 3px rgba(0, 0, 0, .06);
    transition: border-color 150ms ease-in, box-shadow 150ms ease-in;
}
.noticias-buscador input.form-control:focus {
    outline: none;
    border-color: var(--body-items-color);
    box-shadow: 0 0 0 3px rgba(var(--body-items-color-rgb), .15);
}
.noticias-buscador-clear {
    position: absolute;
    right: .6rem;
    top: 50%;
    transform: translateY(-50%);
    width: 26px;
    height: 26px;
    display: flex;
    align-items: center;
    justify-content: center;
    border: none;
    border-radius: 50%;
    background: rgba(0, 0, 0, .08);
    color: rgba(0, 0, 0, .5);
    font-size: 18px;
    line-height: 1;
    cursor: pointer;
    transition: all 150ms ease-in;
}
.noticias-buscador-clear:hover {
    background: rgba(0, 0, 0, .18);
    color: rgba(0, 0, 0, .8);
}
.noticias-listado.cargando {
    opacity: .5;
    transition: opacity 150ms ease-in;
}
.noticias-vista-toggle {
    display: flex;
    gap: .5rem;
    flex-shrink: 0;
}
.noticias-vista-btn {
    width: 42px;
    height: 42px;
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid rgba(0, 0, 0, .15);
    border-radius: 4px;
    background: #fff;
    color: var(--body-text-color);
    cursor: pointer;
    transition: all 150ms ease-in;
}
.noticias-vista-btn:hover,
.noticias-vista-btn.active {
    background: var(--body-items-color);
    border-color: var(--body-items-color);
    color: #fff;
}

/* Vista cuadrícula: todas las imágenes con la misma relación de aspecto
   para que las cards midan siempre igual, sin depender del tamaño de la
   imagen subida. */
.noticias-listado .portfolio-image {
    aspect-ratio: 4 / 3;
}
.noticias-listado .portfolio-image img {
    height: 100%;
    object-fit: cover;
}

/* Vista lista: la columna pasa a ocupar todo el ancho y la card se
   convierte en una fila horizontal (imagen a la izquierda, texto a la
   derecha, sin la superposición oscura que usa la vista cuadrícula). */
.noticias-listado.vista-lista .noticia-col {
    flex: 0 0 100%;
    max-width: 100%;
}
.noticias-listado.vista-lista .portfolio-item-wrap {
    display: flex;
    align-items: stretch;
}
.noticias-listado.vista-lista .portfolio-image {
    flex: 0 0 260px;
    width: 260px;
    aspect-ratio: 4 / 3;
}
.noticias-listado.vista-lista .card-text {
    position: static;
    height: auto;
    width: 100%;
    background: #fff;
    color: var(--body-text-color);
    display: flex;
    flex-direction: column;
    justify-content: center;
    padding: 1.25rem 1.5rem;
}
.noticias-listado.vista-lista .card-title {
    color: var(--body-text-color) !important;
}
.noticias-listado.vista-lista .post-date {
    color: var(--body-text-color) !important;
    opacity: .6;
}
@media (max-width: 576px) {
    .noticias-listado.vista-lista .portfolio-item-wrap {
        flex-direction: column;
    }
    .noticias-listado.vista-lista .portfolio-image {
        width: 100%;
        flex-basis: auto;
    }
}

/* Paginación con los colores de marca del sitio */
.pagination .page-link {
    color: var(--body-text-color);
}
.pagination .page-item.active .page-link {
    background-color: var(--body-items-color);
    border-color: var(--body-items-color);
    color: #fff;
}
.pagination .page-item.disabled .page-link {
    opacity: .5;
}

