Skip to content
Design System · Documentación maestra

REstimator Design System

El sistema de diseño de Presupuestador RE, una herramienta B2B de presupuestación para talleres de herrería y metalurgia. Dark industrial, denso, desktop‑first y con un único acento ámbar racionado. Esta documentación reúne sus foundations, sus componentes, sus patrones de producto y su sistema responsive.

Tokens
147
color · tipo · espacio · elevación
Componentes
33
exports en el namespace
Pantallas
5 desktop 3 mobile
del UI kit y de la spec Mobile v1
Tema
Dark
el único tema del sistema
00

Visión general

Presupuestador RE ayuda a presupuestadores y dueños de taller a producir cotizaciones más rápidas y consistentes con criterios estandarizados: familias → subcategorías → dimensiones, rangos de precio calibrados, jornales y referencias de material. Es una herramienta de trabajo diario.

Propósito del sistema

Codificar ese producto como foundations, componentes y recreaciones de pantalla reutilizables, para que cualquier superficie nueva se construya on‑brand en minutos. El prototipo mid‑fi V1 congelado es la referencia: la arquitectura de información, los flujos y la estructura de pantallas ya están decididos. El sistema eleva únicamente la calidad visual; no rediseña flujos ni cambia la IA.

Principios

Velocidad
Densidad operativa. El estimador carga medidas y lee el recomendado en bucle; nada se interpone.
Claridad
Estructura dibujada con hairlines de 1px, no con fills pesados. Jerarquía tipográfica antes que color.
Confianza
Cada número explica de dónde sale. Los avisos son warn‑only y nunca bloquean el cálculo.
Eficiencia
Sin gradientes, glass, blur decorativo ni coreografía de entrada. Motion mínimo y funcional.

Arquitectura general

CapaUbicaciónQué contiene
Entrada globalstyles.cssManifiesto de @import únicamente. Los consumidores enlazan este archivo.
Tokenstokens/fonts · colors · typography · spacing · elevation · theme-light · base
Componentescomponents/React, 6 categorías. Namespace window.PresupuestadorREDesignSystem_84f335
Foundation cardsguidelines/16 especímenes de color, tipo, espacio, marca y validación de tema.
UI kitui_kits/presupuestador/5 pantallas hi‑fi interactivas del producto congelado, dark. Token‑driven vía kit.css + shell.js
Spec mobileMobile v1 - Spec de implementación.html3 pantallas mobile finales con medidas, spacing, sticky y componentes.
Agent skillSKILL.mdHace la carpeta usable como Agent Skill en Claude Code.

Estado y versionado

Congelado

  • IA, flujos y estructura de pantallas (V1).
  • Pairing tipográfico (2026‑06‑16) — no re‑explorar.
  • Las 5 reglas de producto (abajo).

Estable y en uso

  • 147 tokens · tema dark.
  • 33 componentes exportados.
  • 5 pantallas desktop del kit.

Especificado, sin construir

  • 6 componentes mobile (Mobile v1).
  • Capa tablet (documentada, sin artefacto).
  • templates/ — 0 templates.

Reglas de producto no negociables

Vienen de S12 y se respetan en toda superficie nueva. Son reglas del dominio del negocio, no criterios de diseño.

1
FreezeCada presupuesto congela la versión de parámetros con la que fue calculado; los publicados son inmutables.
2
QA‑gateUn cambio de parámetro o producto llega a producción sólo a través de un QA Run.
3
MonedaEl producto opera en UYU; el tipo de cambio sólo convierte costos internos.
4
EditorS5A (ProductEditor) es el único editor de producto.
5
PrivacidadEl resumen al cliente nunca serializa márgenes, jornales ni calibración.
01

Fundamentos

147 tokens

Todos los valores de esta sección son los tokens reales del sistema, leídos de tokens/. Los componentes leen siempre var(--re-*), así que ninguno fija un valor a mano.

Color · rampa grafito (base dark)

--re-canvas
#0d0e11
Fondo de app — casi negro
--re-surface
#16181d
Cards, paneles
--re-surface-2
#1d2026
Inset / hover, inputs
--re-surface-3
#262a31
Inset profundo, tracks
--re-ink
#f2f3f4
Texto primario
--re-ink-2
#c2c6cc
Texto secundario
--re-ink-3
#9197a0
Terciario / hints
--re-ink-4
#7f858e
Labels tenues, placeholders — elevado para AA
--re-line
#262a31
Hairlines, bordes de card
--re-line-2
#313641
Bordes de input
--re-line-strong
#434954
Bordes enfatizados, dashed

Charcoal — paneles más profundos

--re-charcoal
#0a0b0e
Bloque de recomendado, total del documento
--re-charcoal-2
#14161b
Sub‑bloque sobre charcoal
--re-charcoal-line
#2b2f37
Hairline sobre charcoal

Ámbar — el único color de marca

--re-amber
#e0911e
CTA primario, rail activo
--re-amber-strong
#f0a634
Hover / press (aclara en dark)
--re-amber-bright
#f5b342
Valor recomendado, cifras headline
--re-amber-soft
rgba(224,145,30,.13)
Fondo tintado
--re-amber-line
rgba(224,145,30,.34)
Borde tintado
--re-amber-ink
#f0b45e
Texto ámbar sobre tinte

Regla de racionamiento del ámbar. El ámbar aparece en exactamente cuatro clases de momento: el precio recomendado (cifra ámbar sobre el charcoal más profundo), el rail de navegación activo, el CTA primario / de envío y el logo. Todo lo demás se resuelve con grafito y hairlines. Ver NR‑08 por la extensión de esta regla a mobile.

Semánticos (ajustados para dark)

--re-ok
#52b06e
+ ok-bright #6fd08a, soft, line
--re-warn
#d99a3a
+ warn-ink #e6c188, soft, line
--re-crit
#d86a52
+ soft, line
--re-info
#5b9be0
+ soft, line

Ciclo de vida del presupuesto (Historial)

Borrador Enviado Aprobado Rechazado Cancelado punto de color sobre pill neutra · --re-st-draft/sent/appr/rej/cancel

Aliases semánticos — preferilos en componentes y pantallas

