ATOM
Components (registry)Layout

Timeline Vertical

Layout template: timeline-vertical

Contrato del layout

Un layout transporta anatomia, no pintura: se rellena por slots y depende del CSS de los componentes que lista. Instalarlo sin ellos lo deja sin estilos.

Slots
{{section_id}}{{tagline}}{{heading}}{{description}}{{cta_primary_href}}{{cta_primary}}{{cta_secondary_href}}{{cta_secondary}}{{timeline1_date}}{{timeline1_heading}}{{timeline1_description}}{{timeline1_cta_primary_href}}{{timeline1_cta_primary}}{{timeline1_cta_secondary_href}}{{timeline1_cta_secondary}}{{timeline2_date}}{{timeline2_heading}}{{timeline2_description}}{{timeline2_cta_primary_href}}{{timeline2_cta_primary}}{{timeline2_cta_secondary_href}}{{timeline2_cta_secondary}}{{timeline3_date}}{{timeline3_heading}}{{timeline3_description}}{{timeline3_cta_primary_href}}{{timeline3_cta_primary}}{{timeline3_cta_secondary_href}}{{timeline3_cta_secondary}}{{timeline4_date}}{{timeline4_heading}}{{timeline4_description}}{{timeline4_cta_primary_href}}{{timeline4_cta_primary}}{{timeline4_cta_secondary_href}}{{timeline4_cta_secondary}}
Componentes requeridos
buttontypography

Anatomía CSS

<div class="layoutTimelineVertical">

</div>

Tokens resueltos

Valores finales tras seguir la cadena de tokens. Derivados del source: si un token cambia, esta tabla cambia sola.

VariantePropValorToken
allfg#0a0a0aforeground
allbg#e5e5e5border
allborder#e5e5e5border

CSS mínimo funcional

Autocontenido: sin imports ni tokens. Para previews y prototipos — en producción se consume el CSS del DS.

/* Layout: timeline-vertical — structure only, pure DS tokens */
.l-timeline-vertical {
  padding: 80px 32px;
}

.l-timeline-vertical__grid {
  position: relative;
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
}

@media (min-width: 768px) {
  .l-timeline-vertical__grid {
    grid-template-columns: 1fr 1fr;
    gap: 96px;
    align-items: start;
  }
}

@media (min-width: 1024px) {
  .l-timeline-vertical__grid {
    gap: 128px;
  }
}

.l-timeline-vertical__intro {
  position: relative;
  z-index: 10;
}

@media (min-width: 768px) {
  .l-timeline-vertical__intro {
    position: sticky;
    top: 80px;
    z-index: auto;
    padding-right: 16px;
  }
}

.l-timeline-vertical__tagline {
  font-size: 12.8px;
  font-weight: 600;
  color: #525252;
  margin-bottom: 12px;
}

.l-timeline-vertical__heading {
  font-size: 48.83px;
  line-height: 1.15;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: #0a0a0a;
  margin-bottom: 20px;
}

@media (min-width: 768px) {
  .l-timeline-vertical__heading {
    font-size: 61.04px;
    line-height: 1.1;
    margin-bottom: 24px;
  }
}

@media (min-width: 1024px) {
  .l-timeline-vertical__heading {
    font-size: 76.29px;
    line-height: 1.05;
  }
}

.l-timeline-vertical__description {
  font-size: 16px;
  line-height: 1.5;
  color: #525252;
}

@media (min-width: 768px) {
  .l-timeline-vertical__description {
    font-size: 20px;
    line-height: 1.45;
  }
}

.l-timeline-vertical__actions {
  margin-top: 24px;
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
}

@media (min-width: 768px) {
  .l-timeline-vertical__actions {
    margin-top: 32px;
  }
}

.l-timeline-vertical__line {
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  z-index: 0;
  width: 2rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  pointer-events: none;
}

@media (min-width: 768px) {
  .l-timeline-vertical__line {
    left: 50%;
    transform: translateX(-50%);
    width: 0.75rem;
  }
}

