AgroConnect· Diseño del producto · mobile · abril 2026
Sistema de diseño · extraído del código · v1 · abril 2026

El sistema visual que ya existe en la app, documentado como si fuera nuevo.

Esta guía mapea lo que está efectivamente compilando en AgroConnect.Mobile: 46 ContentPages en .NET MAUI, dos paletas de tokens conviviendo, una tipografía Inter + Instrument sobre fondo hueso, tres roles con flujos distintos y un puñado de patrones compartidos (KPI strip, cards con eyebrow, chips de estado, listas con chevron). Todo lo de acá salió de leer los XAML, no de inventar. Las decisiones abiertas están marcadas como diagnóstico al final.

46 pantallas · 148 tokens de color · 2 sistemas coexistiendo
Tokens de color 148 claves 35 en Colors.xaml (sistema antiguo) + ~113 Sun* referenciados (sistema nuevo)
Pantallas auditadas 46 xaml 4 de Account · 8 de Execution · 3 de Home · 6 de Jobs · 1 Notif · 9 de Profile · 9 de Recipes
Familia tipográfica Inter + serif Inter / InterMedium / InterSemiBold / InterBold · escala 9 → 48
Tamaños de texto 18 niveles Xs/Sm/Md/Lg/Xl/2xl/3xl/4xl + 10 tamaños intermedios (9,11,13,15,18,22,28,36,40,44)
01

Tokens de color

Colors.xaml · 148 claves

La app tiene dos paletas operando en paralelo. La primera — semántica clásica: Primary, Background, TextPrimary, Error, Warning, Info — está definida en Colors.xaml y sigue el patrón habitual de .NET MAUI con verde #1a7742 como marca. La segunda — Sunlight: SunPaper, SunInk, SunMoss, SunClay, SunBrick — es la que usan 40 de las 46 pantallas, inspirada en papel hueso + tintas de imprenta, pero no está definida en ningún archivo del repo cargado. Debe vivir en un SunlightTokens.xaml fusionado vía App.xaml. Eso es el hallazgo #1 del diagnóstico.

Brand (clásico)Colors.xaml · 6

Definidos literalmente en el repo. Verde institucional usado como Primary. El gradiente aparece en Login clásica, hoy no visible porque el Login migró a Sun*.

Primary#1a7742
PrimaryDark#145e34
PrimaryLight#1e8a4e
Accent#FF8F00
Background#f8fafc
Surface#FFFFFF
Sunlight (editorial)reconstruido · ~22

La paleta dominante. Reconstruida desde los mockups (Pendientes Migracion Mobile.html, Mockups *) y confirmada por uso. Hallazgo: los tokens Sun* no están en Colors.xaml.

SunPaper#f3efe6
SunPaper2#fbf8f1
SunInk#1a1d17
SunMuted#6b6d63
SunLine#d9d3c1
SunMoss#2d4a2b
SunClay#b8593a
SunBrick#8b3a2a
Status de recetaColors.xaml · 6

Un color por estado de receta. Se usan en los chips (StatusDraft · Pending · Approved · Rejected · Warning · Expired) y en pantallas como ProducerRecipeList, MiCampo, LotDetail.

StatusDraft#f59e0b
StatusPending#2563eb
StatusApproved#059669
StatusRejected#dc2626
StatusWarning#f59e0b
StatusExpired#94a3b8
Categoría toxicológicaColors.xaml · 5

Clasificación OMS/SENASA. Aparece en ExecProducts, ProducerRecipeDetail, LotDetail. Color transmite riesgo: morado más grave (Ia), verde menos grave (IV).

ToxIa#9C27B0
ToxIb#dc2626
ToxII#f59e0b
ToxIII#2563eb
ToxIV#059669
Semánticos · fondos y bordesColors.xaml · ~40

Set denso para mensajes info/error/warning/success. Cada familia tiene *Bg (fondo soft), *Border (stroke), *Dark (texto). Se ven en Admin, CreateJob, ProducerProfile, EditApplicator — las pantallas que todavía usan el sistema clásico.

