Components (registry)Layout
Team Grid
Layout template: team-grid
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}}{{member1_image}}{{member1_image_alt}}{{member1_name}}{{member1_jobTitle}}{{member1_description}}{{member1_linkedin}}{{member1_x}}{{member1_dribbble}}{{member2_image}}{{member2_image_alt}}{{member2_name}}{{member2_jobTitle}}{{member2_description}}{{member2_linkedin}}{{member2_x}}{{member2_dribbble}}{{member3_image}}{{member3_image_alt}}{{member3_name}}{{member3_jobTitle}}{{member3_description}}{{member3_linkedin}}{{member3_x}}{{member3_dribbble}}{{member4_image}}{{member4_image_alt}}{{member4_name}}{{member4_jobTitle}}{{member4_description}}{{member4_linkedin}}{{member4_x}}{{member4_dribbble}}{{member5_image}}{{member5_image_alt}}{{member5_name}}{{member5_jobTitle}}{{member5_description}}{{member5_linkedin}}{{member5_x}}{{member5_dribbble}}{{member6_image}}{{member6_image_alt}}{{member6_name}}{{member6_jobTitle}}{{member6_description}}{{member6_linkedin}}{{member6_x}}{{member6_dribbble}}{{hiring_heading}}{{hiring_description}}{{hiring_cta_href}}{{hiring_cta}}- Componentes requeridos
buttontypographyimage
Anatomía CSS
<div class="layoutTeamGrid"> </div>
Tokens resueltos
Valores finales tras seguir la cadena de tokens. Derivados del source: si un token cambia, esta tabla cambia sola.
| Variante | Prop | Valor | Token |
|---|---|---|---|
| all | fg | #525252 | muted.foreground |
| all | hover-fg | #0a0a0a | primary |
CSS mínimo funcional
Autocontenido: sin imports ni tokens. Para previews y prototipos — en producción se consume el CSS del DS.
/* Layout: team-grid — structure only, pure DS tokens */
.l-team-grid {
padding: 80px 32px;
}
.l-team-grid__header {
max-width: 640px;
margin: 0 auto;
text-align: center;
margin-bottom: 48px;
}
.l-team-grid__tagline {
font-size: 12.8px;
font-weight: 600;
color: #525252;
margin-bottom: 12px;
}
.l-team-grid__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-team-grid__heading {
font-size: 61.04px;
line-height: 1.1;
}
}
@media (min-width: 1024px) {
.l-team-grid__heading {
font-size: 76.29px;
line-height: 1.05;
}
}
.l-team-grid__description {
font-size: 16px;
line-height: 1.5;
color: #525252;
}
@media (min-width: 768px) {
.l-team-grid__description {
font-size: 20px;
line-height: 1.45;
}
}
.l-team-grid__grid {
display: grid;
grid-template-columns: 1fr;
gap: 48px 32px;
}
@media (min-width: 768px) {
.l-team-grid__grid {
grid-template-columns: repeat(3, 1fr);
gap: 32px 48px;
}
}
.l-team-grid__member {
display: flex;
flex-direction: column;
text-align: center;
}
.l-team-grid__member-media {
position: relative;
margin-bottom: 20px;
overflow: hidden;
border-radius: 12px;
}
@media (min-width: 768px) {
.l-team-grid__member-media {
margin-bottom: 24px;
}
}
.l-team-grid__member-media img {
width: 100%;
aspect-ratio: 1 / 1;
object-fit: cover;
display: block;
}
.l-team-grid__member-info {
margin-bottom: 12px;
}
@media (min-width: 768px) {
.l-team-grid__member-info {
margin-bottom: 16px;
}
}
.l-team-grid__member-name {
font-size: 16px;
font-weight: 600;
color: #0a0a0a;
margin-bottom: 4px;
}
@media (min-width: 768px) {
.l-team-grid__member-name {
font-size: 20px;
}
}
.l-team-grid__member-job {
font-size: 12.8px;
color: #525252;
}
.l-team-grid__member-bio {
font-size: 12.8px;
line-height: 1.45;
color: #525252;
margin-bottom: 24px;
}
.l-team-grid__socials {
display: flex;
justify-content: center;
gap: 12px;
align-self: center;
}
.l-team-grid__social {
color: #0a0a0a;
display: inline-flex;
}
.l-team-grid__social:hover {
color: #0a0a0a;
}
.l-team-grid__social svg {
width: 24px;
height: 24px;
}
.l-team-grid__hiring {
max-width: 28rem;
margin: 56px auto 0;
text-align: center;
}
@media (min-width: 768px) {
.l-team-grid__hiring {
margin-top: 80px;
}
}
.l-team-grid__hiring-heading {
font-size: 31.25px;
line-height: 1.25;
font-weight: 700;
color: #0a0a0a;
margin-bottom: 12px;
}
@media (min-width: 768px) {
.l-team-grid__hiring-heading {
font-size: 39.06px;
line-height: 1.2;
margin-bottom: 16px;
}
}
.l-team-grid__hiring-description {
font-size: 16px;
line-height: 1.5;
color: #525252;
margin-bottom: 24px;
}
.l-team-grid__hiring-actions {
display: flex;
justify-content: center;
}
Codigo fuente
layouts/team-grid.css
/* Layout: team-grid — structure only, pure DS tokens */ .l-team-grid { padding: var(--spacing-20) var(--spacing-8); } .l-team-grid__header { max-width: 640px; margin: 0 auto; text-align: center; margin-bottom: var(--spacing-12); } .l-team-grid__tagline { font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold); color: var(--muted-foreground); margin-bottom: var(--spacing-3); } .l-team-grid__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-team-grid__heading { font-size: var(--font-size-5xl); line-height: var(--line-height-5xl); } } @media (min-width: 1024px) { .l-team-grid__heading { font-size: var(--font-size-6xl); line-height: var(--line-height-6xl); } } .l-team-grid__description { font-size: var(--font-size-base); line-height: var(--line-height-base); color: var(--muted-foreground); } @media (min-width: 768px) { .l-team-grid__description { font-size: var(--font-size-lg); line-height: var(--line-height-lg); } } .l-team-grid__grid { display: grid; grid-template-columns: 1fr; gap: var(--spacing-12) var(--spacing-8); } @media (min-width: 768px) { .l-team-grid__grid { grid-template-columns: repeat(3, 1fr); gap: var(--spacing-8) var(--spacing-12); } } .l-team-grid__member { display: flex; flex-direction: column; text-align: center; } .l-team-grid__member-media { position: relative; margin-bottom: var(--spacing-5); overflow: hidden; border-radius: var(--radius-lg); } @media (min-width: 768px) { .l-team-grid__member-media { margin-bottom: var(--spacing-6); } } .l-team-grid__member-media img { width: 100%; aspect-ratio: 1 / 1; object-fit: cover; display: block; } .l-team-grid__member-info { margin-bottom: var(--spacing-3); } @media (min-width: 768px) { .l-team-grid__member-info { margin-bottom: var(--spacing-4); } } .l-team-grid__member-name { font-size: var(--font-size-base); font-weight: var(--font-weight-semibold); color: var(--foreground); margin-bottom: var(--spacing-1); } @media (min-width: 768px) { .l-team-grid__member-name { font-size: var(--font-size-lg); } } .l-team-grid__member-job { font-size: var(--font-size-sm); color: var(--muted-foreground); } .l-team-grid__member-bio { font-size: var(--font-size-sm); line-height: var(--line-height-sm); color: var(--muted-foreground); margin-bottom: var(--spacing-6); } .l-team-grid__socials { display: flex; justify-content: center; gap: var(--spacing-3); align-self: center; } .l-team-grid__social { color: var(--foreground); display: inline-flex; } .l-team-grid__social:hover { color: var(--primary); } .l-team-grid__social svg { width: var(--spacing-6); height: var(--spacing-6); } .l-team-grid__hiring { max-width: 28rem; margin: var(--spacing-14) auto 0; text-align: center; } @media (min-width: 768px) { .l-team-grid__hiring { margin-top: var(--spacing-20); } } .l-team-grid__hiring-heading { font-size: var(--font-size-2xl); line-height: var(--line-height-2xl); font-weight: var(--font-weight-bold); color: var(--foreground); margin-bottom: var(--spacing-3); } @media (min-width: 768px) { .l-team-grid__hiring-heading { font-size: var(--font-size-3xl); line-height: var(--line-height-3xl); margin-bottom: var(--spacing-4); } } .l-team-grid__hiring-description { font-size: var(--font-size-base); line-height: var(--line-height-base); color: var(--muted-foreground); margin-bottom: var(--spacing-6); } .l-team-grid__hiring-actions { display: flex; justify-content: center; }