Transformar o reconhecimento corporativo em uma experiência criativa e personalizada que celebra a individualidade e inspira a inovação.
Reconhecimento
em cada detalhe.
Uma base compartilhada para criar experiências claras, consistentes e humanas — da operação à expressão da marca.
Uma base. Diferentes contextos.
Identidade visual, estratégia, expressão digital e comunicação têm fontes e papéis próprios. Esta implementação não representa aprovação institucional.
ERP e produto
Densidade, precisão e uma próxima ação clara.
AquisiçãoInstitucional
Hierarquia comercial, espaço e conversa consultiva.
RelacionamentoComunicação
Conteúdo e templates adaptados ao canal.
Como usar este material
Escolha o contexto que deseja construir e comece pelos tokens e componentes compartilhados. As referências de operação, institucional e comunicação mostram aplicações da mesma marca de premiação corporativa.
Para dúvidas de aplicação, procure o responsável pelo projeto e mantenha a próxima ação clara para cada público.
Criar significado.
Arquétipo Criador. Personalidade oficial: Inovadora, Visionária, Criativa, Personalizada e Inspiradora.
Ser referência em soluções de reconhecimento que combinam inovação, criatividade e personalização, liderando a transformação no modo como empresas valorizam seus colaboradores e clientes.
Transformar o reconhecimento corporativo em uma experiência criativa e inspiradora, que celebra a individualidade e impulsiona a inovação dentro das empresas.
| Inovação | Criar soluções surpreendentes e inspiradoras. |
|---|---|
| Personalização | Adaptar premiações às necessidades e cultura de cada cliente. |
| Inspiração | Motivar através de soluções que promovem crescimento. |
| Futuro | Antecipar e definir tendências no reconhecimento corporativo. |
| Individualidade | Celebrar o que torna cada colaborador e cliente único. |
Proposta de valor
Oferecemos soluções de reconhecimento corporativo que são inovadoras, criativas e personalizadas, transformando cada premiação em uma experiência única que celebra a individualidade e inspira a inovação.
Pilares: Inovação Criativa; Personalização Sob Medida; Experiência Inspiradora; Transformação do Reconhecimento; Soluções que Refletem o Futuro.
Inspire, reconheça, transforme.
Texto institucional independente; não integra graficamente o logotipo.
Síntese identificada da narrativa: reconhecer é uma oportunidade de celebrar individualidade, refletir cultura e criar experiências significativas. A transcrição integral e as implicações de UX estão em fundamentos de marca.
Clareza também é cuidado.
Consultivo na aquisição, objetivo na operação, acolhedor no atendimento. Cada mensagem explica o ocorrido e a próxima ação.
Não foi possível salvar.
Revise os campos indicados e tente novamente.
“Ops! Algo deu errado!!!”
Não identifica o problema nem orienta a recuperação.
Escrita por contexto
“Salvar rascunho” no ERP. “Falar com especialista” na aquisição. “Recebemos sua solicitação. Vamos verificar o contexto” no atendimento, apenas quando o recebimento tiver sido confirmado.
Use Troca Pontos em texto corrido, sentence case, R$ 1.000,00 e datas brasileiras. Evite slogans em erros, finanças e segurança.
Expressão comercial do guia: “Premiação corporativa para transformar reconhecimento em resultados.” É distinta da tagline. Números, taxas e integrações exigem fonte, data, contexto e validação antes de uso comercial.
Integridade em primeiro lugar.
Vetores oficiais externalizados do original eletrônico, preservados sem redesenho ou recoloração. Aplicação por um partial compartilhado.
Preservar
Proporção original e área livre equivalente à altura da letra “t”, medida na p.10 em 0,163254 da largura do wordmark — 27,75 px quando o wordmark tem 170 px. Se faltar espaço, reorganize o layout. O mínimo de 170 px é dois, e não um: veja abaixo.
O que o pacote distribui
O pacote web traz os quatro vetores do wordmark — logo-positive.svg, logo-negative.svg, logo.svg e logo-mono.svg —, extraídos do original eletrônico sem redesenho, e mantém os PNG apenas para e-mail, onde SVG não é confiável. Os AI e os PDF RGB continuam na pasta de referência externa.
O símbolo agora existe em vetor: simbolo.svg e as cinco variantes de ícone de aplicativo, extraídas da prancha 14 do guia de marca em SVG, recebido em 22/09/2026. O d do arco é cópia literal do original; a única normalização foi recortar o viewBox. O favicon foi regerado desse vetor; os PNG de 180, 192 e 512 continuam sendo os recortes do manual, porque a versão vetorial é idêntica a eles.
O símbolo
Prancha 14 do guia de marca, “Ícones de mídias sociais e app”, recebida em vetor em 22/09/2026. Fecha a pendência M2, aberta desde o início do projeto. O arco foi extraído sem redesenho: o atributo d é cópia literal do original e a única normalização foi recortar o viewBox ao bounding box analítico, medido por getBBox() no Chromium.
Para que serve. O símbolo não substitui o wordmark: ele existe para os espaços em que o wordmark não cabe com integridade — ícone de aplicativo, avatar de rede social, favicon e a marca compacta da sidebar recolhida. Onde couber o wordmark, use o wordmark.
Os cinco recipientes da prancha
A prancha desenha o arco branco sobre #6B0080 em cinco recipientes de 80,16 × 80,16, que variam só no raio do canto. Os grupos são os da própria prancha.
rx 0Outros
rx 2,83Outros
rx 8,5Android, iOS
rx 22,68Android, iOS
rx 40,08Redes sociais
O arco sozinho
simbolo.svg entrega o arco em currentColor, com o viewBox recortado à tinta (48,2 × 24,79). É o arquivo para compor fora dos recipientes da prancha; a cor vem de quem usa.
Exceção de área livre. A prancha 14 diz, com todas as letras, que os ícones de mídias sociais e app “são uma exceção às regras de área livre, sendo ajustados visualmente para se adaptar melhor a cada plataforma”. Dentro do recipiente vale o encaixe da prancha — o arco ocupa 60,13% da largura —, não a área livre da p.10; e o recipiente, sendo o próprio ícone, não recebe a margem da p.10 em volta. A regra da p.10, equivalente à altura da letra “t”, continua valendo para o wordmark.
A sidebar recolhida usa o símbolo no recipiente de rx 22,68, e não mais a marca compacta provisória que a divergência D01 registrava. Ver a regra escrita.
Co-branding com marca de cliente
Manual p.7. A composição é a única aplicação em que a marca sai do roxo institucional: preto sobre branco ou branco sobre preto, para não disputar com a identidade do cliente. A distância entre as marcas e o divisor é a largura de avanço da letra “o” — a tinta mais as laterais —, medida na prancha em vetor e guardada como fração, não como pixel. Com a prancha em vetor o divisor deixou de ser premissa e passou a ser norma medida.
Composição com marca de cliente. O manual p.7 fixa duas regras: a aplicação é preta sobre branco ou branca sobre preto, para garantir neutralidade visual, e a largura da letra “o” define a distância entre as logomarcas e o divisor. Com a p.7 em vetor (guia de marca em SVG, recebido em 22/09/2026), o divisor deixou de ser premissa: a arte o define. A Troca Pontos fica à esquerda, por decisão de marca de 22/09/2026 — a prancha mostra o contrário, e a divergência foi decidida a favor desta ordem, com a prancha à vista, em D32.
Proibido usar a versão colorida em co-branding. Nada de roxo institucional, gradiente ou grafismo na composição: apenas preto sobre branco ou branco sobre preto. A escolha da versão é do autor da peça, em função do fundo do cliente — o componente não segue o tema claro/escuro da página.
Preto sobre branco
Versão padrão, sobre superfície clara do cliente. Usa logo-mono.svg, a monocromática positiva.
Branco sobre preto
Versão sobre superfície escura do cliente. Usa logo-negative.svg, a negativa branca.
A medida, e de onde ela saiu
A distância não é um pixel fixo: é uma fração da largura da marca, então acompanha qualquer escala. A p.7 em vetor desenha a unidade — dois blocos em #E5E5E5, um de cada lado do divisor, com 27,14 de largura cada — e o wordmark da mesma prancha mede 226,77 de tinta. A tinta da letra “o” mede 23,51. Os dois números não são o mesmo, e o que a prancha aplica é o maior.
A medida é a largura de avanço do “o”, não a largura da tinta: o avanço é a tinta mais as duas laterais da letra, isto é, o passo com que a letra anda na composição. É assim que se lê a frase “a largura da letra ‘o’ define a distância entre as logomarcas e o divisor”. O espaço aplicado na arte confirma: da borda direita da caixa do cliente ao divisor vão 27,33; do divisor à tinta do wordmark, 27,74. Os dois batem com 27,14 e não com 23,51.
Correção de 22/09/2026. A primeira entrega do componente usou 0,103672 — a tinta do “o” (23,51 ÷ 226,77), medida em logo-mono.svg antes de a prancha chegar em vetor. O valor correto é 0,119681 (27,14 ÷ 226,77), o avanço. Os dois ficam publicados aqui e declarados no CSS para que a troca seja rastreável.
| Medida na prancha | Unidades | Fração da largura | Onde entra |
|---|---|---|---|
| Bloco cinza da p.7 = avanço do “o” | 27,14 | 0,119681 | Distância entre marcas e divisor (--tp-cobrand-gap) |
| Tinta da letra “o” | 23,51 | 0,103672 | Não aplicada. Fica registrada porque foi o valor anterior |
| Altura do divisor | 56,69 | 0,250000 | Altura da régua (--tp-cobrand-rule-height) |
| Espessura do divisor | 1,00 | 0,004410 | Espessura da régua (--tp-cobrand-rule-width) |
| Caixa do wordmark (altura) | 34,48 | 0,152028 | Altura mínima da área reservada do cliente |
| Altura da letra “t” | — | 0,125068 | Área livre externa do conjunto (p.10) |
O divisor: era premissa, virou norma medida
A entrega anterior registrava o divisor como premissa, porque o PDF do manual mostrava apenas uma régua vertical sem cota: régua de 1 px lógico na largura mínima da marca, na mesma tinta do conjunto, com a altura da caixa do wordmark. A premissa foi substituída por medição, não por opinião. A p.7 em vetor define os três valores:
- Espessura:
1unidade, ou0,004410da largura do wordmark. - Cor:
#C6C6C6— e é a mesma nas duas versões, a positiva e a negativa. O divisor não acompanha a tinta do conjunto. - Altura:
56,69, ou0,250000da largura do wordmark. Antes era0,152028, a altura da caixa do wordmark; a régua cresceu.
Única premissa que sobra: a posição vertical. A arte não é conclusiva — o divisor fica cerca de 2,5 unidades abaixo do centro do conjunto na versão positiva (2,49) e 2,3 na negativa (2,32), mesmo sentido, sem fração redonda que sustente norma. O componente centraliza no conjunto e registra isso como premissa.
Entre as duas marcas vale a p.7, que é a regra específica do co-branding; a área livre da p.10, equivalente à altura da letra “t”, governa as bordas externas da composição. Ver a regra escrita.
A ordem das marcas, e a divergência consciente
O componente põe a Troca Pontos à esquerda. A p.7 em vetor mostra o arranjo contrário — cliente à esquerda, Troca Pontos à direita —, nas duas versões. A divergência foi levada a Guilherme Sydow com a prancha à vista, e ele manteve a Troca Pontos à esquerda em 22/09/2026. Neste ponto o sistema não reproduz a ilustração do manual, por decisão de quem homologa — e é assim que fica registrado em D32, para que ninguém corrija por engano depois.
A troca está preparada para ser de uma linha: a classe .tp-cobrand-cliente-primeiro reescreve --tp-cobrand-flow e --tp-cobrand-flow-stack, e inverte a ordem na horizontal e no empilhamento sem tocar no markup nem no resto do componente. Em tela estreita a composição empilha na ordem corrente e a régua gira sem mudar de comprimento.
Os dois mínimos da p.11
A prancha imprime “6 cm | 170 px” duas vezes, e cada régua mede um objeto diferente. Na versão principal os 170 px são o wordmark nu (170,11 un medidos). Na preferencial são a caixa cheia (170,08 un), com o wordmark em apenas 128,23 un dentro dela — e a caixa é exatamente o wordmark mais a área de proteção (128,23 + 2 × 20,93 = 170,09). Ou seja, a versão preferencial é o wordmark dentro da própria área livre, preenchida. O sistema declara os dois em vez de fundir um no outro.
.tp-brand-lockup-min; tokens --tp-logo-lockup-width e --tp-logo-lockup-wordmark..tp-brand aplica sozinho — acima do mínimo da preferencial, nunca abaixo. Token --tp-logo-width.Correção de 22/09/2026. A área de proteção era 24px a 170 px, ou 0,14118 — 13,5% abaixo da norma. A p.10 desenha quatro “t” cinza encostados entre a tinta do wordmark e o retângulo de área livre: cada um mede 48,47 num wordmark de 296,90, ou 0,163254; a p.11 confirma em 20,93 ÷ 128,23 = 0,163224. A derivação anterior, pela altura do “t”, também não fechava — e o vetor mostra por quê: o “t” marcador da prancha não é o “t” do wordmark. Mede 48,47 × 20,36 contra 37,13 × 15,59, é 1,3053× maior (e 1,3060 no outro eixo — o mesmo fator nos dois). O token virou fração: --tp-logo-protection-ratio.
Versões secundárias negativas: cinco fundos, nomeados
A p.8 escreve, literalmente, “As versões secundárias negativas são aplicadas em branco sobre fundos roxos” — e não generaliza: desenha cinco faixas, cada uma com o wordmark branco. Não são as cinco primárias: são uma rampa própria, publicada como --color-brand-ramp-1..5. Os passos 2, 3 e 4 só existem nesta rampa e não entram na paleta de 30.
#4B005A Russian violet#65007A#7E0098#9700B5#AF00D1Uma divergência que nunca existiu. Durante quase todo o projeto ficou registrado que “o texto da p.8 diz fundos azuis e a ilustração mostra roxo” (divergência D02), e uma pergunta foi gasta com a marca para resolver isso. A p.8 em vetor escreve roxos, e a palavra “azul” não ocorre em nenhuma das 32 pranchas: o erro era da nossa transcrição do PDF, não do manual. A resposta de 22/09/2026 confirmou o que o guia já dizia. Fica escrito porque é o tipo de erro que precisa ficar visível para não voltar.
A p.8 desenha a quinta faixa em #B000D3 e outras quatro pranchas desenham a mesma parada em #AF00D1 — diferença de 1/255 em R e 2/255 em B, arredondamento do Illustrator. O sistema publica #AF00D1, que é o valor que aparece em cinco pranchas.
A positiva externalizada utiliza Russian Violet; a correspondência da variante ao original eletrônico deve ser homologada. Ver inventário e limites.
Expressão e leitura.
Passo para expressão institucional. Inter para interface e leitura. A Passo acompanha o pacote em cinco arquivos WOFF servidos localmente — quatro pesos estáticos e um variável; a Inter não é distribuída e usa o fallback do sistema.
Cada reconhecimento
tem uma história.
Interface · intenção Inter
Encontre o registro, revise os detalhes e escolha a próxima ação.
Legenda / dados: 15/09/2026 · DEMO-001 · R$ 1.000,00
Pesos do manual: Thin, Light, Regular, Medium, Bold e Black, com itálicos. O pacote entrega Regular, Medium, SemiBold e Bold estáticos mais o arquivo variável de 100 a 800; Thin, ExtraLight e os itálicos não acompanham os arquivos, então qualquer itálico em tela é sintetizado pelo navegador. A licença web da Passo foi confirmada pela marca em 22/09/2026 (Guilherme Sydow): cobre a hospedagem própria em site e o uso embarcado em aplicativo. Escritório: Arial em Google Docs/Slides; Aptos ou Arial no Microsoft 365. Configurar fontes autorizadas.
Escala tipográfica · treze degraus
Treze degraus cobrem do hero institucional à legenda de uma célula. Passo assina expressão e título; Inter carrega leitura, rótulo e dado. O tracking fecha conforme o tamanho cresce — em display-lg chega a −0.055em — e abre nos degraus pequenos em caixa alta, onde a letra precisa de ar.
Cada amostra abaixo é renderizada com a classe real do sistema. Se a fonte Passo não estiver disponível no ambiente, o fallback declarado assume e a métrica muda — é o comportamento esperado, não um defeito da escala.
Reconhecer é criar.
--tp-type-display-lg-*| Família | Tamanho | Peso | Entrelinha | Tracking | Caso de uso |
|---|---|---|---|---|---|
| Passo | clamp(2.75rem, 7vw, 6.5rem) | 700 | 1.02 | -0.055em | Hero institucional. Uma ocorrência por página. |
Cada resgate conta uma história.
--tp-type-display-md-*| Família | Tamanho | Peso | Entrelinha | Tracking | Caso de uso |
|---|---|---|---|---|---|
| Passo | clamp(2.25rem, 5vw, 4.5rem) | 700 | 1.06 | -0.045em | Abertura de campanha e capa de peça editorial. |
Programas de reconhecimento
--tp-type-heading-xl-*| Família | Tamanho | Peso | Entrelinha | Tracking | Caso de uso |
|---|---|---|---|---|---|
| Passo | clamp(2rem, 3.5vw, 3rem) | 700 | 1.1 | -0.04em | Título de página institucional. |
Resgates do trimestre
--tp-type-heading-lg-*| Família | Tamanho | Peso | Entrelinha | Tracking | Caso de uso |
|---|---|---|---|---|---|
| Passo | clamp(1.75rem, 2.8vw, 2.25rem) | 700 | 1.15 | -0.035em | Título de seção do portal e de tela do produto. |
Catálogo de benefícios
--tp-type-heading-md-*| Família | Tamanho | Peso | Entrelinha | Tracking | Caso de uso |
|---|---|---|---|---|---|
| Passo | 1.5rem | 700 | 1.2 | -0.025em | Título de cartão, painel e diálogo. |
Parceiros credenciados
--tp-type-heading-sm-*| Família | Tamanho | Peso | Entrelinha | Tracking | Caso de uso |
|---|---|---|---|---|---|
| Passo | 1.125rem | 700 | 1.3 | -0.015em | Subtítulo dentro de um cartão ou de um bloco de formulário. |
A colaboradora acumula pontos por metas atingidas e resgata benefícios no catálogo de parceiros.
--tp-type-body-lg-*| Família | Tamanho | Peso | Entrelinha | Tracking | Caso de uso |
|---|---|---|---|---|---|
| Inter | 1.125rem | 400 | 1.6 | 0 | Parágrafo de abertura em página institucional. |
O saldo é atualizado a cada campanha encerrada e fica disponível para resgate em até dois dias úteis.
--tp-type-body-md-*| Família | Tamanho | Peso | Entrelinha | Tracking | Caso de uso |
|---|---|---|---|---|---|
| Inter | 1rem | 400 | 1.5 | 0 | Texto corrido padrão. |
Pontos expiram doze meses após o crédito. O colaborador recebe aviso trinta dias antes.
--tp-type-body-sm-*| Família | Tamanho | Peso | Entrelinha | Tracking | Caso de uso |
|---|---|---|---|---|---|
| Inter | 0.875rem | 400 | 1.5 | 0 | Texto de interface: tabela, cartão, painel de contexto. |
Nome do programa
--tp-type-label-lg-*| Família | Tamanho | Peso | Entrelinha | Tracking | Caso de uso |
|---|---|---|---|---|---|
| Inter | 0.9375rem | 600 | 1.35 | 0 | Rótulo de campo em formulário espaçoso. |
Saldo de pontos
--tp-type-label-md-*| Família | Tamanho | Peso | Entrelinha | Tracking | Caso de uso |
|---|---|---|---|---|---|
| Inter | 0.875rem | 600 | 1.35 | 0 | Rótulo de campo padrão e título de célula composta. |
Campanha ativa
--tp-type-label-sm-*| Família | Tamanho | Peso | Entrelinha | Tracking | Caso de uso |
|---|---|---|---|---|---|
| Inter | 0.75rem | 700 | 1.4 | 0.04em | Eyebrow, cabeçalho de grupo e chip. Sempre em caixa alta. |
Dados fictícios · atualizado em 15/09/2026
--tp-type-caption-*| Família | Tamanho | Peso | Entrelinha | Tracking | Caso de uso |
|---|---|---|---|---|---|
| Inter | 0.6875rem | 500 | 1.4 | 0.02em | Legenda, metadado e nota de rodapé de componente. |
Regras de combinação
- Pule no máximo um degrau entre um título e o texto que ele abre. Saltos maiores quebram a percepção de hierarquia.
- Não use dois degraus de display na mesma tela.
- Rótulo em caixa alta só em
.tp-label-sm; os demais degraus preservam sentence case. - Números em tabela e em valor financeiro usam
.tp-numeric, que ativa o algarismo tabular e alinha a coluna pela direita. - Nunca substitua peso por cor para indicar hierarquia: o contraste de cor tem outra função no sistema.
Roxo como ponto de encontro.
Os cinco primitivos oficiais permanecem íntegros. Funções semânticas adaptam pares de texto, fundo e borda a cada tema.
#6B0080#4B005A#81009B#D500FF#FAE4FFRegra de uso das secundárias — manual pp.27–30. As 20 cores secundárias só podem aparecer em materiais específicos que necessitem desse uso, como gráficos, tabelas e planilhas, e somente sobre fundo da paleta de roxos institucionais ou fundos claros. Não são cor de superfície, de marca nem de interface. Exceção das pp.31–32: Russian violet não deve ser aplicada em fundo escuro. Os cinco cinzas da p.33 estão fora dessa restrição: servem chamadas, textos, elementos de interface e áreas de fundo.
Os estados de sucesso, erro e alerta e o CTA amarelo reutilizam secundárias em papel de interface. São extensões digitais registradas, não a norma do manual. O CTA amarelo foi aprovado pela marca em 22/09/2026 (Guilherme Sydow) como extensão digital; os estados semânticos seguem sujeitos a revisão de marca. Cor nunca comunica o estado sozinha. A restrição viaja com o token: tokens.json publica o campo restriction em cada --color-palette-*, e src/js/brand-tokens.js traz a mesma regra em secondaryUse.
Secundárias e cinzas oficiais
Manual pp.27–33. As 20 primeiras estão sob a restrição acima — gráficos, tabelas e planilhas, sobre roxo institucional ou fundo claro. Os cinco cinzas finais (Davys, Battleship, Silver, Platinum, Smoke) não estão.
#FF5900#D04300#F35400#FF7300#FFF3ED#FF0056#DB0049#EC004F#FF80AA#FFDBE7#FFCE00#FFC400#FFD324#FFDB49#FFF4C8#00ECB5#009572#00AA83#00C99A#EBFFFA#575757#9B9B9B#C6C6C6#E5E5E5#F4F4F4Gradientes oficiais
Manual p.34: cinco pares, usados de forma sutil para complementar as primárias. Cada um é um token expresso por cores de marca — nunca por hexadecimal literal — e tem utilitário correspondente bg-tp-gradient-*.
--tp-gradient-deep--tp-gradient-primary--tp-gradient-vivid--tp-gradient-royal--tp-gradient-brightCorreção de 22/09/2026: três dos cinco estavam invertidos. A p.34 desenha cada par como uma coluna que corre de cima para baixo. Lidos os stop do SVG, --tp-gradient-deep, --tp-gradient-primary e --tp-gradient-vivid começavam pela ponta escura da rampa — o inverso do que a prancha mostra. royal e bright já conferiam. Os cinco passam a começar pela ponta clara, que é o extremo de que a decisão de cor de texto sobre gradiente depende. Inverter a direção não muda o par de cores: nenhum par de contraste medido mudou de valor.
O fundo escuro que o manual usa para provar a regra
A p.32 valida as 25 secundárias sobre um retângulo escuro e marca uma única exceção com o símbolo de proibição: Russian violet. Esse retângulo é #40004F — não é Russian violet nem nenhum escuro do tema, e sem ele a regra “não aplicar Russian violet em fundo escuro” não podia ser reproduzida com a mesma tinta. Publicado como --color-brand-proof-dark.
Fundo #40004F, a tinta da própria prancha. Russian violet aparece riscado porque é a exceção que a p.32 desenha — a única das 25 com o símbolo de proibição.
Texto sobre gradiente só é seguro enquanto a parada mais clara mantiver contraste: os grafismos institucionais param em Mauveine por isso. Phlox como fundo de texto branco fica abaixo de AA.
Decisões que se propagam.
Uma fonte autoral em CSS. Primitivos → funções semânticas → componentes e contextos.
Identidade preservada
--color-brand-primary
Uma função clara
--tp-action
Uso consistente
.tp-button-primary
.minha-acao {
background: var(--tp-action);
color: var(--tp-on-action);
border-radius: var(--tp-radius);
}O que são 452 tokens
O número assusta menos quando se vê a distribuição. Dos 452, 218 são primitivos — as 30 cores do manual com suas escalas, os pesos e degraus da Passo — e ninguém os consome diretamente. 213 são semânticos: é essa camada que se usa ao escrever interface, e é ela que muda de valor entre o tema claro e o escuro. Os 21 restantes pertencem a componentes específicos.
Por família, a concentração também é previsível: 240 em cor e 93 em tipografia respondem por três quartos do total, porque são as duas dimensões que o manual de marca especifica em detalhe. Espaço, radius, sombra, z-index, motion e breakpoint somam 95. No dia a dia, escrever uma tela nova encosta em poucas dezenas deles.
Abrir o catálogo completo 452 tokens, com busca e filtro por camada e família
Gerado de design-system/tokens.json, que por sua vez é gerado de src/css/style.css. Cada linha traz o nome, a camada, o valor já resolvido no tema claro e no escuro e os seletores que consomem aquele valor.
Cor
240 token(s)Superfícies, textos, bordas, ações, estados e séries de gráfico. Cada função tem par claro e escuro próprio.
| Token | Camada | Tema claro | Tema escuro | Onde se aplica |
|---|---|---|---|---|
--color-black | Primitivo | #19151C | #19151C | — |
--color-blue-light-100 | Primitivo | #F3CEFA | #F3CEFA | — |
--color-blue-light-200 | Primitivo | #E5ACEF | #E5ACEF | — |
--color-blue-light-25 | Primitivo | #FDF5FF | #FDF5FF | — |
--color-blue-light-300 | Primitivo | #D58AE3 | #D58AE3 | — |
--color-blue-light-400 | Primitivo | #CA70DC | #CA70DC | — |
--color-blue-light-50 | Primitivo | #FAE4FF | #FAE4FF | — |
--color-blue-light-500 | Primitivo | #6B0080 | #6B0080 | — |
--color-blue-light-600 | Primitivo | #81009B | #81009B | — |
--color-blue-light-700 | Primitivo | #4B005A | #4B005A | — |
--color-blue-light-800 | Primitivo | #3D004A | #3D004A | — |
--color-blue-light-900 | Primitivo | #30003A | #30003A | — |
--color-blue-light-950 | Primitivo | #25002D | #25002D | — |
--color-brand-100 | Primitivo | #F3CEFA | #F3CEFA | .tp-graphics--page .tp-arc-outline |
--color-brand-200 | Primitivo | #E5ACEF | #E5ACEF | .tp-graphics--page .tp-dots > i |
--color-brand-25 | Primitivo | #FDF5FF | #FDF5FF | — |
--color-brand-300 | Primitivo | #D58AE3 | #D58AE3 | #mapTwo .jvm-region.jvm-element, #mapCustomerPinPoint .jv… |
--color-brand-400 | Primitivo | #CA70DC | #CA70DC | #mapTwo .jvm-region.jvm-element:hover, #mapCustomerPinPoi… |
--color-brand-50 | Primitivo | #FAE4FF | #FAE4FF | .tp-graphics--page .tp-arc |
--color-brand-500 | Primitivo | #6B0080 | #6B0080 | #mapTwo .jvm-region[data-code="US"], #mapCustomerPinPoint… |
--color-brand-600 | Primitivo | #81009B | #81009B | — |
--color-brand-700 | Primitivo | #4B005A | #4B005A | #mapCustomerPinPoint .jvm-region[data-code="US-NY"], #map… |
--color-brand-800 | Primitivo | #3D004A | #3D004A | — |
--color-brand-900 | Primitivo | #30003A | #30003A | — |
--color-brand-950 | Primitivo | #25002D | #25002D | — |
--color-brand-accent | Primitivo | #D500FF | #D500FF | .tp-swatch-accent, .tp-arc-outline, .tp-orb +1 |
--color-brand-dark | Primitivo | #4B005A | #4B005A | .tp-button-inverse, .tp-button-inverse:disabled, .tp-butt… |
--color-brand-mid | Primitivo | #81009B | #81009B | .tp-swatch-mid, .tp-hero |
--color-brand-primary | Primitivo | #6B0080 | #6B0080 | .tp-swatch-purple, .tp-nav-mark, .tp-hero +1 |
--color-brand-proof-dark | Primitivo | #40004F | #40004F | .tp-prova-escura |
--color-brand-ramp-1 | Primitivo | #4B005A | #4B005A | .tp-fundos-negativa |
--color-brand-ramp-2 | Primitivo | #65007A | #65007A | .tp-fundos-negativa |
--color-brand-ramp-3 | Primitivo | #7E0098 | #7E0098 | .tp-fundos-negativa |
--color-brand-ramp-4 | Primitivo | #9700B5 | #9700B5 | .tp-fundos-negativa |
--color-brand-ramp-5 | Primitivo | #AF00D1 | #AF00D1 | .tp-fundos-negativa |
--color-brand-soft | Primitivo | #FAE4FF | #FAE4FF | .tp-swatch-soft, .tp-hero .tp-eyebrow |
--color-current | Primitivo | currentColor | currentColor | — |
--color-error-100 | Primitivo | #FFD3E2 | #FFD3E2 | — |
--color-error-200 | Primitivo | #FFB1CB | #FFB1CB | — |
--color-error-25 | Primitivo | #FFF5F8 | #FFF5F8 | — |
--color-error-300 | Primitivo | #FF80AA | #FF80AA | — |
--color-error-400 | Primitivo | #FF80AA | #FF80AA | — |
--color-error-50 | Primitivo | #FFDBE7 | #FFDBE7 | — |
--color-error-500 | Primitivo | #B0003B | #B0003B | — |
--color-error-600 | Primitivo | #B0003B | #B0003B | — |
--color-error-700 | Primitivo | #970032 | #970032 | — |
--color-error-800 | Primitivo | #7C0029 | #7C0029 | — |
--color-error-900 | Primitivo | #620020 | #620020 | — |
--color-error-950 | Primitivo | #470017 | #470017 | — |
--color-gray-100 | Primitivo | #F1EDF3 | #F1EDF3 | — |
--color-gray-200 | Primitivo | #E5E5E5 | #E5E5E5 | ::after, ::before, ::backdrop +1 |
--color-gray-25 | Primitivo | #FCFBFD | #FCFBFD | — |
--color-gray-300 | Primitivo | #C6C6C6 | #C6C6C6 | — |
--color-gray-400 | Primitivo | #767078 | #767078 | .token.attr-name |
--color-gray-50 | Primitivo | #F4F4F4 | #F4F4F4 | .flatpickr-day.inRange |
--color-gray-500 | Primitivo | #575757 | #575757 | — |
--color-gray-600 | Primitivo | #4A424D | #4A424D | — |
--color-gray-700 | Primitivo | #3B333F | #3B333F | .token.punctuation |
--color-gray-800 | Primitivo | #332A39 | #332A39 | — |
--color-gray-900 | Primitivo | #251F29 | #251F29 | — |
--color-gray-950 | Primitivo | #19151C | #19151C | — |
--color-gray-dark | Primitivo | #251F29 | #251F29 | — |
--color-ink | Primitivo | #25002D | #25002D | — |
--color-orange-100 | Primitivo | #FFE0CF | #FFE0CF | — |
--color-orange-200 | Primitivo | #FFBC99 | #FFBC99 | — |
--color-orange-25 | Primitivo | #FFF3ED | #FFF3ED | — |
--color-orange-300 | Primitivo | #FF945C | #FF945C | — |
--color-orange-400 | Primitivo | #FF7300 | #FF7300 | — |
--color-orange-50 | Primitivo | #FFF3ED | #FFF3ED | — |
--color-orange-500 | Primitivo | #A33800 | #A33800 | — |
--color-orange-600 | Primitivo | #8F3100 | #8F3100 | — |
--color-orange-700 | Primitivo | #7A2900 | #7A2900 | — |
--color-orange-800 | Primitivo | #652200 | #652200 | — |
--color-orange-900 | Primitivo | #501B00 | #501B00 | — |
--color-orange-950 | Primitivo | #3B1400 | #3B1400 | — |
--color-palette-amaranth | Primitivo | #EC004F | #EC004F | .tp-swatch-palette-amaranth |
--color-palette-aquamarine | Primitivo | #00ECB5 | #00ECB5 | .tp-swatch-palette-aquamarine |
--color-palette-azure | Primitivo | #EBFFFA | #EBFFFA | .tp-swatch-palette-azure |
--color-palette-battleship | Primitivo | #9B9B9B | #9B9B9B | .tp-swatch-palette-battleship |
--color-palette-crimson | Primitivo | #DB0049 | #DB0049 | .tp-swatch-palette-crimson |
--color-palette-davys | Primitivo | #575757 | #575757 | .tp-swatch-palette-davys |
--color-palette-folly | Primitivo | #FF0056 | #FF0056 | .tp-swatch-pink, .tp-swatch-palette-folly |
--color-palette-gold | Primitivo | #FFD324 | #FFD324 | .tp-swatch-palette-gold |
--color-palette-jonquil | Primitivo | #FFCE00 | #FFCE00 | .tp-swatch-yellow, .tp-swatch-palette-jonquil |
--color-palette-jungle | Primitivo | #00AA83 | #00AA83 | .tp-swatch-palette-jungle |
--color-palette-lemon | Primitivo | #FFF4C8 | #FFF4C8 | .tp-swatch-palette-lemon |
--color-palette-mikado | Primitivo | #FFC400 | #FFC400 | .tp-swatch-palette-mikado |
--color-palette-mimi | Primitivo | #FFDBE7 | #FFDBE7 | .tp-swatch-palette-mimi |
--color-palette-mint | Primitivo | #00C99A | #00C99A | .tp-swatch-palette-mint |
--color-palette-mustard | Primitivo | #FFDB49 | #FFDB49 | .tp-swatch-palette-mustard |
--color-palette-orange | Primitivo | #FF5900 | #FF5900 | .tp-swatch-orange, .tp-swatch-palette-orange |
--color-palette-persimmon | Primitivo | #F35400 | #F35400 | .tp-swatch-palette-persimmon |
--color-palette-pink | Primitivo | #FF80AA | #FF80AA | .tp-swatch-palette-pink |
--color-palette-platinum | Primitivo | #E5E5E5 | #E5E5E5 | .tp-swatch-palette-platinum |
--color-palette-pumpkin | Primitivo | #FF7300 | #FF7300 | .tp-swatch-palette-pumpkin |
--color-palette-sea | Primitivo | #009572 | #009572 | .tp-swatch-green, .tp-swatch-palette-sea |
--color-palette-seashell | Primitivo | #FFF3ED | #FFF3ED | .tp-swatch-palette-seashell |
--color-palette-silver | Primitivo | #C6C6C6 | #C6C6C6 | .tp-swatch-palette-silver |
--color-palette-smoke | Primitivo | #F4F4F4 | #F4F4F4 | .tp-swatch-gray, .tp-swatch-palette-smoke |
--color-palette-syracuse | Primitivo | #D04300 | #D04300 | .tp-swatch-palette-syracuse |
--color-success-100 | Primitivo | #C4F7E9 | #C4F7E9 | — |
--color-success-200 | Primitivo | #98E9D5 | #98E9D5 | — |
--color-success-25 | Primitivo | #EBFFFA | #EBFFFA | — |
--color-success-300 | Primitivo | #64DABF | #64DABF | — |
--color-success-400 | Primitivo | #00ECB5 | #00ECB5 | — |
--color-success-50 | Primitivo | #EBFFFA | #EBFFFA | — |
--color-success-500 | Primitivo | #00664E | #00664E | — |
--color-success-600 | Primitivo | #00664E | #00664E | — |
--color-success-700 | Primitivo | #00543F | #00543F | — |
--color-success-800 | Primitivo | #004532 | #004532 | — |
--color-success-900 | Primitivo | #003728 | #003728 | — |
--color-success-950 | Primitivo | #00291D | #00291D | — |
--color-theme-pink-500 | Primitivo | #FF0056 | #FF0056 | — |
--color-theme-purple-500 | Primitivo | #81009B | #81009B | — |
--color-tp-amaranth | Primitivo | #EC004F | #EC004F | — |
--color-tp-aquamarine | Primitivo | #00ECB5 | #00ECB5 | — |
--color-tp-azure | Primitivo | #EBFFFA | #EBFFFA | — |
--color-tp-battleship-gray | Primitivo | #9B9B9B | #9B9B9B | — |
--color-tp-crimson | Primitivo | #DB0049 | #DB0049 | — |
--color-tp-davys-gray | Primitivo | #575757 | #575757 | — |
--color-tp-folly | Primitivo | #FF0056 | #FF0056 | — |
--color-tp-gold | Primitivo | #FFD324 | #FFD324 | — |
--color-tp-jonquil | Primitivo | #FFCE00 | #FFCE00 | — |
--color-tp-jungle-green | Primitivo | #00AA83 | #00AA83 | — |
--color-tp-lemon-chiffon | Primitivo | #FFF4C8 | #FFF4C8 | — |
--color-tp-mauveine | Primitivo | #81009B | #81009B | — |
--color-tp-mikado-yellow | Primitivo | #FFC400 | #FFC400 | — |
--color-tp-mimi-pink | Primitivo | #FFDBE7 | #FFDBE7 | — |
--color-tp-mint | Primitivo | #00C99A | #00C99A | — |
--color-tp-mustard | Primitivo | #FFDB49 | #FFDB49 | — |
--color-tp-orange | Primitivo | #FF5900 | #FF5900 | — |
--color-tp-pale-purple | Primitivo | #FAE4FF | #FAE4FF | — |
--color-tp-persimmon | Primitivo | #F35400 | #F35400 | — |
--color-tp-phlox | Primitivo | #D500FF | #D500FF | .tp-accent-line |
--color-tp-platinum | Primitivo | #E5E5E5 | #E5E5E5 | — |
--color-tp-pumpkin | Primitivo | #FF7300 | #FF7300 | — |
--color-tp-purple | Primitivo | #6B0080 | #6B0080 | .tp-preloader__dots > i, .tp-arc, .tp-dots > i |
--color-tp-russian-violet | Primitivo | #4B005A | #4B005A | — |
--color-tp-sea-green | Primitivo | #009572 | #009572 | — |
--color-tp-seashell | Primitivo | #FFF3ED | #FFF3ED | — |
--color-tp-silver | Primitivo | #C6C6C6 | #C6C6C6 | — |
--color-tp-syracuse-orange | Primitivo | #D04300 | #D04300 | — |
--color-tp-tickle-me-pink | Primitivo | #FF80AA | #FF80AA | — |
--color-tp-white-smoke | Primitivo | #F4F4F4 | #F4F4F4 | — |
--color-transparent | Primitivo | transparent | transparent | — |
--color-ui-danger | Primitivo | #B0003B | #B0003B | — |
--color-ui-dark-border | Primitivo | #938697 | #938697 | Alias de --tp-border-strong |
--color-ui-dark-card | Primitivo | #251F29 | #251F29 | Alias de --tp-surface |
--color-ui-dark-elevated | Primitivo | #332A39 | #332A39 | Alias de --tp-elevated, --tp-tooltip-bg |
--color-ui-dark-page | Primitivo | #19151C | #19151C | Alias de --tp-page |
--color-ui-success | Primitivo | #00664E | #00664E | — |
--color-ui-warning | Primitivo | #765D00 | #765D00 | — |
--color-warning-100 | Primitivo | #FFF0B2 | #FFF0B2 | — |
--color-warning-200 | Primitivo | #FFE78A | #FFE78A | — |
--color-warning-25 | Primitivo | #FFFBEF | #FFFBEF | — |
--color-warning-300 | Primitivo | #FFDB49 | #FFDB49 | — |
--color-warning-400 | Primitivo | #FFCE00 | #FFCE00 | — |
--color-warning-50 | Primitivo | #FFF4C8 | #FFF4C8 | — |
--color-warning-500 | Primitivo | #765D00 | #765D00 | — |
--color-warning-600 | Primitivo | #765D00 | #765D00 | — |
--color-warning-700 | Primitivo | #604B00 | #604B00 | — |
--color-warning-800 | Primitivo | #4C3B00 | #4C3B00 | — |
--color-warning-900 | Primitivo | #392C00 | #392C00 | — |
--color-warning-950 | Primitivo | #271E00 | #271E00 | — |
--color-white | Primitivo | #ffffff | #ffffff | .tp-button-inverse, .tp-switch-track span, .tp-graphics--… |
--tp-accent-action | Semântico | #FFCE00 | #FFCE00 | .tp-button-accent |
--tp-action | Semântico | #6B0080 | #EDBAF7 | :where(.tp-core a), .tp-skip, .tp-list > li::marker +51 |
--tp-action-accent-active | Semântico | color-mix(in srgb, #FFCE00 78%, #25002D) | color-mix(in srgb, #FFCE00 78%, #ffffff) | .tp-button-accent:active:not(:disabled) |
--tp-action-accent-disabled | Semântico | color-mix(in srgb, #FFCE00 55%, #ffffff) | color-mix(in srgb, #FFCE00 55%, #251F29) | .tp-button-accent:disabled, .tp-button-accent[aria-disabl… |
--tp-action-accent-hover | Semântico | color-mix(in srgb, #FFCE00 88%, #25002D) | color-mix(in srgb, #FFCE00 88%, #ffffff) | .tp-button-accent:hover:not(:disabled) |
--tp-action-danger-active | Semântico | color-mix(in srgb, #B0003B 72%, #25002D) | color-mix(in srgb, #B0003B 72%, #ffffff) | .tp-button-danger:active:not(:disabled) |
--tp-action-danger-disabled | Semântico | color-mix(in srgb, #B0003B 55%, #ffffff) | color-mix(in srgb, #B0003B 55%, #251F29) | .tp-button-danger:disabled, .tp-button-danger[aria-disabl… |
--tp-action-danger-hover | Semântico | color-mix(in srgb, #B0003B 85%, #25002D) | color-mix(in srgb, #B0003B 85%, #ffffff) | .tp-button-danger:hover:not(:disabled) |
--tp-action-hover | Semântico | #4B005A | #FAE4FF | .tp-switch[aria-checked="true"]:hover:not(:disabled):not(… |
--tp-action-inverse-active | Semântico | color-mix(in srgb, #ffffff 78%, #4B005A) | color-mix(in srgb, #ffffff 78%, #4B005A) | .tp-button-inverse:active:not(:disabled) |
--tp-action-inverse-disabled | Semântico | color-mix(in srgb, #ffffff 55%, #ffffff) | color-mix(in srgb, #ffffff 55%, #251F29) | .tp-button-inverse:disabled, .tp-button-inverse[aria-disa… |
--tp-action-inverse-hover | Semântico | color-mix(in srgb, #ffffff 88%, #4B005A) | color-mix(in srgb, #ffffff 88%, #4B005A) | .tp-button-inverse:hover:not(:disabled) |
--tp-action-primary | Semântico | #6B0080 | #EDBAF7 | .tp-button-tertiary, .tp-inbox-item-selected, .tp-unread-… |
--tp-action-primary-active | Semântico | #4B005A | #FAE4FF | — |
--tp-action-primary-disabled | Semântico | color-mix(in srgb, #6B0080 55%, #ffffff) | color-mix(in srgb, #EDBAF7 55%, #251F29) | .tp-button-primary:disabled, .tp-button-primary[aria-disa… |
--tp-action-primary-foreground | Semântico | #ffffff | #4B005A | .tp-button-primary:disabled, .tp-button-primary[aria-disa… |
--tp-action-primary-hover | Semântico | #4B005A | #FAE4FF | .tp-button-tertiary:hover, .tp-button-ghost:active:not(:d… |
--tp-action-secondary-disabled | Semântico | #ffffff | #251F29 | .tp-button-secondary:disabled, .tp-button-secondary[aria-… |
--tp-action-soft | Semântico | #FAE4FF | #39203F | .tp-user-initials, .tp-reference-panel a:hover |
--tp-action-tertiary-disabled | Semântico | transparent | transparent | .tp-button-ghost:disabled, .tp-button-ghost[aria-disabled… |
--tp-border | Semântico | #E5E5E5 | #4D4153 | .tp-card, .tp-button-secondary:disabled, .tp-button-secon… |
--tp-border-default | Semântico | #E5E5E5 | #4D4153 | .tp-support-kpi, .tp-support-toolbar, .tp-support-shell +… |
--tp-border-strong | Semântico | #807184 | #938697 | .tp-button-secondary, .tp-input, .tp-status-select +6 |
--tp-border-subtle | Semântico | #E5E5E5 | #4D4153 | — |
--tp-chart-1 | Semântico | #6B0080 | #EDBAF7 | .tp-heatmap-level-1, .tp-heatmap-level-2, .tp-heatmap-lev… |
--tp-chart-2 | Semântico | #009572 | #00ECB5 | — |
--tp-chart-3 | Semântico | #D04300 | #FFBC99 | — |
--tp-chart-4 | Semântico | #81009B | #CA70DC | — |
--tp-chart-5 | Semântico | #DB0049 | #FF80AA | — |
--tp-chart-6 | Semântico | #765D00 | #FFDB49 | — |
--tp-chart-grid | Semântico | #E5E5E5 | #4D4153 | — |
--tp-chart-text | Semântico | #575757 | #D0C6D4 | — |
--tp-danger | Semântico | #B0003B | #FFABC6 | .tp-label-required::after, .tp-badge-danger, .tp-input[ar… |
--tp-danger-action | Semântico | #B0003B | #B0003B | .tp-button-danger |
--tp-danger-soft | Semântico | #FFDBE7 | #501B30 | .tp-badge-danger, .tp-alert-danger |
--tp-disabled-opacity | Semântico | 0.55 | 0.55 | .tp-input:disabled, .tp-input[aria-disabled="true"], .tp-… |
--tp-elevated | Semântico | #ffffff | #332A39 | — |
--tp-focus | Semântico | #6B0080 | #EDBAF7 | .tp-core :focus-visible, :where(.tp-body, .tp-core) :wher… |
--tp-gradient-deep | Semântico | linear-gradient(135deg, #6B0080 0%, #4B005A 100%) | linear-gradient(135deg, #6B0080 0%, #4B005A 100%) | — |
--tp-gradient-primary | Semântico | linear-gradient(135deg, #81009B 0%, #6B0080 100%) | linear-gradient(135deg, #81009B 0%, #6B0080 100%) | — |
--tp-gradient-vivid | Semântico | linear-gradient(135deg, #D500FF 0%, #81009B 100%) | linear-gradient(135deg, #D500FF 0%, #81009B 100%) | — |
--tp-gradient-royal | Semântico | linear-gradient(135deg, #81009B 0%, #4B005A 100%) | linear-gradient(135deg, #81009B 0%, #4B005A 100%) | — |
--tp-gradient-bright | Semântico | linear-gradient(135deg, #D500FF 0%, #6B0080 100%) | linear-gradient(135deg, #D500FF 0%, #6B0080 100%) | — |
--tp-graphic-arc-ratio | Semântico | 0.189979 | 0.189979 | .tp-graphic-arc, .tp-arc |
--tp-icon-artboard | Semântico | 48px | 48px | — |
--tp-icon-corner-max | Semântico | 4px | 4px | — |
--tp-icon-corner-min | Semântico | 1px | 1px | — |
--tp-icon-grid | Semântico | 24px | 24px | — |
--tp-icon-stroke | Semântico | 2 | 2 | — |
--tp-info | Semântico | #6B0080 | #EDBAF7 | .tp-demo-banner, .tp-channel-phone::before |
--tp-inverse-surface | Semântico | #4B005A | #4B005A | — |
--tp-logo-width-hero | Semântico | 220px | 220px | — |
--tp-muted | Semântico | #575757 | #D0C6D4 | .tp-font-note, .tp-caption, .tp-label > span +41 |
--tp-on-accent | Semântico | #4B005A | #4B005A | .tp-button-accent, .tp-button-accent:disabled, .tp-button… |
--tp-on-action | Semântico | #ffffff | #4B005A | .tp-steps li[aria-current="step"] span, .tp-pagination-it… |
--tp-on-danger | Semântico | #ffffff | #ffffff | .tp-button-danger, .tp-button-danger:disabled, .tp-button… |
--tp-on-dark | Semântico | #ffffff | #ffffff | .tp-inverse-stage, .tp-inverse-stage p, .tp-tooltip +5 |
--tp-overlay | Semântico | color-mix(in srgb, #4B005A 55%, transparent) | color-mix(in srgb, #4B005A 55%, transparent) | — |
--tp-page | Semântico | #FAF8FB | #19151C | .tp-core, .tp-input[readonly], .tp-table thead +7 |
--tp-soft | Semântico | #FAE4FF | #39203F | .tp-demo-banner, .tp-card-soft, .tp-badge +32 |
--tp-status-danger-background | Semântico | #FFDBE7 | #501B30 | .tp-message-row-error .tp-message-bubble, .tp-error-state… |
--tp-status-danger-border | Semântico | #B0003B | #FFABC6 | .tp-message-row-error .tp-message-bubble, .tp-toast-dange… |
--tp-status-danger-foreground | Semântico | #B0003B | #FFABC6 | .tp-priority-high, .tp-alert-danger .tp-alert-icon, .tp-t… |
--tp-status-info-background | Semântico | #FAE4FF | #39203F | .tp-message-row-system .tp-message-bubble, .tp-status-bad… |
--tp-status-info-border | Semântico | #6B0080 | #EDBAF7 | .tp-alert-info, .tp-toast-info, .tp-message-system +1 |
--tp-status-info-foreground | Semântico | #6B0080 | #EDBAF7 | .tp-status-badge, .tp-status-open, .tp-badge-info +2 |
--tp-status-success-background | Semântico | #EBFFFA | #123E33 | .tp-status-resolved, .tp-status-closed |
--tp-status-success-border | Semântico | #00664E | #80E4CC | .tp-toast-success, .tp-status-resolved |
--tp-status-success-foreground | Semântico | #00664E | #80E4CC | .tp-status-resolved, .tp-status-closed, .tp-priority-low … |
--tp-status-warning-background | Semântico | #FFF4C8 | #423700 | .tp-message-row-internal .tp-message-bubble, .tp-status-p… |
--tp-status-warning-border | Semântico | #765D00 | #FFDB49 | .tp-message-row-internal .tp-message-bubble, .tp-alert-wa… |
--tp-status-warning-foreground | Semântico | #765D00 | #FFDB49 | .tp-status-pending, .tp-status-waiting, .tp-priority-medi… |
--tp-success | Semântico | #00664E | #80E4CC | .tp-badge-success, .tp-alert-success, .tp-field[data-stat… |
--tp-success-soft | Semântico | #EBFFFA | #123E33 | .tp-badge-success, .tp-alert-success |
--tp-surface | Semântico | #ffffff | #251F29 | .tp-skip, .tp-card, .tp-button-secondary +21 |
--tp-surface-card | Semântico | #ffffff | #251F29 | .tp-support-kpi, .tp-support-toolbar, .tp-support-shell +8 |
--tp-surface-elevated | Semântico | #ffffff | #332A39 | .tp-toast |
--tp-surface-inverse | Semântico | #4B005A | #4B005A | — |
--tp-surface-page | Semântico | #FAF8FB | #19151C | .tp-inbox-panel, .tp-contact-panel, .tp-message-list +7 |
--tp-text | Semântico | #25002D | #F6F0F8 | .tp-core, .tp-core h1, .tp-core h2 +29 |
--tp-text-inverse | Semântico | #ffffff | #ffffff | — |
--tp-text-muted | Semântico | #575757 | #D0C6D4 | — |
--tp-text-primary | Semântico | #25002D | #F6F0F8 | .tp-support-kpi strong, .tp-inbox-item, .tp-inbox-item-ti… |
--tp-text-secondary | Semântico | #575757 | #D0C6D4 | .tp-support-kpi span, .tp-inbox-item-preview, .tp-inbox-i… |
--tp-tooltip-bg | Semântico | #25002D | #332A39 | .tp-chart-tooltip, .tp-chart .apexcharts-tooltip |
--tp-tooltip-text | Semântico | #ffffff | #F6F0F8 | .tp-chart-tooltip, .tp-chart .apexcharts-tooltip |
--tp-warning | Semântico | #765D00 | #FFDB49 | .tp-badge-warning, .tp-channel-form::before |
--tp-warning-soft | Semântico | #FFF4C8 | #423700 | .tp-badge-warning |
Tipografia
93 token(s)Família, tamanho, peso, entrelinha e tracking de cada degrau da escala.
| Token | Camada | Tema claro | Tema escuro | Onde se aplica |
|---|---|---|---|---|
--font-inter | Primitivo | "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif | "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif | .tp-core, .tp-demo-banner, .tp-type-ui +2 |
--font-passo | Primitivo | "Passo", "Inter", system-ui, Arial, sans-serif | "Passo", "Inter", system-ui, Arial, sans-serif | .tp-type-display |
--font-weight-black | Primitivo | 800 | 800 | — |
--font-weight-bold | Primitivo | 700 | 700 | — |
--font-weight-medium | Primitivo | 500 | 500 | — |
--font-weight-regular | Primitivo | 400 | 400 | — |
--text-theme-sm | Primitivo | 14px | 14px | — |
--text-theme-sm--line-height | Primitivo | 20px | 20px | — |
--text-theme-xl | Primitivo | 20px | 20px | — |
--text-theme-xl--line-height | Primitivo | 30px | 30px | — |
--text-theme-xs | Primitivo | 12px | 12px | — |
--text-theme-xs--line-height | Primitivo | 18px | 18px | — |
--text-title-2xl | Primitivo | 72px | 72px | — |
--text-title-2xl--line-height | Primitivo | 90px | 90px | — |
--text-title-lg | Primitivo | 48px | 48px | — |
--text-title-lg--line-height | Primitivo | 60px | 60px | — |
--text-title-md | Primitivo | 36px | 36px | — |
--text-title-md--line-height | Primitivo | 44px | 44px | — |
--text-title-sm | Primitivo | 30px | 30px | — |
--text-title-sm--line-height | Primitivo | 38px | 38px | — |
--text-title-xl | Primitivo | 60px | 60px | — |
--text-title-xl--line-height | Primitivo | 72px | 72px | — |
--text-title-xs | Primitivo | 24px | 24px | — |
--text-title-xs--line-height | Primitivo | 32px | 32px | — |
--tp-font-body | Semântico | 14px | 14px | .tp-core, .tp-map-fallback |
--tp-font-small | Semântico | 12px | 12px | .tp-demo-banner, .tp-font-note, .tp-caption +5 |
--tp-line-height | Semântico | 1.5 | 1.5 | .tp-core, .tp-chart-tooltip, .tp-chart-data |
--tp-tracking-heading | Semântico | -0.035em | -0.035em | .tp-core h1, .tp-core h2, .tp-core h3 |
--tp-type-body-lg-family | Semântico | "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif | "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif | .tp-body-lg |
--tp-type-body-lg-letter-spacing | Semântico | 0 | 0 | .tp-body-lg |
--tp-type-body-lg-line-height | Semântico | 1.6 | 1.6 | .tp-body-lg |
--tp-type-body-lg-size | Semântico | 1.125rem | 1.125rem | .tp-body-lg |
--tp-type-body-lg-weight | Semântico | 400 | 400 | .tp-body-lg |
--tp-type-body-md-family | Semântico | "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif | "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif | .tp-body-md |
--tp-type-body-md-letter-spacing | Semântico | 0 | 0 | .tp-body-md |
--tp-type-body-md-line-height | Semântico | 1.5 | 1.5 | .tp-body-md |
--tp-type-body-md-size | Semântico | 1rem | 1rem | .tp-body-md, .tp-input-lg |
--tp-type-body-md-weight | Semântico | 400 | 400 | .tp-body-md |
--tp-type-body-sm-family | Semântico | "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif | "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif | .tp-body-sm, .tp-list, .tp-input +1 |
--tp-type-body-sm-letter-spacing | Semântico | 0 | 0 | .tp-body-sm |
--tp-type-body-sm-line-height | Semântico | 1.5 | 1.5 | .tp-body-sm, .tp-list, .tp-input +2 |
--tp-type-body-sm-size | Semântico | 0.875rem | 0.875rem | .tp-body-sm, .tp-list, .tp-input +9 |
--tp-type-body-sm-weight | Semântico | 400 | 400 | .tp-body-sm, .tp-label > span, .tp-label .tp-label-hint |
--tp-type-caption-family | Semântico | "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif | "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif | .tp-caption |
--tp-type-caption-letter-spacing | Semântico | 0.02em | 0.02em | .tp-caption |
--tp-type-caption-line-height | Semântico | 1.4 | 1.4 | .tp-caption |
--tp-type-caption-size | Semântico | 0.6875rem | 0.6875rem | .tp-caption, .tp-inbox-item-meta, .tp-message-meta +13 |
--tp-type-caption-weight | Semântico | 500 | 500 | .tp-caption |
--tp-type-display-lg-family | Semântico | "Passo", "Inter", system-ui, Arial, sans-serif | "Passo", "Inter", system-ui, Arial, sans-serif | — |
--tp-type-display-lg-letter-spacing | Semântico | -0.055em | -0.055em | — |
--tp-type-display-lg-line-height | Semântico | 1.02 | 1.02 | — |
--tp-type-display-lg-size | Semântico | clamp(2.75rem, 7vw, 6.5rem) | clamp(2.75rem, 7vw, 6.5rem) | — |
--tp-type-display-lg-weight | Semântico | 700 | 700 | — |
--tp-type-display-md-family | Semântico | "Passo", "Inter", system-ui, Arial, sans-serif | "Passo", "Inter", system-ui, Arial, sans-serif | .tp-display-md |
--tp-type-display-md-letter-spacing | Semântico | -0.045em | -0.045em | .tp-display-md |
--tp-type-display-md-line-height | Semântico | 1.06 | 1.06 | .tp-display-md |
--tp-type-display-md-size | Semântico | clamp(2.25rem, 5vw, 4.5rem) | clamp(2.25rem, 5vw, 4.5rem) | .tp-display-md |
--tp-type-display-md-weight | Semântico | 700 | 700 | .tp-display-md |
--tp-type-heading-lg-family | Semântico | "Passo", "Inter", system-ui, Arial, sans-serif | "Passo", "Inter", system-ui, Arial, sans-serif | .tp-heading-lg, :where(.tp-body, .tp-core) h1 +1 |
--tp-type-heading-lg-letter-spacing | Semântico | -0.035em | -0.035em | .tp-heading-lg, :where(.tp-body, .tp-core) h2 |
--tp-type-heading-lg-line-height | Semântico | 1.15 | 1.15 | .tp-heading-lg, :where(.tp-body, .tp-core) h2 |
--tp-type-heading-lg-size | Semântico | clamp(1.75rem, 2.8vw, 2.25rem) | clamp(1.75rem, 2.8vw, 2.25rem) | .tp-heading-lg, :where(.tp-body, .tp-core) h2 |
--tp-type-heading-lg-weight | Semântico | 700 | 700 | .tp-heading-lg |
--tp-type-heading-md-family | Semântico | "Passo", "Inter", system-ui, Arial, sans-serif | "Passo", "Inter", system-ui, Arial, sans-serif | .tp-heading-md |
--tp-type-heading-md-letter-spacing | Semântico | -0.025em | -0.025em | .tp-heading-md |
--tp-type-heading-md-line-height | Semântico | 1.2 | 1.2 | .tp-heading-md |
--tp-type-heading-md-size | Semântico | 1.5rem | 1.5rem | .tp-heading-md |
--tp-type-heading-md-weight | Semântico | 700 | 700 | .tp-heading-md |
--tp-type-heading-sm-family | Semântico | "Passo", "Inter", system-ui, Arial, sans-serif | "Passo", "Inter", system-ui, Arial, sans-serif | .tp-heading-sm, .tp-inbox-heading h3, .tp-contact-heading… |
--tp-type-heading-sm-letter-spacing | Semântico | -0.015em | -0.015em | .tp-heading-sm, :where(.tp-body, .tp-core) h3 |
--tp-type-heading-sm-line-height | Semântico | 1.3 | 1.3 | .tp-heading-sm, :where(.tp-body, .tp-core) h3 |
--tp-type-heading-sm-size | Semântico | 1.125rem | 1.125rem | .tp-heading-sm, :where(.tp-body, .tp-core) h3 +3 |
--tp-type-heading-sm-weight | Semântico | 700 | 700 | .tp-heading-sm, :where(.tp-body, .tp-core) h3 +1 |
--tp-type-heading-xl-family | Semântico | "Passo", "Inter", system-ui, Arial, sans-serif | "Passo", "Inter", system-ui, Arial, sans-serif | .tp-heading-xl |
--tp-type-heading-xl-letter-spacing | Semântico | -0.04em | -0.04em | .tp-heading-xl, :where(.tp-body, .tp-core) h1 |
--tp-type-heading-xl-line-height | Semântico | 1.1 | 1.1 | .tp-heading-xl, :where(.tp-body, .tp-core) h1 |
--tp-type-heading-xl-size | Semântico | clamp(2rem, 3.5vw, 3rem) | clamp(2rem, 3.5vw, 3rem) | .tp-heading-xl |
--tp-type-heading-xl-weight | Semântico | 700 | 700 | .tp-heading-xl |
--tp-type-label-lg-family | Semântico | "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif | "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif | .tp-label-lg, .tp-error-state strong |
--tp-type-label-lg-letter-spacing | Semântico | 0 | 0 | .tp-label-lg |
--tp-type-label-lg-line-height | Semântico | 1.35 | 1.35 | .tp-label-lg |
--tp-type-label-lg-size | Semântico | 0.9375rem | 0.9375rem | .tp-label-lg, .tp-button-lg, .tp-error-state strong |
--tp-type-label-lg-weight | Semântico | 600 | 600 | .tp-label-lg, .tp-error-state strong |
--tp-type-label-md-family | Semântico | "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif | "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif | .tp-label-md, .tp-button, .tp-toast strong +3 |
--tp-type-label-md-letter-spacing | Semântico | 0 | 0 | .tp-label-md |
--tp-type-label-md-line-height | Semântico | 1.35 | 1.35 | .tp-label-md, .tp-button, .tp-toast strong +1 |
--tp-type-label-md-size | Semântico | 0.875rem | 0.875rem | .tp-label-md, .tp-button, .tp-inbox-item-title +4 |
--tp-type-label-md-weight | Semântico | 600 | 600 | .tp-label-md, .tp-button, .tp-toast strong +3 |
--tp-type-label-sm-family | Semântico | "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif | "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif | .tp-label-sm, .tp-status-select, .tp-pagination-item +2 |
--tp-type-label-sm-letter-spacing | Semântico | 0.04em | 0.04em | .tp-label-sm |
--tp-type-label-sm-line-height | Semântico | 1.4 | 1.4 | .tp-label-sm, .tp-status-select |
--tp-type-label-sm-size | Semântico | 0.75rem | 0.75rem | .tp-label-sm, .tp-button-sm, .tp-support-kpi span +11 |
--tp-type-label-sm-weight | Semântico | 700 | 700 | .tp-label-sm, .tp-status-select |
Espaço e medida
21 token(s)Degraus de espaçamento, alturas de controle, respiro de seção e medidas de foco e borda.
| Token | Camada | Tema claro | Tema escuro | Onde se aplica |
|---|---|---|---|---|
--tp-border-width | Semântico | 1px | 1px | .tp-check input:hover:not(:disabled), .tp-alert-icon, .tp… |
--tp-cell-padding | Semântico | 16px | 16px | — |
--tp-control-height | Semântico | 44px | 44px | .tp-button-icon, .tp-switch |
--tp-focus-offset | Semântico | 3px | 3px | .tp-core :focus-visible, .tp-heatmap-cell:focus-visible |
--tp-focus-width | Semântico | 3px | 3px | .tp-core :focus-visible, .tp-heatmap-cell:focus-visible |
--tp-logo-lockup-width | Semântico | 170px | 170px | .tp-brand-lockup-min |
--tp-logo-lockup-wordmark | Semântico | calc(170px / (1 + 2 * 0.163254)) | calc(170px / (1 + 2 * 0.163254)) | .tp-brand-lockup-min img |
--tp-logo-protection | Semântico | calc(170px * 0.163254) | calc(170px * 0.163254) | — |
--tp-logo-protection-ratio | Semântico | 0.163254 | 0.163254 | .tp-brand, .tp-brand-lockup-min |
--tp-logo-width | Semântico | 170px | 170px | .tp-brand img, .tp-preloader__logo |
--tp-section-desktop | Semântico | 104px | 104px | — |
--tp-section-mobile | Semântico | 68px | 68px | — |
--tp-section-tablet | Semântico | 82px | 82px | — |
--tp-space-0 | Semântico | 0 | 0 | — |
--tp-space-1 | Semântico | 4px | 4px | .tp-map-marker-label |
--tp-space-2 | Semântico | 8px | 8px | .tp-demo-banner, .tp-list, .tp-inbox-item-meta +24 |
--tp-space-3 | Semântico | 12px | 12px | .tp-list, .tp-support-kpis, .tp-support-toolbar +17 |
--tp-space-4 | Semântico | 16px | 16px | .tp-skip, .tp-skip:focus, .tp-demo-banner +16 |
--tp-space-5 | Semântico | 24px | 24px | .tp-standalone, .tp-standalone main, .tp-message-list +2 |
--tp-space-6 | Semântico | 32px | 32px | — |
--tp-space-7 | Semântico | 48px | 48px | — |
--tp-space-8 | Semântico | 64px | 64px | — |
--tp-space-9 | Semântico | 80px | 80px | — |
--tp-space-half | Semântico | 2px | 2px | .tp-support-kpi, .tp-inbox-item-main, .tp-conversation-he… |
Radius
18 token(s)Arredondamento por tipo de superfície: controle, painel, cartão e peça editorial.
| Token | Camada | Tema claro | Tema escuro | Onde se aplica |
|---|---|---|---|---|
--radius-control | Primitivo | 0.5rem | 0.5rem | — |
--radius-editorial-2xl | Primitivo | 42px | 42px | — |
--radius-editorial-lg | Primitivo | 24px | 24px | [data-profile="institutional"] |
--radius-editorial-md | Primitivo | 18px | 18px | — |
--radius-editorial-sm | Primitivo | 12px | 12px | [data-profile="institutional"] |
--radius-editorial-xl | Primitivo | 32px | 32px | — |
--radius-panel | Primitivo | 0.75rem | 0.75rem | — |
--tp-card-radius | Semântico | 0.75rem | 0.75rem | .tp-dashboard-heading |
--tp-radius | Semântico | 0.5rem | 0.5rem | .tp-icon-tile, .tp-inverse-stage, .tp-alert +9 |
--tp-radius-2xl | Semântico | 20px | 20px | .tp-dialog, .tp-drawer, [dir="rtl"] .tp-drawer |
--tp-radius-3xl | Semântico | 24px | 24px | — |
--tp-radius-full | Semântico | 999px | 999px | .tp-badge, .tp-unread-dot, .tp-quick-reply +27 |
--tp-radius-lg | Semântico | 0.75rem | 0.75rem | .tp-support-kpi, .tp-support-toolbar, .tp-support-shell +2 |
--tp-radius-md | Semântico | 0.5rem | 0.5rem | .tp-button, .tp-input, .tp-menu +10 |
--tp-radius-none | Semântico | 0 | 0 | — |
--tp-radius-sm | Semântico | 6px | 6px | .tp-status-select, .tp-attachment, .tp-attachment-media |
--tp-radius-xl | Semântico | 18px | 18px | .tp-card |
--tp-radius-xs | Semântico | 4px | 4px | .tp-sla-warning::before, .tp-channel::before |
Sombra e elevação
20 token(s)Níveis de elevação e sombras herdadas da base, com valor próprio no tema escuro quando necessário.
| Token | Camada | Tema claro | Tema escuro | Onde se aplica |
|---|---|---|---|---|
--drop-shadow-4xl | Primitivo | 0 35px 35px rgba(0, 0, 0, 0.25), 0 45px 65px rgba(0, 0, 0, 0.15) | 0 35px 35px rgba(0, 0, 0, 0.25), 0 45px 65px rgba(0, 0, 0, 0.15) | — |
--shadow-datepicker | Primitivo | -5px 0 0 #332A39, 5px 0 0 #332A39 | -5px 0 0 #332A39, 5px 0 0 #332A39 | — |
--shadow-focus-ring | Primitivo | 0px 0px 0px 4px color-mix(in srgb, #6B0080 18%, transparent) | 0px 0px 0px 4px color-mix(in srgb, #6B0080 18%, transparent) | — |
--shadow-slider-navigation | Primitivo | 0px 1px 2px 0px rgba(16, 24, 40, 0.1), 0px 1px 3px 0px rgba(16, 24, 40,… | 0px 1px 2px 0px rgba(16, 24, 40, 0.1), 0px 1px 3px 0px rgba(16, 24, 40,… | — |
--shadow-theme-lg | Primitivo | 0px 12px 16px -4px rgba(16, 24, 40, 0.08), 0px 4px 6px -2px rgba(16, 24… | 0px 12px 16px -4px rgba(16, 24, 40, 0.08), 0px 4px 6px -2px rgba(16, 24… | — |
--shadow-theme-md | Primitivo | 0px 4px 8px -2px rgba(16, 24, 40, 0.1), 0px 2px 4px -2px rgba(16, 24, 4… | 0px 4px 8px -2px rgba(16, 24, 40, 0.1), 0px 2px 4px -2px rgba(16, 24, 4… | — |
--shadow-theme-sm | Primitivo | 0px 1px 3px 0px rgba(16, 24, 40, 0.1), 0px 1px 2px 0px rgba(16, 24, 40,… | 0px 1px 3px 0px rgba(16, 24, 40, 0.1), 0px 1px 2px 0px rgba(16, 24, 40,… | — |
--shadow-theme-xl | Primitivo | 0px 20px 24px -4px rgba(16, 24, 40, 0.08), 0px 8px 8px -4px rgba(16, 24… | 0px 20px 24px -4px rgba(16, 24, 40, 0.08), 0px 8px 8px -4px rgba(16, 24… | — |
--shadow-theme-xs | Primitivo | 0px 1px 2px 0px rgba(16, 24, 40, 0.05) | 0px 1px 2px 0px rgba(16, 24, 40, 0.05) | .file-media-slider::-webkit-slider-thumb, .creativity-sli… |
--shadow-tooltip | Primitivo | 0px 4px 6px -2px rgba(16, 24, 40, 0.05), -8px 0px 20px 8px rgba(16, 24,… | 0px 4px 6px -2px rgba(16, 24, 40, 0.05), -8px 0px 20px 8px rgba(16, 24,… | — |
--tp-elevation-0 | Semântico | none | none | — |
--tp-elevation-1 | Semântico | 0 8px 24px color-mix(in srgb, #4B005A 8%, transparent) | 0 8px 24px color-mix(in srgb, #4B005A 8%, transparent) | .tp-support-shell |
--tp-elevation-2 | Semântico | 0 20px 56px color-mix(in srgb, #4B005A 18%, transparent) | 0 20px 56px color-mix(in srgb, #4B005A 18%, transparent) | .tp-toast |
--tp-elevation-3 | Semântico | 0 28px 80px color-mix(in srgb, #4B005A 24%, transparent) | 0 28px 80px color-mix(in srgb, #4B005A 24%, transparent) | — |
--tp-elevation-dialog | Semântico | 0px 20px 24px -4px rgba(16, 24, 40, 0.08), 0px 8px 8px -4px rgba(16, 24… | 0 28px 64px color-mix(in srgb, #000000 62%, transparent) | .tp-dialog |
--tp-elevation-menu | Semântico | 0px 12px 16px -4px rgba(16, 24, 40, 0.08), 0px 4px 6px -2px rgba(16, 24… | 0 12px 32px color-mix(in srgb, #000000 55%, transparent) | .tp-menu |
--tp-elevation-overlay | Semântico | 0 20px 56px color-mix(in srgb, #4B005A 18%, transparent) | 0 20px 56px color-mix(in srgb, #4B005A 18%, transparent) | — |
--tp-elevation-tooltip | Semântico | 0px 4px 8px -2px rgba(16, 24, 40, 0.1), 0px 2px 4px -2px rgba(16, 24, 4… | 0 6px 18px color-mix(in srgb, #000000 50%, transparent) | .tp-tooltip |
--tp-shadow | Semântico | 0 8px 24px color-mix(in srgb, #4B005A 8%, transparent) | 0 8px 24px color-mix(in srgb, #4B005A 8%, transparent) | .tp-map-marker-label |
--tp-shadow-float | Semântico | 0 20px 56px color-mix(in srgb, #4B005A 18%, transparent) | 0 20px 56px color-mix(in srgb, #4B005A 18%, transparent) | .tp-reference-panel, .tp-chart-tooltip |
Motion
8 token(s)Durações e curvas. Toda animação é suprimida sob prefers-reduced-motion.
| Token | Camada | Tema claro | Tema escuro | Onde se aplica |
|---|---|---|---|---|
--tp-duration | Semântico | 160ms | 160ms | — |
--tp-duration-fast | Semântico | 120ms | 120ms | .tp-button, .tp-switch-track |
--tp-duration-normal | Semântico | 160ms | 160ms | .tp-toast, .tp-toast.is-leaving, .tp-toast[data-state="cl… |
--tp-duration-slow | Semântico | 240ms | 240ms | — |
--tp-easing | Semântico | ease-out | ease-out | — |
--tp-easing-enter | Semântico | ease-out | ease-out | .tp-toast |
--tp-easing-exit | Semântico | cubic-bezier(.4, 0, 1, 1) | cubic-bezier(.4, 0, 1, 1) | .tp-toast.is-leaving, .tp-toast[data-state="closing"] |
--tp-easing-standard | Semântico | ease | ease | .tp-button, .tp-switch-track, .tp-progress-indeterminate:… |
Camada (z-index)
16 token(s)Ordem de empilhamento das camadas sobrepostas.
| Token | Camada | Tema claro | Tema escuro | Onde se aplica |
|---|---|---|---|---|
--tp-z-dialog | Semântico | 100000 | 100000 | .tp-dialog |
--tp-z-drawer | Semântico | 100000 | 100000 | .tp-drawer |
--tp-z-dropdown | Semântico | 30 | 30 | .tp-menu, .tp-tooltip |
--tp-z-menu | Semântico | 50 | 50 | .tp-reference-panel, .tp-heatmap-tooltip |
--tp-z-overlay | Semântico | 99999 | 99999 | .tp-loading-overlay |
--tp-z-popover | Semântico | 35 | 35 | .tp-mobile-cta |
--tp-z-preloader | Semântico | 999999 | 999999 | .tp-skip |
--tp-z-sticky | Semântico | 40 | 40 | — |
--tp-z-toast | Semântico | 100001 | 100001 | .tp-skip |
--z-index-1 | Primitivo | 1 | 1 | — |
--z-index-9 | Primitivo | 9 | 9 | — |
--z-index-99 | Primitivo | 99 | 99 | — |
--z-index-999 | Primitivo | 999 | 999 | — |
--z-index-9999 | Primitivo | 9999 | 9999 | — |
--z-index-99999 | Primitivo | 99999 | 99999 | — |
--z-index-999999 | Primitivo | 999999 | 999999 | — |
Breakpoint
12 token(s)Pontos de virada do layout. Os --tp-* regem o portal e o produto; os --breakpoint-* vêm da base.
| Token | Camada | Tema claro | Tema escuro | Onde se aplica |
|---|---|---|---|---|
--breakpoint-2xl | Primitivo | 1536px | 1536px | — |
--breakpoint-2xsm | Primitivo | 375px | 375px | — |
--breakpoint-3xl | Primitivo | 2000px | 2000px | — |
--breakpoint-lg | Primitivo | 1024px | 1024px | — |
--breakpoint-md | Primitivo | 768px | 768px | — |
--breakpoint-sm | Primitivo | 640px | 640px | — |
--breakpoint-xl | Primitivo | 1280px | 1280px | — |
--breakpoint-xsm | Primitivo | 425px | 425px | — |
--tp-breakpoint-desktop | Semântico | 1120px | 1120px | — |
--tp-breakpoint-mobile | Semântico | 620px | 620px | — |
--tp-breakpoint-tablet | Semântico | 860px | 860px | — |
--tp-breakpoint-wide | Semântico | 1440px | 1440px | — |
Componente
21 token(s)Medidas fixas de um componente específico, derivadas das camadas acima.
| Token | Camada | Tema claro | Tema escuro | Onde se aplica |
|---|---|---|---|---|
--tp-component-button-height-lg | Componente | 52px | 52px | .tp-button-lg |
--tp-component-button-height-md | Componente | 44px | 44px | .tp-button |
--tp-component-button-height-sm | Componente | 36px | 36px | .tp-button-sm, .tp-status-select, .tp-page-size select +1 |
--tp-component-button-primary-active | Componente | #4B005A | #FAE4FF | .tp-button-primary:active:not(:disabled) |
--tp-component-button-primary-background | Componente | #6B0080 | #EDBAF7 | .tp-button-primary |
--tp-component-button-primary-foreground | Componente | #ffffff | #4B005A | .tp-button-primary, .tp-button-primary:hover |
--tp-component-button-primary-hover | Componente | #4B005A | #FAE4FF | .tp-button-primary:hover |
--tp-component-card-radius | Componente | 18px | 18px | .tp-card |
--tp-component-composer-min-height | Componente | 7rem | 7rem | .tp-composer textarea |
--tp-component-contact-width | Componente | 20rem | 20rem | .tp-support-shell |
--tp-component-field-height-lg | Componente | 52px | 52px | .tp-input-lg |
--tp-component-field-height-md | Componente | 44px | 44px | .tp-input-md |
--tp-component-field-height-sm | Componente | 36px | 36px | .tp-input-sm |
--tp-component-field-min-height | Componente | 44px | 44px | .tp-input |
--tp-component-focus-ring | Componente | 3px solid #6B0080 | 3px solid #EDBAF7 | — |
--tp-component-inbox-list-width | Componente | 21rem | 21rem | .tp-support-shell |
--tp-component-message-max-width | Componente | 44rem | 44rem | .tp-message-row |
--tp-component-pagination-size | Componente | 2.25rem | 2.25rem | .tp-pagination-item, .tp-pagination-ellipsis |
--tp-component-skeleton-speed | Componente | 1400ms | 1400ms | .tp-skeleton, .tp-skeleton-line, .tp-skeleton-avatar |
--tp-component-toast-gap | Componente | 12px | 12px | — |
--tp-component-toast-width | Componente | 22rem | 22rem | — |
Outros
3 token(s)Tokens de compatibilidade e utilidades sem família dedicada.
| Token | Camada | Tema claro | Tema escuro | Onde se aplica |
|---|---|---|---|---|
--container-institutional | Primitivo | 1200px | 1200px | .tp-standalone |
--container-reading | Primitivo | 70ch | 70ch | — |
--spacing | Primitivo | 0.25rem | 0.25rem | — |
Nenhum token encontrado.
Revise o termo de busca ou limpe camada e família.
O ritmo antes do conteúdo.
Uma escala de onze degraus e uma grade de doze colunas sustentam todo o layout. Nada no sistema usa um valor fora delas.
Escala de espaçamento
Onze degraus, de zero a 80 px, resolvem todo o respiro do sistema. A escala é geométrica até 16 px e passa a crescer por múltiplos de 8 a partir daí, para que blocos grandes não precisem de valores intermediários inventados.
| Token | Proporção | rem | px | Quando usar |
|---|---|---|---|---|
--tp-space-0 | 0 | 0 | Colapso deliberado: remover respiro herdado sem recorrer a margem negativa. | |
--tp-space-half | 0.125rem | 2px | Separar rótulo e valor dentro de uma mesma célula ou badge. | |
--tp-space-1 | 0.25rem | 4px | Distância entre ícone e texto, marcador e rótulo. | |
--tp-space-2 | 0.5rem | 8px | Itens de uma mesma linha: chips, tags, ações agrupadas. | |
--tp-space-3 | 0.75rem | 12px | Campos de um formulário curto, células compostas, toasts empilhados. | |
--tp-space-4 | 1rem | 16px | Padding interno padrão de célula, alerta e linha de esqueleto. | |
--tp-space-5 | 1.5rem | 24px | Padding de cartão e distância entre blocos relacionados. | |
--tp-space-6 | 2rem | 32px | Separação entre grupos distintos dentro de um painel. | |
--tp-space-7 | 3rem | 48px | Distância entre sub-blocos de uma seção longa. | |
--tp-space-8 | 4rem | 64px | Respiro entre seções em telas médias. | |
--tp-space-9 | 5rem | 80px | Respiro editorial entre seções em telas largas. |
Respiro de seção por contexto
O espaço entre seções não é um degrau da escala: ele muda com a largura da tela e tem tokens próprios.
--tp-section-mobile- 68px
--tp-section-tablet- 82px
--tp-section-desktop- 104px
Medidas de controle
Alturas mínimas garantem alvo de toque confortável e alinham campo, botão e seleção na mesma linha.
--tp-control-height- 44px
--tp-cell-padding- 16px
--tp-component-field-height-sm / md / lg- 36 / 44 / 52px
--tp-component-button-height-sm / md / lg- 36 / 44 / 52px
Densidade compacta
Com data-density="compact" no contêiner, o mesmo markup reduz padding de célula e altura de controle sem trocar de token. Use o botão da seção Layout e densidade para comparar.
<div class="tp-portal" data-density="compact">…</div>
Não invente valores fora da escala. Se um respiro parecer errado entre dois degraus, o problema costuma estar na hierarquia do bloco, não na escala.
Grade, gutters e containers
O portal e o produto usam grades de colunas iguais com gutter vindo da escala de espaçamento. Abaixo, as mesmas grades que os componentes aplicam — não uma ilustração.
Grade base de 12 colunas
Gutter de --tp-space-5 (24 px) no desktop. As grades utilitárias do sistema (.tp-grid-2, .tp-grid-3, .tp-grid-4) são recortes desta base: 6, 4 e 3 colunas por item.
Resumo textual: doze colunas de largura igual, separadas por 24 px.
Gutters disponíveis
Compacto · --tp-space-2 · 8px
Padrão · --tp-space-5 · 24px
Editorial · --tp-space-6 · 32px
Grades utilitárias em uso
Cada grade colapsa em um ponto próprio para preservar a leitura. Reduza a janela para ver a virada acontecer.
| Classe | Desktop | ≤ 1120px | ≤ 860px | ≤ 620px | ≤ 390px |
|---|---|---|---|---|---|
.tp-grid-2 | 2 colunas | 2 colunas | 2 colunas | 1 coluna | 1 coluna |
.tp-grid-3 | 3 colunas | 3 colunas | 1 coluna | 1 coluna | 1 coluna |
.tp-grid-4 | 4 colunas | 2 colunas | 2 colunas | 2 colunas | 1 coluna |
Containers e larguras máximas
Largura não é decoração: ela define o comprimento de linha. Texto corrido acima de ~75 caracteres perde a leitura.
| Container | Largura máxima | Contexto |
|---|---|---|
.tp-portal | 100rem | Shell do portal, com trilho lateral de 16rem. |
.tp-header-inner | 100rem | Cabeçalho do design system e do produto. |
.tp-footer | 90rem | Rodapé compartilhado. |
.tp-content | 80rem | Páginas de conteúdo sem trilho lateral. |
.tp-site-content | 75rem | Páginas institucionais. |
--tp-component-message-max-width | 44rem | Bolha de mensagem no atendimento. |
--tp-component-inbox-list-width | 21rem | Coluna de fila no atendimento. |
--tp-component-contact-width | 20rem | Painel de contexto do contato. |
.tp-section-head p | 43rem | Texto de abertura de seção. |
Raio e borda dizem o que é a superfície.
Quanto maior a peça, maior o arredondamento. Quanto mais operável o controle, mais forte a borda.
Raios
O raio comunica a natureza da superfície: quanto maior a peça, maior o arredondamento. Controles ficam entre 4 e 8 px; painéis, entre 12 e 18 px; peças editoriais chegam a 42 px.
--tp-radius-none
0 · Tabelas, células e blocos que encostam em outra borda.
--tp-radius-xs
4px · Marcadores, chips de cor, células de mapa de calor.
--tp-radius-sm
6px · Seleção de situação, chips de filtro internos, camadas do diagrama.
--tp-radius-md
0.5rem · Campos, botões, menus e itens de paginação.
--tp-radius-lg
0.75rem · Cartões de indicador, toasts e painéis do atendimento.
--tp-radius-xl
18px · Cartões do portal (.tp-card).
--tp-radius-2xl
20px · Superfícies expressivas em contexto institucional.
--tp-radius-3xl
24px · Blocos editoriais e destaques de campanha.
--tp-radius-full
999px · Badges, avatares, pílulas de status e barras de progresso.
Raios editoriais do manual
A cascata consolidada do guia de marca convive com a escala de interface. Use estes valores apenas em peças institucionais e de campanha.
--radius-editorial-sm- 12px
--radius-editorial-md- 18px
--radius-editorial-lg- 24px
--radius-editorial-xl- 32px
--radius-editorial-2xl- 42px
Aliases de compatibilidade: --tp-radius-md lê --tp-radius e --tp-radius-lg lê --tp-card-radius, e não o contrário: os nomes de contexto são a origem porque é neles que o perfil institucional atua. --tp-component-card-radius aponta para --tp-radius-xl, o raio do .tp-card. Prefira sempre o nome da escala.
Bordas
A borda separa superfícies sem criar peso. O sistema usa uma espessura padrão e três tons; qualquer valor acima de 1 px é excepcional e sempre tem função — foco, seleção ou marcação de estado.
Espessuras
1px · --tp-border-width · padrão de cartão, campo, tabela e menu
2px · traço de ícone, contorno de amostra e estado de erro em seleção
3px · --tp-focus-width e marcação lateral de alerta, toast e aba ativa
Tons
| Token | Amostra | Claro | Escuro | Função |
|---|---|---|---|---|
--tp-border-default | #E5E5E5 | #4D4153 | Separação padrão: cartão, tabela, campo, menu. | |
--tp-border-subtle | #E5E5E5 | #4D4153 | Divisões internas de um mesmo bloco. Hoje resolve no mesmo valor de default; o nome existe para permitir divergir sem reescrever markup. | |
--tp-border-strong | #807184 | #938697 | Contorno de controle operável: campo, seleção, botão secundário. Contraste verificado ≥ 3:1 contra a superfície. |
Superfície de leitura. A borda apenas delimita.
Divisão interna. A borda não deve competir com o conteúdo.
Superfície operável. A borda indica que há algo a fazer aqui.
Foco nunca é só borda: --tp-focus-width (3px) desenha um outline com --tp-focus-offset (3px) fora do controle, preservando a borda original e o contraste em ambos os temas.
Quatro formas, sempre na margem.
Arco de grande raio, linha de acento, pontos modulares e gradiente institucional. Os grafismos organizam, direcionam o olhar ou reforçam a presença da marca — não preenchem espaço vazio por decoração.
São quatro grafismos, e só quatro: arco de grande raio, linha de acento, pontos modulares e gradiente institucional. Todos saem dos mesmos primitivos de cor da marca — nenhum introduz forma, cor ou textura fora do sistema.
Regra do guia de estilos: os grafismos nunca competem com a informação. Devem organizar, direcionar o olhar ou reforçar a presença da marca — não preencher espaço vazio por decoração.
Os quatro grafismos
Cada exemplo é a classe real aplicada a uma superfície comum. O contêiner é .tp-graphic; o desenho é um filho decorativo, sempre aria-hidden="true"; o texto fica dentro de .tp-graphic-content, que devolve a zona reservada do grafismo e por isso nunca é cruzado por ele.
Arco de grande raio
Presença da marca na margem. Sai pelo canto: o raio é sempre maior que a peça que o recebe.
Linha de acento
Direciona o olhar para a próxima informação. Uma linha por superfície, sempre na margem.
Pontos modulares
Marcam ritmo e ancoram um canto. Sempre em grade regular, nunca espalhados pela superfície.
Gradiente institucional
Faixa de marca. Russian Violet → Purple → Mauveine, com texto claro por cima.
O arco, medido na capa do manual
Corrigido em 22/09/2026. A capa do guia de marca desenha o arco, e ele não era o que o guia digital supunha. As medidas abaixo saíram de getBBox() e de varredura de isPointInFill em Chromium, sobre a própria prancha — duas medições independentes que fecham no mesmo número.
| Medida | Unidades | Fração | Onde entra |
|---|---|---|---|
| Raio interno | 394,67 | — | Extremos horizontais em 459,82 e 1249,16 |
| Diâmetro externo | 1273,04 | — | Largura do bounding box do próprio anel |
| Faixa | 241,84 | 0,189979 | --tp-graphic-arc-ratio |
| Terminais | r ≈ 18,18 | — | Cantos arredondados da ponta da faixa |
| Tinta | #4B005A | — | Russian violet sobre Pale purple. O sistema usava Purple |
Cuidado com o número que se lê direto do vetor. O path começa com h-205,49, e esse 205,49 é só o trecho reto da ponta da faixa: faltam ali os dois cantos arredondados (205,49 + 2 × 18,18 = 241,85). Tomar 205,49 como a faixa — e derivar o diâmetro externo como raio interno mais faixa — dá 0,1712, 10% abaixo da construção real. O anel do manual é mais grosso do que parece na leitura ingênua do vetor.
A faixa deixou de ser um pixel por escala (era 16/112, 24/170 e 36/260, ou 0,1429, 0,1412 e 0,1385 — as três abaixo da norma, e cada uma com um erro diferente) e passou a ser derivada do diâmetro: calc(var(--tp-graphic-arc-size) * var(--tp-graphic-arc-ratio)). A 112 / 170 / 260 px isso dá 21 / 32 / 49 px. A troca de tinta é conservadora para contraste: Russian violet é mais escuro que Purple, então sobre superfície clara o desenho só ganha peso; sobre fundo de marca e no tema escuro, --tp-graphic-ink continua sendo redeclarado pelo contexto.
O arco companheiro, em fio
A capa traz dois arcos. Além do anel cheio há um segundo, de geometria idêntica, deslocado na diagonal em 35,93 unidades (17,5% da faixa) e traçado em fio de 1 unidade, com o stroke em gradiente Phlox → Purple. O sistema não tinha nenhum grafismo com traço em gradiente.
Arco e arco companheiro
O anel cheio mais .tp-graphic-arc-wire, como a capa do manual compõe os dois.
border não aceita gradiente, então o fio é um fundo em gradiente recortado por máscara radial closest-side — o que mantém o fio em 1 px lógico em qualquer escala e o deslocamento diagonal proporcional à faixa. É decorativo como os demais e nunca fica atrás de texto: por isso é o único gradiente do bloco que pode terminar em Phlox.
Uso correto e uso incorreto
A diferença não é estética. É se o grafismo ajuda a ler ou se disputa atenção com o que precisa ser lido. Os dois exemplos marcados como Evitar usam .tp-graphic-overlap: é a única forma de desligar a zona reservada, e existe só para demonstrar aqui o erro que o guia proíbe.
Fazer Uso correto
Resgates do trimestre
A linha fica na faixa reservada, abaixo do texto. Ela aponta para o bloco seguinte e sai da leitura.
Cabeçalho de seção: o grafismo fica na margem e direciona o olhar.
Evitar Uso incorreto, mostrado de propósito
128.400
Os pontos passam por trás do número. O dado é lido sobre textura, a leitura fica mais lenta e nada é acrescentado em troca.
Indicador: nada pode passar atrás do número. O grafismo compete com o dado.
Fazer Uso correto
Reconhecimento que vira resultado
Faixa institucional com texto claro. Os pontos ocupam a faixa reservada no rodapé e não roubam contraste do título.
Faixa de marca: gradiente com .tp-graphic-on-brand implícito e texto em --tp-on-dark.
Evitar Uso incorreto, mostrado de propósito
Três grafismos, nenhuma hierarquia
Arco dentro da peça em vez de sangrar pela margem, mais linha, mais superfície. Cada elemento pede atenção e o título deixa de ser o primeiro a ser lido.
Um grafismo por superfície. O arco sangra pela borda; ele não é um enfeite centralizado.
Regras de aplicação
- Um grafismo por superfície. Dois só quando um deles é o gradiente de fundo.
- O grafismo fica na margem. O contêiner reserva a faixa que o desenho alcança e
.tp-graphic-contenta devolve como recuo — arco, linha ou ponto nunca passam atrás de número, rótulo, campo ou botão. - Grafismo é decorativo:
aria-hidden="true"no markup epointer-events: noneno CSS. Nunca recebe foco nem entra na ordem de leitura. - Se o grafismo precisar conviver com texto na mesma faixa vertical, use
.tp-graphic-soft. Quem recua é o grafismo, nunca o contraste do texto. - Sobre gradiente ou painel escuro, use
.tp-graphic-on-brand: o desenho passa a branco transparente e o texto permanece em--tp-on-dark. - Em tela estreita, arco e linha encolhem sozinhos e a zona reservada encolhe junto. Se ainda assim o grafismo cobrir conteúdo, remova o grafismo — não reduza o texto.
- Nenhum grafismo anima. Movimento aqui não explica nada.
.tp-graphic-overlapdesliga a zona reservada. Ela existe para o contraexemplo desta página e não tem uso legítimo em produção.
| Grafismo | Classe | Tokens | Zona reservada | Onde aplicar |
|---|---|---|---|---|
| Arco de grande raio | .tp-graphic-arc |
--tp-graphic-ink (= --color-brand-dark) · --tp-graphic-arc-ratio · --tp-radius-full |
47% do diâmetro (80 px no padrão) | Canto de cartão de destaque, hero, faixa institucional e estado vazio. Variantes -start, -end, -sm, -lg, -wire. |
| Linha de acento | .tp-graphic-line |
--color-brand-accent · --tp-space-3 · --tp-space-5 · --tp-radius-full |
Afastamento de 40 px mais a caixa girada | Cabeçalho de seção e transição entre blocos. Variantes -start, -end, -sm, -lg. |
| Pontos modulares | .tp-graphic-dots |
--color-brand-primary · --tp-space-2 · --tp-space-5 · --tp-radius-full |
Afastamento de 24 px mais a altura da grade | Rodapé de cartão, canto de faixa e estado vazio. Variantes -start, -end, -sm, -lg. |
| Gradiente institucional | .tp-graphic-gradient |
--color-brand-dark → --color-brand-primary → --color-brand-mid · --tp-on-dark |
Nenhuma: ocupa a superfície inteira, atrás do texto | Faixa de campanha, hero institucional e painel de marca. Não use como fundo de tabela, formulário ou lista operacional. |
Contraste do gradiente: a parada mais clara é Mauveine (#81009B). Texto branco sobre ela resolve em 8,7:1, acima do mínimo AA de 4,5:1. Phlox fica fora do gradiente porque derrubaria o mesmo par para 4,0:1.
No tema escuro o roxo institucional some sobre a superfície escura: arco, linha e pontos passam a derivar de --tp-action e --color-brand-accent com transparência, e o gradiente escurece uma parada. Nenhuma cor nova é introduzida.
O que está por cima de quê.
Quatro níveis genéricos e três papéis nomeados. No tema escuro, os papéis têm valor próprio, porque sombra não clareia superfície escura.
Níveis e papéis
A elevação responde a uma pergunta: o que está por cima de quê. Quatro níveis genéricos e três papéis nomeados cobrem o sistema. No tema escuro, sombra clareia pouco — por isso os níveis de menu, tooltip e diálogo têm valor próprio, mais opaco.
--tp-elevation-0
Superfície rente: tabela, célula, item de lista, cartão dentro de painel.
--tp-elevation-1
Cartão destacado e painel que flutua sobre a página.
--tp-elevation-2
Toast e sobreposições ancoradas.
--tp-elevation-3
Peça de destaque máximo; use com parcimônia.
--tp-elevation-menu
Dropdown, menu de referência, mega-painel e menu do usuário.
--tp-elevation-tooltip
Dica de contexto e tooltip de gráfico.
--tp-elevation-dialog
Modal, gaveta e qualquer superfície que retém o foco.
| Token | Componente | Tema claro | Tema escuro |
|---|---|---|---|
--tp-elevation-0 | Tabela, lista, cartão embutido | none | none |
--tp-elevation-1 | Cartão flutuante | 0 8px 24px · #4B005A 8% | mesmo valor |
--tp-elevation-2 | .tp-toast | 0 20px 56px · #4B005A 18% | mesmo valor |
--tp-elevation-3 | Destaque editorial | 0 28px 80px · #4B005A 24% | mesmo valor |
--tp-elevation-menu | .tp-menu | sombra fria da base | 0 12px 32px · preto 55% |
--tp-elevation-tooltip | .tp-tooltip | sombra fria da base | 0 6px 18px · preto 50% |
--tp-elevation-dialog | .tp-dialog, .tp-drawer | sombra fria da base | 0 28px 64px · preto 62% |
Elevação não substitui borda. Toda superfície flutuante mantém --tp-border-default para continuar legível em alto contraste e quando a sombra é suprimida pelo sistema operacional.
Movimento que explica.
Três durações, três curvas e uma regra: animar só o que tem origem e destino. Tudo respeita movimento reduzido.
Durações, curvas e regra de uso
Movimento existe para explicar uma mudança de estado, nunca para enfeitar. Três durações e três curvas cobrem o sistema inteiro. Acima de 240 ms a interface passa a parecer lenta; abaixo de 120 ms a transição não é percebida e só atrapalha.
Rápido · --tp-duration-fast · 120ms · --tp-easing-standard
Normal · --tp-duration-normal · 160ms · --tp-easing-enter
Lento · --tp-duration-slow · 240ms · --tp-easing-exit
| Token | Valor | Quando usar |
|---|---|---|
--tp-duration-fast | 120ms | Realce imediato: hover de botão, cor de trilho de switch, foco. |
--tp-duration-normal | 160ms | Entrada e saída de toast, abertura de menu, troca de aba. |
--tp-duration-slow | 240ms | Superfícies grandes: gaveta, modal, painel lateral. |
--tp-easing-standard | ease | Mudança de propriedade dentro de um elemento que já está na tela. |
--tp-easing-enter | ease-out | Entrada: o elemento desacelera ao chegar. É a curva do .tp-toast. |
--tp-easing-exit | cubic-bezier(.4, 0, 1, 1) | Saída: o elemento acelera ao sair, liberando a atenção mais rápido. |
--tp-component-skeleton-speed | 1400ms | Ciclo do brilho do esqueleto de carga. |
Quando a mudança tem origem
Entrada e saída de sobreposição, expansão de acordeão, confirmação que aparece perto do gatilho, item que muda de posição em uma lista. O movimento mostra de onde veio e para onde foi.
Quando a mudança é o conteúdo
Resultado de busca, valor numérico, troca de página, mensagem de erro. Também não anime nada que atrase a leitura de um estado crítico de segurança, financeiro ou de falha.
Movimento reduzido é regra, não exceção
Toda animação do sistema — toast, esqueleto, progresso indeterminado, botão em carga, giro do spinner — está dentro de um bloco prefers-reduced-motion que a substitui por um estado estático equivalente. O conteúdo nunca depende da animação para ser compreendido.
@media (prefers-reduced-motion: reduce) {
.tp-toast { animation: none; }
.tp-skeleton-line { animation: none; background-image: none; }
.tp-progress-indeterminate::before { animation: none; inline-size: 100%; }
}
Uma pilha, nove nomes.
Nenhum componente declara um número solto de z-index: ele recebe o token da camada a que pertence.
Pilha de empilhamento
Nove camadas nomeadas, em ordem crescente. Nenhum componente declara um número solto: se algo precisa subir, ele recebe o token da camada a que pertence. O diagrama abaixo mostra a pilha com o elemento mais ao fundo no topo da lista e o mais à frente embaixo.
--tp-z-dropdown30--tp-z-popover35--tp-z-sticky40--tp-z-menu50--tp-z-overlay99999--tp-z-drawer100000--tp-z-dialog100000--tp-z-toast100001--tp-z-preloader999999
Resumo textual: dropdown (30) e popover (35) ficam sobre o conteúdo; sticky (40) e menu (50) sobre eles; overlay (99999), gaveta e diálogo (100000) retêm a interação; toast (100001) fica acima do diálogo; o preloader (999999) cobre tudo até a aplicação iniciar.
| Token | Valor | Componente | Regra |
|---|---|---|---|
--tp-z-dropdown | 30 | .tp-menu | Menu ancorado a um gatilho. Fecha ao clicar fora. |
--tp-z-popover | 35 | .tp-mobile-cta | Barra fixa de ação no mobile. |
--tp-z-sticky | 40 | Cabeçalhos fixos de tabela e trilho lateral | Fica acima do conteúdo, abaixo de qualquer sobreposição. |
--tp-z-menu | 50 | .tp-heatmap-tooltip | Camada auxiliar acima do conteúdo fixo. |
--tp-z-overlay | 99999 | .tp-loading-overlay | Véu que bloqueia a interação de um container. |
--tp-z-drawer | 100000 | .tp-drawer | Gaveta lateral com foco contido. |
--tp-z-dialog | 100000 | .tp-dialog | Modal com foco contido. Empata com a gaveta: nunca abra as duas ao mesmo tempo. |
--tp-z-toast | 100001 | .tp-toast-region | Avisos temporários. Precisam ficar visíveis mesmo com um modal aberto. |
--tp-z-preloader | 999999 | .tp-preloader | Tela de carregamento inicial. Sai assim que o Alpine inicializa. |
Os tokens --z-index-1 a --z-index-999999 vêm da base TailAdmin e permanecem para compatibilidade das páginas originais. Em código novo, use apenas os --tp-z-*: eles nomeiam o papel, não o número.
Quatro viradas, quatro razões.
O layout muda quando a leitura pede, não quando o dispositivo muda de nome.
Pontos de virada e o que muda em cada um
O layout vira em quatro pontos próprios do sistema. Cada virada tem uma razão de leitura, não um dispositivo: a coluna deixa de caber, a tabela precisa rolar, o trilho lateral vira barra horizontal.
| Token | Valor | O que muda |
|---|---|---|
--tp-breakpoint-mobile | 620px | Todas as grades viram uma coluna. O hero perde o grafismo e reduz o título. O toast passa a ocupar a largura da tela. A paginação centraliza. O CTA institucional fixa no rodapé. A lista de mensagens reduz o padding e a bolha usa 100% da largura. |
--tp-breakpoint-tablet | 860px | Os links do cabeçalho dão lugar ao menu mobile. O trilho lateral do portal vira uma faixa de navegação horizontal rolável. .tp-grid-3 vira uma coluna. O shell de atendimento empilha fila, conversa e contexto. |
--tp-breakpoint-desktop | 1120px | O trilho lateral encolhe de 16rem para 13rem, o rótulo do cabeçalho some e .tp-grid-4 passa a duas colunas. O painel de contato do atendimento desce para a largura total. |
--tp-breakpoint-wide | 1440px | Largura de referência para conferência de layout. O container já está limitado em 100rem, então acima disso apenas a margem externa cresce. |
Ponto extra de segurança
Abaixo de 390 px o cabeçalho quebra em duas linhas, .tp-grid-4 vira uma coluna e os rótulos de botão passam a permitir quebra em qualquer ponto, para que nenhum texto seja cortado em telas muito estreitas.
Breakpoints herdados da base
As 88 páginas originais adaptadas continuam usando a escala do template. Ela permanece publicada para compatibilidade; código novo usa os --tp-breakpoint-* acima.
--breakpoint-2xsm- 375px
--breakpoint-xsm- 425px
--breakpoint-sm- 640px
--breakpoint-md- 768px
--breakpoint-lg- 1024px
--breakpoint-xl- 1280px
--breakpoint-2xl- 1536px
--breakpoint-3xl- 2000px
Zoom até 200% é equivalente a reduzir a largura: as mesmas viradas se aplicam. Nenhum conteúdo do sistema depende de largura mínima para ser lido, e toda tabela fica dentro de uma região rolável com foco por teclado.
O contexto define o ritmo.
O institucional parte do container de 1200 px do guia consolidado. O ERP adapta espaços, tipografia e controles para leitura operacional.
Institucional
Respiro editorial, largura de leitura e títulos expressivos. Raios consolidados de 12, 18, 24, 32 e 42 px.
ERP e produto
Controles e células ajustados por densidade, números tabulares, tabelas com rolagem delimitada e títulos legíveis.
A cascata inicial do guia (1180 px / raios 10 e 16 px) foi reconciliada com a especificação consolidada. Escalas operacionais são propostas técnicas; os breakpoints da base são preservados.
Uma experiência, três formatos.
O colaborador usa o aplicativo no telefone; a gestão trabalha no desktop. O mesmo sistema se adapta ao espaço que recebe, não ao nome do aparelho.
Telas conceituais. Orientam o sistema; não representam produto publicado nem regras de negócio aprovadas. Premissas e decisões pendentes estão em Plataformas e dispositivos.
Matriz de plataformas
A coluna vale para a largura que o aplicativo recebe. .tp-app é um contêiner de consulta: a mesma casca vira telefone num painel estreito de um monitor grande.
| Aspecto | Telefone · aplicativo | Tablet | Desktop |
|---|---|---|---|
| Largura do app | até 620 px | 621 a 1120 px | acima de 1120 px |
| Quem usa | Colaborador (uso principal) e gestor, em decisões rápidas | Colaborador; gestão em consulta | Gestão e RH, atendimento; colaborador no navegador |
| Navegação | Barra de abas inferior, 3 a 5 destinos | Trilho lateral de 96 px | Navegação lateral de 256 px, com a marca |
| Colunas e margens | 1 coluna, margem de 16 px | 2 colunas ou lista-detalhe (lista em 42%), margem de 24 px | 2 colunas assimétricas ou lista-detalhe, margem de 32 px, conteúdo até 72rem |
| Alvo mínimo | 44 × 44 px | 44 × 44 px | 44 px na navegação e nos botões; 24 px é o piso só para controles de ponteiro (WCAG 2.5.8) |
| Tipografia | Corpo de 16 px; título da barra de 18 px | Corpo de 16 px; título de 24 px | Corpo de 14 px; título de 24 px |
| Densidade | Confortável; linhas de 64 px | Confortável | Linhas de 56 px; o painel da gestão aceita a densidade compacta |
| Entrada | Toque; teclado externo e leitor de tela | Toque e teclado externo | Ponteiro e teclado; toque em notebooks conversíveis |
| O que é primário | Consultar saldo, reconhecer, resgatar | Catálogo e extrato com lista e detalhe à vista | Campanhas e pontos no painel; resgate no navegador |
| Confirmação | Folha inferior com alça e Fechar | Diálogo centralizado | Diálogo centralizado ou painel lateral (.tp-drawer) |
Dois públicos, uma casca
Decidido em 22/09/2026: além do colaborador, o gestor tem aplicativo. Não é o painel encolhido — resolve o que aparece no meio do dia: uma aprovação, um crédito, uma olhada na campanha. A casca é a mesma; o que muda são os destinos.
| Aspecto | Colaborador | Gestor |
|---|---|---|
| Destinos | Início, Reconhecer, Catálogo, Extrato (Perfil no avatar) | Início, Aprovações, Campanhas |
| Número principal | Saldo disponível | Pontos para distribuir, dentro da cota do trimestre |
| Ação primária | Reconhecer um colega; resgatar um prêmio | Reconhecer e creditar; decidir uma solicitação |
| Onde a conta fecha | Saldo no início do período + créditos − débitos = saldo de hoje | Pontos creditados + pontos para distribuir = cota do trimestre |
| Fora do app | — | Relatórios, criação de campanhas, importação de pessoas e distribuição em massa, no painel web |
A mesma tela em três molduras
O mesmo markup do Início, sem uma linha diferente, em três larguras. A barra de abas vira trilho e depois navegação lateral; os blocos passam de uma para duas colunas.
Olá, Júlia
Não foi possível conectar. Verifique sua conexão e tente novamente.
Saldo disponível
12.480pts
Reconhecer quem faz junto
Envie 5 reconhecimentos a colegas neste trimestre. Regras demonstrativas.
reconhecimentos enviados
Reconhecimentos recentes
Ao seu alcance
Reconhecimento registrado nesta demonstração
- Entrega
- Prazo
- Informado pelo programa
- Saldo após o resgate
Selecione um prêmio para ver os detalhes e resgatar.
- Saldo
- Créditos
- Débitos
Nenhuma movimentação neste período. Escolha um período maior.
- Data
- Origem
- Identificador
- Pedido
Prazos e entregas são informados pelo programa. Dados demonstrativos.
Selecione uma movimentação para ver os detalhes.
Júlia Andrade
julia.andrade@trocapontos.com.br
Analista de operações
Notificações
Conta
Recebidas
Confirmar resgate
Revise os dados antes de confirmar.
- Prêmio
- Pontos
- Saldo após o resgate
Demonstração local. Nenhum pedido é criado e nenhum ponto real é debitado.
Padrões de aplicativo
| Padrão | Classes | Regra |
|---|---|---|
| Casca adaptável | .tp-app | Contêiner de consulta que posiciona barra, conteúdo e navegação. Não herda a densidade compacta do portal: alvos continuam em 44 px. |
| Barra superior | .tp-app-bar, .tp-app-title, .tp-app-icon-button | Título alinhado ao início; Voltar à esquerda; até duas ações à direita. Soma a área segura do topo. |
| Navegação principal | .tp-app-nav, .tp-tab-bar, .tp-nav-rail, .tp-app-nav-item | 3 a 5 destinos, ícone e rótulo sempre visíveis, aria-current="page" com pílula ou barra lateral. .tp-app-nav adapta; as outras duas fixam a forma. |
| Linha de lista | .tp-list-group, .tp-list-row, .tp-app-row-actions | Avatar ou ícone, texto primário e secundário, valor e chevron. Estática, acionável ou escolha (radio). 64 px no toque. Com mais de uma ação na linha, os botões entram em .tp-app-row-actions e a linha deixa de ser acionável. |
| Cartão de saldo | .tp-balance com .tp-graphic-gradient | Número em Passo com dígitos tabulares; o arco fica na faixa reservada, nunca atrás do número. |
| Folha inferior | .tp-sheet-layer, .tp-sheet | role="dialog" e aria-modal, foco contido, Esc e retorno ao acionador, como .tp-dialog. Alça decorativa e botão Fechar; vira diálogo acima de 620 px. |
| Segmentado e filtros | .tp-segmented, .tp-app-chips | Radios nativos: uma parada de Tab, setas para trocar. Selecionado tem preenchimento e marca de seleção. Desenho de 36 px, alvo de 44 px. |
| Barra de ação | .tp-app-actionbar | A ação primária gruda no rodapé da área rolável, na zona do polegar. |
| Lista-detalhe | .tp-app-split | Lista e detalhe se revezam no telefone; ficam lado a lado acima de 620 px, cada um com rolagem própria. |
| Estados | .tp-app-state, .tp-app-banner | Carregando, vazio, erro com Tentar novamente e sem conexão, com as mensagens da biblioteca. |
| Molduras | .tp-device, -phone, -tablet, -desktop | Só para documentação. Genéricas: sem entalhe, ilha ou botões de fabricante. |
- +Campanha01/09/2026+2.000 pts
- −Resgate22/08/2026−3.200 pts
env(safe-area-inset-*) e somados às barras. Tracejado: alvo de 44 × 44 px.Área segura, alvo e movimento
- A barra superior soma
env(safe-area-inset-top); a barra de abas e a folha,env(safe-area-inset-bottom); trilho e margens, as laterais. A página precisa deviewport-fit=cover. - Todo controle de toque tem 44 × 44 px. Quando o desenho é menor (filtros de 36 px), o radio invisível estende o alvo.
- Folha e diálogo entram com deslocamento de 24 px em 240 ms (
--tp-duration-slow). Com movimento reduzido, aparecem sem deslocamento. - Nada depende só de gesto: arrastar a folha tem o botão Fechar; deslizar uma linha tem o botão equivalente.
Uso correto e uso incorreto
Os exemplos marcados como Evitar mostram de propósito o erro. São ilustrações estáticas, fora da ordem de Tab.
Fazer Quatro destinos com rótulo
Cada destino tem ícone e rótulo inteiros. Perfil fica no avatar da barra superior.
Evitar Mais de cinco destinos
Sete destinos: rótulos cortados e alvos abaixo de 44 px. Agrupe ou leve para a barra superior.
Evitar Ícone sem rótulo
A estrela é reconhecer ou favoritar? Sem rótulo, a pessoa adivinha, e o leitor de tela depende de um nome que ninguém vê.
Fazer Ação primária no rodapé
Kit de café especial
3.200 pts
O botão fica na zona do polegar e ocupa a largura da tela.
Evitar Ação primária fora do alcance
Kit de café especial
3.200 pts
Link pequeno no canto superior: longe do polegar, abaixo de 44 px e com peso de ação secundária.
Fazer Gesto com caminho visível
- Mariana Sydow reconheceu você por Colaboração.18/09/2026 · Não lida
Deslizar pode existir como atalho; o botão faz a mesma coisa para quem usa teclado, leitor de tela ou não conhece o gesto.
Evitar Gesto como único caminho
- Mariana Sydow reconheceu você por Colaboração.Deslize para a esquerda para marcar como lida
Sem botão, a ação some para teclado e leitor de tela, e a instrução ocupa o lugar da informação.
iOS e Android
O sistema só toma posição onde a diferença afeta o uso. O resto segue a plataforma.
| Aspecto | iOS | Android | Posição do sistema |
|---|---|---|---|
| Voltar | Chevron; gesto a partir da borda | Seta; voltar do sistema (gesto ou botão) | O ícone segue a plataforma e o nome acessível é sempre "Voltar". O voltar do sistema nunca é bloqueado e fecha primeiro a folha aberta. |
| Título da barra | Centralizado por padrão | Alinhado ao início | Alinhado ao início nas duas. Títulos em pt-BR são longos e, centralizados entre dois botões, truncam cedo. |
| Rótulos das abas | Sempre visíveis | Podem sumir nos destinos inativos | Sempre visíveis nas duas. |
| Folha inferior | Alça; arrastar para fechar | Alça; arrastar ou voltar do sistema | Alça e botão Fechar visível nas duas. Arrastar nunca é o único caminho. |
Decidido em 22/09/2026
Respostas da responsável pelo projeto. Detalhe e consequências em Plataformas e dispositivos.
- Haverá aplicativo para o gestor; o painel web segue como a experiência principal da gestão no desktop.
- O app será nativo, multiplataforma e web responsivo: a camada
TP:APPvale para os três, como CSS na web e como especificação no nativo. - As abas do colaborador estão confirmadas: Início, Reconhecer, Catálogo e Extrato.
- Reconhecer um colega movimenta pontos, tirados do saldo de quem envia.
- Inter também no app nativo, e os ícones são os do próprio sistema, não os das plataformas.
- O app segue o tema do sistema e também oferece alternador, com padrão "seguir o sistema" e escolha guardada.
Ainda sem decisão
Registradas como pendência, não como regra. Dependem da responsável pelo projeto.
- Regras de resgate: a resposta foi "consultar nos termos de uso", e o arquivo dos termos não existe aqui. Falta ele para alinhar prazo, entrega e cancelamento nas telas; até lá os textos continuam genéricos e nada promete prazo.
- Título grande do iOS nas telas de primeiro nível.
- Co-branding com a empresa cliente.
- Mecânica real de campanhas e quais gestos o produto terá.
Aplicativo e dispositivos
Fluxo completo e navegável no telefone, o mesmo aplicativo em tablet e desktop, os quatro estados de tela, as três telas do gestor e o caminho para o painel da gestão.
Simples, direta, consistente.
Desenho em 24 × 24, traço de 2 e cantos arredondados. SVGs funcionais da implementação, sem nova dependência de fontes de ícones.
A grade do manual, agora como token
Texto literal da p.23: “utilize o tamanho de 24x24 px dentro de um artboard de 48x48 px… considere sempre cantos arredondados entre 1 px e 4 px… considere 2 px para a espessura do traçado”. São 2 px, sem “aproximadamente” — a palavra era nossa, não do manual. Até 22/09/2026 esses números só existiam em prosa.
| Token | Valor | Texto do manual |
|---|---|---|
--tp-icon-grid | 24px | “o tamanho de 24x24 px” |
--tp-icon-artboard | 48px | “dentro de um artboard de 48x48 px” |
--tp-icon-stroke | 2 | “considere 2 px para a espessura do traçado” |
--tp-icon-corner-min / -max | 1px / 4px | “cantos arredondados entre 1 px e 4 px” |
Duas famílias, e o critério que as separa. .tp-icon é a família da marca e tira a espessura de --tp-icon-stroke: é a única usada nas superfícies institucionais — esta página e a institucional não trazem nenhum stroke-width embutido no markup. A segunda é a iconografia de interface do TailAdmin, registrada como extensão técnica em D15: a varredura de 22/09/2026 conta 111 ícones em grade de 24×24 nos partials, 98 abaixo de 2 px (61 em 1.5, 33 em 1.2, 3 em 1.94437, 1 em 1.8). Nenhum foi reescrito — a norma de 2 px é de desenho de ícone da marca, e o chrome de um template de interface não é onde a marca se apresenta. A divergência está registrada com o número, em vez de resolvida por reescrita.
O artboard de 48 × 48 é referência de construção, não obrigação de tamanho de todo controle. Material Symbols Rounded é a referência do site descrita no guia; esta extensão usa SVG outline local. Fotografia autêntica e diversa é recomendação, não norma visual. Arcos e pontos são apoio, nunca símbolos improvisados.
Use. Combine. Teste.
Os mesmos partials usados nas jornadas estão aqui. Interações em memória, identificadores únicos e estados acessíveis.
Ações e links
Campos e seleção
Um título curto ajuda a encontrar o registro.
Somente leitura neste exemplo.
Seletor nativo; formato conforme o navegador.
O navegador oferece sugestões; o valor ainda precisa ser validado no fluxo real.
Navegação e sobreposições
Dropdown: setas, Home e End. Modais: foco contido, Escape e retorno ao acionador.
Mensagem consultiva demonstrativa; escopo sujeito à validação comercial.
Tabela e filtros
| Área | Situação | Atualizado em | ||
|---|---|---|---|---|
Nenhum registro encontrado.
Revise o termo de busca ou limpe os filtros.
Feedback e estados
Os dados desta página são fictícios e não representam resultados da Troca Pontos.
Revise os campos indicados e tente novamente. Seus dados permanecem nesta tela.
A confirmação permanece até você fechá-la.
Skeleton decorativo; a disponibilidade do conteúdo não depende da animação.
Comece pelo primeiro registro.
Ao criar um rascunho, ele aparecerá na listagem para revisão.
Abrir cadastro demonstrativoAlertas e badges
Alerta permanece na tela até a situação mudar. Diferente do toast, ele fica onde a decisão será tomada. Quatro tons, cada um com glifo próprio — o tom nunca é comunicado só pela cor.
Reconhecimento Trimestral está ativa para 312 colaboradores. Os pontos serão creditados no encerramento, em 30/09/2026.
Os colaboradores não verão benefícios desses parceiros até a publicação. A campanha continua ativa.
Revisar parceirosOs registros têm matrícula duplicada. Nenhum ponto foi debitado do orçamento da campanha. Corrija as matrículas e repita o crédito.
Pontos creditados a partir de 01/10/2026 expiram em doze meses. O saldo anterior mantém a regra antiga.
Alerta dispensável
Nenhum valor desta tela representa resultado real da Troca Pontos.
Só é dispensável o alerta cuja informação continua disponível em outro lugar. Erro que bloqueia uma ação não recebe botão de fechar.
Badges · os cinco tons
Cada badge carrega um glifo textual antes do rótulo, para que o significado sobreviva em impressão monocromática, alto contraste e daltonismo. .tp-badge-info é o tom mais recente da família e usa os tokens --tp-status-info-*.
Alerta, toast ou estado de falha
| Componente | Duração | Use quando |
|---|---|---|
.tp-toast | 7 segundos | Resultado de uma ação que o usuário acabou de disparar e que não exige decisão. |
.tp-alert | Até a situação mudar | Condição persistente que afeta o que está na tela e pode exigir uma ação. |
.tp-error-state | Até recuperar | O conteúdo não pôde ser carregado; não há o que mostrar no lugar. |
.tp-field-error | Até corrigir | O problema é de um campo específico e está associado a ele por aria-describedby. |
Avisos temporários (toast)
Aviso temporário para o resultado de uma ação que o usuário acabou de disparar. Some sozinho em sete segundos, pode ser fechado antes e nunca carrega a única via de acesso a uma informação: o mesmo conteúdo permanece na tela de origem.
Amostra estática dos quatro tons
Renderizadas fora da região fixa, para conferência lado a lado. O glifo à esquerda distingue os tons sem depender da cor.
4.500 pontos debitados do saldo de Ana Ribeiro.
Faltam 1.200 pontos para este benefício.
Nenhum ponto foi debitado.
Créditos entram no saldo em 24 horas.
Contrato de uso
- Um toast por ação. Não empilhe o mesmo aviso repetido.
- Erro que exige decisão não é toast: é
.tp-alertou.tp-error-stateno lugar onde a decisão será tomada. - A região usa
aria-live="polite": o leitor de tela anuncia sem interromper a leitura em curso. - O relógio de sete segundos pausa enquanto o ponteiro ou o foco estão na região e retoma o tempo restante quando saem. Fechar um aviso com o foco dentro leva o foco ao aviso seguinte ou, sem outro, de volta ao botão que o disparou.
- Posição alternativa por classe:
.tp-toast-region-start(canto esquerdo) e.tp-toast-region-top(topo). - Abaixo de 620 px a região ocupa a largura da tela, com margem de
--tp-space-4. - Camada
--tp-z-toast(100001): fica acima de modal e gaveta, porque o aviso pode se referir à ação feita dentro deles.
Carga, esqueleto e falha
Entre pedir e receber existe um intervalo. O sistema o preenche de três formas, conforme o que já se sabe sobre o resultado: esqueleto quando a forma do conteúdo é conhecida, véu quando o conteúdo já está na tela e será substituído, e barra indeterminada quando nem a duração nem o volume são conhecidos.
Esqueleto · as quatro variantes
Reproduz a forma do que virá, para que o layout não salte quando o conteúdo chegar. É decorativo: aria-hidden em todas as peças, com o estado real anunciado por uma região de status.
.tp-skeleton-text · bloco de parágrafo
.tp-skeleton-line · linha isolada, em três alturas
.tp-skeleton-avatar · retrato circular
.tp-skeleton-row · linha de lista com retrato
O brilho percorre o ciclo de --tp-component-skeleton-speed (1400 ms). Sob movimento reduzido, a animação é removida e a peça permanece como bloco sólido em --tp-border.
Véu de carga sobre conteúdo existente
Use quando o conteúdo já está na tela e será substituído. O contêiner recebe .tp-loading-host e alterna aria-busy; nada é escondido, a interação é que fica indisponível.
| Colaborador | Área | Saldo |
|---|---|---|
| Ana Ribeiro | Operações | 12.480 |
| Bruno Sales | Comercial | 8.150 |
| Carla Neves | Logística | 21.030 |
Progresso indeterminado
Quando não se sabe quanto falta. Se a proporção for conhecida, use <progress class="tp-progress"> com valor real — a barra determinada informa mais.
Sincronizando catálogo de parceiros…
Determinado, para comparação
Estado de falha
Substitui o conteúdo quando a carga não pôde ser concluída. Diz o que ocorreu, o que não foi perdido e qual é a próxima ação.
A consulta ao serviço de pontos não respondeu. Nenhum saldo foi alterado e nenhum resgate foi processado.
A conexão expirou antes da resposta. Seus filtros foram preservados.
Qual usar
| Situação | Componente | Por quê |
|---|---|---|
| Primeira carga, forma conhecida | .tp-skeleton-* | Evita salto de layout e antecipa a estrutura. |
| Recarga de conteúdo visível | .tp-loading-overlay | Preserva o contexto e bloqueia interação ambígua. |
| Ação pontual em um controle | .tp-button-loading com aria-busy e aria-disabled | O indicador fica onde a ação foi disparada, e o foco também: o botão não recebe disabled. |
| Duração desconhecida, sem conteúdo | .tp-progress-indeterminate | Confirma atividade sem prometer prazo. |
| Falha na carga | .tp-error-state | Explica a causa e oferece recuperação. |
| Carga concluída sem resultados | .tp-empty | Vazio não é erro: orienta o primeiro passo. |
Paginação
Paginação para listas longas de colaboradores, resgates e parceiros. O componente informa a posição atual em texto, não só pelo realce do número, e mantém o alvo de toque em --tp-component-pagination-size (2,25 rem).
Estados dos itens
- …
A página atual usa aria-current="page" além do preenchimento sólido; a diferença não é comunicada só por cor. Os limites da lista ficam desabilitados por disabled, não escondidos, para a posição da navegação não mudar de lugar.
Trilha de navegação
Trilha de navegação para telas em profundidade — do programa à campanha, da campanha ao resgate. Constrói-se com <nav> e <ol> semânticos sobre primitivos existentes; o sistema ainda não tem uma classe dedicada.
Trilha longa com elisão
Em telas estreitas, mantenha o primeiro nível, o pai imediato e a página atual. O nível omitido continua anunciado ao leitor de tela.
Contrato
- Sempre dentro de
<nav aria-label="Trilha de navegação">e de uma lista ordenada: a ordem é informação. - O último item não é link e recebe
aria-current="page". - Os separadores são decorativos (
aria-hidden): a estrutura já vem da lista. - A trilha reflete a hierarquia do produto, não o histórico do navegador.
Lacuna registrada: não existe .tp-breadcrumb no CSS do sistema. Enquanto isso, esta composição usa apenas classes publicadas — .tp-row, .tp-list-plain, .tp-link, .tp-label-md, .tp-help e .tp-sr-only.
Separador
Separador de um pixel em --tp-border-default. Divide conteúdo relacionado dentro de uma mesma superfície, quando o espaço sozinho não basta para marcar a mudança de assunto.
Saldo de pontos
12.480 pontos disponíveis para resgate imediato.
Pontos a expirar
3.200 pontos expiram em 30/11/2026 se não forem utilizados.
Última campanha creditada
Reconhecimento de Meio de Ano · 2.000 pontos em 12/08/2026.
Quando usar cada recurso
| Recurso | Use quando |
|---|---|
Espaço (--tp-space-5) | Os blocos pertencem ao mesmo assunto e a ordem é contínua. |
.tp-divider | Os blocos mudam de assunto, mas continuam na mesma superfície e no mesmo nível hierárquico. |
Novo .tp-card | Os blocos têm ações próprias, podem ser lidos fora de ordem ou carregam estados independentes. |
Use <hr class="tp-divider">: o elemento já carrega a semântica de quebra temática e não precisa de role nem de aria-hidden. Dentro de um menu, o separador é o próprio <hr>, sem classe.
Formulário progressivo
Acordeão e FAQ
Como definir o ponto de partida de um programa?
Comece por objetivo, público e contexto. Na conversa consultiva, esclareça condições e necessidades antes de definir a solução. Este conteúdo é uma referência demonstrativa.
As possibilidades são iguais para todos os programas?
As condições dependem do projeto. Catálogo, regras e possibilidades de integração precisam ser confirmados para cada programa antes de qualquer compromisso.
O formulário desta página envia minhas informações?
Não. Ele demonstra duas etapas de preenchimento e validação local. Use dados fictícios: nenhum envio, cadastro ou contato é realizado.
Posso testar os componentes usando o teclado?
Sim. Use Tab para percorrer controles, Enter ou Espaço para ações, as setas nas abas e Escape para fechar as sobreposições. O foco retorna ao botão que abriu o painel.
Gráficos e recursos existentes
Resumo textual: 6 registros fictícios; 2 em cada situação. O indicador didático não representa desempenho da empresa.
Composição real
<!-- Em uma página dentro de src/: --> <include src="./partials/design-system/table.html"></include> <include src="./partials/design-system/form.html"></include>
Includes recursivos sem parâmetros. Instâncias Alpine são isoladas; x-id resolve nomes e vínculos únicos.
Todos os estados, de uma vez.
Cada componente interativo e cada estado que ele tem, lado a lado — inclusive os que só aparecem sob o ponteiro ou com o foco do teclado.
Componentes interativos por estado
Uma tela mostra um estado por vez. Esta matriz mostra todos, lado a lado, inclusive os que só aparecem sob o ponteiro ou com o foco do teclado — reproduzidos com os mesmos tokens que o CSS aplica. Um traço indica que o estado não existe para aquele componente, e o motivo está na tabela seguinte.
| Componente | Padrão | Hover | Foco visível | Acionado | Selecionado | Em carga | Desabilitado | Erro | |||
|---|---|---|---|---|---|---|---|---|---|---|---|
Botão primário.tp-button-primary | — | — | |||||||||
Botão secundário.tp-button-secondary | — | ||||||||||
Botão fantasma.tp-button-ghost | — | ||||||||||
Botão destrutivo.tp-button-danger | — | — | |||||||||
Link.tp-link | Ver resgate | Sem regra própria | Ver resgate | Sem regra própria | — | — | Link desabilitado não existe: remova o link ou troque por texto. | — | |||
Campo de texto.tp-input | — | — | |||||||||
Seleção.tp-input em <select> | — | O valor escolhido é o próprio conteúdo do controle. | — | ||||||||
Caixa de seleção.tp-check | — | — | |||||||||
Alternador.tp-switch | — | — | — | ||||||||
Aba.tp-tab | Resgates | Resgates | Resgates | — | Resgates | — | Resgates | — | |||
Item de paginação.tp-pagination-item | — | — | — | ||||||||
Chip de filtro.tp-filter-chip | Área: Logística | Área: Logística | Área: Logística | — | Área: Logística | — | Área: Logística | — | |||
Linha de tabela.tp-selected |
|
| O foco fica na região rolável e nos controles da linha. | — | A tabela inteira vai para .tp-loading-host. | — | — |
Amostras operáveis
As mesmas peças, sem forçar nada. Percorra com Tab e Shift+Tab para conferir a ordem e a visibilidade do foco; passe o ponteiro para ver o realce real.
| Estado | Sinal visual além da cor | Semântica |
|---|---|---|
| Padrão | Forma, peso e borda da variante. | Nenhum atributo adicional. |
| Hover | Mudança de preenchimento e de borda; o ponteiro vira cursor de ação. | Não é anunciado: hover não existe para teclado nem para leitor de tela, por isso nunca carrega informação exclusiva. |
| Foco visível | Outline de 3 px deslocado 3 px, fora do controle, preservando a borda original. | Gerado por :focus-visible; nunca removido por outline: none. |
| Acionado | Escurecimento do preenchimento e deslocamento de 1 px no eixo vertical. | :active. Suprimido quando o controle está desabilitado. |
| Selecionado | Preenchimento sólido, marcador próprio ou caixa marcada — sempre com uma segunda pista além do tom. | aria-pressed só com rótulo fixo — se o rótulo muda com o estado, ele nomeia a próxima ação e dispensa aria-pressed; aria-selected, aria-current="page" ou checked, conforme o papel. |
| Em carga | Anel girando dentro do próprio controle, rótulo no gerúndio e aparência de indisponível; o controle não muda de tamanho. | Contrato único: .tp-button-loading + aria-busy="true" + aria-disabled="true", nunca disabled — o botão mantém o foco, e o handler ignora novos acionamentos enquanto a ação corre (if (busy) return). Sob movimento reduzido o anel para e permanece visível. |
| Desabilitado | Opacidade de --tp-disabled-opacity (0,55), cursor bloqueado e perda do realce de hover. | disabled quando o controle sai da ordem de foco; aria-disabled quando precisa continuar alcançável para explicar o motivo. |
| Erro | Borda em tom de erro mais mensagem em texto abaixo do campo. A cor nunca aparece sozinha. | aria-invalid="true" e aria-describedby apontando para a mensagem. |
Lacunas registradas nesta matriz: .tp-link não tem regra de :hover nem de :active, e .tp-tab não tem variante desabilitada (o hover da aba existe só onde há ponteiro, dentro de @media (hover: hover)) — nas células acima, esses casos aparecem como amostra aproximada por estilo em linha ou como ausência declarada, nunca como classe inventada.
As composições que se repetem.
Cabeçalho de página, indicador com tendência, busca e filtros, menu do usuário, central de avisos e gráfico com leitura alternativa.
Composições recorrentes
Cabeçalho de página
Abre toda tela de produto: contexto em .tp-eyebrow, título em .tp-title, uma frase de orientação em .tp-lead e, no máximo, duas ações — a primária à direita da secundária.
Resgates da campanha
287 resgates registrados por 312 colaboradores. Os dados desta tela são fictícios.
Cartão de indicador com tendência
Valor grande, rótulo curto e comparação explícita com o período anterior. A tendência traz seta e palavra, nunca só a cor, e o período comparado aparece por extenso.
Lacuna registrada: o sistema não tem uma classe dedicada de tendência. Enquanto isso, a variação usa .tp-badge-success, .tp-badge-warning e .tp-badge-danger com glifo textual.
Busca e filtros com chips
Buscar e filtrar são a mesma tarefa em dois controles. Os filtros aplicados viram chips removíveis logo abaixo, para que nunca haja um recorte invisível sobre os dados.
Menu do usuário e central de avisos
Os dois moram no canto do cabeçalho do produto. Ambos usam .tp-dropdown com .tp-menu: fecham com Escape e devolvem o foco ao gatilho.
O marcador de não lido (.tp-unread-dot) é decorativo: a palavra “Não lido” aparece na legenda de cada item, e a contagem fica em uma região de status.
Gráfico com leitura alternativa
Todo gráfico do sistema acompanha a mesma informação em texto. Aqui, barras nativas com <meter> e a tabela de origem em .tp-chart-data.
Ver dados do gráfico em tabela
| Categoria | Resgates |
|---|---|
| Bem-estar | 98 |
| Educação | 74 |
| Gastronomia | 61 |
| Viagem | 54 |
As séries de cor de gráfico têm tokens próprios, de --tp-chart-1 a --tp-chart-6, com par claro e escuro e eixo e grade em --tp-chart-text e --tp-chart-grid.
Cabeçalho de aplicação e navegação lateral
O cabeçalho do produto está renderizado no topo desta própria página: marca, navegação, menu de referências, alternador de tema e menu mobile, todos em .tp-header e .tp-header-inner. O trilho lateral desta página (.tp-portal-nav) é a navegação secundária com busca.
Lacuna registrada: não existe uma navegação lateral de aplicação (.tp-sidebar) no CSS do sistema. As telas adaptadas do catálogo usam a estrutura original da base; até que exista uma classe publicada, nada é demonstrado aqui para não criar um padrão que o CSS não sustenta.
Expressão visual com contexto.
Imagens, interfaces e elementos gráficos devem apoiar a mensagem, preservar a clareza e manter a marca reconhecível em qualquer escala.
Escolhas com propósito
Priorize cenas reais de colaboração, reconhecimento e diversidade. Evite banco de imagens genérico, poses artificiais e pessoas como decoração.
Produto que explica
Mostre fluxos, estados e dados fictícios com hierarquia clara. A interface deve demonstrar a jornada sem substituir o conteúdo da mensagem.
Ritmo e reconhecimento
Use blocos, linhas, círculos, texturas e contrastes derivados dos tokens. Grafismos entram para orientar leitura, nunca para competir com a ação.
Regras de aplicação
- Manter respiro, contraste e área segura da marca.
- Usar ilustrações e ícones com traço consistente e função compreensível.
- Não inserir fotos de pessoas no shell neutro do Design System.
- Adicionar fotografia somente em campanhas ou páginas aprovadas para esse uso.
Telas de referência, organizadas para consulta.
Estas são aplicações reais da base adaptada à identidade Troca Pontos. Use o catálogo para escolher um ponto de partida por jornada, mantendo tokens, componentes, acessibilidade e contratos documentados.
Visão geral ↗
Resumo operacional, indicadores e próximas ações.
AnáliseEngajamento ↗
Leituras, métricas e gráficos preservados.
RelacionamentoParceiros ↗
Contatos, atividades e acompanhamento.
FinanceiroCréditos ↗
Saldos, transações e cartões demonstrativos.
OperaçãoEntregas ↗
Entregas, mapas e status operacionais.
DadosTabelas de dados ↗
Tabelas, filtros, seleção e paginação.
AtendimentoLista de chamados ↗
Fila de atendimento e estados de suporte.
Os links abrem páginas demonstrativas do Design System Troca Pontos. Dados são fictícios, sem backend ou integrações de produção. A matriz de migração registra preservação de páginas e bibliotecas.
Da visão geral à próxima ação.
Listar, filtrar, revisar, cadastrar e consultar detalhes com os mesmos componentes.
Uma conversa com direção.
Hero, proposta de valor, navegação por áreas, FAQ, formulário progressivo e CTA mobile. Sem claims comerciais inventados.
A mesma marca, em cada canal.
Templates de conteúdo corporativo, campanhas e mensagens transacionais com propósito e tom próprios.
Conteúdo editorial
Newsletter, artigo, social, imprensa, relatório, proposta e evento. Calendário de janeiro a dezembro como referência sem ano.
Operação e atendimento
Assinatura, convite, recuperação de acesso, notificações e atualizações de atendimento. Sem disparos ou integrações.
O plano sugere newsletters mensais/trimestrais e blog semanal/quinzenal. “Relatórios Anuais” aparece sob título trimestral/semestral: a ambiguidade permanece registrada e exige decisão editorial.
Abrir biblioteca de templates →Clareza para mais pessoas.
Meta de engenharia: critérios aplicáveis de WCAG 2.2 AA. Os testes e limites estão registrados; não há declaração de certificação.
Interação
Labels, foco visível, erros associados ao campo, regiões de status, tabs por teclado, diálogos nativos e nomes acessíveis.
Percepção
Estado com texto e cor, movimento reduzido, zoom permitido, conteúdo sem truncamento obrigatório e tabelas em regiões roláveis.
Funções consistentes em claro e escuro.
Superfícies, textos, bordas e ações usam tokens próprios. A preferência acompanha o mecanismo de tema existente.
Comece pelo núcleo.
Tokens, componentes e exemplos são camadas reutilizáveis para os projetos Troca Pontos.
Consistência é uma prática.
O fluxo preserva estratégia → conteúdo → design → QA. Estado técnico e aprovação institucional são registros distintos.
Estratégia
Objetivo e pilar de marca.
Conteúdo
Clareza, fontes e claims.
Design
Marca, tokens e experiência.
QA
Uso, responsividade e acessibilidade.
Interface: Design/Produto. Campanha: Marketing e responsável pelo claim. Institucional: Diretoria/Marketing. Co-branding: Marketing Troca Pontos e parceiro. Nenhum responsável nominal ou aprovação foi presumido.
Contribuir, revisar e descontinuar →O que está implementado. O que falta validar.
Release técnica do núcleo
Fundamentos documentados, tokens semânticos, componentes compartilhados, jornadas locais, Sistema Atendimento, portal e templates. A matriz de cobertura identifica a evidência de cada requisito.
Assets e tipografia
Disponibilizar fontes licenciadas no destino e decidir a distribuição dos originais eletrônicos externos da marca; confirmar variante positiva, proteção, ícone de mídia/app e favicon.
Homologação e validação
Revisar extensões digitais, contratos e cobertura integral de QA. Aprovação da marca, integração real e publicação permanecem fora desta demonstração.
Contexto antes da resposta.
Uma aplicação de referência para listar, filtrar, conversar, registrar contexto e comunicar a próxima ação sem prometer o que não foi confirmado.
· ·
Atendimento concluído: a transição de status exige reabertura explícita.
Falha simulada. As mensagens continuam em memória e nada foi perdido.
Demonstração local e sem backend: fila, paginação, mensagens, status, atribuição, filtros, anexos, agendamento e tentativas de reenvio vivem apenas nesta página. Os exemplos usam identificadores e contatos fictícios.