Goyo · Design System · R0 0.1

Un sistema.
Cada marca.

Cada cliente trae su color primario y su color de fondo — el sistema entero se recolorea en runtime. Sin forks, sin rebuilds. Elige una marca abajo y mira toda la landing responder.

Elige una marca
FOL-00158 Distribuidora del Bajío
$48,210.50 Pagada
RFC del cliente XAXX010101000

* Retail / Panadera / SuperMX son marcas ilustrativas. Colores aproximados para demostrar el modelo multi-marca — no implican relación comercial.

§1 · Evidencia

Tres clientes. Tres marcas.
Los mismos primitivos.

El playground de arriba cambia tu vista. Esta sección muestra tres marcas conviviendo simultáneamente — cada una con su primary, su surface, sus focus rings. El mismo Card, el mismo Button, el mismo Input.

Retail · Convenience

Operaciones

Red de conveniencia. Alta rotación, ticket bajo, tenants por plaza.

FOL-10821 Suc. Tlalnepantla Norte
$1,248.00 Pagada
Folio fiscal A1B2-C3D4-E5F6
Panadera · Consumo

Portal Staff

Consumo masivo regional. Pedidos recurrentes por ruta, CFDI global.

FOL-04432 Ruta Occidente · Sem. 17
$82,410.75 Programada
Uso CFDI G03 · Gastos generales
SuperMX · Autoservicio

Finanzas

Autoservicio nacional. Complementos de pago, conciliación por tienda.

FOL-90015 CEDIS Monterrey · Mar
$1,204,550.00 Conciliada
RFC emisor XAXX010101000
2

Solo dos variables cambian entre marcas--color-primary y --color-surface. Los primitivos no se tocan, no se forkean, no se recompilan. El DS absorbe la marca en runtime desde la raíz del árbol.

§2 · Por qué

Un design system propio,
no un template.

shadcn nos ahorraba un trimestre. No lo adoptamos — por razones concretas. Aquí está el mismo Card de factura en ambos lados.

shadcn default Inter · slate neutrals · en_US
Invoice #INV-00158
Customer Name LLC
$48,210.50 Paid
Goyo · theme-aware mx Instrument Sans + JetBrains Mono · OKLCH 60° · es_MX
FOL-00158
Distribuidora del Bajío
$48,210.50 Pagada
01 · Tipografía

Cifras fiscales tabulares

JetBrains Mono con tnum alinea folios, RFCs y montos. Inter los desajusta.

02 · Vocabulario

Folio, RFC, Timbrar

El operador fiscal lee FOL-00158, no INV-00158. La palabra es "Timbrar", no "Submit".

03 · Neutrales

OKLCH hue 60° (cálido)

Grises cálidos vs slate fríos. Evita sentirse como un SaaS gringo rentado.

04 · Theme

Primary tokenizable

shadcn envuelve. Goyo absorbe la marca en runtime sin fork ni rebuild.

§3 · Principios

Seis reglas que no se negocian.

Cada decisión de diseño del DS pasa por este filtro. Si un primitivo falla una de estas seis, no entra.

01

Español de México primero

Timbrar, folio, RFC, CFDI, complemento, uso SAT. El vocabulario fiscal está en la UI, no en notas de implementación.

02

Densidad sin ruido

El operador fiscal pasa 6 horas al día aquí. Tablas densas, formularios compactos, respiración mínima deliberada — no aire decorativo.

03

Accesibilidad por default

Focus rings visibles, ratios AA contra surface, targets ≥44px, roving tabindex. Los primitivos ya vienen accesibles.

04

Cifras tabulares siempre

Montos, folios, RFCs, fechas — monoespaciado con tnum activado. Columnas que se alinean sin pensar.

05

Sobrio con el acento

Un primary por vista, usado para intención (CTA, foco, estado activo). El resto es neutral. Sin arcoíris UI.

06

AI-native desde composición

Cada primitivo expone props para streaming, tool-calls, y estados de generación. No retrofit — designed-in.

§4 · Primitivos

Componentes principales.

Una muestra del catálogo — los más usados, recoloreados con la marca activa del hero. El catálogo completo vive aparte, con props, estados y código para cada pieza.

ui.goyo.mx/catalogo Ver todos los componentes →
§5 · Paleta + tipografía

La paleta responde a tu marca.

Cambia la marca en el hero y estos colores cambian contigo. Una sola fuente de verdad para toda la aplicación — sin mantener paletas paralelas por cliente.

Primary --color-primary #C97B3A
Primary Deep --color-primary-deep #8A4E22
Surface --color-surface #FAF5EE
Ink --color-ink #111111
Success --color-success #22C55E
Warning --color-warning #F59E0B
Danger --color-danger #EF4444
Info --color-info #3B82F6

Todos los neutrales corren en OKLCH a hue 60°. El warmth es consistente entre surface, neutral-100, neutral-500 y neutral-700 sin hue drift. El primary + primary-deep se derivan automáticamente del hex que elijas: sin curvas manuales por marca.

Tipografía

Una escala. Dos familias. Números que se alinean solos.

display-xl Instrument Sans
700 · 56px / 1.02
tracking −0.035em
Un sistema.
h2 Instrument Sans
600 · 36px / 1.1
tracking −0.025em
Un sistema propio, no un template.
body Instrument Sans
400 · 17px / 1.6
Cada cliente trae su primary y su surface. El sistema entero se recolorea en runtime, sin forks ni rebuilds.
mono-fiscal JetBrains Mono
600 · 15px
tnum + ss01
FOL-00158 · $48,210.50 · XAXX010101000
↑ Lo que Inter no puede hacer: columnas alineadas sin esfuerzo.
§6 · Garantías

Lo que firmamos con cada release.

Cada primitivo pasa estas cuatro pruebas antes de publicarse. No son aspiracionales — son check-gates automatizados en CI.

AA

WCAG AA

Contraste mínimo 4.5:1 contra surface en todos los primarios y deep. Validado en CI contra los 4 presets.

44

Hit targets ≥44px

Todo interactivo cumple 2.5.5 de WCAG. El operador táctil en almacén no pelea con la UI.

Keyboard-first

Roving tabindex, focus trap en overlays, arrow-keys en radio/menu. Cada primitivo prueba su teclado.

Theme en runtime

Un cambio de --color-primary repinta el árbol sin reflow. Sin rebuild, sin fork.

Listo para montar tu marca.

Componentes, tokens y guías — todo lo que necesitas para empezar.