.l-timeline-vertical__line-fade-top {
  height: 4rem;
  width: 0.25rem;
  background: linear-gradient(to bottom, #fafafa, transparent);
  flex-shrink: 0;
}

.l-timeline-vertical__line-bar {
  width: 3px;
  background-color: #e5e5e5;
  flex: 1;
}

@media (min-width: 768px) {
  .l-timeline-vertical__line-bar {
    width: 3px;
  }
}

.l-timeline-vertical__line-fade-bottom {
  height: 4rem;
  width: 0.25rem;
  background: linear-gradient(to top, #fafafa, transparent);
  flex-shrink: 0;
}

.l-timeline-vertical__items {
  position: relative;
  z-index: 10;
  display: grid;
  gap: 32px 48px;
}

@media (min-width: 768px) {
  .l-timeline-vertical__items {
    gap: 80px 80px;
  }
}

@media (min-width: 1024px) {
  .l-timeline-vertical__items {
    gap: 80px 128px;
  }
}

.l-timeline-vertical__item {
  position: relative;
  padding-left: 3rem;
}

@media (min-width: 768px) {
  .l-timeline-vertical__item {
    padding-left: 0;
  }
}

.l-timeline-vertical__dot {
  position: absolute;
  left: 0;
  top: 1.75rem;
  width: 1rem;
  height: 1rem;
  border-radius: 9999px;
  background-color: #e5e5e5;
  box-shadow: 0 0 0 8px #fafafa;
  z-index: 20;
}

@media (min-width: 768px) {
  .l-timeline-vertical__dot {
    left: -2.5rem;
  }
}

@media (min-width: 1024px) {
  .l-timeline-vertical__dot {
    left: -3rem;
  }
}

.l-timeline-vertical__card {
  border: 1px solid #e5e5e5;
  padding: 24px;
}

@media (min-width: 768px) {
  .l-timeline-vertical__card {
    padding: 32px;
  }
}

.l-timeline-vertical__date {
  font-size: 48.83px;
  line-height: 1.2;
  font-weight: 700;
  color: #0a0a0a;
  margin-bottom: 12px;
}

@media (min-width: 768px) {
  .l-timeline-vertical__date {
    font-size: 61.04px;
    margin-bottom: 16px;
  }
}

@media (min-width: 1024px) {
  .l-timeline-vertical__date {
    font-size: 76.29px;
  }
}

.l-timeline-vertical__item-heading {
  font-size: 25px;
  font-weight: 700;
  color: #0a0a0a;
  margin-bottom: 12px;
}

@media (min-width: 768px) {
  .l-timeline-vertical__item-heading {
    font-size: 31.25px;
    margin-bottom: 16px;
  }
}

.l-timeline-vertical__item-description {
  font-size: 16px;
  color: #0a0a0a;
}

.l-timeline-vertical__item-actions {
  margin-top: 24px;
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
}

@media (min-width: 768px) {
  .l-timeline-vertical__item-actions {
    margin-top: 32px;
  }
}

Codigo fuente

layouts/timeline-vertical.css
/* Layout: timeline-vertical — structure only, pure DS tokens */
.l-timeline-vertical {
  padding: var(--spacing-20) var(--spacing-8);
}

.l-timeline-vertical__grid {
  position: relative;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--spacing-6);
}

@media (min-width: 768px) {
  .l-timeline-vertical__grid {
    grid-template-columns: 1fr 1fr;
    gap: var(--spacing-24);
    align-items: start;
  }
}

@media (min-width: 1024px) {
  .l-timeline-vertical__grid {
    gap: var(--spacing-32);
  }
}

.l-timeline-vertical__intro {
  position: relative;
  z-index: 10;
}

@media (min-width: 768px) {
  .l-timeline-vertical__intro {
    position: sticky;
    top: var(--spacing-20);
    z-index: auto;
    padding-right: var(--spacing-4);
  }
}

.l-timeline-vertical__tagline {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-semibold);
  color: var(--muted-foreground);
  margin-bottom: var(--spacing-3);
}

.l-timeline-vertical__heading {
  font-size: var(--font-size-4xl);
  line-height: var(--line-height-4xl);
  font-weight: var(--font-weight-bold);
  letter-spacing: var(--letter-spacing-tight);
  color: var(--foreground);
  margin-bottom: var(--spacing-5);
}

@media (min-width: 768px) {
  .l-timeline-vertical__heading {
    font-size: var(--font-size-5xl);
    line-height: var(--line-height-5xl);
    margin-bottom: var(--spacing-6);
  }
}

@media (min-width: 1024px) {
  .l-timeline-vertical__heading {
    font-size: var(--font-size-6xl);
    line-height: var(--line-height-6xl);
  }
}