AliasResuelve aAliasResuelve a
--re-bg--re-canvas--re-border--re-line
--re-text--re-ink--re-border-field--re-line-2
--re-text-muted--re-ink-2--re-border-strong--re-line-strong
--re-text-subtle--re-ink-3--re-focus--re-amber
--re-text-faint--re-ink-4--re-accent / --re-primary--re-amber
--re-accent-hover--re-amber-strong--re-primary-hover--re-amber-strong

Tema light — planificado

Planificado El sistema publicado tiene un solo tema: dark. Existe un remap de color explorado —superficies blanco cálido, tinta grafito, bordes gris cálido— que dejaría intactos espaciado, tipografía, radios, jerarquía e interacción, con el ámbar como único acento. Todavía no forma parte del sistema y no se documenta como disponible.

Tipografía · CONGELADA

El pairing es final y no se re‑explora. Se evaluó una alternativa con Plus Jakarta Sans contra las pantallas reales (Typography Comparison.html) y fue rechazada: Hanken ganó en densidad, legibilidad a tamaño chico y tono industrial.

Primary UI — Hanken Grotesk

Presupuesto recomendado
400 · 500 · 600 · 700 — grotesca humanista, industrial‑neutra, no “startup redondeada”. Se usa para todo: headings, body, controles, tablas.
--re-font-sans

Technical — JetBrains Mono

GV-A-00148
PRE-2026-0148
400 · 500 · 600 — códigos, IDs, fechas y cifras tabulares. Códigos de producto ESC-RECT.
--re-font-mono

Escala real

TokenValorUsoMuestra
--re-text-display40pxLa cifra hero de “recomendado”$135.599
--re-text-2xl23pxH1 de páginaCalculadora
--re-text-xl21pxH1 compactoHistorial
--re-text-lg17pxH2 de secciónDimensiones
--re-text-md14.5pxTítulos de cardEncabezado del presupuesto
--re-text-base14pxBody / controlesAncho de paso
--re-text-sm13pxBody secundario, celdasPedro Núñez · Barandas
--re-text-xs12pxHints, captionsdecimales con coma
--re-text-2xs11pxEyebrows, labels uppercaseFABRICACIÓN ESTIMADA

Pesos · line-heights · tracking · helpers

Regular
400
Medium
500
Semibold
600
Bold
700
tight
1.15
snug
1.35
normal
1.45
relaxed
1.6
ls-body
-0.005em
ls-heading
-0.02em
ls-tight
-0.01em
ls-eyebrow
0.06em
ls-caps
0.05em
ClaseQué hace
.re-rootTipo base del documento: family, 14px, lh 1.45, tracking, color, antialiasing, font-feature-settings:"tnum" 1,"ss01" 1. Opt‑in en <body> o wrapper.
.re-numCifras tabulares — dinero, medidas, códigos, fechas.
.re-monoCambia a JetBrains Mono.
.re-eyebrowEyebrow / kicker: 11px, 600, +0.06em, uppercase, color faint.

Números y unidades — formato uruguayo, siempre tabular

TipoFormatoEjemplo
Dineropunto de miles, sin decimales$168.000
Medidascoma decimal + unidad0,80 m · 2,90 m
Jornalescoma decimal, un decimal7,0
Porcentajessigno + valor+ 8% · IVA 22%
Códigosmono, mayúsculasGV-A-00148 · ESC-RECT

Spacing · grilla de 4px

--re-s14px
--re-s28px
--re-s312px
--re-s416px
--re-s520px
--re-s624px
--re-s732px
--re-s840px
--re-s948px
--re-s1064px

Sizing · constantes de layout (del shell V1 congelado)

Sidebar
248px
Topbar
60px
--re-sidebar-w · --re-topbar-h
Ancho de documento
1080px
--re-content-max — documento / lectura
Control estándar
40px
Control compacto
32px
--re-control-h · --re-control-h-sm · ver NR‑04

Radius

r-sm · 7px
r · 9px
r-lg · 13px
r-pill · 30px
r-full · 999px
Consistente y modesto — nada completamente redondeado excepto avatares y puntos.

Borders

La estructura se dibuja con líneas de 1px, no con fills pesados. Hairlines en todas partes: --re-line para divisores y bordes de card, --re-line-2 en inputs, --re-line-strong para énfasis y dashed.

Elevation

En dark la profundidad es una superficie más clara + un borde de 1px; las sombras son profundas y calladas por debajo. Sin glow, sin sombra de color.

--re-shadow-sm
Lift hairline — cards por defecto, tiles
0 1px 2px rgba(0,0,0,.40)
--re-shadow
Card en reposo
0 1px 3px / 0 1px 2px
--re-shadow-panel
Panel flotante — result sticky, preview, menús
0 8px 24px / 0 2px 6px
--re-shadow-paper
El “papel” del documento al cliente
0 16px 44px / 0 3px 10px
--re-shadow-bar
Save bar fija — la sombra apunta hacia arriba
0 -2px 16px rgba(0,0,0,.50)
--re-ring / --re-ring-amber
Focus — 3px ámbar sobre dark
.26 / .32 alpha

Iconography

Reglas

  • SVG de línea inline únicamente. viewBox 24×24, stroke="currentColor", stroke-width ~1.7–1.8 (1.7 nav/UI, 2 chevrons/flechas), caps y joins redondos.
  • Heredan el color del texto y se sitúan a 15–18px.
  • Sin icon font, sin sprite, sin PNG, sin emoji, sin pictogramas unicode. Un “✓” en toasts transitorios es la única excepción.
  • Para superficies nuevas, copiá las formas del kit antes de recurrir a una librería. No hay set de CDN incluido: el set es chico y mantenido a mano.

Glifos recurrentes

calculadora · reloj · cubo · sliders · shield‑check · warning · estrella (recomendado) · lápiz · duplicar · documento · burbuja · lupa

Familia de taxonomía de producto — TaxonomyIcon

10 glifos de categoría de fabricación dibujados en el mismo lenguaje (24×24, stroke 1.7, sin fills, sin librería externa): escaleras · barandas · rejas · cerramientos · puertas · portones · mobiliario · estructuras · techos · parrilleros. Se usan en rails de rubro, dropdowns, cards de catálogo y chips para que el producto lea como herramienta especializada de metalurgia y no como app de negocio genérica. API: <TaxonomyIcon name="rejas" size={18} strokeWidth={1.7}/>; iterá TAXONOMY_ICONS para menús; color vía currentColor (ámbar en activo).

Motion

