Pular para o conteúdo principal

Mapeamento: Racionais Matemáticos Alpha/V1 → Aplica Theme Engine (V2)

Este documento mapeia os racionais matemáticos e pseudo-códigos desenvolvidos no Alpha e na V1 para sua correspondência na estrutura atual do Aplica Theme Engine. Identifica o que foi preservado (com renomeação), o que foi evoluído, e o que ainda precisa ser formalizado.


0. Linha Evolutiva de Cores (Alpha → V1 → V2)

Esta é a seção mais importante do mapeamento — a decomposição de cores é onde o sistema mais evoluiu.

Alpha (2020-2022) — Decomposição manual por Darken/Lighten

A decomposição de cores no Alpha era manual e algoritmicamente simples, baseada em operações de escurecimento/clareamento sobre a cor base.

Dois tipos de decomposição:

Decomposição Comportamental (5 estados)

Estado AlphaOperaçãoCorrespondente V2
Darkestcor base → darkest (textos, fundos escuros)behavior.darkest (palette.170)
Action+6 escalas para darkbehavior.action (palette.120 = hover)
Defaultcor base purabehavior.normal (palette.100)
Active+6 escalas para lightbehavior.pressed (palette.140)
Lightest+9 escalas para light (fundo claro)behavior.lightest (palette.10)

Nota: Na V1 Active era o estado de clique. Na V2.24, active foi renomeado para pressed, e focus ganhou token próprio (palette.50).

Decomposição de Layout (Neutros)

Passo AlphaOperaçãoCorrespondente V2
Base to Neutralcor primária escurecida 50%neutrals — chroma reduzida via OKLCh
Highest ContrastBase to Neutral escurecida 25%neutrals.140 (mais escuro)
17 níveis de neutral.170contrast.deep.lightInterpolação linear15 níveis neutrals.5neutrals.140
Neutral 5 (intermediário)1 passo de neutral.10 para claroneutrals.5

Método de interpolação Alpha: darken()/lighten() em HSL — simples mas impreciso perceptualmente.

Regra de Acessibilidade Alpha

