SalesDever Design System
Plataforma de assistentes de IA — voz e WhatsApp — com campanhas de ligações, follow-ups automáticos e CRM de leads. Este documento é a fonte viva da marca: todos os elementos abaixo são renderizados ao vivo com os tokens oficiais do produto, não são capturas de tela nem descrições aproximadas.
Logo
A marca é a letra S geométrica (setas entrelaçadas, referência a fluxo/automação) seguida do lockup completo "Salesdever". Existem duas famílias de arquivo: uma clara/branca para fundos escuros (uso padrão do produto) e uma roxa para fundos claros (e-mail, impressão, favicon em light mode).
Regra prática extraída da geometria real do menu do produto: o recuo mínimo em torno do símbolo é igual em todos os lados (top = left = right ≈ 24px num container de referência de 50px). Nunca encostar o símbolo em bordas, dividers ou texto.
O favicon troca automaticamente conforme o tema do sistema operacional do visitante: símbolo claro/branco em dark mode e símbolo roxo em light mode — a marca nunca aparece "sumida" contra o fundo da aba do navegador, em nenhum dos dois cenários.
| Arquivo | Fundo | Uso recomendado |
|---|---|---|
| assets/logo-full.png | Escuro | Lockup completo — sidebar expandida, telas de login/auth |
| assets/logo-compact.png | Escuro | Símbolo isolado — sidebar colapsada, favicon (dark mode) |
| assets/logoCompleta_roxo_semFundo.png | Claro | Lockup completo roxo — documentos, impressão, apresentações |
| assets/logo-compact-purple.png | Claro | Símbolo isolado roxo — favicon (light mode) |
| assets/logo-email-full.png | Branco sólido | Lockup roxo sobre branco — corpo de e-mail transacional |
| assets/logo-email-icon.png | Transparente | Ícone roxo — avatar/remetente de e-mail |
| assets/logo-email-dark.png | Escuro | Lockup claro — variante de e-mail em template dark |
Cores
Toda cor vem da paleta oficial de tokens do produto — nunca um hex solto, sempre uma variável
nomeada (var(--color-*)). Clique em qualquer amostra para copiar o valor.
Acento, não fundo total — ver seção Princípios.
Tipografia
Fonte única: Inter (variable font, Google Fonts) — o intervalo completo de peso
100..900 num único arquivo, sem cortes estáticos. Nunca usar Raleway, Poppins ou
qualquer outra fonte.
Grotesk humanista desenhado para telas — altura-x generosa, formas abertas, ótima legibilidade em tamanhos pequenos. A mesma fonte que renderiza um label de 10px e um número KPI de 56px na mesma tela, sem perder identidade.
Inter é uma variable font: não são 6 arquivos estáticos, é um único arquivo
interpolando o eixo wght de 100 a 900 em tempo real. Arraste o slider — o peso muda
instantaneamente, sem trocar de fonte nem carregar nada novo.
Todos os pesos que o produto de fato usa, na mesma frase, para comparar peso visual e decidir onde cada um se aplica.
font-variant-numeric: tabular-nums lining-nums já está ativo globalmente
via o token --numeric — todo número do produto herda dígitos de largura fixa por
padrão. Reforçar explicitamente em qualquer elemento
que exiba números dinâmicos (KPIs, timers, valores monetários), caso esse comportamento seja
sobrescrito por acidente num componente. Compare o alinhamento:
| Contexto | Peso | Tamanho |
|---|---|---|
| Número KPI grande | --weight-bold (700) | --text-kpi / --text-kpi-lg |
| Título de página (h1) | --weight-semibold (600) | --text-2xl |
| Título de card | --weight-semibold (600) | --text-xl |
| Subtítulo / label secundário | --weight-medium (500) | --text-lg |
| Corpo principal | --weight-regular (400) | --text-md |
| Label uppercase | --weight-medium (500) | --text-xs |
| Badge / timestamp | --weight-regular (400) | --text-xs / --text-2xs |
Mesma hierarquia tipográfica aplicada como no produto — renderizada ao vivo com os tokens reais, não maquete estática. Os labels ao lado marcam qual token cada texto usa.
Leads
Toda página tem exatamente um <h1>: 1.5rem / 600 / letter-spacing normal /
line-height herdado do body (1.6, sem override) / text-align left. Ícone antes do
<h1> é o erro mais recorrente no projeto — ver seção Do's & Don'ts.
h1 {
font-size: 1.5rem; /* --text-2xl */
font-weight: 600; /* --weight-semibold */
color: #ffffff;
letter-spacing: normal; /* nunca negativo */
/* sem line-height explícito — herda 1.6 do body */
margin: 0;
text-align: left; /* nunca center */
}
Glassmorphism — a receita
Todo card, modal e dropdown do produto usa a mesma receita: superfície semitransparente +
blur + borda de 1px sutil. Sem transform: translateY no hover — cards não flutuam.
.card {
background: linear-gradient(135deg,
rgba(255,255,255,0.06), rgba(255,255,255,0.02));
border: 1px solid rgba(255,255,255,0.12);
border-radius: 12px;
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
}
/* sem transform: translateY no hover */
Uma única receita para todo card, modal e dropdown do produto — sem variações soltas. Superfície semitransparente em gradiente sutil, borda de 1px quase invisível, blur forte por trás. É essa combinação, e só essa, que caracteriza o glassmorphism da marca.
background: linear-gradient(135deg, rgba(255,255,255,.06), rgba(255,255,255,.02)); border: 1px solid rgba(255,255,255,.12); border-radius: 12px; backdrop-filter: blur(20px);
Para superfícies que exigem blur mais acentuado — overlay de modal, por exemplo, onde o conteúdo por trás precisa ficar bem mais discreto — usa-se um blur ainda mais forte (24px) sobre um fundo levemente mais opaco, mantendo a mesma borda e o mesmo raio. É uma variação de intensidade da mesma receita, não uma receita diferente.
Espaçamento, raios e sombras
Espaçamento em grid de 4px. Nunca usar valores arbitrários como 14px, 22px, 37px.
--space-*)--radius-* + regra por elemento)| Elemento | Valor |
|---|---|
| Card / modal / painel | 12px |
| Botão / input / selector | 8px — nunca pill, nunca 0 |
| Badge / tag / status | 6px — nem pill, nem quadrado |
| Item de tab individual | 6px |
| Ícone de card | 10px — quadrado suavizado |
--shadow-*)Componentes
Galeria viva dos padrões reais usados no produto. Hierarquia de botões: criação (sólido lilás) > ghost escuro > destructive vermelho.
/* Criação — único botão com cor sólida */
background: #A594FF; color: #0a0014; border: 1px solid transparent;
height: 36px; padding: 0 18px; font-size: .875rem; font-weight: 600; border-radius: 8px;
/* hover: clareia, não escurece */
background: #BDB0FF;
/* Ghost — todas as outras ações (editar, filtrar, cancelar) */
background: rgba(165,148,255,.12); border: 1px solid rgba(165,148,255,.3); color: #fff;
/* hover */ background: rgba(165,148,255,.2); border-color: rgba(165,148,255,.55);
/* Destructive — deletar (ação irreversível) */
background: rgba(248,113,113,.1); border: 1px solid rgba(248,113,113,.25); color: #F87171;
/* hover */ background: rgba(248,113,113,.18); border-color: rgba(248,113,113,.45);
/* ❌ sem gradiente, sem translateY, sem box-shadow decorativo */
.sd-selector)Ícone fixo (tipo do seletor) + label (item selecionado, trunca) + chevron (interatividade).
.filter-bar select, .filter-bar input[type="text"] {
height: 36px; padding: 0 12px;
background: rgba(255,255,255,.04);
border: 1px solid rgba(255,255,255,.12);
border-radius: 8px; color: #fff; font-size: .8125rem; font-weight: 500;
}
/* hover */ background: rgba(255,255,255,.08); border-color: rgba(255,255,255,.22);
/* focus */ outline: none; border-color: rgba(165,148,255,.5);
Regra: border-radius: 6px; font-size: .72rem; font-weight: 600; — sem
text-transform: uppercase, sem letter-spacing, sem formato pill.
| Lead | Telefone | Status | Última interação |
|---|---|---|---|
| Maria Fernandes | +55 11 98888-1234 | Ativo | há 2h |
| João Pereira | +55 21 97777-5566 | Agendado | ontem |
| Carla Souza | +55 31 96666-9988 | Concluído | há 4 dias |
Background sempre hex sólido — nunca rgba com alpha < 1, nunca backdrop-filter. Transparência vaza o conteúdo por trás.
Regra obrigatória: modais com acordeão/expansão/carregamento async nunca centralizam verticalmente. A headline fica fixa no topo e o balão cresce só pra baixo.
Ícones
A biblioteca oficial de ícones do produto — a mesma usada em todas as telas, sempre em sincronia com o que está em produção.
Nunca usar emoji como ícone de interface. Nunca usar um SVG avulso, fora do padrão. Todo ícone novo entra primeiro na biblioteca oficial — sempre em grade 24×24, traço de 2px, no estilo da família Lucide — só depois é aplicado em qualquer tela.
Do's & Don'ts
Pares visuais lado a lado — o erro mais comum vs. o padrão correto.
currentColor.ICONS.trash — herda cor por currentColor, consistente em qualquer SO.#0a0014 / #0a0420).var(--color-bg) / var(--color-bg-alt) como base.font-size: 22px hardcoded + font-weight: 800 — fora da escala de --text-* e --weight-*.var(--text-xl) + var(--weight-semibold) — sempre token, nunca valor arbitrário.var(--gradient-brand) — sempre roxo/azul de marca, nunca outra combinação de cor.${ICONS.users} Leads
<h1>. Reportado como o erro mais comum em páginas novas — headline é só texto.Leads
<h1>.text-transform: uppercase + letter-spacing encontrado numa tela do produto — contradiz a regra de badges definida ao lado.border-radius: 6px — como definido para badges em geral.Princípios
O que guia toda decisão visual do SalesDever.
Tema escuro sempre
Não existe modo claro no produto. --color-bg (#0a0014) e --color-bg-alt (#0a0420) são a base de toda tela — o único uso de fundo claro é em ativos externos (e-mail, impressão).
Glassmorphism como linguagem de superfície
Cards, modais e dropdowns usam blur + transparência + borda sutil. Consistente em toda a plataforma — nunca um card "sólido" competindo com um "translúcido" na mesma tela.
Gradientes roxos como acento, não como fundo de tudo
--gradient-brand aparece em CTAs, glows ambiente e destaques pontuais — nunca preenchendo uma tela inteira ou um botão secundário.
Densidade de informação com respiro
Dashboards e tabelas priorizam mostrar dado, mas sempre no grid de 4px — nunca comprimido a ponto de perder legibilidade nem espaçado a esmo.
PT-BR na UI
Todo texto de interface, mensagem de erro e label é em português brasileiro — incluindo formatação numérica (ponto de milhar, vírgula decimal).