/* ==========================================================================
   ALARCOS — VARIANTE 9: "Oficial+"
   --------------------------------------------------------------------------
   Punto de partida distinto al de v1–v8: la web OFICIAL de producción
   (style.css, sin nitido en el <body>) mejorada página a página con el
   usuario (2026-09-16). Este fichero solo añade lo nuevo de cada página;
   no redefine la identidad. Desde el 2026-09-17 es la ÚNICA capa: las
   variantes 1–8 (nitido.css y sucesoras) se retiraron del ensayo y ninguna
   ruta emite ya marcado .n-*.

   INDEX · franja de cifras encima de "Últimas noticias": la que producción
   tiene oculta (iconos en cajas, fetch comentado), rehecha como texto:
   cifra grande en tabular-nums, etiqueta pequeña en versalitas, separadores
   finos. Los valores vienen SIEMPRE de stats.php.
   ========================================================================== */

/* ── Tokens de la v9 (unificación 2026-09-17) ─────────────────────────────
   Toda la hoja consume ESTOS tokens: no escribas hexadecimales ni sombras
   sueltas. Reutilizan la paleta de style.css (--alarcos-*) y añaden los
   neutros, las sombras y los radios que antes iban repetidos a mano. */
body.v9 {
    --v9-ink: var(--alarcos-dark, #1f2933);       /* titulares y texto principal */
    --v9-text: #4b5563;                           /* entradillas, descripciones */
    --v9-body: #2d3748;                           /* texto largo de lectura (artículo, bio) */
    --v9-muted: #64748b;                          /* metadatos, etiquetas */
    --v9-soft: #94a3b8;                           /* placeholders, iconos apagados */
    --v9-surface: #eef2f6;                        /* fondos suaves (chips, huecos) */
    --v9-surface-2: #f5f8fb;                      /* fondos de banda / panel claro */
    --v9-line: rgba(31, 41, 51, 0.10);            /* filete estándar */
    --v9-line-soft: rgba(31, 41, 51, 0.07);
    --v9-line-strong: rgba(31, 41, 51, 0.15);
    --v9-brand: var(--alarcos-blue);              /* azul de MARCA: trazos, bordes, degradados, iconos */
    --v9-action: #0b6fa4;                         /* azul de ACCIÓN para texto y rellenos con texto blanco:
                                                     5,5:1 sobre blanco (WCAG AA); el de marca da 3,3:1 */
    --v9-action-hover: #08608f;
    --v9-action-line: rgba(var(--alarcos-blue-value), 0.35);   /* borde de píldoras secundarias */
    --v9-green-ink: #26500a;                      /* verde legible sobre el verde de marca (4,9:1) y sus tintes */
    --v9-panel: var(--alarcos-dark, #1f2933);     /* paneles oscuros (slider, footer) */
    --v9-panel-2: #2d3748;
    --v9-gradient: linear-gradient(90deg, var(--alarcos-blue), var(--alarcos-green));
    --v9-shadow-sm: 0 4px 14px rgba(31, 41, 51, 0.06);
    --v9-shadow: 0 8px 24px rgba(31, 41, 51, 0.08);
    --v9-shadow-md: 0 10px 28px rgba(31, 41, 51, 0.12);
    --v9-shadow-lg: 0 16px 36px rgba(31, 41, 51, 0.14);
    --v9-shadow-action: 0 8px 20px rgba(var(--alarcos-blue-value), 0.22);
    --v9-r-card: var(--border-radius-lg, 1.25rem); /* tarjetas, paneles */
    --v9-r-media: var(--border-radius-md, 0.75rem);/* imágenes, cajas internas */
    --v9-r-sm: 8px;                               /* controles pequeños */
    --v9-r-pill: 50px;                            /* botones y filtros */
    --v9-label-size: 0.72rem;                     /* rótulos en versalitas */
    --v9-label-track: 0.08em;
}

/* ── Foco de respaldo (2026-09-23) ────────────────────────────────────────
   El anillo verde del sitio para cualquier tabulable SIN regla de foco propia
   (atajos de audiencia, enlaces del pie…). Especificidad (0,1,0) gracias a
   :where(): cualquier regla de componente lo pisa sin tocar nada. */
.v9 :where(a, button, input, select, textarea, [tabindex]):where(:focus-visible) {
    outline: 3px solid rgba(var(--alarcos-green-value), 0.7);
    outline-offset: 2px;
}

/* ── Familia de botones de la v9 (unificación 2026-09-17) ─────────────────
   Dos niveles y nada más:
   · CTA grande = la píldora OFICIAL de producción (.view-all-news-btn /
     .btn-alarcos-primary de style.css): borde azul sólido, 0.8rem × 2rem.
   · Acción contextual = .v9-btn: píldora pequeña con borde azul al 35 %,
     se rellena de azul al pasar. Las clases históricas (.v9-pager__btn,
     .v9-evt__link, .v9-wp-act, .v9-wp-cite__*) son alias de esta regla:
     no vuelvas a declarar una píldora suelta, añade la clase al selector. */
.v9-btn,
.v9-pager__btn,
.v9-evt__link,
.v9-wp-act,
.v9-wp-cite__copy,
.v9-wp-cite__close,
.v9-contact__dir,
.v9-search__btn,
.v9-wp-tools__clear,
.v9-wp-tools__print {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.45rem;
    min-height: 40px;
    padding: 0.5rem 1.1rem;                 /* misma geometría que .v9-filter__btn */
    border-radius: var(--v9-r-pill);
    border: 2px solid var(--v9-action-line);
    background: #fff;
    color: var(--v9-action);
    font: inherit;
    font-size: 0.9rem;
    font-weight: 600;
    line-height: 1.2;
    text-decoration: none;
    cursor: pointer;
    list-style: none;
    transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
}
.v9-btn:hover, .v9-btn:focus-visible,
.v9-pager__btn:hover, .v9-pager__btn:focus-visible,
.v9-evt__link:hover, .v9-evt__link:focus-visible,
.v9-wp-act:hover, .v9-wp-act:focus-visible,
.v9-wp-cite__copy:hover, .v9-wp-cite__close:hover,
.v9-contact__dir:hover, .v9-contact__dir:focus-visible {
    background: var(--v9-action);
    border-color: var(--v9-action);
    color: #fff;
    transform: translateY(-1px);
}
.v9-btn:focus-visible, .v9-pager__btn:focus-visible, .v9-evt__link:focus-visible, .v9-wp-act:focus-visible {
    outline: 3px solid rgba(var(--alarcos-green-value), 0.6);
    outline-offset: 2px;
}
.v9-btn i, .v9-pager__btn i, .v9-evt__link i, .v9-wp-act i { font-size: 0.82em; }

/* Relleno azul: el botón de las cajas de búsqueda y cualquier acción principal pequeña */
.v9-btn--primary,
.v9-search__btn {
    border-color: var(--v9-action);
    background: var(--v9-action);
    color: #fff;
}
.v9-btn--primary:hover, .v9-btn--primary:focus-visible,
.v9-search__btn:hover, .v9-search__btn:focus-visible {
    background: var(--v9-action-hover);
    border-color: var(--v9-action-hover);
    color: #fff;
}

/* Pequeño: dentro de paneles densos (citas, herramientas) */
.v9-btn--sm,
.v9-wp-cite__copy,
.v9-wp-cite__close { min-height: 36px; padding: 0.3rem 0.85rem; font-size: 0.8rem; }

/* Fantasma: acciones secundarias sin borde (limpiar filtros, imprimir) */
.v9-btn--ghost,
.v9-wp-tools__clear,
.v9-wp-tools__print {
    border-color: transparent;
    background: transparent;
    color: var(--v9-muted);
}
.v9-btn--ghost:hover, .v9-btn--ghost:focus-visible,
.v9-wp-tools__clear:hover, .v9-wp-tools__clear:focus-visible,
.v9-wp-tools__print:hover, .v9-wp-tools__print:focus-visible {
    background: var(--v9-surface);
    border-color: transparent;
    color: var(--v9-action);
    transform: none;
}

/* Objetivo táctil mínimo (WCAG 2.5.8, 24×24): los enlaces-botón de texto suelto
   ("Leer más", "Ver todos", "Citar", extras) alcanzan 24 px de alto sin cambiar de aspecto */
.v9-evt__more, .v9-nw__more, .v9-wp-more, .v9-linea__extra, .v9-sp__item, .v9-sp__all, .v9-form__more a, .v9-news__all { min-height: 24px; display: inline-flex; align-items: center; }
.v9-sp__item { display: inline; padding: 0.15rem 0; line-height: 1.5; }

/* Desactivado */
.v9-btn.is-off, .v9-btn[disabled],
.v9-pager__btn.is-off { border-color: var(--v9-line-strong); background: #fff; color: var(--v9-muted); pointer-events: none; transform: none; }

/* Titular del hero oficial: el mismo tinte de titular que el resto de la v9 */
body.v9 .hero-title { color: var(--v9-ink); }
/* Contraste AA (auditoría 2026-09-17): las clases de producción escriben el azul de
   marca (3,3:1) como color de texto con !important; aquí pasan al azul de acción.
   El relleno al pasar deja de ser el degradado azul→verde (blanco sobre verde: 1,9:1)
   y es el azul de acción sólido, como en toda la familia .v9-btn. */
body.v9 .view-all-news-btn, body.v9 .btn-alarcos-outline, body.v9 .hero-pre-badge, body.v9 .filter-btn, body.v9 .TXTAzultoVerde { color: var(--v9-action) !important; }
body.v9 .view-all-news-btn:hover, body.v9 .view-all-news-btn:focus-visible,
body.v9 .btn-alarcos-outline:hover, body.v9 .btn-alarcos-outline:focus-visible { background: var(--v9-action) !important; border-color: var(--v9-action) !important; color: #fff !important; }
body.v9 .btn-alarcos-primary { background: var(--v9-action) !important; }
body.v9 .btn-alarcos-primary:hover, body.v9 .btn-alarcos-primary:focus-visible { background: var(--v9-action-hover) !important; }
body.v9 .view-all-news-btn:focus-visible, body.v9 .btn-alarcos-primary:focus-visible, body.v9 .btn-alarcos-outline:focus-visible, body.v9 .v9-filter__btn:focus-visible { outline: 3px solid rgba(var(--alarcos-green-value), 0.7); outline-offset: 3px; }

.v9-stats {
    padding: clamp(28px, 4vw, 52px) 0 clamp(8px, 1.5vw, 16px);
}

/* Dentro del hero (2026-09-16): franja a todo el ancho del contenedor bajo
   las dos columnas; el hero gana la prueba y el bloque de noticias, aire. */
/* Atajos por audiencia bajo los CTA del hero (2026-09-22): fila discreta, tres perfiles con dos destinos */
.v9-aud { display: flex; flex-direction: column; gap: 0.4rem; margin-top: 1.4rem; font-size: 0.86rem; color: var(--v9-muted); }
.v9-aud__item { display: flex; flex-wrap: wrap; align-items: center; gap: 0.35rem 0.55rem; }
.v9-aud__item i { width: 1.1rem; text-align: center; }
.v9-aud__item i { color: var(--v9-green-ink); font-size: 0.8rem; }
.v9-aud__k { font-size: var(--v9-label-size); font-weight: 700; letter-spacing: var(--v9-label-track); text-transform: uppercase; color: var(--v9-muted); margin-right: 0.15rem; }
.v9-aud a { color: var(--v9-action); font-weight: 600; text-decoration: none; }
.v9-aud a + a::before { content: "·"; color: var(--v9-muted); margin-right: 0.55rem; font-weight: 400; }
.v9-aud a:hover { text-decoration: underline; }
.v9-stats--hero {
    padding: clamp(24px, 3.5vw, 44px) 0 0;
    margin-top: clamp(8px, 1.5vw, 16px);
}

.v9-stats--hero .v9-stats__grid {
    background: rgba(255, 255, 255, 0.72);
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
    border: 1px solid var(--v9-line);
    border-radius: var(--v9-r-media);
    overflow: hidden;
}

/* Respiro y separación entre el hero (con partículas) y las noticias */
.v9-news {
    background: linear-gradient(180deg, var(--v9-surface-2) 0%, #ffffff 100%);
    border-top: 1px solid var(--v9-line-soft);
    margin-top: clamp(24px, 3vw, 40px);
}

.v9-stats__grid {
    display: grid;
    grid-template-columns: repeat(6, minmax(0, 1fr));
    margin: 0;
    border-top: 1px solid var(--v9-line);
    border-bottom: 1px solid var(--v9-line);
}

.v9-stat {
    min-width: 0;
    padding: 1.4rem 1.2rem;
    border-left: 1px solid var(--v9-line);
}

.v9-stat:first-child { border-left: none; }

/* <dd> antes que <dt> a propósito: la cifra manda visualmente; el orden
   semántico sigue siendo correcto dentro del <dl>. */
.v9-stat__num {
    display: block;
    margin: 0;
    font-size: clamp(1.7rem, 2.6vw, 2.35rem);
    font-weight: 600;
    line-height: 1.05;
    letter-spacing: -0.02em;
    color: var(--v9-ink);
    font-variant-numeric: tabular-nums;
}

.v9-stat__label {
    display: block;
    margin-top: 0.45rem;
    font-size: var(--v9-label-size);
    font-weight: 600;
    letter-spacing: var(--v9-label-track);
    text-transform: uppercase;
    color: var(--v9-muted);
}

/* Acento de marca: un trazo corto bajo la cifra, azul→verde de la casa */
.v9-stat__num::after {
    content: "";
    display: block;
    width: 28px;
    height: 3px;
    margin-top: 0.7rem;
    border-radius: 2px;
    background: var(--v9-gradient);
}

@media (max-width: 1100px) {
    .v9-stats__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .v9-stat:nth-child(4) { border-left: none; }
    .v9-stat:nth-child(n+4) { border-top: 1px solid var(--v9-line); }
}

@media (max-width: 600px) {
    .v9-stats__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .v9-stat { padding: 1.1rem 0.9rem; }
    .v9-stat:nth-child(4) { border-left: 1px solid var(--v9-line); }
    .v9-stat:nth-child(odd) { border-left: none; }
    .v9-stat:nth-child(n+3) { border-top: 1px solid var(--v9-line); }
    .v9-stat__label { font-size: 0.66rem; letter-spacing: 0.06em; }
}

/* ==========================================================================
   INDEX · Últimas noticias — SLIDER corporativo (6ª iteración, 2026-09-16)
   --------------------------------------------------------------------------
   Banner 1200×400 ENTERO a la izquierda, panel oscuro con el texto a la
   derecha (el texto nunca va debajo ni encima de la imagen), pestañas
   numeradas con los titulares como índice/navegación, barra de progreso.
   ========================================================================== */

.v9-news {
    padding: clamp(40px, 5vw, 72px) 0 clamp(48px, 6vw, 80px);
}

.v9-news__head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
    margin-bottom: 1.4rem;
}

.v9-news__kicker {
    display: inline-flex;
    align-items: center;
    gap: 0.6rem;
    margin: 0 0 0.3rem;
    font-size: var(--v9-label-size);
    font-weight: 600;
    letter-spacing: var(--v9-label-track);
    text-transform: uppercase;
    color: var(--v9-action);
}
.v9-news__kicker::before {
    content: "";
    width: 28px;
    height: 3px;
    border-radius: 2px;
    background: var(--v9-gradient);
}

.v9-news__title {
    margin: 0;
    font-size: clamp(1.6rem, 2.6vw, 2.2rem);
    font-weight: 700;
    letter-spacing: -0.02em;
    color: var(--v9-ink);
}

.v9-news__all {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.7rem 1.5rem;
    border: 2px solid var(--alarcos-blue);
    border-radius: var(--v9-r-pill);
    font-weight: 600;
    font-size: 0.9rem;
    color: var(--v9-action);
    text-decoration: none;
    transition: background-color 0.25s ease, color 0.25s ease, transform 0.25s ease;
}
.v9-news__all:hover,
.v9-news__all:focus-visible { background: var(--v9-action); color: #fff; transform: translateY(-2px); }
.v9-news__all .material-icons-outlined { font-size: 1.15rem; }

/* ── Slider ────────────────────────────────────────────────────────────── */

.v9-slider {
    --v9-delay: 6500ms;
    /* Mismo oscuro que el pie de la web oficial (2026-09-16, "por unificar"):
       .site-footer = linear-gradient(135deg, --alarcos-dark var(--v9-ink), #2d3748). */
    --v9-panel: var(--v9-ink);
    --v9-panel-2: #2d3748;
}

.v9-slider__viewport {
    position: relative;
    border-radius: var(--v9-r-card);
    overflow: hidden;
    background: var(--v9-panel);
    box-shadow: var(--v9-shadow-lg);
}

/* Filete de marca arriba */
.v9-slider__viewport::before {
    content: "";
    position: absolute;
    inset: 0 0 auto 0;
    height: 4px;
    z-index: 3;
    background: var(--v9-gradient);
}

.v9-slider__track {
    position: relative;
    margin: 0;
    padding: 0;
    list-style: none;
    display: grid;               /* todas las diapositivas en la misma celda */
}

.v9-slide {
    grid-area: 1 / 1;
    display: grid;
    grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr);
    opacity: 0;
    visibility: hidden;
    transform: translateX(24px);
    transition: opacity 0.6s ease, transform 0.6s ease, visibility 0s linear 0.6s;
}

.v9-slide.is-active {
    opacity: 1;
    visibility: visible;
    transform: none;
    transition: opacity 0.6s ease, transform 0.6s ease, visibility 0s;
    z-index: 1;
}

/* Imagen: el banner entero, centrado verticalmente sobre un fondo neutro
   que empasta con su propio blanco */
.v9-slide__media {
    display: flex;
    align-items: center;
    background: var(--v9-surface-2);
    padding: 1.4rem;
    min-width: 0;
}

.v9-slide__img {
    display: block;
    width: 100%;
    height: auto;
    aspect-ratio: 3 / 1;
    object-fit: cover;
    border-radius: var(--v9-r-media);
    box-shadow: var(--v9-shadow-md);
    background: #fff;
}

.v9-slide__img--empty {
    background: linear-gradient(135deg, rgba(var(--alarcos-blue-value), 0.15), rgba(var(--alarcos-green-value), 0.15));
}

/* Panel de texto */
.v9-slide__panel {
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 0.85rem;
    padding: 2.2rem 2.4rem 3.6rem;   /* hueco inferior para los controles */
    color: #fff;
    background:
        radial-gradient(120% 90% at 100% 0%, rgba(var(--alarcos-blue-value), 0.18), transparent 60%),
        linear-gradient(135deg, var(--v9-panel) 0%, var(--v9-panel-2) 100%);
    min-width: 0;
}

.v9-slide__meta {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    margin: 0;
    font-size: 0.8rem;
    font-weight: 600;
    letter-spacing: 0.04em;
    color: rgba(255, 255, 255, 0.62);
}

.v9-slide__new {
    display: inline-block;
    padding: 0.18rem 0.6rem;
    border-radius: var(--v9-r-pill);
    background: var(--alarcos-green);
    color: var(--v9-green-ink);
    font-size: 0.66rem;
    font-weight: 700;
    letter-spacing: var(--v9-label-track);
    text-transform: uppercase;
}

.v9-slide__title {
    margin: 0;
    font-size: clamp(1.15rem, 1.7vw, 1.5rem);
    font-weight: 700;
    line-height: 1.3;
    letter-spacing: -0.01em;
    color: #fff;
}

.v9-slide__excerpt {
    margin: 0;
    font-size: 0.93rem;
    line-height: 1.6;
    color: rgba(255, 255, 255, 0.78);
}

.v9-slide__cta {
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    align-self: flex-start;
    margin-top: 0.4rem;
    padding: 0.7rem 1.4rem;
    border-radius: var(--v9-r-pill);
    background: #fff;
    color: var(--v9-action);
    font-weight: 700;
    font-size: 0.9rem;
    text-decoration: none;
    transition: transform 0.25s ease, box-shadow 0.25s ease;
}
/* Hover como los demás botones de la web oficial: se rellena de azul, sube
   y le sale un halo. (La versión anterior solo subía 2px con sombra negra
   sobre el panel oscuro: invisible.) */
.v9-slide__cta {
    transition: transform 0.25s ease, box-shadow 0.25s ease, background-color 0.25s ease, color 0.25s ease;
}
.v9-slide__cta:hover,
.v9-slide__cta:focus-visible {
    background: var(--v9-action);
    color: #fff;
    transform: translateY(-3px);
    box-shadow: 0 12px 28px rgba(var(--alarcos-blue-value), 0.45), 0 0 0 4px rgba(255, 255, 255, 0.12);
}
.v9-slide__cta .material-icons-outlined { font-size: 1.1rem; transition: transform 0.2s ease; }
.v9-slide__cta:hover .material-icons-outlined { transform: translateX(4px); }

/* Controles: abajo a la derecha del panel */
.v9-slider__controls {
    position: absolute;
    right: 2.4rem;
    bottom: 1.4rem;
    z-index: 2;
    display: flex;
    align-items: center;
    gap: 0.6rem;
}

.v9-slider__arrow {
    width: 38px;
    height: 38px;
    border-radius: 50%;
    border: 1px solid rgba(255, 255, 255, 0.28);
    background: transparent;
    color: #fff;
    display: grid;
    place-items: center;
    cursor: pointer;
    transition: background-color 0.2s ease, border-color 0.2s ease;
}
.v9-slider__arrow:hover,
.v9-slider__arrow:focus-visible { background: rgba(255, 255, 255, 0.14); border-color: #fff; }
.v9-slider__arrow .material-icons-outlined { font-size: 1.2rem; }

.v9-slider__counter {
    font-size: 0.78rem;
    letter-spacing: 0.08em;
    color: rgba(255, 255, 255, 0.55);
    font-variant-numeric: tabular-nums;
    min-width: 4.2em;
    text-align: center;
}
.v9-slider__counter b { color: #fff; font-weight: 700; }

/* Miniaturas de navegación: los propios banners, sin titular */
.v9-thumbs {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 1rem;
    margin: 1.1rem 0 0;
    padding: 0;
    list-style: none;
}

.v9-thumb { min-width: 0; }

.v9-thumb button {
    position: relative;
    display: block;
    width: 100%;
    padding: 0;
    border: 0;
    background: none;
    cursor: pointer;
    border-radius: var(--v9-r-media);
    overflow: hidden;
    opacity: 0.55;
    transition: opacity 0.25s ease, transform 0.25s ease;
}

.v9-thumb button:hover,
.v9-thumb button:focus-visible { opacity: 0.85; }
.v9-thumb button:focus-visible { outline: 2px solid var(--alarcos-blue); outline-offset: 3px; }
.v9-thumb.is-active button { opacity: 1; transform: translateY(-2px); }

.v9-thumb__img {
    display: block;
    width: 100%;
    height: auto;
    aspect-ratio: 3 / 1;
    object-fit: cover;
    background: #fff;
    border: 1px solid var(--v9-line);
    border-radius: var(--v9-r-media) var(--v9-r-media) 0 0;
    box-sizing: border-box;
    transition: border-color 0.25s ease, box-shadow 0.25s ease;
}
.v9-thumb.is-active .v9-thumb__img {
    border-color: var(--v9-action);
    box-shadow: var(--v9-shadow-action);
}

.v9-thumb__img--empty {
    background: linear-gradient(135deg, rgba(var(--alarcos-blue-value), 0.12), rgba(var(--alarcos-green-value), 0.12));
}

.v9-thumb__num {
    position: absolute;
    top: 6px;
    left: 6px;
    padding: 0.1rem 0.45rem;
    border-radius: var(--v9-r-pill);
    background: rgba(31, 41, 51, 0.85);
    color: #fff;
    font-size: 0.66rem;
    font-weight: 700;
    letter-spacing: 0.06em;
}

.v9-thumb__bar {
    display: block;
    height: 4px;
    background: var(--v9-surface);
    overflow: hidden;
}

.v9-thumb__progress {
    display: block;
    height: 100%;
    width: 100%;
    transform-origin: left;
    transform: scaleX(0);
    background: var(--v9-gradient);
}
.v9-thumb.is-active .v9-thumb__progress { transform: scaleX(1); }
.v9-slider.is-playing .v9-thumb.is-active .v9-thumb__progress {
    animation: v9-progress var(--v9-delay) linear forwards;
}
@keyframes v9-progress { from { transform: scaleX(0); } to { transform: scaleX(1); } }

.v9-news__empty {
    padding: 2rem;
    text-align: center;
    color: var(--v9-muted);
    border: 1px dashed var(--v9-line-strong);
    border-radius: var(--v9-r-media);
}

/* ── Responsive ────────────────────────────────────────────────────────── */

@media (max-width: 1100px) {
    /* Tira desplazable: siempre están las 5; la activa se centra sola (JS) */
    .v9-thumbs {
        display: flex;
        gap: 0.8rem;
        overflow-x: auto;
        scroll-snap-type: x proximity;
        scrollbar-width: none;
        padding: 4px 2px 6px;
        margin-inline: -2px;
    }
    .v9-thumbs::-webkit-scrollbar { display: none; }
    .v9-thumb { flex: 0 0 168px; scroll-snap-align: center; }
}

@media (max-width: 900px) {
    .v9-slide { grid-template-columns: 1fr; }
    .v9-slide__media { padding: 1rem 1rem 0; background: var(--v9-panel); }
    .v9-slide__panel { padding: 1.4rem 1.4rem 3.4rem; }
    .v9-slider__controls { right: 1.4rem; bottom: 1.1rem; }
}

@media (max-width: 600px) {
    .v9-thumb { flex-basis: 132px; }
    .v9-slide__title { font-size: 1.1rem; }
    .v9-slide__excerpt { display: none; }
}

@media (prefers-reduced-motion: reduce) {
    .v9-slide { transition: none; }
    .v9-news__all, .v9-slide__cta, .v9-slide__cta .material-icons-outlined { transition: none; }
    .v9-news__all:hover, .v9-slide__cta:hover { transform: none; }
    .v9-thumb__progress { animation: none !important; }
    .v9-thumb button { transition: none; }
}

/* ==========================================================================
   MIEMBROS · filtro por categoría (v9, 2026-09-16)
   ========================================================================== */

.v9-filter {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 0.5rem;
}

.v9-filter__btn {
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    min-height: 40px;
    padding: 0.5rem 1.1rem;
    border-radius: var(--v9-r-pill);
    border: 2px solid var(--v9-action-line);
    background: #fff;
    color: var(--v9-ink);
    font-weight: 600;
    font-size: 0.9rem;
    cursor: pointer;
    transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
}

.v9-filter__btn:hover,
.v9-filter__btn:focus-visible {
    border-color: var(--v9-action);
    color: var(--v9-action);
    transform: translateY(-1px);
}

.v9-filter__btn.is-active,
.v9-filter__btn.active {
    background: var(--v9-action);
    border-color: var(--v9-action);
    color: #fff;
}

.v9-filter__count {
    font-size: 0.72rem;
    font-weight: 700;
    padding: 0.1rem 0.45rem;
    border-radius: var(--v9-r-pill);
    background: rgba(var(--alarcos-blue-value), 0.10);
    color: var(--v9-action);
    font-variant-numeric: tabular-nums;
}
/* 2026-09-22 (axe): blanco sobre el azul aclarado por la transparencia daba 3,59:1 -> fondo oscuro propio (AA) */
.v9-filter__btn.is-active .v9-filter__count,
.v9-filter__btn.active .v9-filter__count { background: rgba(0, 0, 0, 0.30); color: #fff; }
.v9-filter__count:empty { display: none; }

/* Móvil (2026-09-21): el wrap centrado apila las píldoras en varias filas
   desiguales (zigzag) y se come media pantalla antes de llegar al contenido
   (Miembros, Publicaciones, Instalaciones). Tira horizontal deslizable en su lugar. */
@media (max-width: 600px) {
    /* 2026-09-25 — REVISADO: esto era `nowrap` + `overflow-x:auto` (tira deslizable, 21-09) para
       evitar el «zigzag» de las píldoras al envolver. Medido en móvil real, el remedio era peor:
       los filtros de Miembros ocupaban 909 px en una pantalla de 376, los de Publicaciones 779 y
       los de Eventos 704 — es decir, la mayoría de los filtros eran INVISIBLES y nada indicaba
       que se pudiera arrastrar. El zigzag venía del centrado, no del wrap: envolviendo con
       `justify-content: flex-start` las píldoras quedan alineadas y todas a la vista. */
    .v9-filter {
        flex-wrap: wrap;
        justify-content: flex-start;
        row-gap: 0.4rem;
        padding-bottom: 0.3rem;
    }
    .v9-filter::-webkit-scrollbar { height: 0; }
    /* Al pasar de tira deslizable a wrap (arriba), una píldora más ancha que la pantalla ya no
       se puede arrastrar: se salía. Caso real, Transferencia: «Desarrollo Global de Software y
       Gestión del Conocimiento» medía 413 px en 400. Ahora puede encoger y partir el texto en
       dos líneas; las cortas siguen en una sola porque solo se parte lo que no cabe. */
    .v9-filter__btn { flex: 0 1 auto; max-width: 100%; white-space: normal; text-align: left; }

    /* EXCEPCIÓN (2026-09-25, reporte del usuario): los filtros de TEMA de Noticias no son 4-6
       píldoras como los de Miembros o Publicaciones, sino 12 (Líneas) + 8 (Tipo). Deslizables
       medían 2.419 px y 1.511 px en una pantalla de 376: el lector no ve qué temas hay ni
       intuye que puede deslizar. Aquí sí conviene envolver en varias filas —el «zigzag» que
       motivó la regla de arriba venía del centrado, no del wrap—, así que se envuelve
       alineando a la izquierda y con las píldoras un punto más compactas. */
    /* (los estilos del <details> viven en su propio bloque de 700px, más abajo) */
    .v9-etqbar__det > summary {
        cursor: pointer; list-style: none; display: flex; align-items: center; gap: .4rem;
        padding: .35rem 0;
    }
    .v9-etqbar__det > summary::-webkit-details-marker { display: none; }
    .v9-etqbar__det > summary::after {
        content: "\f078"; font-family: "Font Awesome 6 Free"; font-weight: 900;
        font-size: .62rem; transition: transform .18s ease;
    }
    .v9-etqbar__det[open] > summary::after { transform: rotate(180deg); }
    .v9-etqbar__n {
        font-size: .68rem; background: var(--v9-chip, rgba(0,0,0,.06));
        border-radius: 999px; padding: 0 .4rem; font-weight: 600;
    }
    .v9-filter--etq {
        flex-wrap: wrap;
        overflow-x: visible;
        scroll-snap-type: none;
        row-gap: 0.4rem;
    }
    .v9-filter--etq .v9-filter__btn {
        scroll-snap-align: none;
        font-size: 0.78rem;
        padding-block: 0.28rem;
    }
}

/* Estados del buscador de miembros (antes en un <style> de miembros_v9.php) */
.member-no-results { text-align: center; padding: 3rem 1rem; color: var(--v9-muted); }
.member-card-col.hidden-by-search { display: none !important; }
.member-section-empty { display: none !important; }
.search-highlight { background: rgba(var(--alarcos-blue-value), 0.18); border-radius: 3px; padding: 0 2px; color: var(--v9-action-hover); font-weight: 700; }

/* Grupos ocultos por el filtro o vaciados por la búsqueda */
.v9-group.hidden-by-filter,
.v9-group.empty-by-search { display: none; }

/* Los grupos son hijos directos del .row: que ocupen el ancho completo */
.v9-group { width: 100%; }

/* Separación entre categorías: producción la hacía con <br> dentro del h4;
   aquí con margen real, que también sobrevive al filtro (el primer grupo
   visible no lleva hueco arriba). */
/* El hueco va DEBAJO de cada grupo (margin-bottom): un grupo oculto
   (display:none) no aporta nada, así que el siguiente visible nunca queda
   pegado al anterior ni con hueco doble, sea cual sea la combinación de
   filtro y búsqueda. */
.v9-group { margin-bottom: clamp(2.5rem, 5vw, 4rem); }
.v9-group .section-title { margin-bottom: 0.5rem; }

@media (prefers-reduced-motion: reduce) {
    .v9-filter__btn { transition: none; }
    .v9-filter__btn:hover { transform: none; }
}

/* ── Miembros · nombre y apellidos menos "gruesos" (2026-09-16) ─────────────
   Producción: 1.9rem / 700 en dos líneas (nombre + apellidos), un bloque de
   titular que competía con la foto. Aquí: seminegrita 600, tamaño contenido
   y tracking ligeramente negativo; misma jerarquía, menos peso. */
body.v9 .member-name,
body.v9 .member-surname {
    font-size: 1.45rem;
    font-weight: 600;
    line-height: 1.2;
    letter-spacing: -0.01em;
}
body.v9 .member-name.long-name { font-size: 1.3rem; }
body.v9 .member-surname.surname-medium { font-size: 1.35rem; }
body.v9 .member-surname.surname-long { font-size: 1.2rem; }
body.v9 .member-surname { margin-bottom: 10px; }
body.v9 .member-description { font-size: 0.98rem; }

/* ── Miembros · iconos de la ficha: en color, dentro de un círculo tintado ──
   Producción: fa-xl (~24px) sueltos, cada uno con el color de su marca — el
   usuario quiere conservar el color pero sin lo tosco. Aquí cada icono va en
   su color de marca (--brand) sobre un círculo de 34px tintado con ese mismo
   color al 12%: fichas de color pequeñas y del mismo peso. En hover el
   círculo se llena y el icono pasa a blanco. */
body.v9 .social-box { min-height: 0; gap: 0; max-width: none; }
body.v9 .social-row { min-height: 0; gap: 8px; flex-wrap: wrap; }
body.v9 .social-row:empty { display: none; }
body.v9 .social-row + .social-row { margin-top: 8px; }

body.v9 .social-icon-link,
body.v9 .social-icon-link:hover,
body.v9 .social-icon-link:focus-visible {
    text-decoration: none;            /* sin subrayado: son botones, no texto */
}
body.v9 .social-icon-link {
    --brand: var(--alarcos-blue);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: color-mix(in srgb, var(--brand) 12%, #fff);
    border: 1px solid color-mix(in srgb, var(--brand) 22%, #fff);
    transition: background-color 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
}
body.v9 .social-icon-link i {
    font-size: 15px;
    height: auto;
    line-height: 1;
    color: var(--brand) !important;   /* anula .text-orcid/.text-scopus/… de style.css */
    transition: color 0.2s ease;
}
/* Logos SVG inline (DBLP/Scopus/ResearchGate): heredan el color del <i> vía currentColor */
body.v9 .social-icon-link i.ico-svg svg {
    display: block;
    width: 1em;
    height: 1em;
}
body.v9 .social-icon-link:hover,
body.v9 .social-icon-link:focus-visible {
    background: var(--brand);
    border-color: var(--brand);
    transform: translateY(-2px);
}
body.v9 .social-icon-link:hover i,
body.v9 .social-icon-link:focus-visible i { transform: none; filter: none; color: #fff !important; }
body.v9 .social-icon-link:focus-visible { outline: 3px solid rgba(var(--alarcos-green-value), 0.7); outline-offset: 2px; }

/* Color de marca de cada servicio */
body.v9 .social-icon-link:has(.fa-globe)          { --brand: var(--alarcos-blue); }
body.v9 .social-icon-link:has(.fa-envelope)       { --brand: var(--v9-green-ink); }
body.v9 .social-icon-link:has(.fa-orcid)          { --brand: #a6ce39; }
body.v9 .social-icon-link:has(.icon-dblp)         { --brand: #006699; }
body.v9 .social-icon-link:has(.fa-graduation-cap) { --brand: #4285f4; }
body.v9 .social-icon-link:has(.icon-scopus)       { --brand: #ff6800; }
body.v9 .social-icon-link:has(.icon-researchgate) { --brand: #00b4a6; }
body.v9 .social-icon-link:has(.fa-linkedin-in)    { --brand: #0077b5; }
body.v9 .social-icon-link:has(.fa-facebook-f)     { --brand: #1877f2; }
body.v9 .social-icon-link:has(.fa-x-twitter)      { --brand: var(--v9-ink); }
body.v9 .social-icon-link:has(.fa-instagram)      { --brand: #e1306c; }
body.v9 .social-icon-link:has(.fa-wikipedia-w)    { --brand: #3a3a3a; }

/* Navegadores sin color-mix(): tinte fijo de la casa */
@supports not (background: color-mix(in srgb, red 10%, white)) {
    body.v9 .social-icon-link { background: rgba(var(--alarcos-blue-value), 0.10); border-color: rgba(var(--alarcos-blue-value), 0.2); }
}

@media (prefers-reduced-motion: reduce) {
    body.v9 .social-icon-link, body.v9 .social-icon-link i { transition: none; }
    body.v9 .social-icon-link:hover { transform: none; }
}

/* ==========================================================================
   INSTALACIONES (v9, 2026-09-16): galería 3:1, etiquetas, recuentos, "dónde"
   ========================================================================== */

/* Filtros: la misma píldora .v9-filter__btn del resto de la web. Conservan
   la clase .filter-btn porque main.js la busca (e.target.classList) y le
   pone .active; los !important neutralizan la píldora de producción
   (style.css la define con !important: degradado, 700, sombra, min-width). */
.v9-inst .v9-filter__btn.filter-btn {
    border: 2px solid var(--v9-action-line) !important;
    color: var(--v9-ink) !important;
    background: #fff !important;
    font-weight: 600 !important;
    letter-spacing: 0;
    padding: 0.5rem 1.1rem;
    min-width: 0;
    box-shadow: none;
}
.v9-inst .v9-filter__btn.filter-btn:hover,
.v9-inst .v9-filter__btn.filter-btn:focus-visible {
    border-color: var(--v9-action) !important;
    color: var(--v9-action) !important;
    background: #fff !important;
    transform: translateY(-1px);
}
.v9-inst .v9-filter__btn.filter-btn.active {
    background: var(--v9-action) !important;
    border-color: var(--v9-action) !important;
    color: #fff !important;
    box-shadow: none;
}
.v9-inst .v9-filter__count { pointer-events: none; }
.v9-inst .v9-filter__btn.filter-btn.active .v9-filter__count { background: rgba(255, 255, 255, 0.22); color: #fff !important; }

/* Galería */
.v9-gal {
    display: grid;
    /* Dos columnas uniformes: con fotos 3:1 (≈555×185) todas las filas casan.
       Se probó 3 columnas con piezas anchas y las alturas distintas (247 vs
       123px) dejaban huecos. */
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 1.4rem;
}
.v9-gal__item { margin: 0; min-width: 0; }

.v9-gal__media {
    position: relative;
    border-radius: var(--v9-r-media);
    overflow: hidden;
    background: var(--v9-surface);
    box-shadow: var(--v9-shadow);
    transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.v9-gal__item:hover .v9-gal__media {
    transform: translateY(-3px);
    box-shadow: var(--v9-shadow-lg);
}
.v9-gal__media img {
    display: block;
    width: 100%;
    height: auto;
    aspect-ratio: 3 / 1;         /* el formato real de las 12 fotos */
    object-fit: cover;
    cursor: zoom-in;
    transition: transform 0.4s ease;
}
.v9-gal__item:hover .v9-gal__media img { transform: scale(1.03); }

.v9-gal__tag {
    position: absolute;
    top: 10px;
    left: 10px;
    padding: 0.2rem 0.6rem;
    border-radius: var(--v9-r-pill);
    background: rgba(31, 41, 51, 0.78);
    color: #fff;
    font-size: var(--v9-label-size);
    font-weight: 700;
    letter-spacing: var(--v9-label-track);
    text-transform: uppercase;
    pointer-events: none;
}
.v9-gal__zoom {
    position: absolute;
    right: 10px;
    bottom: 10px;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    display: grid;
    place-items: center;
    background: rgba(255, 255, 255, 0.9);
    color: var(--v9-action);
    font-size: 0.85rem;
    opacity: 0;
    transition: opacity 0.2s ease;
    pointer-events: none;
}
.v9-gal__item:hover .v9-gal__zoom { opacity: 1; }

.v9-gal__caption {
    margin: 0.65rem 0.2rem 0;
    font-size: 0.92rem;
    font-weight: 600;
    color: var(--v9-ink);
}

/* Dónde estamos */
.v9-where {
    display: flex;
    align-items: center;
    gap: 1.4rem;
    flex-wrap: wrap;
    padding: 1.4rem 1.8rem;
    border-radius: var(--v9-r-card);
    background: linear-gradient(135deg, rgba(var(--alarcos-blue-value), 0.07), rgba(var(--alarcos-green-value), 0.09));
    border: 1px solid var(--v9-line);
}
.v9-where__icon {
    flex: none;
    width: 52px;
    height: 52px;
    border-radius: 50%;
    display: grid;
    place-items: center;
    background: #fff;
    color: var(--v9-action);
    font-size: 1.35rem;
    box-shadow: var(--v9-shadow-action);
}
.v9-where__body { flex: 1; min-width: 240px; }
.v9-where__kicker {
    margin: 0 0 0.25rem;
    font-size: var(--v9-label-size);
    font-weight: 700;
    letter-spacing: var(--v9-label-track);
    text-transform: uppercase;
    color: var(--v9-action);
}
.v9-where__addr { margin: 0; line-height: 1.55; color: var(--v9-ink); font-weight: 500; }
.v9-where__actions { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; }
.v9-where__link { font-weight: 600; color: var(--v9-action); text-decoration: none; }
.v9-where__link:hover { text-decoration: underline; }

@media (max-width: 600px) {
    .v9-gal { grid-template-columns: 1fr; gap: 1rem; }
    .v9-where { padding: 1.1rem 1.2rem; }
}
@media (prefers-reduced-motion: reduce) {
    .v9-gal__media, .v9-gal__media img, .v9-gal__zoom { transition: none; }
    .v9-gal__item:hover .v9-gal__media { transform: none; }
    .v9-gal__item:hover .v9-gal__media img { transform: none; }
}

/* Galería por lotes: las que exceden el lote se pliegan (display:none con
   !important porque main.js escribe display:block inline al filtrar) */
.v9-gal__item--folded { display: none !important; }
.v9-gal__more { text-align: center; margin-top: 1.6rem; }
.v9-gal__status { margin: 0 0 0.8rem; font-size: 0.85rem; color: var(--v9-muted); font-variant-numeric: tabular-nums; }

/* ── Cabecera de página en v9 (kicker + h1 grande), reutilizable ──────────
   Producción titula las secciones con una píldora .news-section-badge de
   14px que es H1: el título era lo más pequeño de la página. */
.v9-page__kicker {
    display: inline-flex;
    align-items: center;
    gap: 0.6rem;
    margin: 0 0 0.4rem;
    font-size: var(--v9-label-size);
    font-weight: 600;
    letter-spacing: var(--v9-label-track);
    text-transform: uppercase;
    color: var(--v9-action);
}
.v9-page__kicker::before,
.v9-page__kicker::after {
    content: "";
    width: 26px;
    height: 3px;
    border-radius: 2px;
    background: var(--v9-gradient);
}
.v9-page__title {
    margin: 0 0 0.9rem;
    font-size: clamp(1.8rem, 3vw, 2.4rem);
    font-weight: 700;
    letter-spacing: -0.02em;
    color: var(--v9-ink);
}
/* Entradilla: gris azulado, no negro puro — jerarquía bajo el título.
   Especificidad alta a propósito: .featured-news-section p de style.css
   pisa cualquier regla de una clase. */
/* style.css lleva `.section-block p { color:#222 !important }`: los colores
   de estos párrafos solo se ganan con !important. */
.section-block p.v9-page__lead   { color: var(--v9-text) !important; font-size: 1rem; max-width: 640px; }
.section-block p.v9-page__kicker { color: var(--v9-action) !important; font-size: 0.72rem; }
.section-block p.v9-gal__status  { color: var(--v9-muted) !important; font-size: 0.85rem; }
.section-block p.v9-where__kicker{ color: var(--v9-action) !important; font-size: 0.72rem; }
.section-block p.v9-where__addr  { color: var(--v9-ink) !important; font-size: 0.98rem; }

/* ==========================================================================
   SPIN-OFFS (v9, 2026-09-16): bandas horizontales, tema y chips
   ========================================================================== */

.v9-so__list { display: flex; flex-direction: column; gap: 1.4rem; }

.v9-so__item {
    display: grid;
    grid-template-columns: 260px minmax(0, 1fr);
    gap: 2rem;
    align-items: center;
    padding: 1.8rem 2rem;
    background: #fff;
    border: 1px solid var(--v9-line);
    border-radius: var(--v9-r-card);
    box-shadow: var(--v9-shadow);
}

.v9-so__logo {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 1.2rem;
    border-radius: var(--v9-r-media);
    background: linear-gradient(135deg, rgba(var(--alarcos-blue-value), 0.06), rgba(var(--alarcos-green-value), 0.08));
    transition: transform 0.25s ease;
}
.v9-so__logo:hover { transform: translateY(-2px); }
.v9-so__logo img { display: block; width: 100%; height: auto; max-height: 90px; object-fit: contain; }

.v9-so__body { min-width: 0; text-align: left; }

.section-block p.v9-so__tema {
    margin: 0 0 0.2rem;
    font-size: var(--v9-label-size) !important;
    font-weight: 700;
    letter-spacing: var(--v9-label-track);
    text-transform: uppercase;
    color: var(--v9-action) !important;
}
.v9-so__name {
    margin: 0 0 0.7rem;
    font-size: 1.5rem;
    font-weight: 700;
    letter-spacing: -0.01em;
    color: var(--v9-ink);
}
.section-block p.v9-so__text {
    margin: 0 0 0.9rem;
    font-size: 0.97rem !important;
    line-height: 1.65;
    color: var(--v9-text) !important;
}

.v9-so__chips {
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
    margin: 0 0 1.1rem;
    padding: 0;
    list-style: none;
}
.section-block .v9-so__chips li {
    padding: 0.22rem 0.7rem;
    border-radius: var(--v9-r-pill);
    font-size: 0.76rem;
    font-weight: 600;
    color: var(--v9-green-ink) !important;
    background: rgba(var(--alarcos-green-value), 0.16);
}

.v9-so__btn { margin-top: 0; }

@media (max-width: 900px) {
    .v9-so__item { grid-template-columns: 1fr; gap: 1.2rem; padding: 1.4rem; }
    .v9-so__logo { max-width: 320px; margin: 0 auto; }
}
@media (prefers-reduced-motion: reduce) {
    .v9-so__logo { transition: none; }
    .v9-so__logo:hover { transform: none; }
}

/* ==========================================================================
   FORMACIÓN (v9, 2026-09-16): rejilla 2×2 de áreas, checks verdes, cierre
   ========================================================================== */

.v9-form__grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 1.4rem;
}

.v9-form__card {
    padding: 1.7rem 1.9rem 1.5rem;
    background: #fff;
    border: 1px solid var(--v9-line);
    border-radius: var(--v9-r-card);
    box-shadow: var(--v9-shadow);
    text-align: left;
    position: relative;
    overflow: hidden;
}
/* Filete de marca arriba, como en las tarjetas de noticias */
.v9-form__card::before {
    content: "";
    position: absolute;
    inset: 0 0 auto 0;
    height: 4px;
    background: var(--v9-gradient);
}

.v9-form__title {
    margin: 0 0 1rem;
    font-size: 1.3rem;
    font-weight: 700;
    letter-spacing: -0.01em;
    color: var(--v9-ink);
}

.v9-form__list { margin: 0; padding: 0; list-style: none; }
.section-block .v9-form__list li {
    display: flex;
    align-items: flex-start;
    gap: 0.7rem;
    padding: 0.45rem 0;
    border-top: 1px solid var(--v9-line-soft);
    font-size: 0.97rem;
    line-height: 1.5;
    color: var(--v9-text) !important;
}
.section-block .v9-form__list li:first-child { border-top: none; }
.v9-form__list .fa-check {
    flex: none;
    margin-top: 0.3rem;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    display: grid;
    place-items: center;
    background: rgba(var(--alarcos-green-value), 0.18);
    color: var(--v9-green-ink);
    font-size: 0.6rem;
}

.v9-form__link {
    color: var(--v9-action);
    font-weight: 600;
    text-decoration: none;
}
.v9-form__link:hover { text-decoration: underline; }
.v9-form__link-hint {
    margin-left: 0.45rem;
    font-size: 0.78rem;
    font-weight: 500;
    color: var(--v9-muted);
}

/* Caso práctico (subpágina de sostenibilidad) */
.section-block p.v9-form__case {
    display: flex;
    align-items: flex-start;
    gap: 0.6rem;
    margin: 1rem 0 0;
    padding: 0.8rem 1rem;
    border-radius: var(--v9-r-media);
    background: rgba(var(--alarcos-blue-value), 0.07);
    font-size: 0.93rem !important;
    color: var(--v9-ink) !important;
}
.v9-form__case .fa-flask { color: var(--v9-action); margin-top: 0.2rem; }
.v9-form__case strong { white-space: nowrap; }

.section-block p.v9-form__more {
    margin: 1.6rem 0 0;
    text-align: center;
    color: var(--v9-muted) !important;
    font-size: 0.92rem !important;
}
.v9-form__more img { vertical-align: middle; margin-left: 0.5rem; height: 34px; }

/* Miga en el kicker (subpáginas) */
.v9-page__crumb { color: inherit; text-decoration: none; }
.v9-page__crumb:hover { text-decoration: underline; }

@media (max-width: 900px) {
    .v9-form__grid { grid-template-columns: 1fr; }
}

/* Consultoría: 5 áreas → 3 columnas en escritorio (2 en tablet, 1 en móvil) */
.v9-form__grid--5 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 1100px) { .v9-form__grid--5 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 700px)  { .v9-form__grid--5 { grid-template-columns: 1fr; } }

/* ==========================================================================
   HERRAMIENTAS (v9): misma tarjeta que formación; captura como miniatura
   ========================================================================== */

.v9-tool { display: flex; flex-direction: column; }

.v9-tool__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.8rem;
    margin-bottom: 0.9rem;
}

.v9-tool__thumb {
    display: block;
    flex: none;
    width: 112px;
    border-radius: var(--v9-r-sm);
    overflow: hidden;
    border: 1px solid var(--v9-line-strong);
    background: #fff;
}
.v9-tool__thumb img {
    display: block;
    width: 100%;
    aspect-ratio: 5 / 3;         /* las capturas son 500×300 */
    object-fit: cover;
    object-position: top;
    filter: saturate(0.8);       /* que no impongan su paleta */
    transition: filter 0.2s ease;
}
.v9-tool:hover .v9-tool__thumb img { filter: none; }

.v9-tool__tag {
    padding: 0.22rem 0.7rem;
    border-radius: var(--v9-r-pill);
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.04em;
    color: var(--v9-green-ink);
    background: rgba(var(--alarcos-green-value), 0.16);
    white-space: nowrap;
}

.v9-tool__title { font-size: 1.08rem; font-weight: 600; line-height: 1.3; margin-bottom: 0.4rem; }   /* mismo formato que los títulos de Transferencia (petición del usuario, 2026-09-17) */
.section-block p.v9-tool__text {
    margin: 0 0 1rem;
    font-size: 0.9rem !important;     /* proporción de tarjeta (el usuario lo veía grande frente al título de 1.08rem) */
    line-height: 1.5;
    color: var(--v9-text) !important;
    flex: 1;
}
/* Acción contextual (.v9-btn), no la píldora CTA grande: dentro de una tarjeta pesaba demasiado */
.v9-tool__btn { align-self: flex-start; margin-top: 0; }

/* ==========================================================================
   TRANSFERENCIA (v9): 12 áreas, ilustración como marca pequeña, recuento real
   ========================================================================== */

.v9-tt__card {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    color: inherit;
    text-decoration: none;
    transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.v9-tt__card:hover,
.v9-tt__card:focus-visible {
    transform: translateY(-3px);
    box-shadow: var(--v9-shadow-lg);
    color: inherit;
}

/* Ilustración del área: los banners 4:1 llevan el motivo en el centro con mucho blanco a los lados,
   así que se recortan a 2:1 por el centro (producción recorta a cuadrado): el motivo sale grande y se
   conserva la mitad central del banner (16:9 cortaba los motivos anchos: paneles, átomo+circuito).
   Antes iba a 56 px sobre un lienzo y se veía diminuto. */
.v9-tt__mark {
    display: block;
    aspect-ratio: 2 / 1;
    margin: 0.2rem 0 0.9rem;
    border-radius: var(--v9-r-media);
    background: var(--v9-surface);   /* las ilustraciones van sobre blanco: sin caja visible */
    overflow: hidden;
}
.v9-tt__mark img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.v9-tt__num { /* sin uso: la numeración se retiró a petición del usuario */
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    color: var(--v9-action);
}
.v9-tt__title { font-size: 1.08rem; font-weight: 600; line-height: 1.3; margin: 0; flex: 1; }   /* 600, no 700: junto al enlace de recuento las dos líneas en negrita pesaban */

.v9-tt__meta {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    margin-top: 0.4rem;
    font-size: 0.85rem;
    font-weight: 500;
    color: var(--v9-action);
}
.v9-tt__meta .fa-arrow-right { transition: transform 0.2s ease; font-size: 0.8rem; }
.v9-tt__card:hover .v9-tt__meta .fa-arrow-right { transform: translateX(4px); }

.section-block .v9-tt__total {
    display: block;
    margin-top: 0.5rem;
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--v9-action) !important;
}

@media (prefers-reduced-motion: reduce) {
    .v9-tt__card, .v9-tt__meta .fa-arrow-right { transition: none; }
    .v9-tt__card:hover { transform: none; }
}

/* ==========================================================================
   I+D (v9): hub con los 8 destinos a la vista y recuentos reales
   ========================================================================== */

.v9-id__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
/* Con tres tarjetas (Recursos oculta mientras el repositorio esté vacío) la tercera ocupa el ancho entero */
/* (Servicios usa la misma rejilla pero va a 3 columnas: sus reglas de "tercera a lo ancho" NO aplican — 2026-09-22) */
.v9-id__grid:not(.v9-serv__grid) > .v9-id__card:nth-child(3):last-child { grid-column: 1 / -1; }
.v9-id__grid:not(.v9-serv__grid) > .v9-id__card:nth-child(3):last-child .v9-id__links { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 1.5rem; }
.v9-id__grid:not(.v9-serv__grid) > .v9-id__card:nth-child(3):last-child .v9-id__links li:nth-child(2) { border-top: 1px solid var(--v9-line-soft); }

.v9-id__head {
    display: flex;
    align-items: center;
    gap: 1.1rem;
    margin-bottom: 1rem;
}
.v9-id__mark {
    flex: none;
    width: 76px;
    height: 76px;
    border-radius: 50%;
    object-fit: cover;
    border: 3px solid #fff;
    box-shadow: 0 0 0 2px rgba(var(--alarcos-blue-value), 0.25), 0 6px 16px rgba(31, 41, 51, 0.12);
}
.v9-id__title { margin: 0 0 0.25rem; font-size: 1.25rem; }
.section-block p.v9-id__text { margin: 0; font-size: 0.92rem !important; line-height: 1.5; color: var(--v9-text) !important; }

/* Las 12 líneas dentro de su tarjeta del hub (dos columnas; una en móvil) */
.v9-id__lineas { margin: 0 0 0.6rem; padding: 0; list-style: none; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.25rem 1rem; }
.v9-id__lineas li { position: relative; padding-left: 0.95rem; font-size: 0.9rem; line-height: 1.35; }
.v9-id__lineas li::before { content: ""; position: absolute; left: 0; top: 0.5em; width: 7px; height: 7px; border-radius: 50%; background: var(--alarcos-green); box-shadow: 0 0 0 2px rgba(var(--alarcos-blue-value), 0.35); }
.v9-id__lineas a { color: var(--v9-text); text-decoration: none; }
.v9-id__lineas a:hover, .v9-id__lineas a:focus-visible { color: var(--v9-action); text-decoration: underline; }
@media (max-width: 600px) { .v9-id__lineas { grid-template-columns: minmax(0, 1fr); } }
.v9-id__links { margin: 0; padding: 0; list-style: none; }
.v9-id__links li { border-top: 1px solid var(--v9-line-soft); }
.v9-id__links a {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    padding: 0.7rem 0.3rem;
    color: var(--v9-ink);
    text-decoration: none;
    font-weight: 600;
    font-size: 0.97rem;
    border-radius: var(--v9-r-sm);
    transition: background-color 0.2s ease, color 0.2s ease;
}
.v9-id__links a:hover,
.v9-id__links a:focus-visible { background: rgba(var(--alarcos-blue-value), 0.06); color: var(--v9-action); }
.v9-id__label { flex: 1; }
.v9-id__count {
    padding: 0.15rem 0.6rem;
    border-radius: var(--v9-r-pill);
    background: rgba(var(--alarcos-blue-value), 0.10);
    color: var(--v9-action);
    font-size: 0.8rem;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}
.v9-id__links .fa-arrow-right { font-size: 0.8rem; color: var(--v9-action); transition: transform 0.2s ease; }
.v9-id__links a:hover .fa-arrow-right { transform: translateX(4px); }

@media (max-width: 900px) { .v9-id__grid { grid-template-columns: 1fr; } }
@media (prefers-reduced-motion: reduce) { .v9-id__links a, .v9-id__links .fa-arrow-right { transition: none; } }

/* ==========================================================================
   PUBLICACIONES (v9): buscador global, tipos con recuento, lista, paginación
   ========================================================================== */

.v9-search {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    max-width: 720px;
    margin: 0 auto 1.4rem;
    padding: 0.4rem 0.4rem 0.4rem 1rem;
    background: #fff;
    border: 2px solid var(--v9-action-line);
    border-radius: var(--v9-r-pill);
    box-shadow: var(--v9-shadow);
    transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
.v9-search:focus-within { border-color: var(--v9-action); box-shadow: var(--v9-shadow-action); }
.v9-search__icon { color: var(--v9-soft); flex: none; }
.v9-search__input {
    flex: 1;
    min-width: 0;
    border: 0;
    outline: 0;
    background: none;
    font: inherit;
    font-size: 1rem;
    color: var(--v9-ink);
    padding: 0.5rem 0;
}
.v9-search__input::-webkit-search-cancel-button { display: none; }
.v9-search__clear { color: var(--v9-soft); padding: 0.3rem 0.5rem; text-decoration: none; background: none; border: 0; cursor: pointer; font: inherit; }
.v9-search__wrap { display: flex; flex-direction: column; align-items: center; gap: 0.5rem; }
.v9-search__wrap .v9-search { width: 100%; margin-bottom: 0; }
.v9-search__count { font-size: 0.85rem; color: var(--v9-muted); font-weight: 500; }
.v9-search__clear:hover { color: var(--v9-ink); }
/* Dentro de la píldora de búsqueda va sin borde y a la altura del campo */
.v9-search__btn { flex: none; min-height: 0; border: 0; padding: 0.6rem 1.3rem; font-size: 1rem; }

/* Versión compacta dentro de la tarjeta del hub I+D */
.v9-search--compact { margin: 0 0 0.9rem; max-width: none; padding: 0.25rem 0.25rem 0.25rem 0.85rem; box-shadow: none; }
.v9-search--compact .v9-search__input { font-size: 0.92rem; padding: 0.35rem 0; }
.v9-search--compact .v9-search__btn { padding: 0.45rem 1rem; font-size: 0.88rem; }

.v9-pubs .v9-filter { justify-content: center; }
.v9-pubs .v9-filter__btn { text-decoration: none; }

.section-block p.v9-pubs__status {
    margin: 0 0 1.2rem;
    text-align: center;
    font-size: 0.9rem !important;
    color: var(--v9-muted) !important;
}
.v9-pubs__status strong { color: var(--v9-ink); }

.v9-pubs__list { margin: 0; padding: 0; list-style: none; }
.v9-pub[hidden] { display: none; }
.v9-pub {
    display: grid;
    grid-template-columns: 64px minmax(0, 1fr);
    gap: 1.2rem;
    padding: 1.1rem 0.4rem;
    border-top: 1px solid var(--v9-line);
}
.v9-pub:last-child { border-bottom: 1px solid var(--v9-line); }
.v9-pub__year {
    font-weight: 700;
    color: var(--v9-action);
    font-variant-numeric: tabular-nums;
    padding-top: 0.15rem;
}
.v9-pub__main { min-width: 0; }
.v9-pub__type {
    display: inline-block;
    margin-bottom: 0.35rem;
    padding: 0.15rem 0.6rem;
    border-radius: var(--v9-r-pill);
    background: rgba(var(--alarcos-green-value), 0.16);
    color: var(--v9-green-ink);
    font-size: 0.7rem;
    font-weight: 700;
    letter-spacing: var(--v9-label-track);
    text-transform: uppercase;
}
.v9-pub__title { margin: 0 0 0.35rem; font-size: 1.05rem; font-weight: 600; line-height: 1.4; color: var(--v9-ink); }
.section-block p.v9-pub__authors { margin: 0 0 0.2rem; font-size: 0.9rem !important; color: var(--v9-text) !important; }
.section-block p.v9-pub__venue { margin: 0 0 0.35rem; font-size: 0.88rem !important; color: var(--v9-muted) !important; font-style: italic; }
.v9-pub__core { font-style: normal; font-weight: 700; color: var(--v9-action); margin-left: 0.4rem; }
.section-block p.v9-pub__links { margin: 0; display: flex; flex-wrap: wrap; gap: 0.4rem 1rem; font-size: 0.85rem !important; }
.v9-pub__links a { color: var(--v9-action); font-weight: 600; text-decoration: none; }
.v9-pub__links a:hover { text-decoration: underline; }
.v9-pub__fact { display: inline-flex; align-items: center; gap: 0.35rem; color: var(--v9-muted); font-size: 0.85rem; }
.v9-pub__fact i { color: rgba(var(--alarcos-blue-value), 0.7); font-size: 0.8rem; }
.v9-sp__temas { max-width: 860px; margin: 0 auto 1.4rem; padding: 0.9rem 1.1rem; border: 1px solid var(--v9-line-soft); border-left: 3px solid var(--v9-action); border-radius: var(--v9-r-sm); background: var(--v9-surface); }
.section-block .v9-sp__temas-t { display: flex; align-items: center; gap: 0.4rem; margin: 0 0 0.4rem; }
.v9-sp__temas-t i { color: var(--v9-action); font-size: 0.8rem; }
.v9-sp__temas ul { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0.4rem 1.4rem; }
.v9-sp__temas li { display: inline-flex; align-items: baseline; gap: 0.45rem; }
.v9-sp__temas a { color: var(--v9-action); font-weight: 700; text-decoration: none; }
.v9-sp__temas a:hover { text-decoration: underline; }
.v9-sp__temas span { color: var(--v9-muted); font-size: 0.85rem; }

/* Tema propuesto en el buscador global (2026-09-22): destacado sobre los resultados sueltos */
.v9-navsearch__opt--tema a { background: rgba(var(--alarcos-blue-value), 0.05); border-left: 3px solid var(--v9-action); }
.v9-navsearch__opt--tema .v9-navsearch__t { font-weight: 700; }

/* Etiquetas temáticas de noticias (2026-09-22): chips #Tema bajo cada noticia y tira de píldoras de filtro */
.section-block p.v9-etq { display: flex; flex-wrap: wrap; gap: 0.35rem 0.4rem; margin: 0.1rem 0 0.7rem; }
.v9-etq__chip {
    display: inline-flex; align-items: center; padding: 0.12rem 0.6rem; border: 1px solid var(--v9-line-soft); border-radius: var(--v9-r-pill);
    background: var(--v9-surface); color: var(--v9-action) !important; font-size: 0.78rem; font-weight: 600; text-decoration: none; line-height: 1.6;
}
.v9-etq__chip:hover { border-color: var(--v9-action-line); background: rgba(var(--alarcos-blue-value), 0.06); text-decoration: none; }
.v9-art__etq { margin-top: 1.4rem; padding-top: 1rem; border-top: 1px solid var(--v9-line-soft); }
.v9-filter--etq .v9-filter__btn { font-size: 0.82rem; padding: 0.3rem 0.8rem; }
.section-block p.v9-etqbar__rss { margin: 0.2rem 0 0 6.2rem; font-size: 0.82rem; }
.v9-etqbar__rss a { display: inline-flex; align-items: center; gap: 0.35rem; color: var(--v9-muted) !important; text-decoration: none; }
.v9-etqbar__rss a:hover { color: var(--v9-action) !important; text-decoration: underline; }
@media (max-width: 700px) { .section-block p.v9-etqbar__rss { margin-left: 0.2rem; } }

/* Filtro de temas en dos ejes (2026-09-22): «Líneas» y «Tipo» con su rótulo, en vez de 21 píldoras seguidas */
.v9-etqbar { display: flex; flex-direction: column; gap: 0.5rem; }
.v9-etqbar__row { display: grid; grid-template-columns: 5.5rem minmax(0, 1fr); align-items: start; gap: 0.4rem 0.7rem; }
.v9-etqbar__lbl { padding-top: 0.35rem; font-size: var(--v9-label-size); font-weight: 700; letter-spacing: var(--v9-label-track); text-transform: uppercase; color: var(--v9-muted); text-align: right; }
.v9-etqbar .v9-filter { margin: 0 !important; justify-content: flex-start; }
@media (max-width: 700px) {
    .v9-etqbar__row { grid-template-columns: 1fr; gap: 0.15rem; }
    .v9-etqbar__lbl { text-align: left; padding: 0 0 0 0.2rem; }
}

/* Relacionadas por tema en la ficha de noticia y últimas noticias en cada línea (2026-09-22) */
.v9-art__rel { margin: 2rem 0 0; padding-top: 1.2rem; border-top: 1px solid var(--v9-line-soft); }
.section-block .v9-art__rel-t { font-size: 1.05rem; font-weight: 700; color: var(--v9-ink); margin: 0 0 0.6rem; }
.v9-art__rel ul, .v9-linea__news ul { list-style: none; margin: 0; padding: 0; }
.v9-art__rel li, .v9-linea__news li { display: flex; gap: 0.6rem; align-items: baseline; margin: 0 0 0.35rem; line-height: 1.45; }
.v9-art__rel a, .v9-linea__news a { color: var(--v9-action); text-decoration: none; }
.v9-art__rel a:hover, .v9-linea__news a:hover { text-decoration: underline; }
.v9-art__rel time, .v9-linea__news time { flex: none; color: var(--v9-muted); font-size: 0.85rem; }
.v9-linea__news { margin: 0.9rem 0 0; padding-top: 0.8rem; border-top: 1px solid var(--v9-line-soft); font-size: 0.92rem; }
.section-block .v9-linea__news-t { display: flex; align-items: center; gap: 0.4rem; margin: 0 0 0.4rem; }
.v9-linea__news-t i { color: var(--v9-action); font-size: 0.85rem; }
.v9-linea__news-all { display: inline-flex; align-items: center; gap: 0.4rem; margin-top: 0.3rem; color: var(--v9-action); font-weight: 600; text-decoration: none; font-size: 0.88rem; }
.v9-linea__news-all:hover { text-decoration: underline; }

/* Cruce proyecto ↔ publicaciones/tesis (2026-09-22): hechos enlazados en las filas de proyectos y aviso de filtro en Publicaciones/Tesis */
.v9-pub__links a.v9-pub__fact--link { color: var(--v9-action); font-weight: 600; }
.section-block p.v9-pubs__proy { display: flex; flex-wrap: wrap; align-items: center; gap: 0.3rem 0.5rem; margin: 0 0 0.6rem; padding: 0.6rem 0.9rem; border-radius: var(--v9-r-sm); background: rgba(var(--alarcos-blue-value), 0.06); font-size: 0.9rem !important; color: var(--v9-text) !important; }
.v9-pubs__proy i { color: var(--v9-action); }
.v9-pubs__proy strong { color: var(--v9-ink); }
.v9-pubs__proy a { color: var(--v9-action); font-weight: 600; text-decoration: none; }
.v9-pubs__proy a:hover { text-decoration: underline; }
body.v9 .v9-pubficha__proy { margin: 0 0 1rem; font-size: 0.92rem; color: var(--v9-text); }
.section-block .v9-pubficha__proy-t { display: flex; align-items: center; gap: 0.4rem; margin: 0 0 0.25rem; }
body.v9 .v9-pubficha__proy i { color: var(--v9-action); font-size: 0.85rem; }
body.v9 .v9-pubficha__proy ul { list-style: none; margin: 0; padding: 0 0 0 1.3rem; border-left: 2px solid var(--v9-line-soft); }
body.v9 .v9-pubficha__proy li { margin: 0 0 0.25rem; line-height: 1.45; }
body.v9 .v9-pubficha__proy a { color: var(--v9-action); font-weight: 600; text-decoration: none; }
body.v9 .v9-pubficha__proy a:hover { text-decoration: underline; }
.v9-pubs mark { background: rgba(var(--alarcos-green-value), 0.35); color: inherit; padding: 0 0.1em; border-radius: 3px; }

.v9-pager { display: flex; justify-content: center; align-items: center; gap: 1rem; margin: 2rem 0 0; }
.v9-pager__info { font-size: 0.9rem; color: var(--v9-muted); font-variant-numeric: tabular-nums; }

.section-block p.v9-form__empty, .v9-form__empty {
    padding: 2rem;
    text-align: center;
    color: var(--v9-muted) !important;
    border: 1px dashed var(--v9-line-strong);
    border-radius: var(--v9-r-media);
}

@media (max-width: 600px) {
    /* Una sola fila: icono · campo · ✕ · botón (el botón solo con la lupa) */
    .v9-search { padding: 0.3rem 0.3rem 0.3rem 0.8rem; gap: 0.3rem; }
    .v9-search__input { font-size: 0.95rem; }
    .v9-search__btn { padding: 0.55rem 0.9rem; font-size: 0; }
    .v9-search__btn::before { content: "\f002"; font-family: "Font Awesome 6 Free"; font-weight: 900; font-size: 0.95rem; }
    .v9-search--compact .v9-search__btn { font-size: 0.85rem; }
    .v9-search--compact .v9-search__btn::before { content: none; }
    .v9-pub { grid-template-columns: 48px minmax(0, 1fr); gap: 0.8rem; }
}

/* Buscador global dentro de cada sección de publicaciones (v9) — centrado
   como todas las píldoras de búsqueda (el margin:auto de .v9-search) */
.v9-search--section { margin: 0.4rem auto; max-width: 640px; }
.n-section p.v9-search__hint,
.section-block p.v9-search__hint {
    margin: 0 0 1.4rem;
    font-size: 0.8rem !important;
    color: var(--v9-muted) !important;
    text-align: center;
}
.v9-pub__type--off { background: var(--v9-surface); color: var(--v9-text); }

/* ==========================================================================
   LIBROS (v9): tarjeta de la familia, portada grande
   ========================================================================== */

.v9-books__tools { margin-bottom: 1.2rem; }

.v9-books__list { display: flex; flex-direction: column; gap: 1.6rem; }

.v9-book {
    display: grid;
    grid-template-columns: 300px minmax(0, 1fr);
    gap: 2.2rem;
    align-items: start;
    padding: 2rem 2.2rem;
}
.v9-book[hidden] { display: none; }

.v9-book__cover {
    display: flex;
    justify-content: center;
    padding: 1.2rem;
    border-radius: var(--v9-r-media);
    background: linear-gradient(135deg, rgba(var(--alarcos-blue-value), 0.06), rgba(var(--alarcos-green-value), 0.08));
}
.v9-book__cover a { display: block; }
.v9-book__cover img {
    display: block;
    width: 280px;            /* producción: 210px máx. — el usuario pidió portada más grande */
    height: auto;
    aspect-ratio: 3 / 4;     /* las portadas son 300×400 */
    object-fit: cover;
    border-radius: 6px 12px 12px 6px;
    box-shadow: -6px 0 0 -3px rgba(0, 0, 0, 0.06) inset, 12px 14px 32px rgba(31, 41, 51, 0.22);
    background: #fff;
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.v9-book__cover a:hover img { transform: translateY(-4px) rotate(-1deg); box-shadow: 14px 22px 40px rgba(31, 41, 51, 0.28); }

.v9-book__body { min-width: 0; text-align: left; }
.section-block p.v9-book__meta {
    display: flex; flex-wrap: wrap; gap: 0.4rem 1rem; align-items: center;
    margin: 0 0 0.5rem; font-size: 0.82rem !important; color: var(--v9-muted) !important; font-weight: 600;
}
.v9-book__year { padding: 0.15rem 0.7rem; border-radius: var(--v9-r-pill); background: rgba(var(--alarcos-blue-value), 0.10); color: var(--v9-action); }
.v9-book__title { margin: 0 0 0.5rem; font-size: 1.45rem; font-weight: 700; line-height: 1.3; letter-spacing: -0.01em; color: var(--v9-ink); }
.section-block p.v9-book__authors { margin: 0 0 0.9rem; font-size: 0.95rem !important; color: var(--v9-action) !important; font-weight: 600; }
.section-block p.v9-book__desc { margin: 0 0 1.1rem; font-size: 0.95rem !important; line-height: 1.65; color: var(--v9-text) !important; }
.section-block p.v9-book__desc.is-folded { display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; margin-bottom: 0.4rem; }
.v9-book__more { margin-bottom: 1.1rem; }
.section-block p.v9-book__foot { display: flex; flex-wrap: wrap; align-items: center; gap: 0.8rem 1.4rem; margin: 0; font-size: 0.82rem !important; color: var(--v9-muted) !important; }
.v9-book__btn { margin: 0.4rem 0 0; font-size: 1rem; }  /* la píldora oficial a su tamaño, no al del párrafo de metadatos */

/* En pantallas anchas, dos libros por fila (79 fichas a una por fila hacían 40.000 px de página; la
   portada manda en el alto de la tarjeta, no el texto). Portada 190 px: sigue siendo la protagonista. */
@media (min-width: 1200px) {
    /* align-items: stretch (por defecto en grid) para que las dos tarjetas de la fila igualen
       altura — con "start" cada una se quedaba con la de su propio contenido y, al variar según
       la sinopsis/autores, quedaban descompensadas una junto a otra (2026-09-21). */
    .v9-books__list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.4rem; }
    .v9-book { grid-template-columns: 210px minmax(0, 1fr); gap: 1.4rem; padding: 1.5rem 1.6rem; }
    .v9-book__cover { padding: 0.9rem; }
    .v9-book__cover img { width: 190px; }
    .v9-book__title { font-size: 1.2rem; }
    .section-block p.v9-book__desc { font-size: 0.9rem !important; line-height: 1.55; }
}
@media (max-width: 900px) {
    .v9-book { grid-template-columns: 1fr; gap: 1.2rem; padding: 1.4rem; }
    .v9-book__cover img { width: min(260px, 70vw); }
}
@media (prefers-reduced-motion: reduce) { .v9-book__cover img { transition: none; } .v9-book__cover a:hover img { transform: none; } }

/* ==========================================================================
   EVENTOS (v9, 2026-09-16): cronología por año + tarjetas de la familia
   ========================================================================== */

.v9-tl { display: flex; flex-direction: column; gap: 0; }

/* Un bloque por año: carril (año + punto) a la izquierda, tarjetas a la derecha */
.v9-tl__year {
    display: grid;
    grid-template-columns: 120px minmax(0, 1fr);
    gap: 0 2rem;
    padding-bottom: 2.2rem;
    position: relative;
}
.v9-tl__year[hidden] { display: none; }
/* La línea de tiempo: filete vertical degradado azul→verde, el toque Alarcos */
.v9-tl__year::before {
    content: "";
    position: absolute;
    left: 111px;
    top: 0.9rem;
    bottom: -0.2rem;
    width: 2px;
    background: linear-gradient(180deg, rgba(var(--alarcos-blue-value), 0.45), rgba(var(--alarcos-green-value), 0.45));
}
.v9-tl__year:last-child::before { bottom: auto; height: calc(100% - 1rem); }

.v9-tl__rail {
    position: sticky;
    top: 92px;
    align-self: start;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 0.8rem;
    height: 2.2rem;
}
.v9-tl__label {
    font-size: 1.45rem;
    font-weight: 700;
    letter-spacing: -0.02em;
    color: var(--v9-ink);
    font-variant-numeric: tabular-nums;
    line-height: 1;
}
/* La bola: punto verde con anillo azul, centrado sobre la línea */
.v9-tl__dot {
    order: 2;
    width: 14px;
    height: 14px;
    border-radius: 50%;
    background: var(--alarcos-green);
    box-shadow: 0 0 0 3px #fff, 0 0 0 5px var(--alarcos-blue);
    margin-right: -14px;
    flex: none;
}

.v9-tl__items { display: flex; flex-direction: column; gap: 1.1rem; }

/* Cronología reutilizada por los listados (Capítulos, Otras, Tesis, 2026-09-18):
   el año va en el carril, así que la fila .v9-pub pierde su columna de año */
.v9-tl .v9-pub { grid-template-columns: minmax(0, 1fr); }

.v9-evt { padding: 1.4rem 1.7rem 1.3rem; }
.v9-evt[hidden] { display: none; }
.v9-evt__meta { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; margin-bottom: 0.55rem; }
.v9-evt__type {
    font-size: var(--v9-label-size);
    font-weight: 700;
    letter-spacing: var(--v9-label-track);
    text-transform: uppercase;
    padding: 0.22rem 0.6rem;
    border-radius: var(--v9-r-pill);
    background: var(--v9-surface);
    color: var(--v9-text);
}
.v9-evt--conf .v9-evt__type      { background: rgba(var(--alarcos-blue-value), 0.12);  color: var(--v9-action-hover); }
.v9-evt--workshop .v9-evt__type  { background: rgba(var(--alarcos-green-value), 0.18); color: var(--v9-green-ink); }
.v9-evt--standards .v9-evt__type { background: rgba(31, 41, 51, 0.85);                 color: #fff; }

.section-block .v9-evt__title {
    margin: 0 0 0.6rem;
    font-size: 1.15rem;
    font-weight: 700;
    line-height: 1.35;
    letter-spacing: -0.01em;
    color: var(--v9-ink);
}
.section-block .v9-evt__desc p { margin: 0 0 0.55rem; font-size: 0.95rem; line-height: 1.6; color: var(--v9-text) !important; }
.section-block .v9-evt__desc p:last-child { margin-bottom: 0; }
/* Descripciones largas: plegadas a 3 líneas hasta "Leer más" */
.v9-evt__desc.is-folded { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.v9-evt__more {
    margin-top: 0.4rem;
    padding: 0;
    border: 0;
    background: none;
    font: inherit;
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--v9-action);
    cursor: pointer;
}
.v9-evt__more:hover { text-decoration: underline; }
.v9-evt__link { margin-top: 0.9rem; }

@media (max-width: 760px) {
    /* El carril pasa arriba: año a la izquierda con la bola, línea a la izquierda de las tarjetas */
    .v9-tl__year { grid-template-columns: minmax(0, 1fr); gap: 0.8rem 0; padding-left: 1.4rem; padding-bottom: 1.8rem; }
    .v9-tl__year::before { left: 6px; top: 0.4rem; }
    .v9-tl__rail { position: static; justify-content: flex-start; height: auto; }
    .v9-tl__dot { order: 0; margin: 0 0 0 -1.4rem; width: 12px; height: 12px; }
    .v9-tl__rail { gap: 0.6rem; }
    .v9-tl__label { font-size: 1.25rem; }
    .v9-evt { padding: 1.2rem 1.2rem 1.1rem; }
}

/* ==========================================================================
   NOTICIAS (v9, 2026-09-16): listado en filas (banner 3:1 entero + texto) y detalle
   ========================================================================== */

/* Las píldoras de año son enlaces (estado en la URL), no botones */
a.v9-filter__btn { text-decoration: none; }

.v9-nw__list { display: flex; flex-direction: column; gap: 1.2rem; }

.v9-nw__item {
    display: grid;
    grid-template-columns: 340px minmax(0, 1fr);
    gap: 1.8rem;
    align-items: center;
    padding: 1.2rem 1.6rem 1.2rem 1.2rem;
}
/* La más reciente, más grande (solo en la primera página sin filtros) */
.v9-nw__item--lead { grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr); padding: 1.4rem 2rem 1.4rem 1.4rem; }

/* El banner 1200×400 ENTERO: caja 3:1, sin recortes */
.v9-nw__media {
    display: block;
    aspect-ratio: 3 / 1;
    border-radius: var(--v9-r-media);
    overflow: hidden;
    background: var(--v9-surface);
    box-shadow: var(--v9-shadow);
}
/* Como en el slider del index: caja 3:1 y object-fit:cover — los banners 1200×400 salen ENTEROS; solo se recorta lo que no es 3:1 */
.v9-nw__media img { display: block; width: 100%; height: auto; aspect-ratio: 3 / 1; object-fit: cover; background: var(--v9-surface); }
.v9-nw__noimg { display: flex; align-items: center; justify-content: center; height: 100%; color: var(--v9-action-line); font-size: 2rem; }

.v9-nw__body { display: flex; flex-direction: column; gap: 0.4rem; min-width: 0; }
.section-block p.v9-nw__meta { display: flex; align-items: center; gap: 0.6rem; margin: 0; font-size: 0.82rem; color: var(--v9-muted) !important; }
.v9-nw__new {
    display: inline-block;
    padding: 0.18rem 0.6rem;
    border-radius: var(--v9-r-pill);
    background: var(--alarcos-green);
    color: var(--v9-green-ink);
    font-size: 0.66rem;
    font-weight: 700;
    letter-spacing: var(--v9-label-track);
    text-transform: uppercase;
}
.section-block .v9-nw__title { margin: 0; font-size: 1.2rem; font-weight: 700; line-height: 1.35; letter-spacing: -0.01em; }
.v9-nw__item--lead .v9-nw__title { font-size: 1.5rem; }
.section-block .v9-nw__title a { color: var(--v9-ink); text-decoration: none; }
.section-block .v9-nw__title a:hover { color: var(--v9-action); }
.section-block p.v9-nw__excerpt { margin: 0; font-size: 0.95rem; line-height: 1.6; color: var(--v9-text) !important; }
.v9-nw__more {
    align-self: flex-start;
    margin-top: 0.3rem;
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    font-size: 0.88rem;
    font-weight: 600;
    color: var(--v9-action);
    text-decoration: none;
}
.v9-nw__more i { transition: transform 0.2s ease; font-size: 0.8rem; }
.v9-nw__more:hover i { transform: translateX(3px); }

/* ── Detalle ─────────────────────────────────────────────────────────────── */
.v9-art { max-width: 860px; margin: 0 auto; }
.v9-art__head { text-align: center; margin-bottom: 1.6rem; }
.section-block p.v9-art__kicker a { color: inherit; text-decoration: none; }
.section-block p.v9-art__kicker a:hover { text-decoration: underline; }
.section-block .v9-art__title { font-size: clamp(1.6rem, 2.6vw, 2.1rem); line-height: 1.25; margin-bottom: 0.7rem; }
.section-block p.v9-art__meta { display: flex; justify-content: center; align-items: center; gap: 0.9rem; margin: 0; font-size: 0.9rem; color: var(--v9-muted) !important; }
.v9-art__draft { padding: 0.2rem 0.7rem; border-radius: var(--v9-r-pill); background: rgba(var(--alarcos-blue-value), 0.12); color: var(--v9-action-hover); font-size: 0.78rem; font-weight: 600; }
.v9-art__media { margin: 0 0 1.8rem; border-radius: var(--v9-r-media); overflow: hidden; box-shadow: var(--v9-shadow-md); background: var(--v9-surface); }
.v9-art__media img { display: block; width: 100%; height: auto; }
.v9-art__body { max-width: 760px; margin: 0 auto; font-size: 1.05rem; line-height: 1.75; color: var(--v9-body); }
.section-block .v9-art__body p { color: var(--v9-body) !important; font-size: 1.05rem; }
.v9-art__body h2, .v9-art__body h3 { margin: 1.6rem 0 0.6rem; font-weight: 700; letter-spacing: -0.01em; }
.v9-art__body h2 { font-size: 1.35rem; } .v9-art__body h3 { font-size: 1.15rem; }
.v9-art__body img { border-radius: var(--v9-r-media); margin: 0.6rem 0; }
.v9-art__body a { color: var(--v9-action); }
.v9-art__body ul, .v9-art__body ol { padding-left: 1.4rem; margin-bottom: 1.2em; }
.v9-art__body blockquote { margin: 1.2rem 0; padding: 0.6rem 1.2rem; border-left: 4px solid var(--alarcos-green); background: rgba(var(--alarcos-green-value), 0.08); border-radius: 0 8px 8px 0; }

.v9-art__nav {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 1rem;
    max-width: 860px;
    margin: 2.4rem auto 0;
    padding-top: 1.6rem;
    border-top: 1px solid var(--v9-line);
}
.v9-art__navlink { display: flex; flex-direction: column; gap: 0.3rem; text-decoration: none; color: var(--v9-ink); padding: 0.9rem 1.1rem; border-radius: var(--v9-r-media); border: 1px solid var(--v9-line); background: #fff; transition: border-color 0.2s ease, box-shadow 0.2s ease; }
.v9-art__navlink:hover { border-color: rgba(var(--alarcos-blue-value), 0.5); box-shadow: var(--v9-shadow); color: var(--v9-ink); }
.v9-art__navlink--next { text-align: right; align-items: flex-end; }
.v9-art__navlabel { font-size: var(--v9-label-size); font-weight: 700; letter-spacing: var(--v9-label-track); text-transform: uppercase; color: var(--v9-action); }
.v9-art__navtitle { font-size: 0.92rem; font-weight: 600; line-height: 1.35; }

@media (max-width: 860px) {
    .v9-nw__item, .v9-nw__item--lead { grid-template-columns: minmax(0, 1fr); gap: 1rem; padding: 1.1rem; }
    .v9-nw__item--lead .v9-nw__title { font-size: 1.25rem; }
}
@media (max-width: 600px) {
    .v9-art__nav { grid-template-columns: minmax(0, 1fr); }
    .v9-art__navlink--next { text-align: left; align-items: flex-start; }
    .v9-art__body { font-size: 1rem; }
    .section-block .v9-art__body p { font-size: 1rem; }
}

/* ==========================================================================
   CONTACTO (v9, 2026-09-16): mapa + tarjeta de datos en dos columnas
   ========================================================================== */

.v9-contact__grid {
    display: grid;
    grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr);
    gap: 1.6rem;
    align-items: stretch;
}
.v9-contact__map {
    position: relative;
    min-height: 380px;
    border-radius: var(--v9-r-card);
    overflow: hidden;
    border: 1px solid var(--v9-line);
    box-shadow: var(--v9-shadow);
    background: var(--v9-surface);
}
/* Filete de marca arriba, como en las tarjetas */
.v9-contact__map::before {
    content: "";
    position: absolute;
    inset: 0 0 auto 0;
    height: 4px;
    z-index: 1;
    background: var(--v9-gradient);
}
.v9-contact__map iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; display: block; }

.v9-contact__card { display: flex; flex-direction: column; gap: 1.2rem; padding: 1.8rem 2rem 1.6rem; }
.v9-contact__brand img { width: 160px; height: auto; }

.v9-contact__rows { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.section-block .v9-contact__rows li {
    display: flex;
    gap: 0.9rem;
    align-items: flex-start;
    padding: 0.85rem 0;
    border-top: 1px solid var(--v9-line-soft);
}
.section-block .v9-contact__rows li:first-child { border-top: 0; padding-top: 0; }
.v9-contact__ico {
    flex: none;
    width: 38px;
    height: 38px;
    border-radius: 50%;
    display: grid;
    place-items: center;
    background: rgba(var(--alarcos-blue-value), 0.10);
    color: var(--v9-action);
    font-size: 0.95rem;
}
.v9-contact__label { display: block; font-size: var(--v9-label-size); font-weight: 700; letter-spacing: var(--v9-label-track); text-transform: uppercase; color: var(--v9-muted); margin-bottom: 0.15rem; }
.v9-contact__value { display: block; font-size: 0.97rem; line-height: 1.55; color: var(--v9-ink); }
.v9-contact__value a { color: var(--v9-action); font-weight: 600; text-decoration: none; }
.v9-contact__value a:hover { text-decoration: underline; }
.v9-contact__social { display: flex; flex-wrap: wrap; gap: 0.4rem 1.2rem; }
.v9-contact__social a { display: inline-flex; align-items: center; gap: 0.4rem; }

.v9-contact__actions { display: flex; align-items: center; flex-wrap: wrap; gap: 1rem; margin-top: auto; padding-top: 0.4rem; }
/* "Cómo llegar": alias de .v9-btn (familia de botones, arriba) */

@media (max-width: 900px) {
    .v9-contact__grid { grid-template-columns: minmax(0, 1fr); }
    /* min-height + aspect-ratio ensanchaban el mapa a 400 px en pantallas de 390 (se cortaba): el alto sale solo del ratio */
    .v9-contact__map { min-height: 0; max-width: 100%; aspect-ratio: 4 / 3; }
    .v9-contact__card { padding: 1.4rem 1.3rem 1.3rem; }
}

/* ==========================================================================
   LÍNEAS DE INVESTIGACIÓN (v9, 2026-09-16): bandas de Spin-offs con ilustración 4:1
   ========================================================================== */
@media (min-width: 901px) { .v9-linea { grid-template-columns: 220px minmax(0, 1fr); } } /* la regla de <900 de .v9-so__item (1 columna) debe ganar */
/* 2026-09-22: ilustraciones cuadradas (assets/img/lineas/, 640×640) en vez de las bandas 4:1 de los Slide-XX */
.v9-linea__img { padding: 0; background: none; align-self: start; }
.v9-linea__img img { max-height: none; aspect-ratio: 1 / 1; object-fit: contain; border-radius: var(--v9-r-media); }
@media (max-width: 900px) { .v9-linea__img { max-width: 220px; } }
.v9-linea .v9-so__name { font-size: 1.3rem; margin-bottom: 0.5rem; }
.section-block .v9-linea__desc, .section-block .v9-linea__desc p { margin: 0 0 0.6rem; font-size: 0.97rem; line-height: 1.65; color: var(--v9-text) !important; text-align: left; }
.section-block .v9-linea__desc p:last-child { margin-bottom: 0; }
.v9-linea__foot { display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem 1.6rem; margin-top: 0.9rem; padding-top: 0.8rem; border-top: 1px solid var(--v9-line-soft); font-size: 0.9rem; }
.v9-linea__contact { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 0.3rem 0.5rem; min-width: 0; color: var(--v9-ink); }
.v9-linea__contact i { color: var(--v9-action); font-size: 0.85rem; }
.v9-linea__label { font-size: var(--v9-label-size); font-weight: 700; letter-spacing: var(--v9-label-track); text-transform: uppercase; color: var(--v9-muted); }
.v9-linea__contact a { color: var(--v9-action); font-weight: 600; text-decoration: none; }
.v9-linea__contact a:hover { text-decoration: underline; }
.v9-linea__extra { display: inline-flex; align-items: center; gap: 0.45rem; color: var(--v9-action); font-weight: 600; text-decoration: none; }
.v9-linea__extra:hover { text-decoration: underline; }
.v9-linea__extra img { height: 22px; width: auto; }

/* ==========================================================================
   FICHA DE TRANSFERENCIA (v9, 2026-09-16): actuaciones como tarjetas abiertas
   ========================================================================== */
.v9-ttf__hero { max-width: 520px; margin: 0.4rem auto 0; }
.v9-ttf__hero img { width: 100%; height: auto; aspect-ratio: 4 / 1; object-fit: contain; }
.v9-ttf__list { display: flex; flex-direction: column; gap: 1.2rem; max-width: 960px; margin: 0 auto; }
.v9-ttf__item { padding: 1.6rem 1.9rem 1.5rem; }
.section-block .v9-ttf__title { display: flex; align-items: flex-start; gap: 0.7rem; font-size: 1.2rem; margin-bottom: 0.8rem; }
.v9-ttf__title i { color: var(--v9-action); font-size: 1rem; margin-top: 0.25rem; }
.v9-ttf__body { font-size: 0.97rem; line-height: 1.7; color: var(--v9-text); text-align: left; }
.section-block .v9-ttf__body p { color: var(--v9-text) !important; }
.v9-ttf__body a { color: var(--v9-action); font-weight: 600; text-decoration: none; }
.v9-ttf__body a:hover { text-decoration: underline; }
.v9-ttf__body strong { color: var(--v9-green-ink); }
.v9-ttf__body img { max-width: 100%; height: auto; border-radius: var(--v9-r-sm); }
.v9-ttf__others { margin-top: 2.4rem; text-align: center; }
.section-block p.v9-ttf__others-label { margin: 0 0 0.8rem; font-size: var(--v9-label-size) !important; font-weight: 700; letter-spacing: var(--v9-label-track); text-transform: uppercase; color: var(--v9-muted) !important; }
.v9-ttf__others .v9-filter__btn { font-size: 0.82rem; padding: 0.45rem 0.9rem; }

/* ==========================================================================
   SERVICIOS (v9, 2026-09-16): hub de los tres servicios reales (tarjeta del hub I+D)
   ========================================================================== */
.v9-serv__ico {
    flex: none;
    width: 64px;
    height: 64px;
    border-radius: 50%;
    display: grid;
    place-items: center;
    font-size: 1.5rem;
    color: #fff;
    background: linear-gradient(135deg, var(--alarcos-blue), var(--alarcos-green));
    box-shadow: var(--v9-shadow-action);
}
.v9-serv .v9-form__list { margin-bottom: 0.9rem; }

/* ==========================================================================
   PÁGINAS LEGALES (v9, 2026-09-16): texto de producción, envoltorio de la familia
   ========================================================================== */
.v9-legal__body { max-width: 820px; margin: 0 auto; text-align: left; }
.v9-legal__body .v9-page__kicker { display: flex; justify-content: center; }
.v9-legal__body .v9-page__title { text-align: center; margin-bottom: 1.6rem; }
.section-block .v9-legal__body p.footer-text, .section-block .v9-legal__body p { font-size: 1rem; line-height: 1.7; color: var(--v9-text) !important; margin: 0 0 1rem; }
.v9-legal__body h2.footer-title, .v9-legal__body h3.footer-title, .v9-legal__body h2, .v9-legal__body h3 {
    margin: 2rem 0 0.6rem; font-weight: 700; letter-spacing: -0.01em; color: var(--v9-ink); position: relative; padding-left: 0.9rem;
}
.v9-legal__body h2.footer-title::before, .v9-legal__body h3.footer-title::before, .v9-legal__body h2::before, .v9-legal__body h3::before {
    content: ""; position: absolute; left: 0; top: 0.35em; bottom: 0.25em; width: 3px; border-radius: 2px;
    background: linear-gradient(180deg, var(--alarcos-blue), var(--alarcos-green));
}
.v9-legal__body h2 { font-size: 1.2rem; } .v9-legal__body h3 { font-size: 1.05rem; }
.v9-legal__body a { color: var(--v9-action); }
.v9-legal__body ul, .v9-legal__body ol { padding-left: 1.4rem; margin-bottom: 1rem; color: var(--v9-text); }
.v9-legal__body li { line-height: 1.65; margin-bottom: 0.3rem; }
.v9-legal__body table { width: 100%; font-size: 0.9rem; margin: 0.6rem 0 1.4rem; }
.v9-legal__body .table-responsive, .v9-legal__body table { display: block; overflow-x: auto; }
.v9-legal__body th { background: rgba(var(--alarcos-blue-value), 0.08); }
/* Servicios: Formación · Consultoría · Herramientas en 3 columnas desde 901px (por debajo, 1 columna como .v9-id__grid) */
@media (min-width: 901px) { .v9-serv__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.section-block .v9-legal__body .footer-title { color: var(--v9-ink); } /* style.css pinta los h5.footer-title en azul */

/* ==========================================================================
   PÁGINA PERSONAL (v9, 2026-09-17): cabecera compacta, menú personal de 4, filtros en fila
   Todo bajo .v9-wp para no tocar otras pantallas.
   ========================================================================== */
/* Paleta: la de la casa (unificación 2026-09-17). Los alias --wp-* se
   conservan por compatibilidad del marcado pero ya no definen colores propios. */
.v9-wp { --wp-ink: var(--v9-ink); --wp-navy: var(--v9-ink); --wp-action: var(--v9-action); --wp-cyan: var(--v9-action); --wp-muted: var(--v9-muted); --wp-border: var(--v9-line); --wp-surface: #fff; }
.v9-wp .container { max-width: 1140px; }

/* Cabecera compacta: foto · texto · acciones */
.v9-wp-head {
    display: grid;
    grid-template-columns: 128px minmax(0, 1fr) auto;
    gap: 1.4rem 1.8rem;
    align-items: center;
    padding: 1.4rem 1.8rem;
    background: var(--wp-surface);
    border: 1px solid var(--wp-border);
    border-radius: var(--v9-r-card);
    box-shadow: var(--v9-shadow);
    position: relative;
    overflow: hidden;
}
.v9-wp-head::before { content: ""; position: absolute; inset: 0 0 auto 0; height: 4px; background: var(--v9-gradient); }
.v9-wp-head__photo img, .v9-wp-head__noimg {
    display: block; width: 128px; height: 128px; border-radius: 50%; object-fit: cover;
    border: 3px solid #fff; box-shadow: 0 0 0 2px var(--v9-action-line), 0 6px 16px rgba(31, 41, 51, 0.12);
}
.v9-wp-head__noimg { display: grid; place-items: center; background: var(--v9-surface); color: var(--v9-soft); font-size: 2.4rem; }
.v9-wp-head__text { min-width: 0; }
.section-block p.v9-wp-head__kicker { margin-bottom: 0.2rem; }
.v9-wp-head__kicker::before, .v9-wp-head__kicker::after { display: none; }
.v9-wp-head__name { margin: 0 0 0.3rem; font-size: clamp(1.45rem, 2.4vw, 1.9rem); font-weight: 700; letter-spacing: -0.02em; line-height: 1.2; color: var(--wp-navy); overflow-wrap: anywhere; }
.section-block p.v9-wp-head__role { margin: 0; font-size: 1.02rem; font-weight: 600; color: var(--wp-ink) !important; }
.section-block p.v9-wp-head__org  { margin: 0.1rem 0 0; font-size: 0.95rem; color: var(--wp-muted) !important; }
.v9-wp-head__actions { display: flex; justify-content: flex-end; align-self: center; }
/* Iconos de redes: el mismo componente que Miembros (.social-box de style.css + tintes de body.v9 .social-icon-link) */
.v9-wp-head__actions .social-box { margin: 0; min-height: 0; width: auto; }
.v9-wp-head__actions .social-row { justify-content: flex-end; }
.v9-wp-act__chev { font-size: 0.7rem; transition: transform 0.2s ease; }

/* Menú personal: 4 enlaces, sticky bajo la barra en escritorio */
.v9-wp-nav {
    display: flex; gap: 0.4rem; margin: 1rem 0 1.4rem; padding: 0.4rem;
    background: var(--wp-surface); border: 1px solid var(--wp-border); border-radius: var(--v9-r-pill);
    position: sticky; top: 76px; z-index: 20; box-shadow: var(--v9-shadow-sm);
}
.v9-wp-nav__link {
    flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; min-height: 44px; padding: 0.6rem 0.9rem;
    border-radius: var(--v9-r-pill); color: var(--wp-ink); font-weight: 600; font-size: 0.95rem; text-decoration: none;
    transition: background-color 0.2s ease, color 0.2s ease;
}
.v9-wp-nav__link i { color: var(--wp-cyan); font-size: 0.9rem; }
.v9-wp-nav__link:hover { background: rgba(var(--alarcos-blue-value), 0.08); color: var(--wp-action); }
.v9-wp-nav__link:focus-visible { outline: 3px solid rgba(var(--alarcos-green-value), 0.6); outline-offset: -3px; }
.v9-wp-nav__link.is-active { background: var(--v9-action); color: #fff; }
.v9-wp-nav__link.is-active i { color: #fff; }

/* Secciones */
.v9-wp-body { padding: 0.2rem 0 1rem; }
.v9-wp-sec__head { display: flex; align-items: baseline; gap: 0.6rem; margin-bottom: 0.9rem; }
.v9-wp-sec__title { margin: 0; font-size: 1.35rem; font-weight: 700; letter-spacing: -0.01em; color: var(--wp-navy); text-align: left; }
.v9-wp-sec__n { font-size: 0.85rem; font-weight: 700; color: var(--v9-action); background: rgba(var(--alarcos-blue-value), 0.10); padding: 0.15rem 0.6rem; border-radius: var(--v9-r-pill); vertical-align: middle; margin-left: 0.4rem; font-variant-numeric: tabular-nums; }
.v9-wp .v9-filter { justify-content: flex-start; margin-bottom: 0.9rem; }
.v9-wp .v9-filter__btn { min-height: 44px; }

/* Filtros: buscador · año · orden · limpiar */
.v9-wp-tools { display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem 0.9rem; margin: 0 0 1.2rem; }
.v9-wp-tools__q { flex: 1 1 320px; margin: 0; max-width: none; }
.v9-wp-tools__sel { display: inline-flex; align-items: center; gap: 0.45rem; font-size: 0.85rem; color: var(--wp-muted); }
.v9-wp-tools__sel select { min-height: 44px; padding: 0.4rem 0.7rem; border: 2px solid var(--v9-action-line); border-radius: var(--v9-r-sm); background: #fff; color: var(--wp-ink); font: inherit; font-size: 0.9rem; }
.v9-wp-tools__sel select:focus-visible { outline: 3px solid rgba(var(--alarcos-green-value), 0.6); outline-offset: 1px; }
.v9-wp-tools__clear { min-height: 44px; }

/* Listado por año */
.v9-wp-year { margin-bottom: 1.4rem; }
.v9-wp-year[hidden] { display: none; }
.v9-wp-year__label { margin: 0 0 0.2rem; font-size: 1.05rem; font-weight: 700; color: var(--wp-navy); text-align: left; padding-bottom: 0.3rem; border-bottom: 2px solid rgba(var(--alarcos-blue-value), 0.25); }
.v9-wp .v9-pub { padding: 0.9rem 0.2rem; }
.v9-wp .v9-pub__title { text-align: left; }
.v9-wp .v9-pub__title a { color: var(--wp-ink); text-decoration: none; }
.v9-wp .v9-pub__title a:hover { color: var(--wp-action); text-decoration: underline; }
.v9-wp-me { color: var(--wp-navy); font-weight: 700; }
.v9-wp-doi { font-size: 0.8rem; color: var(--wp-muted); font-variant-numeric: tabular-nums; }
.v9-wp-more { padding: 0; border: 0; background: none; font: inherit; font-size: 0.85rem; font-weight: 600; color: var(--wp-action); cursor: pointer; min-height: 32px; }
.v9-wp-more:hover { text-decoration: underline; }
.v9-wp-more--inline { margin-left: 0.4rem; font-size: 0.82rem; min-height: 0; }
.v9-wp-more:focus-visible { outline: 3px solid rgba(var(--alarcos-green-value), 0.6); outline-offset: 2px; border-radius: 4px; }

/* Libros dentro del listado */
.v9-wp-book { display: grid; grid-template-columns: 96px minmax(0, 1fr); gap: 1.1rem; align-items: start; }
.v9-wp-book__cover img { display: block; width: 96px; height: auto; aspect-ratio: 3 / 4; object-fit: contain; background: var(--v9-surface); border-radius: 4px 8px 8px 4px; box-shadow: var(--v9-shadow-md); }
.section-block p.v9-wp-book__desc { margin: 0.3rem 0 0.4rem; font-size: 0.92rem !important; line-height: 1.55; color: var(--v9-text) !important; text-align: left; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.section-block p.v9-wp-book__desc.is-open { display: block; -webkit-line-clamp: unset; }
.v9-wp-book__meta { display: flex; flex-wrap: wrap; gap: 0.3rem 1.2rem; margin: 0.2rem 0 0.5rem; font-size: 0.85rem; color: var(--wp-muted); }
.v9-wp-book__meta strong { color: var(--wp-ink); font-weight: 600; }

/* Proyectos */
.v9-wp-proj__role { display: inline-flex; align-items: center; gap: 0.4rem; }
.v9-wp-proj__role i { color: var(--wp-cyan); font-size: 0.8rem; }
.v9-wp-proj__detail { margin: 0.4rem 0 0.5rem; padding: 0.7rem 0.9rem; background: var(--v9-surface-2); border-radius: var(--v9-r-sm); font-size: 0.9rem; }
.section-block .v9-wp-proj__detail p { margin: 0 0 0.35rem; font-size: 0.9rem !important; color: var(--v9-text) !important; text-align: left; line-height: 1.55; }
.section-block .v9-wp-proj__detail p:last-child { margin-bottom: 0; }
.v9-wp-proj__detail a { color: var(--wp-action); font-weight: 600; text-decoration: none; }
.v9-wp-proj__detail a:hover { text-decoration: underline; }

/* Noticias: 3 / 2 / 1 columnas */
.v9-wp-news { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1.1rem; }
.v9-wp-news__item { display: flex; flex-direction: column; background: #fff; border: 1px solid var(--wp-border); border-radius: var(--v9-r-media); overflow: hidden; box-shadow: var(--v9-shadow-sm); }
.v9-wp-news__media { display: block; aspect-ratio: 3 / 1; background: var(--v9-surface); }
.v9-wp-news__media img { display: block; width: 100%; height: 100%; object-fit: contain; }  /* carteles y capturas enteros */
.v9-wp-news__noimg { display: flex; align-items: center; justify-content: center; height: 100%; color: var(--v9-action-line); font-size: 1.8rem; }
.v9-wp-news__body { display: flex; flex-direction: column; gap: 0.35rem; padding: 0.9rem 1rem 1rem; text-align: left; }
.v9-wp-news__date { font-size: 0.78rem; font-weight: 600; color: var(--wp-muted); }
.v9-wp-news__title { margin: 0; font-size: 1rem; font-weight: 700; line-height: 1.35; display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; }
.v9-wp-news__title a { color: var(--wp-ink); text-decoration: none; }
.v9-wp-news__title a:hover { color: var(--wp-action); }
.section-block p.v9-wp-news__ex { margin: 0; font-size: 0.88rem !important; line-height: 1.5; color: var(--v9-text) !important; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }

/* Perfil / bio: medida de lectura, sin justificar */
.v9-wp-bio { max-width: 72ch; }
.section-block .v9-wp-bio p, .section-block .v9-wp-bio .v9-wp-bio__p, .section-block p.v9-wp-bio__p { margin: 0 0 1rem; font-size: 1.02rem; line-height: 1.7; color: var(--v9-body) !important; text-align: left; }
.v9-wp-bio .is-center { text-align: center; } .v9-wp-bio .is-right { text-align: right; }
.v9-wp-bio h3, .v9-wp-bio .v9-wp-bio__h, .v9-wp-bio--html h4, .v9-wp-bio--html h5 { margin: 1.4rem 0 0.5rem; font-size: 1.15rem; font-weight: 700; color: var(--wp-navy); text-align: left; }
.v9-wp-bio--html p { text-align: left !important; }
.v9-wp-bio img { max-width: 100%; height: auto; border-radius: var(--v9-r-sm); }
.v9-wp-bio a { color: var(--wp-action); }
.section-block p.v9-wp-note { margin: 0 0 0.8rem; font-size: 0.85rem !important; color: var(--wp-muted) !important; }

/* Estados */
.v9-wp-state { padding: 1.6rem; text-align: center; border-radius: var(--v9-r-media); border: 1px dashed var(--v9-line-strong); }
.section-block .v9-wp-state p { color: var(--wp-ink) !important; margin-bottom: 0.8rem; }

@media (max-width: 1099px) {
    .v9-wp-news { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .v9-wp-head { grid-template-columns: 112px minmax(0, 1fr); }
    .v9-wp-head__actions { grid-column: 1 / -1; justify-content: flex-start; max-width: none; }
    .v9-wp-head__actions .social-row { justify-content: flex-start; }
    .v9-wp-head__photo img, .v9-wp-head__noimg { width: 112px; height: 112px; }
}
@media (max-width: 767px) {
    .v9-wp-head { grid-template-columns: 96px minmax(0, 1fr); gap: 1rem; padding: 1.1rem 1.1rem 1.2rem; }
    .v9-wp-head__photo img, .v9-wp-head__noimg { width: 96px; height: 96px; }
    .v9-wp-head__name { font-size: 1.35rem; }
    .v9-wp-nav { position: static; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); border-radius: var(--v9-r-card); }
    .v9-wp-news { grid-template-columns: minmax(0, 1fr); }
    .v9-wp-tools__q { flex-basis: 100%; }
    .v9-wp-tools__sel { flex: 1 1 45%; }
    .v9-wp-tools__sel select { flex: 1; min-width: 0; }
    .v9-wp-book { grid-template-columns: 72px minmax(0, 1fr); gap: 0.8rem; }
    .v9-wp-book__cover img { width: 72px; }

}
@media (prefers-reduced-motion: reduce) { .v9-wp *, .v9-wp *::before { transition: none !important; } }
/* En la página personal el listado ya va agrupado por año: la columna de año de la fila sobra */
.v9-wp .v9-pub { grid-template-columns: minmax(0, 1fr); gap: 0; }
.v9-wp .v9-pub__year { display: none; }
.v9-wp-tools__q { min-width: 0; }                              /* flex item: sin esto el <input> estira la píldora */
.v9-wp .v9-search--compact { padding: 0.2rem 0.2rem 0.2rem 0.9rem; }
.v9-wp .v9-search--compact .v9-search__btn { min-height: 44px; }  /* área táctil mínima */
.section-block.v9-wp { overflow: visible; }   /* .featured-news-section lleva overflow:hidden y anula el sticky del menú personal */
.section-block.v9-wp::after { display: none; }  /* el halo decorativo (right:-50px) desbordaría sin el overflow:hidden */

/* Perfil: bio en tarjeta con entradilla + panel lateral "En cifras" (datos reales) */
.v9-wp-perfil { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 1.6rem; align-items: start; }
.v9-wp-perfil--solo { grid-template-columns: minmax(0, 1fr); }
/* Bio corta (2026-09-23): el sidebar sería la columna más alta y dejaría un vacío
   al lado de la bio → una sola columna y «En cifras» como banda con rejilla fluida. */
.v9-wp-perfil--corta { grid-template-columns: minmax(0, 1fr); }
.v9-wp-perfil--corta .v9-wp-facts { position: static; }
.v9-wp-perfil--corta .v9-wp-facts__list { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); column-gap: 1.6rem; }
.v9-wp-perfil--corta .v9-wp-facts__list li { border-top: 0; padding-top: 0.55rem; }
.v9-wp-perfil .v9-wp-sec { padding: 1.6rem 1.9rem 1.5rem; background: #fff; border: 1px solid var(--wp-border); border-radius: var(--v9-r-card); box-shadow: var(--v9-shadow); position: relative; overflow: hidden; }
.v9-wp-perfil .v9-wp-sec::before { content: ""; position: absolute; inset: 0 0 auto 0; height: 4px; background: var(--v9-gradient); }
.v9-wp-perfil .v9-wp-bio { max-width: none; }
/* Entradilla: el primer párrafo, más grande y en azul oscuro */
.section-block .v9-wp-perfil .v9-wp-bio > p:first-child, .section-block .v9-wp-perfil .v9-wp-bio > .v9-wp-bio__p:first-child {
    font-size: 1.12rem; line-height: 1.65; color: var(--wp-navy) !important; font-weight: 500; padding-bottom: 1rem; margin-bottom: 1.1rem; border-bottom: 1px solid var(--wp-border);
}
.section-block .v9-wp-perfil .v9-wp-bio > p:first-child:last-child { border-bottom: 0; padding-bottom: 0; margin-bottom: 0; }
.v9-wp-facts { padding: 1.3rem 1.4rem 1.2rem; border-radius: var(--v9-r-card); background: linear-gradient(160deg, rgba(var(--alarcos-blue-value), 0.07), rgba(var(--alarcos-green-value), 0.09)); border: 1px solid var(--v9-line); position: sticky; top: 148px; }
.section-block p.v9-wp-facts__kicker { margin: 0 0 0.6rem; font-size: 0.7rem !important; font-weight: 700; letter-spacing: var(--v9-label-track); text-transform: uppercase; color: var(--v9-action) !important; }
.v9-wp-facts__kicker + .v9-wp-facts__kicker, .v9-wp-facts__list + .v9-wp-facts__kicker, .v9-wp-facts__lines + .v9-wp-facts__kicker { margin-top: 1.1rem; }
.v9-wp-facts__list, .v9-wp-facts__lines { list-style: none; margin: 0; padding: 0; }
.v9-wp-facts__list li { padding: 0.55rem 0; border-top: 1px solid var(--v9-line); }
.v9-wp-facts__list li:first-child { border-top: 0; padding-top: 0; }
.v9-wp-facts__list a { display: flex; align-items: baseline; gap: 0.6rem; text-decoration: none; color: var(--wp-ink); min-height: 44px; align-items: center; }
.v9-wp-facts__n { font-size: 1.55rem; font-weight: 700; letter-spacing: -0.02em; color: var(--wp-navy); font-variant-numeric: tabular-nums; min-width: 2.4ch; }
.v9-wp-facts__l { font-weight: 600; font-size: 0.95rem; flex: 1; }
.v9-wp-facts__list a i { font-size: 0.75rem; color: var(--v9-action); transition: transform 0.2s ease; }
.v9-wp-facts__list a:hover .v9-wp-facts__l { color: var(--wp-action); }
.v9-wp-facts__list a:hover i { transform: translateX(3px); }
.v9-wp-facts__sub { display: block; font-size: 0.8rem; color: var(--wp-muted); margin-top: -0.2rem; }
.v9-wp-facts__lines li { padding: 0.25rem 0; }
.v9-wp-facts__lines a { display: inline-flex; align-items: center; gap: 0.5rem; color: var(--wp-ink); text-decoration: none; font-size: 0.92rem; font-weight: 600; min-height: 32px; }
.v9-wp-facts__lines a:hover { color: var(--wp-action); }
.v9-wp-facts__lines i { color: var(--alarcos-green); font-size: 0.85rem; }
.section-block p.v9-wp-facts__last { margin: 0; font-size: 0.9rem !important; line-height: 1.45; color: var(--wp-ink) !important; }
.v9-wp-facts__last a { color: var(--wp-ink); font-weight: 600; text-decoration: none; }
.v9-wp-facts__last a:hover { color: var(--wp-action); }
.v9-wp-facts__last .v9-pub__type { margin-bottom: 0.3rem; }
@media (max-width: 1099px) { .v9-wp-perfil { grid-template-columns: minmax(0, 1fr); } .v9-wp-facts { position: static; } }
/* Bio de un solo párrafo: sin entradilla (sería un muro de texto grande) */
.section-block .v9-wp-perfil .v9-wp-bio > p:first-child:last-child { font-size: 1.02rem; font-weight: 400; color: var(--v9-body) !important; }
/* Citar (APA / BibTeX) */
.v9-wp-cite { padding: 0; border: 0; background: none; font: inherit; font-size: 0.85rem; font-weight: 600; color: var(--wp-action); cursor: pointer; display: inline-flex; align-items: center; gap: 0.35rem; min-height: 32px; }
.v9-wp-cite:hover { text-decoration: underline; }
.v9-wp-cite[aria-expanded="true"] { color: var(--wp-navy); }
.v9-wp-cite__panel { margin: 0.6rem 0 0.2rem; padding: 0.8rem 0.9rem; background: var(--v9-surface-2); border: 1px solid var(--wp-border); border-radius: var(--v9-r-sm); display: grid; gap: 0.7rem; }
.v9-wp-cite__panel[hidden] { display: none; }
.v9-wp-cite__row { display: flex; align-items: center; justify-content: space-between; margin-bottom: 0.3rem; }
.v9-wp-cite__lab { font-size: var(--v9-label-size); font-weight: 700; letter-spacing: var(--v9-label-track); text-transform: uppercase; color: var(--wp-muted); }
.v9-wp-cite__close { justify-self: end; }
.v9-wp-cite__panel textarea { width: 100%; resize: vertical; padding: 0.5rem 0.6rem; border: 1px solid var(--wp-border); border-radius: var(--v9-r-sm); background: #fff; color: var(--wp-ink); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 0.8rem; line-height: 1.45; }
.v9-wp-tools__print { min-height: 44px; margin-left: auto; }

/* Impresión de la página personal: la lista (filtrada) como CV limpio */
@media print {
    .navbar, footer, .footer, #alarcos-variantes, .v9-wp-nav, .v9-wp-tools, .v9-wp-head__actions, .v9-wp-cats, .v9-wp-cite, .v9-wp-cite__panel, .v9-wp-more, .v9-wp-facts, .scroll-top, .back-to-top, .v9-pub__links a[href^="#"] { display: none !important; }
    body { padding-top: 0 !important; background: #fff !important; }
    .v9-wp .container { max-width: none; }
    .v9-wp-head { box-shadow: none; border: 0; border-bottom: 2px solid var(--v9-ink); border-radius: 0; padding: 0 0 0.8rem; }
    .v9-wp-head::before { display: none; }
    .v9-wp-head__photo img { width: 72px; height: 72px; }
    .v9-wp-pub, .v9-wp-year { break-inside: avoid; }
    .v9-wp .v9-pub { padding: 0.45rem 0; }
    .v9-wp-pub[hidden] { display: none !important; }
    .v9-pub__links a::after { content: " (" attr(href) ")"; font-size: 0.75rem; color: var(--v9-muted); }

}

/* ==========================================================================
   BUSCADOR GLOBAL (v9, 2026-09-17): caja en la barra + página de resultados por ámbito
   ========================================================================== */
/* "Saltar al contenido": fuera de pantalla hasta que recibe el foco (WCAG 2.4.1) */
.v9-skip { position: absolute; left: 1rem; top: -100px; z-index: 2000; padding: 0.6rem 1rem; border-radius: var(--v9-r-pill); background: var(--v9-action); color: #fff; font-weight: 600; text-decoration: none; transition: top 0.15s ease; }
.v9-skip:focus-visible { top: calc(var(--navbar-height, 72px) + 0.5rem); outline: 3px solid rgba(var(--alarcos-green-value), 0.7); outline-offset: 2px; }
#dynamic-content:focus { outline: none; }

/* Pie: la columna de contacto (col-lg-2) no puede partir «alarcos.group@uclm.es»
   y a 1024 px desbordaba 13 px con scroll horizontal en toda la web (auditoría 2026-09-17). */
body.v9 .site-footer .footer-contact p { overflow-wrap: anywhere; }
body.v9 .site-footer .footer-contact a { color: inherit; text-decoration: none; }
body.v9 .site-footer .footer-contact a:hover, body.v9 .site-footer .footer-contact a:focus-visible { color: #fff; text-decoration: underline; }

/* ── Barra: herramientas (buscador con sugerencias + idioma), 2026-09-17 ──
   Marcado en index.php (.v9-navtools, fuera del collapse) y comportamiento en
   assets/js/v9-nav.js. Escritorio: [logo] [menú centrado] [buscador][ES/EN].
   Móvil: la lupa abre un panel a todo el ancho bajo la barra. */
/* Orden del DOM = orden de tabulación = orden visual en escritorio: logo · menú · herramientas.
   En móvil el toggler (último en el DOM) se coloca a la derecha con `order`. */
.v9-navtools { display: flex; align-items: center; gap: 0.6rem; order: 3; margin-left: auto; }
.navbar .navbar-toggler { order: 4; margin-left: 0.4rem; }
.navbar .navbar-collapse { order: 2; }
@media (max-width: 991px) { .navbar .navbar-collapse { order: 5; flex-basis: 100%; } }
.v9-navsearch__open {
    display: none; width: 40px; height: 40px; border: 2px solid var(--v9-action-line); border-radius: 50%;
    background: #fff; color: var(--v9-action); font-size: 0.95rem; cursor: pointer; align-items: center; justify-content: center;
    transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}
.v9-navsearch__open:hover, .v9-navsearch__open[aria-expanded="true"] { background: var(--v9-action); border-color: var(--v9-action); color: #fff; }
.v9-navsearch__panel { position: relative; }
.v9-navsearch {
    display: flex; align-items: center; width: 250px; padding: 0.15rem 0.15rem 0.15rem 0.8rem;
    border: 2px solid var(--v9-action-line); border-radius: var(--v9-r-pill); background: #fff;
    transition: border-color 0.2s ease, box-shadow 0.2s ease, width 0.2s ease;
}
.v9-navsearch:focus-within { border-color: var(--v9-action); box-shadow: var(--v9-shadow-action); width: 320px; }
.v9-navsearch__icon { color: var(--v9-soft); font-size: 0.85rem; margin-right: 0.45rem; }
.v9-navsearch__input { flex: 1; min-width: 0; border: 0; outline: 0; background: none; font: inherit; font-size: 0.9rem; color: var(--v9-ink); padding: 0.35rem 0; }
.v9-navsearch__input::placeholder { color: var(--v9-muted); }
.v9-navsearch__input::-webkit-search-cancel-button { display: none; }
.v9-navsearch__clear { flex: none; width: 30px; height: 30px; border: 0; border-radius: 50%; background: none; color: var(--v9-muted); cursor: pointer; font-size: 0.8rem; }
.v9-navsearch__clear:hover { background: var(--v9-surface); color: var(--v9-ink); }
.v9-navsearch__btn { flex: none; width: 34px; height: 34px; border: 0; border-radius: 50%; background: var(--v9-action); color: #fff; font-size: 0.85rem; cursor: pointer; display: grid; place-items: center; transition: background-color 0.2s ease; }
.v9-navsearch__btn:hover { background: var(--v9-action-hover); }
.v9-navsearch__clear:focus-visible, .v9-navsearch__btn:focus-visible, .v9-navsearch__open:focus-visible, .v9-lang__opt:focus-visible { outline: 3px solid rgba(var(--alarcos-green-value), 0.7); outline-offset: 2px; }
/* Desplegable de sugerencias */
.v9-navsearch__drop {
    position: absolute; top: calc(100% + 8px); right: 0; width: min(440px, calc(100vw - 2rem)); z-index: 1050;
    background: #fff; border: 1px solid var(--v9-line); border-radius: var(--v9-r-media); box-shadow: var(--v9-shadow-lg); overflow: hidden;
}
.v9-navsearch__list { list-style: none; margin: 0; padding: 0.35rem; max-height: min(60vh, 460px); overflow-y: auto; }
.v9-navsearch__opt a { display: flex; flex-direction: column; gap: 0.1rem; padding: 0.55rem 0.75rem; border-radius: var(--v9-r-sm); color: var(--v9-ink); text-decoration: none; }
.v9-navsearch__opt.is-active a, .v9-navsearch__opt a:hover { background: rgba(var(--alarcos-blue-value), 0.08); }
.v9-navsearch__t { font-size: 0.92rem; font-weight: 600; line-height: 1.3; }
.v9-navsearch__m { font-size: 0.78rem; color: var(--v9-muted); }
.v9-navsearch__opt mark { background: rgba(var(--alarcos-green-value), 0.35); color: inherit; padding: 0 1px; border-radius: 2px; }
.v9-navsearch__opt--all { position: sticky; bottom: -0.35rem; background: #fff; border-top: 1px solid var(--v9-line-soft); margin-top: 0.25rem; padding: 0.25rem 0 0.35rem; }
.v9-navsearch__opt--all a { flex-direction: row; align-items: center; gap: 0.4rem; color: var(--v9-action); font-weight: 600; font-size: 0.88rem; }
.v9-navsearch__status { margin: 0; padding: 0.55rem 0.9rem; font-size: 0.82rem; color: var(--v9-muted); border-top: 1px solid var(--v9-line-soft); }
.v9-navsearch__status:empty { display: none; }
.v9-navsearch__list:empty + .v9-navsearch__status { border-top: 0; }
.v9-navsearch__status.is-error { color: #9f1d1d; }
.v9-navsearch__retry { margin-left: 0.4rem; padding: 0.1rem 0.6rem; border: 1px solid currentColor; border-radius: var(--v9-r-pill); background: none; color: var(--v9-action); font: inherit; font-size: 0.8rem; font-weight: 600; cursor: pointer; }
/* Selector de idioma ES / EN: control segmentado; el activo, relleno de azul */
/* Enlace «Accesibilidad» en la barra (2026-09-22): mismo círculo que el botón de búsqueda móvil; en pantallas estrechas se queda solo el del pie */
.v9-navacc {
    display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border: 2px solid var(--v9-action-line); border-radius: 50%;
    background: #fff; color: var(--v9-action); font-size: 1.05rem; text-decoration: none;
    transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}
.v9-navacc:hover, .v9-navacc:focus-visible { background: var(--v9-action); color: #fff; border-color: var(--v9-action); }
@media (max-width: 480px) { .v9-navacc { display: none; } }
.v9-lang { display: inline-flex; padding: 3px; border: 2px solid var(--v9-action-line); border-radius: var(--v9-r-pill); background: #fff; }
.v9-lang__opt {
    display: inline-flex; align-items: center; justify-content: center; min-width: 40px; min-height: 30px; padding: 0 0.6rem;
    border-radius: var(--v9-r-pill); color: var(--v9-muted); font-size: 0.8rem; font-weight: 700; letter-spacing: 0.06em; text-decoration: none;
    transition: background-color 0.2s ease, color 0.2s ease;
}
.v9-lang__opt:hover { color: var(--v9-action); background: rgba(var(--alarcos-blue-value), 0.08); }
.v9-lang__opt.is-active { background: var(--v9-action); color: #fff; }
@media (max-width: 1199px) { .v9-navsearch { width: 190px; } .v9-navsearch:focus-within { width: 260px; } }
/* Hasta 1099 px el campo no cabe junto al menú expandido: lupa + panel, como en móvil */
@media (max-width: 1099px) {
    .v9-navtools { gap: 0.5rem; }
    .v9-navsearch__open { display: inline-flex; }
    .v9-navsearch__panel { display: none; position: fixed; left: 0; right: 0; top: var(--navbar-height, 72px); padding: 0.75rem 1rem 1rem; background: #fff; border-bottom: 1px solid var(--v9-line); box-shadow: var(--v9-shadow-md); z-index: 1040; }
    .v9-navsearch__panel.is-open { display: block; }
    .v9-navsearch, .v9-navsearch:focus-within { width: 100%; box-shadow: none; }
    .v9-navsearch__drop { position: static; width: auto; margin-top: 0.6rem; box-shadow: none; }
    .v9-navsearch__list { max-height: min(50vh, 380px); }
}
@media (min-width: 992px) and (max-width: 1099px) {
    .v9-navsearch__panel { padding-left: max(1rem, calc(100vw - 520px)); } /* el panel a la derecha, bajo la lupa */
    .v9-navsearch__drop { position: absolute; left: max(1rem, calc(100vw - 520px)); right: 1rem; width: auto; margin-top: 0.4rem; box-shadow: var(--v9-shadow-lg); }
}
@media (max-width: 575px) {
    /* Que quepan en una línea logo · lupa · ES/EN · hamburguesa (390 px) */
    body.v9 .navbar .container-fluid { padding-left: 0.5rem !important; padding-right: 0.5rem !important; } /* .px-4 lleva !important */
    .v9-navtools { gap: 0.35rem; }
    .v9-navsearch__open { width: 38px; height: 38px; }
    .v9-lang { padding: 2px; }
    .v9-lang__opt { min-width: 34px; min-height: 30px; padding: 0 0.4rem; }
    body.v9 .navbar-toggler { padding: 0.25rem 0.45rem; margin-left: 0.25rem; }
    .v9-navsearch__panel { padding: 0.6rem 0.75rem 0.85rem; }
}
@media (max-width: 400px) {
    /* 360 px: el logotipo baja a 36 px (sigue entero) y el toggler pierde su margen */
    body.v9 .logo-navbar { height: 36px; }
    body.v9 .navbar-brand { margin-right: 0.25rem; }
    body.v9 .navbar-toggler { margin-left: 0; }
}
@media (prefers-reduced-motion: reduce) { .v9-navsearch, .v9-navsearch__open, .v9-lang__opt { transition: none; } }

.section-block .v9-sp__hint p { text-align: center; color: var(--v9-muted) !important; font-size: 0.95rem; }
.v9-sp__nav { margin-bottom: 1.4rem; }
.v9-sp__groups { display: flex; flex-direction: column; gap: 1.2rem; }
.v9-sp__group { padding: 1.3rem 1.6rem 1.2rem; scroll-margin-top: 90px; }
.v9-sp__head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.6rem 1rem; margin-bottom: 0.6rem; }
.v9-sp__title { margin: 0; font-size: 1.15rem; font-weight: 700; color: var(--v9-ink); display: inline-flex; align-items: center; gap: 0.6rem; }
.v9-sp__title i { color: var(--v9-action); font-size: 0.95rem; }
.v9-sp__all { font-size: 0.88rem; font-weight: 600; color: var(--v9-action); text-decoration: none; display: inline-flex; align-items: center; gap: 0.4rem; min-height: 44px; }
.v9-sp__all:hover { text-decoration: underline; }
.v9-sp__list { list-style: none; margin: 0; padding: 0; }
.v9-sp__list li { display: flex; flex-direction: column; gap: 0.15rem; padding: 0.6rem 0; border-top: 1px solid var(--v9-line-soft); }
.v9-sp__list li:first-child { border-top: 0; padding-top: 0.2rem; }
.v9-sp__list .v9-pub__type { align-self: flex-start; }
.v9-sp__item { font-weight: 600; color: var(--v9-ink); text-decoration: none; line-height: 1.4; }
.v9-sp__item:hover { color: var(--v9-action); text-decoration: underline; }
.v9-sp__meta { font-size: 0.85rem; color: var(--v9-muted); }
.v9-search-page mark { background: rgba(var(--alarcos-green-value), 0.35); color: inherit; padding: 0 0.1em; border-radius: 3px; }
.v9-404__links { justify-content: center; }
.v9-404 code { font-size: 0.9em; color: var(--v9-muted); }

/* ==========================================================================
   AJUSTES DE LA REVISIÓN VISUAL (2026-09-17)
   ========================================================================== */
/* Portada: la bola un 15 % menor (dominaba el hero) y el halo a juego; en móvil aún menos */
body.v9 .rotating-ball { max-width: 220px; }
body.v9 .hero-glow-ring { width: 250px; height: 250px; }
@media (max-width: 600px) {
    body.v9 .rotating-ball { max-width: 170px; }
    body.v9 .hero-glow-ring { width: 200px; height: 200px; }
    body.v9 .particles-canvas { opacity: 0.45; }   /* las partículas pisaban el texto en pantallas estrechas */
}
/* Noticias: los 10 años en una sola fila a 1366 px (píldoras un punto más compactas solo aquí) */
.v9-nw .v9-filter { gap: 0.4rem; }
.v9-nw .v9-filter__btn { padding: 0.45rem 0.85rem; }
/* Quien pide menos movimiento: sin partículas ni bola flotante */
@media (prefers-reduced-motion: reduce) {
    body.v9 .particles-canvas { display: none; }
    body.v9 .rotating-ball, body.v9 .hero-glow-ring { animation: none; }
}

/* Fila de citas OpenAlex del panel «En cifras» (no es enlace: misma retícula que las filas <a>) */
.v9-wp-facts__row { display: flex; align-items: center; gap: 0.6rem; }
#v9wpOA .v9-wp-facts__sub { display: block; }

/* Compartir en el detalle de noticia (2026-09-17) */
.v9-art__share { display: inline-flex; align-items: center; gap: 0.35rem; margin-left: 0.6rem; }
.v9-art__share a, .v9-art__share button { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; border-radius: 50%; border: 1px solid var(--v9-line); background: var(--v9-surface); color: var(--v9-action); font-size: 0.85rem; cursor: pointer; text-decoration: none; }
.v9-art__share a:hover, .v9-art__share button:hover { background: var(--v9-action); border-color: var(--v9-action); color: #fff; }

/* Tarjetas de GitHub en Herramientas (2026-09-17) */
.v9-gh__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 1rem; }
.v9-gh { display: flex; align-items: center; gap: 0.8rem; padding: 1rem 1.1rem; color: inherit; text-decoration: none; }
.v9-gh:hover { color: inherit; box-shadow: var(--v9-shadow-md); }
.v9-gh__avatar { border-radius: 50%; flex: 0 0 auto; }
.v9-gh__body { min-width: 0; display: flex; flex-direction: column; gap: 0.1rem; flex: 1; }
.v9-gh__user { font-weight: 600; color: var(--v9-action); }
.v9-gh__quien { font-size: 0.85rem; color: var(--v9-text); }
.v9-gh__meta { font-size: 0.78rem; color: var(--v9-muted); }
.v9-gh__logo { font-size: 1.3rem; color: var(--v9-muted); }

/* Impacto y Memoria (2026-09-17) */
.v9-imp__grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.2rem; }
.v9-imp__card--wide { grid-column: 1 / -1; }
.section-block p.v9-imp__kicker { margin: 0 0 0.3rem; font-size: 0.7rem !important; font-weight: 700; letter-spacing: var(--v9-label-track); text-transform: uppercase; color: var(--v9-action) !important; }
.section-block p.v9-imp__num { margin: 0; font-size: 2.4rem !important; font-weight: 700; letter-spacing: -0.02em; color: var(--v9-ink) !important; line-height: 1.1; }
.section-block p.v9-imp__sub { margin: 0.2rem 0 0; font-size: 0.9rem !important; color: var(--v9-muted) !important; }
.v9-imp__top { margin: 0.3rem 0 0; padding-left: 1.2rem; font-size: 0.92rem; }
.v9-imp__top li { margin-bottom: 0.35rem; }
.v9-imp__cifra { font-weight: 700; color: var(--v9-action); font-variant-numeric: tabular-nums; }
.section-block p.v9-imp__anios { margin: 0; display: flex; flex-wrap: wrap; gap: 0.4rem; }
@media (max-width: 800px) { .v9-imp__grid { grid-template-columns: minmax(0, 1fr); } }
.v9-mem { max-width: 860px; }
.v9-mem .v9-form__title { margin-top: 1.6rem; }
.v9-mem__lista { margin: 0; padding-left: 1.2rem; }
.v9-mem__lista li { margin-bottom: 0.35rem; }
.v9-mem__fecha { font-size: 0.8rem; color: var(--v9-muted); font-variant-numeric: tabular-nums; margin-right: 0.3rem; }

/* Toque superior (2026-09-17): transición entre secciones, anclas bajo la barra fija y selección de marca */
::view-transition-old(root), ::view-transition-new(root) { animation-duration: 0.18s; }
@media (prefers-reduced-motion: reduce) { ::view-transition-old(root), ::view-transition-new(root) { animation: none; } }
body.v9 [id] { scroll-margin-top: 96px; }   /* las anclas (#linea-…, secciones) no quedan bajo la barra fija */
body.v9 ::selection { background: rgba(var(--alarcos-blue-value), 0.22); color: var(--v9-ink); }
/* Chip de citas en los listados de publicaciones (dato de Publicacion.CitasOA, OpenAlex) */
.v9-pub__citas { display: inline-flex; align-items: center; gap: 0.3rem; padding: 0.1rem 0.55rem; border-radius: var(--v9-r-pill); background: rgba(var(--alarcos-blue-value), 0.10); color: var(--v9-action); font-size: 0.78rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.v9-pub__orden { display: inline-flex; gap: 0.4rem; margin-left: auto; font-size: 0.85rem; }
.v9-pub__orden a { color: var(--v9-muted); text-decoration: none; font-weight: 600; }
.v9-pub__orden a.is-on { color: var(--v9-action); text-decoration: underline; }

/* ── Ficha de publicación (#page-publicacion, capa 1 2026-09-18) ── */
body.v9 .v9-pubficha__aut { color: var(--v9-text); margin: .2rem 0 .4rem; }
body.v9 .v9-pubficha__aut a { color: var(--v9-action); text-decoration: none; }
body.v9 .v9-pubficha__aut a:hover { text-decoration: underline; }
body.v9 .v9-pubficha__meta { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; color: var(--v9-muted); margin: 0 0 1.2rem; }
body.v9 .v9-pubficha__abs { line-height: 1.7; color: var(--v9-text); max-width: 72ch; }
body.v9 .v9-pubficha__acciones { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 1.4rem; }
body.v9 .v9-pub__flink { color: inherit; text-decoration: none; }
body.v9 .v9-pub__flink:hover { color: var(--v9-action); text-decoration: underline; text-underline-offset: 3px; }
body.v9 .v9-pub__q { display: inline-block; margin-left: 6px; padding: 1px 7px; border-radius: var(--v9-r-pill, 999px); border: 1px solid rgba(11, 111, 164, 0.35); color: var(--v9-action); font-size: 0.68rem; font-weight: 700; vertical-align: 1px; }
/* Impacto: barras apiladas de calidad editorial (SVG propio, 2026-09-19) */
body.v9 .v9-imp__barra { display: block; width: 100%; height: 12px; border-radius: 6px; margin: .35rem 0 .3rem; }
body.v9 .v9-imp__leyenda { display: flex; flex-wrap: wrap; gap: 4px 14px; margin: 0; font-size: .78rem; color: var(--v9-muted); }
body.v9 .v9-imp__leyenda i { display: inline-block; width: 9px; height: 9px; border-radius: 2px; margin-right: 5px; }
body.v9 .v9-imp__leyenda b { color: var(--v9-text); }
/* Memoria: delta interanual (2026-09-19) */
body.v9 .v9-mem__delta { font-size: .78rem; font-weight: 700; margin-left: 4px; }
body.v9 .v9-mem__delta--up { color: var(--v9-green-ink, #26500a); }
body.v9 .v9-mem__delta--down { color: #a33; }
body.v9 .v9-mem__delta--eq { color: var(--v9-muted); }
/* Tesis: barras por año (2026-09-19) */
body.v9 .v9-tesis__chart { max-width: 560px; margin: 0 auto 1.2rem; }
body.v9 .v9-tesis__chart svg { display: block; width: 100%; height: 56px; }
body.v9 .v9-tesis__chart-x { display: flex; justify-content: space-between; font-size: .72rem; color: var(--v9-muted); border-top: 1px solid var(--v9-line, #e4e7eb); padding-top: 3px; }
/* Página personal: sparkline de producción por año (2026-09-19) */
body.v9 .v9-wp-spark { display: block; padding: 2px 10px 6px; }
body.v9 .v9-wp-spark svg { display: block; width: 100%; height: 22px; }
body.v9 .v9-wp-spark__x { display: flex; justify-content: space-between; font-size: .64rem; color: var(--v9-muted); }
/* Proyectos activos: línea temporal (2026-09-19) */
body.v9 .v9-gantt { border: 1px solid var(--v9-line, #e4e7eb); border-radius: var(--v9-r-card, 12px); padding: 14px 16px 10px; margin: 0 0 1.6rem; background: var(--v9-surface, #fff); }
body.v9 .v9-gantt__t { font-size: .72rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--v9-muted); margin: 0 0 .5rem; }
body.v9 .v9-gantt__eje { position: relative; height: 16px; margin-left: min(38%, 340px); font-size: .66rem; color: var(--v9-muted); }
body.v9 .v9-gantt__eje span { position: absolute; transform: translateX(-50%); }
body.v9 .v9-gantt__cuerpo { position: relative; }
body.v9 .v9-gantt__overlay { position: absolute; inset: 0; margin-left: calc(min(38%, 340px) + 10px); pointer-events: none; z-index: 1; }
body.v9 .v9-gantt__hoy { position: absolute; top: 0; bottom: 0; width: 0; border-left: 2px solid var(--alarcos-green, #87cf32); }
body.v9 .v9-gantt__row { display: flex; align-items: center; gap: 10px; padding: 3px 0; }
body.v9 .v9-gantt__nom { flex: 0 0 min(38%, 340px); font-size: .78rem; color: var(--v9-text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
body.v9 .v9-gantt__pista { position: relative; flex: 1; height: 10px; background: rgba(31, 41, 51, 0.05); border-radius: 5px; }
body.v9 .v9-gantt__pista i { position: absolute; top: 0; height: 10px; border-radius: 5px; background: linear-gradient(90deg, #1670a8, #55a4d4); }
@media (max-width: 640px) { body.v9 .v9-gantt__nom { flex-basis: 42%; } body.v9 .v9-gantt__eje { margin-left: 42%; } body.v9 .v9-gantt__overlay { margin-left: calc(42% + 10px); } }
/* Repositorios: tarjetas de código en abierto (2026-09-19) */
body.v9 .v9-repos__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(300px, 100%), 1fr)); gap: 16px; }
body.v9 .v9-repo { border: 1px solid var(--v9-line, #e4e7eb); border-radius: var(--v9-r-card, 12px); background: var(--v9-surface, #fff); padding: 16px 18px; display: flex; flex-direction: column; gap: 8px; }
body.v9 .v9-repo__name { font-size: 1rem; font-weight: 600; color: var(--v9-ink, #1f2933) !important; margin: 0; overflow-wrap: anywhere; }
body.v9 .v9-repo__name i { color: var(--v9-muted); margin-right: 4px; }
body.v9 .v9-repo__desc { font-size: .85rem; color: var(--v9-muted) !important; margin: 0; flex: 1; }
body.v9 .v9-repo__meta { display: flex; gap: 12px; font-size: .76rem; color: var(--v9-muted) !important; margin: 0; }
body.v9 .v9-repo__stars i { color: #c9a227; }
body.v9 .v9-repo .v9-btn { align-self: flex-start; }
/* Historia: cronología (2026-09-19) */
body.v9 .v9-hist__bloque { display: flex; gap: 20px; padding: 10px 0; }
body.v9 .v9-hist__anio { flex: 0 0 72px; text-align: right; }
body.v9 .v9-hist__anio span { font-weight: 700; color: var(--v9-action); font-variant-numeric: tabular-nums; position: sticky; top: 96px; }
body.v9 .v9-hist__items { flex: 1; margin: 0; padding: 0 0 14px 24px; list-style: none; border-left: 2px solid var(--v9-line, #e4e7eb); }
body.v9 .v9-hist__items li { position: relative; margin: 0 0 10px; color: var(--v9-text); line-height: 1.55; }
body.v9 .v9-hist__items li::before { content: ''; position: absolute; left: -31px; top: 7px; width: 10px; height: 10px; border-radius: 50%; background: var(--alarcos-green, #87cf32); border: 2px solid #fff; box-shadow: 0 0 0 2px var(--alarcos-blue, #0994dc); }
body.v9 .v9-hist__items li i { color: var(--v9-muted); width: 20px; }
body.v9 .v9-hist__items li a { color: var(--v9-action); text-decoration: none; }
body.v9 .v9-hist__items li a:hover { text-decoration: underline; }
body.v9 .v9-hist__logo { display: block; margin: 8px 0 2px 30px; }
body.v9 .v9-hist__logo img { height: 34px; width: auto; }
body.v9 .v9-hist__bloque--futuro .v9-hist__items { border-left-style: dashed; }
body.v9 .v9-hist__bloque--futuro .v9-hist__anio span, body.v9 .v9-hist__bloque--futuro li { color: var(--v9-muted) !important; }
body.v9 .v9-hist__bloque--futuro li::before { background: #fff; }
body.v9 .v9-pubficha__rel { margin-top: 1.8rem; border-top: 1px solid var(--v9-line, #e4e7eb); padding-top: 1rem; }
body.v9 .v9-pubficha__rel-t { font-size: .72rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--v9-muted); margin: 0 0 .5rem; }
body.v9 .v9-pubficha__rel ul { list-style: none; margin: 0; padding: 0; }
body.v9 .v9-pubficha__rel li { display: flex; gap: 12px; padding: 4px 0; }
body.v9 .v9-pubficha__rel li span { flex: 0 0 44px; color: var(--v9-muted); font-variant-numeric: tabular-nums; font-size: .85rem; padding-top: 1px; }
body.v9 .v9-pubficha__rel li a { color: var(--v9-text); text-decoration: none; }
body.v9 .v9-pubficha__rel li a:hover { color: var(--v9-action); text-decoration: underline; }
body.v9 .v9-pub__ordenwrap { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
/* El filtro por miembro es un <select> nativo: se viste con la misma geometría que .v9-filter__btn
   (appearance none + chevron propio en el ::after del label, que no roba el clic). */
body.v9 .v9-pub__autorsel { position: relative; display: inline-flex; align-items: center; }
body.v9 .v9-pub__autorsel select {
    appearance: none; -webkit-appearance: none;
    min-height: 40px;
    border: 2px solid var(--v9-action-line);
    border-radius: var(--v9-r-pill);
    padding: 0.4rem 2.3rem 0.4rem 1.1rem;
    font: inherit; font-size: 0.9rem; font-weight: 600; line-height: 1.2;
    color: var(--v9-action);
    background: var(--v9-surface);
    max-width: 280px;
    cursor: pointer;
    transition: border-color 0.2s ease, color 0.2s ease;
}
body.v9 .v9-pub__autorsel::after {
    content: ''; position: absolute; right: 1rem; top: 50%;
    width: 8px; height: 8px; margin-top: -6px;
    border-right: 2px solid var(--v9-action); border-bottom: 2px solid var(--v9-action);
    transform: rotate(45deg); pointer-events: none;
    transition: border-color 0.2s ease;
}
body.v9 .v9-pub__autorsel select:hover,
body.v9 .v9-pub__autorsel select:focus-visible { border-color: var(--v9-action); }
body.v9 .v9-pub__autorsel select:focus-visible { outline: 3px solid rgba(var(--alarcos-green-value), 0.6); outline-offset: 2px; }
body.v9 .v9-nowrap { white-space: nowrap; }

/* El <details> de los grupos de temas (Noticias) SOLO pliega en móvil: en escritorio se oculta
   el resumen y el contenido queda siempre visible, así la vista grande no cambia (2026-09-25). */


/* ── Grupos de temas de Noticias: acordeón CSS (checkbox+label), plegado solo en móvil ──
   No se usa <details> a propósito: en escritorio, el contenido de un <details> cerrado no se
   puede volver a mostrar desde CSS (el navegador lo oculta por dentro) y los temas desaparecían
   de la vista grande. Con el checkbox, escritorio simplemente no aplica la regla de ocultar. */
.v9-etqbar__chk { position: absolute; width: 1px; height: 1px; opacity: 0; margin: 0; }

@media (max-width: 700px) {
    .v9-etqbar__det > .v9-etqbar__lbl {
        cursor: pointer; display: inline-flex; align-items: center; gap: .4rem;
        padding: .3rem .8rem; border: 1px solid var(--v9-line, #d9e4e9); border-radius: 999px;
        background: #fff; font-size: .78rem; width: fit-content; justify-self: start;
    }
    .v9-etqbar__det > .v9-etqbar__lbl::after {
        content: "\f078"; font-family: "Font Awesome 6 Free"; font-weight: 900; font-size: .62rem;
        transition: transform .18s ease;
    }
    .v9-etqbar__n { font-size: .68rem; background: rgba(0,0,0,.07); border-radius: 999px; padding: 0 .4rem; font-weight: 600; }
    .v9-etqbar__ver, .v9-etqbar__ocu { font-weight: 700; text-transform: none; letter-spacing: 0; color: var(--v9-action, #0b6fa4); }
    .v9-etqbar__ocu { display: none; }
    /* plegado por defecto; al marcar el checkbox se despliega */
    .v9-etqbar__chk:not(:checked) ~ .v9-filter--etq { display: none; }
    .v9-etqbar__chk:checked ~ .v9-etqbar__lbl { border-color: var(--v9-action, #0b6fa4); color: var(--v9-action, #0b6fa4); }
    .v9-etqbar__chk:checked ~ .v9-etqbar__lbl::after { transform: rotate(180deg); }
    .v9-etqbar__chk:checked ~ .v9-etqbar__lbl .v9-etqbar__ver { display: none; }
    .v9-etqbar__chk:checked ~ .v9-etqbar__lbl .v9-etqbar__ocu { display: inline; }
    /* foco de teclado visible sobre la píldora (el checkbox es invisible) */
    .v9-etqbar__chk:focus-visible ~ .v9-etqbar__lbl { outline: 3px solid var(--v9-focus, #87CF32); outline-offset: 2px; }
}

@media (min-width: 701px) {
    /* En escritorio no hay acordeón: rótulo inerte y temas siempre visibles. */
    .v9-etqbar__chk { display: none; }
    .v9-etqbar__det > .v9-etqbar__lbl { cursor: default; pointer-events: none; }
    .v9-etqbar__n, .v9-etqbar__ver, .v9-etqbar__ocu { display: none; }
}

/* ── Área táctil mínima en móvil (WCAG 2.5.8, 24x24 px) — 2026-09-25 ───────────────────
   Medido a 400 px: los atajos de la portada y los enlaces de Historia, Miembros, Contacto y
   Publicaciones («Ficha», «DOI», orden, migas) quedaban en 18-22 px de alto. Quedan FUERA a
   propósito los que la norma exime por ir dentro de una frase (el «DOI» de cada línea de
   Impacto, el correo del párrafo de Medios): ampliarlos rompería el interlineado del texto.
   Dos tratamientos según el enlace, para no romper el flujo: los que son botones cortos pasan
   a inline-flex con min-height; los de texto largo (que deben poder partirse en varias líneas)
   solo ganan padding vertical, que también cuenta como área táctil. */
/* Los enlaces-botón cumplen el mínimo en TODOS los tamaños (la norma no distingue puntero):
   son cortos y aislados, así que ampliarlos no toca el interlineado de ningún párrafo. */
.v9-aud__item > a,
.v9-pub__links > a,
.v9-pub__orden > a {
    display: inline-flex;
    align-items: center;
    min-height: 24px;
}
/* En cambio, los enlaces de TEXTO LARGO (hitos de Historia, universidades de Miembros, correo
   y teléfono de Contacto, migas) solo ganan el relleno en móvil: en escritorio el ratón no lo
   necesita y el padding alteraría el interlineado de listas y párrafos ya ajustados. */
@media (max-width: 700px) {
    .v9-hist__items li > a,
    .member-description > a,
    .v9-contact__value > a,
    a.v9-page__crumb {
        padding-block: 3px;
    }
}

/* ── Sin zoom automático al escribir en iPhone (2026-09-25) ────────────────────────────
   Safari en iOS AMPLÍA la página al enfocar un campo cuyo texto mida menos de 16 px, y luego
   el visitante tiene que alejarla a mano. Los buscadores del sitio estaban a 15,2 px y el
   desplegable de orden de Publicaciones a 14,4, así que pasaba en 6 páginas. 16 px es el
   mínimo exacto que evita el zoom; la diferencia visual con 15,2 es inapreciable. */
@media (max-width: 700px) {
    input:not([type="checkbox"]):not([type="radio"]),
    select,
    textarea,
    /* Dos desplegables llevan su propio font-size con selectores más específicos (uno con
       `body.v9` delante), así que ganaban a la regla genérica y hay que nombrarlos: */
    .v9-wp-tools__sel select,
    body.v9 .v9-pub__autorsel select {
        font-size: 16px;
    }
}

/* ── Pie: los enlaces legales envuelven en pantallas estrechas (2026-09-25) ────────────
   `.footer-legal-links` (style.css) es un flex sin wrap con 4 enlaces y sus separadores. A
   320 px (iPhone SE) el último se salía 8 px y hacía desbordar TODAS las páginas del sitio. */
@media (max-width: 700px) {
    .footer-legal-links {
        flex-wrap: wrap;
        justify-content: center;
        row-gap: 6px;
    }
}

/* ── Botón «subir» más discreto en móvil (2026-09-25) ──────────────────────────────────
   Mide 64x64 px y es opaco, así que en una pantalla de 390 tapaba texto real: se comió los
   nombres de los autores de la última publicación del listado. A 48x48 y algo más pegado al
   borde ocupa un 44 % menos y sigue muy por encima del mínimo táctil (44 px de Apple, 24 de
   WCAG). El anillo de progreso de lectura que lleva dentro se escala solo. */
@media (max-width: 700px) {
    .scroll-top-btn {
        width: 48px;
        height: 48px;
        right: 1rem;
        bottom: 1rem;
    }
    .scroll-top-btn svg { width: 48px; height: 48px; }
    .scroll-top-btn .material-icons-outlined { font-size: 20px; }
}
