Motor de cor CSS
Um nome (ou um número) vira a marca inteira — botão, link, borda, fundo, card — e a noite muda só a luz, nunca a cor. <html sw-cor="azul">.
O que é
Com o atributo sw-cor, você escolhe uma cor e o SW Core monta o resto sozinho: a cor dos botões, o texto na cor da marca, as bordas, o brilho, o degradê, o link e até um leve tom da marca no fundo e nos cards. Serve uma cor pronta por nome (sw-cor="azul", "pink", "dourado"…) ou qualquer cor por número, de 0 a 360 (--sw-h), que é o que o painel de um cliente guarda no banco. Cada cliente ganha identidade própria sem escrever CSS nenhum.
É só CSS. O número --sw-h é a posição da cor numa roda (0 = vermelho, 120 = verde, 250 = azul, 330 = rosa…). O motor usa um formato de cor moderno (oklch) que separa a luz da cor: no tema claro ele só troca a luz, então dia e noite têm a mesma cor, só mais clara ou mais escura, e o texto continua legível em qualquer cor. É opcional: sem sw-cor nada muda no seu site. Vale no <html> (site inteiro) ou num bloco (só aquele pedaço). As cores de aviso (sucesso, erro, alerta, info) ficam fixas de propósito: verde é sempre "deu certo".
Quando usar
- Site de cliente com a cor dele:
<html sw-cor="pink">e pronto. - Sistema com vários clientes (SWSIS, AcheMe): o painel salva um número (0–360) e a página aplica no
<html>. - Uma seção de outra cor (área "Infantil" laranja num site azul):
<section sw-cor="laranja">. - Pré-visualizar a cor antes de salvar, no painel: troque o atributo ou o número por JavaScript.
- Marca mais sóbria ou mais viva sem trocar a cor:
sw-cor-intensidade.
Comece aqui
-
1
Coloque o SW Core no
<head>. O motor de cor já vem dentro (versão 2.1.0 ou mais nova).<link rel="stylesheet" href="swcore/swcore.min.css"> -
2
Coloque
sw-corcom o nome da cor no<html>. O site inteiro muda. (O quadro mostra o mesmo atributo num bloco.)Ver serviçosNovo<html lang="pt-BR" sw-cor="azul"> -
3
Quer um tom exato? Ligue o motor com
sw-corsem nome e diga o número da cor no seu CSS.<html lang="pt-BR" sw-cor> <style> html[sw-cor] { --sw-h: 330; } /* 0 a 360 — aqui, um rosa */ </style>
Todas as variações
Cada quadro abaixo é o componente de verdade, rodando. O código embaixo é exatamente o que está no quadro: copie e cole.
1. As 17 cores prontas
Nome da cor no atributo. Cores vizinhas na roda têm intensidade bem diferente para nunca parecerem a mesma. sw-cor sem nome = esmeralda.
<div sw-cor="vermelho" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Vermelho</span>
</div>
<div sw-cor="laranja" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Laranja</span>
</div>
<div sw-cor="ambar" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Âmbar</span>
</div>
<div sw-cor="bronze" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Bronze</span>
</div>
<div sw-cor="dourado" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Dourado</span>
</div>
<div sw-cor="lima" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Lima</span>
</div>
<div sw-cor="esmeralda" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Esmeralda (padrão)</span>
</div>
<div sw-cor="petroleo" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Petróleo</span>
</div>
<div sw-cor="ciano" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Ciano</span>
</div>
<div sw-cor="azul" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Azul</span>
</div>
<div sw-cor="marinho" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Marinho</span>
</div>
<div sw-cor="lavanda" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Lavanda</span>
</div>
<div sw-cor="roxo" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Roxo</span>
</div>
<div sw-cor="magenta" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Magenta</span>
</div>
<div sw-cor="nude" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Nude</span>
</div>
<div sw-cor="pink" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Pink</span>
</div>
<div sw-cor="grafite" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Grafite</span>
</div>
2. Qualquer cor por número (--sw-h)
Arraste: o número de 0 a 360 é a cor. É exatamente isso que um painel de cliente salva no banco.
<div sw-cor="azul" class="p-g r-m flx f-cl gap-m">
<input type="range" sw-rng min="0" max="360" value="250" aria-label="Matiz da cor" oninput="var b=this.closest('[sw-cor]');b.style.setProperty('--sw-h',this.value);b.style.setProperty('--_pct',(this.value/3.6)+'%');this.nextElementSibling.textContent='--sw-h: '+this.value">
<span class="t-pri sw-f4">--sw-h: 250</span>
<div class="flx gap-m alc f-wr">
<button sw-btn="pri">Agendar</button>
<button sw-btn="pri out">Ver fotos</button>
<a href="#">Link</a>
<span sw-badge="pri">Novo</span>
</div>
</div>
3. Quanto a marca tinge o fundo (sw-cor-fundo)
Controla o "tom da marca" no fundo, nos cards, nas bordas e no texto suave. leve é o padrão.
<div sw-cor="azul" sw-cor-fundo="neutro" class="p-m r-m flx f-cl gap-p w-fl">
<strong class="t-txt">Neutro</strong>
<div class="bg-sur bd p-p r-p t-p">Revisão completa · 2h</div>
<button sw-btn="pri">Orçamento</button>
</div>
<div sw-cor="azul" sw-cor-fundo="leve" class="p-m r-m flx f-cl gap-p w-fl">
<strong class="t-txt">Leve</strong>
<div class="bg-sur bd p-p r-p t-p">Revisão completa · 2h</div>
<button sw-btn="pri">Orçamento</button>
</div>
<div sw-cor="azul" sw-cor-fundo="medio" class="p-m r-m flx f-cl gap-p w-fl">
<strong class="t-txt">Médio</strong>
<div class="bg-sur bd p-p r-p t-p">Revisão completa · 2h</div>
<button sw-btn="pri">Orçamento</button>
</div>
<div sw-cor="azul" sw-cor-fundo="forte" class="p-m r-m flx f-cl gap-p w-fl">
<strong class="t-txt">Forte</strong>
<div class="bg-sur bd p-p r-p t-p">Revisão completa · 2h</div>
<button sw-btn="pri">Orçamento</button>
</div>
4. Quão viva é a cor (sw-cor-intensidade)
A mesma cor, mais discreta ou mais forte. Vale por cima da intensidade da cor pronta.
<div sw-cor="laranja" sw-cor-intensidade="sobrio" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Sóbrio</span>
</div>
<div sw-cor="laranja" sw-cor-intensidade="normal" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Normal</span>
</div>
<div sw-cor="laranja" sw-cor-intensidade="vivo" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Vivo</span>
</div>
5. Dia e noite com a mesma cor
O tema troca só a luz. Num bloco, sw-theme junto de sw-cor força um tema só ali (útil para faixa clara numa página escura).
<div sw-cor="pink" sw-theme="dark" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Noite</span>
</div>
<div sw-cor="pink" sw-theme="light" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Dia</span>
</div>
<div sw-cor="petroleo" sw-theme="dark" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Noite</span>
</div>
<div sw-cor="petroleo" sw-theme="light" class="p-m r-m flx f-cl gap-p alc w-fl">
<button sw-btn="pri">Agendar</button>
<span class="t-pri t-p">Dia</span>
</div>
6. Tudo que segue a cor
Um bloco com vários componentes: todos mudam com o sw-cor, sem nenhuma classe a mais.
Fundo, card, borda, texto e link tingidos pela marca.
<section sw-cor="roxo">
<strong class="t-pri t-h4">Studio de Pilates</strong>
<p>Fundo, card, borda, texto e <a href="/sobre">link</a> tingidos pela marca.</p>
<button sw-btn="pri">Aula experimental</button>
<button sw-btn="pri ghost">Horários</button>
<span sw-badge="pri">Vagas abertas</span>
<span class="bg-pri-soft t-pri">Tom suave</span>
<span class="bd-2 bd-pri">Borda</span>
<div class="bg-sur bd">Card dentro do bloco</div>
</section>
Tabela de opções
| Palavra | O que faz | Exemplo |
|---|---|---|
| Ligar o motor | ||
sw-cor | Liga o motor. Sem valor = esmeralda. No <html> muda o site todo; num bloco, só ele (e o bloco ganha fundo e cor de texto). | <html sw-cor> |
sw-cor="nome" | Cor pronta: vermelho · laranja · ambar · bronze · dourado · lima · esmeralda · petroleo · ciano · azul · marinho · lavanda · roxo · magenta · nude · pink · grafite. | <html sw-cor="pink"> |
| Ajuste por nome | ||
sw-cor-fundo="neutro" | Fundo, cards e bordas sem tom da marca (cinza). | |
sw-cor-fundo="leve" | Tom bem leve — padrão. | |
sw-cor-fundo="medio" | Tom médio. | |
sw-cor-fundo="forte" | Fundo bem tingido. | <html sw-cor="azul" sw-cor-fundo="forte"> |
sw-cor-intensidade="sobrio" | Cor discreta. | |
sw-cor-intensidade="normal" | Cor média. | |
sw-cor-intensidade="vivo" | Cor forte. | <html sw-cor="laranja" sw-cor-intensidade="vivo"> |
| Ajuste por número (no seu CSS) | ||
--sw-h | A cor: 0 a 360. Ex.: 0 vermelho · 60 laranja · 125 lima · 162 esmeralda · 210 ciano · 250 azul · 310 roxo · 330 magenta. | html[sw-cor] { --sw-h: 330; } |
--sw-c | Intensidade: de .025 (quase cinza) a .23 (bem viva). Padrão .17. | html[sw-cor] { --sw-c: .12; } |
--sw-tint | Tom da marca no fundo: 0 (cinza) a .06 (forte). Padrão .016. | html[sw-cor] { --sw-tint: .035; } |
| Tema | ||
sw-theme="light" | "dark" (no bloco com sw-cor) | Força o tema só naquele bloco. | <section sw-cor="pink" sw-theme="light"> |
| O que ele gera (variáveis de sempre) | ||
--sw-pri · --sw-pri-txt · --sw-pri-glow · --sw-pri-bd · --sw-grad-pri · --sw-sha-pri | Cor da marca, texto, brilho, contorno, degradê e sombra colorida. | |
--sw-bg · --sw-bg- · --sw-sur · --sw-sur-hover · --sw-bor | Fundo, fundo +1, card, card em foco, borda — com tom da marca. | |
--sw-txt · --sw-txt-mut · --sw-txt-inv | Textos. | |
--sw-link … --sw-hover_ | Cores de link e de mouse em cima. | |
--sw-neu-1 … --sw-neu-12 | Escala de cinzas tingida pela marca. | |
Receitas prontas — usos reais
Situações que aparecem em quase todo site. Copie a que servir.
<!-- o painel salvou um número de 0 a 360 em $cliente['cor'] -->
<html lang="pt-BR" sw-cor>
<head>
<link rel="stylesheet" href="swcore/swcore.min.css">
<style>html[sw-cor] { --sw-h: <?= (int) $cliente['cor'] ?>; }</style>
</head>
Buffet, decoração e monitores. Tudo num lugar só.
<section sw-cor="laranja">
<span class="t-pp t-upp ls-ww t-pri fw6">Área kids</span>
<strong class="t-txt t-gg">Festa infantil completa</strong>
<p>Buffet, decoração e monitores. Tudo num lugar só.</p>
<button sw-btn="pri">Pedir orçamento</button>
</section>
<!-- cada botão fica dentro de um <span sw-cor> para aparecer na própria cor -->
<span sw-cor="vermelho" class="p-pp r-p"><button sw-btn="pri p" data-cor="vermelho">Vermelho</button></span>
<span sw-cor="dourado" class="p-pp r-p"><button sw-btn="pri p" data-cor="dourado">Dourado</button></span>
<span sw-cor="azul" class="p-pp r-p"><button sw-btn="pri p" data-cor="azul">Azul</button></span>
<!-- … -->
<div id="previa" sw-cor="esmeralda" class="p-m r-m bd">
Prévia do site do cliente <button sw-btn="pri">Agendar</button>
</div>
<script>
const previa = document.getElementById('previa');
document.querySelectorAll('[data-cor]').forEach((b) => {
b.addEventListener('click', () => previa.setAttribute('sw-cor', b.dataset.cor));
});
// com número livre: previa.style.setProperty('--sw-h', 330);
</script>
Entrega no mesmo dia.
Salões perto de você.
Banho e tosa.
<div class="l l-3 gap-m">
<div sw-cor="lima" class="p-m r-m bd"><strong class="t-pri">Hortifruti</strong><p>Entrega no mesmo dia.</p></div>
<div sw-cor="magenta" class="p-m r-m bd"><strong class="t-pri">Beleza</strong><p>Salões perto de você.</p></div>
<div sw-cor="ciano" class="p-m r-m bd"><strong class="t-pri">Pets</strong><p>Banho e tosa.</p></div>
</div>
API (JavaScript)
el.setAttribute("sw-cor", "azul")el.style.setProperty("--sw-h", 330)SW.Day.set("light" | "dark") / SW.Day.toggle()Precisa de quê
swcore.min.css2.1.0 ou mais novo.swcore.min.js— só para o botão de trocar tema (SW.Day) e para os exemplos com JavaScript.
Cuidados — erros comuns
- Sem
sw-coro--sw-hnão faz nada: o número só vale com o motor ligado (<html sw-cor>). - Escreva o nome sem acento:
ambar,petroleo,medio,sobrio. Com acento o SW Core não reconhece. - Para dar a cor pelo seu CSS, use
html[sw-cor] { --sw-h: … }(ou.sua-classe[sw-cor]num bloco). Só:root { --sw-h: … }perde para o padrão do motor. - Um bloco com
sw-corganha fundo próprio (o fundo da marca). Se não quiser o fundo, aplique o motor no<html>em vez do bloco. - Colocar
sw-cordireto num botão dá ao botão também o fundo e a cor de letra de "bloco". Para mostrar um botão numa cor, envolva-o:<span sw-cor="azul"><button sw-btn="pri">…</button></span>. - Não misture com
--sw-pritrocado na mão: com o motor ligado, quem manda na cor principal é o--sw-h.
O que ele não faz
- A cor secundária (
--sw-sec) e as de aviso (sucesso, erro, alerta, info) não seguem a cor — de propósito. - Num bloco interno, mudam cor, fundo, card, borda, texto e link; os grupos tonais antigos (
sw-bg--,sw-bl*,Tsw-color*,sw-border*) continuam seguindo a cor do<html>.