Mínimo y funcional. .12–.15s ease en hover / border / background; los toggles deslizan su knob; el único movimiento ambiente es el pulso lento del punto “En vivo” en paneles live. Sin bounces, sin parallax, sin coreografía de entrada, sin efectos de escala.

Breakpoints

CapaAncho de referenciaRol
Desktop≥ 1200 · diseño 1440Capa primaria. Sidebar fijo + panel de resultado lateral.
Tablet834Capa intermedia con identidad propia: tabs superiores + bottom sheet.
Mobile390 · fluido 360–430Diseñada, no adaptada. Bottom tab bar + resumen pinneado.
NR‑05

Los breakpoints no están tokenizados: viven en prosa y en las specs, no en tokens/. Cualquier implementación los está hardcodeando.

Accessibility foundations

DecisiónValorPor qué
Contraste de labels tenues--re-ink-4 #7f858eElevado desde #686d76 (≈3.4:1) para superar WCAG AA 4.5:1 sobre superficies.
Focus visible--re-ring 3px ámbarAnillo de 3px + borde ámbar en todo control enfocable. Nunca se remueve el outline sin reemplazo.
Touch targets≥ 44pxMínimo táctil en mobile/tablet; los controles de 42px visuales llevan área extendida.
Iconos sin textotitle obligatorioIconButton exige title, usado como tooltip y aria-label.
Cifrastabular-numsDinero y medidas nunca “bailan” entre estados; comparación vertical fiable.
Estado nunca sólo por colorpunto + etiquetaEl ciclo de vida usa punto de color y etiqueta en español.
02

Componentes

33 exports · 6 categorías

Los 33 componentes exportados por window.PresupuestadorREDesignSystem_84f335. Cada directorio tiene <Name>.jsx + .d.ts + .prompt.md y un specimen *.card.html. Los especímenes de abajo son réplicas token‑driven de los componentes reales (mismos tokens, misma anatomía) para que este documento no dependa de un runtime React.

Cómo leer los subcomponentes. Varios exports viven en un archivo padre: Field/Input/Select/Textareaforms/Input.jsx · Card/CardHead/CardBody/SectionHeadlayout/Card.jsx · AppShell/LogoMark/Sidebar/NavGroup/NavItem/Topbar/Breadcrumbs/UserChipnavigation/AppShell.jsx · Table/TableToolbar/RowActions/Paginationdata/Table.jsx · Badge/StatusBadge y Alert/AlertGroup ← sus archivos de feedback/.

Button

Variantessecondary · primary · accent · ghost
Tamaños · sm 32 · md 40 · lg 46
Estados

Propósito

Control de acción principal. Exactamente un primary (o accent) por vista; todo lo demás es secondary o ghost.

API

variant
secondary | primary | accent | ghost
size
sm | md | lg
block
boolean
iconLeft / iconRight
ReactNode (16px)

Semántica de variantes

  • secondary — outline neutro, el caballo de batalla.
  • primary — fill charcoal sólido, la acción principal única de la pantalla.
  • accent — fill ámbar de marca, reservado a acciones hero de envío/compartir.
  • ghost — sin borde, acciones inline de baja énfasis.

Tokens

--re-control-h · --re-r-sm · --re-line-2 · --re-charcoal · --re-amber · --re-amber-strong · --re-ring

IconButton · Toggle · SegmentedControl

IconButton
variant
default 34 | bare 30
danger
boolean
title
obligatorio

Icon‑only para topbar y acciones de fila. title se usa como tooltip y aria-label.

Toggle
off · md 38
on · track charcoal
on · accent ámbar
sm 32 · filas de tabla
pressed / defaultPressed
boolean
size
md | sm
accent
boolean
disabled
boolean
SegmentedControl
EstimaciónFormal
Tabla Cards
options
2–3 items
value
string
onChange
(value) => void

Más de 3 opciones → usar Select.

Field · Input · Select · Textarea

Anatomía y estadoslabel + hint + control + note
Ancho de paso m
0,62m
Valor del jornal
$14.360
Referencia y control — no define el precio.
Familia
Escaleras
Buscar
Buscar por N°, cliente, obra…
Notas opcional
Agregá notas para el cliente…
Bloqueado por freeze
v37377

API

ExportProps relevantes
Fieldlabel · optional · note · htmlFor
Inputprefix · suffix · leadIcon · num
Selectchildren (<option>) · chevron propio
Textareanativo · resize vertical

Comportamiento

  • Field envuelve: label + hint inline (“opcional”) + control + note con icono.
  • num activa cifras tabulares y alineación para dinero y medidas.
  • prefix/suffix para $ y unidades (m, %).
  • Focus: borde ámbar + --re-ring. Disabled: opacidad .45.
NR‑06

No existe prop de error/invalid en Field ni Input. La validación del producto es warn‑only vía Alert, así que el error inline a nivel campo no está definido en el sistema.

Badge · StatusBadge

Tonos y formas
neutralokwarncritinfo
con dotESC-RECTGV-A-00148
StatusBadge — ciclo de vida Borrador Enviado Aprobado Rechazado Cancelado

API

Badge · tone
neutral | ok | warn | crit | info
Badge · dot
boolean
Badge · square
chip mono de código
Badge · icon
ReactNode
StatusBadge · status
draft | sent | appr | rej | cancel
StatusBadge · label
override del español

Uso

  • StatusBadge mapea automáticamente color de punto + etiqueta en español. No armes el pill a mano.
  • square para códigos (GV-A-00148, ESC-RECT): mono, radio 5px.
  • El estado nunca se comunica sólo por color: siempre punto + texto.

Alert · AlertGroup

Tonoswarn es el default — el motor nunca bloquea
Inclinación fuera de rango cómodoRevisá altura y avance. Es un aviso: no bloquea el cálculo.
Inclinación recomendada≈ 14 escalones · contrahuella 17,4 cm · 34°
Los cambios aplican sólo a nuevos cálculos.
Falta la versión de parámetros para congelar el presupuesto.
No se incluyen en la salida comercial al cliente.

API

Alert · tone
warn | ok | info | crit | neutral
Alert · icon
ReactNode · null oculta
Alert · title
lead line en negrita
AlertGroup · title
“Alertas y recordatorios”
AlertGroup · items
ReactNode[]