SuccessLight#D1FAE5
SuccessBorder#BBF7D0
Success#059669
ErrorLight#FEE2E2
ErrorBorder#FECACA
Error#dc2626
WarningLight#FEF3C7
WarningBorder#FDE68A
Warning#f59e0b
InfoLight#DBEAFE
InfoBorder#BFDBFE
Info#2563eb
Sun · acentosreconstruido · ~30

Pares fondo-soft + texto-medio para Moss, Amber, Sky, Brick, Teal. Mismo patrón que el sistema clásico pero con paleta editorial.

SunMossSoft#e2ecd9
SunAmberSoft#f2e3bf
SunSkySoft#dce7ee
SunBrickSoft#f2d9d0
02

Tipografía & escala

Inter · Styles.xaml

La app usa Inter en 4 pesos (Inter 400, InterMedium 500, InterSemiBold 600, InterBold 700). La escala declarada en Styles.xaml ofrece 8 niveles nombrados (Xs → 4xl) más 10 tamaños intermedios numéricos. En la práctica las pantallas usan tamaños específicos (12, 13.5, 14, 15) y no los tokens — otro hallazgo del diagnóstico.

48 · 4xl FontSize4xl Números hero en KPI strip
32 · 3xl FontSize3xl Valores grandes (hectáreas, conteos)
24 · 2xl FontSize2xl Títulos de pantalla (eyebrow + H1)
22 FontSize22 TitleLabel · header de sección
20 · xl FontSizeXl Sub-títulos editoriales
18 FontSize18 Nombre en perfil / detalle
16 · lg FontSizeLg Botón primario · entry · subtítulo
14 · md FontSizeMd Body default · labels de formulario
12 · sm FontSizeSm Caption · eyebrow · meta
11 FontSize11 EYEBROW · ETIQUETAS DE SECCIÓN
10 · xs FontSizeXs ROL · TAGS · PILLS

Dos mundos tipográficos: los mockups (los HTML en Mockups *) usan Instrument Serif italic para títulos editoriales. La app compilada no tiene serif — todo es Inter. Las itálicas del design system en papel quedan como aspiracional; en el XAML real el hero se resuelve con InterBold + tamaño grande + letter-spacing negativo.

03

Espaciado & radios

Styles.xaml · escala 4px

Base 4px. 8 niveles nombrados (Xs → 4xl) y 3 radios (Sm 8 · Md 12 · Lg 20). Las pantallas usan tanto los tokens como números en crudo — no hay una policía de uso; CardFrame viene con CornerRadius=12 hardcoded y Border con RoundRectangle 10.

SpaceXs4px
SpaceSm8pxgap entre labels
SpaceMd12pxpadding form inputs
SpaceLg16pxpadding card · screen margin
SpaceXl20pxgap entre cards
Space2xl24pxseparación de secciones
Space3xl32pxheader padding · hero margin
Space4xl48pxseparación entre bloques hero
RadiusSm · 8
botón primario · pill
RadiusMd · 12
card · CardBorder · Frame
RadiusLg · 20
hero · ilustración · avatar grande
04

Los tres roles + transversales

46 pantallas · 4 flujos

La app divide sus vistas según el rol activo. El mismo usuario puede tener más de un rol; RoleSelectionPage decide. Cada rol tiene su home, su flujo principal y sus utilitarios. Transversales (login, notificaciones, edición de perfil, cambio de contraseña) se comparten.

Aplicador18 vistas
Ejecutar aplicaciones, firmar cierre, cobrar. El que trabaja a campo.

Flujo core en 3 actos: Plan (ver trabajos en la bolsa, postularse) → Ejecución (checklist, condiciones, productos, drone, timeline, contacto) → Cierre (firma GPS, comprobante PDF).

  • ExecutionPage · hub con 7 sub-tabs
  • JobListPage + JobDetailPage
  • ApplicatorPublicProfilePage (público)
  • EditApplicatorPage · 4 secciones
  • OnboardingPage · 4 pasos
  • OperatorList/Detail/Create