1. Testar fonte vs. fundo com "Color Darkest"
2. Falhou? → testar "Contrast Dark Deep" (#000000)
3. Falhou? → testar "Color Lightest"
4. Falhou? → testar "Contrast Light Deep" (#ffffff)
Mínimo obrigatório: WCAG AA (4.5:1 para texto normal)

V1 (2022-2023) — Taxonomia formalizada, ainda manual

A V1 não mudou o algoritmo de cores, mas formalizou a taxonomia:

Categoria V1Subgrupos V1Token V1
Cores de MarcaCor principalcolor.primary
Cores de AmbienteNeutras, Contraste, Escala de Cinzacolor.tone.neutral.*, color.ambient.grayscale.*
Cores de InteraçãoFunction (Primary/Secondary/Link), Feedback (Info/Success/Warning/Danger)color.interaction.function.*, color.interaction.feedback.*
Cores de TextoBase (Positive/Negative), Feedbackcolor.text.*

V2 (2023-presente) — Pipeline OKLCh automatizado

O V2 substituiu as operações manuais de darken/lighten pelo pipeline OKLCh — um espaço de cor perceptualmente uniforme:

AspectoAlpha/V1V2
Espaço de corHSL (darken/lighten)OKLCh (Luminosity, Chroma, Hue separados)
Paleta5 estados manuais19 níveis automáticos (10–190)
Neutros17 níveis via darken da primária15 níveis via OKLCh (chroma × 0.1)
GrayscaleVia escala de cinza da marcaArquivo separado, valores fixos customizáveis
AcessibilidadeRegra manual sequencialAutomática — algoritmo WCAG calcula txtOn
Dark modeManualInversão automática: dark.surface[L] = light.surface[200-L]
Variantes de txtOn1 regra (darkest/lightest)3 estratégias: high-contrast, brand-tint, custom-tint

Por que OKLCh é superior ao HSL:

  • Em HSL, interpolar de laranja para azul passa por verdes indistinguíveis
  • Em OKLCh, L (Lightness) é perceptualmente linear: L=0.5 é visualmente o meio-ponto exato
  • Reduzir C (Chroma) cria neutros com temperatura de cor preservada — não cinza puro
  • Garantia de que L=0.98 é "quase branco" e L=0.05 é "quase preto" em qualquer matiz

Referência V2: docs/context/dynamic-themes-reference/COLOR-DECOMPOSITION-SPEC.md



1. Sistema de Tamanhos e Espaçamento (Dimension)

V1 — Variáveis originais (PT-BR)

Variável V1TipoValorCorrespondente V2
UnidadeLayoutNumber4LayoutUnit
FatorMultiplicadorEscalaNumber4ScaleMultiplierFactor
UnidadePadraoDesignNumberLayoutUnit × FatorMultiplicadorEscala = 16DefaultDesignUnit
niveisEscalaNumber4scaleLevels
EscalaFibonacci / EscalaCresArray[16, 28, 44, 72, 116]FibonacciScale
EscalaDescArray[4, 8, 12]DescendingScale
EscalaDescInferiorArray[1, 2]DescendingScaleInferior
Tamanho[]Array0.01 + EscalaDescInferior + EscalaDesc + EscalaCresSize[]
Espacamento[]Array0 + EscalaDesc + EscalaCresSpacing[]

Regras preservadas integralmente:

  • Inicia em UnidadePadraoDesign (16dp)
  • Acima: progressão Fibonacci (soma dos dois anteriores, múltiplos de UnidadeLayout)
  • Entre UnidadeLayout e UnidadePadraoDesign: subtração de UnidadeLayout
  • Abaixo de UnidadeLayout: divisão por 2, arredondado para baixo
  • Espaçamento mínimo = UnidadeLayout (4dp); tamanho mínimo = 1dp

O que evoluiu na V2

  1. Variantes por densidade — a V1 tinha uma escala única. A V2 introduziu minor/normal/major cada uma com seu próprio DefaultDesignUnit, tornando a escala paramétrica.

  2. Aliases semânticos por variante — na V1 os aliases eram fixos. Na V2 cada variante pode ter semanticByVariant distintos.

  3. Tipografia integrada — na V2 fontSizes e lineHeights são gerados no mesmo arquivo de dimension (_theme_typography key), acoplando escala espacial e tipográfica.

Arquivo de referência no V2

  • Documentação: references/aplica-tokens-theme-engine/docs/context/dimension/01-spatial-system.md
  • Implementação: references/aplica-tokens-theme-engine/dynamic-themes/scripts/dimension-scale.mjs
  • Config: references/aplica-tokens-theme-engine/config/global/dimension.config.mjs

2. Sistema de Opacidade

V1 — Variáveis originais

Variável V1TipoValor
TRANSPARENTConstant0%
TRANSLUCIDConstant50%
OPAQUEConstant100%
LEVEL_SHORTCUT (LS)Constant2 (número de níveis intermediários)
VARIATION_SHORTCUT (VS)Constant10% (variação por grau)
QUARTERBooleantrue (se cria valores intermediários)
LsLoopDerivedLS / 2 (subtrator para loop)
levelsUpOpacity[]ArrayLoop somando de TRANSPARENT → TRANSLUCID
levelsDownOpacity[]ArrayLoop subtraindo de OPAQUE → TRANSLUCID
levelsOpacity[]ArrayUsado quando LS > 8 (divisão total / LS)

Lógica do algoritmo V1:

  • Se LS ≤ 8: cria VS = 10% por grau, gera arrays de cima e de baixo
  • Se LS > 8: VS = 100% / LS, gera array único
  • QUARTER = true: cria valores intermediários (25%, 75%)

Status no V2

Não formalizado como racional matemático. O data/semantic/default.json tem semantic.opacity.* mas sem documentação do algoritmo gerador. A escala atual é:

semantic.opacity.intense → 0.80
semantic.opacity.medium → 0.50 (= TRANSLUCID)
semantic.opacity.light → 0.30
semantic.opacity.subtle → 0.10

O que adaptar para o V2

Criar docs/context/opacity-system.md com:

  1. As três constantes fundacionais (TRANSPARENT / TRANSLUCID / OPAQUE) como âncoras semânticas
  2. A lógica de geração algorítmica (LS, VS, QUARTER) como referência para expandir a escala
  3. Mapeamento entre a lógica V1 e os tokens atuais de semantic.opacity.*
  4. Proposta: tornar a escala de opacidade gerável via config (como Dimension), não hardcoded

Arquivo a criar: references/aplica-tokens-theme-engine/docs/context/OPACITY_SYSTEM.md


3. Sistema de Profundidade (Depth / Elevation)

V1 — Estrutura de elementos

A V1 definiu profundidade como composição de 5 elementos primitivos:

ElementoToken V1Semântica
Positiondepth.elements.position.outter / innerSombra externa (elevação) ou interna (recorte)
Distancedepth.elements.distance.<sizing-alias>Tamanho da sombra nos eixos X e Y
Intensitydepth.elements.intensity.low/medium/highBlur da sombra (0.05, 0.15, 0.30)
Proximitydepth.elements.proximity.distant/medium/close/flatSpread da sombra (-8, -4, -2, 0)
Luminositydepth.elements.luminosity.shadow.*/light.*Cor da sombra ou luz

Níveis de elevação V1:

NívelToken V1Uso semântico
Level -1depth.level.oneMinusFormulários/inputs (profundidade interna)
Level 0depth.level.zeroBase sem elevação (reset)
Level 1depth.level.onePressed/interação
Level 2depth.level.twoCards/buttons padrão
Level 3depth.level.threeNavigation
Level 4depth.level.fourDropdowns
Level 5depth.level.fivePickers, tooltips
Level 6depth.level.sixModals

Status no V2

Parcialmente implementado. A V2 tem os níveis (level_minus_one a level_six) e eles são configuráveis por tema via elevation no config. Mas o racional dos 5 elementos primitivos não está documentado — o que existe é apenas a configuração de boxShadow por nível.

O que adaptar para o V2

  1. Documentar os 5 elementos como a semântica de construção de sombras — não precisam ser tokens expostos, mas devem existir como guia de configuração de elevation por tema.

  2. Mapear os níveis da V1 para os da V2:

    • V1: depth.level.oneMinus → V2: semantic.depth.level_minus_one
    • V1: depth.level.zero → V2: semantic.depth.level_zero
    • V1: depth.level.one → V2: semantic.depth.level_one
    • (e assim por diante)
  3. Criar guia de configuração de elevation explicando como os 5 elementos se traduzem em valores de box-shadow CSS ao configurar elevation no *.config.mjs de um tema.

Arquivo a criar: references/aplica-tokens-theme-engine/docs/context/DEPTH_ELEVATION_GUIDE.md


4. Sistema de Cores — Taxonomia Conceitual

V1 — Categorias (PT-BR)

A V1 organizava cores em 4 grandes grupos:

Grupo V1Subgrupos V1Correspondente V2
Cores de Marca (Brand)Cor principal da marcabrand.color.*
Cores de Ambiente (Environment/Ambient)Neutras, Contraste, Escala de Cinzabrand.color.neutrals.*, brand.color.grayscale.*
Cores de Interação (Interaction)Function (Primary, Secondary, Link), Feedback (Info, Success, Warning, Danger)semantic.color.interface.function.*, semantic.color.feedback.*
Cores de Texto (Text)Base (Positive/Negative), Feedbacksemantic.color.text.*

Decomposição de Interação V1 (5 estados):

Estado V1Semântica V1Estado V2
DarkestTexto dentro/fora, alguns fundostxtOn.*
ActionMouse over — elemento clicávelhover
DefaultEstado padrãonormal
ActiveClique / tappressed (V2.24: active = pressed)
LightestTexto claro, alguns fundosbackground levels

Regras de acessibilidade V1:

  1. Testar fonte vs. fundo com Darkest
  2. Falhou → testar com cor de Contraste Profundo mais escura (Deep Dark)
  3. Falhou → testar com Lightest
  4. Falhou → testar com Contraste Profundo mais clara (Deep Light)

Status no V2

Implementado e evoluído. O pipeline OKLCh decompõe automaticamente. Os 5 estados da V1 mapeiam para os estados semânticos da V2. A regra de acessibilidade está automatizada (cálculo WCAG automático de txtOn).

O que adaptar

Criar um documento histórico/conceitual em docs/context/color-taxonomy-rationale.md que explique a taxonomia conceitual (Brand vs. Ambient vs. Interaction vs. Text) com a terminologia em PT-BR como contexto histórico, e mostre o mapeamento para a nomenclatura atual.


5. Sistema de Tipografia Semântica

V1 — Agrupadores tipográficos

A V1 definiu agrupadores semânticos de tipografia:

Agrupador V1Descrição
TítulosHierarquia de cabeçalhos
ChamadasDisplay/hero text
Conteúdo em blocoCorpo de texto

Status no V2

Evoluído significativamente. A V2 tem 7 categorias formais: heading, content, display, hierarchy, action, link, code

O que adaptar

Documentar a correspondência entre os agrupadores V1 e as 7 categorias V2 em docs/context/typography-categories-rationale.md.


Resumo: Ações por prioridade

PrioridadeAçãoDestino
AltaCriar OPACITY_SYSTEM.md — único racional sem documentaçãodocs/context/OPACITY_SYSTEM.md
AltaCriar DEPTH_ELEVATION_GUIDE.md — 5 elementos não documentadosdocs/context/DEPTH_ELEVATION_GUIDE.md
MédiaCriar color-taxonomy-rationale.md — pontes históricasdocs/context/color-taxonomy-rationale.md
BaixaAdicionar variáveis PT-BR ao 01-spatial-system.md como referência históricadocs/context/dimension/01-spatial-system.md
BaixaCriar typography-categories-rationale.mddocs/context/typography-categories-rationale.md

Arquivos fonte no knowledge base

Todos os documentos V1 extraídos estão em: knowledge-base/06-history/_extracted/aplica-ds-v1/

Arquivos de referência primários para adaptação:

  • 191-resumo-engenharia-tamanhos-e-espaçamento-(read-for-review).md → Sizing/Spacing
  • 172-resumo-engenharia-opacidade-(to-review).md → Opacity
  • 186-resumo-engenharia-profundidade-(for-review).md + 260-tokens-profundidade-(for-review).md → Depth
  • 050-cores-[review].md + 064-cores-categorias-em-detalhe.md → Color taxonomy
  • 085..089-detalhes-para-agrupadores-de-tipografia-semântica-*.md → Typography categories