.l-timeline-vertical__description {
  font-size: var(--font-size-base);
  line-height: var(--line-height-base);
  color: var(--muted-foreground);
}

@media (min-width: 768px) {
  .l-timeline-vertical__description {
    font-size: var(--font-size-lg);
    line-height: var(--line-height-lg);
  }
}

.l-timeline-vertical__actions {
  margin-top: var(--spacing-6);
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-4);
}

@media (min-width: 768px) {
  .l-timeline-vertical__actions {
    margin-top: var(--spacing-8);
  }
}

.l-timeline-vertical__line {
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  z-index: 0;
  width: 2rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  pointer-events: none;
}

@media (min-width: 768px) {
  .l-timeline-vertical__line {
    left: 50%;
    transform: translateX(-50%);
    width: 0.75rem;
  }
}

.l-timeline-vertical__line-fade-top {
  height: 4rem;
  width: 0.25rem;
  background: linear-gradient(to bottom, var(--background), transparent);
  flex-shrink: 0;
}

.l-timeline-vertical__line-bar {
  width: 3px;
  background-color: var(--border);
  flex: 1;
}

@media (min-width: 768px) {
  .l-timeline-vertical__line-bar {
    width: 3px;
  }
}

.l-timeline-vertical__line-fade-bottom {
  height: 4rem;
  width: 0.25rem;
  background: linear-gradient(to top, var(--background), transparent);
  flex-shrink: 0;
}

.l-timeline-vertical__items {
  position: relative;
  z-index: 10;
  display: grid;
  gap: var(--spacing-8) var(--spacing-12);
}

@media (min-width: 768px) {
  .l-timeline-vertical__items {
    gap: var(--spacing-20) var(--spacing-20);
  }
}

@media (min-width: 1024px) {
  .l-timeline-vertical__items {
    gap: var(--spacing-20) var(--spacing-32);
  }
}

.l-timeline-vertical__item {
  position: relative;
  padding-left: 3rem;
}

@media (min-width: 768px) {
  .l-timeline-vertical__item {
    padding-left: 0;
  }
}

.l-timeline-vertical__dot {
  position: absolute;
  left: 0;
  top: 1.75rem;
  width: 1rem;
  height: 1rem;
  border-radius: var(--radius-full);
  background-color: var(--border);
  box-shadow: 0 0 0 8px var(--background);
  z-index: 20;
}

@media (min-width: 768px) {
  .l-timeline-vertical__dot {
    left: -2.5rem;
  }
}

@media (min-width: 1024px) {
  .l-timeline-vertical__dot {
    left: -3rem;
  }
}

.l-timeline-vertical__card {
  border: 1px solid var(--border);
  padding: var(--spacing-6);
}

@media (min-width: 768px) {
  .l-timeline-vertical__card {
    padding: var(--spacing-8);
  }
}

.l-timeline-vertical__date {
  font-size: var(--font-size-4xl);
  line-height: 1.2;
  font-weight: var(--font-weight-bold);
  color: var(--foreground);
  margin-bottom: var(--spacing-3);
}

@media (min-width: 768px) {
  .l-timeline-vertical__date {
    font-size: var(--font-size-5xl);
    margin-bottom: var(--spacing-4);
  }
}

@media (min-width: 1024px) {
  .l-timeline-vertical__date {
    font-size: var(--font-size-6xl);
  }
}

.l-timeline-vertical__item-heading {
  font-size: var(--font-size-xl);
  font-weight: var(--font-weight-bold);
  color: var(--foreground);
  margin-bottom: var(--spacing-3);
}

@media (min-width: 768px) {
  .l-timeline-vertical__item-heading {
    font-size: var(--font-size-2xl);
    margin-bottom: var(--spacing-4);
  }
}

.l-timeline-vertical__item-description {
  font-size: var(--font-size-base);
  color: var(--foreground);
}

.l-timeline-vertical__item-actions {
  margin-top: var(--spacing-6);
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-4);
}

@media (min-width: 768px) {
  .l-timeline-vertical__item-actions {
    margin-top: var(--spacing-8);
  }
}

On this page

Detalles

Publicado14 de mayo de 2026
Categorialayout
Lectura...
Visitas...
Ayuda?Slack

Componente

Layout/timelineVertical

Source

components-react / cssDisponible via MCP: atom_uikit_source("layout/timeline-vertical")