Productor13 vistas
Dueño del cultivo. Sube recetas, publica trabajos, contrata aplicadores.

Centro de acción: Mi Campo. Tres formas de traer una receta: Subir PDF, Crear manual, Recibir de aplicador. Luego elige Asignar directo o Publicar como trabajo. Ve postulantes, contrata, califica.

  • MiCampoPage · tabs Recetas/Lotes
  • UploadPdfPage · extracción automática
  • ProducerRecipeListPage + Detail + Group
  • LotDetailPage · historial
  • DirectAssignPage · elegir aplicador
  • CreateJobPage + ProducerJobDetail
  • ReviewApplicatorPage · calificar
Operario9 vistas
Empleado de la empresa aplicadora. Opera la maquinaria.

Alcance reducido. Home distinto al del aplicador — no ve bolsa ni gestiona perfil, sólo ejecuciones que la empresa le asigna. Reusa los 5 sub-tabs de ejecución. Cuenta mínima (OperatorAccountPage).

  • HomePage · rama operario
  • ExecutionPage + 5 sub-tabs
  • ExecutionChecklistPage
  • ExecCompletePage · firma
  • OperatorAccountPage
Transversales6 vistas
Compartidas entre roles. Sesión, notificaciones, ajustes de cuenta.

No pertenecen a ningún flujo operativo. Son la mecánica de la app: autenticarse, recuperar credenciales, elegir rol, editar datos básicos. LoadingPage es splash.

  • LoginPage · gradiente Sun
  • RegisterPage · alta
  • RoleSelectionPage · multi-rol
  • EditProfilePage + ChangePassword
  • NotificationsPage
  • LoadingPage · splash

No migrado (fuera de scope MVP): AdminHomePage y AdminStatsPage. Son dashboards de administrador de empresa aplicadora — no de usuario final. Quedan para v2 de la web o una app admin separada.

05

Patrones recurrentes

lo que se repite en 40+ pantallas

Estos son los bloques que aparecen una y otra vez en los XAML. Si algo se usa en 5+ pantallas, está acá. Los nombres no están oficializados en el código — son la convención que emergió leyendo el repo.

Eyebrow + títuloHeader

Tag en mayúsculas con letter-spacing abierto sobre el título editorial. Marca dónde estás sin gritar. Eyebrow en SunEyebrow (muted), título en SunInk bold.

Usado en: HomePage, MiCampoPage, ProducerJobList, ExecutionList, JobList, ProducerProfile, ProfilePage — 15 pantallas.
KPI stripResumen

3–4 celdas en grid. Cada una tiene label (Kpi­Label, muted, caps) + valor grande + unidad pequeña. Sin bordes entre celdas, fondo SunPaper2 o SunKpiCard.

Usado en: HomePage, ExecutionList, DriftResult, LotDetail, ExecComplete, ExecContact, OperatorDetail — 10 pantallas.
Card con chevronLista

Fila con ícono o emoji a la izquierda, texto principal y (SunClay) a la derecha. El chevron es U+203A, no un ícono vectorial — elección consistente en todo el repo.

Usado en: ExecutionPage (hub de 7 tabs), Profile, OperatorAccount, OperatorList, MiCampo, ProducerProfile — 12 pantallas.
Chip de estadoStatus

Pill con fondo suave (*Soft) y texto del color semántico. Border-radius 10, padding 10×4, fontsize 11. Se usa el converter StatusToColor para mapear estado → color sin if en el XAML.

Usado en: toda lista de recetas, JobList, ProducerJobList, OperatorDetail — 9 pantallas.
Form sectionForms

Eyebrow de sección + hairline (SunLine) + label + Border con RoundRectangle 10 envolviendo el Entry. Error debajo en SunBrick size 11, visible vía StringNotEmpty.