Comportamiento

  • El motor es warn‑only y nunca bloquea; por eso warn es el tono por defecto y el icono default es el triángulo.
  • AlertGroup es el panel titulado de recordatorios con bullets.
  • Microcopy: icono info/lock + una sola oración.

Tokens

--re-warn-soft/-line · --re-ok-soft/-line · --re-info-soft/-line · --re-crit-soft/-line · --re-r

Card · CardHead · CardBody · SectionHead

Encabezado del presupuestoopcional

Esta card es el especímen: CardHead (tile de icono + título + hint + acciones) sobre un divisor, luego CardBody.

1Producto
2Dimensionesdecimales con coma
3Opciones constructivas
SectionHead — pasos numerados dentro de calculadora / editor

API

ExportProps
Cardpad (20/24 interno) · flush (clip para tablas)
CardHeadicon · title · hint · actions
CardBodytight (menos padding para tablas/listas)
SectionHeadindex · title · hint · tools

Anatomía

Superficie grafito, borde --re-line de 1px, --re-shadow-sm, radio --re-r-lg 13px. flush cuando la card envuelve una tabla a sangre.

Hacer / No hacer

  • Do — usar SectionHead numerado para pasos de un flujo largo (calculadora, editor).
  • Don't — anidar cards dentro de cards; para agrupar dentro de una card usá SectionHead + divisores.

StatTile

Presupuestos del mes
24
+3 vs. mes anterior
Aprobados
9
37,5% de conversión
Monto cotizado
$2.480.000
acumulado del mes
Motor
v1.5
QA al día

API

label
uppercase
value
tabular
sub
línea de apoyo
accent
variante charcoal
dot
punto de estado live
amberValue
cifra en ámbar

Uso

  • Fila de KPI del dashboard y grillas de estado.
  • accent es para un solo tile destacado por fila: es el ancla charcoal.
  • amberValue con moderación: sólo cifras headline (respeta el racionamiento del ámbar).
  • dot se combina con accent para paneles “En vivo”.

TechnicalPreviewCard · TechnicalRenderers

El único dibujo sancionado del sistema: planos y elevaciones esquemáticos generados paramétricamente desde las dimensiones del propio presupuesto. Son diagramas medidos, con líneas de estructura grafito de 1px, overlays de dimensión token‑driven y ámbar reservado al indicio de entrada/baranda.

Registro

Basado en registro: family/variant seleccionan un renderer. Escaleras trae cuatro: recta (elevación lateral), L, U y caracol (vistas en planta). Las familias desconocidas caen a un placeholder “sin vista técnica”.

Uso permitido

  • Previews de calculadora y editor, filas de historial, documento al cliente.
  • Nunca dibujar arte de producto decorativo a mano.

API

family
Escaleras | otras → placeholder
variant
recta | L | U | caracol
dims
ancho · altura · avance · escalones · huella · contrahuella · diametro
config
string[] de chips
size
compact | standard | large
title / code
override · código mono
showDims
default true
live
indicador “En vivo”

Densidades

  • compact — head + dibujo + footer.
  • standard — + 4 dimensiones + chips.
  • large — stage más grande + 6 dimensiones.

Extender

TechnicalRenderers.register(family, variant, def) · setFamilyLabel · has · variants · families, todos encadenables. escalones se clampea a 4–16; un chip que matchee /baranda|pasamano/ dibuja la baranda en recta.

03

Navegación y App Shell

El shell desktop es la capa primaria y está congelado desde V1: sidebar sticky de 248px + topbar sticky de 60px + main con scroll. Mobile no comprime ese shell: cambia de patrón.

Desktop — AppShell

Sidebar · LogoMark · NavGroup · NavItem248px
RE
Presupuestador
RE · v1.0
Operación
Configuración

Topbar · Breadcrumbs · UserChip

Operación/Calculadora(sin guardar)
RERamiroPresupuestador

API

ExportProps
AppShellsidebar · topbar · children
LogoMarkmark ("RE") · name · tagline
Sidebarlogo · footer · children
NavGrouplabel · first
NavItemicon · label · active · as
Topbarbreadcrumbs · actions
Breadcrumbsitems: {label, href}[]
UserChipname · role · initials
NR‑02

LogoMark tiene tagline por defecto 'RE · v1.0', pero las pantallas del kit y los mockups muestran “REstimator · motor v1.5”. Hay que unificar el default o pasarlo siempre explícito.

Mobile — navegación inferior y header compacto

Mobile es diseñada, no adaptada: el sidebar no se “oculta”, se reemplaza por una bottom tab bar de 5 familias. Los breadcrumbs desaparecen (los sustituye título + back) y el branding aparece una sola vez por header.

ElementoMedidaComportamientoEstado en el DS
BottomTabBarh 64 + safe-areafixed bottom. 5 tabs: Inicio · Calc · Historial · Catálogos · Parám. Iconos 21, label 10. Activo --re-amber-ink.Nuevo
MobileHeaderh ~62sticky top. Back + título (Calculadora) o marca + título (Inicio / Historial). Sin breadcrumbs, sin sub‑copy.Nuevo
BottomActionBarh 62 · bottom 64fixed sobre la tab bar. Sólo Calculadora: Guardar (primary) · Estimación · Presupuesto.Nuevo
AppShell (modo mobile)Mismo árbol de rutas, tres modos de navegación (sidebar / tabs / bottom bar).Extendido

Comportamiento sticky / fijo

Capa (de abajo hacia arriba)AltoPosiciónz-indexDónde
Bottom tab bar64fixed bottom 040Mobile
Action bar62fixed bottom 6435Mobile · Calculadora
Header compacto~62sticky top 030Mobile
Resumen recomendadoauto ~108sticky bajo header28Mobile · Calculadora
Bottom sheet (desglose)máx 78%overlay + scrim60Mobile · Tablet
Sidebar / Topbar248 / 60stickyDesktop
Panel de resultado380 colsticky lateralDesktop · Calculadora
Save barautofixed bottom · shadow-barDesktop · Editor / Parámetros
04

Formularios y entrada de datos

Los formularios son el corazón del producto: la calculadora es un formulario largo con resultado en vivo. La entrada de datos privilegia velocidad de tipeo y lectura tabular por encima de adornos.

Inventario de controles

