/* -----------------------------------------
   TIMELINE V2
----------------------------------------- */

.timeline-v2-page {
  --timeline-primary:
    var(--color-primary, var(--primary-color, #262626));

  --timeline-secondary:
    var(--color-secondary, var(--secondary-color, #a3a3a3));

  --timeline-bg:
    var(--bg-color, #ffffff);

  /* Horizontal */
  --timeline-side-space: 72px;
  /*
    ESCALA V2

    TODOS los módulos tienen siempre 12px de gap entre sí.

    - año invisible = 20px
    - año visible (evento / década / extremo) = 40px
    - gap entre módulos = 12px
    - década vacía = 4 módulos invisibles
  */
  --timeline-visible-year-width: 40px;
  --timeline-hidden-year-width: 20px;
  --timeline-year-gap: 12px;
  --timeline-empty-decade-modules: 4;
  --timeline-primary-gap: 24px;
  --timeline-primary-event-width: 220px;

  /*
    Vertical:
    navbar general + encabezado contextual de Timeline
    ocupan su espacio real.

    JS mide ambos y centra el bounding box visual completo
    de la composición dentro del viewport restante.
  */
  --timeline-navbar-height: 90px;
  --timeline-context-height: 64px;
  --timeline-header-height: 154px;
  --timeline-vertical-safe-space: 24px;
  --timeline-optical-offset-y: -40px;
  --timeline-primary-shadow-space: 40px;
  --timeline-main-building-stem: 112px;
  --timeline-main-context-stem: 48px;
  --timeline-secondary-event-line-gap: 16px;
  --timeline-detachment-size: 36px;
  --timeline-detachment-font-size: 16px;
  --timeline-axis-years-gap: 36px;
  --timeline-tooltip-gap: 16px;

  width: 100%;
  height: 100vh;
  height: 100dvh;
  margin: 0;
  overflow: hidden;

  background-color: var(--timeline-bg);
  color: var(--timeline-primary);
  font-family: var(--secondary-font);
}

/* -----------------------------------------
   INTERACTION RESET
----------------------------------------- */

.timeline-v2-page button,
.timeline-v2-page [role="button"],
.timeline-v2-page .menu-icon {
  -webkit-tap-highlight-color: transparent;
}

.timeline-v2-page button:focus,
.timeline-v2-page [role="button"]:focus,
.timeline-v2-page .menu-icon:focus {
  outline: none;
  box-shadow: none;
}


/* -----------------------------------------
   ENTRADA
----------------------------------------- */

.timeline-context-header,
.timeline-viewport {
  opacity: 0;
  animation: timeline-v2-enter 220ms ease-out forwards;
}

.timeline-viewport {
  animation-delay: 20ms;
}

@keyframes timeline-v2-enter {
  from { opacity: 0; }
  to { opacity: 1; }
}


/* -----------------------------------------
   ENCABEZADO DE CONTEXTO
----------------------------------------- */

/* En Timeline acercamos levemente el separador a la navbar general. */
.timeline-v2-page .sticky-header {
  padding-bottom: 10px;
}


.timeline-context-header {
  position: fixed;
  top: var(--timeline-navbar-height);
  left: 0;

  width: 100%;
  padding: 0 40px 20px;

  background-color: var(--timeline-bg);
  z-index: 90;
}

.timeline-context-line {
  width: 100%;
  height: 1px;

  background-color:
    color-mix(
      in srgb,
      var(--timeline-secondary) 35%,
      transparent
    );
}

.timeline-filter-anchor {
  position: relative;
  width: fit-content;
  margin-top: 20px;
}

.timeline-context-label {
  appearance: none;
  display: block;

  margin: 0;
  padding: 0;
  border: 0;

  background: transparent;

  font-family: var(--secondary-font);
  font-size: var(--font-size-XS);
  font-weight: var(--weight-regular);
  line-height: 1;

  color: var(--timeline-secondary);
  cursor: pointer;

  transition: color 160ms ease;
}

.timeline-context-label:hover,
.timeline-context-label:focus-visible,
.timeline-context-label[aria-expanded="true"] {
  color: var(--timeline-primary);
}

/*.timeline-context-label:focus-visible {
  outline: 2px solid currentColor;
  outline-offset: 5px;
  border-radius: 2px;
}*/


.timeline-context-label {
  display: inline-grid;

  height: 1em;

  align-items: start;
  justify-items: start;

  text-align: left;
  vertical-align: top;

  perspective: 500px;
}

.timeline-context-label-default,
.timeline-context-label-open {
  grid-area: 1 / 1;

  white-space: nowrap;
  text-align: left;

  transform-origin: center center;

  transition:
    transform 220ms cubic-bezier(.4, 0, .2, 1),
    opacity 160ms ease;

  backface-visibility: hidden;
}


/* ESTADO CERRADO */

.timeline-context-label-default {
  opacity: 1;
  transform: rotateX(0deg) translateY(0);
}

.timeline-context-label-open {
  opacity: 0;
  transform: rotateX(-70deg) translateY(-4px);
}


/* ESTADO ABIERTO */

.timeline-context-label[aria-expanded="true"]
.timeline-context-label-default {
  opacity: 0;
  transform: rotateX(70deg) translateY(4px);
}

.timeline-context-label[aria-expanded="true"]
.timeline-context-label-open {
  opacity: 1;
  transform: rotateX(0deg) translateY(0);
}


/* -----------------------------------------
   FILTRO DE EVENTOS
----------------------------------------- */

.timeline-filter-panel {
  position: absolute;
  top: calc(100% + 4px);
  left: 0;

  width: 270px;
  max-width: calc(100vw - 32px);
  box-sizing: border-box;

  padding: 14px 20px;

  border:
    1px solid
    color-mix(
      in srgb,
      var(--timeline-primary) 20%,
      transparent
    );

  border-radius: 16px;
  background-color: var(--timeline-bg);

  box-shadow:
    0 8px 24px rgba(0, 0, 0, .16);

  opacity: 0;
  transform: translateY(-6px);
  pointer-events: none;

  transition:
    opacity 160ms ease,
    transform 160ms ease;

  z-index: 130;
}

.timeline-filter-panel[hidden] {
  display: none;
}

.timeline-filter-panel.is-open {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}

.timeline-filter-option {
  appearance: none;

  display: flex;
  align-items: center;
  gap: 12px;

  width: 100%;
  padding: 11px 0;
  border: 0;

  background: transparent;

  font-family: var(--secondary-font);
  font-size: var(--font-size-S);
  font-weight: var(--weight-regular);
  line-height: 1.2;
  text-align: left;

  color: var(--timeline-primary);
  cursor: pointer;
}

/*.timeline-filter-option:focus-visible {
  outline: 2px solid var(--timeline-secondary);
  outline-offset: 3px;
  border-radius: 3px;
}*/

.timeline-filter-checkbox {
  flex: 0 0 auto;

  font-size: 22px;
  line-height: 1;

  color: var(--timeline-secondary);

  font-variation-settings:
    "FILL" 0,
    "wght" 400,
    "GRAD" 0,
    "opsz" 24;
}

.timeline-filter-option.is-checked
.timeline-filter-checkbox {
  color: var(--timeline-secondary);

  font-variation-settings:
    "FILL" 1,
    "wght" 400,
    "GRAD" 0,
    "opsz" 24;
}

.timeline-filter-option.is-disabled {
  color: var(--timeline-secondary);
  cursor: default;
  opacity: .48;
}

.timeline-filter-option.is-disabled
.timeline-filter-checkbox {
  color: currentColor;
}

/*
  El filtro sólo cambia visibilidad.
  No usamos display:none para que las mediciones y la geometría
  de la Timeline sigan siendo exactamente las mismas.
*/
.timeline-secondary-event,
.timeline-event-dot,
.timeline-year-marker {
  transition:
    opacity 180ms ease,
    visibility 0s linear 0s;
}

.timeline-secondary-event.is-filter-hidden,
.timeline-event-dot.is-filter-hidden,
.timeline-year-marker.is-filter-hidden {
  opacity: 0 !important;
  visibility: hidden !important;
  pointer-events: none !important;

  transition-delay:
    0s,
    180ms;
}


/* -----------------------------------------
   VIEWPORT

   Empieza debajo de:
   navbar general + encabezado contextual.

   JS escribe --timeline-header-height con
   la suma de ambas alturas reales.
----------------------------------------- */

.timeline-viewport {
  position: fixed;

  top: var(--timeline-navbar-height);
  left: 0;

  width: 100%;
  height:
    calc(
      100dvh
      - var(--timeline-navbar-height)
    );

  /*padding-top: var(--timeline-context-height);*/
  box-sizing: border-box;

  overflow-x: auto;
  overflow-y: hidden;

  overscroll-behavior-x: contain;
  overscroll-behavior-y: none;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  touch-action: pan-x;
}

.timeline-viewport::-webkit-scrollbar {
  display: none;
}

.timeline-world {
  position: relative;
  width: 100%;
  min-width: 100%;
  height: 100%;
  background-color: var(--timeline-bg);
}


/* -----------------------------------------
   EJE
----------------------------------------- */

.timeline-axis-line {
  position: absolute;
  left: 0;
  top: 0;
  width: 0;
  height: 1px;

  background-color:
    color-mix(
      in srgb,
      var(--timeline-secondary) 45%,
      transparent
    );

  pointer-events: none;
  z-index: 1;
}


/* -----------------------------------------
   MAIN EVENTS
----------------------------------------- */

.timeline-primary-event {
  --timeline-event-stem-height: var(--timeline-main-building-stem);
  --timeline-anchor-x: 50%;

  position: absolute;
  top: 0;
  left: 0;
  width: var(--timeline-primary-event-width);

  transform: translate(-50%, -100%);
  text-align: center;
  z-index: 5;
}

.timeline-primary-event--building {
  --timeline-event-stem-height: var(--timeline-main-building-stem);
}

.timeline-primary-event--context {
  --timeline-event-stem-height: var(--timeline-main-context-stem);
}

.timeline-primary-event.is-align-center {
  --timeline-anchor-x: 50%;
  transform: translate(-50%, -100%);
  text-align: center;
}

.timeline-primary-event.is-align-left {
  --timeline-anchor-x: 0%;
  transform: translate(0, -100%);
  text-align: left;
}

.timeline-primary-event.is-align-right {
  --timeline-anchor-x: 100%;
  transform: translate(-100%, -100%);
  text-align: right;
}

/* Se conserva para poder recuperarlo visualmente después. */
.timeline-primary-id {
  display: none;
}


/* -----------------------------------------
   IMAGEN MAIN EVENT
----------------------------------------- */

.timeline-primary-media {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;

  width: 190px;
  height: 130px;
  margin: 0 auto 16px;

  overflow: hidden;
  border: 6px solid var(--bg-color);
  /*border-radius: 12px;*/
  background-color: var(--bg-color);

  box-shadow:
    0 12px 70px rgba(0, 0, 0, 0.25);

  z-index: 2;
  transform-origin: center center;

  transition:
    transform 280ms cubic-bezier(.2, .8, .2, 1),
    box-shadow 280ms ease;
}

.timeline-primary-media:hover {
  transform: scale(0.97);
  box-shadow:
    0 7px 32px rgba(0, 0, 0, .18);
}

.timeline-primary-event.is-align-left .timeline-primary-media {
  margin-left: 0;
  margin-right: auto;
}

.timeline-primary-event.is-align-right .timeline-primary-media {
  margin-left: auto;
  margin-right: 0;
}

.timeline-primary-media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;

  transform:
    translate3d(
      var(--timeline-primary-parallax-x, 0px),
      0,
      0
    )
    scale(1.14);

  transform-origin: center center;
  will-change: transform;
}


/* -----------------------------------------
   LEER MÁS — MAIN EVENT / DESKTOP

   La leyenda queda escondida detrás de la
   imagen y emerge hacia arriba al hacer hover.
----------------------------------------- */

.timeline-primary-read-more {
  display: none;
}

@media (min-width: 701px) and (hover: hover) and (pointer: fine) {

  .timeline-primary-read-more {
    position: absolute;
    top: 0;

    display: block;

    font-family: var(--secondary-font);
    font-size: var(--font-size-XS);
    font-weight: var(--weight-medium);
    line-height: 1;

    color: var(--timeline-primary);
    white-space: nowrap;

    opacity: 0;
    pointer-events: none;

    z-index: 1;

    transition:
      transform 280ms cubic-bezier(.2, .8, .2, 1),
      opacity 180ms ease;
  }

  /* Izquierda */
  .timeline-primary-event.is-align-left
  .timeline-primary-read-more {
    left: 0;
    text-align: left;
    transform: translateY(8px);
  }

  .timeline-primary-event.is-align-left
  .timeline-primary-media:hover
  + .timeline-primary-read-more {
    opacity: 1;
    transform: translateY(calc(-100% - 12px));
  }

  /* Derecha */
  .timeline-primary-event.is-align-right
  .timeline-primary-read-more {
    right: 0;
    text-align: right;
    transform: translateY(8px);
  }

  .timeline-primary-event.is-align-right
  .timeline-primary-media:hover
  + .timeline-primary-read-more {
    opacity: 1;
    transform: translateY(calc(-100% - 12px));
  }

  /* Centro */
  .timeline-primary-event.is-align-center
  .timeline-primary-read-more {
    left: 50%;
    text-align: center;
    transform: translate(-50%, 8px);
  }

  .timeline-primary-event.is-align-center
  .timeline-primary-media:hover
  + .timeline-primary-read-more {
    opacity: 1;
    transform:
      translate(
        -50%,
        calc(-100% - 12px)
      );
  }
}


/* -----------------------------------------
   TÍTULO + AÑO MAIN EVENT
----------------------------------------- */

.timeline-primary-title {
  display: block;
  overflow: hidden;

  margin: 0 auto;
  max-width: 195px;
  max-height: 3.9em; /* 3 líneas × line-height 1.3 */

  font-family: var(--main-font);
  font-size: var(--font-size-M);
  font-weight: var(--weight-semibold);
  line-height: 1.3;

  color: var(--timeline-primary);
  text-wrap: balance;
}

.timeline-primary-event.is-align-left .timeline-primary-title {
  margin-left: 0;
  margin-right: auto;
}

.timeline-primary-event.is-align-right .timeline-primary-title {
  margin-left: auto;
  margin-right: 0;
}

.timeline-primary-year {
  margin-top: 12px;
  margin-bottom: 16px;
  
  font-family: var(--secondary-font);
  font-size: var(--font-size-XL);
  font-weight: var(--weight-light);
  line-height: 1.4;
  letter-spacing: -0.07em;

  color:
    color-mix(
      in srgb,
      var(--timeline-secondary) 55%,
      transparent
    );

  font-variant-numeric: tabular-nums;
}


/* -----------------------------------------
   STEM VERTICAL DE MAIN EVENT
----------------------------------------- */

.timeline-primary-stem {
  position: absolute;
  top: 100%;
  left: var(--timeline-anchor-x);

  width: 1px;
  height: var(--timeline-event-stem-height);

  transform: translateX(-50%);

  background-color:
    color-mix(
      in srgb,
      var(--timeline-secondary) 45%,
      transparent
    );

  pointer-events: none;
  z-index: 0;
}


.timeline-primary-stem::before {
  content: "";

  position: absolute;
  top: 0;
  left: 50%;

  width: 4px;
  height: 4px;

  transform: translate(-50%, -50%);
  border-radius: 50%;

  background-color: var(--timeline-primary);
}


/* -----------------------------------------
   SECONDARY EVENTS
----------------------------------------- */

.timeline-secondary-event {
  position: absolute;
  top: 0;
  left: 0;

  transform: translateX(-50%);

  appearance: none;
  display: flex;
  align-items: center;
  justify-content: center;

  width: 50px;
  height: 50px;
  padding: 0;
  border: 0;

  background: transparent;
  color: var(--timeline-primary);

  font: inherit;
  line-height: 1;

  cursor: pointer;
  z-index: 10;
}

.timeline-secondary-event-visual {
  display: flex;
  align-items: center;
  justify-content: center;

  width: 50px;
  height: 50px;
  flex: 0 0 50px;

  border-radius: 50%;
  background-color: var(--bg-color);

  box-shadow:
    0 6px 20px rgba(0, 0, 0, .12);

  font-size: 28px;
  line-height: 1;

  transform: scale(.38);
  transform-origin: center center;
  opacity: .55;

  transition:
    transform 380ms cubic-bezier(.18, 1.45, .32, 1),
    opacity 220ms ease-out;

  transition-delay: 0ms;
  will-change: transform, opacity;
}

/* -----------------------------------------
   DETACHMENT

   Sigue siendo técnicamente un secondary event:
   conserva tooltip, hover/tap, dot, año y escala.

   El botón mantiene 50×50 como área de interacción,
   pero el círculo visible es más chico y queda apoyado
   sobre la misma línea-base visual que los secondary.
----------------------------------------- */

.timeline-secondary-event.is-detachment {
  align-items: flex-end;
}

.timeline-secondary-event.is-detachment
.timeline-secondary-event-visual {
  width: var(--timeline-detachment-size);
  height: var(--timeline-detachment-size);
  flex: 0 0 var(--timeline-detachment-size);

  font-size: var(--timeline-detachment-font-size);
}


.timeline-secondary-event.is-in-view
.timeline-secondary-event-visual {
  transform: scale(1);
  opacity: 1;
  transition-delay: 50ms;
}

.timeline-secondary-event:focus-visible {
  outline: 2px solid var(--timeline-primary);
  outline-offset: 4px;
  border-radius: 50%;
}


/* -----------------------------------------
   PUNTOS
----------------------------------------- */

.timeline-event-dot {
  position: absolute;
  top: 0;

  width: 4px;
  height: 4px;

  transform: translate(-50%, -50%);
  border-radius: 50%;

  background-color: var(--timeline-primary);
  z-index: 30;
}


/* -----------------------------------------
   AÑOS / DÉCADAS
----------------------------------------- */

.timeline-year-marker {
  position: absolute;
  top: 0;
  left: 0;

  transform: translateX(-50%);

  display: flex;
  flex-direction: column;
  align-items: center;

  width: 40px;

  font-family: var(--secondary-font);
  font-size: var(--font-size-XS);
  font-weight: var(--weight-regular);
  line-height: 1;

  font-variant-numeric: tabular-nums;
  color: var(--timeline-secondary);
}

.timeline-year-marker.is-primary-event {
  color: var(--timeline-primary);
  font-weight: var(--weight-semibold);
}

.timeline-year-marker.is-secondary-event:not(.is-primary-event) {
  color: var(--timeline-secondary);
  font-weight: var(--weight-regular);
}

.timeline-year-label {
  display: block;
  white-space: nowrap;
}

.timeline-year-tick {
  width: 1px;
  height: 0;
  margin-top: 18px;
  background-color: currentColor;
}


/* -----------------------------------------
   TOOLTIP SECUNDARIO
----------------------------------------- */

.timeline-secondary-overlay {
  position: fixed;
  inset: 0;
  z-index: 1000;
  background: transparent;
  pointer-events: none;
}

.timeline-secondary-overlay[hidden] {
  display: none;
}

.timeline-secondary-tooltip {
  --timeline-tooltip-accent:
    var(--timeline-secondary);

  position: absolute;

  width: min(250px, calc(100vw - 32px));
  max-width: 250px;
  box-sizing: border-box;

  padding: 16px 20px;

  border-left:
    6px solid
    var(--timeline-tooltip-accent);

  background-color: var(--bg-color);

  box-shadow:
    0 6px 20px rgba(0, 0, 0, .12);

  color: var(--timeline-primary);
  font-family: var(--secondary-font);

  opacity: 0;
  transform: translateY(6px);

  transition:
    opacity .16s ease,
    transform .16s ease;

  pointer-events: auto;
}

.timeline-secondary-overlay.is-open
.timeline-secondary-tooltip {
  opacity: 1;
  transform: translateY(0);
}

.timeline-secondary-tooltip:focus {
  outline: none;
}

.timeline-secondary-tooltip-year {
  margin: 0 0 8px;

  font-size: var(--font-size-S);
  font-weight: var(--weight-bold);
  line-height: 1.2;

  color: var(--timeline-primary);
  font-variant-numeric: tabular-nums;
}

.timeline-secondary-tooltip-description {
  margin: 0;

  font-size: var(--font-size-S);
  font-weight: var(--weight-regular);
  line-height: 1.3;

  color: var(--timeline-primary);
}

.timeline-secondary-tooltip-link,
.timeline-secondary-tooltip-link:visited {
  color: var(--timeline-primary);
  text-decoration: none;
  transition: color .16s ease;
}

.timeline-secondary-tooltip-link:hover {
  color: var(--timeline-secondary);
}

.timeline-secondary-tooltip-link:focus-visible {
  outline: 2px solid var(--timeline-secondary);
  outline-offset: 3px;
  border-radius: 2px;
}

.timeline-secondary-tooltip-link
.material-symbols-outlined {
  display: inline-block;
  margin-left: 2px;
  font-size: 16px;
  font-weight: var(--weight-regular);
  line-height: 1;
  vertical-align: -3px;
}

.timeline-secondary-tooltip-description[hidden] {
  display: none;
}


/* -----------------------------------------
   REDUCED MOTION
----------------------------------------- */

@media (prefers-reduced-motion: reduce) {
  .timeline-secondary-event-visual {
    transition: none;
  }

  .timeline-context-header,
  .timeline-viewport {
    animation: none;
    opacity: 1;
  }

  .timeline-primary-media img {
    transform: none;
  }
}


/* -----------------------------------------
   MOBILE
----------------------------------------- */

@media (max-width: 700px) {

 .timeline-context-header {
  padding:
    0
    40px
    20px;

  background-color: transparent;
}

  .timeline-v2-page {
    --timeline-side-space: 40px;
    --timeline-vertical-safe-space: 18px;
    --timeline-primary-shadow-space: 36px;
    --timeline-main-building-stem: 96px;
    --timeline-main-context-stem: 42px;
    --timeline-axis-years-gap: 40px;
  }

  .timeline-primary-title {
    max-width: 190px;
    line-height: 1.3em;
  }
}

/* EVITAR POINTER EN EVENTOS SECUNDARIOS Y MENU FILTRO */

@media (hover: hover) and (pointer: fine) {
  .timeline-secondary-event,
  .timeline-context-label {
    cursor: default;
  }
}