/* ==========================================================================
   Sección "Timeline": timeline/index.html (índice de 3 tarjetas),
   timeline/genero-estetica|latitudes/index.html (grid de un tipo),
   timeline/fotografos/index.html (fotógrafos por década) y
   timeline/<slug>/index.html (recorrido vertical de un timeline concreto).
   Los grids reutilizan .article-card/.article-grid de css/articles.css (por
   eso ese archivo también se enlaza en estas páginas); este archivo define
   lo que es propio de Timeline.
   ========================================================================== */

.timeline-section {
  padding-block: var(--space-xl);
}

/* ---- Cabecera (.hero.hero--centered, ver css/home.css) de todas las
   páginas de Timeline: en móvil no debe quedar con el min-height de 560px
   pensado para el mosaico de fotos del hero de home, así que se anula aquí
   — igual que hacen .hero--article (articles.css) y .hero (books.css) para
   sus propias páginas. Solo afecta a Timeline porque este archivo solo se
   enlaza en sus páginas. ---- */
@media (max-width: 767px) {
  .hero {
    min-height: auto;
  }
}

/* ---- Índice (timeline/index.html): 3 tarjetas verticales (Género y
   estética, Latitudes, Fotógrafos), a diferencia de .article-grid (1 columna,
   tarjetas horizontales) que usan las páginas de listado. ---- */
.timeline-categories-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-gutter);
}

@media (min-width: 768px) {
  .timeline-categories-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}

/* ---- Página "Fotógrafos" (timeline/fotografos/index.html): fondo blanco
   a propósito, a diferencia de .related-section (degradado gris) que usan
   otras secciones de cierre similares. ---- */
.timeline-photographers-section {
  background-color: var(--color-surface-container-lowest);
  padding-block: var(--space-xl);
}

/* Un bloque por década, cada uno con su propia cuadrícula
   .mentioned-photographer-grid (definida en articles.css, reutilizada tal
   cual desde "Fotógrafos mencionados" de artículos). */
.timeline-decade {
  margin-bottom: var(--space-lg);
}

.timeline-decade:last-child {
  margin-bottom: 0;
}

.timeline-decade__heading {
  font-size: var(--font-headline-md-size);
  font-weight: var(--font-headline-md-weight);
  margin-bottom: var(--space-sm);
}

/* Aquí cada fotógrafo es un <div role="button"> (no un <a>, ver
   buildPhotographerAvatar en timeline.js: abre primero el popup de detalle
   y es su botón "Leer más" el que enlaza a la ficha), así que no recibe el
   borde/padding de la regla por etiqueta "a.mentioned-photographer" —
   se repite aquí, más el cursor: pointer que un <div> no trae de serie. */
.timeline-decade .mentioned-photographer {
  cursor: pointer;
  border: 1px solid var(--color-surface-container-high);
  border-radius: 8px;
  padding: var(--space-sm);
}

/* ---- Bandera de nacionalidad: círculo superpuesto en la esquina superior
   izquierda del avatar (dato ya existente en photographers-index.json como
   emoji, ver campo "flag" — no hay imágenes de bandera nuevas que
   mantener). Va en un wrapper aparte del propio avatar (buildPhotographerAvatar
   y ensureTimelinePhotographerPopup en timeline.js — se reutiliza tanto en
   las tarjetas de la cuadrícula como en el popup de detalle) porque tanto
   .mentioned-photographer__avatar como .artist-popup__avatar tienen
   overflow:hidden + border-radius:50% para recortar la foto en círculo, y
   eso se comía la bandera si era hija suya. ---- */
.mentioned-photographer__avatar-wrap {
  position: relative;
}

/* En el popup el avatar es más grande (96px, ver .artist-popup__avatar) y
   además hay que centrar el wrapper, cosa que no hace falta en la cuadrícula
   (ya centrada por el flex column de .mentioned-photographer). */
.mentioned-photographer__avatar-wrap--popup {
  width: fit-content;
  margin-inline: auto;
}

.mentioned-photographer__flag {
  position: absolute;
  left: -4px;
  top: -4px;
  width: 28px;
  height: 28px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--radius-full);
  background-color: var(--color-surface-container-lowest);
  border: 1px solid var(--color-surface-container-high);
  font-size: 18px;
  line-height: 1;
  overflow: hidden;
}

.mentioned-photographer__flag[hidden] {
  display: none;
}

/* ---- Contenedor: línea vertical (spine) + lista de eventos ----
   La línea vive en su propia capa absoluta (.timeline__spine) detrás de la
   lista, con un relleno (.timeline__spine-fill) cuya altura sube en JS a
   medida que se hace scroll (ver initTimelineScrollEffects en timeline.js)
   — es el efecto de "desplegarse" que pide la sección. ---- */
.timeline {
  position: relative;
  max-width: 1200px;
  margin-inline: auto;
}

/* transform:translateX(-50%) para que el centro de la línea (no su borde
   izquierdo) caiga exactamente en "left" — si no, una línea de 2px de
   ancho queda descentrada 1px respecto al punto (.timeline__dot), que sí
   se centra así. */
.timeline__spine {
  position: absolute;
  top: 4px;
  bottom: 4px;
  left: 24px;
  width: 2px;
  transform: translateX(-50%);
  background-color: var(--color-outline-variant);
  z-index: 0;
}

.timeline__spine-fill {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 0%;
  background-color: var(--color-primary);
}