ControlExportVariantes / tamañosEstados definidos
Text inputInputprefix · suffix · leadIcon · numdefault · focus · disabled · placeholder
SelectSelectnative + chevron propiodefault · focus · disabled
TextareaTextarearesize verticaldefault · focus · disabled
SearchInput + leadIconpatrón, no componente apartedefault · focus · con valor
ToggleTogglemd 38 · sm 32 · accenton · off · disabled
SegmentedSegmentedControl2–3 opciones, con/sin iconoselected · unselected
Wrapper de campoFieldlabel · optional · note
Checkbox · RadioNo existen como componentes. El producto resuelve la elección con Select, SegmentedControl y Toggle. Ver NR‑13.

Estados de control

Default
2,43m
Focus — borde ámbar + ring 3px
2,43m
Disabled — opacidad .45
2,43m
Placeholder — ink-4
0,00m
Con prefijo monetario
$14.360
Select
Montevideo

Hover · focus · pressed · disabled — reglas globales

EstadoTratamiento
Hoverfill a --re-surface-2 + borde a --re-line-strong (o amber‑darken en CTAs ámbar)
Focusring ámbar de 3px (--re-ring) + borde ámbar
Pressed / activotoggles y páginas activas voltean a ámbar
Disabledopacidad .45, sin eventos
Transición.12–.15s ease en background / border. Sin shrink ni scale.

Validación · errores · éxito

El motor de cálculo es warn‑only y nunca bloquea. Esa decisión de producto define toda la validación: los avisos se agrupan como Alert junto al resultado, no como errores de campo que impidan avanzar.

Aviso — no bloquea
Avance fuera del rango cómodoPodés continuar: el cálculo se realiza igual.
Éxito / confirmación calma
Guardado en historial · GV-A-00159
Nota de campo — icono + una oración
No se incluyen en la salida comercial al cliente.

Patrón de data entry — formularios largos

  • Pasos numerados con SectionHead: Producto → Dimensiones → Opciones constructivas → Terminación / colocación / zona.
  • Una card por paso; grilla de 2–3 columnas en desktop, 1–2 en tablet, 1 en mobile.
  • Unidades siempre visibles como suffix, nunca sólo en el label.
  • Coma decimal en medidas — el hint del paso lo recuerda (“decimales con coma”).
  • Recálculo en vivo: no hay botón “calcular”; el panel de resultado muestra el punto “En vivo”.
  • Campos opcionales marcados con hint inline optional, no con asterisco en los obligatorios.

Save bar

Editor y Parámetros usan una barra fija inferior con recuento de cambios (“1 cambio de calibración local”) + Restaurar por defecto + Guardar cambios. Sombra hacia arriba (--re-shadow-bar).

05

Visualización de datos

Historial es la superficie de datos principal: tabla densa, filtros que funcionan, estado como punto de color sobre pill neutra y acciones de fila reveladas en hover.

Table · TableToolbar · RowActions · Pagination

Presupuestos guardados58 resultados
CódigoCliente / obraFamiliaEstadoMonto
GV-A-00159
Baranda de balcón
Pedro Núñez · 15/06/2026
Barandas Borrador $96.000
EST-2026-014
Baranda de balcón — inicial
Pedro Núñez · 13/06/2026
Barandas Enviado $96.000
EST-2026-013
Escalera recta — 1er contacto
Valentina Cruz · 12/06/2026
Escaleras Aprobado $175.000
Mostrando 1–12 de 58 1235

API

ExportProps
Tablechildren (thead/tbody propios)
TableToolbartitle · count · actions
RowActionschildren (IconButtons)
Paginationshowing · pages · current · onPage

Helpers

  • Clases de header: is-right · is-center · is-sortable.
  • Clases de celda: re-cell-strong (primaria) · re-cell-sub (línea secundaria).
  • Envolver en <Card flush>: la card recorta el desborde de la tabla.
  • RowActions se revela en hover de fila.

Montos y cifras

  • Columna de monto alineada a la derecha, tabular-nums, peso 600.
  • Código en mono a 11,5px, color --re-ink-3.
  • Fila de dos líneas: primaria (re-cell-strong) + secundaria cliente · fecha.

Empty state — el patrón real del producto

Sólo se listan presupuestos guardados. No hay borrado físico: el estado se cambia de forma suave.

Los estados vacíos explican la regla, no sólo dicen “sin resultados”.

NR‑07

No hay componente de loading / skeleton en el sistema, y los empty states existen sólo como copy dentro de pantallas, no como componente reutilizable.

Cards, tiles y badges como display

Ya documentados en §02: Card family para contenedores, StatTile para KPI y grillas de estado, Badge/StatusBadge para etiquetas, códigos y ciclo de vida, TechnicalPreviewCard para el dibujo esquemático del producto.

06

Patrones de producto

Patrones propios de REstimator. No son componentes: son composiciones con significado de negocio, y varias están gobernadas por las reglas no negociables del §00.

Valor recomendado y rangos

Recomendado
$135.599
valor de fabricación · + IVA
Mínimo
$127.463
Máximo
$143.735

Reglas del patrón

  • El recomendado es la única cifra ámbar de la pantalla y vive sobre el charcoal más profundo.
  • Siempre se muestra con su rango (mín / máx) y un pin en el track: el número nunca aparece solo.
  • El precio sale de Fab_min/Fab_max calibrados, no de jornales × valor.
  • Siempre etiquetado “valor de fabricación · + IVA”: nunca se insinúa que es precio final.
  • El panel lleva el punto “En vivo”: recálculo continuo, sin botón calcular.

Jornales — control, no precio

5,3
Mín
6,5
Rec.
7,7
Máx
Verificación de carga de trabajo — no define el precio. Copy literal del producto.

Pasos del resultado

El panel de resultado siempre presenta los mismos pasos numerados, en el mismo orden, en los tres breakpoints:

PasoBloqueQué comunica
1Fabricación estimadaRango mín–máx + track con pin del recomendado.
RecomendadoBloque charcoal con la cifra ámbar. El ancla visual.
2Jornales · mano de obraMín / Rec. / Máx como control de carga.
3Colocación (sugerida)Rango + base de cálculo (~10% de fabricación) + zona.
4SubtotalFabricación + colocación → subtotal, con “+ IVA” explícito.
5OverrideAjuste manual del precio final, siempre visible como campo aparte.
6AlertasAlertGroup warn‑only al pie del panel.

Creación y edición de presupuestos

