Card estándar
Contenido de ejemplo. Usa los tokens semánticos del sistema para texto, espaciado y fondos.
Sergio Forés · actualizado 2026-04-12
Esta página muestra todos los tokens y componentes del sistema en un solo lugar. Sirve como referencia visual y como canario de regresiones: si algo del sistema cambia y rompe algo, aquí se verá antes que en ningún otro sitio.
No editar componentes desde este archivo. Solo sirve para visualizarlos.
Dos familias en el sistema
--font-primary — Montserrat
--font-secondary — Helvetica Neue / Avenir Next
--font-mono — JetBrains Mono / SF Mono
Montserrat es la fuente principal del sistema. La secundaria es un stack de sistema para contextos que requieran contraste tipográfico.
4 tamaños base + display especial para heros y contextos editoriales
--text-display — Hero, editorial dramático
--text-large — Titulares principales (H1)
--text-medium — Subtítulos, navegación, blockquotes (H2-H3)
--text-base — Párrafos, texto de lectura
--text-small — UI, labels, texto auxiliar
--font-size-display apunta a --text-display. heading a medium, body a base.
--font-size-display → var(--text-display)--font-size-heading → var(--text-medium)--font-size-body → var(--text-base)--letter-spacing-display: 0.35em — para uppercase display
Los cuatro tamaños base usan clamp() con progresión áurea — escalan fluidamente entre móvil y desktop.
4 colores de marca · nombres genéricos, valores intercambiables
Nombres genéricos (brand-a/b/c) para poder cambiar los valores sin renombrar variables. Uso: fondos, fills, gestos decorativos, marca.
Yellow sobre negro
Brand A sobre negro
Brand B sobre negro
Brand C sobre negro
Blanco, negro y escala de grises 50-900
Estados UI con dos variantes: bright (fills/fondos oscuros) y text (texto legible sobre blanco)
--accent-*-textVersiones oscurecidas con ratio AA (6:1+ sobre blanco). Usar siempre que el color sea texto legible.
Error: campo obligatorio
--accent-error-text
#c41134 · 6.04:1
Info: sesión caduca
--accent-info-text
#1666a5 · 6.04:1
Aviso: irreversible
--accent-warning-text
#825b00 · 6.09:1
OK: guardado
--accent-secondary-text
#007061 · 6.02:1
--accent-*Versiones brillantes. Solo para fills, backgrounds, iconos grandes o texto sobre fondo oscuro. No como texto sobre blanco.
Error brillante sobre gray-900
Info brillante sobre gray-900
Warning brillante sobre gray-900
Secondary brillante sobre gray-900
--accent-*-bright son aliases de --accent-* (mismo valor, nombre explícito para uso sobre fondo oscuro).
--accent-primary (#0055ff) pasa AA como texto — es el único que no necesita variante -text.
Atajos para los tokens semánticos más frecuentes
5 pesos con contraste real, 3 line-heights
--font-weight-light (200) — Ultra light, solo display/large
--font-weight-normal (400) — UI, labels, general
--font-weight-medium (500) — Párrafos, texto de lectura
--font-weight-semibold (600) — Títulos, headings
--font-weight-bold (800) — Énfasis fuerte
--line-height-tight (1.2)
Texto de ejemplo con line-height tight. Cada línea está más cercana a la siguiente, creando bloques densos de texto. Mayor densidad visual.
--line-height-normal (1.5)
Texto de ejemplo con line-height normal. Equilibrio entre densidad y legibilidad para textos corridos. El estándar del sistema.
--line-height-relaxed (1.8)
Texto de ejemplo con line-height relaxed. Máxima respiración vertical, ideal para bloques largos de lectura. Aire visible entre líneas.
--letter-spacing-tight (-0.02em) — Tracking apretado
--letter-spacing-normal (0) — Tracking neutro
--letter-spacing-wide (0.02em) — Tracking abierto
--letter-spacing-display (0.35em) — DISPLAY UPPERCASE
Cada paso multiplica ~φ (1.618) · base 1rem = 16px
Tokens semánticos dimensionales:
--space-card-padding (3.618rem),
--space-card-image (13.708rem),
--space-grid-min (15.326rem),
--space-container-max (101.9rem).
Los nombres antiguos en píxeles fueron eliminados en v3.0.0.
.btn + variantes modificadoras
.card con slots __header, __title, __body, __text
Contenido de ejemplo. Usa los tokens semánticos del sistema para texto, espaciado y fondos.
Variante modificadora .card--warning.
Tokens responsivos con clamp() para gaps y paddings
--gap para grids, --pad para contenedores. Escalan con el viewport, sin breakpoints.
Aspect ratios y object-fit como tokens del sistema
16 / 9
--aspect-ratio-landscape
1 / 1
--aspect-ratio-square
9 / 16
--aspect-ratio-reel
.c-scroll-top · componente flotante con animación
Fijado abajo-derecha. Clase .is-visible controla la aparición con fade + translateY.
Animación bounce-up en el icono.
.c-slider · navegación horizontal por slides
Click izquierda/derecha para navegar. Transición: cubic-bezier(0.16, 1, 0.3, 1).
JS: translateX(-N * slider.offsetWidth) por slide. Loop infinito con módulo.
.c-fade-scroll · opacidad controlada por scroll position
Patrón CSS + JS. El elemento desaparece gradualmente al hacer scroll.
data-fade-start="100" — scroll en px donde empieza el fadedata-fade-end="400" — scroll en px donde opacity llega a 0opacity = 1 - (scrollY - start) / (end - start)
Usado en sergiofores para el hero section. La clase .c-fade-scroll aplica
transition: opacity 0.1s linear y will-change: opacity.
.pageheader + .menu · sistema completo de cabecera
Variantes: .pageheader--fixed, --sticky, --transparent, --dynamic.
.menu--mobile-toggle para hamburger en mobile.
.hero-master · sección de impacto visual
Variantes: .hero-master--fullscreen (100svh), --image (background-image).
.hero-title-master--inverse para texto claro sobre fondo oscuro.
.features__card · 8 variaciones para landing pages
Descripción del feature con texto de ejemplo.
Variante centrada sin categoría.
Variante con fondo de color de marca.
Otras variantes: --bg-only (fondo imagen), --circular (aspect-ratio 1:1),
--clickable (hover scale), --two-cols / --two-cols-reverse (imagen + texto).
.notification · alertas y avisos
Contenido de la notificación con información relevante para el usuario.
.form · campos, labels y estados de foco
Clases: .form (contenedor flex-column), .form--constrained (max-width áureo, centrado),
.form__field (campo + label apilados), .form__label, .form__input.
Estado :focus activa borde --color-accent-primary + sombra de halo.
Funciona con input, textarea y select.
.dropdown · menú desplegable CSS puro, sin JS
Apertura por :focus-within en .dropdown — CSS puro, cero JavaScript.
.dropdown__trigger contiene el label y la flecha SVG (.dropdown__arrow).
.dropdown__content posicionado absolute bajo el trigger.
.dropdown__list → .dropdown__item → .dropdown__link.
.icon · SVG inline escalado en em, 4 tamaños
Clase base .icon: 1em × 1em, stroke: currentColor, fill: none, stroke-width: 2.
Escala relativa al font-size del contexto — coherente en cualquier tamaño de texto.
Modificadores: --sm 1.25em · --lg 1.5em · --xl 2em.
.c-code · ventanas de código con syntax highlighting CSS puro
/* tokens.css */
:root {
--text-large: clamp(2.618rem, calc(2.4rem + 1.09vw), 3.236rem);
--color-brand-a: #00FFFF;
}
<section class="c-hero">
<h1>Título principal</h1>
<p>Subtítulo del proyecto</p>
</section>
const slider = document.querySelector('[data-slider]');
// translateX en px absolutos
slider.style.transform = `translateX(-${offset}px)`;
Ventana de código estilo terminal con barra de título (3 dots + nombre de archivo).
Syntax highlighting mediante clases semánticas CSS puro, sin JavaScript:
.c-code__keyword (magenta) · .c-code__string (yellow) ·
.c-code__comment (gray-500, italic) · .c-code__property (cyan) ·
.c-code__value (accent-secondary) · .c-code__tag (accent-error).
Fondo --color-gray-900, texto --color-gray-100,
overflow-x: auto en pre para código largo.
.footer · pie de página con brand, links y social
Variantes: .footer--light, --accent, --tall.
Variantes de grid disponibles en layout.css
Otras variantes: .grid--2-col-phi, --4-col-phi, --responsive-compact (gap: 0),
--responsive-wide, .grid--cards, .grid--12-col.
Column spans: .col-span-3/4/6/8/9.
Grid editorial donde los hijos rompen el alineamiento rígido. Los offsets verticales
y horizontales siguen la escala áurea inversa (φ⁻⁵ a φ⁻²) — misma
proporción que el spacing, distinta unidad (% en vez de rem, porque el offset es
proporcional al contenedor). Tokens: --offset-sm/md/lg/xl.
--offset-sm: 9%
φ⁻⁵ · sutil
--offset-md: 14.6%
φ⁻⁴ · suave
--offset-lg: 23.6%
φ⁻³ · estándar
--offset-xl: 38.2%
φ⁻² · dramático
offset-top-lg
offset-bottom-lg
offset-left-lg
offset-right-lg
Tokens: --offset-sm (9%, φ⁻⁵), --offset-md (14.6%, φ⁻⁴),
--offset-lg (23.6%, φ⁻³), --offset-xl (38.2%, φ⁻²).
Top: .o-grid__offset-top-sm/md/lg/xl.
Bottom: .o-grid__offset-bottom-sm/md/lg/xl.
Left: .o-grid__offset-left-sm/md/lg/xl.
Right: .o-grid__offset-right-sm/md/lg/xl.
Layout: .o-grid--breathing (55/45 en desktop, stack en mobile),
.o-grid__span-rows, .o-grid__full.
Logical properties: top = block-start, bottom = block-end, left = inline-start, right = inline-end.
Grid 3×3 donde cada celda demuestra una combinación de justify-self + align-self.
El elemento oscuro (~60×40px) se posiciona dentro de su celda de 120px de altura.
Grid de 3 columnas y 3 filas. Los hijos se posicionan con grid-column y grid-row
explícitos — span de columnas, span de filas, ancho completo y celda concreta.
.container-master · max-width con padding variants
.container-master — padding estándar
.container-master--compact — sin padding lateral
.container-master--wide — padding amplio
.section--spacing-* · ritmo vertical entre secciones
Escala de radios del sistema
Duraciones y curvas de animación
Helpers atómicos de spacing
python3 -m http.server 8000 en la raíz de design-system/.http://localhost:8000/showcase.html.
Auditorías asociadas: docs/audit-design-system-2026-04-07.md,
docs/audit-accessibility-2026-04-07.md,
docs/audit-tech-debt-2026-04-07.md.