Usado en: Register, Login, EditProfile, CreateApplicatorProfile, Onboarding, CreateOperator, CreateJob, EditApplicator — todas las forms.
Empty stateVacío

Emoji grande centrado + título bold + párrafo muted explicando qué hacer. Opcionalmente un CTA. Cuando hay error, versión gemela con "Reintentar" como secondary.

Usado en: MiCampo, ProducerRecipeList, JobList, NotificationsPage, OperatorList, ProducerJobList — 8 pantallas.
Bottom CTAAcción

Botón primario de ancho completo (HorizontalOptions=FillAndExpand) al final del scroll. SunPrimaryButton (clay), height 52, radius 10, InterSemiBold 15. Secundario cancelable debajo, ghost.

Usado en: CreateApplicatorProfile, CreateOperator, CreateJob, ExecutionChecklist, UploadPdf, ReviewApplicator, ExecComplete — 11 pantallas.
Filter pillsFiltro

Tira horizontal de botones tipo pill para filtrar listas por estado. El seleccionado invierte fondo/texto. Fila scrolleable en horizontal si no cabe.

Usado en: MiCampo, ProducerRecipeList, JobList (Todos/Disponibles/Postulados), ProducerJobList (Publicados/Asignados/Cerrados).
Contact rowParticipantes

Avatar/emoji circular (44×44, fondo suave) + nombre bold + rol en muted + botón clay a la derecha. Separado por hairlines.

Usado en: ExecContact (4 roles visibles), JobDetail, OperatorDetail, ProducerJobDetail, ReviewApplicator.
Dropzone de archivoUpload

Border dashed con StrokeDashArray=6,4, emoji grande (📤), texto principal + caption. Estado post-selección muestra chip con nombre, tamaño y botón ✕ para quitar.

Usado en: UploadPdfPage, ExecDronePage (XLSX).
TimelineCronología

Lista vertical con línea vertical 1px a la izquierda, dots en cada evento, hora en monospace, descripción bold + meta muted. Destaca inicio/fin y pausas con color.

Usado en: ExecTimelinePage, ProducerRecipeDetail (historial municipal).
Avatar + nombreIdentidad

Círculo con emoji/inicial + nombre + rol debajo. Size del círculo varía: 44 en listas, 72 en detail, 96 en perfil propio. Fondo siempre *Soft, texto *Text.

Usado en: HomePage header, ProfilePage, ProducerProfile, OperatorAccount, JobDetail, OperatorDetail — 10 pantallas.
06

Estados, chips y badges

vocabulario visual de estado

Los estados se codifican por color + etiqueta. Hay tres familias: receta (6 estados), ejecución (5 estados), y postulación/trabajo (4 estados). Cada uno tiene su converter — StatusToColor, ExecStatusColor, ExecutionStatusToColor — que evita condicionales en el XAML.

Receta · StatusToColor
● Abierta Productor la creó, sin enviar al municipio. StatusDraft
● Pendiente Enviada al municipio, en revisión. StatusPending
● Aprobada Municipio firmó. Lista para ejecutar. StatusApproved
● Observada Municipio pide correcciones. StatusWarning
● Rechazada Municipio la negó. Terminal. StatusRejected
● Cerrada Ya se ejecutó / venció. StatusExpired
Trabajo · postulación
● Publicado Abierto en la bolsa, recibiendo postulaciones.
● Postulado El aplicador ya envió su postulación.
● Asignado Productor eligió aplicador. Listo para ejecutar.
● Cerrado Trabajo terminado o cancelado.
Toxicológico · ToxToColor
Ia Extremadamente peligroso. Morado grave.
Ib Altamente peligroso.
II Moderadamente peligroso.
III Ligeramente peligroso.
IV Normalmente no peligroso.
07

Inventario de pantallas

46 ContentPages · carpeta por dominio

Todas las vistas compilando en src/AgroConnect.Mobile/Views/, agrupadas por dominio. Columna sistema marca qué paleta usa: Sun = Sunlight (reconstruido), old = Colors.xaml clásico, mix = ambos.

