@riligar/agents-kit 1.20.0 → 1.21.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/.agent/rules/naming-conventions.md +17 -17
- package/.agent/skills/riligar-design-system/SKILL.md +97 -32
- package/.agent/skills/riligar-design-system/assets/theme.js +29 -15
- package/.agent/skills/riligar-design-system/references/anti-patterns.md +67 -18
- package/.agent/skills/riligar-design-system/references/design-system.md +125 -61
- package/.agent/skills/riligar-design-system/references/master-patterns.md +181 -13
- package/.agent/skills/riligar-design-system/references/visual-references.md +103 -43
- package/.agent/skills/riligar-dev-database/SKILL.md +15 -15
- package/.agent/skills/riligar-dev-database/references/connection.md +6 -8
- package/.agent/skills/riligar-dev-database/references/queries.md +25 -29
- package/.agent/skills/riligar-dev-database/references/schema.md +32 -18
- package/.agent/skills/riligar-dev-manager/SKILL.md +29 -29
- package/.agent/skills/riligar-infra-stripe/SKILL.md +46 -42
- package/.agent/skills/riligar-infra-stripe/references/stripe-database.md +62 -68
- package/package.json +1 -1
|
@@ -1,106 +1,170 @@
|
|
|
1
|
-
# Diretrizes de Design & Sistema Visual
|
|
1
|
+
# Diretrizes de Design & Sistema Visual Zen
|
|
2
2
|
|
|
3
|
-
> Baseado na
|
|
3
|
+
> Baseado na filosofia Zen: Content over Chrome, The Stage, Hierarquia Massiva.
|
|
4
4
|
|
|
5
|
-
## 1. Filosofia Visual:
|
|
5
|
+
## 1. Filosofia Visual: Zen
|
|
6
6
|
|
|
7
|
-
A interface
|
|
7
|
+
A interface é **invisível**. Ela recua para deixar o conteúdo brilhar. A estética é utilitária, limpa e focada — cada pixel serve ao dado.
|
|
8
8
|
|
|
9
|
-
- **
|
|
10
|
-
- **Estrutura:** O design depende de alinhamento preciso e espaço em branco
|
|
9
|
+
- **Content over Chrome:** Se um elemento não ajuda na leitura do dado, ele é removido.
|
|
10
|
+
- **Estrutura:** O design depende de alinhamento preciso e espaço em branco, não de caixas coloridas.
|
|
11
|
+
- **Restrição:** O Zen não é sobre o que você coloca, é sobre o que você decide não colocar.
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
---
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
## 2. Contextos: Stage vs Dense
|
|
16
|
+
|
|
17
|
+
### 🎭 Zen Stage
|
|
18
|
+
|
|
19
|
+
Para **landing pages, dashboards de métricas, onboarding, apresentações**.
|
|
20
|
+
|
|
21
|
+
Números e títulos são declarações de impacto. Inputs são discretos. O layout respira.
|
|
22
|
+
|
|
23
|
+
### 📊 Zen Dense
|
|
24
|
+
|
|
25
|
+
Para **admin panels, tabelas CRUD, formulários, configurações**.
|
|
26
|
+
|
|
27
|
+
Alta densidade de dados. Compactação. Eficiência na escaneabilidade.
|
|
28
|
+
|
|
29
|
+
Ambos compartilham a mesma alma — monocromia, zero ornamentos, Content over Chrome. A diferença está no **ritmo** e na **escala**.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 3. Tipografia
|
|
34
|
+
|
|
35
|
+
A tipografia é a **arma principal** do Zen.
|
|
15
36
|
**Família:** Montserrat (Geométrica e Moderna).
|
|
16
37
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
|
20
|
-
|
|
|
21
|
-
| **
|
|
22
|
-
| **
|
|
23
|
-
| **
|
|
38
|
+
### Stage
|
|
39
|
+
|
|
40
|
+
| Função | Peso | Tamanho | Tracking | Cor |
|
|
41
|
+
| :--------------------- | :--- | :------- | :-------- | :------------------- |
|
|
42
|
+
| **Títulos (H1/H2)** | 900 | 48-72px | `-0.04em` | Primária (`gray.9`) |
|
|
43
|
+
| **Labels** | 800 | 10-12px | `1.5px` | `gray.4` (uppercase) |
|
|
44
|
+
| **Big Type Metrics** | 900 | 64-120px | `-0.04em` | Primária (`gray.9`) |
|
|
45
|
+
| **Sufixos de Métrica** | 700 | 28-36px | Normal | `dimmed` |
|
|
24
46
|
|
|
25
|
-
|
|
47
|
+
### Dense
|
|
48
|
+
|
|
49
|
+
| Função | Peso | Cor | Tracking |
|
|
50
|
+
| :--------------------- | :--- | :--------------------- | :-------- |
|
|
51
|
+
| **Corpo / Dados** | 400 | `#11181C` (Primário) | Normal |
|
|
52
|
+
| **Cabeçalhos Tabela** | 500 | `#687076` (Secundário) | Normal |
|
|
53
|
+
| **Botões / Ações** | 500 | Variável | `-0.01em` |
|
|
54
|
+
| **Títulos (H3, H4)** | 600 | `#11181C` (Primário) | `-0.02em` |
|
|
55
|
+
| **Labels / Metadados** | 400 | `#737373` (Terciário) | Normal |
|
|
56
|
+
|
|
57
|
+
### Hierarquia de Cores de Texto
|
|
26
58
|
|
|
27
59
|
1. **Primária:** `#11181C` ou `#171717` (Quase preto, nunca `#000000`).
|
|
28
60
|
2. **Secundária:** `#687076` (Cinza neutro para suporte).
|
|
29
61
|
3. **Terciária:** `#B0B0B0` (Desabilitado ou placeholder).
|
|
30
62
|
|
|
31
|
-
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 4. Paleta de Cores & Superfícies
|
|
32
66
|
|
|
33
|
-
Uso estrito de monocromia
|
|
67
|
+
Uso estrito de monocromia. Cores semânticas apenas quando necessário para feedback.
|
|
34
68
|
|
|
35
|
-
- **Fundos
|
|
36
|
-
|
|
37
|
-
|
|
69
|
+
- **Fundos:**
|
|
70
|
+
- _App Base:_ `#FFFFFF` (Branco Puro) ou `#F9FAFB` (`gray.0`).
|
|
71
|
+
- _Sidebars / Headers:_ `#FAFAFA` ou `#F9FAFB`.
|
|
38
72
|
- **Bordas:**
|
|
39
|
-
|
|
40
|
-
- **Acentos
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
73
|
+
- _Padrão:_ `gray.2` (`#E5E7EB`). Sutil, 1px.
|
|
74
|
+
- **Acentos:**
|
|
75
|
+
- _Brand/Primary:_ `#000000` (Preto Sólido).
|
|
76
|
+
- _Feedback:_ Cores pastéis no fundo, texto saturado.
|
|
77
|
+
- _Erro:_ Bg `#FEF2F2` / Text `#991B1B`.
|
|
78
|
+
- _Sucesso:_ Bg `#F0FDF4` / Text `#166534`.
|
|
45
79
|
|
|
46
|
-
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 5. Componentes (UI Kit)
|
|
47
83
|
|
|
48
84
|
### Botões
|
|
49
85
|
|
|
50
86
|
- **Altura:** `32px` (Small/Dense) ou `36px` (Regular).
|
|
51
|
-
- **Border-Radius:** `6px`
|
|
52
|
-
- **
|
|
53
|
-
|
|
54
|
-
|
|
87
|
+
- **Border-Radius:** `6px` (md). Suave, mas não "pill".
|
|
88
|
+
- **Primary:** Fundo Preto, Texto Branco. Hover suave.
|
|
89
|
+
- **Secondary/Ghost:** Fundo Transparente. Hover com bg `gray.1`.
|
|
90
|
+
|
|
91
|
+
### Inputs — Dense
|
|
92
|
+
|
|
93
|
+
- **Borda:** `1px solid gray.2`.
|
|
94
|
+
- **Foco:** Borda escurecida (`dark.8`). Nunca glow neon forte.
|
|
95
|
+
- **Altura:** 32px. Compacto.
|
|
96
|
+
|
|
97
|
+
### Inputs — Stage (Zen)
|
|
98
|
+
|
|
99
|
+
- **Variant:** `unstyled`.
|
|
100
|
+
- **Estilo:** Apenas `border-bottom: 1px solid gray.2`.
|
|
101
|
+
- **Radius:** 0.
|
|
102
|
+
- **Foco:** Borda inferior escurecida.
|
|
55
103
|
|
|
56
104
|
### Tabelas & Listas
|
|
57
105
|
|
|
58
106
|
- **Estilo:** "Clean Rows".
|
|
59
107
|
- **Bordas:** Apenas linhas horizontais (`border-bottom`). Sem linhas verticais.
|
|
60
|
-
- **Hover:**
|
|
61
|
-
- **Padding:** Compacto (`py
|
|
108
|
+
- **Hover:** Cinza pálido (`gray.0`) ao passar o mouse.
|
|
109
|
+
- **Padding:** Compacto (`py="xs"`, `px="md"`) para alta densidade.
|
|
62
110
|
|
|
63
|
-
###
|
|
111
|
+
### Badges
|
|
64
112
|
|
|
65
|
-
- **
|
|
66
|
-
- **
|
|
113
|
+
- **Variant:** `light` com cores cinzas para sutileza.
|
|
114
|
+
- **Size:** `sm`. **Radius:** `sm`.
|
|
115
|
+
- **Alternativa Zen:** `variant="dot"` para minimizar ornamento.
|
|
67
116
|
|
|
68
|
-
|
|
117
|
+
### Drawers (Zen)
|
|
69
118
|
|
|
70
|
-
- **
|
|
71
|
-
- **
|
|
119
|
+
- **Posição:** Right Drawer para funcionalidades complexas (históricos, configurações).
|
|
120
|
+
- **Propósito:** Manter o centro da tela (o palco) vazio e limpo.
|
|
72
121
|
|
|
73
|
-
|
|
122
|
+
---
|
|
74
123
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
124
|
+
## 6. Layout & Espaçamento
|
|
125
|
+
|
|
126
|
+
### Stage
|
|
78
127
|
|
|
79
|
-
|
|
128
|
+
- **Container:** `size="xl"` centralizado.
|
|
129
|
+
- **Padding vertical:** `py={80}` — o palco precisa respirar.
|
|
130
|
+
- **Header:** Label (Small Caps) + Título (fw 900). Gap 4px entre eles.
|
|
80
131
|
|
|
81
|
-
|
|
132
|
+
### Dense
|
|
82
133
|
|
|
83
|
-
|
|
134
|
+
- **Respiro:** Margens generosas ao redor do container, densidade alta dentro dos componentes.
|
|
135
|
+
- **Navegação:** Sidebar fixa para contexto global, Topbar para contexto local.
|
|
84
136
|
|
|
85
|
-
|
|
86
|
-
`"Linear-style interface"`, `"Notion-like aesthetic"`, `"High density data"`, `"Clean minimalist SaaS"`, `"Monochrome color palette with subtle borders"`, `"Inter/Montserrat typography"`, `"1px border separation"`.
|
|
137
|
+
---
|
|
87
138
|
|
|
88
|
-
|
|
139
|
+
## 7. Micro-interações
|
|
89
140
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
4. **Botões:** Evite botões grandes e chamativos. O botão primário deve ser discreto (preto/branco), e os secundários devem ser quase invisíveis até o hover.
|
|
141
|
+
- **Animações:** Rápidas e invisíveis (150ms - 200ms ease-out).
|
|
142
|
+
- **Sombras:** Apenas para elevação (Modais, Dropdowns).
|
|
143
|
+
- _Drop Shadow:_ Suave e difusa (`0 4px 20px rgba(0,0,0,0.05)`).
|
|
94
144
|
|
|
95
|
-
|
|
145
|
+
---
|
|
96
146
|
|
|
97
|
-
|
|
147
|
+
## 8. Diretrizes para Geração via LLM
|
|
98
148
|
|
|
99
|
-
|
|
149
|
+
### Master Prompt (Zen)
|
|
100
150
|
|
|
101
|
-
|
|
151
|
+
> "Crie uma interface com estética Zen-Modern de alto impacto. Princípios: Conteúdo sobre Cromo (foco total na tipografia e dados). Paleta minimalista (Pure White backgrounds, Dark-9/Gray-9 texts). Hierarquia Massiva (Títulos em Bold/900 com letter-spacing -0.04em, Labels em Small Caps/LTS 1.5px). Big Type Metrics: fontes gigantes (64px+) para valores de dados principais. Inputs Minimalistas: estilo unstyled com apenas border-bottom. Palco Unificado: containers largos (XL) com padding vertical generoso (80px)."
|
|
152
|
+
|
|
153
|
+
### Keywords Essenciais
|
|
154
|
+
|
|
155
|
+
`"Zen-Modern interface"`, `"Content over Chrome"`, `"Big Type Metrics"`, `"High-impact minimalism"`, `"Stage layout"`, `"Monochrome color palette"`, `"Montserrat typography"`, `"1px border separation"`.
|
|
102
156
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
157
|
+
### Regras de Ouro
|
|
158
|
+
|
|
159
|
+
1. **NUNCA** use sombras coloridas ou efeitos "glow".
|
|
160
|
+
2. **NUNCA** use fundos saturados para containers.
|
|
161
|
+
3. **EVITE** cards com sombras pesadas. Use **bordas sutis** para separar.
|
|
162
|
+
4. **Botões:** Discretos. Primário preto/branco, secundários quase invisíveis até hover.
|
|
163
|
+
5. **Títulos Stage:** SEMPRE fw 900, ls -0.04em. Nunca abaixo de 800.
|
|
164
|
+
6. **Métricas:** Se é o dado principal, use Big Type (64px+).
|
|
165
|
+
|
|
166
|
+
### Tratamento de Casos Especiais
|
|
106
167
|
|
|
168
|
+
- **Empty States:** Ícone de linha fina (stroke 1.5px) cinza claro, título H3, botão de ação. Zero ilustrações 3D.
|
|
169
|
+
- **Modais:** Backdrop com blur, fundo branco sólido. Sem cabeçalhos coloridos.
|
|
170
|
+
- **Dashboards:** Big Numbers em monocromia com rótulos Small Caps. Gráficos limpos sem grid lines pesadas.
|
|
@@ -1,8 +1,181 @@
|
|
|
1
1
|
# Master Patterns: Mantine Clean Code
|
|
2
2
|
|
|
3
3
|
O código deve ser limpo. A customização visual vive no **Tema**, não no componente.
|
|
4
|
+
Padrões organizados por contexto: **Stage** (impacto) e **Dense** (admin).
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Zen Stage Patterns
|
|
9
|
+
|
|
10
|
+
### 1. Zen Stage Layout (O Palco)
|
|
11
|
+
|
|
12
|
+
```jsx
|
|
13
|
+
import { Container, Stack, Text, Title } from '@mantine/core'
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Zen Stage Layout — O Palco Unificado.
|
|
17
|
+
* Header = "Anúncio" (Label leve + Título pesado).
|
|
18
|
+
* Children = "Performance" (centro limpo).
|
|
19
|
+
*/
|
|
20
|
+
function ZenLayout({ label, title, children }) {
|
|
21
|
+
return (
|
|
22
|
+
<Container
|
|
23
|
+
size="xl"
|
|
24
|
+
py={80}
|
|
25
|
+
>
|
|
26
|
+
<Stack gap="xl">
|
|
27
|
+
{/* O Anúncio: Label + Título */}
|
|
28
|
+
<Stack gap={4}>
|
|
29
|
+
{/* Label em Small Caps — fw 800, uppercase, ls 1.5px */}
|
|
30
|
+
<Text
|
|
31
|
+
fz={11}
|
|
32
|
+
fw={800}
|
|
33
|
+
c="gray.4"
|
|
34
|
+
tt="uppercase"
|
|
35
|
+
lts="1.5px"
|
|
36
|
+
>
|
|
37
|
+
{label}
|
|
38
|
+
</Text>
|
|
39
|
+
{/* Título Massivo — fw 900, ls -0.04em */}
|
|
40
|
+
<Title
|
|
41
|
+
order={1}
|
|
42
|
+
fz={56}
|
|
43
|
+
fw={900}
|
|
44
|
+
lts="-0.04em"
|
|
45
|
+
lh={1}
|
|
46
|
+
>
|
|
47
|
+
{title}
|
|
48
|
+
</Title>
|
|
49
|
+
</Stack>
|
|
50
|
+
|
|
51
|
+
{/* A Performance: Conteúdo limpo */}
|
|
52
|
+
{children}
|
|
53
|
+
</Stack>
|
|
54
|
+
</Container>
|
|
55
|
+
)
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 2. Big Type Metric
|
|
60
|
+
|
|
61
|
+
```jsx
|
|
62
|
+
import { Stack, Text, Title } from '@mantine/core'
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Big Type Metric — Números como declarações de design.
|
|
66
|
+
* O valor é a estrela. O label é sutil.
|
|
67
|
+
*/
|
|
68
|
+
function BigMetric({ label, value, suffix }) {
|
|
69
|
+
return (
|
|
70
|
+
<Stack gap={0}>
|
|
71
|
+
{/* Label discreto */}
|
|
72
|
+
<Text
|
|
73
|
+
fz={10}
|
|
74
|
+
fw={800}
|
|
75
|
+
c="gray.4"
|
|
76
|
+
tt="uppercase"
|
|
77
|
+
lts="1.5px"
|
|
78
|
+
>
|
|
79
|
+
{label}
|
|
80
|
+
</Text>
|
|
81
|
+
{/* Valor massivo — 64-120px, fw 900, lh 1 */}
|
|
82
|
+
<Title
|
|
83
|
+
order={2}
|
|
84
|
+
fz={80}
|
|
85
|
+
fw={900}
|
|
86
|
+
lh={1}
|
|
87
|
+
lts="-0.04em"
|
|
88
|
+
>
|
|
89
|
+
{value}
|
|
90
|
+
{suffix && (
|
|
91
|
+
<Text
|
|
92
|
+
component="span"
|
|
93
|
+
fz={32}
|
|
94
|
+
fw={700}
|
|
95
|
+
c="dimmed"
|
|
96
|
+
>
|
|
97
|
+
{suffix}
|
|
98
|
+
</Text>
|
|
99
|
+
)}
|
|
100
|
+
</Title>
|
|
101
|
+
</Stack>
|
|
102
|
+
)
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### 3. Zen Input (Border-Bottom Only)
|
|
107
|
+
|
|
108
|
+
```jsx
|
|
109
|
+
import { TextInput } from '@mantine/core'
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Zen Input — Minimalismo absoluto.
|
|
113
|
+
* Apenas uma borda inferior. Sem decoração.
|
|
114
|
+
* Use no contexto Stage (landing pages, onboarding).
|
|
115
|
+
*/
|
|
116
|
+
function ZenInput(props) {
|
|
117
|
+
return (
|
|
118
|
+
<TextInput
|
|
119
|
+
variant="unstyled"
|
|
120
|
+
styles={{
|
|
121
|
+
input: {
|
|
122
|
+
borderBottom: '1px solid var(--mantine-color-gray-2)',
|
|
123
|
+
borderRadius: 0,
|
|
124
|
+
paddingBottom: 8,
|
|
125
|
+
},
|
|
126
|
+
}}
|
|
127
|
+
{...props}
|
|
128
|
+
/>
|
|
129
|
+
)
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### 4. Zen Page Header (O Anúncio)
|
|
134
|
+
|
|
135
|
+
```jsx
|
|
136
|
+
import { Stack, Text, Title, Group, Button } from '@mantine/core'
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Zen Page Header — O cabeçalho como anúncio.
|
|
140
|
+
* Usado no topo das views, dentro do ZenLayout.
|
|
141
|
+
*/
|
|
142
|
+
function ZenHeader({ label, title, action }) {
|
|
143
|
+
return (
|
|
144
|
+
<Group
|
|
145
|
+
justify="space-between"
|
|
146
|
+
align="flex-end"
|
|
147
|
+
>
|
|
148
|
+
<Stack gap={4}>
|
|
149
|
+
<Text
|
|
150
|
+
fz={11}
|
|
151
|
+
fw={800}
|
|
152
|
+
c="gray.4"
|
|
153
|
+
tt="uppercase"
|
|
154
|
+
lts="1.5px"
|
|
155
|
+
>
|
|
156
|
+
{label}
|
|
157
|
+
</Text>
|
|
158
|
+
<Title
|
|
159
|
+
order={2}
|
|
160
|
+
fz={48}
|
|
161
|
+
fw={900}
|
|
162
|
+
lts="-0.04em"
|
|
163
|
+
lh={1}
|
|
164
|
+
>
|
|
165
|
+
{title}
|
|
166
|
+
</Title>
|
|
167
|
+
</Stack>
|
|
168
|
+
{action}
|
|
169
|
+
</Group>
|
|
170
|
+
)
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Zen Dense Patterns
|
|
177
|
+
|
|
178
|
+
### 5. Sidebar (Clean)
|
|
6
179
|
|
|
7
180
|
```jsx
|
|
8
181
|
import { Stack, Box, Text, UnstyledButton, Group } from '@mantine/core'
|
|
@@ -10,9 +183,8 @@ import { IconHome, IconSettings } from '@tabler/icons-react'
|
|
|
10
183
|
|
|
11
184
|
function Sidebar() {
|
|
12
185
|
return (
|
|
13
|
-
// bg="gray.0" -> Layer 0 (Canvas)
|
|
14
|
-
// bd="solid gray.2" -> Layer 1 Separation
|
|
15
|
-
// p="sm" -> Layout Rhythm (Section) [Visual-Code Dictionary §1]
|
|
186
|
+
// bg="gray.0" -> Layer 0 (Canvas)
|
|
187
|
+
// bd="solid gray.2" -> Layer 1 Separation
|
|
16
188
|
<Box
|
|
17
189
|
w={260}
|
|
18
190
|
h="100vh"
|
|
@@ -40,14 +212,13 @@ function NavItem({ icon: Icon, label, active }) {
|
|
|
40
212
|
<UnstyledButton
|
|
41
213
|
data-active={active || undefined}
|
|
42
214
|
w="100%"
|
|
43
|
-
p="xs"
|
|
44
|
-
// Radius md (6px) -> Defined in theme, enforced here for clarity
|
|
215
|
+
p="xs"
|
|
45
216
|
style={{ borderRadius: 'var(--mantine-radius-md)' }}
|
|
46
217
|
bg={active ? 'white' : 'transparent'}
|
|
47
218
|
c={active ? 'text' : 'dimmed'}
|
|
48
219
|
>
|
|
49
220
|
<Group gap="xs">
|
|
50
|
-
{/*
|
|
221
|
+
{/* stroke 1.5 — padrão Zen */}
|
|
51
222
|
<Icon
|
|
52
223
|
size={16}
|
|
53
224
|
stroke={1.5}
|
|
@@ -64,14 +235,12 @@ function NavItem({ icon: Icon, label, active }) {
|
|
|
64
235
|
}
|
|
65
236
|
```
|
|
66
237
|
|
|
67
|
-
|
|
238
|
+
### 6. Tabela (Zero Props)
|
|
68
239
|
|
|
69
240
|
```jsx
|
|
70
241
|
import { Table, Text, Badge } from '@mantine/core'
|
|
71
242
|
|
|
72
|
-
//
|
|
73
|
-
// O <Table> já vem com spacing e borders configurados no tema.
|
|
74
|
-
// [Visual-Code Dictionary §3: Table Row Anatomy]
|
|
243
|
+
// O <Table> já vem com spacing e borders do tema.
|
|
75
244
|
function DenseTable({ data }) {
|
|
76
245
|
return (
|
|
77
246
|
<Table>
|
|
@@ -98,7 +267,7 @@ function DenseTable({ data }) {
|
|
|
98
267
|
}
|
|
99
268
|
```
|
|
100
269
|
|
|
101
|
-
|
|
270
|
+
### 7. Cards (Clean)
|
|
102
271
|
|
|
103
272
|
```jsx
|
|
104
273
|
import { Paper, Text, Group, Button, Stack, Box } from '@mantine/core'
|
|
@@ -106,7 +275,6 @@ import { Paper, Text, Group, Button, Stack, Box } from '@mantine/core'
|
|
|
106
275
|
function ContentCard() {
|
|
107
276
|
return (
|
|
108
277
|
// <Paper> já vem com border e radius corretos do tema
|
|
109
|
-
// [Visual-Code Dictionary §2: Layer 1 Card]
|
|
110
278
|
<Paper overflow="hidden">
|
|
111
279
|
<Box
|
|
112
280
|
p="md"
|
|
@@ -1,71 +1,131 @@
|
|
|
1
|
-
# Dicionário Visual (Visual-Code Dictionary)
|
|
1
|
+
# Dicionário Visual Zen (Visual-Code Dictionary)
|
|
2
2
|
|
|
3
3
|
Este documento traduz "Sensação Visual" em "Regras de Código". Use-o para eliminar a subjetividade.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Tipografia Zen (A Arma Principal)
|
|
8
|
+
|
|
9
|
+
A tipografia é o instrumento primário de impacto. Dois registros:
|
|
10
|
+
|
|
11
|
+
### Registro Stage (Impacto Teatral)
|
|
12
|
+
|
|
13
|
+
| Função | Peso | Tamanho | Tracking | Extras |
|
|
14
|
+
| :---------------------- | :--- | :------- | :-------- | :---------------------- |
|
|
15
|
+
| **Títulos (H1/H2)** | 900 | 48-72px | `-0.04em` | lh 1 |
|
|
16
|
+
| **Labels / Subtítulos** | 800 | 10-12px | `1.5px` | uppercase, cor `gray.4` |
|
|
17
|
+
| **Big Type Metrics** | 900 | 64-120px | `-0.04em` | lh 1 |
|
|
18
|
+
| **Sufixos de Métrica** | 700 | 28-36px | Normal | cor `dimmed` |
|
|
19
|
+
|
|
20
|
+
### Registro Dense (Admin/Dashboard)
|
|
21
|
+
|
|
22
|
+
| Função | Peso | Tamanho | Tracking | Extras |
|
|
23
|
+
| :--------------------- | :-------------- | :------ | :-------- | :------------- |
|
|
24
|
+
| **Corpo / Dados** | Regular (400) | 14px | Normal | cor primária |
|
|
25
|
+
| **Cabeçalhos Tabela** | Medium (500) | 12-13px | Normal | cor secundária |
|
|
26
|
+
| **Botões / Ações** | Medium (500) | 13px | `-0.01em` | — |
|
|
27
|
+
| **Títulos (H3/H4)** | Semi-Bold (600) | 16-20px | `-0.02em` | cor primária |
|
|
28
|
+
| **Labels / Metadados** | Regular (400) | 12px | Normal | cor terciária |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 2. Ritmo & Espaçamento (Layout Rhythms)
|
|
6
33
|
|
|
7
34
|
A densidade do RiLiGar é definida matematicamente. Não adivinhe, use estas medidas.
|
|
8
35
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
| **
|
|
14
|
-
| **
|
|
15
|
-
| **
|
|
36
|
+
### Zen Dense (Componentes Admin)
|
|
37
|
+
|
|
38
|
+
| Nível | Medida | Token Mantine | Onde Usar |
|
|
39
|
+
| :------------ | :------ | :------------------- | :------------------------------------------------------ |
|
|
40
|
+
| **Micro** | `4px` | `gap="xs"` (half) | Espaço entre Ícone e Texto. |
|
|
41
|
+
| **Component** | `8px` | `p="xs"`, `gap="xs"` | Padding interno de Botões, Inputs, Table Cells. |
|
|
42
|
+
| **Flow** | `12px` | `gap={12}` | Espaço entre elementos de formulário ou lista de cards. |
|
|
43
|
+
| **Section** | `16px` | `p="md"`, `gap="md"` | Padding padrão de Cards, Modais e Sidebars. |
|
|
44
|
+
| **Layout** | `24px+` | `p="lg"`, `gap="lg"` | Margens da página, separação de grandes blocos. |
|
|
16
45
|
|
|
17
|
-
|
|
46
|
+
### Zen Stage (Palco)
|
|
18
47
|
|
|
19
|
-
|
|
48
|
+
| Nível | Medida | Token Mantine | Onde Usar |
|
|
49
|
+
| :-------------- | :----- | :------------ | :----------------------------------------------- |
|
|
50
|
+
| **Label-Title** | `4px` | `gap={4}` | Entre Label (Small Caps) e Título pesado. |
|
|
51
|
+
| **Section** | `xl` | `gap="xl"` | Entre header e conteúdo do palco. |
|
|
52
|
+
| **Stage** | `80px` | `py={80}` | Padding vertical do palco (Container principal). |
|
|
53
|
+
| **Container** | `xl` | `size="xl"` | Largura do palco central. |
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 3. Regra das 3 Camadas (Depth Stacking)
|
|
58
|
+
|
|
59
|
+
Para evitar o visual "chapado", use esta hierarquia estrita.
|
|
20
60
|
|
|
21
61
|
### Layer 0: O Canvas (Fundo)
|
|
22
62
|
|
|
23
|
-
-
|
|
24
|
-
-
|
|
63
|
+
- **Cor:** `bg="gray.0"` (`#F9FAFB` Light / Dark Auto-adapt).
|
|
64
|
+
- **Uso:** O fundo de toda a aplicação. Nunca use branco puro (`#FFF`) no fundo da página.
|
|
25
65
|
|
|
26
66
|
### Layer 1: O Conteúdo (Cards/Surface)
|
|
27
67
|
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
68
|
+
- **Cor:** `bg="white"` (Light) / `bg="gray.9"` (Dark).
|
|
69
|
+
- **Borda:** `bd="1px solid gray.2"` (Essencial para recorte).
|
|
70
|
+
- **Sombra:** `shadow="none"` (A borda faz o trabalho de separação).
|
|
71
|
+
- **Radius:** `radius="lg"` (8px).
|
|
32
72
|
|
|
33
73
|
### Layer 2: O Feedback (Hover/Overlay)
|
|
34
74
|
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
75
|
+
- **Hover:** `bg="gray.0"` (Interação sutil).
|
|
76
|
+
- **Active:** `bg="gray.1"` (Seleção).
|
|
77
|
+
- **Overlay:** `shadow="lg"` + `bd="gray.2"` (Apenas para Popovers e Modais).
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 4. Anatomia Atômica (Component Specifications)
|
|
82
|
+
|
|
83
|
+
### Sidebar Item (Linear Style) — Dense
|
|
84
|
+
|
|
85
|
+
- **Altura:** `32px` ou `28px` (Ultra-denso).
|
|
86
|
+
- **Padding:** `px="xs"` (8px horizontal).
|
|
87
|
+
- **Radius:** `radius="md"` (6px).
|
|
88
|
+
- **Fonte:** `size="sm"` (13px), `fw={500}`.
|
|
89
|
+
- **Cor:** Default `c="dimmed"`, Active `c="text"`, Hover `bg="gray.1"`.
|
|
90
|
+
|
|
91
|
+
### Table Row (Notion Style) — Dense
|
|
38
92
|
|
|
39
|
-
|
|
93
|
+
- **Altura:** `36px` (Conteúdo + Padding).
|
|
94
|
+
- **Borda:** `borderBottom: '1px solid gray.1'` (Nota: gray.1, mais sutil que a borda do card).
|
|
95
|
+
- **Header:** `c="dimmed"`, `fw={600}`, `fz="xs"` (12px), `textTransform="uppercase"`.
|
|
96
|
+
- **Cell:** `fz="sm"` (13px ou 14px).
|
|
40
97
|
|
|
41
|
-
|
|
98
|
+
### Page Header — Dense
|
|
42
99
|
|
|
43
|
-
|
|
100
|
+
- **Altura:** `48px` ou `56px`.
|
|
101
|
+
- **Fundo:** `bg="gray.0"` (Transparente/Blur opcional).
|
|
102
|
+
- **Borda:** `borderBottom: '1px solid gray.2'`.
|
|
103
|
+
- **Conteúdo:** Título `h4` (`fw={600}`), Ações à direita.
|
|
44
104
|
|
|
45
|
-
|
|
46
|
-
- **Padding:** `px="xs"` (8px horizontal).
|
|
47
|
-
- **Radius:** `radius="md"` (6px).
|
|
48
|
-
- **Fonte:** `size="sm"` (13px), `fw={500}`.
|
|
49
|
-
- **Cor:** Default `c="dimmed"`, Active `c="text"`, Hover `bg="gray.1"`.
|
|
105
|
+
### Zen Header — Stage
|
|
50
106
|
|
|
51
|
-
|
|
107
|
+
- **Label:** fz 11px, fw 800, uppercase, lts "1.5px", c "gray.4".
|
|
108
|
+
- **Título:** fz 48-72px, fw 900, lts "-0.04em", lh 1.
|
|
109
|
+
- **Gap:** 4px entre label e título.
|
|
110
|
+
- **Layout:** Group com ações alinhadas ao flex-end à direita.
|
|
52
111
|
|
|
53
|
-
|
|
54
|
-
- **Borda:** `borderBottom: '1px solid gray.1'` (Nota: gray.1, mais sutil que a borda do card).
|
|
55
|
-
- **Header:** `c="dimmed"`, `fw={600}`, `fz="xs"` (12px), `textTransform="uppercase"`.
|
|
56
|
-
- **Cell:** `fz="sm"` (13px ou 14px).
|
|
112
|
+
### Zen Input — Stage
|
|
57
113
|
|
|
58
|
-
|
|
114
|
+
- **Variant:** `unstyled`.
|
|
115
|
+
- **Estilo:** Apenas `border-bottom: 1px solid gray.2`.
|
|
116
|
+
- **Radius:** 0.
|
|
117
|
+
- **Padding:** `pb={8}`.
|
|
59
118
|
|
|
60
|
-
|
|
61
|
-
- **Fundo:** `bg="gray.0"` (Transparente/Blur opcional).
|
|
62
|
-
- **Borda:** `borderBottom: '1px solid gray.2'`.
|
|
63
|
-
- **Conteúdo:** Título `h4` (`fw={600}`), Ações à direita.
|
|
119
|
+
---
|
|
64
120
|
|
|
65
|
-
##
|
|
121
|
+
## 5. Nuances de "Excellence"
|
|
66
122
|
|
|
67
123
|
1. **Ícones:** Sempre use `stroke={1.5}`. Ícones mais grossos (2px) parecem "infantis" neste design system. Tamanho padrão `16px` ou `18px`.
|
|
68
|
-
2. **Tracking:**
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
3. **
|
|
124
|
+
2. **Tracking Stage:**
|
|
125
|
+
- Títulos: `letter-spacing: -0.04em` (Aperta o título, visual premium).
|
|
126
|
+
- Labels: `letter-spacing: 1.5px` (Small Caps com respiro).
|
|
127
|
+
3. **Tracking Dense:**
|
|
128
|
+
- Títulos (H3-H4): `letter-spacing: -0.02em`.
|
|
129
|
+
- Botões/Labels: `letter-spacing: -0.005em`.
|
|
130
|
+
4. **Bordas:** Nunca use `#000` ou `#DDD`. Use sempre o token `gray.2` do tema.
|
|
131
|
+
5. **Métricas:** Transforme números em Big Type. Se um número é o dado mais importante da tela, ele merece 64px+ de tamanho.
|