Escrevendo CSS que sobrevive ao próximo redesign
Todo projeto de frontend chega no ponto em que ninguém quer mexer no CSS. Não porque está mal escrito — porque ninguém sabe o que quebra.
O sintoma é sempre o mesmo: a mesma decisão está escrita em quinze lugares.
Tokens antes de componentes
Antes de estilizar qualquer coisa, defina o vocabulário:
:root {
--surface: #faf7f0;
--text: #23201c;
--text-muted: rgb(35 32 28 / 62%);
--accent: #9a5b18;
--radius: 8px;
--measure: 68ch;
}Trocar o tema inteiro passa a ser trocar esse bloco. Sem tokens, é um find-and-replace com risco.
Um tema, uma inversão
Dark mode não é um segundo CSS. É a mesma folha com os tokens redefinidos:
html.dark {
--surface: #1a1714;
--text: #ece7de;
--accent: #e2a05a;
}Se você precisou escrever uma regra html.dark .componente { ... }, o
componente está lendo uma cor que deveria ser um token.
color-mix mata a paleta de doze tons
Metade das variáveis de um design system são variações de opacidade da mesma
cor. color-mix gera isso na hora:
.card {
border: 1px solid color-mix(in srgb, var(--text) 12%, transparent);
}
.card:hover {
border-color: color-mix(in srgb, var(--accent) 48%, transparent);
}A borda acompanha o tema sozinha, nos dois modos, sem nenhuma variável nova.
Medida de leitura é uma decisão, não um acidente
.prose { max-width: 68ch; line-height: 1.7; }Duas linhas que fazem mais pela legibilidade do que qualquer escolha de fonte.
ch acompanha o tamanho do texto — se a fonte cresce, a medida cresce junto.
Se você não consegue explicar por que um valor é
1.7e não1.5, ele vai virar1.6no próximo PR e ninguém vai saber dizer se melhorou.
O teste
Pegue o CSS e tente mudar a cor de acento do site inteiro. Se der para fazer em uma linha, ele sobrevive ao próximo redesign. Se precisar abrir cinco arquivos, você já sabe onde começar a refatorar.