A Agro·Connect Auditoría mobile · v1
2026.04.20 — Nicolás
Informe interno · Equipo producto

¿Puede el mobile vestir la misma piel editorial que acabamos de estrenar en municipio?

Esta auditoría compara el sistema de color, tipografía y componentes del cliente .NET MAUI con el nuevo lenguaje visual bone / ink / moss / clay aplicado en la consola municipal. El veredicto, página por página, indica dónde la migración es un reemplazo de tokens, dónde requiere reestructurar el layout y dónde conviene no tocar nada.

17
Páginas mobile auditadas
11
Migrables vía tokens
4
Requieren rediseño parcial
2
Recomendadas no migrar ahora
~18 días
Esfuerzo estimado total
01

Dos lenguajes visuales conviviendo

Diagnóstico

El mobile hoy habla SaaS verde (Primary #1a7742, Open Sans, cards blancas con sombras suaves, chips emoji para estado). La consola municipal ya habla editorial agri-tech (papel hueso, tinta negra, contraste con moss y clay, Instrument Serif para números y titulares, Inter Tight para UI, JetBrains Mono para códigos). Son dos vocabularios distintos, y hoy el usuario que usa ambos siente que cambia de producto al cambiar de dispositivo.

ActualMobile · .NET MAUIResources/Styles/Colors.xaml
Paleta brand
Primary
#1a7742
PrimaryDark
#145e34
Accent
#FF8F00
Background
#f8fafc
Surface
#FFFFFF
TextPrimary
#1e293b
Tipografía
Display
Bienvenido, Nicolás
Body
Open Sans · Regular / Semibold — una sola familia para todo.
Componentes
PENDIENTE APROBADA RECHAZADA

Cards con CornerRadius=12 y sombra, fondos pastel saturados (WarningBgAlt #FFF8E1, InfoBgAlt #E6F1FB), emojis como iconografía (📄 ✏️ 📢 🔔 🚜). Paleta semántica muy amplia (6 grises, 12 verdes, 14 azules…).

NuevoMunicipio · web editorialwwwroot/css/municipio-redesign.css
Paleta brand
bone
#f3efe6
paper
#fbf8f1
ink
#1a1d17
moss
#2d4a2b
clay
#b8593a
amber
#c79a2a
Tipografía (3 familias)
Display
Bienvenido, Nicolás
UI / Body
Inter Tight · 400 / 500 / 600 — jerarquía a través de tamaño y color.
Código
RCP-2026-00481 · 12.4 ha · EIQ 48
Componentes
Pendiente Aprobada Observada Rechazada
Ib II III IV

Radios pequeños (3–4px), cero sombras, bordes en --line #d9d3c1, numerología tabular en serif, acentos clay sólo para lo urgente / destacado. Iconografía SVG mono-línea.

02

Cómo se vería: Home del productor, antes y después

Visualización

Tomo la pantalla más visible (Views/Home/HomePage.xaml) y la re-skineo con los tokens del municipio sin tocar la estructura del ViewModel. Conserva las 3 acciones rápidas, los KPIs y las ejecuciones activas — solo cambia el look.

Actual · HomePage (productor)
9:41●●● 100%
📄Subir receta
✏️Crear manual
📢+ Trabajo
Requiere tu atención 3
🔴
RCP-0481 observada
Municipio pidió cambios
🟡
Lote 7 sin receta
12.4 ha sin asignar
3
Activas
18
Completadas
🏠Inicio
🌾Campo
💼Trabajos
🔔Avisos
👤Perfil
Propuesta · HomePage con sistema municipal
9:41●●● 100%
A Agro·Connect
3
Inicio · Productor

Buen día,
Nicolás

Campo Los Álamos · 3 ejecuciones en curso
Requieren atención
3
En curso
18
Hectáreas
412ha
Recetas
7
Bandeja 3
RCP-2026-00481
Soja · Lote 7 · 12.4 ha
Municipio pidió cambios hace 2 h
Observada
RCP-2026-00472
Trigo · Lote 3 · 28 ha
Pendiente de aprobación
Pendiente
Inicio
Campo
Trabajos
Avisos
Perfil
Lo que funciona directo
La arquitectura del XAML es reutilizable. Colors.xaml + Styles.xaml son el punto único de edición para ~70% del rediseño.
!
Lo que se rompe
Todos los emojis en XAML (📄 ✏️ 🔔 🚜 🌱) rompen la cohesión del nuevo sistema. Hay ~40 instancias. Reemplazar por SVG mono-línea o letras en Instrument Serif.
i
Lo que conviene repensar
Los KPIs 2×2 con fondos pastel saturados (warning / info / error) se sienten como un dashboard de aerolínea. En el nuevo sistema se traducen a KPIs con numero serif grande + accent-border izquierdo.
03

Mapeo de tokens · viejo → nuevo

Plan técnico

Tabla de correspondencia para sustituir en Resources/Styles/Colors.xaml. Los semantic tokens del mobile (ErrorBg, SuccessBg, InfoBg…) son hoy ~60 colores; el municipio los resuelve con ~20. Al migrar se pierden variantes que no se usan y gana consistencia.

Tokens de color

27 claves críticas
Rol semánticoToken actual (Colors.xaml)ValorToken nuevo (municipal)Valor
Fondo appBackground#f8fafc--m-surface#f7f7f5 (casi blanco, no bone)
Card / superficieSurface#ffffff--m-bg#ffffff (se mantiene)
DividerDivider#e2e8f0--line#d9d3c1
Texto primarioTextPrimary#1e293b--ink#1a1d17
Texto secundarioTextSecondary#64748b--muted#6b6d63
Acción primariaPrimary#1a7742--ink#1a1d17 (sí, ink; moss para confirmación)
Acción confirmPrimaryDark / Success#059669--moss#2d4a2b
Urgente / alertaNotificationBadge / Accent#FF8F00--clay#b8593a
Status · PendienteStatusPending#2563eb--st-pendiente#3d5a7a
Status · AprobadaStatusApproved#059669--st-aprobada#4f7a3d
Status · ObservadaStatusWarning#f59e0b--st-observada#c79a2a
Status · RechazadaStatusRejected#dc2626--st-rechazada#a13d2f
Toxicológico IaToxIa#9C27B0--tox-ia#6e1e18
EIQ bajo / medio / altoRiskLow / Medium / Highsaturados (emerald / amber / red)--eiq-bajo / medio / altomoss / amber / brick · tonos tierra
+ 12 tokens semánticos adicionales (Warning/Info/Success Bg/Border/Dark/Light → se unifican en --sand / --paper-2 / --cream-accent + los 5 colores de status)

Tipografía · qué cambia

Hoy
Open Sans regular + semibold. Peso 400/600. Una sola familia para todo — títulos, body, badges, tabular.
Propuesta
Inter (o Inter Tight, mismo diseño) para TODO el mobile: body, números, títulos. Peso 500/600/700, sin serif. Monoespaciada solo para códigos (JetBrains Mono) y opcional.
¿Por qué Inter y no Instrument Serif? Mobile se usa al sol, con guantes, apurado. Los serif italic pierden legibilidad al sol directo y en tamaños chicos; Inter mantiene contrast ratio alto y tiene numerales tabulares sólidos. El acento editorial (moss/clay/amber) viaja por color, no por tipografía.

Formas · qué cambia

Radios
8 / 12 / 20 px (Sm/Md/Lg)3 / 4 px (casi planos, estilo editorial)
Sombras
HasShadow=True en cards → eliminar. El nuevo sistema separa con borde de 1 px en --line.
Spacing
Se mantiene la escala base 4 px (ya es compatible).
Iconografía
Emojis en Label.TextSVG glyphs mono-línea. Alternativa rápida: letras en Instrument Serif (A / M / T / N / P) como en el sidebar del municipio.
04

Auditoría página por página

17 pantallas

Recorrí cada vista en Views/ y las clasifiqué por tipo de intervención. El esfuerzo asume que Colors.xaml + Styles.xaml ya están migrados (paso 0) y mide el trabajo de cleanup adicional por página.

Pantalla Veredicto Fit Esf. Qué hay que tocar
Home
Views/Home/HomePage.xaml
Rediseño parcial 2d KPIs 2×2 con fondos pastel → KPIs serif con border-left accent. Header saludo → H1 Instrument Serif con italic clay. Quitar los 12 emojis; reemplazar por SVG. Card "Ejecuciones activas" y "Trabajos cerca" son reutilizables 1:1 con tokens nuevos.
Mi Campo (Recetas + Lotes)
Views/Recipes/MiCampoPage.xaml
Rediseño parcial 2.5d Segmented control Recetas/Lotes se mantiene. Chips de filtro (Todos · Abierta · Pendiente…) se traducen 1:1 a chip municipal. El badge municipio 🏛 se reemplaza por chip moss. Cambio grande: el card de receta-grupo con dots de estado debería usar risk-bar estilo municipal.
Ejecuciones · Lista
Views/Execution/ExecutionListPage.xaml
Solo tokens 0.5d Estructura perfecta para el sistema nuevo: barra lateral de color por estado (= tbody tr.urgent del municipio). Cambio: filtros pill (🔵 Activas) → .filters .tab.active (ink + bone). Badge "Falta reporte de vuelo" → chip amber.
Ejecución · Detalle
Views/Execution/ExecutionPage.xaml + Checklist/Drone/Timeline
Rediseño parcial 2d La state machine (PENDIENTE → ACEPTADA → EN_CAMINO → EN_CURSO → COMPLETADA) pide visualmente el componente .tline del municipio. Los 5 sub-tabs (Conditions/Contact/Drone/Products/Timeline) se mantienen. Las action-buttons grandes de transición deberían pasar a btn ink + btn clay en lugar de botones verdes sólidos.
Resultado deriva (DriftResult)
Views/Execution/DriftResultPage.xaml
Rediseño parcial 1d Pantalla crítica de advertencia. Hoy usa ErrorAccentBg / WarningBg. Traducción directa al patrón .warn-box municipal (border-left clay 3px + icon círculo). El gauge de riesgo se puede reusar tal cual (.eiq-gauge).
Trabajos · Lista (aplicador y productor)
Views/Jobs/JobListPage.xaml + ProducerJobListPage.xaml
Solo tokens 1d Cards de trabajo con distancia, surface ha, locality. Traducción casi literal a filas de table.rtab o a cards con numerología serif. Los chips de estado de postulación siguen el mapa de tokens.
Trabajo · Detalle + Crear
Views/Jobs/JobDetailPage + CreateJobPage + ProducerJobDetailPage
Solo tokens 1d Forms estándar. Cambian los FormEntry / FormInputBorder del sistema central y todo se alinea.
Review del aplicador
Views/Jobs/ReviewApplicatorPage.xaml
Solo tokens 0.5d Estrellas + textarea. Cuidar el rating: estrellas llenas en amber, no saturado.
Notificaciones
Views/Notifications/NotificationsPage.xaml
Solo tokens 0.5d Estructura ya replica el .notif-dropdown del municipio. UnreadNotificationBg #F0F7FF#eef3f9. Bugs pendientes del CLAUDE.md (padding del badge) se resuelven en la misma pasada.
Perfil (productor / aplicador)
Views/Profile/ProfilePage + ProducerProfilePage + EditApplicatorPage
Rediseño parcial 1.5d Foto + nombre + badge ✅ Verificado → patrón .mun-card del sidebar municipal. Rating / Completion rate / Hectáreas piden KPIs serif grandes. Zonas de exclusión (aplicador) requieren un componente de mapa que hoy no existe en mobile — dejar placeholder.
Perfil público aplicador
Views/Profile/ApplicatorPublicProfilePage.xaml
Rediseño parcial 1d Se beneficia mucho del sistema nuevo: headline serif con nombre del aplicador, estrellas en amber, equipo en rtab-like list. Gran ganancia visual.
Operarios · Lista + Detalle + Crear
Views/Profile/OperatorListPage + OperatorDetailPage + CreateOperatorPage
Solo tokens 1d Listados CRUD simples. Migran con el paquete de tokens y el FormEntry global.
Crear receta manual (wizard)
Views/Recipes/CreateManualRecipePage.xaml
Rediseño mayor 3d Es el formulario más pesado (productos, dosis, lotes). Merece atención especial: el paralelo web (CreateManual ~984 líneas de JS inline) ya está flaggeado como deuda técnica. Migrar mobile es ocasión para dividir en sub-páginas (el CLAUDE.md ya lo recomienda por el anti-patrón de DisplayPromptAsync encadenado).
Detalle de lote
Views/Recipes/LotDetailPage.xaml
Rediseño parcial 1.5d Historial + polígono. El .tline municipal encaja perfectamente para el historial. El preview del polígono se mantiene como imagen.
Asignar municipio / Asignación directa
Views/Recipes/AssignMunicipalityPage + DirectAssignPage
Solo tokens 0.5d Pickers simples. Migran con tokens.
Admin · Home + Stats
Views/Home/AdminHomePage + AdminStatsPage
Esperar Recomiendo no migrar ahora. El admin mobile duplica funciones que viven mejor en web. Si se migra, que sea a la vez que se redefine su alcance. Riesgo bajo de inconsistencia porque lo ve un usuario interno.
Login / Register / Onboarding
Views/Account/LoginPage + RegisterPage + Profile/OnboardingPage + RoleSelectionPage
Rediseño mayor 2.5d Son la first impression: hoy usan gradiente verde con tokens LoginSubtitle #a7f3d0 / LoginFooter #6ee7b7. En el nuevo sistema queda mucho mejor con fondo bone, headline Instrument Serif con italic clay ("Bienvenido a AgroConnect") y CTA ink. Merece rediseño dedicado, no sólo reemplazo de colores.
Loading / Cuenta operario / Change password
Views/Account/LoadingPage + OperatorAccountPage + ChangePasswordPage
Solo tokens 0.5d Pantallas utilitarias, cambio trivial.
05

Riesgos que no son obvios

Advertencias
!
Contraste en exterior · campo real
El municipio es una aplicación web de escritorio. El mobile lo usa un operario al sol, con guantes. El fondo bone #f3efe6 baja el contraste vs el #f8fafc actual. Validar WCAG AA en sol directo antes de rollout. El ink #1a1d17 como color de acción primaria reemplaza bien a #1a7742 — es incluso más legible.
Decisión clave: mobile NO hereda el lenguaje editorial tal cual
La consola municipal se diseñó para desktop indoor; el mobile se usa al sol con guantes. Proponemos una variante “sunlight” del sistema: fondo blanco / gris muy claro (#ffffff / #f7f7f5) en lugar de bone, Inter (sans-serif) para todo el texto en lugar de Instrument Serif, pesos 500–700 para máximo contraste, radios 10 px (cómodos al tap). Se conservan los acentos de color del sistema municipal — ink / moss / clay / amber / brick — para que la identidad de marca se mantenga. El serif editorial queda reservado para web/impresos.
!
Contraste en exterior · campo real
Con fondo blanco (#fff) + ink #111310 el contraste es 19.5:1, muy por encima de WCAG AAA. Evitar cualquier texto en muted por debajo de 14 px. Validar en Xiaomi 12X al sol directo antes del rollout, con brillo automático.
!
Emojis · alcance más amplio de lo que parece
Hay emojis en Label.Text pero también en Buttons, Triggers (🔴🟡⚪ como indicador de urgencia), textos del backend (títulos de notificación). Migrar mobile sin tocar backend deja emojis en los push notifications. Coordinar con API.
!
Tab bar — mantener claro, no oscuro
Rechazado: el sidebar ink-on-ink del municipio funciona en desktop, pero en mobile bajo sol una tab bar oscura genera reflejo y pierde glyphs. Recomendación: tab bar blanca con borde sutil, icono activo en ink y barra de 3 px clay arriba del item seleccionado. La identidad la da el acento clay, no el fondo oscuro.
i
App icon y splash
Hoy son Resources/AppIcon/appicon.svg verdes. Nuevo icon: A en Inter Bold blanco sobre cuadrado ink #111310, con un punto clay que marca identidad. Legible a 48 px en la home del Xiaomi.
i
Paridad de lenguaje con el web (no municipal)
Hay otros clientes web (productor, aplicador) que aún NO usan municipio-redesign.css — usan site.css + layout.css. Si migramos mobile al lenguaje municipal, el productor usará mobile-editorial + web-verde-viejo. Ideal: planear migración del web-productor primero o en paralelo.
06

Plan en 5 pasos

Ruta sugerida

Esfuerzos estimados asumiendo 1 dev full-time. Cada paso es independientemente releaseable — se puede parar después de cualquiera y el producto queda consistente.

00
Prueba de concepto: re-skin sólo del Home
Antes de comprometernos, hacer un branch que migre sólo HomePage.xaml con tokens hardcodeados inline. Build en el Xiaomi físico al sol. Validar legibilidad, agrado, sensación. Si no convence, paramos acá.
Esfuerzo1d
01
Migrar Colors.xaml + Styles.xaml + fuente
Reescribir ambos ResourceDictionaries con los tokens de la variante sunlight (fondos blancos, acentos ink/moss/clay/amber). Agregar Inter (400/500/600/700) a Resources/Fonts/ y registrar en MauiProgram.cs. Una sola familia tipográfica — no Instrument Serif, no JetBrains Mono obligatoria. Con esto, ~11 pantallas de la auditoría ya quedan listas sin más cambios.
Esfuerzo2d
02
Eliminar emojis · crear IconGlyph control
Un Control MAUI que renderice SVG (via SKCanvasView o Image Source="icon_xxx.svg"). Reemplazar todos los Label Text="🔔" por ctrl:IconGlyph Name="bell". Aprovechar para agregar "noti-dot" real en el icon del bell.
Esfuerzo2d
03
Rediseñar las 6 páginas de rediseño parcial
Home, Mi Campo, Ejecución detalle, DriftResult, Perfil, LotDetail. En cada una: KPIs con número grande en Inter 700, pagehead claro, quitar sombras, ajustar el layout de cards para que respire. Son ~8 días de trabajo concentrado.
Esfuerzo8d
04
Rediseño mayor: Login/Register/Onboarding + CreateManualRecipe
Las 4 pantallas que definen marca (entrada al producto) y el wizard más pesado. Aprovechar para romper el wizard en sub-páginas dedicadas (resuelve la deuda técnica del DisplayPromptAsync encadenado listada en CLAUDE.md).
Esfuerzo5d
05
App icon, splash, onboarding de release
Nuevo icon + splash coherentes. Changelog visible la primera vez que abren la app. Update en Play Store.
Esfuerzo1d
07

Veredicto

TL;DR

Sí, el mobile puede y debería pasarse al sistema municipal — con matices. La arquitectura MAUI lo facilita (todos los tokens viven en 2 archivos), pero no es un find-and-replace: hay decisiones de identidad que tomar, emojis que sacar, y 4 pantallas que merecen rediseño, no solo reskin.

La ganancia es doble: (1) coherencia visual entre el municipio aprobando una receta en web y el productor viéndola aprobada en mobile — ahora mismo, la misma receta cambia de lenguaje entre dispositivos; (2) oportunidad para limpiar deuda técnica listada en el CLAUDE.md del mobile (flicker de listas, wizards de DisplayPromptAsync, badges mal padded).

El riesgo principal no es técnico — es de contexto de uso. El mobile se usa al sol, con guantes, apurado. Antes de comprometernos al plan completo, propongo ejecutar el paso 00 (re-skin sólo del Home) y probarlo en campo real con un productor. Si funciona, seguimos. Si no, ajustamos tokens (más contraste, más peso) y volvemos a probar.

Próximo paso propuesto
Abrir branch feat/mobile-editorial-poc, migrar sólo Home, probar en campo.
?
A decidir con el equipo
¿Tab bar ink oscura o bone clara? ¿Se migra web-productor en paralelo o después?
!
No hacer
No empezar por Login/CreateManual — son trampa. Validar antes con Home que el lenguaje funciona en mobile.