#
Archivo
Rol
Sistema
Notas
01
LoginPageAccount/
Transv
Sun
Gradiente SunBrand top; form centrado; logo emoji.
02
RegisterPageAccount/
Transv
Sun
Alta con 3 campos + selector de rol.
03
RoleSelectionPageAccount/
Transv
Sun
Para usuarios multi-rol. 2–3 tarjetas grandes.
04
EditProfilePageAccount/
Transv
Sun
Datos básicos del usuario. Form section pattern.
05
ChangePasswordPageAccount/
Transv
Sun
Tres entries + CTA.
06
LoadingPageAccount/
Transv
Sun
Splash con logo centrado mientras resuelve sesión.
07
ExecutionPageExecution/
Aplic / Oper
Sun
Hub: header receta + 7 cards con chevron a sub-tabs.
08
ExecConditionsPageExecution/
Aplic / Oper
Sun
Clima + suelo + viento. KPI strip.
09
ExecProductsPageExecution/
Aplic / Oper
Sun
Lista de productos + badge tox + dosis.
10
ExecDronePageExecution/
Aplic / Oper
Sun
Carga de XLSX + parámetros de vuelo.
11
ExecTimelinePageExecution/
Aplic / Oper
Sun
Timeline pattern · eventos con hora y estado.
12
ExecContactPageExecution/
Aplic / Oper
Sun
Contact rows · 4 roles (productor, aplicador, operario, ing.).
13
ExecutionChecklistPageExecution/
Aplic / Oper
Sun
Lista de ítems con check antes de iniciar.
14
ExecCompletePageExecution/
Aplic / Oper
Sun
Firma GPS + resumen + PDF.
15
DriftResultPageExecution/
Aplic
Sun
Análisis de deriva post-ejecución. KPIs + mapa.
16
HomePageHome/
Aplic / Prod / Oper
Sun
Varía por rol. Header avatar + eyebrow + KPI strip + shortcuts.
17
NotificationsPageNotifications/
Transv
Sun
Lista agrupada por día; chevron a detalle.
18
JobListPageJobs/
Aplic
Sun
Bolsa · 3 filter pills (Todos/Disponibles/Postulados).
19
JobDetailPageJobs/
Aplic
Sun
Detalle + datos receta + contact rows + CTA postularse.
20
ProducerJobListPageJobs/
Prod
Sun
Vista productor · 3 pills (Publicados/Asignados/Cerrados).
21
ProducerJobDetailPageJobs/
Prod
old
Detalle productor · postulantes + elegir aplicador. Aún en paleta clásica.
22
CreateJobPageJobs/
Prod
old
Publicar trabajo desde receta. Paleta clásica.
23
ReviewApplicatorPageJobs/
Prod
Sun
Calificar aplicador post-ejecución · stars + comentario.
24
ProfilePageProfile/
Aplic
Sun
Cuenta del aplicador · avatar + lista con chevron.
25
OperatorAccountPageProfile/
Oper
Sun
Cuenta mínima para operario. Sólo editar + logout.
26
ProducerProfilePageProfile/
Prod
old
Perfil del productor. Pendiente migración Sun.
27
ApplicatorPublicProfilePageProfile/
Aplic
Sun
Cómo lo ve el productor · reseñas, rating, zonas.
28
CreateApplicatorProfilePageProfile/
Aplic
Sun
Alta de perfil público · wizard 3 pasos.
29
EditApplicatorPageProfile/
Aplic
old
4 secciones · datos, zonas, maquinaria, docs. Pendiente migración.
30
OnboardingPageProfile/
Aplic
Sun
Primer login · 4 pasos guiados.
31
OperatorListPageProfile/
Aplic
Sun
Mi equipo · lista de operarios de la empresa.
32
OperatorDetailPageProfile/
Aplic
Sun
Detalle operario · KPIs + historial + contacto.
33
CreateOperatorPageProfile/
Aplic
Sun
Alta de operario · form section.
34
MiCampoPageRecipes/
Prod
Sun
Hub productor · tabs Recetas/Lotes + filter pills por estado.
35
UploadPdfPageRecipes/
Prod
Sun
Dropzone pattern · extracción automática → preview editable.
36
ProducerRecipeListPageRecipes/
Prod
Sun
Recetas del productor · 6 filter pills por estado.
37
ProducerRecipeDetailPageRecipes/
Prod
Sun
Receta completa · productos, historial municipal, timeline.
38
RecipeGroupPageRecipes/
Prod
Sun
Agrupar recetas por lote/cultivo · selección múltiple.
39
LotDetailPageRecipes/
Prod
Sun
Historial del lote · KPIs + recetas aplicadas.
40
DirectAssignPageRecipes/
Prod
Sun
Elegir aplicador directamente (sin bolsa) · tarjetas con rating.
41
AssignMunicipalityPageRecipes/
Prod
Sun
Seleccionar municipio para aprobación.
42
ApplicatorRecipeListPageRecipes/
Aplic
Sun
Recetas asignadas al aplicador · pendientes/en curso/terminadas.
AdminHomePageHome/ · fuera de MVP
Admin
Dashboard de empresa aplicadora. Postergado.
AdminStatsPageHome/ · fuera de MVP
Admin
Estadísticas agregadas. Postergado.

