Design canon
Aplica uma disciplina de design (Vignelli, suíça ou nenhuma) aos tokens de qualquer design system e exporta em CSS, SCSS, Tailwind v4, JSON, W3C Design Tokens e Style Dictionary. Skill do Claude, determinística.
npx -y skills add 1marcelserrano/design-canon --skill design-canonAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Aplica uma DISCIPLINA de design (preset) aos tokens de QUALQUER design system e emite em CSS, SCSS, Tailwind v4 @theme, JSON, W3C Design Tokens e Style Dictionary. Modelo — disciplina ⊥ marca - o preset traz o método (razão de escala de tipo, grids, pesos de régua, semântica de cor, fallback de fonte); a marca traz os valores (paleta, fontes, base) via config JSON ou flags. Presets - vignelli (Canon), swiss (estilo internacional), blank (passthrough). Determinístico, zero rede. MANDATORY TRIGGERS — design tokens, tokens de design, design system, gerar/exportar tokens, Tailwind theme, @theme, W3C design tokens, style dictionary, escala de tipo, type scale, set de grid, pesos de régua, paleta como identificador, handoff dev, normalizar design system, método Vignelli, estilo suíço, swiss style, converter paleta em tokens. Use SEMPRE que o pedido for gerar, normalizar, exportar ou disciplinar tokens de design a partir de paleta/tipografia/grid — mesmo sem citar a skill.
SKILL.md
8.1 KB, as published. Nobody here has run it
Design Canon — engine de disciplina de design
Gera tokens de design determinísticos aplicando uma disciplina (método) aos valores de qualquer design system. Emite seis formatos sem dependência externa.
O MODELO: disciplina ⊥ marca
Duas coisas ortogonais. Não as confunda — é o eixo inteiro da skill.
| O quê | De onde vem | |
|---|---|---|
| Disciplina (preset) | O método: razão da escala de tipo, set de grids canônicos, pesos de régua, regras de alinhamento, semântica de cor (identificador vs. livre), estratégia de fallback de fonte. A régua. | --preset (embutido no script) ou um config custom |
| Marca (input) | Os valores: paleta, fontes, tamanho base. O conteúdo. | --config DS.json e/ou flags (--primary, --base, --face) |
Você renderiza os valores da marca através de uma disciplina. O mesmo DS da MSCS pode sair pela disciplina Vignelli (cor = identificador, dois tamanhos, régua dura) ou pela blank (sem opiniões, só normaliza). A disciplina nunca troca os valores da marca — ela impõe a estrutura e avisa quando a marca viola o método.
QUANDO USAR
- Tokens de design para handoff dev a partir de uma paleta/tipografia (qualquer marca)
- Normalizar um DS existente em tokens multi-formato (CSS / SCSS / Tailwind / JSON / W3C / Style Dictionary)
- Aplicar rigor de método (Vignelli, suíço) a um DS de cliente ou ao DS da casa
- Sistema de identidade: grid + escala de tipo + cor como identificador
- Spec de sinalização / wayfinding (presets que definem signage, ex.: vignelli)
Quando NÃO usar: redigir copy de marca (isso é mscreative-voice/supercopy); desenhar layout final no navegador (isso é trabalho de front-end, não de tokens). Esta skill produz os tokens e o método, não a peça.
GERADOR
Script único, autocontido, em scripts/design_canon.py. Os presets vivem embutidos nele (fonte de verdade), então roda mesmo sem nenhuma referência carregada.
python3 scripts/design_canon.py --list-presets # disciplinas disponíveis
python3 scripts/design_canon.py --config DS.json --format tailwind # SEU DS no @theme do Tailwind v4
python3 scripts/design_canon.py --config DS.json --preset vignelli --format css
python3 scripts/design_canon.py --preset vignelli --primary "#0039A6" # troca só a cor identificadora
python3 scripts/design_canon.py --config DS.json --format w3c # W3C Design Tokens
python3 scripts/design_canon.py --config DS.json --format style-dictionary
python3 scripts/design_canon.py --config DS.json --format scss
python3 scripts/design_canon.py --preset vignelli --grid 4x8 # mapa coluna × módulo
python3 scripts/design_canon.py --preset vignelli --signage # tabela de painéis
Flags batem sobre o config (precedência: flag > config > default do preset). Avisos de disciplina (paleta diluindo a cor-identificador, limite de tamanhos de tipo) saem em stderr — não poluem o token output.
Config da marca (JSON)
{
"name": "MSCS DS V3.0",
"base_px": 16,
"prefix": "ms",
"palette": { "primary": "#B4C636", "bg": "#0A0A0E", "fg": "#B2A898" },
"fonts": { "serif": "Fraunces", "sans": "Inter Tight", "mono": "IBM Plex Mono" }
}
Só palette é o mínimo útil. O resto cai no default do preset. Schema completo: references/config_schema.md. Exemplo pronto: assets/examples/mscs_ds_v3.json.
Formatos de saída
css (:root custom properties) · scss (maps) · tailwind (bloco @theme v4, namespaces --color-*/--font-*/--text-*) · json (payload legível) · w3c (Design Tokens spec, $value/$type) · style-dictionary (nós aninhados com value).
PRESETS (disciplinas)
| Preset | Disciplina | Quando |
|---|---|---|
blank | Passthrough sem opiniões. Escala modular ~1.25, grids de coluna comuns, sem régua, sem semântica de cor. | Só normalizar um DS existente em tokens. Default. |
vignelli | O Canon: cor = identificador (uma por linha), dois tamanhos de tipo (heading ≈ 2× body), cinco grids, réguas 2/1/0.5pt, flush-left, signage Grandi Stazioni. | Rigor editorial/identidade. Detalhe em references/vignelli.md. |
swiss | Estilo tipográfico internacional: grade matemática, escala modular, máx. três tamanhos, flush-left. | Objetividade, sistemas densos de informação. |
Documentação dos presets e como adicionar um: references/presets.md.
REGRAS DURAS (não violar)
Invariantes do método. Quebrar descaracteriza a engine.
- Disciplina ⊥ marca. O preset impõe estrutura; a marca fornece valores. Nunca deixe um valor de marca virar regra de método, nem um default de disciplina sobrescrever um valor que a marca declarou.
- Fallback de render é obrigatório. Toda família de fonte recebe um fallback de métrica compatível instalado (
'Liberation Sans'antes de Arial e do genérico) — senão o headless cai para Noto/Calibri e quebra a grotesca. Confirme comfc-matchantes de publicar. - Keyword genérica de fonte vai por último (
sans-serif,monospace…); famílias com espaço são aspeadas. - Avisos de disciplina vão pra
stderr, nunca misturados no token output. - Gerador determinístico. Zero rede, zero credencial. Presets embutidos no script.
- Sob disciplina
identifier(vignelli/swiss): cor é identificador, uma por linha/sistema. O engine avisa se a paleta tem acentos demais — respeite o aviso ou troque de preset. - Sob
vignelli: dois tamanhos de tipo vivos por página (heading ≈ 2× body), flush-left, o tipo pendura na régua. Os demais degraus existem só para capas/specs.
ARMADILHA — Helvetica/house face em headless
A house face de uma grotesca não existe na maioria dos ambientes headless. Ao rasterizar (cairosvg, Chromium headless) ou alimentar arte para um modelo de imagem, o render cai para Noto Sans (lê como Calibri) e quebra a grotesca. O engine já anexa 'Liberation Sans' antes de Arial em toda família sans por isso. Sempre confira um render com fc-match <fonte> no ambiente antes de publicar.
FALLBACK_INLINE
Usar quando
scripts/ereferences/não carregarem.
Tokens mínimos (CSS, disciplina blank, base 16px)
:root{
--ds-color-primary:#2D2D2D; --ds-color-bg:#FFFFFF; --ds-color-fg:#111111;
--ds-font-sans:'Inter','Liberation Sans',Arial,sans-serif;
--ds-text-base:16px; --ds-text-lg:20px; --ds-text-3xl:39px; /* escala ~1.25 */
}
Sob Vignelli: troque para dois tamanhos (--v-text-body:16px; --v-text-heading:32px), adicione réguas (--v-rule-major:2pt; --v-rule-minor:.5pt), paleta-identificador, flush-left.
QA mínimo
- Disciplina e marca não se contaminaram (preset = estrutura; config = valores)
- Toda família sans tem
'Liberation Sans'antes de Arial / do genérico - Keyword genérica (
sans-serif/monospace) está por último - Formato pedido bate (Tailwind =
@themecom--color-*/--text-*; W3C =$value/$type) - Avisos de disciplina foram pra stderr, não pro arquivo de tokens
- Sob
vignelli/swiss: paleta não diluiu a cor-identificador
Gives 0 of the 12 instructions most css styling skills give
Counted across 586 of the 596 authors here whose files we hold, read 2026-08-06
- avoid excessive centered layoutsin 55 of 586, across 12 files
- bundle code into single HTML filein 54 of 586, across 14 files
- Respect prefers-reduced-motion user settingsin 52 of 586, across 35 files
- avoid purple gradientsin 51 of 586, across 11 files
- avoid uniform rounded cornersin 51 of 586, across 11 files
- avoid Inter fontin 51 of 586, across 11 files
- edit generated files to develop artifactin 50 of 586, across 10 files
- animate only transform and opacity propertiesin 43 of 586
- Make touch targets at least 44x44 pixelsin 41 of 586, across 15 files
- Ensure minimum color contrast of 4.5:1in 39 of 586, across 10 files
- use tailwind cssin 39 of 586, across 24 files
- Use SVG icons instead of emojisin 38 of 586, across 11 files
Said here and by no other author read
- render brand values through a design discipline preset
- keep the discipline structure separate from the brand values
- put generic font keywords last
- send discipline warnings to stderr
- maintain zero network dependencies
- require render font fallbacks
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once.