UX/UI — Referência & Sistema
Contextual help, data export, bulk actions, permissions, clipboard, changelog, dashboard widgets, error pages, file upload, pricing, status page, iconografia, acessibilidade, responsividade e design tokens.
Form Validation Patterns
Padroes de validacao de formularios com feedback visual claro e mensagens orientadas a acao. Validacao inline em tempo real com indicadores de sucesso e erro.
| Estado | Borda | Background | Icone | Texto |
|---|---|---|---|---|
| Neutro | #CBD5E1 | #FFFFFF | Nenhum | #94A3B8 — helper text |
| Focus | #3B82F6 | #FFFFFF | Nenhum | — |
| Valido | #10B981 | #F0FDF4 | Check verde | #10B981 — confirmacao |
| Erro | #DC2626 | #FFF5F5 | X vermelho | #DC2626 — como corrigir |
| Warning | #F59E0B | #FFFBEB | Alert amarelo | #F59E0B — aviso |
| Submit | Desabilitado enquanto houver erros. Mensagem abaixo: "Corrija os erros acima". | |||
Internationalization (i18n) Ready
Diretrizes para preparar componentes para internacionalizacao. Garante que layouts, textos e formatos se adaptem a diferentes idiomas e locales sem quebrar o design.
| Aspecto | Regra |
|---|---|
| Strings | Nunca hardcoded. Usar chaves de traducao (t('key')). Arquivos JSON por locale. |
| Formatacao | Sempre usar Intl API nativa: NumberFormat, DateTimeFormat, PluralRules. |
| Expansao | Projetar layouts para ate 200% de expansao de texto (DE, FI). Usar min-width: max-content. |
| Truncamento | text-overflow: ellipsis em navs e headers estreitos. Tooltip com texto completo. |
| RTL | Usar propriedades logicas CSS: margin-inline-start, padding-inline-end. |
| Fontes | Incluir Noto Sans para scripts CJK e Arabic no font stack. |
| Plurais | Usar Intl.PluralRules. Nao concatenar strings com numeros. |
| Locale default | pt-BR. Fallback: en-US. |
Contextual Help & Inline Documentation
Padroes de ajuda contextual que orientam o usuario sem tirá-lo do fluxo. Icones de ajuda com popovers, banners informativos e links para documentacao detalhada.
| Componente | Especificacao |
|---|---|
| Help icon (?) | 16px, circulo #E2E8F0, icone #64748B. Popover no hover/click. |
| Popover | Background #0F172A, texto #F8FAFC, border-radius 8px, seta 10px. Max-width 200px. |
| Info banner | Background #EFF6FF, borda #BFDBFE. Dismissible com X. Icone info azul. |
| Doc link card | Background #F1F5F9, icone livro, titulo + descricao. Link externo com icone. |
| Acessibilidade | role="tooltip" no popover. aria-label="Ajuda" no trigger. role="status" no banner. |
Data Export Patterns
Padroes para exportacao de dados em diferentes formatos. Modal de configuracao com opcoes de formato, colunas, filtros e preview antes de exportar.
| Elemento | Especificacao |
|---|---|
| Formatos | CSV, Excel (.xlsx), PDF. Card selecionavel com borda azul quando ativo. |
| Colunas | Pills com checkbox. Selecionadas: #1E3A5F + borda #3B82F6. |
| Info bar | Quantidade de registros e tamanho estimado. Background #1E293B. |
| Limite | Ate 10.000 registros por exportacao. Acima: agendar e enviar por email. |
| Feedback | Progress bar durante geracao. Toast de sucesso com link para download. |
Bulk Actions & Multi-select
Selecao multipla em tabelas e listas com barra de acoes flutuante. Permite executar operacoes em massa como excluir, mover, alterar status ou exportar itens selecionados.
| Elemento | Especificacao |
|---|---|
| Checkbox | 16px, border-radius 3px. Checked: #3B82F6. Indeterminate: dash icon. |
| Row selecionada | Background #EFF6FF. Font-weight 500. |
| Bulk bar | Sticky top, background #0F172A. Aparece com animacao slide-down. |
| Acoes | Botoes com icone + texto. Destructive: vermelho com fundo rgba. Requer confirmacao. |
| Select all | Header checkbox: seleciona pagina atual. Link "Selecionar todos os 1.247" para full. |
| Keyboard | Shift+Click para range. Ctrl+A para selecionar todos. Esc para limpar selecao. |
Permission & Role Indicators
Indicadores visuais de nivel de acesso e permissoes. Badges de role, estados disabled por falta de permissao, e tooltips explicativos para acoes restritas.
| Elemento | Especificacao |
|---|---|
| Admin | Gradient purple #7C3AED → #6D28D9. Unico badge com gradient (destaque maximo). |
| Gerente | Azul #60A5FA com borda. Background #1E3A5F. |
| Vendedor | Verde #4ADE80 com borda. Background #1A2E1A. |
| Acao bloqueada | Opacity 0.6, cursor not-allowed. Icone cadeado + badge "Requer [Role]". |
| Tooltip | Ao hover em acao bloqueada: "Voce precisa de permissao [Role] para [acao]". |
Copy to Clipboard Patterns
Botoes e interacoes de copiar com feedback visual instantaneo. Icone muda para check apos copiar, com toast opcional de confirmacao.
| Estado | Especificacao |
|---|---|
| Default | Icone clipboard, background #334155, stroke #94A3B8. |
| Hover | Background #475569. Transition 150ms. |
| Copiado | Icone check, background #064E3B, stroke #10B981. Borda verde no container. |
| Feedback | Texto "Copiado!" em #10B981 abaixo do campo. Fade in 200ms. Some apos 2s. |
| Dados sensiveis | Mascarar com ••••. Botao "Revelar" antes de copiar. Copiar envia valor real. |
Responsive Images & Media
Padroes para imagens e midias responsivas. Aspect ratios consistentes, lazy loading, placeholders, e tratamento de falha no carregamento.
| Contexto | Aspect Ratio | Formato |
|---|---|---|
| Produto (thumb) | 1:1 | WebP, 400x400 / 800x800 |
| Banner | 16:9 | WebP, 1200x675 / 2400x1350 |
| Galeria | 4:3 | WebP, 600x450 / 1200x900 |
| Avatar | 1:1 (circle) | WebP, 128x128 / 256x256 |
| Loading | Skeleton shimmer ou blur-up placeholder | Base64 thumbnail (< 1KB) |
| Erro | Fallback: icone + texto "Sem imagem" | SVG inline |
Changelog & Version History
Timeline de versoes e atualizacoes do sistema. Badges de status, diff visual de mudancas, e release notes com categorias de alteracao.
| Tag | Cor | Uso |
|---|---|---|
| NEW | Verde #16A34A / #F0FDF4 | Funcionalidade totalmente nova |
| UPD | Azul #2563EB / #EFF6FF | Melhoria em funcionalidade existente |
| FIX | Vermelho #DC2626 / #FFF5F5 | Correcao de bug |
| DEP | Amarelo #D97706 / #FEF3C7 | Funcionalidade descontinuada. Texto com line-through. |
| Timeline | Dot azul para versao atual, cinza para anteriores. Linha vertical #E2E8F0. | |
Settings & Preferences UI
Layout padrao para paginas de configuracao. Secoes agrupadas com toggle switches, selects e opcoes de salvamento automatico vs manual.
| Elemento | Especificacao |
|---|---|
| Layout | Sidebar 180px + conteudo fluido. Em mobile: nav vira tabs horizontais. |
| Nav ativa | Background #EFF6FF, texto #3B82F6, border-right 2px #3B82F6. |
| Toggle ON | Background #3B82F6, thumb branco a direita. Transition 200ms. |
| Toggle OFF | Background #CBD5E1, thumb branco a esquerda. |
| Auto-save | Mostrar "Salvo" em #10B981 apos alteracao. Sem botao salvar. |
Dashboard Widgets & KPI Cards
Cards de metricas para dashboards com valores, tendencias, sparklines e comparacao com periodo anterior. Projetados para visualizacao rapida de KPIs.
| Variacao | Cor | Icone |
|---|---|---|
| Positivo (up) | Verde #16A34A. Badge #F0FDF4. | Arrow up. Sparkline ascendente verde. |
| Negativo (down) | Vermelho #DC2626. Badge #FFF5F5. | Arrow down. Sparkline descendente vermelha. |
| Neutro (flat) | Cinza #64748B. Badge #F1F5F9. | Activity icon. Sem sparkline. |
| Meta (goal) | Azul #3B82F6. Progress bar. | Percentual no header. Texto "Faltam X em Y dias". |
| Sparkline | SVG polyline com fill gradient 15% opacity. 32px height. | |
Error Pages (404, 500, Maintenance)
Paginas de erro estilizadas com ilustracoes, mensagens amigaveis e acoes claras de recuperacao. Manter a identidade visual mesmo em situacoes de falha.
| Pagina | Icone | Acoes |
|---|---|---|
| 404 | Search com minus (#334155) | "Voltar ao inicio" (botao primario) |
| 500 | Alert triangle (#334155) | "Tentar novamente" + "Suporte" |
| 403 | Lock (#334155) | "Solicitar acesso" + "Voltar" |
| Maintenance | Settings gear (#F59E0B) | Countdown timer. Previsao de retorno em destaque. |
| Codigo | Font-size 6rem, color #1E293B (quase invisivel, decorativo). | |
File Upload & Drag-Drop Zone
Zona de upload com drag-and-drop, progress bar individual por arquivo, preview de imagem/PDF, limites de tamanho e estados de erro e sucesso.
| Estado | Visual |
|---|---|
| Drop zone idle | Borda dashed #CBD5E1, background #F8FAFC. |
| Drop zone active | Borda dashed #3B82F6, background #EFF6FF. Transition 200ms. |
| Uploading | Progress bar 4px #3B82F6. Percentual + tamanho. |
| Sucesso | Icone check verde. Texto "Concluido". |
| Erro | Background #FFF5F5, borda #FCA5A5. Mensagem de erro + "Tentar novamente". |
| Limites | Max 10MB por arquivo. Max 5 arquivos. Formatos: PNG, JPG, PDF, XLSX. |
Inline Editing (Edit-in-Place)
Edicao direta em tabelas e cards sem abrir modal. Click-to-edit transforma texto em input, com Save/Cancel inline e feedback visual de alteracao.
| Estado | Visual |
|---|---|
| View (hover) | Icone pencil aparece com opacity 0→1 (150ms). Cursor pointer. |
| Editing | Row background #FFFBEB. Input com borda #3B82F6 + focus ring. Save (check azul) + Cancel (X). |
| Saved | Row background #F0FDF4 por 2s. Valor em #16A34A bold. "Salvo" fade out. |
| Keyboard | Enter = salvar. Esc = cancelar. Tab = proximo campo editavel. |
| Undo | Toast com "Desfazer" por 5s apos salvar. Ctrl+Z tambem funciona. |
Comparison Tables & Pricing
Tabelas de comparacao de planos ou produtos com destaque visual para a opcao recomendada. Badges, check/cross icons e CTA por coluna.
| Elemento | Especificacao |
|---|---|
| Card destacado | Background #0F172A, borda #3B82F6 2px, scale 1.05, shadow azul. |
| Badge "Popular" | Background #3B82F6, texto branco, border-radius 10px, position absolute top -10px. |
| Check (incluido) | SVG check #16A34A, texto #334155. |
| X (excluido) | SVG X #CBD5E1, texto #94A3B8. |
| CTA destacado | Background #3B82F6 no plano popular. Secondary nos demais. |
Keyboard Shortcut Cheatsheet
Modal com todos os atalhos de teclado do sistema, agrupados por categoria. Acionado por ? ou pelo menu. Pesquisavel em tempo real.
| Elemento | Especificacao |
|---|---|
| Modal | Background #0F172A, max-width 460px, max-height 80vh com scroll. |
| Trigger | Tecla ? (quando nenhum input esta focado) ou menu Ajuda. |
| Kbd tag | Background #334155, borda #475569, border-radius 4px, font mono. |
| Categorias | Navegacao, Acoes, Edicao, Tabelas, Sistema. Uppercase, #94A3B8. |
| Busca | Filtro em tempo real. Ocultar categorias sem resultados. |
Status Page & System Health
Dashboard de status dos servicos do sistema com indicadores de uptime, historico de incidentes e badges de estado operacional.
| Estado | Dot | Badge | Banner |
|---|---|---|---|
| Operacional | #16A34A | Verde / #F0FDF4 | Verde / borda #BBF7D0 |
| Degradado | #F59E0B | Amarelo / #FFFBEB | Amarelo / borda #FDE68A |
| Fora do ar | #DC2626 + pulse | Vermelho / #FFF5F5 | Vermelho / borda #FCA5A5 |
| Manutencao | #3B82F6 | Azul / #EFF6FF | Azul / borda #BFDBFE |
| Uptime chart | Barras verticais por dia, 30 dias. Cor = pior estado do dia. Tooltip com %. | ||
Iconografia
A Sysled utiliza ícones no estilo outline (contorno) com espessura de 1.5px a 2px, alinhados ao estilo clean e moderno da marca. A biblioteca recomendada é a Lucide Icons ou Heroicons, ambas open-source e com estilo consistente.
Diretrizes de Ícones
| Propriedade | Valor |
|---|---|
| Estilo | Outline (contorno) |
| Stroke Width | 1.5px — 2px |
| Tamanho padrão | 24px x 24px |
| Tamanho pequeno | 16px x 16px |
| Tamanho grande | 32px x 32px |
| Cor padrão | currentColor (herda do texto) |
| Biblioteca recomendada | Lucide Icons / Heroicons |
Acessibilidade
A plataforma Sysled deve atender ao nível WCAG 2.1 AA como padrão mínimo de acessibilidade. Isso garante que a interface seja utilizável por pessoas com diferentes capacidades, incluindo deficiências visuais, motoras e cognitivas.
| Diretriz | Requisito | Implementação |
|---|---|---|
| Contraste de Texto | Mínimo 4.5:1 para texto normal, 3:1 para texto grande | Verificar com ferramentas como WebAIM Contrast Checker |
| Navegação por Teclado | Todos os elementos interativos acessíveis via Tab | Focus rings visíveis, ordem lógica de tabulação |
| Textos Alternativos | Todas as imagens com atributo alt descritivo | Alt text significativo, imagens decorativas com alt="" |
| ARIA Labels | Elementos interativos com labels acessíveis | aria-label, aria-describedby, roles semânticos |
| Tamanho de Toque | Mínimo 44px x 44px para elementos clicáveis | Botões, links e inputs com área de toque adequada |
| Hierarquia de Headings | Sequência lógica de h1 a h6 | Não pular níveis, um h1 por página |
Contraste das Cores Primárias
| Combinação | Ratio | Status |
|---|---|---|
| #1A1A2E sobre #FFFFFF | 16.2:1 | AAA |
| #2C3E50 sobre #FFFFFF | 10.7:1 | AAA |
| #2B6CB0 sobre #FFFFFF | 5.2:1 | AA |
| #FFFFFF sobre #2B6CB0 | 5.2:1 | AA |
| #FFFFFF sobre #1A1A2E | 16.2:1 | AAA |
Responsividade
Todas as interfaces da Sysled devem ser responsivas, adaptando-se fluidamente a diferentes tamanhos de tela. A abordagem recomendada é mobile-first, construindo a experiência base para telas menores e progressivamente aprimorando para telas maiores.
| Dispositivo | Breakpoint | Comportamento |
|---|---|---|
| Mobile | 360px+ | Layout em coluna única, menu hamburger, cards empilhados, tipografia reduzida |
| Tablet | 768px+ | Grid de 2 colunas, sidebar colapsável, tabelas com scroll horizontal |
| Desktop | 1024px+ | Layout completo com sidebar fixa, grid de 3-4 colunas, dashboards expandidos |
| Large Desktop | 1440px+ | Container centralizado (max 1200px), espaçamento ampliado, painéis laterais |
Diretrizes de Adaptação
Imagens e gráficos devem utilizar srcset para servir resoluções adequadas a cada dispositivo. Tabelas de dados devem implementar scroll horizontal em telas pequenas ou reorganizar-se em formato de cards. Menus de navegação devem colapsar em formato hamburger abaixo de 1024px. Modais devem ocupar tela cheia em mobile.
Design Tokens
Design tokens são as variáveis fundamentais do sistema de design da Sysled. Eles centralizam todas as decisões visuais — cores, tipografia, espaçamento, sombras, bordas e z-index — em um único ponto de verdade.
Cores
Tipografia
| Token | Valor | Uso |
|---|---|---|
| --font-heading | 'Montserrat', sans-serif | Títulos, labels, badges |
| --font-body | 'Inter', sans-serif | Corpo, inputs, botões |
| --font-mono | 'JetBrains Mono', monospace | Código, dados técnicos |
| --text-xs | 0.75rem (12px) | Captions, hints |
| --text-sm | 0.875rem (14px) | Corpo secundário, labels |
| --text-base | 1rem (16px) | Corpo principal |
| --text-lg | 1.25rem (20px) | Subtítulos |
| --text-xl | 1.5rem (24px) | Títulos de seção |
| --text-2xl | 2rem (32px) | Títulos de página |
Espaçamento
Sistema baseado em múltiplos de 4px, garantindo ritmo vertical e horizontal consistente.
Sombras
Border Radius
Z-Index
Transições
| Token | Valor | Uso |
|---|---|---|
| --transition-fast | 0.12s ease | Hover de botões, ícones |
| --transition-base | 0.18s ease | Transições gerais, foco |
| --transition-slow | 0.3s cubic-bezier(0.4,0,0.2,1) | Modais, sidebars, expansão |
| --transition-spring | 0.5s cubic-bezier(0.34,1.56,0.64,1) | Animações com bounce |
Exemplo de Implementação
/* Design Tokens — Sysled */ :root { /* Colors */ --color-blue-primary: #2B6CB0; --color-blue-medium: #3A8FD6; --color-cyan: #48C9B0; --color-dark-primary: #0F172A; /* Typography */ --font-heading: 'Montserrat', sans-serif; --font-body: 'Inter', sans-serif; /* Spacing (base: 4px) */ --space-1: 4px; --space-4: 16px; --space-8: 32px; /* Shadows */ --shadow-sm: 0 1px 3px rgba(0,0,0,0.06); --shadow-lg: 0 8px 40px rgba(0,0,0,0.12); /* Radius */ --radius-md: 8px; --radius-lg: 12px; /* Transitions */ --transition-base: 0.18s ease; }
Badges, Tags & Chips
Componentes compactos para comunicar status, categorias, contagens e filtros ativos. Essenciais para dashboards industriais, listas de pedidos e monitoramento de equipamentos na plataforma SYSLED.
Status Badges
Indicadores visuais para representar o estado atual de um item. Usam cores semanticas com dot animado para estados ativos.
Notification Badges (Contadores)
Indicam quantidade de itens pendentes. Usados em icones de navegacao, tabs e botoes.
Tags & Labels
Para categorizar itens em listas, tabelas e cards. Suportam icone e acao de remover.
Chips com Acao (Removiveis)
Usados em filtros ativos, seletores multi-valor e campos de busca. O usuario pode remover clicando no X.
Badges em Contexto — Exemplo Tabela
Como badges e tags aparecem dentro de componentes reais da plataforma.
Variantes de Tamanho
Especificacoes
| Propriedade | Status Badge | Tag/Label | Chip (Removivel) | Contador |
|---|---|---|---|---|
| Border-radius | 100px (pill) | 4-6px (rounded) | 100px (pill) | 100px (pill) |
| Padding | 5px 12px | 4px 10px | 5px 12px (left) 8px (right) | 0 4px |
| Font size | 0.75rem | 0.7rem | 0.72rem | 0.6rem |
| Font weight | 600 | 600 | 500 | 700 |
| Dot size | 7px (com animacao) | — | — | — |
| Min-width (contador) | — | — | — | 18px |
| Close button | Nao | Opcional | Sim (18px circle) | Nao |
| Max chars | ~20 | ~25 | ~30 (truncar com ...) | "99+" se >99 |
Paleta de Cores Semanticas
| Significado | Background | Border | Text | Dot |
|---|---|---|---|---|
| Sucesso / Online | #ECFDF5 | #A7F3D0 | #065F46 | #10B981 |
| Info / Em Producao | #EFF6FF | #BFDBFE | #1E40AF | #3B82F6 |
| Warning / Manutencao | #FFFBEB | #FDE68A | #92400E | #F59E0B |
| Erro / Critico | #FEF2F2 | #FECACA | #991B1B | #EF4444 |
| Neutro / Offline | var(--gray-100) | var(--gray-200) | var(--gray-600) | #94A3B8 |
| Purple / Pausado | #F5F3FF | #DDD6FE | #5B21B6 | #8B5CF6 |
| Pink / Urgente | #FFF1F2 | #FECDD3 | #9F1239 | #F43F5E |
| Teal / Setor | #F0FDFA | #99F6E4 | #134E4A | #14B8A6 |
Do's & Don'ts
Avatar & User Presence
Sistema de representacao visual de usuarios na plataforma. Inclui avatares individuais, grupos empilhados, indicadores de presenca online/offline e user cards compactos.
Avatar Individual — Tamanhos
Avatares usam imagem, iniciais como fallback, ou icone generico. Sempre circulares.
Fallback — Variantes de Cor
Quando nao ha foto, usar iniciais do nome com cores geradas a partir do hash do user ID. Paleta fixa de 8 cores:
Indicador de Presenca (Online Status)
Dot posicionado no canto inferior-direito do avatar. Usa borda branca para separar do fundo.
Avatar Group (Stack)
Avatares empilhados com sobreposicao de -8px. Usado para mostrar membros de equipe, responsaveis por tarefa, etc.
User Card — Mini Profile
Card compacto para hover/popover com informacoes basicas do usuario. Usado em mentions, assignees e comentarios.
Avatar em Contexto — Comentario
Verificar pressao da prensa hidraulica #12 — sensor reportou variacao acima do threshold. @rafael.silva pode checar no proximo turno?
Especificacoes
| Propriedade | XS (24) | SM (32) | MD (40) | LG (48) | XL (64) | 2XL (80) |
|---|---|---|---|---|---|---|
| Diametro | 24px | 32px | 40px | 48px | 64px | 80px |
| Font size (iniciais) | 0.45rem | 0.55rem | 0.7rem | 0.85rem | 1.1rem | 1.4rem |
| Presence dot | 8px | 10px | 12px | 14px | 16px | 18px |
| Border (dot) | 1.5px | 2px | 2px | 2.5px | 3px | 3px |
| Stack offset | -6px | -8px | -10px | -12px | -14px | -16px |
| Border (stack) | 1.5px | 2px | 2.5px | 2.5px | 3px | 3px |
| Uso tipico | Inline text | Tabelas | Cards, lists | Profiles | Headers | Profile page |
Cores de Presenca
| Status | Cor | Hex | Significado |
|---|---|---|---|
| Online | #10B981 | Usuario ativo na plataforma | |
| Ausente | #F59E0B | Inativo ha mais de 5 min | |
| Ocupado | #EF4444 | Nao perturbe / em reuniao | |
| Offline | #94A3B8 | Desconectado |
Regras de Fallback
| Prioridade | Fonte | Exemplo |
|---|---|---|
| 1a | Foto do perfil (URL) | Imagem redonda com object-fit: cover |
| 2a | Iniciais (nome + sobrenome) | "DF" para Demetrio Freitas |
| 3a | Icone generico (user) | SVG user icon em fundo cinza |
Do's & Don'ts
Theming & White-Label System
Arquitetura de tokens semânticos e temas dinâmicos para suportar múltiplas marcas (white-label) no ecossistema SYSLED — de clientes OEM a unidades regionais com identidade visual própria.
--blue-600: #0066CC
--orange-500: #FF6600
--gray-900: #1A1A2E
--radius-md: 10px
--color-brand-primary
--color-brand-accent
--color-bg-primary
--radius-component
--btn-bg: var(--color-brand-primary)
--btn-radius: var(--radius-component)
--card-border: var(--color-border)
--nav-bg: var(--color-bg-surface)
// theme.config.json { "name": "sysled-default", "displayName": "SYSLED Industrial", "colors": { "brand-primary": "#0066CC", "brand-accent": "#FF6600", "bg-primary": "#FFFFFF", "bg-surface": "#F0F4F8", "bg-elevated": "#FFFFFF", "text-primary": "#1A1A2E", "text-secondary": "#64748B", "border": "#E2E8F0", "success": "#10B981", "warning": "#F59E0B", "error": "#EF4444" }, "typography": { "heading": "Montserrat", "body": "Inter", "mono": "JetBrains Mono" }, "radius": { "sm": "6px", "md": "10px", "lg": "16px", "full": "100px" }, "logo": { "light": "/assets/logo-light.svg", "dark": "/assets/logo-dark.svg", "icon": "/assets/logo-icon.svg" } }
| Token | Tipo | Descrição |
|---|---|---|
--color-brand-primary | Semântico | Cor principal da marca — botões, links, foco |
--color-brand-accent | Semântico | Cor de destaque — badges, CTAs secundários |
--color-bg-primary | Semântico | Fundo principal da aplicação |
--color-bg-surface | Semântico | Fundo de cards e painéis elevados |
--color-bg-elevated | Semântico | Fundo de modais, dropdowns, popovers |
--color-text-primary | Semântico | Texto principal — headings, body |
--color-text-secondary | Semântico | Texto secundário — labels, captions |
--color-border | Semântico | Bordas de inputs, cards, dividers |
--radius-component | Estrutural | Radius padrão de componentes (botões, inputs) |
--font-heading | Tipografia | Família da fonte para headings |
- Usar tokens semânticos nos componentes
- Testar contraste WCAG em cada tema
- Gerar CSS custom properties em runtime
- Manter cores semânticas fixas (success, error)
- Validar logo em light E dark mode
- Hardcodar hex nos componentes
- Permitir primary = vermelho (conflita com error)
- Esquecer de remapear hover/active states
- Usar nomes de cor nos tokens (--blue → --primary)
- Ignorar modo escuro no white-label
Notification Preferences UI
Interface de configuração de notificações — canais (push, e-mail, SMS, in-app), frequência, agrupamento por categoria e controle granular por tipo de evento industrial.
| Componente | Spec | Nota |
|---|---|---|
| Toggle Switch | 36×20px, thumb 16px, radius 100px | ON = primary, OFF = gray-300 |
| Category Row | Padding 16px 24px, icon 28×28 | Ícone contextual com cor da categoria |
| Radio Button | 18px, dot 10px, border 2px | Selected = primary fill + border |
| Day Selector | 28×28px, radius 6px | Active = primary bg + white text |
| Time Input | Height 40px, radius 8px | Clock icon + valor em bold |
| Push Preview | Dark bg #1A1A2E, radius 16px | App icon 32×32, radius 8px |
| In-App Toast | White bg, unread dot 8px primary | Action buttons dentro do card |
| Obrigatório Badge | Error color, shield icon 10px | Impede desativar a categoria |
- Agrupar notificações por categoria funcional
- Marcar canais obrigatórios (segurança/crítico)
- Oferecer horário silencioso configurável
- Preview visual de cada canal no settings
- Permitir digest como alternativa ao tempo real
- Toggle global sem explicar o que pausa
- Desativar alertas críticos de segurança
- Listar eventos individuais (agrupar por tipo)
- Enviar SMS para eventos não-urgentes
- Ignorar fuso horário do usuário
Design System Governance & Changelog
Processos, papéis e documentação para manter o Design System SYSLED vivo, consistente e evolutivo — do pedido de novo componente ao versionamento semântico e changelog público.
- Remoção de componente
- Mudança de API (props)
- Renomear tokens
- Quebra de layout
- Novo componente
- Nova variante/prop
- Novo token
- Nova seção no brandbook
- Bug fix visual
- Ajuste de spacing
- Correção de typo
- Fix de acessibilidade
| Item | Regra | Nota |
|---|---|---|
| Versão Format | MAJOR.MINOR.PATCH | Semver estrito |
| Changelog Badge | NEW azul, ENH amarelo, FIX verde, DEP vermelho | Tags de 4px radius |
| Deprecation Notice | Mínimo 2 releases antes de remoção | Com migration guide |
| RFC Issue | Template obrigatório: Problema, Proposta, Use Cases | Label ds-rfc |
| Review Cycle | Máx 5 dias úteis para feedback | Escalation se expirar |
| Status Badge | Draft, Alpha, Beta, Stable, Deprecated | Na doc do componente |
| Breaking Change | Requer migration guide + codemod quando possível | Notificação via e-mail |
| Release Notes | Publicadas no changelog + Slack #ds-updates | Link para diff no Git |
- Documentar cada componente com status badge
- Seguir semver estrito para releases
- Deprecar antes de remover (2 releases min.)
- Manter changelog público e acessível
- Nomear ownership claro (RACI) por entrega
- Publicar componente sem revisão de UX
- Fazer breaking change em patch release
- Remover componente sem migration guide
- Ter dois componentes que fazem a mesma coisa
- Ignorar feedback de squads consumidores
Print & PDF Export Styles
Padrões de formatação para impressão e exportação PDF de documentos operacionais — Ordens de Serviço, Relatórios de Inspeção, Laudos Técnicos e Resumos de Manutenção. Layout otimizado para papel A4, com tipografia legível, hierarquia clara, cabeçalho corporativo e rodapé com rastreabilidade.
Page Layout — Ordem de Serviço
Layout A4 portrait com margens seguras para impressão. Cabeçalho com logo e dados da planta, corpo estruturado em seções, rodapé com paginação e hash de verificação.
Tipografia & Cores para Print
Regras de adaptação da UI para mídia impressa. Cores são convertidas para alto contraste P&B, gradients são substituídos por solid fills, e a tipografia é ajustada para legibilidade em papel.
Disponibilidade geral da planta: 94.2%. MTBF médio: 847h. Total de OS encerradas: 142.
Disponibilidade geral da planta: 94.2%. MTBF médio: 847h. Total de OS encerradas: 142.
@media print { /* Reset colors to high-contrast B&W */ body { color: #000; background: #fff; } h1, h2, h3 { color: #000 !important; } /* Remove non-printable UI */ .sidebar, .topbar, .fab, .toast, .modal-overlay, button:not(.print-btn) { display: none; } /* Page margins & breaks */ @page { size: A4 portrait; margin: 20mm 15mm 25mm 15mm; } .page-break { break-before: page; } table, figure { break-inside: avoid; } /* Badges: border instead of bg color */ .badge { background: transparent; border: 1.5px solid currentColor; } }
Export Toolbar
Barra de ação para exportação de documentos. Permite escolher formato, orientação, conteúdo incluído e opções de cabeçalho/rodapé antes da geração.
Templates de Relatório
Modelos pré-definidos para os documentos mais comuns do SYSLED. Cada template tem layout, seções e formatação otimizados para seu propósito.
Anatomia — Página PDF
Especificações
| Propriedade | Valor | Observação |
|---|---|---|
| Page size | A4 (210 × 297mm) | Portrait padrão; Landscape para relatórios com gráficos |
| Margins | 20mm top, 15mm sides, 25mm bottom | Bottom maior para rodapé + paginação |
| Font — headings | Montserrat 700, 14pt / 12pt / 10pt | Fallback: Arial Bold (para PDFs sem embed) |
| Font — body | Inter 400, 9pt | Line-height 1.5; fallback: Helvetica |
| Font — mono | JetBrains Mono 400, 8pt | Para IDs, hashes, códigos de equipamento |
| Color — print | #000 texto, #555 secundário | Badges: border em vez de background |
| Header height | auto, min 48px | Logo 32×32, OS ID, planta, data |
| Footer content | Versão app · Hash documento · Página X/Y | Hash SHA-256 truncado (7 chars) para auditoria |
| Page breaks | break-before: page em seções | break-inside: avoid em tabelas e figuras |
| Imagens max | 100% width, 300dpi recomendado | Fotos de inspeção redimensionadas para 50% width |
| QR Code | 64×64px, canto inferior direito | Link para versão digital no SYSLED |
| Geração | Server-side via Puppeteer/wkhtmltopdf | Async job com notificação ao concluir |
Do's & Don'ts
- Incluir hash de verificação no rodapé para rastreabilidade e auditoria
- Converter cores de UI para alto contraste preto/branco na impressão
- Usar
break-inside: avoidem tabelas, checklists e figuras - Oferecer preview antes de gerar — mostrar estimativa de páginas e tamanho
- Embedar fontes no PDF ou usar fallbacks seguros (Arial, Helvetica)
- Incluir QR code opcional para link à versão digital
- Não imprimir elementos de UI interativos (botões, dropdowns, tooltips)
- Não manter gradients ou sombras na versão impressa — usar solid fills
- Não permitir fontes abaixo de 8pt — compromete legibilidade em papel
- Não gerar PDFs de mais de 20 páginas sem paginação e índice
- Não omitir o cabeçalho corporativo — todo documento SYSLED deve ser identificável
- Não esquecer do
@media print— sempre testar em preview de impressão
Performance Budget & Metrics
Orçamentos de performance e métricas-alvo para garantir que a plataforma SYSLED carregue rapidamente em ambientes industriais — redes corporativas com latência variável, tablets em chão de fábrica e conexões 4G instáveis. Define limites para Core Web Vitals, bundle sizes, tempos de resposta de API e rendering budget por componente.
Core Web Vitals — Metas
Métricas do Google que impactam diretamente a experiência do operador. Cada métrica tem threshold verde (bom), amarelo (precisa melhorar) e vermelho (ruim).
Bundle Size Budget
Limites de tamanho por chunk e por rota para manter o carregamento rápido. Monitorado via CI/CD — builds que excedem o budget são bloqueados.
API Response Times
Tempos máximos de resposta por tipo de endpoint. Endpoints que excedem o P95 acionam alertas de monitoramento.
Component Render Budget
Tempo máximo de renderização por componente para manter 60fps. Componentes que excedem 16ms por frame causam jank visível para o operador.
CI/CD — Performance Gate
Pipeline de CI que valida budgets automaticamente a cada PR. Builds que violam limites são bloqueados com relatório detalhado de regressão.
Especificações
| Métrica | Budget | Observação |
|---|---|---|
| LCP | ≤ 2.5s (meta: 1.8s) | Medido no Dashboard (rota mais pesada) |
| INP | ≤ 200ms (meta: 85ms) | Interações críticas: filtro de OS, drag kanban |
| CLS | ≤ 0.1 (meta: 0.03) | Reservar espaço para imagens e skeletons |
| TTFB | ≤ 800ms (meta: 300ms) | CDN edge + server-side cache |
| Total bundle (gzip) | ≤ 250 KB | Initial load; lazy-load rotas secundárias |
| Route chunk max | ≤ 60 KB por rota | Code-splitting obrigatório por rota |
| API P95 (read) | ≤ 500ms | Listagens, detalhes, leituras de sensor |
| API P95 (write) | ≤ 500ms | CRUD de OS, checklists, anotações |
| API P95 (heavy) | ≤ 10s (async) | Relatórios PDF, exports, aggregações |
| Component render | ≤ 8ms por componente | Frame budget 16ms → 8ms para JS/render |
| Lighthouse Performance | ≥ 90 | Medido em throttled 4G slow (Moto G4) |
| CI gate action | Warn em 80%, Block em 100% | PRs bloqueados se budget estourado em 100% |
Do's & Don'ts
- Medir performance em dispositivos reais (tablet industrial, rede 4G)
- Usar code-splitting por rota — lazy-load módulos pesados
- Virtualizar listas e tabelas com mais de 100 items
- Implementar skeleton loading para manter CLS baixo
- Monitorar regressões via CI — bloquear PRs que excedem budgets
- Cache agressivo de assets estáticos (1 ano) com hash no filename
- Não importar bibliotecas inteiras — usar tree-shaking e imports seletivos
- Não renderizar componentes fora da viewport — usar Intersection Observer
- Não bloquear a main thread com cálculos pesados — usar Web Workers
- Não carregar fontes de forma síncrona — usar
font-display: swap - Não ignorar warnings de bundle size — investigar e resolver antes de mergear
- Não testar só em localhost — simular throttling e latência real
Error Codes & System Messages
Catálogo padronizado de códigos de erro, mensagens de sistema, alertas operacionais e feedback textual da plataforma SYSLED. Cada mensagem segue um formato consistente com código rastreável, tom de voz adequado ao contexto industrial, ação sugerida e nível de severidade.
Anatomia — Mensagem de Erro
Estrutura padrão para todas as mensagens de erro no SYSLED. Inclui ícone de severidade, código rastreável, título objetivo, descrição com contexto e ação sugerida.
Sua sessão expirou após 30 minutos de inatividade. Dados não salvos foram preservados no rascunho local.
Níveis de Severidade
4 níveis de severidade com cores, ícones e comportamentos distintos. Cada nível define persistência, som e prioridade visual.
Catálogo de Códigos
Referência completa dos códigos de erro do SYSLED, organizados por categoria. Formato: SYS-XYYY onde X = severidade (1-5) e YYY = código sequencial.
Mensagens de Sistema — Exemplos
Exemplos reais de mensagens do SYSLED, demonstrando tom de voz, formatação e ações sugeridas por contexto.
A ordem de serviço foi atualizada e o técnico Rafael Souza foi notificado.
Esta ação não pode ser desfeita. O histórico será mantido, mas a OS será marcada como cancelada e o técnico será removido.
Sensor VSN-104 (Torno CNC #04): 4.7 mm/s — limiar: 3.5 mm/s. Considere agendar manutenção preventiva.
SYSLED v4.3 está disponível com melhorias no dashboard de manutenção. Ver changelog →
Tom de Voz — Mensagens
Diretrizes de escrita para manter consistência em todas as mensagens do sistema.
Direto, sem jargão técnico
Informa o que aconteceu com os dados
Ação clara e objetiva
HTTP codes e jargão técnico
Casual demais, sem informação útil
Não oferece ação imediata ao usuário
Especificações
| Propriedade | Valor | Observação |
|---|---|---|
| Formato do código | SYS-XYYY | X = severidade (1-5), YYY = sequencial por categoria |
| Severidades | Info (1), Warning (3), Error (4), Critical (5) | 2 reservado para Debug (não exibido em UI) |
| Título max chars | 40 caracteres | Resumo objetivo, sem pontuação final |
| Descrição max chars | 120 caracteres | Contexto + consequência, 1-2 frases |
| CTA obrigatório | Sim para Error e Critical | Warning e Info: CTA opcional |
| Auto-dismiss | Info: 5s · Warning: 10s · Error/Critical: manual | Timer pausado no hover |
| Max toasts simultâneos | 3 | Mais antigos são empilhados com "+N" |
| Posição | Top-right para toasts; Inline para forms | Critical: banner full-width no topo |
| Border-left width | 4px | Cor = cor da severidade |
| Ícone tamanho | 36×36px container, 18px ícone | Border-radius: 10px |
| Tom de voz | Profissional, direto, sem jargão | Nunca culpar o usuário · Sempre sugerir ação |
| Acessibilidade | role="alert", aria-live="assertive" | Critical: aria-live="assertive"; Info: polite |
Do's & Don'ts
- Usar linguagem clara e acessível — o técnico precisa entender em segundos
- Incluir código rastreável (SYS-XXXX) para suporte rápido
- Sempre sugerir uma ação concreta — nunca só "erro ocorreu"
- Preservar dados do usuário quando possível (rascunho local)
- Usar cor e ícone de severidade consistentes em toda a plataforma
- Distinguir erros do usuário (validação) de erros do sistema (servidor)
- Não exibir stack traces ou HTTP codes na interface do usuário
- Não usar tom casual, humor ou emojis em mensagens de erro
- Não culpar o usuário — usar voz passiva ou impessoal quando apropriado
- Não mostrar erros genéricos ("algo deu errado") — sempre contextualizar
- Não empilhar mais de 3 toasts — agrupar notificações similares
- Não usar apenas cor para comunicar severidade — combinar com ícone e texto
Design System Glossary & Index
Referência unificada de termos, conceitos e componentes do SYSLED Design System. Inclui glossário técnico com definições objetivas, índice completo das 100 seções organizadas por arquivo, mapa de tokens e quick-reference cards para consulta rápida durante o desenvolvimento.
Glossário de Termos
Definições padronizadas dos termos usados ao longo do brandbook e no dia a dia do desenvolvimento SYSLED.
Variável CSS que armazena decisões de design (cores, espaçamento, tipografia). Permite temas e white-label sem alterar componentes.
Bloco reutilizável de UI com API definida (props). Pode ser atômico (Button) ou composto (DataTable).
Solução recorrente para um problema de UX composta por múltiplos componentes (ex: Search & Filter, Onboarding).
Registro de manutenção (preventiva ou corretiva) de um equipamento. Entidade central do SYSLED.
Mean Time Between Failures — tempo médio entre falhas de um equipamento. KPI crítico no dashboard SYSLED.
Placeholder visual que imita a forma do conteúdo enquanto os dados carregam. Reduz CLS e percepção de lentidão.
Ponto de transição do layout responsivo. SYSLED usa: Mobile (≤640px), Tablet (641-1024px), Desktop (≥1025px).
Técnica que confina navegação por Tab dentro de um modal/dialog, impedindo foco em elementos atrás do overlay.
Índice Completo — 100 Seções
Mapa de todas as seções do brandbook, organizadas por arquivo/parte. Cada entrada é um link navegável.
Quick Reference — Design Tokens
Cartões de referência rápida com os tokens mais usados no dia a dia do desenvolvimento.
Brandbook em Números
Especificações do Design System
| Propriedade | Valor | Observação |
|---|---|---|
| Arquivos do brandbook | 4 HTMLs estáticos | Fundamentos, Componentes, Patterns, Referência |
| Framework recomendado | React + TypeScript | Vite como build tool; Zustand para state |
| CSS Architecture | Design Tokens (CSS Custom Properties) | Temas via [data-theme] attribute |
| Font stack | Montserrat · Inter · JetBrains Mono | Google Fonts com font-display: swap |
| Icon system | Lucide Icons (outline, 1.5-2px stroke) | 24×24 default; 16×16 compact; 32×32 hero |
| Color system | Blue primary + Semantic (success/error/warning) | Dark mode via CSS custom properties override |
| Breakpoints | 640px · 768px · 1024px · 1280px | Mobile-first; tablet industrial como target primário |
| Border radius scale | 4px · 6px · 8px · 12px · 16px · 100px | 100px para pills/badges |
| Spacing base | 4px (increment de 4) | 4 · 8 · 12 · 16 · 20 · 24 · 32 · 48 · 64 |
| Accessibility target | WCAG 2.1 AA | AAA para contraste de texto principal |
| Performance budget | LCP ≤ 2.5s · Bundle ≤ 250KB | Medido em tablet industrial + 4G |
| Versioning | SemVer (Major.Minor.Patch) | Changelog em seção 84 |
Do's & Don'ts — Design System
- Consultar o brandbook antes de criar novos componentes — pode já existir
- Usar design tokens em vez de valores hardcoded
- Manter consistência visual entre todas as telas e módulos
- Testar em dark mode e em dispositivos industriais reais
- Contribuir com novos padrões via PR + documentação
- Contextualizar componentes para o domínio SYSLED (OS, sensores, equipamentos)
- Não criar componentes "one-off" — generalizar e adicionar ao sistema
- Não usar cores fora da paleta sem aprovação do design lead
- Não ignorar acessibilidade — WCAG AA é requisito mínimo
- Não pular testes de performance — cada PR deve passar pelo gate
- Não duplicar componentes existentes — estender via props/variants
- Não fazer breaking changes sem bump de versão major e migration guide