Total MVP: 42 pantallas migradas a Sunlight · 4 pendientes (ProducerJobDetail, CreateJob, ProducerProfile, EditApplicator). Las 4 restantes son las últimas del flujo productor y la edición de perfil del aplicador. Las dos de Admin quedan afuera del MVP por acuerdo con producto.

El problema no es falta de sistema. Es que hay dos, y nadie los unificó.
— Hallazgo principal de la auditoría
08

Diagnóstico & decisiones pendientes

qué cerrar antes de v1

Seis hallazgos que surgieron del cruce código ↔ mockups. Cada uno tiene severidad (alta = rompe consistencia, media = deuda manejable, baja = mejora futura) y la evidencia concreta en XAML o en los HTML de mockup. Ninguno bloquea la release, pero todos tienen que estar respondidos.

01 Dos paletas sin fusionar
Severidad · alta

Colors.xaml define 35 tokens del sistema clásico (Primary, Background, Error*, Warning*…). Los XAML reales consumen ~113 tokens Sun* que no están declarados en ningún archivo del repo cargado. O se perdió un SunlightTokens.xaml en la migración, o está mergeado en otra branch. Cuatro pantallas siguen usando la paleta clásica (CreateJob, ProducerJobDetail, EditApplicator, ProducerProfile) — son las que van a romper primero si se toca el sistema.

Evidencia: LoginPage.xaml línea 14 → BackgroundColor="{StaticResource SunPaper}" StaticResource SunPaper no existe en Colors.xaml cargado XamlCompilation resuelve en runtime pero no en diseño

Decisión pendiente: ¿se adopta Sun* como oficial y se deprecan los tokens viejos, o se consolida bajo nombres semánticos (Primary, Surface…) dejando Sun* como capa de implementación? Recomendación: lo primero, más rápido y ya es lo que el equipo está usando en la práctica.

02 Tamaños por fuera de la escala
Severidad · media

La escala declarada tiene 8 niveles nombrados. En las pantallas aparecen tamaños en crudo (13.5, 15, 11.5) que no están en ningún token. La práctica — escribir el número y listo — convive con el sistema formal. El resultado: dos labels con el mismo rol visual terminan en 14 y 13.5 según quién escribió el XAML.

Evidencia: ProfilePage.xaml → FontSize="14" (token: FontSizeMd) ProducerProfilePage.xaml → FontSize="13.5" (fuera de escala) OperatorAccountPage.xaml → FontSize="15" (entre Md y Lg)

