Pular para o conteúdo principal

Foundation Styles

O que são

Foundation Styles são definições de classes CSS pré-compostas geradas pelo Aplica Tokens Theme Engine. Diferentemente de tokens atômicos (propriedades CSS individuais), Foundation Styles agrupam várias referências de tokens em uma única classe com nome semântico.

O engine produz dois arquivos de estilos por foundation brand:

ArquivoConteúdo
data/foundation/{brand}/styles/typography_styles.jsonDefinições compostas de tipografia (font-family, weight, size, line-height, letter-spacing, text-transform, text-decoration)
data/foundation/{brand}/styles/elevation_styles.jsonDefinições compostas de box-shadow por nível de elevação

Esses arquivos JSON são compilados em classes CSS pelo step de build do Style Dictionary:

Output CSSLocalização
dist/css/foundation/{brand}/typography.cssClasses utilitárias de tipografia
dist/css/foundation/{brand}/elevation.cssClasses utilitárias de elevação

Por que estilos compostos e não tokens atômicos

Tokens atômicos são flexíveis, mas exigem que múltiplas propriedades sejam montadas no ponto de uso. Cada componente que precisa de um estilo de heading deve referenciar individualmente font-family, weight, size, line-height, letter-spacing, text-transform e text-decoration. Isso cria:

  • Repetição no nível de componente
  • Risco de inconsistência quando as propriedades são montadas incorretamente
  • Dificuldade para geradores de código com IA, que precisam raciocinar sobre tokens individuais e compô-los corretamente a cada vez

Foundation Styles codificam a combinação correta uma vez. Um componente aplica uma única classe; a definição de estilo é o contrato.

Este também é o padrão de consumo preferido pelo AI UI Integration Program: agentes de IA são instruídos a preferir classes de typography.css em vez de montar referências individuais de tokens.


Nomenclatura de classes de tipografia

Classes de tipografia seguem este padrão:

.typography-{foundation}-{category}-{variant}

Exemplos:

.typography-theme_engine-heading-title_1 { ... }
.typography-theme_engine-heading-title_2 { ... }
.typography-theme_engine-action-strong-tight-medium { ... }
.typography-theme_engine-body-regular-loose-medium { ... }

Cada classe define todas as propriedades tipográficas usando referências a tokens semânticos:

.typography-theme_engine-heading-title_1 {
font-family: var(--semantic-typography-fontFamilies-main);
font-weight: var(--semantic-typography-fontWeights-main-semibold-normal);
font-size: var(--semantic-typography-fontSizes-medium);
line-height: var(--semantic-typography-lineHeights-close-medium);
letter-spacing: var(--semantic-typography-letterSpacings-regular);
text-transform: var(--semantic-typography-textCase-uppercase);
text-decoration: var(--semantic-typography-textDecoration-default);
}

As propriedades customizadas CSS dentro da classe são resolvidas em runtime a partir do arquivo de tema ativo — trocar temas alterando data-theme atualiza tanto os tokens atômicos quanto os valores que essas classes referenciam.


Nomenclatura de classes de elevação

Classes de elevação são nomeadas por nível:

.elevation-level_minus_one { box-shadow: ... }
.elevation-level_zero { box-shadow: ... }
.elevation-level_one { box-shadow: ... }
.elevation-level_two { box-shadow: ... }
.elevation-level_three { box-shadow: ... }
.elevation-level_four { box-shadow: ... }
.elevation-level_five { box-shadow: ... }

Cada classe compõe tokens de depth spread e opacidade:

.elevation-level_two {
box-shadow:
var(--semantic-dimension-sizing-zero)
var(--semantic-dimension-sizing-nano)
var(--semantic-dimension-sizing-large)
calc(0px + var(--semantic-depth-spread-next))
var(--semantic-opacity-color-grayscale-superTransparent);
}

Elevação é definida por foundation brand (não por tema), então todos os temas que compartilham uma foundation usam as mesmas definições de classes de elevação. Os valores de cor e spread da sombra resolvem dinamicamente a partir dos tokens semânticos do tema.


Como carregar Foundation Styles

Importe tanto o arquivo de tema ativo quanto as folhas de estilo de foundation:

<!-- 1. Tema ativo (resolve todas as variáveis --semantic-* e --foundation-*) -->
<link rel="stylesheet" href="/dist/css/aplica_joy-light-positive.css" />

<!-- 2. Foundation styles (definições de classes que referenciam as variáveis acima) -->
<link rel="stylesheet" href="/dist/css/foundation/engine/typography.css" />
<link rel="stylesheet" href="/dist/css/foundation/engine/elevation.css" />

A ordem importa: o arquivo de tema deve ser carregado primeiro para que as propriedades customizadas existam quando as definições de classes forem interpretadas.

Em seguida, aplique as classes diretamente no markup:

<h1 class="typography-theme_engine-heading-title_1">Título da página</h1>

<div class="elevation-level_two" style="padding: 1.5rem; border-radius: 0.5rem;">
Conteúdo do card
</div>

Quando a geração é acionada

Foundation Styles são geradas como parte do step foundations:generate, que roda automaticamente durante um build completo:

theme-engine build

Para regenerar apenas os dados de foundation (incluindo estilos) sem um build completo:

theme-engine foundations:generate

Relação com o AI UI Integration Program

O AI UI Integration Program designa Foundation Styles como o caminho de consumo preferido para código de UI gerado por IA. Quando um agente de IA constrói um componente usando tokens Aplica, ele deve:

  1. Aplicar uma classe typography-* para estilização de texto — não montar tokens de fonte individuais.
  2. Aplicar uma classe elevation-* para sombras — não compor valores brutos de box-shadow a partir de tokens de depth.
  3. Usar propriedades customizadas --foundation-* ou --semantic-* para cor, espaçamento e outros valores atômicos.

Essa preferência existe porque Foundation Styles codificam composições validadas e autorais. Uma IA que compõe tokens atômicos de forma independente pode produzir combinações sintaticamente corretas mas semanticamente incorretas (por exemplo, escala de line-height errada para um dado tamanho de fonte).


Aliases foundation.txt (desde 3.6.0)

Além das classes de typography e elevation, a camada foundation expõe aliases de cor de texto legível sob foundation.txt.*. São aliases planos — um token por conceito semântico — que fornecem a cor de texto correta, legível sobre canvas, para cada família de cor.

foundation.txt.info → var(--foundation-txt-info)
foundation.txt.success → var(--foundation-txt-success)
foundation.txt.warning → var(--foundation-txt-warning)
foundation.txt.danger → var(--foundation-txt-danger)
foundation.txt.primary → var(--foundation-txt-primary) (se textExposure incluir 'interfaceFunction')
foundation.txt.promo → var(--foundation-txt-promo) (se textExposure incluir 'product')

Esses aliases são distintos dos tokens txtOn (texto sobre fundos coloridos). Os aliases foundation.txt.* são para texto em fluxo de conteúdo sobre canvas — parágrafos, labels e headings que carregam a cor semântica de uma família sem estarem sobre uma superfície colorida.

Quais famílias são expostas é controlado por generation.colorText.textExposure no workspace config. O padrão é ['feedback'] apenas. Veja 07-txt-token.md para o contrato completo.


Referências