Paleta de Cores
Expanda cores base em rampas perceptualmente uniformes e componha-as em uma paleta. Toda a matemática é delegada ao gerador embutido; o julgamento desta skill está na configuração e validação.
Princípios (por que OKLCH)
- Nunca gere rampas em HSL/RGB. A claridade do HSL mente (mesmo valor ≠ mesma percepção de brilho) e o matiz se desvia conforme você cria matizes/sombras. Claridades HSL iguais fazem os amarelos parecerem muito claros e os azuis muito escuros.
- OKLCH é o espaço de trabalho: L (claridade), C (croma), H (matiz) — números iguais parecem iguais, e é CSS nativo.
- O croma deve ser limitado por etapa. Alto croma é fisicamente impossível em etapas muito claras/escuras; o gerador o reduz em vez de deixar o navegador cortar.
- Uma âncora de contraste: texto branco passa WCAG AA a partir de L ≈ 0,55, texto preto a partir de L ≈ 0,60. As etapas intermediárias são posicionadas em torno desses alvos.
Teoria completa e fontes: references/theory.md
Fluxo de trabalho
1. Esclareça o objetivo
Confirme com o usuário (pule o que já é conhecido): cor(es) base ou cores da marca; número de etapas (11 é padrão, 9 enxuto, 12 se houver necessidade de funções no estilo Radix); quais matizes a paleta precisa (marca + semânticos: sucesso/aviso/perigo/info + neutro); modo escuro necessário?
2. Gere as rampas
cd "{skill_dir}/scripts" && python3 generate_ramp.py "#3b82f6" --steps 11 --chroma 90
# paleta multimatiz: uma invocação, nomes separados por vírgula
python3 generate_ramp.py "#3b82f6" "#e11d48" "#22c55e" --names blue,red,green --format css
Flags principais: --chroma N (porcentagem do croma máximo por etapa; 80-95 típico, mais alto = mais vibrante), --hue-drift D (virada deliberada de matiz durante a transição claro→escuro, por ex., amarelos escuros em direção ao laranja; somente mediante solicitação), --cvd (hexes simulados para deuteranopia), --format table|css|json.
Regra multimatiz: gere todos os matizes em UMA invocação para que compartilhem L e porcentagem de croma idênticas em cada etapa — isso é o que faz blue-500 e red-500 parecerem irmãos. Nunca regere um matiz com limites diferentes.
3. Valide
Leia a saída da tabela e verifique:
- Claridade monotônica, Delta E entre etapas adjacentes aproximadamente constante (coluna de uniformidade)
- Pares de etapa fg/bg pretendidos passam WCAG AA (texto branco precisa de uma etapa com
vs-white ≥ 4,5; texto pretovs-black ≥ 4,5) - Aviso de Delta E entre matizes ausente (≥ 0,05 Oklab entre matizes da mesma etapa)
- Com
--cvd: as cores simuladas para deuteranopia ainda são distinguíveis nas etapas usadas para UI com significado
Se o usuário forneceu uma paleta existente para auditar, converta cada etapa para OKLCH (--format json em uma reconstrução ou converta manualmente) e verifique os mesmos quatro pontos.
4. Componha a paleta
- Atribua funções às etapas (convenção Radix): 1-2 fundos de aplicativo · 3-5 bg de componente (normal/hover/active) · 6-8 bordas/foco · 9-10 bg sólido e hover (etapa 9 = mais pura, maior croma) · 11-12 texto (baixo/alto contraste).
- Crie aliases semânticos:
--danger-500, não--red-500, quando uma escala serve a um significado. Uma escala pode dar suporte a vários aliases. - Modo escuro = remapeie, não regere: mantenha a escala, inverta as atribuições semânticas (a etapa mais clara se torna a superfície mais escura, as cores do texto trocam de extremidade). A uniformidade perceptual em OKLCH torna o mapeamento inverso igualmente legível.
5. Entregue
Escreva a saída --format css em um arquivo (propriedades personalizadas com fallbacks hex dentro de @supports), além do relatório de validação no chat. Se um sistema de design for o destino, sugira a nomeação de tokens (escala primitiva + camada de alias semântico).
Correções comuns
| Sintoma | Correção |
|---|---|
| As etapas 50/100 parecem desbotadas | Esperado — o croma é fisicamente limitado perto do branco; não "corrija" limitando |
| Os matizes parecem desiguais em vivacidade | Mesma invocação para todos os matizes; tente --chroma 80 |
| Uma etapa 500 falha no contraste para texto branco | Aceite para texto grande/gráficos, ou abaixe a claridade média (--hue-drift não ajudará; mova a âncora) |
| Amarelos escuros parecem oliva | --hue-drift 10-15 deliberado em direção ao laranja, ou aceite como gosto da marca |