.timeline__list {
  position: relative;
  z-index: 1;
  list-style: none;
  margin: 0;
  padding: 0;
}

/* ---- Evento: oculto/desplazado hasta que entra en el viewport (ver
   IntersectionObserver en timeline.js, que añade .is-visible una sola vez
   por evento). ---- */
.timeline__item {
  position: relative;
  padding-left: 56px;
  padding-bottom: var(--space-xl);
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}

.timeline__item.is-visible {
  opacity: 1;
  transform: translateY(0);
}

.timeline__item:last-child {
  padding-bottom: 0;
}

.timeline__dot {
  position: absolute;
  top: 6px;
  left: 24px;
  transform: translateX(-50%);
  width: 16px;
  height: 16px;
  border-radius: var(--radius-full);
  background-color: var(--color-surface-container-lowest);
  border: 3px solid var(--color-outline-variant);
  z-index: 2;
  transition: background-color 0.4s ease, border-color 0.4s ease;
}

.timeline__item.is-visible .timeline__dot {
  background-color: var(--color-primary);
  border-color: var(--color-primary);
}

.timeline__card {
  background-color: var(--color-surface-container-lowest);
  border: 1px solid var(--color-outline-variant);
  border-radius: var(--radius-lg);
  padding: var(--space-md);
}

.timeline__year {
  font-size: var(--font-headline-md-size);
  font-weight: 700;
  line-height: var(--font-headline-md-line-height);
  margin-bottom: var(--space-xs);
}

.timeline__movement {
  display: inline-block;
  font-size: var(--font-label-sm-size);
  font-weight: var(--font-label-sm-weight);
  letter-spacing: var(--font-label-sm-tracking);
  text-transform: uppercase;
  color: var(--color-on-surface-variant);
  background-color: var(--color-chip-bg);
  padding: 4px 12px;
  border-radius: var(--radius-full);
  margin-bottom: var(--space-sm);
  text-decoration: none;
  transition: background-color 0.2s ease, color 0.2s ease;
}

a.timeline__movement:hover {
  background-color: var(--color-primary);
  color: var(--color-on-primary);
}

.timeline__title {
  font-size: var(--font-headline-md-size);
  font-weight: var(--font-headline-md-weight);
  line-height: var(--font-headline-md-line-height);
  margin-bottom: var(--space-xs);
}

.timeline__text {
  font-size: var(--font-body-md-size);
  line-height: var(--font-body-md-line-height);
  color: var(--color-on-surface-variant);
  margin-bottom: var(--space-sm);
}

.timeline__photo {
  display: block;
  width: 100%;
  text-decoration: none;
}

.timeline__photo img {
  display: block;
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  border-radius: var(--radius-md);
}

.timeline__photo-caption {
  display: block;
  margin-top: var(--space-xs);
  font-size: var(--font-label-sm-size);
  color: var(--color-on-surface-variant);
}

.timeline__photo:hover .timeline__photo-caption {
  text-decoration: underline;
}

/* ---- Desde tablet/escritorio: la línea pasa al centro y los eventos
   alternan lado (izquierda/derecha, ver timeline__item--left/--right en
   buildTimelineItem) — cada uno ocupa medio ancho y el punto se ancla al
   borde interior, justo sobre la línea central. ---- */
@media (min-width: 900px) {
  .timeline__spine {
    left: 50%;
  }

  .timeline__list {
    display: flex;
    flex-direction: column;
  }

  .timeline__item {
    width: 50%;
    padding-left: 0;
  }

  .timeline__item--left {
    align-self: flex-start;
    padding-right: 56px;
  }

  .timeline__item--right {
    align-self: flex-end;
    padding-left: 56px;
  }

  .timeline__item--left .timeline__dot {
    left: auto;
    right: -8px;
    transform: none;
  }

  .timeline__item--right .timeline__dot {
    left: -8px;
    transform: none;
  }
}

/* ---- Navegación entre las otras secciones de Timeline (Género y estética /
   Latitudes / Fotógrafos, sin la propia — ver renderTimelineNav en
   timeline.js) — al final de cada página de la sección, para poder saltar a
   cualquiera de ellas desde cualquier sitio. En las fichas de timeline
   sustituye al antiguo botón único "volver a la sección padre". Los 3 son
   simples enlaces entre sí, sin ningún estado "activo" que resaltar, así
   que los 3 se ven siempre igual: fondo blanco. ---- */
.timeline-nav-section {
  padding-block: 0 var(--space-xl);
}

.timeline-nav {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--space-sm);
  padding-top: var(--space-lg);
}

/* Por debajo de 520px no caben 2-3 píldoras en fila sin apretarse: pasan a
   columna, centradas y a todo lo ancho disponible (mismo criterio que el
   resto del sitio en pantallas muy pequeñas). */
@media (max-width: 520px) {
  .timeline-nav {
    flex-direction: column;
    align-items: center;
  }
}

.timeline-nav__link {
  display: inline-flex;
  align-items: center;
  gap: var(--space-xs);
  padding: 12px 24px;
  border: 2px solid var(--color-primary);
  border-radius: var(--radius-full);
  background-color: var(--color-surface-container-lowest);
  color: var(--color-primary);
  font-weight: 500;
  text-decoration: none;
  transition: 0.3s;
}

.timeline-nav__link:hover {
  background-color: var(--color-primary);
  color: var(--color-on-primary);
}