Flujo de la calculadora

  • 1 Producto — familia → subcategoría (taxonomía de 10 rubros).
  • 2 Dimensiones — medidas en metros, coma decimal.
  • 3 Opciones constructivas — estructura, contrahuella, antideslizante, baranda.
  • 4 Terminación · colocación · zona — DTM, tipo de colocación, zona geográfica.
  • Encabezado del presupuesto opcional y compactable: no roba protagonismo al formulario.

Clasificación

Familias → subcategorías es la columna vertebral. TaxonomyIcon acompaña cada rubro en rails, dropdowns, cards de catálogo y chips.

Ciclo de vida y acciones

  • Estados: Borrador → Enviado → Aprobado / Rechazado / Cancelado.
  • Sin borrado físico: el cambio de estado es suave y reversible.
  • Duplicar es de primera clase: retomar una cotización previa es el camino más común.
  • Freeze: al publicarse, el presupuesto congela su versión de parámetros y queda inmutable.
  • Override: el ajuste manual queda registrado, no reemplaza silenciosamente al recomendado.

Filtros y búsqueda

  • Búsqueda por N°, cliente u obra en un único input con leadIcon.
  • Filtros por tipo/estado en una línea; en mobile con scroll horizontal y activo ámbar sólido.
  • Contador de resultados siempre visible (“58 resultados”).

El documento al cliente — la única superficie clara

El resumen al cliente se renderiza como una hoja de papel blanca real (es el artefacto imprimible / WhatsApp / PDF) apoyada sobre el banco de trabajo oscuro; su fila de total es charcoal con el total en ámbar. Todo lo demás del producto es oscuro. Modos estimación y formal vía SegmentedControl. Voz en tercera persona formal (“Le compartimos una estimación…”), nunca voseo. Nunca serializa rangos, jornales, márgenes ni calibración (regla 5).

Voz y microcopy

ReglaAplicación
IdiomaEspañol de Uruguay, voseo rioplatense en imperativo: “Agregá notas…”, “buscá, filtrá y retomá”. Nunca “añade/busca”.
TonoLlano, operativo, confiable. Declarativas cortas. Explica por qué existe un número sin titubear.
CasingSentence case en todo lo legible. UPPERCASE + tracking sólo en eyebrows chicos.
PersonaLa app te habla a vos (el presupuestador). El documento al cliente es formal en tercera persona.
EmojiNunca. Un “✓” en confirmaciones transitorias es el único carácter decorativo.
Notas de ayudaIcono info/lock + una sola oración.
07

Sistema responsive

El mismo sistema en tres densidades. Mobile no es otro producto: son los mismos tokens, la misma taxonomía, los mismos pasos de resultado y el mismo vocabulario, con el patrón de navegación y de resultado que corresponde al espacio disponible.

Transformación por aspecto

AspectoMobile · 390Tablet · 834Desktop · 1440
NavegaciónBottom tab bar (5 familias) + título contextualTabs superiores de familia bajo el headerSidebar izquierdo fijo 248px
BrandingMonograma RE en header (avatar = usuario, no marca)Monograma + nombre compactosLogo + nombre + versión de motor en sidebar
BreadcrumbsOcultos — los reemplaza título + backCompactos, opcionalesCompletos en el topbar
HeaderSticky compacto: back + título; sin sub‑copySticky: título + acciónTopbar + page‑head
ResultadoResumen pinneado arriba + sheet a demandaBottom sheet colapsable con peekPanel lateral sticky 380px
Acciones primariasBarra fija sobre el tab barEn el peek del sheet + dentro del panelDentro del panel de resultado
StickyHeader + resumen + barra de accionesHeader + peek del sheetPanel de resultado + save bar
Formularios1 campo por fila; secciones numeradas con anclasGrilla de 2 columnas con respiraciónGrilla de 2–3 columnas
DensidadCards apiladas, gap 14, padding 16Intermedia, padding 22Densa, padding 20/24, gap 16–20
Tablas / listasFila = card; tap abre; secundarias en ⋯Tabla reducida o cards según anchoTabla completa + RowActions en hover
Control42px42px40px (--re-control-h)

Patrón de resultado — decisión por breakpoint

Se evaluaron cuatro opciones (lateral sticky · superior resumido · bottom sheet · híbrida) y se eligió la composición híbrida: ninguna opción única gana en los tres tamaños, así que el patrón se adapta al espacio. El recomendado queda siempre glanceable; el desglose está a un tap.

Desktop ≥ 1200

Panel lateral

Espacio horizontal de sobra: el desglose completo queda sticky junto al formulario, como ya venía funcionando.

Tablet 834

Bottom sheet

Formulario a ancho cómodo; barra‑peek inferior con recomendado + rango + CTA. Se expande sin tapar campos.

Mobile 390

Resumen arriba + sheet

Header de resultado pinneado (recomendado + rango + tamaño); “Ver desglose” abre el sheet. Acciones en barra fija.

Constantes mobile v1

Viewport base
390 × 844
Rango fluido
360–430
Grilla
4px (--re-s*)
Padding de pantalla
16 (s4)
Gap entre cards
14
Card
r13 · pad 16
Control
h42 · r7
Touch target
≥ 44
Safe area
env(safe-area-inset-bottom)

Reglas de adaptación de componentes

  • Nada se “oculta” solamente. Si un elemento no cabe, se reemplaza por su equivalente táctil.
  • Acción dominante por tap: la fila entera abre; las secundarias van a un overflow ⋯.
  • Chips en una línea con scroll horizontal; el activo es ámbar sólido, nunca wrap a dos líneas.
  • Sin sub‑copy en headers táctiles: título + back y nada más.
  • Una sola marca por header: monograma = app, avatar = usuario.
  • El bottom sheet sólo transporta el desglose: nunca se convierte en navegación.

Spec completa: Mobile v1 — Spec de implementación

NR‑12

La capa tablet está documentada y especificada, pero no existe artefacto de pantalla tablet en ui_kits/. Los valores tablet provienen de los mockups de refinamiento, no de una pantalla del kit.

08

Ejemplos de pantalla

5 desktop · 3 mobile

Las pantallas del producto construidas con el sistema. Las cinco de desktop son las del UI kit; las tres de mobile vienen de la spec de implementación Mobile v1. Cada una está capturada en alta resolución y se puede abrir para recorrerla.

