--- type: workflow name: ux description: Revisar e otimizar UX de componentes e telas Vue (Frontend) scope: global updatedAt: "2026-06-01" --- # Workflow: Revisão de UX Guia de revisão e otimização de interfaces Vue 3 + Vuetify 3 no ecossistema Azteca — para usuários corporativos com baixa familiaridade tecnológica. --- ## Perfil do Usuário O público-alvo das interfaces é corporativo e diversificado em experiência técnica: - Gestores públicos e ambientais - Técnicos de campo - Consultores ambientais - Operadores administrativos **Premissa central**: o usuário não tem familiaridade avançada com tecnologia. A interface precisa ser autoexplicativa, sem dependência de treinamento prévio. --- ## Paleta de Cores Institucional Cor base: `#688C00` (verde floresta). Três escalas derivadas: **Verde floresta** (primária), **Âmbar terroso** (apoio/aviso), **Cinza musgo** (neutros). Semânticas independentes para garantir reconhecimento universal. ### Escala primária — Verde floresta | Token | Hex | Stop | Uso | |---|---|---|---| | `--cor-eli-primaria-bg` | `#EEF3D0` | 50 | Fundo de cards destacados, linhas ativas, hover suave | | `--cor-eli-primaria-zebra` | `#F6F9E8` | 30 | Linha zebrada de tabelas (quase branco esverdeado) | | `--cor-eli-primaria-suave` | `#BFC99C` | — | **Cabeçalho de tabela** — sage/olive mudo, sem limão, texto escuro | | `--cor-eli-primaria-clara` | `#D4E290` | 100 | Badges, chips, seleção, fundo de hover em listas | | `--cor-eli-primaria-media` | `#ADCC44` | 200 | Tags, indicadores secundários | | `--cor-eli-primaria-acao` | `#8AAF00` | 400 | Ação secundária, ícones ativos | | `--cor-eli-primaria` | `#688C00` | 600 | **Botões principais, links ativos, destaques — CTA principal** | | `--cor-eli-primaria-escura` | `#4A6500` | 800 | Hover em botões, bordas ativas, títulos com ênfase | | `--cor-eli-primaria-texto` | `#2E3F00` | 900 | Texto escuro sobre fundos claros da paleta primária | ### Escala de apoio — Âmbar terroso | Token | Hex | Stop | Uso | |---|---|---|---| | `--cor-eli-alerta-bg` | `#FAF3DF` | 50 | Fundo de banners de aviso | | `--cor-eli-alerta-clara` | `#F5DC8A` | 100 | Badges de atenção, chips de alerta | | `--cor-eli-alerta` | `#DDB847` | 200 | Ícones de aviso, bordas de alerta | | `--cor-eli-alerta-forte` | `#8C6A00` | 600 | Texto sobre fundo de alerta, status pendente | ### Escala neutra — Cinza musgo | Token | Hex | Stop | Uso | |---|---|---|---| | `--cor-eli-fundo` | `#F2F3EE` | 50 | Background geral de páginas | | `--cor-eli-borda` | `#D5D8CC` | 100 | Bordas padrão de containers | | `--cor-eli-borda-forte` | `#B5BAA8` | 200 | Bordas de foco, divisores | | `--cor-eli-neutro` | `#5E6553` | 600 | Textos secundários, ícones inativos | | `--cor-eli-neutro-escuro` | `#3E4436` | 800 | Texto de label, cabeçalhos de tabela | | `--cor-eli-superficie` | `#FFFFFF` | — | Cards, modais, popovers | ### Cores semânticas | Token | Hex | Uso | |---|---|---| | `--cor-eli-sucesso` | `#2e7d32` | Confirmações, status positivo | | `--cor-eli-sucesso-bg` | `#E8F5E9` | Fundo de mensagens de sucesso | | `--cor-eli-erro` | `#c62828` | Erros, ações destrutivas | | `--cor-eli-erro-bg` | `#FFEBEE` | Fundo de mensagens de erro | | `--cor-eli-info` | `#1565c0` | Informações auxiliares | | `--cor-eli-info-bg` | `#E3F2FD` | Fundo de banners informativos | ### Regras de contraste - Texto sobre `--cor-eli-primaria` (`#688C00`) deve ser **branco** (`#ffffff`) — contraste 4.6:1 ✓ - Texto sobre `--cor-eli-primaria-bg` (`#EEF3D0`) deve ser `--cor-eli-primaria-texto` (`#2E3F00`) — contraste 12:1 ✓ - Texto sobre `--cor-eli-primaria-escura` (`#4A6500`) deve ser **branco** (`#ffffff`) — contraste 7.1:1 ✓ - Texto sobre `--cor-eli-alerta-bg` (`#FAF3DF`) deve ser `--cor-eli-alerta-forte` (`#8C6A00`) — contraste 5.2:1 ✓ - Texto sobre `--cor-eli-primaria-suave` (`#BFC99C`) deve ser `--cor-eli-neutro-escuro` (`#3E4436`) — contraste ~12:1 ✓ - **⚠️ Token `secondary` no Vuetify 3 (`dark: false`)**: NUNCA configurar `secondary` no `vuetify.ts` com cor pastel clara (`#EAF2D3`, `#EEF3D0`), pois `variant="tonal"` e `variant="outlined"` usam a própria cor como texto sobre fundo branco, tornando botões e chips invisíveis. Usar sempre `--cor-eli-neutro-escuro` (`#3E4436`) ou `--cor-eli-primaria-escura` (`#4A6500`). - Sempre validar contraste mínimo de **4.5:1** (WCAG AA) para texto normal e **3:1** para texto grande (18px+ ou 14px bold). - **Fluxo Funcional e Arquitetura de Informação**: Para navegação visível ordenada pela tarefa, revelação progressiva (anti-*split-screen* `4+8` espremido), eliminação de jargões técnicos e quadros Kanban horizontais, aplicar em conjunto a skill **`ux-fluxo-funcional`** (`skills/ux-fluxo-funcional/SKILL.md`). - **Despoluição Visual e Hierarquia (*Refactoring UI*)**: Aplicar obrigatoriamente a regra **`refactoring-ui-hierarquia-despoluicao`** (`rules/refactoring-ui-hierarquia-despoluicao.md`) e consultar o livro de referência em `https://adm.paiol.idz.one/estaticos/Refactoring-UI-Steve-Schoger-Adam-Wathan.pdf`. --- ## Passos ### 1. Identificar o escopo da revisão Determinar qual componente, tela ou modal será revisado. Pode ser: - Um componente isolado (ex: `EliTabela`, `EliCartao`) - Uma página completa (ex: `PaginaCadastro.vue`) - Um modal ou drawer (ex: `EliTabelaModalFiltroAvancado.vue`) - Uma interação específica (ex: fluxo de filtro, paginação, menu de ações) ### 2. Mapear o estado atual Antes de alterar, entender o que já existe: - Ler o template (`