Decisión pendiente: ¿normalizar a tokens (y perder 1–2px de ajuste fino) o aceptar oficialmente los intermedios como FontSize13_5? Recomendación: normalizar, con regla lint que prohíba literales numéricos en FontSize.

03 Tipografía: serif aspiracional
Severidad · baja

Los mockups (Mockups *.html) usan Instrument Serif italic para títulos editoriales — es un gesto fuerte del lenguaje visual. La app compilada no tiene serif registrada; todo el hero se resuelve con InterBold + tamaño grande. El diseño en papel y el producto real tienen dos personalidades tipográficas.

Evidencia: MauiProgram.cs → ConfigureFonts: sólo Inter 4 pesos Styles.xaml → no hay FontFamily para serif Mockups HTML → Instrument Serif en 22 hero titles

Decisión pendiente: ¿agregar una serif al bundle (peso de 80–120kb × 2 pesos) o aceptar que los mockups están "más arriba" del producto real? Recomendación: dejarla como aspiracional de v2 — el bundle ya está justo.

04 CornerRadius duplicados
Severidad · media

Hay tokens RadiusSm · 8, RadiusMd · 12, RadiusLg · 20. Pero en los XAML aparecen CornerRadius="10", RoundRectangle CornerRadius="10" y CornerRadius="14" sin tocar los tokens. El 10 es especialmente común — es el "entre Sm y Md" implícito que se volvió estándar de facto para pills, chips e inputs.

Evidencia: Entry borders (≥12 pantallas) → RoundRectangle CornerRadius=10 Status chips (todas las listas) → CornerRadius=10 Botones → CornerRadius=10 (no 8 ni 12)

Decisión pendiente: ¿agregar RadiusChip · 10 al sistema o unificar todo a RadiusMd · 12? Recomendación: oficializar 10 como RadiusSm, subir 12 a RadiusMd y 20 a RadiusLg — es lo que ya está en uso.

05 Cuatro pantallas en la paleta vieja
Severidad · alta

De las 42 migradas al sistema Sunlight, quedan cuatro que todavía tiran de Colors.xaml clásico: CreateJobPage, ProducerJobDetailPage, EditApplicatorPage y ProducerProfilePage. Son las últimas del flujo productor + edición de perfil del aplicador. Mientras conviven, la app tiene dos estéticas según dónde navegás — especialmente visible cuando pasás de MiCampo (Sun) a CreateJob (clásico) en el mismo click.

Evidencia: grep "Primary\|Background\b" Views/*/*.xaml → 4 archivos consumen tokens clásicos → 42 archivos consumen Sun*

Decisión pendiente: ¿migrar antes de la release (estimado: 1 día por pantalla) o aceptar inconsistencia visible? Recomendación: migrar. Son cuatro archivos, ya están los patrones establecidos.

06 Iconografía mixta
Severidad · baja

La app usa tres estrategias de ícono en paralelo: emojis Unicode (🌾 📋 ☎ 📤), caracteres tipográficos ( U+203A como chevron en vez de ícono vectorial), y PNGs del sistema (home, settings). Elegir en cuál apoyarse afecta tamaño del bundle, accesibilidad y consistencia cross-platform — Android y iOS renderizan emojis distinto.

Evidencia: Emojis (~40 pantallas): 🌾 📋 ☎ 📤 🚜 🌱 U+203A como chevron (≥12 pantallas) PNGs: 7 ubicaciones (tab bar + splash)

Decisión pendiente: ¿adoptar un set de íconos vectoriales (Lucide, Phosphor) o mantener emojis? Los emojis aportan calidez editorial que alinea con el lenguaje papel hueso; una familia de íconos daría consistencia pero cambiaría el tono. Recomendación: mantener emojis, agregar sólo un set vectorial para navegación (tab bar, back, chevron) en v2.

Documentar lo que existe es el primer paso para decidir qué conservar.
— Cerrar los seis hallazgos antes de v1
AgroConnect·Diseño mobile·v1 abril 2026·46 pantallas·2 sistemas·6 decisiones pendientes