Paridad entre web y móvil
Cómo funciona
Los colores se emiten como canales RGB sueltos y el preset los envuelve:
--crm-primary: 21 125 77
↓
rgb(var(--crm-primary) / <alpha-value>)
Por eso bg-primary, bg-primary/40 y text-fg-muted existen y significan lo
mismo en Tailwind (web) y NativeWind (móvil), con tema oscuro por la misma
clase .dark. Las dos apps cargan el mismo preset y el mismo tokens.css.
Lo que diverge a propósito
La paridad no significa que la app sea la web encogida.
| Web | Móvil | |
|---|---|---|
Altura de control md | 40 px | 48 px (mínimo táctil 44 pt) |
| Elevación | box-shadow | shadowOpacity + elevation |
| Listado de tickets | Tabla densa | Tarjetas o filas |
| Filtros | Barra persistente | Hoja inferior |
| Ficha de cliente | Dos columnas | Pestañas |
Los tokens son los mismos; la composición no. Y las divergencias están
también en los tokens (controlHeight.web vs .native), no repartidas por el
código.
Cómo se verificó
No a ojo: midiendo el estilo calculado de cada badge en la app móvil y
comparándolo con tokens.json. Coinciden exactamente en claro y en oscuro.
La prueba que lo demostró de verdad
lucide 1.x retiró los iconos de marca y Facebook dejó de existir — en las
dos plataformas a la vez.
Bastó cambiarlo en el token para que ambas sustituyeran igual. Sin el sistema compartido, cada una habría elegido un sustituto distinto y el mismo canal se vería diferente en cada plataforma.
Relacionado: Los tres niveles