pswex-design-system 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE.md ADDED
@@ -0,0 +1,16 @@
1
+ # Licença
2
+
3
+ PSWEX Tecnologia, CNPJ 28.477.119/0001-79.
4
+
5
+ **Os tokens, o CSS, os componentes e a documentação** deste pacote podem ser usados
6
+ livremente por quem constrói para a PSWEX ou para a UPro: agência, fornecedor,
7
+ freelancer ou agente de IA contratado para isso.
8
+
9
+ **A marca, o nome, os ícones e a arte de fundo** continuam sendo propriedade da PSWEX
10
+ Tecnologia e não podem ser usados para identificar outra empresa nem em peça que não
11
+ seja da PSWEX ou da UPro.
12
+
13
+ **A fonte Gilroy não acompanha este pacote.** O CSS declara a família, o arquivo da
14
+ fonte é licenciado e precisa ser obtido de quem licencia.
15
+
16
+ Atualizado em 22/09/2026.
package/README.md ADDED
@@ -0,0 +1,67 @@
1
+ # Design system da PSWEX, como skill
2
+
3
+ Uma pasta só que serve Claude, Codex e ChatGPT. Versão 7.0.0, gerada
4
+ do contrato em 22/09/2026.
5
+
6
+ ## O que tem dentro
7
+
8
+ ```
9
+ SKILL.md as regras que valem sempre, leia primeiro
10
+ references/
11
+ cor.md as quatro famílias, 47 tokens, escala tipográfica
12
+ componentes.md os 36 componentes com props e exemplo
13
+ icones.md os 72 ícones e para que serve cada um
14
+ fundos.md a arte de fundo, a regra de escala e os 6 temas
15
+ classes.md o vocabulário de classe do CSS
16
+ voz.md como escrever o texto que vai dentro da peça
17
+ assets/
18
+ pswex.tokens.json padrão DTCG do W3C
19
+ figma-variables.json coleções, modos, escopos e code syntax
20
+ tokens.css as mesmas variáveis em CSS
21
+ manifesto.json os componentes em JSON, para a máquina ler
22
+ catalogo-icones.json
23
+ styles.css o CSS de produção inteiro
24
+ PROMPT-FIGMA.md pedido pronto para o agente do Figma
25
+ ```
26
+
27
+ ## Instalar
28
+
29
+ ```
30
+ npx pswex-design-system
31
+ ```
32
+
33
+ Detecta Claude Code, Codex e Copilot CLI nesta máquina e instala em cada um.
34
+ `--local` instala dentro do projeto em vez do seu diretório de usuário,
35
+ `--onde` só mostra onde instalaria sem escrever nada.
36
+
37
+ ## Instalar à mão
38
+
39
+ **Claude Code e claude.ai**
40
+
41
+ ```
42
+ ~/.claude/skills/pswex-design-system
43
+ ```
44
+
45
+ **Codex**
46
+
47
+ ```
48
+ ~/.codex/skills/pswex-design-system
49
+ ```
50
+
51
+ Nos dois, um link simbólico para esta pasta faz a skill acompanhar o `git pull`.
52
+
53
+ **ChatGPT**
54
+
55
+ Não existe formato de skill. Num GPT personalizado, cole o conteúdo de `SKILL.md`
56
+ em Instructions e suba `references/` e `assets/` em Knowledge. Num projeto, o mesmo:
57
+ `SKILL.md` nas instruções do projeto e o resto como arquivo.
58
+
59
+ ## Regerar
60
+
61
+ A skill é derivada do contrato, nunca editada à mão. De dentro de `design-system/`:
62
+
63
+ ```
64
+ python3 gerar-contrato.py && python3 gerar-docs-contrato.py && python3 gerar-skill.py
65
+ ```
66
+
67
+ Rode depois de qualquer mudança em `site/assets/pswex.css` ou em `design-system/src/`.
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Instala a skill do design system da PSWEX nos agentes desta máquina.
4
+ *
5
+ * npx pswex-design-system instala em ~/.claude, ~/.codex, ~/.copilot
6
+ * npx pswex-design-system --local instala em ./.claude/skills, no projeto
7
+ * npx pswex-design-system --onde só mostra onde instalaria, não escreve
8
+ *
9
+ * Sem dependência: só o que vem no Node.
10
+ */
11
+ import { cp, mkdir, readdir, rm, stat } from 'node:fs/promises';
12
+ import { existsSync } from 'node:fs';
13
+ import { homedir } from 'node:os';
14
+ import { join, dirname } from 'node:path';
15
+ import { fileURLToPath } from 'node:url';
16
+
17
+ const NOME = 'pswex-design-system';
18
+ const ORIGEM = join(dirname(fileURLToPath(import.meta.url)), '..', 'skill');
19
+ const args = new Set(process.argv.slice(2));
20
+ const local = args.has('--local');
21
+ const seco = args.has('--onde') || args.has('--dry-run');
22
+
23
+ const AGENTES = [
24
+ ['Claude Code', '.claude'],
25
+ ['Codex', '.codex'],
26
+ ['Copilot CLI', '.copilot'],
27
+ ];
28
+
29
+ const base = local ? process.cwd() : homedir();
30
+ const alvos = AGENTES
31
+ .map(([rotulo, dir]) => ({ rotulo, dir, destino: join(base, dir, 'skills', NOME) }))
32
+ .filter(a => local || existsSync(join(homedir(), a.dir)));
33
+
34
+ console.log(`\n Design system da PSWEX, skill ${process.env.npm_package_version || ''}`.trimEnd());
35
+ console.log(` origem: ${ORIGEM}\n`);
36
+
37
+ if (!alvos.length) {
38
+ console.log(' Nenhum agente encontrado nesta máquina.');
39
+ console.log(' Procurei por ~/.claude, ~/.codex e ~/.copilot.\n');
40
+ console.log(' Para instalar dentro de um projeto: npx pswex-design-system --local\n');
41
+ process.exit(0);
42
+ }
43
+
44
+ let contados = 0;
45
+ for (const { rotulo, destino } of alvos) {
46
+ if (seco) { console.log(` [mostrar] ${rotulo.padEnd(12)} ${destino}`); continue; }
47
+ try {
48
+ await rm(destino, { recursive: true, force: true });
49
+ await mkdir(dirname(destino), { recursive: true });
50
+ await cp(ORIGEM, destino, { recursive: true });
51
+ const n = (await readdir(destino, { recursive: true })).length;
52
+ console.log(` ok ${rotulo.padEnd(12)} ${destino} (${n} itens)`);
53
+ contados++;
54
+ } catch (e) {
55
+ console.log(` falhou ${rotulo.padEnd(12)} ${e.message}`);
56
+ }
57
+ }
58
+
59
+ if (!seco) {
60
+ console.log(`\n ${contados} de ${alvos.length} instalados.`);
61
+ console.log(' Abra o agente e peça alguma coisa da PSWEX: ele carrega a skill sozinho.\n');
62
+ }
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "pswex-design-system",
3
+ "version": "7.0.0",
4
+ "description": "Design system da PSWEX Tecnologia como skill de agente. Instala em Claude Code, Codex e Copilot CLI com um comando.",
5
+ "keywords": [
6
+ "design-system",
7
+ "design-tokens",
8
+ "skill",
9
+ "agent-skills",
10
+ "claude-code",
11
+ "codex",
12
+ "pswex",
13
+ "dtcg"
14
+ ],
15
+ "type": "module",
16
+ "bin": {
17
+ "pswex-design-system": "bin/instalar.mjs"
18
+ },
19
+ "files": [
20
+ "bin",
21
+ "skill",
22
+ "README.md",
23
+ "LICENSE.md"
24
+ ],
25
+ "engines": {
26
+ "node": ">=18"
27
+ },
28
+ "license": "SEE LICENSE IN LICENSE.md",
29
+ "author": "PSWEX Tecnologia",
30
+ "homepage": "https://pswex.com.br"
31
+ }
@@ -0,0 +1,57 @@
1
+ # Design system da PSWEX, como skill
2
+
3
+ Uma pasta só que serve Claude, Codex e ChatGPT. Versão 7.0.0, gerada
4
+ do contrato em 22/09/2026.
5
+
6
+ ## O que tem dentro
7
+
8
+ ```
9
+ SKILL.md as regras que valem sempre, leia primeiro
10
+ references/
11
+ cor.md as quatro famílias, 47 tokens, escala tipográfica
12
+ componentes.md os 36 componentes com props e exemplo
13
+ icones.md os 72 ícones e para que serve cada um
14
+ fundos.md a arte de fundo, a regra de escala e os 6 temas
15
+ classes.md o vocabulário de classe do CSS
16
+ voz.md como escrever o texto que vai dentro da peça
17
+ assets/
18
+ pswex.tokens.json padrão DTCG do W3C
19
+ figma-variables.json coleções, modos, escopos e code syntax
20
+ tokens.css as mesmas variáveis em CSS
21
+ manifesto.json os componentes em JSON, para a máquina ler
22
+ catalogo-icones.json
23
+ styles.css o CSS de produção inteiro
24
+ PROMPT-FIGMA.md pedido pronto para o agente do Figma
25
+ ```
26
+
27
+ ## Instalar
28
+
29
+ **Claude Code e claude.ai**
30
+
31
+ ```
32
+ ~/.claude/skills/pswex-design-system
33
+ ```
34
+
35
+ **Codex**
36
+
37
+ ```
38
+ ~/.codex/skills/pswex-design-system
39
+ ```
40
+
41
+ Nos dois, um link simbólico para esta pasta faz a skill acompanhar o `git pull`.
42
+
43
+ **ChatGPT**
44
+
45
+ Não existe formato de skill. Num GPT personalizado, cole o conteúdo de `SKILL.md`
46
+ em Instructions e suba `references/` e `assets/` em Knowledge. Num projeto, o mesmo:
47
+ `SKILL.md` nas instruções do projeto e o resto como arquivo.
48
+
49
+ ## Regerar
50
+
51
+ A skill é derivada do contrato, nunca editada à mão. De dentro de `design-system/`:
52
+
53
+ ```
54
+ python3 gerar-contrato.py && python3 gerar-docs-contrato.py && python3 gerar-skill.py
55
+ ```
56
+
57
+ Rode depois de qualquer mudança em `site/assets/pswex.css` ou em `design-system/src/`.
package/skill/SKILL.md ADDED
@@ -0,0 +1,117 @@
1
+ ---
2
+ name: pswex-design-system
3
+ description: >-
4
+ Design system da PSWEX Tecnologia. Use sempre que for criar, alterar ou revisar
5
+ qualquer peça da PSWEX ou da UPro: página, tela, componente, e-mail, post, anúncio,
6
+ apresentação, proposta ou arte de rede social. Traz 47 tokens de cor e medida,
7
+ 36 componentes React, 72 ícones e 6 temas de fundo, mais as regras de
8
+ cor e de escrita da casa. Dispara em pswex, upro, design system, token, paleta,
9
+ identidade visual, componente, ícone, fundo, gradiente.
10
+ license: proprietário, uso interno PSWEX Tecnologia
11
+ ---
12
+
13
+ # Design system da PSWEX
14
+
15
+ Versão 7.0.0, extraído do CSS que está em produção em 22/09/2026.
16
+ Se este documento e o CSS discordarem, o CSS ganha.
17
+
18
+ ## O que carregar, e quando
19
+
20
+ Este arquivo tem as regras que valem sempre. O detalhe está em `references/`,
21
+ carregue só o que a tarefa pedir:
22
+
23
+ | Precisa de | Leia |
24
+ |---|---|
25
+ | cor, tema claro e escuro | `references/cor.md` |
26
+ | montar tela com componente pronto | `references/componentes.md` |
27
+ | escolher ícone | `references/icones.md` |
28
+ | fundo, gradiente, arte de rede social | `references/fundos.md` |
29
+ | classe CSS sem componente React | `references/classes.md` |
30
+ | escrever o texto da peça | `references/voz.md` |
31
+
32
+ Os arquivos que a máquina lê estão em `assets/`: `pswex.tokens.json` no padrão DTCG
33
+ do W3C, `figma-variables.json` para importar no Figma, `manifesto.json` com as props
34
+ de cada componente, `catalogo-icones.json` e o `styles.css` de produção inteiro.
35
+
36
+ ## As quatro famílias de cor, e a regra que não se quebra
37
+
38
+ A divisão não é estética, é funcional.
39
+
40
+ - **Marca**: igual nos dois temas. Navy, vermelho, teal, mint, sky, leaf, lime e as
41
+ variações. Nunca vai direto em texto de corpo.
42
+ - **Tema**: inverte inteira no escuro. Todo fundo de tela e todo texto de tela sai daqui.
43
+ - **Sobre-cor**: texto e borda que ficam em cima de cor de marca. Não inverte, porque
44
+ o fundo também não inverte.
45
+ - **Layout**: medida, raio e sombra.
46
+
47
+ **A regra:** texto sobre cor da família marca usa a família sobre-cor. Texto sobre fundo
48
+ de tela usa a família tema. Cor de marca nunca vai direto em texto.
49
+
50
+ Ignorar isso é o que produz navy escrito em cima de navy, que é invisível. Já aconteceu aqui.
51
+
52
+ Dois casos que custaram caro e não se reabrem:
53
+
54
+ - Botão lime leva `--lime-ink`, que é navy. Branco no lime dá **1,90:1** e reprova.
55
+ Navy no lime dá **7,13:1**. Se alguém pedir branco, o certo é escurecer o fundo para
56
+ `--leaf-800`, que dá 5,85:1, e aí o botão perde força de chamada. Diga isso antes de fazer.
57
+ - Vermelho em cima de navy leva `--red-ondark`. O `--red` puro some no escuro.
58
+
59
+ ## O resto das regras duras
60
+
61
+ 1. **Um `btn--cta` por tela.** O lime é a ação que converte. Dois na mesma tela e nenhum funciona.
62
+ 2. **Ícone nunca leva hex.** Todos são `stroke="currentColor"`, a cor vem do texto ao redor
63
+ e troca sozinha no tema escuro.
64
+ 3. **Nunca hex direto em componente.** Sempre `var(--token)`. Hex quebra o tema escuro.
65
+ 4. **Escreva em classe do sistema, não em CSS novo.** Quase tudo já existe.
66
+ 5. **Gradiente só anda entre cores vizinhas.** Navy para teal, teal para sky, sky para mint,
67
+ e navy para verde passando pelo teal. Navy para vermelho não: a passagem vira roxo sujo,
68
+ então os dois nunca se encostam, tem um trecho escuro separando.
69
+ 6. **Nunca use travessão** em texto de tela. Vírgula, ponto ou dois pontos.
70
+ 7. **Nunca invente número.** Sem "+45%", sem "3x mais vendas". Sem fonte, não escreve.
71
+
72
+ ## Como carregar em código
73
+
74
+ Não existe provider e não existe wrapper de tema. Os componentes emitem as classes do
75
+ CSS de produção.
76
+
77
+ ```html
78
+ <link rel="stylesheet" href="assets/styles.css">
79
+ <script>const { Hero, Btn, Cards, Card, Servicos } = window.PSWEX;</script>
80
+ ```
81
+
82
+ Tema, três estados, nessa ordem de precedência:
83
+
84
+ ```css
85
+ :root /* claro, sempre definido */
86
+ @media(prefers-color-scheme:dark){:root:not([data-theme=light]){...}}
87
+ [data-theme=dark] / [data-theme=light] /* escolha explícita ganha */
88
+ ```
89
+
90
+ Para uma prévia no escuro, carimbe `data-theme="dark"` no elemento e defina
91
+ `color: var(--fg)` nele: `data-theme` troca token, não troca cor herdada.
92
+
93
+ ## Tipografia
94
+
95
+ Gilroy, cinco pesos, pilha `Gilroy, 'Segoe UI', system-ui, sans-serif`.
96
+ Corpo 17px com `line-height:1.62`. Gilroy é licenciada e não está no catálogo do Google,
97
+ nem no do Figma: num arquivo do Figma ela precisa estar instalada na máquina de quem abre.
98
+ A escala completa está em `references/cor.md`.
99
+
100
+ ## Três quebras de layout que escondem componente
101
+
102
+ Errar a largura do quadro esconde metade da peça: `nav` some abaixo de 960px,
103
+ `split` vira uma coluna abaixo de 900px, e os `step` do celular saem da posição
104
+ absoluta e empilham abaixo de 1100px.
105
+
106
+ ## O que não fazer
107
+
108
+ | Não | Porque |
109
+ |---|---|
110
+ | hex direto em componente | quebra o tema escuro e sai do sistema |
111
+ | texto branco no lime | 1,90:1, reprova em qualquer nível |
112
+ | `--red` em cima de navy | some, use `--red-ondark` |
113
+ | dois `btn--cta` na mesma tela | a tela deixa de ter uma ação principal |
114
+ | pintar ícone com hex | ele deixa de acompanhar o tema |
115
+ | escalar um fundo de outra proporção | a fita de luz achata, gere o formato certo |
116
+ | CSS novo para layout | quase tudo já existe no vocabulário de classe acima |
117
+ | travessão em texto de tela | a casa não usa, é vírgula, ponto ou dois pontos |
@@ -0,0 +1,138 @@
1
+ # Prompt para o agente do Figma
2
+
3
+ Copie daqui para baixo e mande para o agente.
4
+
5
+ ---
6
+
7
+ Você vai reorganizar as variáveis de cor de um arquivo do Figma que já existe.
8
+
9
+ **Arquivo:** `qNVr6EBodmZYfsJlgUZNlw`
10
+ https://www.figma.com/design/qNVr6EBodmZYfsJlgUZNlw/
11
+
12
+ **Antes de tocar em qualquer coisa**, carregue as skills `figma-use` e
13
+ `figma-generate-library`, e leia o arquivo para saber o que já está lá. Não crie
14
+ nada antes de ter a lista do que existe. Trabalhe em passos pequenos e me mostre
15
+ o resultado de cada passo, nunca tudo de uma vez.
16
+
17
+ ## O que eu quero
18
+
19
+ Hoje as variáveis estão numa lista rasa, com nomes tipo `cor/navy`. Isso não diz
20
+ para que serve cada cor, e é por isso que já aconteceu de alguém pintar texto navy
21
+ em cima de fundo navy.
22
+
23
+ Eu quero quatro coleções, com o caminho do nome dizendo a função da cor. São
24
+ 47 variáveis no total, e os valores abaixo são a verdade: eles vieram do CSS
25
+ que está no ar, não de um resumo.
26
+
27
+ ### PSWEX Marca
28
+
29
+ Modo: Unico. 20 variáveis.
30
+
31
+ | Variável | Valor | Escopo | Code syntax |
32
+ |---|---|---|---|
33
+ | `principal/navy` | `#232F3E` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--navy)` |
34
+ | `principal/red` | `#C7273E` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--red)` |
35
+ | `principal/teal` | `#1F4768` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--teal)` |
36
+ | `secundaria/mint` | `#C1EDCC` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--mint)` |
37
+ | `secundaria/sky` | `#7CCFDB` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--sky)` |
38
+ | `secundaria/leaf` | `#669933` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--leaf)` |
39
+ | `secundaria/lime` | `#99CC33` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--lime)` |
40
+ | `variacao/navy-700` | `#35485F` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--navy-700)` |
41
+ | `variacao/navy-800` | `#2B3A4D` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--navy-800)` |
42
+ | `variacao/navy-900` | `#1B2531` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--navy-900)` |
43
+ | `variacao/navy-950` | `#19212C` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--navy-950)` |
44
+ | `variacao/red-600` | `#A92135` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--red-600)` |
45
+ | `variacao/red-700` | `#941D2E` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--red-700)` |
46
+ | `variacao/sky-800` | `#267F8C` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--sky-800)` |
47
+ | `variacao/leaf-800` | `#4A6F25` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--leaf-800)` |
48
+ | `neutro/charcoal` | `#353437` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--charcoal)` |
49
+ | `neutro/gray-dark` | `#4D4D4C` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--gray-dark)` |
50
+ | `neutro/gray-mid` | `#656565` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--gray-mid)` |
51
+ | `neutro/ice` | `#FFFCF1` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--ice)` |
52
+ | `neutro/offwhite` | `#F4F4EE` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--offwhite)` |
53
+
54
+ ### PSWEX Tema
55
+
56
+ Modo: Claro e Escuro. 16 variáveis.
57
+
58
+ | Variável | Claro | Escuro | Escopo | Code syntax |
59
+ |---|---|---|---|---|
60
+ | `fundo/bg` | `#FFFAFA` | `#12181F` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--bg)` |
61
+ | `fundo/surface` | `#FFFFFF` | `#1B242F` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--surface)` |
62
+ | `fundo/paper` | `#FFFFFF` | `#1B242F` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--paper)` |
63
+ | `fundo/snow` | `#FFFAFA` | `#151D26` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--snow)` |
64
+ | `fundo/beige` | `#F8F4E3` | `#1E2732` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--beige)` |
65
+ | `fundo/light` | `#F2F3F4` | `#1A222C` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--light)` |
66
+ | `fundo/teal-50` | `#E9F0F7` | `#17222E` | FRAME_FILL, SHAPE_FILL, STROKE_COLOR | `var(--teal-50)` |
67
+ | `texto/fg` | `#232F3E` | `#EEF3F8` | TEXT_FILL | `var(--fg)` |
68
+ | `texto/ink` | `#232F3E` | `#EEF3F8` | TEXT_FILL | `var(--ink)` |
69
+ | `texto/ink-2` | `#4D4D4C` | `#C3CFDC` | TEXT_FILL | `var(--ink-2)` |
70
+ | `texto/ink-3` | `#656565` | `#A3B2C2` | TEXT_FILL | `var(--ink-3)` |
71
+ | `texto/muted` | `#656565` | `#9FB0C2` | TEXT_FILL | `var(--muted)` |
72
+ | `acento/accent-txt` | `#C7273E` | `#F4808F` | TEXT_FILL | `var(--accent-txt)` |
73
+ | `acento/accent-2-txt` | `#1F4768` | `#8FC5DE` | TEXT_FILL | `var(--accent-2-txt)` |
74
+ | `linha/line` | `#D5DBE2` | `#2C3947` | STROKE_COLOR | `var(--line)` |
75
+ | `linha/line-300` | `#9CA7B4` | `#44566A` | STROKE_COLOR | `var(--line-300)` |
76
+
77
+ ### PSWEX Sobre cor
78
+
79
+ Modo: Unico. 6 variáveis.
80
+
81
+ | Variável | Valor | Escopo | Code syntax |
82
+ |---|---|---|---|
83
+ | `texto/lime-ink` | `#232F3E` | TEXT_FILL | `var(--lime-ink)` |
84
+ | `texto/on-bright` | `#232F3E` | TEXT_FILL | `var(--on-bright)` |
85
+ | `texto/ondark-200` | `#AFBCCC` | TEXT_FILL | `var(--ondark-200)` |
86
+ | `texto/ondark-400` | `#94A6BC` | TEXT_FILL | `var(--ondark-400)` |
87
+ | `texto/red-ondark` | `#F4808F` | TEXT_FILL | `var(--red-ondark)` |
88
+ | `linha/line-inv` | `rgba(196,219,241,.24)` | STROKE_COLOR | `var(--line-inv)` |
89
+
90
+ ### PSWEX Layout
91
+
92
+ Modo: Unico. 5 variáveis.
93
+
94
+ | Variável | Valor | Escopo | Code syntax |
95
+ |---|---|---|---|
96
+ | `medida/shell` | `1200.0` | WIDTH_HEIGHT, GAP | `var(--shell)` |
97
+ | `raio/r` | `14.0` | CORNER_RADIUS | `var(--r)` |
98
+ | `raio/r-lg` | `22.0` | CORNER_RADIUS | `var(--r-lg)` |
99
+ | `sombra/shadow` | `0 1px 3px rgba(35,47,62,.08),0 6px 14px -8px rgba(35,47,62,.12)` | nenhum | `var(--shadow)` |
100
+ | `sombra/shadow-lg` | `0 2px 6px rgba(35,47,62,.10),0 14px 28px -14px rgba(35,47,62,.18)` | nenhum | `var(--shadow-lg)` |
101
+
102
+ ## As regras que não podem ser quebradas
103
+
104
+ **1. Cor da coleção Marca nunca recebe `TEXT_FILL`.** Repare que nenhuma variável
105
+ de `PSWEX Marca` tem `TEXT_FILL` na lista de escopo. Isso é de propósito: é o que
106
+ faz o Figma não oferecer essas cores no seletor de cor de texto, e é o que impede
107
+ navy escrito em cima de navy. Se você achar que faltou, não é falta, é a regra.
108
+
109
+ **2. Texto em cima de cor de marca sai de `PSWEX Sobre cor`.** Botão lime leva
110
+ `texto/lime-ink`, que é navy. Branco em cima do lime dá 1,90:1 de contraste e
111
+ reprova. Texto em cima de navy leva `texto/ondark-200` ou `texto/ondark-400`.
112
+ Vermelho em cima de navy leva `texto/red-ondark`, porque o vermelho puro some lá.
113
+
114
+ **3. Só a coleção Tema tem dois modos.** As outras três têm modo único, porque
115
+ cor de marca, texto sobre cor e medida não mudam com o tema.
116
+
117
+ **4. Code syntax WEB sempre com `var()` em volta.** É `var(--navy)`, não `--navy`.
118
+ Sem isso o Dev Mode devolve um nome que não funciona colado no CSS.
119
+
120
+ ## Como migrar sem quebrar o arquivo
121
+
122
+ O arquivo já tem componentes montados que apontam para as variáveis antigas. A
123
+ ordem importa:
124
+
125
+ 1. Crie as coleções e as variáveis novas. Não apague nada ainda.
126
+ 2. Reaponte todo nó que usa variável antiga para a nova equivalente. Percorra
127
+ página por página e me devolva a contagem de nós reapontados em cada uma.
128
+ 3. Só depois de a contagem de uso das antigas chegar a zero, apague as antigas.
129
+ 4. Se sobrar alguma antiga com uso, me diga qual e onde, não apague por cima.
130
+
131
+ Nunca apague uma variável antes do passo 3. Se você não tiver certeza de que um
132
+ nó foi reapontado, pare e me pergunte.
133
+
134
+ ## Onde me mostrar o resultado
135
+
136
+ Depois de cada passo, me mande um screenshot da página e a lista de IDs do que
137
+ você criou ou alterou. No fim, me mande a lista das quatro coleções com a
138
+ contagem de variáveis de cada uma, para eu conferir contra os números daqui.