Las decisiones más bajas del sistema: color, tipografía, espacio, radios, sombras y motion. Cada token tiene un nombre estable que sobrevive a rediseños — usa el nombre, no el valor.
Definida en OKLch para mejor consistencia perceptual. Foundation neutra + un naranja decisivo + rosa de movimiento. Sin gradientes, sin tonos beige.
Sans display para impacto, sans body para lectura, monospace para datos. La escala usa clamp() para responder al viewport sin breakpoints manuales.
Diez pasos. La mayoría del diseño vive en --s-4 (16px), --s-5 (24px) y --s-6 (32px). Los pasos altos son para padding de sección.
El botón principal usa --r-0 (0px) — corte recto, postura B&O. Cards default usan 8px; pills usan radio completo.
Dos sombras "suaves" para popovers y cards en hover. La "brutal" — un offset sólido de naranja — es la firma del sistema; úsala con criterio.
Tres duraciones, dos easings. Hover y micro-feedback en 120ms; transiciones de página en 200ms; revelaciones en 320ms. Nunca más.
prefers-reduced-motion@media (prefers-reduced-motion: no-preference). Si el usuario pidió menos movimiento, dale exactamente eso.
Tres anchos canónicos. Padding lateral fluido. Padding vertical de sección con clamp(). Sin breakpoints manuales en casi todo.
--w-content · uso general (este sitio)
--w-wide · landings, hero, tablas anchas
--w-prose · artículos, blog, FAQ
/* Sí — referenciar tokens */ .hero { padding-inline: var(--padding-x); max-width: var(--w-wide); background: var(--bg); color: var(--ink); } /* No — valores hardcodeados */ .hero { padding-inline: 48px; max-width: 1440px; background: #fdfdfb; color: #1a1715; }