Carregando Troca Pontos…
Ir para o conteúdo
Troca Pontos Troca Pontos Design system 1.0.0
Troca Pontos · Design system

Reconhecimento
em cada detalhe.

Uma base compartilhada para criar experiências claras, consistentes e humanas — da operação à expressão da marca.

01 · Visão geral e fontes

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.

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.

02 · Essência da marca

Criar significado.

Arquétipo Criador. Personalidade oficial: Inovadora, Visionária, Criativa, Personalizada e Inspiradora.

Norma estratégica
Missão

Transformar o reconhecimento corporativo em uma experiência criativa e personalizada que celebra a individualidade e inspira a inovação.

Visão

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.

Propósito

Transformar o reconhecimento corporativo em uma experiência criativa e inspiradora, que celebra a individualidade e impulsiona a inovação dentro das empresas.

Valores oficiais · DOCX Missão, Visão e Valores, parágrafos 4–8
InovaçãoCriar soluções surpreendentes e inspiradoras.
PersonalizaçãoAdaptar premiações às necessidades e cultura de cada cliente.
InspiraçãoMotivar através de soluções que promovem crescimento.
FuturoAntecipar e definir tendências no reconhecimento corporativo.
IndividualidadeCelebrar 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.

Tagline oficial

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.

03 · Voz e conteúdo

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.

Fazer

Não foi possível salvar.

Revise os campos indicados e tente novamente.

Evitar

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

Consultar biblioteca de mensagens →
05 · Tipografia

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.

Expressão institucional · intenção Passo

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-display-lg--tp-type-display-lg-*
Degrau display-lg: família, tamanho, peso, entrelinha, tracking e caso de uso.
FamíliaTamanhoPesoEntrelinhaTrackingCaso de uso
Passoclamp(2.75rem, 7vw, 6.5rem)7001.02-0.055emHero institucional. Uma ocorrência por página.

Cada resgate conta uma história.

.tp-display-md--tp-type-display-md-*
Degrau display-md: família, tamanho, peso, entrelinha, tracking e caso de uso.
FamíliaTamanhoPesoEntrelinhaTrackingCaso de uso
Passoclamp(2.25rem, 5vw, 4.5rem)7001.06-0.045emAbertura de campanha e capa de peça editorial.

Programas de reconhecimento

.tp-heading-xl--tp-type-heading-xl-*
Degrau heading-xl: família, tamanho, peso, entrelinha, tracking e caso de uso.
FamíliaTamanhoPesoEntrelinhaTrackingCaso de uso
Passoclamp(2rem, 3.5vw, 3rem)7001.1-0.04emTítulo de página institucional.

Resgates do trimestre

.tp-heading-lg--tp-type-heading-lg-*
Degrau heading-lg: família, tamanho, peso, entrelinha, tracking e caso de uso.
FamíliaTamanhoPesoEntrelinhaTrackingCaso de uso
Passoclamp(1.75rem, 2.8vw, 2.25rem)7001.15-0.035emTítulo de seção do portal e de tela do produto.

Catálogo de benefícios

.tp-heading-md--tp-type-heading-md-*
Degrau heading-md: família, tamanho, peso, entrelinha, tracking e caso de uso.
FamíliaTamanhoPesoEntrelinhaTrackingCaso de uso
Passo1.5rem7001.2-0.025emTítulo de cartão, painel e diálogo.

Parceiros credenciados

.tp-heading-sm--tp-type-heading-sm-*
Degrau heading-sm: família, tamanho, peso, entrelinha, tracking e caso de uso.
FamíliaTamanhoPesoEntrelinhaTrackingCaso de uso
Passo1.125rem7001.3-0.015emSubtí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-body-lg--tp-type-body-lg-*
Degrau body-lg: família, tamanho, peso, entrelinha, tracking e caso de uso.
FamíliaTamanhoPesoEntrelinhaTrackingCaso de uso
Inter1.125rem4001.60Pará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-body-md--tp-type-body-md-*
Degrau body-md: família, tamanho, peso, entrelinha, tracking e caso de uso.
FamíliaTamanhoPesoEntrelinhaTrackingCaso de uso
Inter1rem4001.50Texto corrido padrão.

Pontos expiram doze meses após o crédito. O colaborador recebe aviso trinta dias antes.

.tp-body-sm--tp-type-body-sm-*
Degrau body-sm: família, tamanho, peso, entrelinha, tracking e caso de uso.
FamíliaTamanhoPesoEntrelinhaTrackingCaso de uso
Inter0.875rem4001.50Texto de interface: tabela, cartão, painel de contexto.

Nome do programa

.tp-label-lg--tp-type-label-lg-*
Degrau label-lg: família, tamanho, peso, entrelinha, tracking e caso de uso.
FamíliaTamanhoPesoEntrelinhaTrackingCaso de uso
Inter0.9375rem6001.350Rótulo de campo em formulário espaçoso.

Saldo de pontos

.tp-label-md--tp-type-label-md-*
Degrau label-md: família, tamanho, peso, entrelinha, tracking e caso de uso.
FamíliaTamanhoPesoEntrelinhaTrackingCaso de uso
Inter0.875rem6001.350Rótulo de campo padrão e título de célula composta.

Campanha ativa

.tp-label-sm--tp-type-label-sm-*
Degrau label-sm: família, tamanho, peso, entrelinha, tracking e caso de uso.
FamíliaTamanhoPesoEntrelinhaTrackingCaso de uso
Inter0.75rem7001.40.04emEyebrow, cabeçalho de grupo e chip. Sempre em caixa alta.

Dados fictícios · atualizado em 15/09/2026

.tp-caption--tp-type-caption-*
Degrau caption: família, tamanho, peso, entrelinha, tracking e caso de uso.
FamíliaTamanhoPesoEntrelinhaTrackingCaso de uso
Inter0.6875rem5001.40.02emLegenda, 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.
06 · Cores

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.

Manual · pp. 26–34
Purple#6B0080
Russian Violet#4B005A
Mauveine#81009B
Phlox#D500FF
Pale Purple#FAE4FF
LaranjaInformação analítica
Rosa / vermelhoDados e estados
AmareloAtenção e dados
Verde / águaDados e estados
NeutrosLeitura e superfícies

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

Orange#FF5900
Syracuse#D04300
Persimmon#F35400
Pumpkin#FF7300
Seashell#FFF3ED
Folly#FF0056
Crimson#DB0049
Amaranth#EC004F
Pink#FF80AA
Mimi#FFDBE7
Jonquil#FFCE00
Mikado#FFC400
Gold#FFD324
Mustard#FFDB49
Lemon#FFF4C8
Aquamarine#00ECB5
Sea#009572
Jungle#00AA83
Mint#00C99A
Azure#EBFFFA
Davys#575757
Battleship#9B9B9B
Silver#C6C6C6
Platinum#E5E5E5
Smoke#F4F4F4

Gradientes 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-*.

Purple → Russian violet--tp-gradient-deep
Mauveine → Purple--tp-gradient-primary
Phlox → Mauveine--tp-gradient-vivid
Mauveine → Russian violet--tp-gradient-royal
Phlox → Purple--tp-gradient-bright

Correçã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.

Purple
Russian violet
Mauveine
Phlox
Pale purple

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.

07 · Tokens

Decisões que se propagam.

Uma fonte autoral em CSS. Primitivos → funções semânticas → componentes e contextos.

01 · Primitivo

Identidade preservada

--color-brand-primary

02 · Semântico

Uma função clara

--tp-action

03 · Componente

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.

