SalesDever

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.

Tema escuro sempre Glassmorphism Inter (variable) PT-BR na UI
Fundamentos

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.

Fundos
Superfícies & bordas
Marca
Texto
Semânticas
Gradientes de marca

Acento, não fundo total — ver seção Princípios.

Fundamentos

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.

Inter

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.

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789
R$ % @ # & * ( ) + = / ? ! , . ; : “” ‘’ — €
Escala de tamanho
Variable font — arraste o peso

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.

Sua IA acabou de agendar 14 reuniões enquanto você tomava café.
400 Regular · = --weight-regular
Pesos — lado a lado

Todos os pesos que o produto de fato usa, na mesma frase, para comparar peso visual e decidir onde cada um se aplica.

Números tabulares

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:

Sem tabular-nums (dígitos proporcionais)
R$ 1.284,00
R$ 92,50
R$ 10.410,00
Com tabular-nums (padrão real do produto)
R$ 1.284,00
R$ 92,50
R$ 10.410,00
Regras de uso por contexto
ContextoPesoTamanho
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
Exemplos em contexto real

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 convertidos
label--text-xs / --weight-regular / --tracking-wide
1.284
número KPI--text-kpi / --weight-bold / --tracking-tight
↑ 12,4% essa semana
delta--text-xs / --weight-regular / --color-positive
RO
Renata Oliveira
nome--text-md / --weight-semibold
Perfeito, vou confirmar o horário com a equipe.
preview--text-sm / --weight-regular
há 9 min
timestamp--text-2xs / --weight-regular

Leads

h1 de página--text-2xl / --weight-semibold
342 contatos ativos — 12 aguardando follow-up hoje.
subtítulo--text-lg / --weight-medium
Headline de página — regra estrita

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 canônico
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 */
}
Fundamentos

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.

Demo ao vivo
Card de exemplo
Fundo com gradiente translúcido + blur(24px) + borda 1px. Passe o mouse — sem elevação, sem translate.
Snippet
Receita oficial — card padrão
.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 */
Receita canônica

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.

Fundamentos

Espaçamento, raios e sombras

Espaçamento em grid de 4px. Nunca usar valores arbitrários como 14px, 22px, 37px.

Espaçamento (--space-*)
Raios (--radius-* + regra por elemento)
ElementoValor
Card / modal / painel12px
Botão / input / selector8px — nunca pill, nunca 0
Badge / tag / status6px — nem pill, nem quadrado
Item de tab individual6px
Ícone de card10px — quadrado suavizado
Sombras (--shadow-*)
Aplicação

Componentes

Galeria viva dos padrões reais usados no produto. Hierarquia de botões: criação (sólido lilás) > ghost escuro > destructive vermelho.

Botões
Sistema de botões
/* 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 */
Selector / Trigger (.sd-selector)

Ícone fixo (tipo do seletor) + label (item selecionado, trunca) + chevron (interatividade).

Inputs & Selects
Padrão real — filter-bar
.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);
Cards
${ICONS.user}
Maria Fernandes
+55 11 98888-1234
Ativo
Leads novos
1.284
↑ 12,4% na semana
Follow-up agendado
Ligar novamente amanhã às 14h para confirmar orçamento.
Badges / status
Ativo Agendado Cancelado Concluído ${ICONS.message} Mensagem ${ICONS.phone} Ligação

Regra: border-radius: 6px; font-size: .72rem; font-weight: 600; — sem text-transform: uppercase, sem letter-spacing, sem formato pill.

Tabela
LeadTelefoneStatusÚltima interação
Maria Fernandes+55 11 98888-1234Ativohá 2h
João Pereira+55 21 97777-5566Agendadoontem
Carla Souza+55 31 96666-9988Concluídohá 4 dias
Popover / Dropdown

Background sempre hex sólido — nunca rgba com alpha < 1, nunca backdrop-filter. Transparência vaza o conteúdo por trás.

Modal com conteúdo expansível — âncora no topo

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.

Aplicação

Í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.

Regra obrigatória

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.

${ICONS.lightbulb} Clique no ícone pra copiar o SVG e colar direto no Figma (Ctrl+V), ou baixe como .svg.
Aplicação

Do's & Don'ts

Pares visuais lado a lado — o erro mais comum vs. o padrão correto.

${ICONS.close} Errado
Emoji como ícone de UI. Inconsistente entre SO/navegador, sem controle de peso/cor via currentColor.
${ICONS.check} Certo
SVG via ICONS.trash — herda cor por currentColor, consistente em qualquer SO.
${ICONS.close} Errado
Fundo claro com texto escuro — fora do brand.
Nenhuma tela do produto usa fundo claro. O tema é escuro sempre (#0a0014 / #0a0420).
${ICONS.check} Certo
Tema escuro consistente em toda a plataforma.
Sempre var(--color-bg) / var(--color-bg-alt) como base.
${ICONS.close} Errado
Título fora de escala
font-size: 22px hardcoded + font-weight: 800 — fora da escala de --text-* e --weight-*.
${ICONS.check} Certo
Título de card
var(--text-xl) + var(--weight-semibold) — sempre token, nunca valor arbitrário.
${ICONS.close} Errado
Gradiente arbitrário (vermelho→amarelo) sem relação com a marca.
${ICONS.check} Certo
var(--gradient-brand) — sempre roxo/azul de marca, nunca outra combinação de cor.
${ICONS.close} Errado

${ICONS.users} Leads

Ícone antes do <h1>. Reportado como o erro mais comum em páginas novas — headline é só texto.
${ICONS.check} Certo

Leads

Ícone vai no sidebar, botão ou badge — nunca no <h1>.
${ICONS.close} Encontrado em produção
Follow-up
Badge com text-transform: uppercase + letter-spacing encontrado numa tela do produto — contradiz a regra de badges definida ao lado.
${ICONS.check} Regra documentada
Follow-up
Sem uppercase, sem letter-spacing, border-radius: 6px — como definido para badges em geral.
Fechamento

Princípios

O que guia toda decisão visual do SalesDever.

${ICONS.eyeOff}

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).

${ICONS.image}

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.

${ICONS.zap}

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.

${ICONS.listOrdered}

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.

${ICONS.message}

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).

Configurar campanha

Exemplo de modal com acordeão — repare que a headline não se move ao expandir os itens abaixo.

Horário de disparo ${ICONS.chevronDown}
Definir janela de ligação entre 9h e 19h, respeitando fuso horário do lead e feriados nacionais.
Regras de retentativa ${ICONS.chevronDown}
Até 3 tentativas por lead, com intervalo mínimo de 2 horas entre chamadas não atendidas.
Assistente responsável ${ICONS.chevronDown}
Selecionar qual assistente de voz conduz a campanha — pode ser trocado a qualquer momento sem afetar leads já em fila.