Consultando banco de placas...
+Consultando banco de placas...
diff --git a/DESIGN.md b/DESIGN.md new file mode 100644 index 0000000..5ed3edb --- /dev/null +++ b/DESIGN.md @@ -0,0 +1,200 @@ +# Diretrizes de tema — claro e escuro + +Regras para manter os dois temas consistentes. Não tratam da identidade visual +(degradê da marca, arredondamentos, hierarquia): essas decisões já estão tomadas +e não mudam. + +--- + +## 1. Só existem os tons declarados + +A escala do Tailwind anda de 100 em 100: `50, 100, 200, 300 … 900, 950`. +Os meios-tons (`150, 250, 350, 450, 550, 650, 750, 850`) **não existem por +padrão** — uma classe como `text-slate-350` não gera CSS nenhum, e o elemento +herda silenciosamente a cor do pai. Era a causa da maior parte das +inconsistências: o mesmo texto ficava certo num tema e lavado no outro. + +Os oito meios-tons estão declarados em [`app/globals.css`](app/globals.css), +cada um no ponto médio exato entre os dois degraus oficiais vizinhos: + +| tom | hex | entre | +|-----|-----|-------| +| `slate-150` | `#eaeef4` | 100 e 200 | +| `slate-250` | `#d6dee8` | 200 e 300 | +| `slate-350` | `#b0bccc` | 300 e 400 | +| `slate-450` | `#7c8ca2` | 400 e 500 | +| `slate-550` | `#56647a` | 500 e 600 | +| `slate-650` | `#3d4b5f` | 600 e 700 | +| `slate-750` | `#283548` | 700 e 800 | +| `slate-850` | `#162032` | 800 e 900 | + +**Precisa de um tom novo?** Declare no `@theme` antes de usar. Nunca escreva uma +classe com um valor que não está na escala. + +--- + +## 2. A regra da simetria + +No tema escuro o fundo é escuro, então o texto precisa **clarear**. + +- **Texto:** o número do `dark:` é sempre **menor** que o do claro. + `text-slate-800 dark:text-slate-200` ✅ — `text-slate-400 dark:text-slate-500` ❌ +- **Fundo e borda:** o número do `dark:` é sempre **maior**. + `bg-white dark:bg-slate-900` ✅ — `border-slate-200 dark:border-slate-800` ✅ + +Um par invertido não quebra o build e não aparece em revisão de código: só +enfraquece o contraste justamente onde ele deveria aumentar. Havia 71 deles. + +--- + +## 3. Pares canônicos por papel + +Use estes. Os números são a razão de contraste no tema claro (sobre branco) e no +escuro (sobre `slate-900`). O mínimo para texto é **4.5:1**; para ícone ou +elemento gráfico, **3:1**. + +| Papel | Par | Claro | Escuro | +|-------|-----|-------|--------| +| Título / texto principal | `text-slate-850 dark:text-slate-100` | 16.3 | 16.3 | +| Texto principal alternativo | `text-slate-800 dark:text-slate-200` | 14.6 | 14.5 | +| Texto secundário | `text-slate-700 dark:text-slate-300` | 10.4 | 12.0 | +| Corpo de leitura | `text-slate-650 dark:text-slate-350` | 8.9 | 9.3 | +| Rótulo / apoio | `text-slate-500 dark:text-slate-400` | 4.8 | 7.0 | +| Menor ênfase | `text-slate-500 dark:text-slate-450` | 4.8 | 5.2 | + +`text-slate-500 dark:text-slate-400` é o par mais usado do projeto (100 +ocorrências) — é o rótulo em caixa alta, a legenda, o texto de apoio. + +**Não use** `slate-400` como cor de texto no tema claro: sobre branco dá 2.56:1. +Era o erro mais repetido. + +--- + +## 4. Exceção: superfícies escuras nos dois temas + +Alguns blocos são escuros independente do tema — painéis de CTA com degradê, +bloco de código, tooltip do diagrama de pinos. Dentro deles: + +- **Não use variante `dark:`.** O fundo não muda, então o texto também não deve. +- Escreva um valor só: `text-slate-200`, `text-white`, `text-slate-350`. + +Exemplo correto, no bloco de código ([`CodeExample.jsx`](components/CodeExample.jsx)): + +```jsx +
Consultando banco de placas...
+Consultando banco de placas...
Falha ao sincronizar dados
-{error}
+{error}