Família cor · nome, camada, valor resolvido no tema claro e no escuro e onde o valor é consumido no CSS.
TokenCamadaTema claroTema escuroOnde se aplica
--color-blackPrimitivo#19151C#19151C—
--color-blue-light-100Primitivo#F3CEFA#F3CEFA—
--color-blue-light-200Primitivo#E5ACEF#E5ACEF—
--color-blue-light-25Primitivo#FDF5FF#FDF5FF—
--color-blue-light-300Primitivo#D58AE3#D58AE3—
--color-blue-light-400Primitivo#CA70DC#CA70DC—
--color-blue-light-50Primitivo#FAE4FF#FAE4FF—
--color-blue-light-500Primitivo#6B0080#6B0080—
--color-blue-light-600Primitivo#81009B#81009B—
--color-blue-light-700Primitivo#4B005A#4B005A—
--color-blue-light-800Primitivo#3D004A#3D004A—
--color-blue-light-900Primitivo#30003A#30003A—
--color-blue-light-950Primitivo#25002D#25002D—
--color-brand-100Primitivo#F3CEFA#F3CEFA.tp-graphics--page .tp-arc-outline
--color-brand-200Primitivo#E5ACEF#E5ACEF.tp-graphics--page .tp-dots > i
--color-brand-25Primitivo#FDF5FF#FDF5FF—
--color-brand-300Primitivo#D58AE3#D58AE3#mapTwo .jvm-region.jvm-element, #mapCustomerPinPoint .jv…
--color-brand-400Primitivo#CA70DC#CA70DC#mapTwo .jvm-region.jvm-element:hover, #mapCustomerPinPoi…
--color-brand-50Primitivo#FAE4FF#FAE4FF.tp-graphics--page .tp-arc
--color-brand-500Primitivo#6B0080#6B0080#mapTwo .jvm-region[data-code="US"], #mapCustomerPinPoint…
--color-brand-600Primitivo#81009B#81009B—
--color-brand-700Primitivo#4B005A#4B005A#mapCustomerPinPoint .jvm-region[data-code="US-NY"], #map…
--color-brand-800Primitivo#3D004A#3D004A—
--color-brand-900Primitivo#30003A#30003A—
--color-brand-950Primitivo#25002D#25002D—
--color-brand-accentPrimitivo#D500FF#D500FF.tp-swatch-accent, .tp-arc-outline, .tp-orb +1
--color-brand-darkPrimitivo#4B005A#4B005A.tp-button-inverse, .tp-button-inverse:disabled, .tp-butt…
--color-brand-midPrimitivo#81009B#81009B.tp-swatch-mid, .tp-hero
--color-brand-primaryPrimitivo#6B0080#6B0080.tp-swatch-purple, .tp-nav-mark, .tp-hero +1
--color-brand-proof-darkPrimitivo#40004F#40004F.tp-prova-escura
--color-brand-ramp-1Primitivo#4B005A#4B005A.tp-fundos-negativa
--color-brand-ramp-2Primitivo#65007A#65007A.tp-fundos-negativa
--color-brand-ramp-3Primitivo#7E0098#7E0098.tp-fundos-negativa
--color-brand-ramp-4Primitivo#9700B5#9700B5.tp-fundos-negativa
--color-brand-ramp-5Primitivo#AF00D1#AF00D1.tp-fundos-negativa
--color-brand-softPrimitivo#FAE4FF#FAE4FF.tp-swatch-soft, .tp-hero .tp-eyebrow
--color-currentPrimitivocurrentColorcurrentColor—
--color-error-100Primitivo#FFD3E2#FFD3E2—
--color-error-200Primitivo#FFB1CB#FFB1CB—
--color-error-25Primitivo#FFF5F8#FFF5F8—
--color-error-300Primitivo#FF80AA#FF80AA—
--color-error-400Primitivo#FF80AA#FF80AA—
--color-error-50Primitivo#FFDBE7#FFDBE7—
--color-error-500Primitivo#B0003B#B0003B—
--color-error-600Primitivo#B0003B#B0003B—
--color-error-700Primitivo#970032#970032—
--color-error-800Primitivo#7C0029#7C0029—
--color-error-900Primitivo#620020#620020—
--color-error-950Primitivo#470017#470017—
--color-gray-100Primitivo#F1EDF3#F1EDF3—
--color-gray-200Primitivo#E5E5E5#E5E5E5::after, ::before, ::backdrop +1
--color-gray-25Primitivo#FCFBFD#FCFBFD—
--color-gray-300Primitivo#C6C6C6#C6C6C6—
--color-gray-400Primitivo#767078#767078.token.attr-name
--color-gray-50Primitivo#F4F4F4#F4F4F4.flatpickr-day.inRange
--color-gray-500Primitivo#575757#575757—
--color-gray-600Primitivo#4A424D#4A424D—
--color-gray-700Primitivo#3B333F#3B333F.token.punctuation
--color-gray-800Primitivo#332A39#332A39—
--color-gray-900Primitivo#251F29#251F29—
--color-gray-950Primitivo#19151C#19151C—
--color-gray-darkPrimitivo#251F29#251F29—
--color-inkPrimitivo#25002D#25002D—
--color-orange-100Primitivo#FFE0CF#FFE0CF—
--color-orange-200Primitivo#FFBC99#FFBC99—
--color-orange-25Primitivo#FFF3ED#FFF3ED—
--color-orange-300Primitivo#FF945C#FF945C—
--color-orange-400Primitivo#FF7300#FF7300—
--color-orange-50Primitivo#FFF3ED#FFF3ED—
--color-orange-500Primitivo#A33800#A33800—
--color-orange-600Primitivo#8F3100#8F3100—
--color-orange-700Primitivo#7A2900#7A2900—
--color-orange-800Primitivo#652200#652200—
--color-orange-900Primitivo#501B00#501B00—
--color-orange-950Primitivo#3B1400#3B1400—
--color-palette-amaranthPrimitivo#EC004F#EC004F.tp-swatch-palette-amaranth
--color-palette-aquamarinePrimitivo#00ECB5#00ECB5.tp-swatch-palette-aquamarine
--color-palette-azurePrimitivo#EBFFFA#EBFFFA.tp-swatch-palette-azure
--color-palette-battleshipPrimitivo#9B9B9B#9B9B9B.tp-swatch-palette-battleship
--color-palette-crimsonPrimitivo#DB0049#DB0049.tp-swatch-palette-crimson
--color-palette-davysPrimitivo#575757#575757.tp-swatch-palette-davys
--color-palette-follyPrimitivo#FF0056#FF0056.tp-swatch-pink, .tp-swatch-palette-folly
--color-palette-goldPrimitivo#FFD324#FFD324.tp-swatch-palette-gold
--color-palette-jonquilPrimitivo#FFCE00#FFCE00.tp-swatch-yellow, .tp-swatch-palette-jonquil
--color-palette-junglePrimitivo#00AA83#00AA83.tp-swatch-palette-jungle
--color-palette-lemonPrimitivo#FFF4C8#FFF4C8.tp-swatch-palette-lemon
--color-palette-mikadoPrimitivo#FFC400#FFC400.tp-swatch-palette-mikado
--color-palette-mimiPrimitivo#FFDBE7#FFDBE7.tp-swatch-palette-mimi
--color-palette-mintPrimitivo#00C99A#00C99A.tp-swatch-palette-mint
--color-palette-mustardPrimitivo#FFDB49#FFDB49.tp-swatch-palette-mustard
--color-palette-orangePrimitivo#FF5900#FF5900.tp-swatch-orange, .tp-swatch-palette-orange
--color-palette-persimmonPrimitivo#F35400#F35400.tp-swatch-palette-persimmon
--color-palette-pinkPrimitivo#FF80AA#FF80AA.tp-swatch-palette-pink
--color-palette-platinumPrimitivo#E5E5E5#E5E5E5.tp-swatch-palette-platinum
--color-palette-pumpkinPrimitivo#FF7300#FF7300.tp-swatch-palette-pumpkin
--color-palette-seaPrimitivo#009572#009572.tp-swatch-green, .tp-swatch-palette-sea
--color-palette-seashellPrimitivo#FFF3ED#FFF3ED.tp-swatch-palette-seashell
--color-palette-silverPrimitivo#C6C6C6#C6C6C6.tp-swatch-palette-silver
--color-palette-smokePrimitivo#F4F4F4#F4F4F4.tp-swatch-gray, .tp-swatch-palette-smoke
--color-palette-syracusePrimitivo#D04300#D04300.tp-swatch-palette-syracuse
--color-success-100Primitivo#C4F7E9#C4F7E9—
--color-success-200Primitivo#98E9D5#98E9D5—
--color-success-25Primitivo#EBFFFA#EBFFFA—
--color-success-300Primitivo#64DABF#64DABF—
--color-success-400Primitivo#00ECB5#00ECB5—
--color-success-50Primitivo#EBFFFA#EBFFFA—
--color-success-500Primitivo#00664E#00664E—
--color-success-600Primitivo#00664E#00664E—
--color-success-700Primitivo#00543F#00543F—
--color-success-800Primitivo#004532#004532—
--color-success-900Primitivo#003728#003728—
--color-success-950Primitivo#00291D#00291D—
--color-theme-pink-500Primitivo#FF0056#FF0056—
--color-theme-purple-500Primitivo#81009B#81009B—
--color-tp-amaranthPrimitivo#EC004F#EC004F—
--color-tp-aquamarinePrimitivo#00ECB5#00ECB5—
--color-tp-azurePrimitivo#EBFFFA#EBFFFA—
--color-tp-battleship-grayPrimitivo#9B9B9B#9B9B9B—
--color-tp-crimsonPrimitivo#DB0049#DB0049—
--color-tp-davys-grayPrimitivo#575757#575757—
--color-tp-follyPrimitivo#FF0056#FF0056—
--color-tp-goldPrimitivo#FFD324#FFD324—
--color-tp-jonquilPrimitivo#FFCE00#FFCE00—
--color-tp-jungle-greenPrimitivo#00AA83#00AA83—
--color-tp-lemon-chiffonPrimitivo#FFF4C8#FFF4C8—
--color-tp-mauveinePrimitivo#81009B#81009B—
--color-tp-mikado-yellowPrimitivo#FFC400#FFC400—
--color-tp-mimi-pinkPrimitivo#FFDBE7#FFDBE7—
--color-tp-mintPrimitivo#00C99A#00C99A—
--color-tp-mustardPrimitivo#FFDB49#FFDB49—
--color-tp-orangePrimitivo#FF5900#FF5900—
--color-tp-pale-purplePrimitivo#FAE4FF#FAE4FF—
--color-tp-persimmonPrimitivo#F35400#F35400—
--color-tp-phloxPrimitivo#D500FF#D500FF.tp-accent-line
--color-tp-platinumPrimitivo#E5E5E5#E5E5E5—
--color-tp-pumpkinPrimitivo#FF7300#FF7300—
--color-tp-purplePrimitivo#6B0080#6B0080.tp-preloader__dots > i, .tp-arc, .tp-dots > i
--color-tp-russian-violetPrimitivo#4B005A#4B005A—
--color-tp-sea-greenPrimitivo#009572#009572—
--color-tp-seashellPrimitivo#FFF3ED#FFF3ED—
--color-tp-silverPrimitivo#C6C6C6#C6C6C6—
--color-tp-syracuse-orangePrimitivo#D04300#D04300—
--color-tp-tickle-me-pinkPrimitivo#FF80AA#FF80AA—
--color-tp-white-smokePrimitivo#F4F4F4#F4F4F4—
--color-transparentPrimitivotransparenttransparent—
--color-ui-dangerPrimitivo#B0003B#B0003B—
--color-ui-dark-borderPrimitivo#938697#938697Alias de --tp-border-strong
--color-ui-dark-cardPrimitivo#251F29#251F29Alias de --tp-surface
--color-ui-dark-elevatedPrimitivo#332A39#332A39Alias de --tp-elevated, --tp-tooltip-bg
--color-ui-dark-pagePrimitivo#19151C#19151CAlias de --tp-page
--color-ui-successPrimitivo#00664E#00664E—
--color-ui-warningPrimitivo#765D00#765D00—
--color-warning-100Primitivo#FFF0B2#FFF0B2—
--color-warning-200Primitivo#FFE78A#FFE78A—
--color-warning-25Primitivo#FFFBEF#FFFBEF—
--color-warning-300Primitivo#FFDB49#FFDB49—
--color-warning-400Primitivo#FFCE00#FFCE00—
--color-warning-50Primitivo#FFF4C8#FFF4C8—
--color-warning-500Primitivo#765D00#765D00—
--color-warning-600Primitivo#765D00#765D00—
--color-warning-700Primitivo#604B00#604B00—
--color-warning-800Primitivo#4C3B00#4C3B00—
--color-warning-900Primitivo#392C00#392C00—
--color-warning-950Primitivo#271E00#271E00—
--color-whitePrimitivo#ffffff#ffffff.tp-button-inverse, .tp-switch-track span, .tp-graphics--…
--tp-accent-actionSemântico#FFCE00#FFCE00.tp-button-accent
--tp-actionSemântico#6B0080#EDBAF7:where(.tp-core a), .tp-skip, .tp-list > li::marker +51
--tp-action-accent-activeSemânticocolor-mix(in srgb, #FFCE00 78%, #25002D)color-mix(in srgb, #FFCE00 78%, #ffffff).tp-button-accent:active:not(:disabled)
--tp-action-accent-disabledSemânticocolor-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-hoverSemânticocolor-mix(in srgb, #FFCE00 88%, #25002D)color-mix(in srgb, #FFCE00 88%, #ffffff).tp-button-accent:hover:not(:disabled)
--tp-action-danger-activeSemânticocolor-mix(in srgb, #B0003B 72%, #25002D)color-mix(in srgb, #B0003B 72%, #ffffff).tp-button-danger:active:not(:disabled)
--tp-action-danger-disabledSemânticocolor-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-hoverSemânticocolor-mix(in srgb, #B0003B 85%, #25002D)color-mix(in srgb, #B0003B 85%, #ffffff).tp-button-danger:hover:not(:disabled)
--tp-action-hoverSemântico#4B005A#FAE4FF.tp-switch[aria-checked="true"]:hover:not(:disabled):not(…
--tp-action-inverse-activeSemânticocolor-mix(in srgb, #ffffff 78%, #4B005A)color-mix(in srgb, #ffffff 78%, #4B005A).tp-button-inverse:active:not(:disabled)
--tp-action-inverse-disabledSemânticocolor-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-hoverSemânticocolor-mix(in srgb, #ffffff 88%, #4B005A)color-mix(in srgb, #ffffff 88%, #4B005A).tp-button-inverse:hover:not(:disabled)
--tp-action-primarySemântico#6B0080#EDBAF7.tp-button-tertiary, .tp-inbox-item-selected, .tp-unread-…
--tp-action-primary-activeSemântico#4B005A#FAE4FF—
--tp-action-primary-disabledSemânticocolor-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-foregroundSemântico#ffffff#4B005A.tp-button-primary:disabled, .tp-button-primary[aria-disa…
--tp-action-primary-hoverSemântico#4B005A#FAE4FF.tp-button-tertiary:hover, .tp-button-ghost:active:not(:d…
--tp-action-secondary-disabledSemântico#ffffff#251F29.tp-button-secondary:disabled, .tp-button-secondary[aria-…
--tp-action-softSemântico#FAE4FF#39203F.tp-user-initials, .tp-reference-panel a:hover
--tp-action-tertiary-disabledSemânticotransparenttransparent.tp-button-ghost:disabled, .tp-button-ghost[aria-disabled…
--tp-borderSemântico#E5E5E5#4D4153.tp-card, .tp-button-secondary:disabled, .tp-button-secon…
--tp-border-defaultSemântico#E5E5E5#4D4153.tp-support-kpi, .tp-support-toolbar, .tp-support-shell +…
--tp-border-strongSemântico#807184#938697.tp-button-secondary, .tp-input, .tp-status-select +6
--tp-border-subtleSemântico#E5E5E5#4D4153—
--tp-chart-1Semântico#6B0080#EDBAF7.tp-heatmap-level-1, .tp-heatmap-level-2, .tp-heatmap-lev…
--tp-chart-2Semântico#009572#00ECB5—
--tp-chart-3Semântico#D04300#FFBC99—
--tp-chart-4Semântico#81009B#CA70DC—
--tp-chart-5Semântico#DB0049#FF80AA—
--tp-chart-6Semântico#765D00#FFDB49—
--tp-chart-gridSemântico#E5E5E5#4D4153—
--tp-chart-textSemântico#575757#D0C6D4—
--tp-dangerSemântico#B0003B#FFABC6.tp-label-required::after, .tp-badge-danger, .tp-input[ar…
--tp-danger-actionSemântico#B0003B#B0003B.tp-button-danger
--tp-danger-softSemântico#FFDBE7#501B30.tp-badge-danger, .tp-alert-danger
--tp-disabled-opacitySemântico0.550.55.tp-input:disabled, .tp-input[aria-disabled="true"], .tp-…
--tp-elevatedSemântico#ffffff#332A39—
--tp-focusSemântico#6B0080#EDBAF7.tp-core :focus-visible, :where(.tp-body, .tp-core) :wher…
--tp-gradient-deepSemânticolinear-gradient(135deg, #6B0080 0%, #4B005A 100%)linear-gradient(135deg, #6B0080 0%, #4B005A 100%)—
--tp-gradient-primarySemânticolinear-gradient(135deg, #81009B 0%, #6B0080 100%)linear-gradient(135deg, #81009B 0%, #6B0080 100%)—
--tp-gradient-vividSemânticolinear-gradient(135deg, #D500FF 0%, #81009B 100%)linear-gradient(135deg, #D500FF 0%, #81009B 100%)—
--tp-gradient-royalSemânticolinear-gradient(135deg, #81009B 0%, #4B005A 100%)linear-gradient(135deg, #81009B 0%, #4B005A 100%)—
--tp-gradient-brightSemânticolinear-gradient(135deg, #D500FF 0%, #6B0080 100%)linear-gradient(135deg, #D500FF 0%, #6B0080 100%)—
--tp-graphic-arc-ratioSemântico0.1899790.189979.tp-graphic-arc, .tp-arc
--tp-icon-artboardSemântico48px48px—
--tp-icon-corner-maxSemântico4px4px—
--tp-icon-corner-minSemântico1px1px—
--tp-icon-gridSemântico24px24px—
--tp-icon-strokeSemântico22—
--tp-infoSemântico#6B0080#EDBAF7.tp-demo-banner, .tp-channel-phone::before
--tp-inverse-surfaceSemântico#4B005A#4B005A—
--tp-logo-width-heroSemântico220px220px—
--tp-mutedSemântico#575757#D0C6D4.tp-font-note, .tp-caption, .tp-label > span +41
--tp-on-accentSemântico#4B005A#4B005A.tp-button-accent, .tp-button-accent:disabled, .tp-button…
--tp-on-actionSemântico#ffffff#4B005A.tp-steps li[aria-current="step"] span, .tp-pagination-it…
--tp-on-dangerSemântico#ffffff#ffffff.tp-button-danger, .tp-button-danger:disabled, .tp-button…
--tp-on-darkSemântico#ffffff#ffffff.tp-inverse-stage, .tp-inverse-stage p, .tp-tooltip +5
--tp-overlaySemânticocolor-mix(in srgb, #4B005A 55%, transparent)color-mix(in srgb, #4B005A 55%, transparent)—
--tp-pageSemântico#FAF8FB#19151C.tp-core, .tp-input[readonly], .tp-table thead +7
--tp-softSemântico#FAE4FF#39203F.tp-demo-banner, .tp-card-soft, .tp-badge +32
--tp-status-danger-backgroundSemântico#FFDBE7#501B30.tp-message-row-error .tp-message-bubble, .tp-error-state…
--tp-status-danger-borderSemântico#B0003B#FFABC6.tp-message-row-error .tp-message-bubble, .tp-toast-dange…
--tp-status-danger-foregroundSemântico#B0003B#FFABC6.tp-priority-high, .tp-alert-danger .tp-alert-icon, .tp-t…
--tp-status-info-backgroundSemântico#FAE4FF#39203F.tp-message-row-system .tp-message-bubble, .tp-status-bad…
--tp-status-info-borderSemântico#6B0080#EDBAF7.tp-alert-info, .tp-toast-info, .tp-message-system +1
--tp-status-info-foregroundSemântico#6B0080#EDBAF7.tp-status-badge, .tp-status-open, .tp-badge-info +2
--tp-status-success-backgroundSemântico#EBFFFA#123E33.tp-status-resolved, .tp-status-closed
--tp-status-success-borderSemântico#00664E#80E4CC.tp-toast-success, .tp-status-resolved
--tp-status-success-foregroundSemântico#00664E#80E4CC.tp-status-resolved, .tp-status-closed, .tp-priority-low …
--tp-status-warning-backgroundSemântico#FFF4C8#423700.tp-message-row-internal .tp-message-bubble, .tp-status-p…
--tp-status-warning-borderSemântico#765D00#FFDB49.tp-message-row-internal .tp-message-bubble, .tp-alert-wa…
--tp-status-warning-foregroundSemântico#765D00#FFDB49.tp-status-pending, .tp-status-waiting, .tp-priority-medi…
--tp-successSemântico#00664E#80E4CC.tp-badge-success, .tp-alert-success, .tp-field[data-stat…
--tp-success-softSemântico#EBFFFA#123E33.tp-badge-success, .tp-alert-success
--tp-surfaceSemântico#ffffff#251F29.tp-skip, .tp-card, .tp-button-secondary +21
--tp-surface-cardSemântico#ffffff#251F29.tp-support-kpi, .tp-support-toolbar, .tp-support-shell +8
--tp-surface-elevatedSemântico#ffffff#332A39.tp-toast
--tp-surface-inverseSemântico#4B005A#4B005A—
--tp-surface-pageSemântico#FAF8FB#19151C.tp-inbox-panel, .tp-contact-panel, .tp-message-list +7
--tp-textSemântico#25002D#F6F0F8.tp-core, .tp-core h1, .tp-core h2 +29
--tp-text-inverseSemântico#ffffff#ffffff—
--tp-text-mutedSemântico#575757#D0C6D4—
--tp-text-primarySemântico#25002D#F6F0F8.tp-support-kpi strong, .tp-inbox-item, .tp-inbox-item-ti…
--tp-text-secondarySemântico#575757#D0C6D4.tp-support-kpi span, .tp-inbox-item-preview, .tp-inbox-i…
--tp-tooltip-bgSemântico#25002D#332A39.tp-chart-tooltip, .tp-chart .apexcharts-tooltip
--tp-tooltip-textSemântico#ffffff#F6F0F8.tp-chart-tooltip, .tp-chart .apexcharts-tooltip
--tp-warningSemântico#765D00#FFDB49.tp-badge-warning, .tp-channel-form::before
--tp-warning-softSemântico#FFF4C8#423700.tp-badge-warning

Tipografia

93 token(s)

Família, tamanho, peso, entrelinha e tracking de cada degrau da escala.

Família tipografia · nome, camada, valor resolvido no tema claro e no escuro e onde o valor é consumido no CSS.
TokenCamadaTema claroTema escuroOnde se aplica
--font-interPrimitivo"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-passoPrimitivo"Passo", "Inter", system-ui, Arial, sans-serif"Passo", "Inter", system-ui, Arial, sans-serif.tp-type-display
--font-weight-blackPrimitivo800800—
--font-weight-boldPrimitivo700700—
--font-weight-mediumPrimitivo500500—
--font-weight-regularPrimitivo400400—
--text-theme-smPrimitivo14px14px—
--text-theme-sm--line-heightPrimitivo20px20px—
--text-theme-xlPrimitivo20px20px—
--text-theme-xl--line-heightPrimitivo30px30px—
--text-theme-xsPrimitivo12px12px—
--text-theme-xs--line-heightPrimitivo18px18px—
--text-title-2xlPrimitivo72px72px—
--text-title-2xl--line-heightPrimitivo90px90px—
--text-title-lgPrimitivo48px48px—
--text-title-lg--line-heightPrimitivo60px60px—
--text-title-mdPrimitivo36px36px—
--text-title-md--line-heightPrimitivo44px44px—
--text-title-smPrimitivo30px30px—
--text-title-sm--line-heightPrimitivo38px38px—
--text-title-xlPrimitivo60px60px—
--text-title-xl--line-heightPrimitivo72px72px—
--text-title-xsPrimitivo24px24px—
--text-title-xs--line-heightPrimitivo32px32px—
--tp-font-bodySemântico14px14px.tp-core, .tp-map-fallback
--tp-font-smallSemântico12px12px.tp-demo-banner, .tp-font-note, .tp-caption +5
--tp-line-heightSemântico1.51.5.tp-core, .tp-chart-tooltip, .tp-chart-data
--tp-tracking-headingSemântico-0.035em-0.035em.tp-core h1, .tp-core h2, .tp-core h3
--tp-type-body-lg-familySemâ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-spacingSemântico00.tp-body-lg
--tp-type-body-lg-line-heightSemântico1.61.6.tp-body-lg
--tp-type-body-lg-sizeSemântico1.125rem1.125rem.tp-body-lg
--tp-type-body-lg-weightSemântico400400.tp-body-lg
--tp-type-body-md-familySemâ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-spacingSemântico00.tp-body-md
--tp-type-body-md-line-heightSemântico1.51.5.tp-body-md
--tp-type-body-md-sizeSemântico1rem1rem.tp-body-md, .tp-input-lg
--tp-type-body-md-weightSemântico400400.tp-body-md
--tp-type-body-sm-familySemâ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-spacingSemântico00.tp-body-sm
--tp-type-body-sm-line-heightSemântico1.51.5.tp-body-sm, .tp-list, .tp-input +2
--tp-type-body-sm-sizeSemântico0.875rem0.875rem.tp-body-sm, .tp-list, .tp-input +9
--tp-type-body-sm-weightSemântico400400.tp-body-sm, .tp-label > span, .tp-label .tp-label-hint
--tp-type-caption-familySemâ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-spacingSemântico0.02em0.02em.tp-caption
--tp-type-caption-line-heightSemântico1.41.4.tp-caption
--tp-type-caption-sizeSemântico0.6875rem0.6875rem.tp-caption, .tp-inbox-item-meta, .tp-message-meta +13
--tp-type-caption-weightSemântico500500.tp-caption
--tp-type-display-lg-familySemântico"Passo", "Inter", system-ui, Arial, sans-serif"Passo", "Inter", system-ui, Arial, sans-serif—
--tp-type-display-lg-letter-spacingSemântico-0.055em-0.055em—
--tp-type-display-lg-line-heightSemântico1.021.02—
--tp-type-display-lg-sizeSemânticoclamp(2.75rem, 7vw, 6.5rem)clamp(2.75rem, 7vw, 6.5rem)—
--tp-type-display-lg-weightSemântico700700—
--tp-type-display-md-familySemântico"Passo", "Inter", system-ui, Arial, sans-serif"Passo", "Inter", system-ui, Arial, sans-serif.tp-display-md
--tp-type-display-md-letter-spacingSemântico-0.045em-0.045em.tp-display-md
--tp-type-display-md-line-heightSemântico1.061.06.tp-display-md
--tp-type-display-md-sizeSemânticoclamp(2.25rem, 5vw, 4.5rem)clamp(2.25rem, 5vw, 4.5rem).tp-display-md
--tp-type-display-md-weightSemântico700700.tp-display-md
--tp-type-heading-lg-familySemâ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-spacingSemântico-0.035em-0.035em.tp-heading-lg, :where(.tp-body, .tp-core) h2
--tp-type-heading-lg-line-heightSemântico1.151.15.tp-heading-lg, :where(.tp-body, .tp-core) h2
--tp-type-heading-lg-sizeSemânticoclamp(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-weightSemântico700700.tp-heading-lg
--tp-type-heading-md-familySemântico"Passo", "Inter", system-ui, Arial, sans-serif"Passo", "Inter", system-ui, Arial, sans-serif.tp-heading-md
--tp-type-heading-md-letter-spacingSemântico-0.025em-0.025em.tp-heading-md
--tp-type-heading-md-line-heightSemântico1.21.2.tp-heading-md
--tp-type-heading-md-sizeSemântico1.5rem1.5rem.tp-heading-md
--tp-type-heading-md-weightSemântico700700.tp-heading-md
--tp-type-heading-sm-familySemâ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-spacingSemântico-0.015em-0.015em.tp-heading-sm, :where(.tp-body, .tp-core) h3
--tp-type-heading-sm-line-heightSemântico1.31.3.tp-heading-sm, :where(.tp-body, .tp-core) h3
--tp-type-heading-sm-sizeSemântico1.125rem1.125rem.tp-heading-sm, :where(.tp-body, .tp-core) h3 +3
--tp-type-heading-sm-weightSemântico700700.tp-heading-sm, :where(.tp-body, .tp-core) h3 +1
--tp-type-heading-xl-familySemântico"Passo", "Inter", system-ui, Arial, sans-serif"Passo", "Inter", system-ui, Arial, sans-serif.tp-heading-xl
--tp-type-heading-xl-letter-spacingSemântico-0.04em-0.04em.tp-heading-xl, :where(.tp-body, .tp-core) h1
--tp-type-heading-xl-line-heightSemântico1.11.1.tp-heading-xl, :where(.tp-body, .tp-core) h1
--tp-type-heading-xl-sizeSemânticoclamp(2rem, 3.5vw, 3rem)clamp(2rem, 3.5vw, 3rem).tp-heading-xl
--tp-type-heading-xl-weightSemântico700700.tp-heading-xl
--tp-type-label-lg-familySemâ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-spacingSemântico00.tp-label-lg
--tp-type-label-lg-line-heightSemântico1.351.35.tp-label-lg
--tp-type-label-lg-sizeSemântico0.9375rem0.9375rem.tp-label-lg, .tp-button-lg, .tp-error-state strong
--tp-type-label-lg-weightSemântico600600.tp-label-lg, .tp-error-state strong
--tp-type-label-md-familySemâ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-spacingSemântico00.tp-label-md
--tp-type-label-md-line-heightSemântico1.351.35.tp-label-md, .tp-button, .tp-toast strong +1
--tp-type-label-md-sizeSemântico0.875rem0.875rem.tp-label-md, .tp-button, .tp-inbox-item-title +4
--tp-type-label-md-weightSemântico600600.tp-label-md, .tp-button, .tp-toast strong +3
--tp-type-label-sm-familySemâ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-spacingSemântico0.04em0.04em.tp-label-sm
--tp-type-label-sm-line-heightSemântico1.41.4.tp-label-sm, .tp-status-select
--tp-type-label-sm-sizeSemântico0.75rem0.75rem.tp-label-sm, .tp-button-sm, .tp-support-kpi span +11
--tp-type-label-sm-weightSemântico700700.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.

Família espaço e medida · nome, camada, valor resolvido no tema claro e no escuro e onde o valor é consumido no CSS.
TokenCamadaTema claroTema escuroOnde se aplica
--tp-border-widthSemântico1px1px.tp-check input:hover:not(:disabled), .tp-alert-icon, .tp…
--tp-cell-paddingSemântico16px16px—
--tp-control-heightSemântico44px44px.tp-button-icon, .tp-switch
--tp-focus-offsetSemântico3px3px.tp-core :focus-visible, .tp-heatmap-cell:focus-visible
--tp-focus-widthSemântico3px3px.tp-core :focus-visible, .tp-heatmap-cell:focus-visible
--tp-logo-lockup-widthSemântico170px170px.tp-brand-lockup-min
--tp-logo-lockup-wordmarkSemânticocalc(170px / (1 + 2 * 0.163254))calc(170px / (1 + 2 * 0.163254)).tp-brand-lockup-min img
--tp-logo-protectionSemânticocalc(170px * 0.163254)calc(170px * 0.163254)—
--tp-logo-protection-ratioSemântico0.1632540.163254.tp-brand, .tp-brand-lockup-min
--tp-logo-widthSemântico170px170px.tp-brand img, .tp-preloader__logo
--tp-section-desktopSemântico104px104px—
--tp-section-mobileSemântico68px68px—
--tp-section-tabletSemântico82px82px—
--tp-space-0Semântico00—
--tp-space-1Semântico4px4px.tp-map-marker-label
--tp-space-2Semântico8px8px.tp-demo-banner, .tp-list, .tp-inbox-item-meta +24
--tp-space-3Semântico12px12px.tp-list, .tp-support-kpis, .tp-support-toolbar +17
--tp-space-4Semântico16px16px.tp-skip, .tp-skip:focus, .tp-demo-banner +16
--tp-space-5Semântico24px24px.tp-standalone, .tp-standalone main, .tp-message-list +2
--tp-space-6Semântico32px32px—
--tp-space-7Semântico48px48px—
--tp-space-8Semântico64px64px—
--tp-space-9Semântico80px80px—
--tp-space-halfSemântico2px2px.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.

Família radius · nome, camada, valor resolvido no tema claro e no escuro e onde o valor é consumido no CSS.
TokenCamadaTema claroTema escuroOnde se aplica
--radius-controlPrimitivo0.5rem0.5rem—
--radius-editorial-2xlPrimitivo42px42px—
--radius-editorial-lgPrimitivo24px24px[data-profile="institutional"]
--radius-editorial-mdPrimitivo18px18px—
--radius-editorial-smPrimitivo12px12px[data-profile="institutional"]
--radius-editorial-xlPrimitivo32px32px—
--radius-panelPrimitivo0.75rem0.75rem—
--tp-card-radiusSemântico0.75rem0.75rem.tp-dashboard-heading
--tp-radiusSemântico0.5rem0.5rem.tp-icon-tile, .tp-inverse-stage, .tp-alert +9
--tp-radius-2xlSemântico20px20px.tp-dialog, .tp-drawer, [dir="rtl"] .tp-drawer
--tp-radius-3xlSemântico24px24px—
--tp-radius-fullSemântico999px999px.tp-badge, .tp-unread-dot, .tp-quick-reply +27
--tp-radius-lgSemântico0.75rem0.75rem.tp-support-kpi, .tp-support-toolbar, .tp-support-shell +2
--tp-radius-mdSemântico0.5rem0.5rem.tp-button, .tp-input, .tp-menu +10
--tp-radius-noneSemântico00—
--tp-radius-smSemântico6px6px.tp-status-select, .tp-attachment, .tp-attachment-media
--tp-radius-xlSemântico18px18px.tp-card
--tp-radius-xsSemântico4px4px.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.

Família sombra e elevação · nome, camada, valor resolvido no tema claro e no escuro e onde o valor é consumido no CSS.
TokenCamadaTema claroTema escuroOnde se aplica
--drop-shadow-4xlPrimitivo0 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-datepickerPrimitivo-5px 0 0 #332A39, 5px 0 0 #332A39-5px 0 0 #332A39, 5px 0 0 #332A39—
--shadow-focus-ringPrimitivo0px 0px 0px 4px color-mix(in srgb, #6B0080 18%, transparent)0px 0px 0px 4px color-mix(in srgb, #6B0080 18%, transparent)—
--shadow-slider-navigationPrimitivo0px 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-lgPrimitivo0px 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-mdPrimitivo0px 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-smPrimitivo0px 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-xlPrimitivo0px 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-xsPrimitivo0px 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-tooltipPrimitivo0px 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-0Semânticononenone—
--tp-elevation-1Semântico0 8px 24px color-mix(in srgb, #4B005A 8%, transparent)0 8px 24px color-mix(in srgb, #4B005A 8%, transparent).tp-support-shell
--tp-elevation-2Semântico0 20px 56px color-mix(in srgb, #4B005A 18%, transparent)0 20px 56px color-mix(in srgb, #4B005A 18%, transparent).tp-toast
--tp-elevation-3Semântico0 28px 80px color-mix(in srgb, #4B005A 24%, transparent)0 28px 80px color-mix(in srgb, #4B005A 24%, transparent)—
--tp-elevation-dialogSemântico0px 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-menuSemântico0px 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-overlaySemântico0 20px 56px color-mix(in srgb, #4B005A 18%, transparent)0 20px 56px color-mix(in srgb, #4B005A 18%, transparent)—
--tp-elevation-tooltipSemântico0px 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-shadowSemântico0 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-floatSemântico0 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.

Família motion · nome, camada, valor resolvido no tema claro e no escuro e onde o valor é consumido no CSS.
TokenCamadaTema claroTema escuroOnde se aplica
--tp-durationSemântico160ms160ms—
--tp-duration-fastSemântico120ms120ms.tp-button, .tp-switch-track
--tp-duration-normalSemântico160ms160ms.tp-toast, .tp-toast.is-leaving, .tp-toast[data-state="cl…
--tp-duration-slowSemântico240ms240ms—
--tp-easingSemânticoease-outease-out—
--tp-easing-enterSemânticoease-outease-out.tp-toast
--tp-easing-exitSemânticocubic-bezier(.4, 0, 1, 1)cubic-bezier(.4, 0, 1, 1).tp-toast.is-leaving, .tp-toast[data-state="closing"]
--tp-easing-standardSemânticoeaseease.tp-button, .tp-switch-track, .tp-progress-indeterminate:…

Camada (z-index)

16 token(s)

Ordem de empilhamento das camadas sobrepostas.

Família camada (z-index) · nome, camada, valor resolvido no tema claro e no escuro e onde o valor é consumido no CSS.
TokenCamadaTema claroTema escuroOnde se aplica
--tp-z-dialogSemântico100000100000.tp-dialog
--tp-z-drawerSemântico100000100000.tp-drawer
--tp-z-dropdownSemântico3030.tp-menu, .tp-tooltip
--tp-z-menuSemântico5050.tp-reference-panel, .tp-heatmap-tooltip
--tp-z-overlaySemântico9999999999.tp-loading-overlay
--tp-z-popoverSemântico3535.tp-mobile-cta
--tp-z-preloaderSemântico999999999999.tp-skip
--tp-z-stickySemântico4040—
--tp-z-toastSemântico100001100001.tp-skip
--z-index-1Primitivo11—
--z-index-9Primitivo99—
--z-index-99Primitivo9999—
--z-index-999Primitivo999999—
--z-index-9999Primitivo99999999—
--z-index-99999Primitivo9999999999—
--z-index-999999Primitivo999999999999—

Breakpoint

12 token(s)

Pontos de virada do layout. Os --tp-* regem o portal e o produto; os --breakpoint-* vêm da base.

Família breakpoint · nome, camada, valor resolvido no tema claro e no escuro e onde o valor é consumido no CSS.
TokenCamadaTema claroTema escuroOnde se aplica
--breakpoint-2xlPrimitivo1536px1536px—
--breakpoint-2xsmPrimitivo375px375px—
--breakpoint-3xlPrimitivo2000px2000px—
--breakpoint-lgPrimitivo1024px1024px—
--breakpoint-mdPrimitivo768px768px—
--breakpoint-smPrimitivo640px640px—
--breakpoint-xlPrimitivo1280px1280px—
--breakpoint-xsmPrimitivo425px425px—
--tp-breakpoint-desktopSemântico1120px1120px—
--tp-breakpoint-mobileSemântico620px620px—
--tp-breakpoint-tabletSemântico860px860px—
--tp-breakpoint-wideSemântico1440px1440px—

Componente

21 token(s)

Medidas fixas de um componente específico, derivadas das camadas acima.

Família componente · nome, camada, valor resolvido no tema claro e no escuro e onde o valor é consumido no CSS.
TokenCamadaTema claroTema escuroOnde se aplica
--tp-component-button-height-lgComponente52px52px.tp-button-lg
--tp-component-button-height-mdComponente44px44px.tp-button
--tp-component-button-height-smComponente36px36px.tp-button-sm, .tp-status-select, .tp-page-size select +1
--tp-component-button-primary-activeComponente#4B005A#FAE4FF.tp-button-primary:active:not(:disabled)
--tp-component-button-primary-backgroundComponente#6B0080#EDBAF7.tp-button-primary
--tp-component-button-primary-foregroundComponente#ffffff#4B005A.tp-button-primary, .tp-button-primary:hover
--tp-component-button-primary-hoverComponente#4B005A#FAE4FF.tp-button-primary:hover
--tp-component-card-radiusComponente18px18px.tp-card
--tp-component-composer-min-heightComponente7rem7rem.tp-composer textarea
--tp-component-contact-widthComponente20rem20rem.tp-support-shell
--tp-component-field-height-lgComponente52px52px.tp-input-lg
--tp-component-field-height-mdComponente44px44px.tp-input-md
--tp-component-field-height-smComponente36px36px.tp-input-sm
--tp-component-field-min-heightComponente44px44px.tp-input
--tp-component-focus-ringComponente3px solid #6B00803px solid #EDBAF7—
--tp-component-inbox-list-widthComponente21rem21rem.tp-support-shell
--tp-component-message-max-widthComponente44rem44rem.tp-message-row
--tp-component-pagination-sizeComponente2.25rem2.25rem.tp-pagination-item, .tp-pagination-ellipsis
--tp-component-skeleton-speedComponente1400ms1400ms.tp-skeleton, .tp-skeleton-line, .tp-skeleton-avatar
--tp-component-toast-gapComponente12px12px—
--tp-component-toast-widthComponente22rem22rem—

Outros

3 token(s)

Tokens de compatibilidade e utilidades sem família dedicada.

Família outros · nome, camada, valor resolvido no tema claro e no escuro e onde o valor é consumido no CSS.
TokenCamadaTema claroTema escuroOnde se aplica
--container-institutionalPrimitivo1200px1200px.tp-standalone
--container-readingPrimitivo70ch70ch—
--spacingPrimitivo0.25rem0.25rem—

Nenhum token encontrado.

Revise o termo de busca ou limpe camada e família.

08 · Espaçamento e grade

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.

Escala --tp-space-* · barra proporcional, valor em rem, valor em px e quando usar cada degrau.
TokenProporçãorempxQuando usar
--tp-space-000Colapso deliberado: remover respiro herdado sem recorrer a margem negativa.
--tp-space-half0.125rem2pxSeparar rótulo e valor dentro de uma mesma célula ou badge.
--tp-space-10.25rem4pxDistância entre ícone e texto, marcador e rótulo.
--tp-space-20.5rem8pxItens de uma mesma linha: chips, tags, ações agrupadas.
--tp-space-30.75rem12pxCampos de um formulário curto, células compostas, toasts empilhados.
--tp-space-41rem16pxPadding interno padrão de célula, alerta e linha de esqueleto.
--tp-space-51.5rem24pxPadding de cartão e distância entre blocos relacionados.
--tp-space-62rem32pxSeparação entre grupos distintos dentro de um painel.
--tp-space-73rem48pxDistância entre sub-blocos de uma seção longa.
--tp-space-84rem64pxRespiro entre seções em telas médias.
--tp-space-95rem80pxRespiro 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.

tp-grid-4
tp-grid-4
tp-grid-4
tp-grid-4
tp-grid-3
tp-grid-3
tp-grid-3
tp-grid-2
tp-grid-2
Comportamento responsivo das grades utilitárias.
ClasseDesktop≤ 1120px≤ 860px≤ 620px≤ 390px
.tp-grid-22 colunas2 colunas2 colunas1 coluna1 coluna
.tp-grid-33 colunas3 colunas1 coluna1 coluna1 coluna
.tp-grid-44 colunas2 colunas2 colunas2 colunas1 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.

Containers, larguras máximas e onde cada um se aplica.
ContainerLargura máximaContexto
.tp-portal100remShell do portal, com trilho lateral de 16rem.
.tp-header-inner100remCabeçalho do design system e do produto.
.tp-footer90remRodapé compartilhado.
.tp-content80remPáginas de conteúdo sem trilho lateral.
.tp-site-content75remPáginas institucionais.
--tp-component-message-max-width44remBolha de mensagem no atendimento.
--tp-component-inbox-list-width21remColuna de fila no atendimento.
--tp-component-contact-width20remPainel de contexto do contato.
.tp-section-head p43remTexto de abertura de seção.
09 · Forma

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

Tons de borda, valor em cada tema e função.
TokenAmostraClaroEscuroFunção
--tp-border-default#E5E5E5#4D4153Separação padrão: cartão, tabela, campo, menu.
--tp-border-subtle#E5E5E5#4D4153Divisõ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#938697Contorno de controle operável: campo, seleção, botão secundário. Contraste verificado ≥ 3:1 contra a superfície.
default

Superfície de leitura. A borda apenas delimita.

subtle

Divisão interna. A borda não deve competir com o conteúdo.

strong

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.

10 · Grafismos

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.

Guia de estilos institucional

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.

01

Arco de grande raio

Presença da marca na margem. Sai pelo canto: o raio é sempre maior que a peça que o recebe.

02

Linha de acento

Direciona o olhar para a próxima informação. Uma linha por superfície, sempre na margem.

03

Pontos modulares

Marcam ritmo e ancoram um canto. Sempre em grade regular, nunca espalhados pela superfície.

04

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.

A construção do anel, em unidades da prancha, e o que o sistema aplicava antes.
MedidaUnidadesFraçãoOnde entra
Raio interno394,67—Extremos horizontais em 459,82 e 1249,16
Diâmetro externo1273,04—Largura do bounding box do próprio anel
Faixa241,840,189979--tp-graphic-arc-ratio
Terminaisr ≈ 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.

05

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

Programa de reconhecimento
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

Pontos resgatados

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-content a 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 e pointer-events: none no 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-overlap desliga a zona reservada. Ela existe para o contraexemplo desta página e não tem uso legítimo em produção.
Cada grafismo, a classe que o aplica, os tokens que o compõem e onde ele cabe.
GrafismoClasseTokensZona reservadaOnde 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.

Ler a documentação dos grafismos →
11 · Elevação

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.

Qual componente usa qual nível, e o valor resolvido em cada tema.
TokenComponenteTema claroTema escuro
--tp-elevation-0Tabela, lista, cartão embutidononenone
--tp-elevation-1Cartão flutuante0 8px 24px · #4B005A 8%mesmo valor
--tp-elevation-2.tp-toast0 20px 56px · #4B005A 18%mesmo valor
--tp-elevation-3Destaque editorial0 28px 80px · #4B005A 24%mesmo valor
--tp-elevation-menu.tp-menusombra fria da base0 12px 32px · preto 55%
--tp-elevation-tooltip.tp-tooltipsombra fria da base0 6px 18px · preto 50%
--tp-elevation-dialog.tp-dialog, .tp-drawersombra fria da base0 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.

12 · Motion

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.

Demonstração operável

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

Durações e curvas de aceleração, com o papel de cada uma.
TokenValorQuando usar
--tp-duration-fast120msRealce imediato: hover de botão, cor de trilho de switch, foco.
--tp-duration-normal160msEntrada e saída de toast, abertura de menu, troca de aba.
--tp-duration-slow240msSuperfícies grandes: gaveta, modal, painel lateral.
--tp-easing-standardeaseMudança de propriedade dentro de um elemento que já está na tela.
--tp-easing-enterease-outEntrada: o elemento desacelera ao chegar. É a curva do .tp-toast.
--tp-easing-exitcubic-bezier(.4, 0, 1, 1)Saída: o elemento acelera ao sair, liberando a atenção mais rápido.
--tp-component-skeleton-speed1400msCiclo do brilho do esqueleto de carga.
Animar

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.

Não animar

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%; }
}
13 · Camadas

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.

  1. --tp-z-dropdown30
  2. --tp-z-popover35
  3. --tp-z-sticky40
  4. --tp-z-menu50
  5. --tp-z-overlay99999
  6. --tp-z-drawer100000
  7. --tp-z-dialog100000
  8. --tp-z-toast100001
  9. --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.

Camadas, valores e o componente dono de cada uma.
TokenValorComponenteRegra
--tp-z-dropdown30.tp-menuMenu ancorado a um gatilho. Fecha ao clicar fora.
--tp-z-popover35.tp-mobile-ctaBarra fixa de ação no mobile.
--tp-z-sticky40Cabeçalhos fixos de tabela e trilho lateralFica acima do conteúdo, abaixo de qualquer sobreposição.
--tp-z-menu50.tp-heatmap-tooltipCamada auxiliar acima do conteúdo fixo.
--tp-z-overlay99999.tp-loading-overlayVéu que bloqueia a interação de um container.
--tp-z-drawer100000.tp-drawerGaveta lateral com foco contido.
--tp-z-dialog100000.tp-dialogModal com foco contido. Empata com a gaveta: nunca abra as duas ao mesmo tempo.
--tp-z-toast100001.tp-toast-regionAvisos temporários. Precisam ficar visíveis mesmo com um modal aberto.
--tp-z-preloader999999.tp-preloaderTela 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.

14 · Breakpoints

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.

Breakpoints --tp-breakpoint-* e o que muda em cada um.
TokenValorO que muda
--tp-breakpoint-mobile620pxTodas 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-tablet860pxOs 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-desktop1120pxO 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-wide1440pxLargura 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.

15 · Layout e densidade

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.

Veja a alteração na tabela de componentes abaixo.

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.

16 · Plataformas e dispositivos

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.

Abrir a referência

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.

Telefone, tablet e desktop: navegação, grade, alvo, tipografia, densidade, entrada e público.
AspectoTelefone · aplicativoTabletDesktop
Largura do appaté 620 px621 a 1120 pxacima de 1120 px
Quem usaColaborador (uso principal) e gestor, em decisões rápidasColaborador; gestão em consultaGestão e RH, atendimento; colaborador no navegador
NavegaçãoBarra de abas inferior, 3 a 5 destinosTrilho lateral de 96 pxNavegação lateral de 256 px, com a marca
Colunas e margens1 coluna, margem de 16 px2 colunas ou lista-detalhe (lista em 42%), margem de 24 px2 colunas assimétricas ou lista-detalhe, margem de 32 px, conteúdo até 72rem
Alvo mínimo44 × 44 px44 × 44 px44 px na navegação e nos botões; 24 px é o piso só para controles de ponteiro (WCAG 2.5.8)
TipografiaCorpo de 16 px; título da barra de 18 pxCorpo de 16 px; título de 24 pxCorpo de 14 px; título de 24 px
DensidadeConfortável; linhas de 64 pxConfortávelLinhas de 56 px; o painel da gestão aceita a densidade compacta
EntradaToque; teclado externo e leitor de telaToque e teclado externoPonteiro e teclado; toque em notebooks conversíveis
O que é primárioConsultar saldo, reconhecer, resgatarCatálogo e extrato com lista e detalhe à vistaCampanhas e pontos no painel; resgate no navegador
ConfirmaçãoFolha inferior com alça e FecharDiálogo centralizadoDiá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.

O que cada aplicativo traz, e o que continua no painel web.
AspectoColaboradorGestor
DestinosInício, Reconhecer, Catálogo, Extrato (Perfil no avatar)Início, Aprovações, Campanhas
Número principalSaldo disponívelPontos para distribuir, dentro da cota do trimestre
Ação primáriaReconhecer um colega; resgatar um prêmioReconhecer e creditar; decidir uma solicitação
Onde a conta fechaSaldo no início do período + créditos − débitos = saldo de hojePontos 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.

Escala das molduras

Olá, Júlia

Sem conexãoMostrando dados salvos em 21/09/2026, 08:40. Resgates ficam indisponíveis até a conexão voltar.

Saldo disponível

12.480pts

Atualizado em 21/09/2026, 08:40

Campanha ativaaté 30/09/2026

Reconhecer quem faz junto

Envie 5 reconhecimentos a colegas neste trimestre. Regras demonstrativas.

reconhecimentos enviados

Reconhecimentos recentes

Ao seu alcance

Reconheça uma atitude de um colega. Os pontos que você envia saem do seu saldo. Nesta demonstração, nada é enviado.

Quem você quer reconhecer? (obrigatório)
  • Nenhum colega encontrado. Altere a busca.

Motivo (obrigatório)

Quantos pontos? (obrigatório)

Saldo disponível:

Saldo depois do envio:

Reconhecimento registrado nesta demonstração

Categoria

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

Período

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

Aparência

O padrão é seguir o tema do aparelho. Nesta demonstração, a escolha vale para a página inteira.

Notificações

Conta

Recebidas

Telefone · 390 px · barra de abas

Olá, Júlia

Sem conexãoMostrando dados salvos em 21/09/2026, 08:40. Resgates ficam indisponíveis até a conexão voltar.

Saldo disponível

12.480pts

Atualizado em 21/09/2026, 08:40

Campanha ativaaté 30/09/2026

Reconhecer quem faz junto

Envie 5 reconhecimentos a colegas neste trimestre. Regras demonstrativas.

reconhecimentos enviados

Reconhecimentos recentes

Ao seu alcance

Reconheça uma atitude de um colega. Os pontos que você envia saem do seu saldo. Nesta demonstração, nada é enviado.

Quem você quer reconhecer? (obrigatório)
  • Nenhum colega encontrado. Altere a busca.

Motivo (obrigatório)

Quantos pontos? (obrigatório)

Saldo disponível:

Saldo depois do envio:

Reconhecimento registrado nesta demonstração

Categoria

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

Período

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

Aparência

O padrão é seguir o tema do aparelho. Nesta demonstração, a escolha vale para a página inteira.

Notificações

Conta

Recebidas

Tablet · 768 px · trilho e duas colunas

Olá, Júlia

Sem conexãoMostrando dados salvos em 21/09/2026, 08:40. Resgates ficam indisponíveis até a conexão voltar.

Saldo disponível

12.480pts

Atualizado em 21/09/2026, 08:40

Campanha ativaaté 30/09/2026

Reconhecer quem faz junto

Envie 5 reconhecimentos a colegas neste trimestre. Regras demonstrativas.

reconhecimentos enviados

Reconhecimentos recentes

Ao seu alcance

Reconheça uma atitude de um colega. Os pontos que você envia saem do seu saldo. Nesta demonstração, nada é enviado.

Quem você quer reconhecer? (obrigatório)
  • Nenhum colega encontrado. Altere a busca.

Motivo (obrigatório)

Quantos pontos? (obrigatório)

Saldo disponível:

Saldo depois do envio:

Reconhecimento registrado nesta demonstração

Categoria

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

Período

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

Aparência

O padrão é seguir o tema do aparelho. Nesta demonstração, a escolha vale para a página inteira.

Notificações

Conta

Recebidas

Desktop · 1180 px · navegação lateral e colunas 5:7

Padrões de aplicativo

Componentes do bloco TP:APP. Medidas próprias são propriedades locais --tp-app-*; cores, espaço, raio e tipo vêm dos tokens.
PadrãoClassesRegra
Casca adaptável.tp-appContê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-buttonTí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-item3 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-actionsAvatar 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-gradientNú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-sheetrole="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-chipsRadios 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-actionbarA ação primária gruda no rodapé da área rolável, na zona do polegar.
Lista-detalhe.tp-app-splitLista 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-bannerCarregando, vazio, erro com Tentar novamente e sem conexão, com as mensagens da biblioteca.
Molduras.tp-device, -phone, -tablet, -desktopSó para documentação. Genéricas: sem entalhe, ilha ou botões de fabricante.

Extrato

JA
  • +Campanha01/09/2026+2.000 pts
  • −Resgate22/08/2026−3.200 pts
Área segura e alvos. Faixas hachuradas: recortes do aparelho, lidos de 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 de viewport-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é

Prêmio

Kit de café especial

3.200 pts

Resgatar por 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

Prêmio

Resgatar

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 lidaMarcar como 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.

Kit de café especial

iOS · chevron da plataforma, título alinhado ao início.

Kit de café especial

Android e web · seta, título alinhado ao início.
Onde o sistema toma posição entre as plataformas.
AspectoiOSAndroidPosição do sistema
VoltarChevron; gesto a partir da bordaSeta; 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 barraCentralizado por padrãoAlinhado ao inícioAlinhado ao início nas duas. Títulos em pt-BR são longos e, centralizados entre dois botões, truncam cedo.
Rótulos das abasSempre visíveisPodem sumir nos destinos inativosSempre visíveis nas duas.
Folha inferiorAlça; arrastar para fecharAlça; arrastar ou voltar do sistemaAlç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:APP vale 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á.
Referência

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.

17 · Iconografia e imagem

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.

Os três ícones que a p.22 nomeia — presente, troféu e pacote —, cada um no desenho de --tp-icon-grid (24 px) centrado no artboard de --tp-icon-artboard (48 px), com o canto do artboard em --tp-icon-corner-max.

Cada número da p.23 e o token que o carrega.
TokenValorTexto do manual
--tp-icon-grid24px“o tamanho de 24x24 px”
--tp-icon-artboard48px“dentro de um artboard de 48x48 px”
--tp-icon-stroke2“considere 2 px para a espessura do traçado”
--tp-icon-corner-min / -max1px / 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.

Participante / usuário
Empresa
Mensagens / atendimento
Relatórios / financeiro
Premiação / benefícios
Conquistas
Segurança
Documentos

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.

18 · Biblioteca de componentes

Use. Combine. Teste.

Os mesmos partials usados nas jornadas estão aqui. Interações em memória, identificadores únicos e estados acessíveis.

Extensão técnica · em revisão

Ações e links

Amarelo em CTA: extensão digital, sujeita a homologação.

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.

Período de referência
Agrupamento

Navegação e sobreposições

Confirmação

Arquivar este registro?

O exemplo deixará a fila ativa desta demonstração. A ação não modifica dados reais.

DEMO-001

Boas-vindas — equipe Aurora

Registro fictício para demonstrar leitura de detalhes sem perder o contexto da listagem.

Área
RH
Situação
Em revisão
Identificador
DEMO-001

Histórico demonstrativo

  1. Rascunho criado14/09/2026 · etapa ilustrativa
  2. Conteúdo revisado15/09/2026 · etapa ilustrativa
  3. Aguardando revisão visualPróxima etapa do exemplo

Dropdown: setas, Home e End. Modais: foco contido, Escape e retorno ao acionador.

Tabela e filtros

Registros fictícios para testar filtros, seleção, ordenação e paginação.
ÁreaSituaçãoAtualizado em

Nenhum registro encontrado.

Revise o termo de busca ou limpe os filtros.

Feedback e estados

Informação✓ Concluído! Em revisãoErro de validaçãoPF
Você está em uma demonstração.

Os dados desta página são fictícios e não representam resultados da Troca Pontos.

Não foi possível concluir a ação.

Revise os campos indicados e tente novamente. Seus dados permanecem nesta tela.

Esta informação ajuda a interpretar o campo.
Somente dados fictícios

A amostra serve para avaliar leitura, estados e layout.

Alteração demonstrativa registrada.

A confirmação permanece até você fechá-la.

Carregamento ilustrativo

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 demonstrativo

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

Campanha publicada.

Reconhecimento Trimestral está ativa para 312 colaboradores. Os pontos serão creditados no encerramento, em 30/09/2026.

Três parceiros sem catálogo publicado.

Os colaboradores não verão benefícios desses parceiros até a publicação. A campanha continua ativa.

Revisar parceiros
Não foi possível creditar 14 colaboradores.

Os registros têm matrícula duplicada. Nenhum ponto foi debitado do orçamento da campanha. Corrija as matrículas e repita o crédito.

Regra de expiração alterada.

Pontos creditados a partir de 01/10/2026 expiram em doze meses. O saldo anterior mantém a regra antiga.

Alerta dispensável

Você está vendo dados de demonstração.

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

Neutro i Informação ✓ Creditado ! Aguardando aprovação ✕ Crédito recusado

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

Qual comunicação usar em cada situação.
ComponenteDuraçãoUse quando
.tp-toast7 segundosResultado de uma ação que o usuário acabou de disparar e que não exige decisão.
.tp-alertAté a situação mudarCondição persistente que afeta o que está na tela e pode exigir uma ação.
.tp-error-stateAté recuperarO conteúdo não pôde ser carregado; não há o que mostrar no lugar.
.tp-field-errorAté corrigirO 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.

Resgate confirmado.

4.500 pontos debitados do saldo de Ana Ribeiro.

Saldo insuficiente.

Faltam 1.200 pontos para este benefício.

Falha na integração.

Nenhum ponto foi debitado.

Campanha encerrada.

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-alert ou .tp-error-state no 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.

Atualizando saldos…
Saldos fictícios de pontos por colaborador.
ColaboradorÁreaSaldo
Ana RibeiroOperações12.480
Bruno SalesComercial8.150
Carla NevesLogística21.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.

Não foi possível carregar o catálogo de parceiros.

A conexão expirou antes da resposta. Seus filtros foram preservados.

Qual usar

Indicador de carga por situação.
SituaçãoComponentePor quê
Primeira carga, forma conhecida.tp-skeleton-*Evita salto de layout e antecipa a estrutura.
Recarga de conteúdo visível.tp-loading-overlayPreserva o contexto e bloqueia interação ambígua.
Ação pontual em um controle.tp-button-loading com aria-busy e aria-disabledO 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-indeterminateConfirma atividade sem prometer prazo.
Falha na carga.tp-error-stateExplica a causa e oferece recuperação.
Carga concluída sem resultados.tp-emptyVazio 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

Escolha entre separador, espaço e superfície nova.
RecursoUse quando
Espaço (--tp-space-5)Os blocos pertencem ao mesmo assunto e a ordem é contínua.
.tp-dividerOs blocos mudam de assunto, mas continuam na mesma superfície e no mesmo nível hierárquico.
Novo .tp-cardOs 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

Demonstração local. Use apenas dados fictícios; este formulário não envia informações.

  1. 1Contato essencial
  2. 2Contexto
  3. 3Conclusão

Sem cadastro real.
Demonstração concluída.

Os campos passaram pela validação local. Não há solicitação enviada, prazo de retorno ou contato agendado.

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

Rascunho22
Em revisão22
Concluído22

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.

19 · Matriz de estados

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.

Revisão sem abrir telas

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.

Matriz de estados · cada célula é uma amostra renderizada, não uma imagem. Hover, foco e acionamento aparecem forçados por estilo em linha com o token correspondente.
ComponentePadrãoHoverFoco visívelAcionadoSelecionadoEm cargaDesabilitadoErro
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-linkVer resgateSem regra própriaVer resgateSem 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———
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
Ana Ribeiro
Ana Ribeiro
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.

Ver resgate
Área: Logística
Como cada estado é comunicado, além da cor, e como é anunciado a tecnologias assistivas.
EstadoSinal visual além da corSemântica
PadrãoForma, peso e borda da variante.Nenhum atributo adicional.
HoverMudanç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ívelOutline de 3 px deslocado 3 px, fora do controle, preservando a borda original.Gerado por :focus-visible; nunca removido por outline: none.
AcionadoEscurecimento do preenchimento e deslocamento de 1 px no eixo vertical.:active. Suprimido quando o controle está desabilitado.
SelecionadoPreenchimento 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 cargaAnel 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.
DesabilitadoOpacidade 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.
ErroBorda 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.

20 · Padrões de produto

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.

Programas · Reconhecimento Trimestral
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.

287Resgates no trimestre▲ 12% acima do trimestre anterior
1,24 miPontos creditados▲ 8% acima do trimestre anterior
18%Saldo a expirar em 90 dias▲ 5 p.p. acima do trimestre anterior
41Parceiros ativos▼ 3 a menos que no trimestre anterior

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.

Nenhum filtro aplicado.

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.

Ana Ribeiro

Administradora · Grupo Horizonte (fictício)



Avisos



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.

Bem-estar9898
Educação7474
Gastronomia6161
Viagem5454
Ver dados do gráfico em tabela
Resgates por categoria de benefício no trimestre. Dados fictícios.
CategoriaResgates
Bem-estar98
Educação74
Gastronomia61
Viagem54

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.

21 · Imagem, interface e grafismos

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.

Diretriz visual
Imagem

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.

Interface

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.

Grafismos

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.
22 · Catálogo de telas adaptadas

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.

Aplicações Troca Pontos · demonstração

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.

23 · Padrões ERP

Da visão geral à próxima ação.

Listar, filtrar, revisar, cadastrar e consultar detalhes com os mesmos componentes.

24 · Padrões institucionais

Uma conversa com direção.

Hero, proposta de valor, navegação por áreas, FAQ, formulário progressivo e CTA mobile. Sem claims comerciais inventados.

Abrir página institucional
25 · Comunicação e e-mails

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 →
26 · Acessibilidade

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.

Ler evidências e roteiro de testes →
27 · Temas

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.

28 · Adoção

Comece pelo núcleo.

Tokens, componentes e exemplos são camadas reutilizáveis para os projetos Troca Pontos.

29 · Governança

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.

01

Estratégia

Objetivo e pilar de marca.

02

Conteúdo

Clareza, fontes e claims.

03

Design

Marca, tokens e experiência.

04

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 →
30 · Changelog e pendências

O que está implementado. O que falta validar.

1.0.0 · 15/09/2026

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.

31 · Sistema Atendimento

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.

Padrão de produto · demonstração
atendimentos abertos
aguardando leitura
registros na fila
com SLA estourado

Nenhum filtro aplicado.
Simular
Conversa

· ·

Atendimento concluído: a transição de status exige reabertura explícita.

Carregando a conversa…

Variáveis disponíveis: {{nome}}, {{empresa}}, {{assunto}} e {{protocolo}}. Elas são preenchidas com os dados fictícios do atendimento selecionado.

Imagem demonstrativa gerada pelo próprio Design System. Nenhum arquivo real foi carregado.

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.