Pular para o conteúdo principal

Status: Approved · v3 · SPEC-UX-TOKENS-001

depends_on: SPEC-BRAND-001

used_by: IS-ZERO-00.2, IS-MVP-01.1, IS-MVP-17.1, IS-MVP-17.2, IS-MVP-17.3, IS-MVP-17.4, IS-MVP-19.2

Design tokens v3 — quatro modos

Fonte canônica para web, mobile, componentes e renderização de cards. Os valores abaixo espelham as variáveis .tz e [data-theme="light"] .tz dos artefatos design/*.dc.html.

1. Princípios

  • O shape é { identity: raiz|neutral, luminosity: dark|light }; ausência de preferência usa neutral/dark.
  • Preferência legada dark|light migra para raiz/<valor>.
  • Parser rejeita campos/enums desconhecidos e storage corrompido; o fallback é neutral/dark, sem logar o valor bruto nem persistir até uma escolha válida.
  • Componentes consomem nomes semânticos, nunca cores físicas ou hex solto.
  • primary depende da identidade: Raiz #EA580C; Neutro Dark #E8E4DC; Neutro Light #2A2520.
  • on-primary é o texto/ícone obrigatório sobre primary; componentes não calculam nem escolhem esse contraste localmente.
  • accent, success e danger qualificam informação; cor nunca substitui texto/ícone.
  • O logo usa os assets oficiais de assets/new_brand/; #FB923C é reservado ao FC/asset de marca e não vira token de ação.

2. Cores semânticas canônicas

TokenNoite de Holofote (dark)Editorial Terrão (light)Uso obrigatório
background#111111#FBF7EDcanvas da aplicação
surface#1B1816#FFFFFFcards, barras, painéis e overlays
surface-alt#2A2420#F3E7CEseleção neutra, controle agrupado, skeleton
text#F7F5EB#0B0B0Ctexto principal
text-muted#B2A79E#655B53metadata e ajuda não crítica
border#3B302A#E4C99Bdivisores, contornos e estruturas
primarypor identidadepor identidadeação principal, seleção e navegação ativa
on-primarypor identidadepor identidadetexto e ícone sobre primary
accent#F2B230#C44121holofote/contexto e destaque secundário
success#58A96C#2F8F46validada, vitória e sucesso
danger#E06555#C63F3Fcontestada, derrota, erro e destrutivo

Token auxiliar documentado nos artefatos:

TokenDarkLightUso
chip-overlayrgba(255,255,255,.06)rgba(0,0,0,.05)fundo neutro de chip; nunca para texto

Mapeamento literal dos artefatos

CSS do protótipoToken semântico v3
--bgbackground
--sursurface
--sur2surface-alt
--txttext
--muttext-muted
--borborder
--priprimary
--accaccent
--oksuccess
--dngdanger
--chipchip-overlay

Não criar primary-dark, asfalto, terra ou nomes similares no consumo. Primitivos podem existir internamente, mas a API pública do tema é semântica.

Matriz de identidade

IdentidadeDarkLightRegra
raizprimary #EA580C; on-primary #0B0B0Cprimary #EA580C; on-primary #0B0B0Cação e seleção com identidade RaizFC
neutralprimary #E8E4DC; on-primary #111111primary #2A2520; on-primary #FFFFFFação e seleção neutras; logo oficial não é recolorido

VIVID_RED #E8342A é token semântico dedicado a cartão vermelho e gol contra. Não substitui danger, que continua erro/contestação/destrutivo.

3. Identidade de marca e entidade

ValorPapel
#EA580Claranja RAIZ e primary somente na identidade Raiz
#FB923Claranja claro FC, somente marca/asset
#0B0B0Cpreto tinta do brand kit e texto do tema claro
#FFFFFFbranco papel e surface clara

Cor de time/torcida não entra na paleta global. Ela é uma prop contextual (entityColor) aplicada somente a hero/card de entidade, depois de validação de formato e contraste. Falha de contraste retorna ao fundo Noite de Holofote; o escudo nunca é recolorido.

4. Tipografia

Famílias

TokenFamíliaPesosUso
font-bodyInter, system-ui, sans-serif400, 500, 600, 700, 800toda UI, texto, ação e formulário
font-impact'Bebas Neue', sans-serif400placares, números de stats e títulos de impacto

É proibido usar Bebas Neue em texto corrido, label, helper, placeholder, botão, menu, tabela ou formulário.

Escala Inter extraída dos artefatos

TokenTamanho/linhaPeso permitidoUso
label-xs10.5/14 px500–600eyebrow, badge e legenda técnica curta
caption11.5/16 px400–600metadata compacta
body-sm12.5/20 px400–600helper, descrição e lista densa
body14/22 px400–650interface e ação padrão
body-lg16/24 px400–600texto de leitura e informação principal
content-title22/28 px700título editorial de conteúdo

Escala Bebas Neue extraída dos artefatos

TokenTamanho/linhaUso permitido
impact-sm20/20 pxnúmero compacto/score em card denso
impact-md24/24 pxtítulo de impacto compacto
stat-md30/30 pxnúmero de stat e scoreboard padrão
impact-lg34/34 pxtítulo de tela/fluxo de impacto
stat-lg44/44 pxstat/placar destacado
score-xl58/58 pxplacar/card protagonista
display78/74 pxcapa institucional; não usar em UI operacional

Tamanhos intermediários vistos em composições exportáveis são variações do renderer por formato, não novos tokens de produto. O exportador pode escalar proporcionalmente mantendo família, hierarquia e safe area.

5. Espaçamento e dimensões

Escala: 0, 4, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 32, 36, 44, 48, 56, 64, 72, 96, 128 px. Os valores 10, 14, 18, 22, 26, 28, 36, 44, 72, 96 e 128 existem porque são usados pelos componentes ou safe areas canônicos; não autorizam espaçamento arbitrário.

Token/regraValor
control-height48 px
touch-target-min44 × 44 px
switch44 × 26 px
form-control-sm32 × 32 px
avatar-stack32 × 32 px, overlap 10 px
card-padding-mobile16 px
content-padding-mobile16–20 px
section-gap-mobile32 px
content-max-public1240 px

6. Radius e bordas

TokenValorUso
radius-form10 pxbotão, input, segmented e busca
radius-feedback11 pxtoast, banner, dropdown e upload
radius-game12 pxcard de jogo/pendência
radius-card14 pxcard e modal
radius-sheet16 px 16 px 0 0bottom sheet
radius-pill999 pxswitch, toggle, avatar circular e badge de status aprovado
border-default1 pxestrutura
border-focus2 pxfoco/seleção visível

Sombra é discreta e complementar: cards comuns devem funcionar só com surface, border e espaço. Overlays podem usar sombra para separação.

Botões, tabs acionáveis e chips de filtro usam radius-form (10 px), nunca radius-pill.

7. Estados e derivações

  • hover: altera superfície/contraste por derivação do token, sem introduzir nova cor de marca.
  • focus: ring de 2 px em primary; quando houver conflito com o conteúdo, accent é permitido com contraste validado.
  • disabled: mantém label legível, remove ênfase e bloqueia ação; não depende apenas de opacidade.
  • loading: preserva largura/altura, mantém nome acessível e impede duplo envio.
  • selected/active: primary + on-primary; não usar verde como seleção.
  • victory/validated: success + texto/ícone.
  • draw/waiting-validation: accent + texto/ícone.
  • defeat/contested/error: danger + texto/ícone; mensagens diferentes não podem depender da mesma cor sem label.
  • scheduled/provisional: surface-alt/chip-overlay + text-muted + label.

8. Skeleton e motion

Skeleton usa surface-alt → border → surface-alt, background-size: 200% 100%, ciclo de aproximadamente 1.4 s e radius 8 px, sempre espelhando a hierarquia final. Reduced motion remove o shimmer ou o substitui por pulso mínimo sem deslocamento.

Transições funcionais ficam em 120–240 ms. Motion não atrasa tarefa e não comunica estado sozinho.

9. Exportação de cards

Renderers reutilizam cores e tipografia semânticas, mas operam em pixels do formato. O placar continua Bebas Neue; metadata e assinatura continuam Inter. Preview e PNG devem compartilhar a mesma fonte de tokens. Formatos e regras estão em SPEC-UX-SHARE-VISUAL-001.

10. Critérios de aceite

  • Valores de luminosidade e identidade são equivalentes aos valores canônicos listados nesta spec.
  • Default Neutro Dark, fallback inválido/corrompido, migração legada e preferência persistida são cobertos por teste; não ocorre flash visível de tema incorreto.
  • Web, mobile e renderers de card consomem a mesma API semântica.
  • Nenhum componente de produto usa hex global ou nome de cor física diretamente.
  • Todo conteúdo renderizado sobre primary usa on-primary; contraste é validado nas quatro combinações.
  • Bebas Neue é limitada a placar, stat e título de impacto; Inter cobre o restante.
  • Estados esportivos combinam cor, texto e/ou ícone.
  • Contraste, foco, fonte ampliada e reduced motion são verificados nos quatro modos.
  • Cor de entidade tem fallback seguro e nunca altera o asset do escudo.

11. Migração

Os tokens e providers atuais de luminosidade dark|light serão evoluídos pelo EP-MVP-19.3. Durante a migração, aliases temporários podem existir somente dentro do package; consumers usam uma única API semântica e a preferência legada é convertida conforme ADR-015. A remoção de aliases exige busca por consumidores e teste de rollback no mesmo EP.

12. Histórico

  • 3.0 — modelo bidimensional Raiz/Neutro × dark/light, default Neutro Dark e migração compatível conforme ADR-015.
  • 2.2 — tokens v2 dark-first, valores exatos dos protótipos e Bebas Neue oficial.
  • 2.1 — paleta terrão light-first anterior, preservada no histórico Git.