Desktop — UI kit

Capturas de las pantallas reales del kit. Hacé click en cualquiera para abrirla y recorrerla completa.

Mobile v1 — pantallas finales

Calculadora, Inicio e Historial quedaron congeladas para implementación, con medidas, spacing, componentes y comportamiento sticky por pantalla. Se documentan en su propio archivo para no duplicarlas acá.

Exploración de color

Las cinco pantallas de desktop con un remap de color claro, lado a lado contra el sistema oscuro. Cambian superficies, tinta, bordes y sombras; el espaciado, la tipografía, los componentes y la jerarquía son los mismos, y el ámbar sigue siendo el único acento. La rampa de tinta está calibrada contra el contraste que ya alcanzaba el tema oscuro, no elegida a ojo. Es una exploración: el sistema publicado tiene un solo tema, dark.

Documentación de respaldo

Los documentos donde se decidieron las cosas que este sistema da por resueltas: auditorías, el cierre de alcance de la V1 y el paquete de handoff.

ArtefactoTipoQué contiene
Refinamiento HiFi — Auditoría y DecisionesAuditoríaAuditoría wireframe vs HiFi, problemas UX/visuales, comparación A/B/C/D del panel de resultado.
Typography ComparisonAuditoríaHanken vs Plus Jakarta contra pantallas reales — decisión de congelar Hanken.
V1 Design Freeze · Readiness AuditFreezeCierre de alcance V1 y verificación de que el sistema estaba listo para congelarse.
Accessibility Review · UX ReviewReviewResultados de las revisiones de accesibilidad y de UX sobre el kit congelado.
Claude Code Handoff PackageHandoffPaquete de handoff a desarrollo.

Se listan como inventario, sin publicarse. Los nombres son los originales de cada documento.

09

Inventario de componentes

33 construidos · 6 especificados

Los 33 componentes construidos y los 6 que quedaron especificados, con lo que cada uno cubre hoy en desktop y en mobile. La columna Estado dice en qué punto del sistema está:

Estable
construido y en uso.
Extendido
existe, y le falta cobertura para mobile.
Nuevo
especificado en Mobile v1, todavía sin construir.
Requiere revisión
tiene una inconsistencia documentada.
ComponenteCategoríaVariantesEstados de UIDesktopMobileEstadoNotas de implementación
ButtonFormulariossecondary · primary · accent · ghost / sm·md·lgdefault · hover · focus · disabledEstableUn solo primary/accent por vista. Mobile usa h42 en barras de acción.
IconButtonFormulariosdefault 34 · bare 30 · dangerdefault · hover · focus · disabledParcialEstabletitle obligatorio. En mobile subir a ≥44 de área.
FieldFormularioslabel · optional · noteEstableWrapper de todos los controles.
InputFormulariosprefix · suffix · leadIcon · numdefault · focus · disabled · placeholderRequiere revisiónSin estado de error/invalid (ver NR‑06).
SelectFormulariosnative + chevrondefault · focus · disabledEstablePasar <option> como children.
TextareaFormulariosresize verticaldefault · focus · disabledEstableNotas del presupuesto.
ToggleFormulariosmd 38 · sm 32 · accenton · off · disabledEstableTrack charcoal on; sm para filas de tabla.
SegmentedControlFormularios2–3 opciones, con/sin iconoselected · unselectedEstable>3 opciones → Select.
BadgeFeedback5 tonos · dot · squareestáticoEstablesquare para códigos mono.
StatusBadgeFeedbackdraft·sent·appr·rej·cancelestáticoEstableMapea color + etiqueta español automáticamente.
AlertFeedbackwarn·ok·info·crit·neutralestático · con/sin títuloEstablewarn es default: el motor nunca bloquea.
AlertGroupFeedbacktitle · itemsestáticoEstablePanel “Alertas y recordatorios”.
CardLayoutpad · flushestático · hover en filasEstableflush para tablas a sangre.
CardHeadLayouticon · title · hint · actionsestáticoParcialEstableEn mobile las actions suelen pasar a overflow.
CardBodyLayoutdefault · tightEstabletight para tablas y listas de opciones.
SectionHeadLayoutindex · title · hint · toolsestáticoEstablePasos numerados de calculadora / editor.
StatTileLayoutdefault · accent · dot · amberValueestáticoParcialEstableUn solo accent por fila.
TechnicalPreviewCardLayoutcompact · standard · large / 4 rendererslive · placeholderNo documentadoExtendidoRegistro extensible. Comportamiento mobile sin especificar.
TechnicalRenderersLayoutregistry APIEstableregister · setFamilyLabel · has · variants · families
AppShellNavegaciónsidebar + topbar + mainRequiere modoExtendidoNecesita 3 modos: sidebar / tabs / bottom bar.
SidebarNavegaciónlogo · footerNo aplicaEstable248px fijo, sticky.
LogoMarkNavegaciónmark · name · taglineRequiere revisiónTagline default desalineado (ver NR‑02).
NavGroupNavegaciónlabel · firstNo aplicaEstableEyebrow uppercase del sidebar.
NavItemNavegaciónicon · label · asdefault · hover · activeSustituidoEstableActive = rail ámbar de 3px + label bold.
TopbarNavegaciónbreadcrumbs · actionsVariante compactaExtendidoMobile: back + título, sin breadcrumbs.
BreadcrumbsNavegaciónitems[]OcultosEstableÚltimo item en bold.
UserChipNavegaciónname · role · initialsSólo avatarEstableEn mobile colapsa al avatar.
TableDatoshelpers is-right/center/sortablerow hoverFila → cardEstableEnvolver en Card flush.
TableToolbarDatostitle · count · actionsSimplificadoEstablePill de recuento de resultados.
RowActionsDatoscluster de IconButtonsrevelado en hoverOverflow ⋯ExtendidoEn táctil no hay hover: requiere menú ⋯.
PaginationDatosshowing · pages · currentcurrent · hoverNo documentadoExtendidoEn mobile va a ser scroll infinito o “cargar más”, todavía sin definir.
TaxonomyIconIconos10 categorías · size · strokeWidthcurrentColor · activo ámbarEstableUsado también en el bottom tab bar.
TAXONOMY_ICONSIconosarray ordenadoEstableIterar para menús y catálogos.
BottomTabBarNavegación5 tabsactive · inactiveNo aplicaNuevoh64 + safe-area. Iconos 21, label 10.
MobileHeaderNavegaciónback+título · marca+títulostickyNo aplicaNuevoVariante compacta de Topbar.
BottomActionBarNavegación1 primary + 2 secundariasfixedNo aplicaNuevoh62, bottom 64, shadow hacia arriba.
ResultSummaryProductopinned charcoalsticky · liveNo aplicaNuevoVariante de ResultPanel: recomendado + rango + tamaño + “Ver desglose”.
ResultSheetProductobottom sheetabierto · cerradoNo aplicaNuevoRadio sup. 18, máx 78%, grab 38×4, scrim .6.
FilterChipsDatosuna línea scroll-xactive ámbar sólido · inactiveParcialNuevoNunca wrap a dos líneas.
Checkbox · RadioFormulariosNoNoRequiere revisiónNo existen en el sistema (ver NR‑13).
Skeleton · SpinnerFeedbackNoNoRequiere revisiónSin componente de loading (ver NR‑07).
10

