# Legalty Design System — Documentación completa Rounded expresivo · Poppins/Inter/Spline Sans Mono · HeroUI v3. Versión 5.0.0. Acento #9268FA. ====================================================================== ## Principios de diseño _Las seis convicciones que guían cada decisión de producto en Legalty._ Legalty opera en un dominio donde la **confianza** lo es todo: constituir empresas, firmar documentos, gestionar expedientes legales. El diseño debe transmitir rigor y calma, nunca fricción ni ruido. Estos principios son el filtro de toda decisión visual y de interacción. ## Claridad antes que densidad Cada pantalla comunica una idea principal. La información legal es compleja; nuestro trabajo es ordenarla, no reflejarla en desorden. Cuando dudes, quita. ## Jerarquía deliberada El tamaño, el peso y el color guían la mirada en un orden intencional: qué es lo primero, qué es acción, qué es contexto. Una sola acción primaria por vista. ## Consistencia sistémica Un botón, un estado o un espaciado significan lo mismo en toda la plataforma. La coherencia reduce la carga cognitiva y construye familiaridad —y con ella, confianza. ## Aire con propósito El espacio en blanco no es vacío: es respiración. En documentos densos, el ritmo vertical y los radios suaves (rounded expresivo) hacen que lo serio se sienta accesible. ## Accesibilidad no negociable Contraste AA como mínimo, foco visible, targets táctiles de 44px, navegación por teclado. Lo legal debe ser usable por todos, sin excepción. Ver el [checklist WCAG](/ux). ## Confianza como estética Neutros sobrios, un acento violeta usado con intención, tipografía legible. Nada estridente. El producto debe sentirse como un despacho moderno: profesional, ordenado, humano. Estos principios se traducen en tokens y componentes concretos en los capítulos siguientes. Si una decisión de UI no puede justificarse con uno de ellos, probablemente sobra. ---------------------------------------------------------------------- ## Color _Neutros sobrios como base, un acento violeta con intención y semánticos de estado claros._ El color en Legalty es mayormente **neutro**. El violeta de marca aparece con moderación, reservado para acciones y foco. Los colores semánticos comunican estado sin ambigüedad. Todos los valores se exponen como variables `--lg-*` y funcionan en claro y oscuro. ## Neutros y superficies La escala neutra construye jerarquía por elevación: fondo, superficie, superficie elevada. ### Texto ## Acento de marca El violeta `#9268FA` es la identidad. Para texto y rellenos usamos el tono *ink* `#6340C7`, que cumple contraste **AA** sobre fondos claros. Se usa en la acción primaria, enlaces, foco y selección — nunca como decoración. ## Semánticos de estado Cuatro familias: éxito, advertencia, peligro e información. Cada una con su tono sólido, su fondo suave y su borde. ---------------------------------------------------------------------- ## Tipografía _Poppins para marca y titulares, Inter para cuerpo y datos densos, Spline Sans Mono para metadatos._ Tres familias con roles bien separados. La partición no es estética: equilibra **identidad de marca** con **legibilidad** en interfaces legales densas. ## Poppins — display y marca **Poppins** es la fuente del logotipo de Legalty. Geométrica, amable y rotunda, aporta carácter y calidez a titulares, portadas y momentos de marca. Su forma redondeada dialoga con el estilo *rounded expresivo* del sistema. Se reserva a **Display, H1–H4 y overlines destacados**. No se usa en cuerpo largo ni en tablas: a tamaños pequeños su geometría resta legibilidad y densidad. ## Inter — cuerpo y UI **Inter** es la voz de trabajo: párrafos, formularios, tablas, etiquetas y componentes de alta densidad. Neutra, altamente legible y profesional, sostiene la seriedad del producto donde más importa: la lectura de información legal. ## Spline Sans Mono — datos y metadatos Para importes, códigos de color, identificadores y overlines técnicos usamos **Spline Sans Mono**. Sus terminales ligeramente redondeadas armonizan con Poppins y le dan un carácter propio —lejos del monoespaciado genérico— sin perder precisión tabular. ## Escala tipográfica Base de `15px / 24px`. Poppins en los niveles display; Inter del cuerpo hacia abajo; Spline Sans Mono en el overline. ---------------------------------------------------------------------- ## Medida y ritmo _Base de 4px, radios generosos (rounded expresivo) y sombras suaves que sugieren profundidad sin dramatismo._ Todo se compone sobre una rejilla de **4px**. Los radios son generosos —la evolución más visible de esta versión— y las sombras, difusas y discretas. ## Radio de esquina — rounded expresivo Siguiendo la tendencia de iOS y Material 3 Expressive, la escala de radios se amplió respecto a versiones anteriores: esquinas más suaves y protagonistas que hacen el producto más moderno y amable, sin perder seriedad. En HeroUI esto se controla con una única variable `--radius` (botones y campos) de la que se derivan los demás. ## Espaciado — base 4px Una única escala de espaciado gobierna márgenes, padding y gaps. La consistencia del ritmo es lo que hace que la interfaz se sienta ordenada. ## Elevación Sombras neutras y difusas. En modo oscuro, la elevación se apoya además en el cambio de superficie, no solo en la sombra. Los botones son full rounded (pill) — la firma más visible del estilo rounded expresivo. Los campos usan md (14px) y las cards xl (24px). En HeroUI: medium ≈ md, large ≈ xl. ---------------------------------------------------------------------- ## Componentes _Los bloques reutilizables de Legalty, renderizados con componentes HeroUI reales e interactivos._ Todos los componentes de esta página son **HeroUI reales y ejecutables** —puedes interactuar con ellos— vestidos con los tokens de Legalty (acento violeta, radios rounded, tipografía). Son la fuente de verdad: lo que ves aquí es lo que se construye en producto. ## Botones Una sola acción primaria por vista. El resto, secundario, terciario o ghost. El destructivo solo confirma acciones irreversibles. > [demo interactiva: Button] ## Campos de formulario Etiqueta siempre visible, texto de ayuda debajo y estado de error explícito. El campo hereda el radio del sistema. > [demo interactiva: Field] ## Controles de selección Checkbox, switch y radios para decisiones binarias y de opción única. > [demo interactiva: Selection] ## Estados y badges Chips para etiquetar estado de expedientes, documentos y firmas. > [demo interactiva: Badge] ## Alertas Mensajes contextuales con color semántico. Título breve y descripción accionable. > [demo interactiva: Alert] ## Cards Contenedor de información agrupada. Cabecera, cuerpo y pie con la acción de la tarjeta. > [demo interactiva: Card] ## Tabs Navegación entre vistas relacionadas dentro de un mismo contexto. > [demo interactiva: Tabs] ## Tooltips Información contextual breve, activada por hover o foco. > [demo interactiva: Tooltip] ## Modales / Diálogos Interrupciones deliberadas para confirmar o completar una tarea sin perder el contexto. > [demo interactiva: Modal] ## Dropdowns Menús de acciones secundarias sobre un elemento. > [demo interactiva: Dropdown] ## Select Selección de una opción entre muchas, con búsqueda y teclado. > [demo interactiva: Select] ## Tabla de datos El caballo de batalla de los expedientes: densa, legible y ordenable. > [demo interactiva: Table] ## Carga Indicadores de progreso para operaciones asíncronas. > [demo interactiva: Spinner] ---------------------------------------------------------------------- ## Dashboard y navegación _Patrones de layout para la aplicación: sidebar en escritorio, bottom navigation en móvil._ El producto Legalty se organiza alrededor de expedientes. La navegación debe ser estable, predecible y dejar el máximo espacio al contenido. ## Escritorio — Sidebar con submenús Una barra lateral fija a la izquierda agrupa las áreas principales (Expedientes, Documentos, Facturación, Ajustes). Los submenús se expanden en su sección, nunca en overlays. El acento violeta marca el elemento activo, como en la navegación de esta guía. - Ancho estable (~240px), colapsable a iconos en pantallas medianas. - Un único nivel de submenú; más profundidad indica que la IA de la información falla. - El estado activo usa `--lg-accent-soft` de fondo y texto en `--lg-text`. ## Móvil — Bottom navigation En móvil, 3–5 destinos principales viven en una barra inferior con targets de 44px. Las acciones secundarias se mueven a un menú "Más". El contenido ocupa todo el ancho. ## Composición de una vista de expediente Una vista típica combina cabecera con título y acción primaria, una fila de estado con chips, tabs para las secciones y una tabla de documentos: > [demo interactiva: Card] Regla de oro: el usuario siempre sabe dónde está (sección activa), qué puede hacer (una acción primaria clara) y cómo volver. ---------------------------------------------------------------------- ## Diseño responsivo _Breakpoints del sistema y reglas de adaptación por componente._ Diseñamos *mobile-first* y escalamos hacia arriba. El contenido manda: los breakpoints existen para servir a la lectura, no al revés. ## Breakpoints del sistema | Token | Ancho | Uso | |---|---|---| | `sm` | 640px | Móvil grande / apilado a 1 columna | | `md` | 768px | Tablet · 2 columnas | | `lg` | 1024px | Escritorio · aparece el sidebar | | `xl` | 1280px | Escritorio amplio · ancho máximo de lectura | ## Reglas de responsividad - **Un contenido, un ancho de lectura.** El texto largo nunca supera ~68 caracteres por línea. - **Apilar antes que encoger.** En móvil, las columnas se apilan; no se comprimen hasta ser ilegibles. - **Targets táctiles de 44px** en cualquier viewport con entrada táctil. - **La tabla se desplaza** horizontalmente dentro de su contenedor; el layout de página nunca lo hace. ## Comportamiento por componente - **Sidebar** → se colapsa a iconos en `md`, se oculta tras un botón en `sm` (reemplazado por bottom nav). - **Cards** → de rejilla multi-columna a una sola columna en `sm`. - **Modales** → centrados en escritorio, hoja inferior (bottom sheet) en móvil. - **Tabs** → scroll horizontal cuando no caben, sin truncar etiquetas. El propio sitio es la demo: reduce el ancho de la ventana para ver cómo se reorganiza el layout. ---------------------------------------------------------------------- ## Formularios _Principios para capturar datos legales con el mínimo de fricción y el máximo de confianza._ Los formularios son el corazón de Legalty: constituir, firmar, declarar. Cada campo pide un esfuerzo al usuario; nuestro trabajo es que ese esfuerzo se sienta seguro y breve. ## Principios - **Una etiqueta clara y visible** por campo. Nunca dependas solo del placeholder. - **Agrupa por significado**, no por tipo de dato. El orden sigue el modelo mental del usuario. - **Valida en el momento correcto**: al salir del campo, no en cada tecla. El error explica cómo corregir. - **Pide lo mínimo.** Cada campo opcional que quitas mejora la conversión. ## Anatomía de un campo > [demo interactiva: Field] ## Reglas: hacer vs. evitar En trámites largos, divide en pasos con progreso visible. El usuario debe saber cuánto falta. ---------------------------------------------------------------------- ## UX y accesibilidad _Reglas de interacción y checklist WCAG 2.1 AA que todo producto de Legalty debe cumplir._ La accesibilidad no es una capa final: es una restricción de diseño desde el primer trazo. Estas reglas son obligatorias, no recomendaciones. ## Reglas de interacción ## Checklist de accesibilidad · WCAG 2.1 AA - **Contraste** de texto ≥ 4.5:1 (≥ 3:1 para texto grande y elementos de UI). - **Navegación por teclado** completa: todo lo que se hace con ratón se hace con teclado. - **Foco visible** y orden de tabulación lógico. - **Targets táctiles** de al menos 44×44px. - **Etiquetas** asociadas a cada control de formulario (`label` / `aria-label`). - **Errores** anunciados a lectores de pantalla y descritos en texto. - **Movimiento** respeta `prefers-reduced-motion`. - **No solo color**: el estado se comunica también con icono o texto. HeroUI se apoya en React Aria, que aporta gran parte de este comportamiento accesible de base. Nuestra responsabilidad es no romperlo con overrides y verificar el contraste de la marca. ---------------------------------------------------------------------- ## Tokens y distribución _La fuente única de verdad y cómo consumirla en cualquier proyecto de Legalty._ Todo el lenguaje visual vive en un solo archivo: `theme/tokens.ts`. De ahí se generan los artefactos que consumen la app, otros proyectos y los LLMs. Nunca se editan a mano los archivos generados. ## Artefactos generados | Archivo | Para qué | Consumidor | |---|---|---| | [`/tokens.json`](/tokens.json) | Tokens en crudo (color, radios, tipografía, sombras) | Herramientas, LLMs, scripts | | [`/tokens.css`](/tokens.css) | Variables CSS `--lg-*` (claro y oscuro) | Cualquier proyecto web | | `theme/generated-tokens.css` | Variables + override del tema HeroUI | Esta guía en runtime | | [`/llms.txt`](/llms.txt) · [`/llms-full.txt`](/llms-full.txt) | Documentación legible por máquinas | Agentes / LLMs | ## Cómo usarlo hoy (Fase 1) En cualquier proyecto de Legalty, importa las variables y úsalas directamente: ```css @import "https:///tokens.css"; .boton-primario { background: var(--lg-accent-solid); border-radius: var(--lg-radius-md); font-family: var(--lg-font-sans); } ``` ## Hacia dónde va (Fase 2) Los tokens y el tema HeroUI se extraerán a paquetes versionados —`@legalty/tokens` y `@legalty/theme`— que las apps instalarán vía npm. La estructura actual (todo derivado de `theme/tokens.ts`) hace esa extracción mecánica, sin reescribir nada. ## Grupos de tokens - **Color** — neutros, acento de marca y semánticos, en claro y oscuro. - **Radios** — escala rounded expresivo (`--lg-radius-xs` … `--lg-radius-pill`). - **Espaciado** — base 4px (`--lg-sp-1` … `--lg-sp-16`). - **Tipografía** — familias display / sans / mono y escala. - **Sombras** — `--lg-shadow-sm|md|lg`. ¿Necesitas cambiar el acento de marca o los radios en todo el sistema? Edita theme/tokens.ts y ejecuta pnpm gen. Todo lo demás se regenera solo. ---------------------------------------------------------------------- ## Guía para LLMs y agentes _Cómo esta guía se vuelve fuente de verdad no solo para humanos, sino para modelos y agentes._ Este design system está pensado para que un **LLM lo entienda con solo recibir la URL**, igual de bien que un humano leyendo esta página. Ese es un requisito de primera clase, no un extra. ## El patrón llms.txt Al construir el sitio, un script recorre el contenido de los capítulos y genera dos archivos en la raíz: - **[`/llms.txt`](/llms.txt)** — índice conciso: qué es el sistema, sus fundamentos y enlaces a cada capítulo. Es lo primero que se le pasa a un modelo. - **[`/llms-full.txt`](/llms-full.txt)** — todo el contenido editorial en texto plano, listo para pegar en el contexto de un LLM. Como se generan desde los mismos `.mdx` que lees aquí, **humano y máquina nunca divergen**. ## AGENTS.md En la raíz del repositorio, `AGENTS.md` da instrucciones directas a agentes de código (Claude Code, Cursor, Windsurf): qué fuente usar, cómo elegir un componente, qué tokens aplicar y qué evitar. Cualquier proyecto de Legalty puede copiarlo para alinear a sus asistentes. ## Cómo pedirle a un LLM que use el sistema > "Usa el design system de Legalty descrito en `https:///llms-full.txt`. Respeta los > tokens `--lg-*`, los radios rounded y la partición tipográfica Poppins/Inter/Spline Sans Mono. > Construye los componentes con HeroUI." ## Estructura recomendada de un DESIGN.md por proyecto Cada app puede tener un `DESIGN.md` breve que enlace a esta guía y documente solo sus particularidades: 1. **Fuente de verdad** — enlace a esta guía y a `/tokens.json`. 2. **Decisiones locales** — lo que difiere o extiende, con su porqué. 3. **Componentes propios** — los que no están en HeroUI y son específicos del producto. Regla de oro: una sola fuente (theme/tokens.ts + los .mdx) y todo lo demás —CSS, JSON, llms.txt— se genera. Editar el origen, nunca el derivado. ----------------------------------------------------------------------