Design System MBL

Tokens visuais extraidos do design system oficial, mapeados para Tailwind CSS.

Cores

NomeHexClasse TailwindUso
Verde Primario#5CBCAEbg-mbl-verde / text-mbl-verdeBotoes, CTAs, header, links ativos
Verde Secundario#47D1BCbg-mbl-verde-secundarioGradientes, elementos graficos
Laranja Destaque#EB894Fbg-mbl-laranjaAlertas, destaques pontuais
Preto#000000bg-mbl-pretoTexto principal, headings
Branco#FFFFFFbg-mbl-brancoFundo de cards, texto em fundo escuro
Cinza Fundo#F9F9F9bg-mbl-cinza-fundoBackground da pagina
Cinza Input#F2F2F2bg-mbl-cinza-inputBackground de form fields
Cinza Rodape#EEEEEEbg-mbl-cinza-rodapeRodape

Tipografia

Fonte: Afacad (Google Fonts) — pesos 400, 500, 600, 700.

ClasseTamanhoLine HeightUso
text-display48px1.2Titulos hero/cover
text-h142px1.2Titulo principal da pagina
text-h230px1.3Titulos de secao
text-h322px1.3Titulos de cards/subsecoes
text-h418px1.4Subtitulos, labels
text-body16px1.6Texto corpo
text-small14px1.5Texto secundario
text-caption12px1.4Labels, metadata
text-overline10px1.4Categorias (uppercase)

Espacamento

Base de 4px. Use as classes padroes do Tailwind (p-1 = 4px, p-4 = 16px, etc.).

TokenValorUso
xs4pxGap entre icone e texto
sm8pxPadding de badges
md16pxPadding de form fields, grid gaps
lg24pxPadding de cards
xl32pxGap entre cards, margens de secao
2xl48pxMargem entre secoes principais

Border Radius

ClasseValorUso
rounded-sm4pxBadges pequenos
rounded-md6pxBotoes, form fields
rounded-lg12pxContainers, preview sections
rounded-xl20pxCards de conteudo
rounded-full9999pxAvatares, badges circulares

Sombras

ClasseUso
shadow-smSeparacao sutil de camadas
shadow-mdCards em estado default
shadow-lgCards em hover, modals
shadow-xlElementos flutuantes, dialogs

Icones

Biblioteca: Lucide React (outline, stroke 1.5-2px).

  • Tamanho padrao: 24x24 (navegacao, botoes)
  • Tamanho pequeno: 16x16 (inline com texto)
  • Tamanho grande: 32x32 (cards, hero)
  • Cor: herda do texto (currentColor)

Componentes UI

Componentes base em apps/web/src/components/ui/:

  • Button — Variantes: primary (usa var(--cor-primaria)), outline (borda branca), dark (preto). Background dinamico por nucleo.
  • Input — Com label, estado de erro, foco na cor primaria do nucleo
  • DataTable — Tabela reutilizavel com paginacao, busca com debounce, filtros, ordenacao de colunas. Layout responsivo: desktop exibe tabela, mobile exibe cards empilhados.

Sidebar Branding

A sidebar exibe a identidade visual do nucleo dinamicamente:

  • Logo: Imagem do nucleo carregada do Supabase Storage. Fallback para logo padrao MBL se nao configurada.
  • Nome do nucleo: Exibido abaixo do logo
  • Cor primaria: Itens ativos da sidebar usam var(--cor-primaria) como cor de texto e background sutil
  • Avatar do usuario: Exibido no footer da sidebar com nome e cargo

PushPermission Component

Banner que solicita permissao de notificacoes push ao usuario.

  • Icone: Bell (Lucide React)
  • Botoes: Ativar (solicita permissao do browser) e Agora nao (dismisses o banner)
  • Exibido apenas quando o browser suporta Push API e a permissao ainda nao foi concedida ou negada.

PWA Install Banner

Banner que sugere a instalacao do app como PWA.

  • Utiliza sessionStorage para nao re-exibir na mesma sessao apos dismiss.
  • Escuta o evento beforeinstallprompt do browser para acionar a instalacao nativa.
  • Em iOS (que nao suporta beforeinstallprompt), exibe fallback com instrucoes manuais: "Compartilhar → Adicionar a Tela de Inicio".

AI Chat Widget

Widget flutuante de chat com inteligencia artificial para coordenadores e administradores.

Botao Flutuante

  • Icone: Sparkles (Lucide React)
  • Posicao: canto inferior direito da tela (fixed bottom-6 right-6)
  • Visibilidade: apenas para usuarios com cargo COORDENADOR ou ADMINISTRADOR
  • Clique abre/fecha o painel de chat

Painel de Chat

  • Largura: 360px, altura adaptavel
  • Header com titulo e botao de fechar
  • Area de mensagens com scroll
  • Chips de sugestoes de perguntas (ex: "Quantos membros?", "Ranking CC")
  • Campo de input com botao de enviar

Tipos de Mensagem

  • text — Texto com suporte a markdown (tabelas, listas, negrito)
  • email_preview — Preview de email renderizado com assunto e conteudo HTML
  • action_confirm — Acao pendente com botoes de confirmar/cancelar (ex: creditar moedas, alterar cargo)

Theming Dinamico por Nucleo

Cada nucleo pode ter cores personalizadas que sao aplicadas dinamicamente via CSS variables:

CSS Variables

  • var(--cor-primaria) — Cor principal do nucleo, definida em dashboard/layout.tsx
  • var(--cor-secundaria) — Cor secundaria do nucleo, definida em dashboard/layout.tsx

Onde sao usadas

  • Button component: Usa var(--cor-primaria) como background color nos botoes primarios
  • Sidebar: Exibe o logo e nome do nucleo dinamicamente, com a cor primaria nos elementos ativos
  • Login page: Usa as cores do nucleo para criar um gradiente personalizado na tela de login
  • Headers e CTAs: Elementos de destaque utilizam a cor primaria do nucleo

Fallback

Quando o nucleo nao tem cor configurada, o sistema utiliza o verde padrao #5CBCAE como fallback para --cor-primaria.