Diseño → Implementación

Cómo escala el sistema: una decisión de foundation se convierte en token, el token viste un componente, el componente compone un patrón de producto y el patrón se instancia en una pantalla. La cadena es la misma para todo.

01 · Foundation
Decisión
Un solo acento cálido, racionado
El ámbar marca sólo los momentos que importan; el resto es grafito.
02 · Token
Variable
--re-amber #e0911e
--re-amber-bright #f5b342
Vive en tokens/colors.css. Todo lo demás lo referencia.
03 · Component
Primitivo
Button variant="accent"
StatTile amberValue
El componente nunca hardcodea el hex: lee la variable.
04 · Pattern
Composición
Valor recomendado
+ rango + track
La cifra ámbar sobre charcoal con su rango: significado de negocio.
05 · Screen
Instancia
Calculator.html
ResultSummary (mobile)
El mismo patrón, tres densidades, sin volver a decidir nada.

Cómo consumir el sistema

1 · Estilos

Enlazá un solo archivo. Es un manifiesto de @import: trae fuentes, colores, tipografía, spacing, elevación y el reset base.

<link rel="stylesheet" href="styles.css">
<body class="re-root">

2 · Tema

No hay nada que configurar: dark es el único tema del sistema, y es el que aplica :root por defecto.

3 · Componentes

const { Button, Card, StatusBadge } =
  window.PresupuestadorREDesignSystem_84f335;

Reglas para superficies nuevas

  • Nunca un hex literal: siempre var(--re-*). Si falta un token, se agrega al sistema, no a la pantalla.
  • Nunca re‑explorar tipografía: está congelada.
  • Respetá el racionamiento del ámbar: recomendado · rail/tab activo · CTA · logo.
  • Iconos: copiá las formas del kit; 24×24, stroke 1.7–1.8, round caps.
  • Sin emoji, sin gradientes, sin glass, sin blur decorativo.
  • Las 5 reglas de producto del §00 no se negocian desde diseño.
  • Cifras: tabular-nums y formato uruguayo siempre.

Migración a Figma

  • Los tokens de §01 mapean 1:1 a variables de Figma (color, number para spacing/radius, string para families).
  • Las variantes de §02 mapean a component properties (variant, size, tone, status).
  • Los tres breakpoints de §07 mapean a page/frame widths 390 · 834 · 1440.

Evolución del sistema

Las líneas de trabajo abiertas del sistema y en qué estado está cada una.

Tablet En progreso
Expansión V2 En desarrollo
Tema light Planificado
Registro interno de auditoría (13 notas)

Inconsistencias y huecos detectados al auditar el sistema. Quedan escritos para resolverse como decisión explícita en vez de corregirse sobre la marcha. Es material de trabajo interno.

NR‑01

Prosa vs token en --re-ink-4. El readme describe #686d76; el token real es #7f858e (elevado para cumplir WCAG AA). La prosa del readme quedó desactualizada respecto del archivo de tokens.

NR‑02

Tagline por defecto de LogoMark. El componente trae 'RE · v1.0'; el kit y los mockups muestran “REstimator · motor v1.5”. Definir cuál es el canónico.

NR‑03

--re-text-xl (21px) no documentado. Existe en tokens/typography.css pero falta en la escala descrita en el readme (40 · 23 · 17 · 14.5 · 14 · 13 · 12 · 11).

NR‑04

Altura de control por breakpoint. --re-control-h es 40px (desktop) pero la spec Mobile v1 usa 42px. No hay token de control mobile: hoy el 42 está hardcodeado.

NR‑05

Breakpoints sin tokenizar. 390 / 834 / 1200–1440 viven en prosa y specs, no en tokens/.

NR‑06

Sin estado de error de campo. Field/Input no exponen error/invalid. Coherente con el motor warn‑only, pero deja sin definir la validación inline si alguna vez se necesita.

NR‑07

Sin loading ni empty state como componentes. No existe skeleton/spinner; los empty states son copy dentro de pantallas.

NR‑08

Racionamiento del ámbar en mobile. La regla define cuatro momentos; mobile agrega el tab activo (ámbar‑ink) y el filter chip activo (ámbar sólido). Hay que reformular la regla para táctil o reclasificar esos usos como “rail activo”.

NR‑09

6 componentes mobile especificados sin construir. BottomTabBar · MobileHeader · BottomActionBar · ResultSummary · ResultSheet · FilterChips existen en Mobile v1 pero no en components/.

NR‑10

Starting points obsoletos. Las 4 pantallas del kit están marcadas @startingPoint, un mecanismo que los proyectos consumidores ya no ofrecen. Lo reemplazaron los templates/, y hoy hay 0 templates.

NR‑11

Fuentes por CDN. tokens/fonts.css importa Hanken Grotesk y JetBrains Mono desde Google Fonts. Para un export standalone verdaderamente offline hay que auto‑hospedarlas o inlinearlas.

NR‑12

Tablet sin artefacto. La capa está documentada pero no hay pantalla tablet en ui_kits/; sus valores vienen de los mockups de refinamiento.

NR‑13

Sin Checkbox ni Radio. El producto los evita (usa Select, SegmentedControl y Toggle), pero conviene declararlo como decisión explícita del sistema en vez de un hueco.

REstimator Design System — Master Documentation 147 tokens · 33 componentes